diff options
Diffstat (limited to 'src')
155 files changed, 29784 insertions, 11777 deletions
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 5e832aba0..3c07cc227 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1364,24 +1364,24 @@ static void BattleAICmd_get_ability(void) return; } - if (gBaseStats[gBattleMons[battlerId].species].ability1 != ABILITY_NONE) + if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE) { - if (gBaseStats[gBattleMons[battlerId].species].ability2 != ABILITY_NONE) + if (gBaseStats[gBattleMons[battlerId].species].abilities[1] != ABILITY_NONE) { // AI has no knowledge of opponent, so it guesses which ability. if (Random() & 1) - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability1; + AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[0]; else - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability2; + AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[1]; } else { - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability1; // It's definitely ability 1. + AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[0]; // It's definitely ability 1. } } else { - AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability2; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1. + AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].abilities[1]; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1. } } else @@ -1412,15 +1412,15 @@ static void BattleAICmd_check_ability(void) { ability = gBattleMons[battlerId].ability; } - else if (gBaseStats[gBattleMons[battlerId].species].ability1 != ABILITY_NONE) + else if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != ABILITY_NONE) { - if (gBaseStats[gBattleMons[battlerId].species].ability2 != ABILITY_NONE) + if (gBaseStats[gBattleMons[battlerId].species].abilities[1] != ABILITY_NONE) { u8 abilityDummyVariable = ability; // Needed to match. - if (gBaseStats[gBattleMons[battlerId].species].ability1 != abilityDummyVariable - && gBaseStats[gBattleMons[battlerId].species].ability2 != abilityDummyVariable) + if (gBaseStats[gBattleMons[battlerId].species].abilities[0] != abilityDummyVariable + && gBaseStats[gBattleMons[battlerId].species].abilities[1] != abilityDummyVariable) { - ability = gBaseStats[gBattleMons[battlerId].species].ability1; + ability = gBaseStats[gBattleMons[battlerId].species].abilities[0]; } else { @@ -1429,12 +1429,12 @@ static void BattleAICmd_check_ability(void) } else { - ability = gBaseStats[gBattleMons[battlerId].species].ability1; + ability = gBaseStats[gBattleMons[battlerId].species].abilities[0]; } } else { - ability = gBaseStats[gBattleMons[battlerId].species].ability2; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1. + ability = gBaseStats[gBattleMons[battlerId].species].abilities[1]; // AI can't actually reach this part since no pokemon has ability 2 and no ability 1. } } else diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index de798eee3..cd31293f8 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -93,7 +93,7 @@ static bool8 ShouldSwitchIfWonderGuard(void) continue; GetMonData(&party[i], MON_DATA_SPECIES); // Unused return value. - GetMonData(&party[i], MON_DATA_ALT_ABILITY); // Unused return value. + GetMonData(&party[i], MON_DATA_ABILITY_NUM); // Unused return value. for (opposingBattler = GetBattlerAtPosition(opposingPosition), j = 0; j < MAX_MON_MOVES; j++) { @@ -197,10 +197,10 @@ static bool8 FindMonThatAbsorbsOpponentsMove(void) continue; species = GetMonData(&party[i], MON_DATA_SPECIES); - if (GetMonData(&party[i], MON_DATA_ALT_ABILITY) != 0) - monAbility = gBaseStats[species].ability2; + if (GetMonData(&party[i], MON_DATA_ABILITY_NUM) != 0) + monAbility = gBaseStats[species].abilities[1]; else - monAbility = gBaseStats[species].ability1; + monAbility = gBaseStats[species].abilities[0]; if (absorbingTypeAbility == monAbility && Random() & 1) { @@ -392,10 +392,10 @@ static bool8 FindMonWithFlagsAndSuperEffective(u8 flags, u8 moduloPercent) continue; species = GetMonData(&party[i], MON_DATA_SPECIES); - if (GetMonData(&party[i], MON_DATA_ALT_ABILITY) != 0) - monAbility = gBaseStats[species].ability2; + if (GetMonData(&party[i], MON_DATA_ABILITY_NUM) != 0) + monAbility = gBaseStats[species].abilities[1]; else - monAbility = gBaseStats[species].ability1; + monAbility = gBaseStats[species].abilities[0]; moveFlags = AI_TypeCalc(gLastLandedMoves[gActiveBattler], species, monAbility); if (moveFlags & flags) diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index 49bb0216b..b3a67a509 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -5315,21 +5315,19 @@ static void sub_8102D8C(s16 a, s16 b, s16* c, s16* d, s8 e) static void sub_8102DE4(struct Sprite* sprite) { - int b; - s16 a; - int c; + s16 y, yDelta; u8 index; + sprite->data[0]++; - b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); + yDelta = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8); sprite->data[4] += sprite->data[6]; sprite->data[5] += sprite->data[7]; sprite->pos1.x = sprite->data[4] >> 4; sprite->pos1.y = sprite->data[5] >> 4; - sprite->pos2.y = Sin(b, 15); - a = (u16)sprite->pos1.y; - c = (u16)sprite->pos1.x; + sprite->pos2.y = Sin(yDelta, 15); - if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80) + y = sprite->pos1.y; + if (sprite->pos1.x < -16 || sprite->pos1.x > 256 || y < -16 || y > 128) { DestroySpriteAndMatrix(sprite); } @@ -5350,12 +5348,8 @@ static void sub_8102DE4(struct Sprite* sprite) void sub_8102EB0(struct Sprite* sprite) { - int a; if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) - { - a = gBattleAnimArgs[1]; - (u16)gBattleAnimArgs[1] = -a; - } + gBattleAnimArgs[1] *= -1; sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1]; sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2]; @@ -5541,8 +5535,8 @@ static void sub_8103300(struct Sprite* sprite) static void sub_8103320(struct Sprite* sprite) { - s16 temp; - s16 temp2; + s16 x1, x2; + sprite->data[1] += 4; if (sprite->data[1] > 254) { @@ -5564,20 +5558,21 @@ static void sub_8103320(struct Sprite* sprite) if (sprite->data[1] > 0x9F) sprite->subpriority = sprite->data[2]; - temp = gSineTable[sprite->data[1]]; - sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1); + x1 = gSineTable[sprite->data[1]]; + x2 = x1 >> 3; + sprite->pos2.x = (x1 >> 3) + (x2 >> 1); } void sub_8103390(struct Sprite* sprite) { - u8 bank; + u8 battler; if (gBattleAnimArgs[0] == 0) - bank = gBattleAnimAttacker; + battler = gBattleAnimAttacker; else - bank = gBattleAnimTarget; + battler = gBattleAnimTarget; - sub_810310C(bank, sprite); - if (GetBattlerSide(bank) == B_SIDE_PLAYER) + sub_810310C(battler, sprite); + if (GetBattlerSide(battler) == B_SIDE_PLAYER) { StartSpriteAnim(sprite, 0); sprite->data[0] = 2; diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index ab765b8c1..5d79a9e6b 100755 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -2504,13 +2504,10 @@ void sub_815BE04(struct Sprite *sprite) static void sub_815BF44(struct Sprite *sprite) { - int var0; - s8 var1; - - var0 = (u16)sprite->data[2] + (u16)sprite->data[3]; - var1 = var0 >> 8; - sprite->pos2.y -= var1; - sprite->data[3] = var0 & 0xFF; + s16 delta = sprite->data[3] + sprite->data[2]; + sprite->pos2.y -= delta >> 8; + sprite->data[3] += sprite->data[2]; + sprite->data[3] &= 0xFF; if (sprite->data[4] == 0 && sprite->pos2.y < -8) { gSprites[sprite->data[6]].invisible = 0; @@ -2543,19 +2540,12 @@ static void sub_815BFF4(struct Sprite *sprite) static void sub_815C050(struct Sprite *sprite) { - u16 d2; - register u16 d3 asm("r1"); - int var0; - s8 var1; - if (!sprite->invisible) { - d2 = sprite->data[2]; - d3 = sprite->data[3]; - var0 = d2 + d3; - var1 = var0 >> 8; - sprite->pos2.y -= var1; - sprite->data[3] = var0 & 0xFF; + s16 delta = sprite->data[3] + sprite->data[2]; + sprite->pos2.y -= delta >> 8; + sprite->data[3] += sprite->data[2]; + sprite->data[3] &= 0xFF; if (--sprite->data[1] == -1) { sprite->invisible = 1; @@ -4322,7 +4312,7 @@ static void AnimSmellingSaltExclamationStep(struct Sprite *sprite) // Claps a hand several times. // arg 0: which hand -// arg 1: +// arg 1: void AnimHelpingHandClap(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index c6058204d..a667daecf 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -2037,7 +2037,7 @@ u8 sub_80A8394(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000); if (!isBackpic) { - LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); if (a10 == 1 || sub_80688F8(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) LoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->field_17C, @@ -2053,7 +2053,7 @@ u8 sub_80A8394(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority } else { - LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); if (a10 == 1 || sub_80688F8(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) LoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], gMonSpritesGfxPtr->field_17C, diff --git a/src/battle_anim_special.c b/src/battle_anim_special.c index 740340d14..6780f0a32 100755 --- a/src/battle_anim_special.c +++ b/src/battle_anim_special.c @@ -2029,7 +2029,7 @@ void sub_8172EF0(u8 battler, struct Pokemon *mon) if (IsBattlerSpriteVisible(battler)) { shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); - if (shinyValue < 8) + if (shinyValue < SHINY_ODDS) isShiny = TRUE; if (isShiny) diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 3fb5da9dc..d3842e416 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -602,7 +602,7 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst) battleMon.spAttack = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK); battleMon.spDefense = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF); battleMon.isEgg = GetMonData(&gEnemyParty[monId], MON_DATA_IS_EGG); - battleMon.altAbility = GetMonData(&gEnemyParty[monId], MON_DATA_ALT_ABILITY); + battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname); StringCopy10(battleMon.nickname, nickname); diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 6fc73a604..1c92aaaad 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -487,7 +487,7 @@ static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst) battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); battleMon.isEgg = GetMonData(&gPlayerParty[monId], MON_DATA_IS_EGG); - battleMon.altAbility = GetMonData(&gPlayerParty[monId], MON_DATA_ALT_ABILITY); + battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); StringCopy10(battleMon.nickname, nickname); diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 392811327..e096536c9 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -585,7 +585,7 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst) battleMon.spAttack = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK); battleMon.spDefense = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF); battleMon.isEgg = GetMonData(&gEnemyParty[monId], MON_DATA_IS_EGG); - battleMon.altAbility = GetMonData(&gEnemyParty[monId], MON_DATA_ALT_ABILITY); + battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname); StringCopy10(battleMon.nickname, nickname); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index e4b5b5c18..b73bfc36f 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1628,7 +1628,7 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst) battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); battleMon.isEgg = GetMonData(&gPlayerParty[monId], MON_DATA_IS_EGG); - battleMon.altAbility = GetMonData(&gPlayerParty[monId], MON_DATA_ALT_ABILITY); + battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); StringCopy10(battleMon.nickname, nickname); diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c index 0ec21fd22..e625f24de 100644 --- a/src/battle_controller_player_partner.c +++ b/src/battle_controller_player_partner.c @@ -672,7 +672,7 @@ static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst) battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); battleMon.isEgg = GetMonData(&gPlayerParty[monId], MON_DATA_IS_EGG); - battleMon.altAbility = GetMonData(&gPlayerParty[monId], MON_DATA_ALT_ABILITY); + battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); StringCopy10(battleMon.nickname, nickname); diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 69d840020..b21d8288c 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -584,7 +584,7 @@ static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst) battleMon.spAttack = GetMonData(&gEnemyParty[monId], MON_DATA_SPATK); battleMon.spDefense = GetMonData(&gEnemyParty[monId], MON_DATA_SPDEF); battleMon.isEgg = GetMonData(&gEnemyParty[monId], MON_DATA_IS_EGG); - battleMon.altAbility = GetMonData(&gEnemyParty[monId], MON_DATA_ALT_ABILITY); + battleMon.abilityNum = GetMonData(&gEnemyParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gEnemyParty[monId], MON_DATA_OT_ID); GetMonData(&gEnemyParty[monId], MON_DATA_NICKNAME, nickname); StringCopy10(battleMon.nickname, nickname); diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index 95683225e..b59a4f25d 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -567,7 +567,7 @@ static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst) battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); battleMon.isEgg = GetMonData(&gPlayerParty[monId], MON_DATA_IS_EGG); - battleMon.altAbility = GetMonData(&gPlayerParty[monId], MON_DATA_ALT_ABILITY); + battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); StringCopy10(battleMon.nickname, nickname); diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 6a5b23e59..f7035540b 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -485,7 +485,7 @@ static u32 CopyWallyMonData(u8 monId, u8 *dst) battleMon.spAttack = GetMonData(&gPlayerParty[monId], MON_DATA_SPATK); battleMon.spDefense = GetMonData(&gPlayerParty[monId], MON_DATA_SPDEF); battleMon.isEgg = GetMonData(&gPlayerParty[monId], MON_DATA_IS_EGG); - battleMon.altAbility = GetMonData(&gPlayerParty[monId], MON_DATA_ALT_ABILITY); + battleMon.abilityNum = GetMonData(&gPlayerParty[monId], MON_DATA_ABILITY_NUM); battleMon.otId = GetMonData(&gPlayerParty[monId], MON_DATA_OT_ID); GetMonData(&gPlayerParty[monId], MON_DATA_NICKNAME, nickname); StringCopy10(battleMon.nickname, nickname); diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 29272c19a..4b5bb7a8a 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -819,15 +819,11 @@ static void Task_HandleSendLinkBuffersData(u8 taskId) } } -// fix me void sub_8033648(void) { u8 i; s32 j; - u16 r6; u8 *recvBuffer; - u8 *dest; - u8 *src; if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & BATTLE_TYPE_20)) { @@ -838,25 +834,24 @@ void sub_8033648(void) { ResetBlockReceivedFlag(i); recvBuffer = (u8 *)gBlockRecvBuffer[i]; - #ifndef NONMATCHING - asm(""); - recvBuffer = (u8 *)&gBlockRecvBuffer[i]; - #endif - r6 = gBlockRecvBuffer[i][2]; - - if (gTasks[sLinkReceiveTaskId].data[14] + 9 + r6 > 0x1000) { - gTasks[sLinkReceiveTaskId].data[12] = gTasks[sLinkReceiveTaskId].data[14]; - gTasks[sLinkReceiveTaskId].data[14] = 0; - } + u8 *dest, *src; + u16 r6 = gBlockRecvBuffer[i][2]; + + if (gTasks[sLinkReceiveTaskId].data[14] + 9 + r6 > 0x1000) + { + gTasks[sLinkReceiveTaskId].data[12] = gTasks[sLinkReceiveTaskId].data[14]; + gTasks[sLinkReceiveTaskId].data[14] = 0; + } - dest = &gLinkBattleRecvBuffer[gTasks[sLinkReceiveTaskId].data[14]]; - src = recvBuffer; + dest = &gLinkBattleRecvBuffer[gTasks[sLinkReceiveTaskId].data[14]]; + src = recvBuffer; - for (j = 0; j < r6 + 8; j++) - dest[j] = src[j]; + for (j = 0; j < r6 + 8; j++) + dest[j] = src[j]; - gTasks[sLinkReceiveTaskId].data[14] = gTasks[sLinkReceiveTaskId].data[14] + r6 + 8; + gTasks[sLinkReceiveTaskId].data[14] = gTasks[sLinkReceiveTaskId].data[14] + r6 + 8; + } } } } diff --git a/src/battle_dome.c b/src/battle_dome.c index 95fce49a3..1c116467d 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -1024,13 +1024,13 @@ static const union AnimCmd gUnknown_0860D020[] = static const union AnimCmd gUnknown_0860D028[] = { - ANIMCMD_FRAME(18, 129, .vFlip = TRUE), + ANIMCMD_FRAME(18, 1, .vFlip = TRUE), ANIMCMD_END, }; static const union AnimCmd gUnknown_0860D030[] = { - ANIMCMD_FRAME(16, 65, .hFlip = TRUE), + ANIMCMD_FRAME(16, 1, .hFlip = TRUE), ANIMCMD_END, }; @@ -2903,7 +2903,7 @@ static int GetTypeEffectivenessPoints(int move, int targetSpecies, int arg2) defType1 = gBaseStats[targetSpecies].type1; defType2 = gBaseStats[targetSpecies].type2; - defAbility = gBaseStats[targetSpecies].ability1; + defAbility = gBaseStats[targetSpecies].abilities[0]; moveType = gBattleMoves[move].type; if (defAbility == ABILITY_LEVITATE && moveType == TYPE_GROUND) @@ -5447,9 +5447,9 @@ static u16 GetWinningMove(int winnerTournamentId, int loserTournamentId, u8 roun targetSpecies = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[loserTournamentId][k]].species; if (var & 1) - targetAbility = gBaseStats[targetSpecies].ability2; + targetAbility = gBaseStats[targetSpecies].abilities[1]; else - targetAbility = gBaseStats[targetSpecies].ability1; + targetAbility = gBaseStats[targetSpecies].abilities[0]; var = AI_TypeCalc(moveIds[i * 4 + j], targetSpecies, targetAbility); if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE && var & MOVE_RESULT_SUPER_EFFECTIVE) diff --git a/src/battle_factory.c b/src/battle_factory.c index d08ffe6e6..6c249bccc 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -16,7 +16,7 @@ #include "constants/moves.h" // IWRAM bss -static IWRAM_DATA bool8 sPerformedRentalSwap; +static bool8 sPerformedRentalSwap; // This file's functions. static void InitFactoryChallenge(void); @@ -373,7 +373,7 @@ static void SetRentalsToOpponentParty(void) gSaveBlock2Ptr->frontier.rentalMons[i + 3].monId = gUnknown_03006298[i]; gSaveBlock2Ptr->frontier.rentalMons[i + 3].ivs = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ATK_IV, NULL); gSaveBlock2Ptr->frontier.rentalMons[i + 3].personality = GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY, NULL); - gSaveBlock2Ptr->frontier.rentalMons[i + 3].abilityBit = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ALT_ABILITY, NULL); + gSaveBlock2Ptr->frontier.rentalMons[i + 3].abilityNum = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ABILITY_NUM, NULL); SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[gUnknown_03006298[i]].itemTableId]); } } @@ -439,7 +439,7 @@ static void SetPlayerAndOpponentParties(void) SetMonMoveAvoidReturn(&gPlayerParty[i], gFacilityTrainerMons[monSetId].moves[k], k); SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &friendship); SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); - SetMonData(&gPlayerParty[i], MON_DATA_ALT_ABILITY, &gSaveBlock2Ptr->frontier.rentalMons[i].abilityBit); + SetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM, &gSaveBlock2Ptr->frontier.rentalMons[i].abilityNum); } } @@ -478,7 +478,7 @@ static void SetPlayerAndOpponentParties(void) for (k = 0; k < MAX_MON_MOVES; k++) SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monSetId].moves[k], k); SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId]); - SetMonData(&gEnemyParty[i], MON_DATA_ALT_ABILITY, &gSaveBlock2Ptr->frontier.rentalMons[i + 3].abilityBit); + SetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM, &gSaveBlock2Ptr->frontier.rentalMons[i + 3].abilityNum); } break; } diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c index 02804ba0b..f56442432 100644 --- a/src/battle_factory_screen.c +++ b/src/battle_factory_screen.c @@ -227,9 +227,9 @@ static EWRAM_DATA u8 *sSwapMenuTilemapBuffer = NULL; static EWRAM_DATA u8 *sSwapMonCardBgTilemapBuffer = NULL; // IWRAM bss -static IWRAM_DATA struct FactorySelectMonsStruct *sFactorySelectScreen; -static IWRAM_DATA void (*sSwap_CurrentTableFunc)(u8 taskId); -static IWRAM_DATA struct FactorySwapMonsStruct *sFactorySwapScreen; +static struct FactorySelectMonsStruct *sFactorySelectScreen; +static void (*sSwap_CurrentTableFunc)(u8 taskId); +static struct FactorySwapMonsStruct *sFactorySwapScreen; // IWRAM common u8 (*gUnknown_030062E8)(void); @@ -1742,7 +1742,7 @@ static void Select_CopyMonsToPlayerParty(void) gPlayerParty[i] = sFactorySelectScreen->mons[j].monData; gSaveBlock2Ptr->frontier.rentalMons[i].monId = sFactorySelectScreen->mons[j].monSetId; gSaveBlock2Ptr->frontier.rentalMons[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY, NULL); - gSaveBlock2Ptr->frontier.rentalMons[i].abilityBit = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ALT_ABILITY, NULL); + gSaveBlock2Ptr->frontier.rentalMons[i].abilityNum = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ABILITY_NUM, NULL); gSaveBlock2Ptr->frontier.rentalMons[i].ivs = GetBoxMonData(&gPlayerParty[i].box, MON_DATA_ATK_IV, NULL); break; } @@ -2266,7 +2266,7 @@ static void CopySwappedMonData(void) gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].monId = gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->enemyMonId + 3].monId; gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].ivs = gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->enemyMonId + 3].ivs; gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].personality = GetMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId], MON_DATA_PERSONALITY, NULL); - gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].abilityBit = GetBoxMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId].box, MON_DATA_ALT_ABILITY, NULL); + gSaveBlock2Ptr->frontier.rentalMons[sFactorySwapScreen->playerMonId].abilityNum = GetBoxMonData(&gEnemyParty[sFactorySwapScreen->enemyMonId].box, MON_DATA_ABILITY_NUM, NULL); } static void Task_FromSwapScreenToSummaryScreen(u8 taskId) diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index d6b1b6dee..cdd7e8158 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -534,7 +534,7 @@ void BattleLoadOpponentMonSpriteGfx(struct Pokemon *mon, u8 battlerId) if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE) lzPaletteData = GetMonFrontSpritePal(mon); else - lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality); + lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality); LZDecompressWram(lzPaletteData, gDecompressionBuffer); LoadPalette(gDecompressionBuffer, paletteOffset, 0x20); @@ -597,7 +597,7 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId) if (gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies == SPECIES_NONE) lzPaletteData = GetMonFrontSpritePal(mon); else - lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality); + lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, otId, monsPersonality); LZDecompressWram(lzPaletteData, gDecompressionBuffer); LoadPalette(gDecompressionBuffer, paletteOffset, 0x20); @@ -918,7 +918,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform dst = (void *)(VRAM + 0x10000 + gSprites[gBattlerSpriteIds[battlerAtk]].oam.tileNum * 32); DmaCopy32(3, src, dst, 0x800); paletteOffset = 0x100 + battlerAtk * 16; - lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue); + lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(targetSpecies, otId, personalityValue); LZDecompressWram(lzPaletteData, gDecompressionBuffer); LoadPalette(gDecompressionBuffer, paletteOffset, 32); @@ -945,10 +945,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite) { - u8 position; - s32 i; - u32 var; - const void *substitutePal; + s32 i, position, palOffset; if (!loadMonSprite) { @@ -964,19 +961,16 @@ void BattleLoadSubstituteOrMonSpriteGfx(u8 battlerId, bool8 loadMonSprite) else LZDecompressVram(gSubstituteDollTilemap, gMonSpritesGfxPtr->sprites[position]); - i = 1; - var = battlerId * 16; - substitutePal = gSubstituteDollPal; - for (; i < 4; i++) + for (i = 1; i < 4; i++) { - register void *dmaSrc asm("r0") = gMonSpritesGfxPtr->sprites[position]; - void *dmaDst = (i * 0x800) + dmaSrc; - u32 dmaSize = 0x800; - DmaCopy32(3, dmaSrc, dmaDst, dmaSize); - i++;i--; + u8 (*ptr)[4][0x800] = gMonSpritesGfxPtr->sprites[position]; + ptr++;ptr--; // Needed to match. + + DmaCopy32Defvars(3, (*ptr)[0], (*ptr)[i], 0x800); } - LoadCompressedPalette(substitutePal, 0x100 + var, 32); + palOffset = (battlerId * 16) + 0x100; + LoadCompressedPalette(gSubstituteDollPal, palOffset, 32); } else { diff --git a/src/battle_intro.c b/src/battle_intro.c index 043cf855a..6964428a3 100644 --- a/src/battle_intro.c +++ b/src/battle_intro.c @@ -205,7 +205,7 @@ static void BattleIntroSlide1(u8 taskId) if (gBattle_WIN0V & 0xFF00) gBattle_WIN0V -= 0x3FC; - + if (gTasks[taskId].data[2]) gTasks[taskId].data[2] -= 2; @@ -314,7 +314,7 @@ static void BattleIntroSlide2(u8 taskId) if (gBattle_WIN0V & 0xFF00) gBattle_WIN0V -= 0x3FC; - + if (gTasks[taskId].data[2]) gTasks[taskId].data[2] -= 2; @@ -402,7 +402,7 @@ static void BattleIntroSlide3(u8 taskId) if (gBattle_WIN0V & 0xFF00) gBattle_WIN0V -= 0x3FC; - + if (gTasks[taskId].data[2]) gTasks[taskId].data[2] -= 2; @@ -484,7 +484,7 @@ static void BattleIntroSlideLink(u8 taskId) case 3: if (gBattle_WIN0V & 0xFF00) gBattle_WIN0V -= 0x3FC; - + if (gTasks[taskId].data[2]) gTasks[taskId].data[2] -= 2; @@ -537,7 +537,7 @@ static void BattleIntroSlidePartner(u8 taskId) gBattle_WIN0V += 0x100; if ((gBattle_WIN0V & 0xFF00) != 0x100) gBattle_WIN0V--; - + if ((gBattle_WIN0V & 0xFF00) == 0x2000) { gTasks[taskId].data[0]++; @@ -600,129 +600,18 @@ void sub_8118FBC(int bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *ar LoadBgTilemap(bgId, arg6, BG_SCREEN_SIZE, 0); } -#ifdef NONMATCHING void unref_sub_8119094(u8 arg0, u8 arg1, u8 battlerPosition, u8 arg3, u8 arg4, u16 arg5, u8 arg6, u8 arg7) { - int i, j; - int offset; + int i, j, offset; + DmaCopy16(3, gMonSpritesGfxPtr->sprites[battlerPosition] + BG_SCREEN_SIZE * arg3, (void *)BG_SCREEN_ADDR(0) + arg5, BG_SCREEN_SIZE); offset = (arg5 >> 5) - (arg7 << 9); for (i = arg1; i < arg1 + 8; i++) { for (j = arg0; j < arg0 + 8; j++) { - ((u16 *)BG_VRAM)[i * 32 + j + (arg6 * 0x400) + arg0] = offset | (arg4 << 12); + *((u16 *)(BG_VRAM) + (i * 32) + (j + (arg6 << 10))) = offset | (arg4 << 12); offset++; } } } -#else -NAKED -void unref_sub_8119094(u8 arg0, u8 arg1, u8 battlerPosition, u8 arg3, u8 arg4, u16 arg5, u8 arg6, u8 arg7) -{ - asm_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, 0x4\n\ - ldr r4, [sp, 0x24]\n\ - ldr r5, [sp, 0x28]\n\ - mov r8, r5\n\ - ldr r5, [sp, 0x2C]\n\ - ldr r6, [sp, 0x30]\n\ - mov r9, r6\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r12, r0\n\ - lsls r1, 24\n\ - lsls r2, 24\n\ - lsls r3, 24\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - mov r10, r4\n\ - mov r7, r8\n\ - lsls r7, 16\n\ - lsrs r6, r7, 16\n\ - lsls r5, 24\n\ - lsrs r5, 24\n\ - mov r0, r9\n\ - lsls r0, 24\n\ - mov r9, r0\n\ - ldr r4, =0x040000d4\n\ - ldr r0, =gMonSpritesGfxPtr\n\ - ldr r0, [r0]\n\ - lsrs r2, 22\n\ - adds r0, 0x4\n\ - adds r0, r2\n\ - lsrs r3, 13\n\ - ldr r0, [r0]\n\ - adds r0, r3\n\ - str r0, [r4]\n\ - movs r0, 0xC0\n\ - lsls r0, 19\n\ - adds r6, r0\n\ - str r6, [r4, 0x4]\n\ - ldr r0, =0x80000400\n\ - str r0, [r4, 0x8]\n\ - ldr r0, [r4, 0x8]\n\ - adds r2, r7, 0\n\ - lsrs r2, 21\n\ - mov r6, r9\n\ - lsrs r6, 15\n\ - subs r4, r2, r6\n\ - lsrs r0, r1, 24\n\ - adds r1, r0, 0\n\ - adds r1, 0x8\n\ - cmp r0, r1\n\ - bge _08119148\n\ - mov r9, r1\n\ - mov r7, r12\n\ - lsls r7, 1\n\ - mov r8, r7\n\ - lsls r5, 11\n\ - str r5, [sp]\n\ -_08119110:\n\ - mov r2, r12\n\ - adds r3, r2, 0\n\ - adds r3, 0x8\n\ - adds r5, r0, 0x1\n\ - cmp r2, r3\n\ - bge _08119142\n\ - mov r1, r10\n\ - lsls r6, r1, 12\n\ - lsls r0, 6\n\ - movs r7, 0xC0\n\ - lsls r7, 19\n\ - adds r0, r7\n\ - ldr r1, [sp]\n\ - adds r0, r1, r0\n\ - mov r7, r8\n\ - adds r1, r7, r0\n\ - subs r2, r3, r2\n\ -_08119132:\n\ - adds r0, r4, 0\n\ - orrs r0, r6\n\ - strh r0, [r1]\n\ - adds r4, 0x1\n\ - adds r1, 0x2\n\ - subs r2, 0x1\n\ - cmp r2, 0\n\ - bne _08119132\n\ -_08119142:\n\ - adds r0, r5, 0\n\ - cmp r0, r9\n\ - blt _08119110\n\ -_08119148:\n\ - add sp, 0x4\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\ - .pool"); -} -#endif diff --git a/src/battle_main.c b/src/battle_main.c index 76bd6d877..61b6a5a12 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -72,6 +72,9 @@ extern const u8 *const gBattlescriptsForUsingItem[]; extern const u8 *const gBattlescriptsForSafariActions[]; // this file's functions +#if !defined(NONMATCHING) && MODERN +#define static +#endif static void CB2_InitBattleInternal(void); static void CB2_PreInitMultiBattle(void); static void CB2_PreInitIngamePlayerPartnerBattle(void); @@ -3390,7 +3393,7 @@ static void BattleIntroDrawTrainersOrMonsSprites(void) gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; - gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].altAbility); + gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum); hpOnSwitchout = &gBattleStruct->hpOnSwitchout[GetBattlerSide(gActiveBattler)]; *hpOnSwitchout = gBattleMons[gActiveBattler].hp; for (i = 0; i < NUM_BATTLE_STATS; i++) diff --git a/src/battle_pike.c b/src/battle_pike.c index cc58b81bb..8846e2d1a 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -53,11 +53,11 @@ struct PikeWildMon }; // IWRAM bss -static IWRAM_DATA u8 sRoomType; -static IWRAM_DATA u8 sStatusMon; -static IWRAM_DATA bool8 sUnknown_0300128E; -static IWRAM_DATA u32 sStatusFlags; -static IWRAM_DATA u8 sNpcId; +static u8 sRoomType; +static u8 sStatusMon; +static bool8 sUnknown_0300128E; +static u32 sStatusFlags; +static u8 sNpcId; // This file's functions. static void SetRoomType(void); @@ -1122,7 +1122,7 @@ bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate) u8 headerId = GetBattlePikeWildMonHeaderId(); u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; const struct PikeWildMon *const *const wildMons = sWildMons[lvlMode]; - u32 abilityBit; + u32 abilityNum; s32 pikeMonId = GetMonData(&gEnemyParty[0], MON_DATA_SPECIES, NULL); pikeMonId = SpeciesToPikeMonId(pikeMonId); @@ -1152,11 +1152,11 @@ bool32 TryGenerateBattlePikeWildMon(bool8 checkKeenEyeIntimidate) MON_DATA_EXP, &gExperienceTables[gBaseStats[wildMons[headerId][pikeMonId].species].growthRate][monLevel]); - if (gBaseStats[wildMons[headerId][pikeMonId].species].ability2) - abilityBit = Random() % 2; + if (gBaseStats[wildMons[headerId][pikeMonId].species].abilities[1]) + abilityNum = Random() % 2; else - abilityBit = 0; - SetMonData(&gEnemyParty[0], MON_DATA_ALT_ABILITY, &abilityBit); + abilityNum = 0; + SetMonData(&gEnemyParty[0], MON_DATA_ABILITY_NUM, &abilityNum); for (i = 0; i < MAX_MON_MOVES; i++) SetMonMoveSlot(&gEnemyParty[0], wildMons[headerId][pikeMonId].moves[i], i); diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c index 34da3a25d..cc722da8d 100644 --- a/src/battle_pyramid.c +++ b/src/battle_pyramid.c @@ -76,7 +76,7 @@ struct PyramidWildMon { u16 species; u8 lvl; - u8 abilityBit; + u8 abilityNum; u16 moves[4]; }; @@ -129,6 +129,8 @@ static bool8 TrySetPyramidEventObjectPositionInSquare(u8 arg0, u8 *floorLayoutOf static bool8 TrySetPyramidEventObjectPositionAtCoords(bool8 objType, u8 x, u8 y, u8 *floorLayoutOffsets, u8 squareId, u8 eventObjectId); // Const rom data. +#define ABILITY_RANDOM 2 // For wild mons data. + #include "data/battle_frontier/battle_pyramid_level_50_wild_mons.h" #include "data/battle_frontier/battle_pyramid_open_level_wild_mons.h" @@ -1401,23 +1403,23 @@ void GenerateBattlePyramidWildMon(void) MON_DATA_EXP, &gExperienceTables[gBaseStats[wildMons[id].species].growthRate][lvl]); - switch (wildMons[id].abilityBit) + switch (wildMons[id].abilityNum) { case 0: case 1: - SetMonData(&gEnemyParty[0], MON_DATA_ALT_ABILITY, &wildMons[id].abilityBit); + SetMonData(&gEnemyParty[0], MON_DATA_ABILITY_NUM, &wildMons[id].abilityNum); break; - case 2: + case ABILITY_RANDOM: default: - if (gBaseStats[wildMons[id].species].ability2) + if (gBaseStats[wildMons[id].species].abilities[1]) { i = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY, NULL) % 2; - SetMonData(&gEnemyParty[0], MON_DATA_ALT_ABILITY, &i); + SetMonData(&gEnemyParty[0], MON_DATA_ABILITY_NUM, &i); } else { i = 0; - SetMonData(&gEnemyParty[0], MON_DATA_ALT_ABILITY, &i); + SetMonData(&gEnemyParty[0], MON_DATA_ABILITY_NUM, &i); } break; } diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index ee35ed45b..b4ec6cd62 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -324,7 +324,7 @@ static const union AffineAnimCmd * const gSpriteAffineAnimTable_861F3C4[] = gSpriteAffineAnim_861F39C, }; -static const struct CompressedSpriteSheet gUnknown_0861F3CC = {gBattleFrontierGfx_PyramidBag, 0x0800, 0x1024}; +static const struct CompressedSpriteSheet gPyramidBagSpriteSheet = {gBattleFrontierGfx_PyramidBag, 0x0800, 0x1024}; static const struct SpriteTemplate gUnknown_0861F3D4 = { @@ -538,7 +538,7 @@ static bool8 sub_81C5238(void) case 1: if (free_temp_tile_data_buffers_if_possible() != TRUE) { - LZDecompressWram(gUnknown_08D9AE04, gPyramidBagResources->tilemapBuffer); + LZDecompressWram(gBattleFrontierGfx_PyramidBagTileMap, gPyramidBagResources->tilemapBuffer); gPyramidBagResources->state++; } break; @@ -547,7 +547,7 @@ static bool8 sub_81C5238(void) gPyramidBagResources->state++; break; case 3: - LoadCompressedSpriteSheet(&gUnknown_0861F3CC); + LoadCompressedSpriteSheet(&gPyramidBagSpriteSheet); gPyramidBagResources->state++; break; case 4: @@ -1489,7 +1489,7 @@ static void sub_81C6E98(void) struct SpritePalette spritePalette; u16 *palPtr = Alloc(0x40); - LZDecompressWram(gUnknown_08D9ADD0, palPtr); + LZDecompressWram(gBattleFrontierGfx_PyramidBag_Pal, palPtr); spritePalette.data = palPtr + (gSaveBlock2Ptr->frontier.lvlMode * 16); spritePalette.tag = ITEM_IMAGE_TAG; LoadSpritePalette(&spritePalette); diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 7e783bef5..5016a3a58 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1276,8 +1276,8 @@ static void atk04_critcalc(void) + 2 * (holdEffect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBattlerAttacker].species == SPECIES_CHANSEY) + 2 * (holdEffect == HOLD_EFFECT_STICK && gBattleMons[gBattlerAttacker].species == SPECIES_FARFETCHD); - if (critChance > 4) - critChance = 4; + if (critChance >= ARRAY_COUNT(sCriticalHitChance)) + critChance = ARRAY_COUNT(sCriticalHitChance) - 1; if ((gBattleMons[gBattlerTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBattlerTarget].ability != ABILITY_SHELL_ARMOR) && !(gStatuses3[gBattlerAttacker] & STATUS3_CANT_SCORE_A_CRIT) @@ -4906,7 +4906,7 @@ static void atk4D_switchindataupdate(void) gBattleMons[gActiveBattler].type1 = gBaseStats[gBattleMons[gActiveBattler].species].type1; gBattleMons[gActiveBattler].type2 = gBaseStats[gBattleMons[gActiveBattler].species].type2; - gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].altAbility); + gBattleMons[gActiveBattler].ability = GetAbilityBySpecies(gBattleMons[gActiveBattler].species, gBattleMons[gActiveBattler].abilityNum); // check knocked off item i = GetBattlerSide(gActiveBattler); @@ -8622,7 +8622,7 @@ static void atkAE_healpartystatus(void) for (i = 0; i < PARTY_SIZE; i++) { u16 species = GetMonData(&party[i], MON_DATA_SPECIES2); - u8 abilityBit = GetMonData(&party[i], MON_DATA_ALT_ABILITY); + u8 abilityNum = GetMonData(&party[i], MON_DATA_ABILITY_NUM); if (species != SPECIES_NONE && species != SPECIES_EGG) { @@ -8635,7 +8635,7 @@ static void atkAE_healpartystatus(void) && !(gAbsentBattlerFlags & gBitTable[gActiveBattler])) ability = gBattleMons[gActiveBattler].ability; else - ability = GetAbilityBySpecies(species, abilityBit); + ability = GetAbilityBySpecies(species, abilityNum); if (ability != ABILITY_SOUNDPROOF) toHeal |= (1 << i); @@ -9844,10 +9844,10 @@ static void atkE5_pickup(void) species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - if (GetMonData(&gPlayerParty[i], MON_DATA_ALT_ABILITY)) - ability = gBaseStats[species].ability2; + if (GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)) + ability = gBaseStats[species].abilities[1]; else - ability = gBaseStats[species].ability1; + ability = gBaseStats[species].abilities[0]; if (ability == ABILITY_PICKUP && species != 0 @@ -9867,10 +9867,10 @@ static void atkE5_pickup(void) species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - if (GetMonData(&gPlayerParty[i], MON_DATA_ALT_ABILITY)) - ability = gBaseStats[species].ability2; + if (GetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM)) + ability = gBaseStats[species].abilities[1]; else - ability = gBaseStats[species].ability1; + ability = gBaseStats[species].abilities[0]; if (ability == ABILITY_PICKUP && species != 0 diff --git a/src/battle_tent.c b/src/battle_tent.c index 85194417f..34e3e9628 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -44,7 +44,7 @@ static void sub_81BA040(void); static void sub_81B9EC0(void); // IWRAM bss -static IWRAM_DATA u16 sRandMonSetId; +static u16 sRandMonSetId; // const rom data void static (*const gUnknown_086160B4[])(void) = diff --git a/src/battle_transition.c b/src/battle_transition.c index 7edb1bd93..3e86fcf51 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -262,10 +262,10 @@ static bool8 sub_814842C(struct Sprite *sprite); static bool8 sub_8148458(struct Sprite *sprite); // iwram bss vars -IWRAM_DATA static s16 sUnusedRectangularSpiralVar; -IWRAM_DATA static u8 sTestingTransitionId; -IWRAM_DATA static u8 sTestingTransitionState; -IWRAM_DATA static struct StructRectangularSpiral sRectangularSpiralTransition[4]; +static s16 sUnusedRectangularSpiralVar; +static u8 sTestingTransitionId; +static u8 sTestingTransitionState; +static struct StructRectangularSpiral sRectangularSpiralTransition[4]; // ewram vars EWRAM_DATA static struct TransitionData *sTransitionStructPtr = NULL; diff --git a/src/berry_blender.c b/src/berry_blender.c index c1c664c1a..03764b2f8 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -194,10 +194,10 @@ EWRAM_DATA static s32 sUnknown_020322BC[5] = {0}; EWRAM_DATA static u32 sUnknown_020322D0 = 0; // IWRAM bss -IWRAM_DATA static s16 sUnknown_03000DE8[8]; -IWRAM_DATA static s16 sUnknown_03000DF8[6]; -IWRAM_DATA static s16 sUnknown_03000E04; -IWRAM_DATA static s16 sUnknown_03000E06; +static s16 sUnknown_03000DE8[8]; +static s16 sUnknown_03000DF8[6]; +static s16 sUnknown_03000E04; +static s16 sUnknown_03000E06; // IWRAM common u8 gInGameOpponentsNo; @@ -1078,7 +1078,7 @@ static void sub_807FD64(struct Sprite* sprite, s16 a2, s16 a3, s16 a4, s16 a5, s static void sub_807FD90(u16 a0, u8 a1) { - u8 spriteId = sub_80D511C(a0 + 123, 0, 80, a1 & 1); + u8 spriteId = LoadSpinningBerryPicGfx(a0 + 123, 0, 80, a1 & 1); sub_807FD64(&gSprites[spriteId], sUnknown_08339C78[a1][0], sUnknown_08339C78[a1][1], sUnknown_08339C78[a1][2], sUnknown_08339C78[a1][3], sUnknown_08339C78[a1][4]); } diff --git a/src/berry_crush.c b/src/berry_crush.c index a5d964cc9..6259e0a41 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -55,7 +55,10 @@ struct BerryCrushGame_138_C struct BerryCrushGame_138 { - u8 filler0[0xC]; + u8 filler0[0x4]; + u16 unk4; + u16 unk6; + u16 unk8; struct BerryCrushGame_138_C *unkC[5]; u8 filler1C[0x4]; struct Sprite *unk24[5]; @@ -105,7 +108,7 @@ struct BerryCrushGame u8 filler26[0x2]; u16 unk28; u16 unk2A; - u16 unk2C; + s16 unk2C; u8 filler2E[0x8]; u8 unk36[0xA]; struct BerryCrushGame_40 unk40; @@ -149,6 +152,8 @@ extern const struct SpriteTemplate gUnknown_082F436C; extern const u16 gUnknown_082F41E8[]; extern const s8 gUnknown_082F41CC[][2]; extern const s8 gUnknown_082F41D2[][2]; +extern const u32 gUnknown_082F334C[]; +extern const u8 gUnknown_082F32D8[][3]; struct BerryCrushGame *sub_8020C00(void) { @@ -700,76 +705,121 @@ void sub_80216A8(struct BerryCrushGame *arg0) } } -// void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) -// { -// u8 sp4; -// struct BerryCrushGame_4E *var4E; -// u8 i; -// u16 var0; - -// sp4 = 0; -// var4E = &arg0->unk40.unkE; -// for (i = 0; i < arg0->unk9; i++) -// { -// var0 = var4E->unkA >> (i * 3); -// var0 &= 7; -// if (var0) -// { -// int offset; -// sp4++; -// if (var0 & 0x4) -// StartSpriteAnim(arg1->unk24[i], 1); -// else -// StartSpriteAnim(arg1->unk24[i], 0); - -// arg1->unk24[i]->invisible = 0; -// arg1->unk24[i]->animPaused = 0; -// offset = (var0 % 4) - 1; -// arg1->unk24[i]->pos2.x = gUnknown_082F41CC[offset][0]; -// arg1->unk24[i]->pos2.y = gUnknown_082F41CC[offset][1]; -// } -// } - -// if (sp4 == 0) -// { -// arg0->unk25_2 = 0; -// } -// else -// { -// u8 var3 = arg0->unk28 % 3; -// u16 var2 = var3; -// for (i = 0; i < var4E->unkC * 2 + 3; i++) -// { -// if (arg1->unk4C[i]->invisible) -// { -// arg1->unk4C[i]->callback = sub_8022B28; -// arg1->unk4C[i]->pos1.x = gUnknown_082F41D2[i][0] + 120; -// arg1->unk4C[i]->pos1.y = gUnknown_082F41D2[i][1] + (136 - var2 * 4); -// arg1->unk4C[i]->pos2.x = gUnknown_082F41D2[i][0] / (var3 * 4); -// arg1->unk4C[i]->pos2.y = gUnknown_082F41D2[i][1]; -// if (var4E->unk4 & 0x2) -// StartSpriteAnim(arg1->unk4C[i], 1); -// else -// StartSpriteAnim(arg1->unk4C[i], 0); - -// var2++; -// if (var2 > 3) -// var2 = 0; -// } -// } - -// if (arg0->unk25_2) -// { -// arg0->unk25_2 = 0; -// } -// else -// { -// if (sp4 == 1) -// PlaySE(SE_TOY_DANGO); -// else -// PlaySE(SE_TOY_KABE); - -// arg0->unk25_2 = 1; -// } -// } -// } +void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) +{ + u8 sp4; + struct BerryCrushGame_4E *var4E; + u8 i; + u16 var, var2; + + sp4 = 0; + var4E = &arg0->unk40.unkE; + for (i = 0; i < arg0->unk9; i++) + { + var = var4E->unkA >> (i * 3); + var &= 7; + if (var) + { + sp4++; + if (var & 0x4) + StartSpriteAnim(arg1->unk24[i], 1); + else + StartSpriteAnim(arg1->unk24[i], 0); + + arg1->unk24[i]->invisible = 0; + arg1->unk24[i]->animPaused = 0; + arg1->unk24[i]->pos2.x = gUnknown_082F41CC[(var % 4) - 1][0]; + arg1->unk24[i]->pos2.y = gUnknown_082F41CC[(var % 4) - 1][1]; + } + } + + if (sp4 == 0) + { + arg0->unk25_2 = 0; + } + else + { + var = (u8)(arg0->unk28 % 3); + var2 = var; + for (i = 0; i < var4E->unkC * 2 + 3; i++) + { + if (arg1->unk4C[i]->invisible) + { + arg1->unk4C[i]->callback = sub_8022B28; + arg1->unk4C[i]->pos1.x = gUnknown_082F41D2[i][0] + 120; + arg1->unk4C[i]->pos1.y = gUnknown_082F41D2[i][1] + 136 - (var * 4); + arg1->unk4C[i]->pos2.x = gUnknown_082F41D2[i][0] + (gUnknown_082F41D2[i][0] / (var2 * 4)); + arg1->unk4C[i]->pos2.y = gUnknown_082F41D2[i][1]; + if (var4E->unk4 & 0x2) + StartSpriteAnim(arg1->unk4C[i], 1); + else + StartSpriteAnim(arg1->unk4C[i], 0); + + var++; + if (var > 3) + var = 0; + } + } + + if (arg0->unk25_2) + { + arg0->unk25_2 = 0; + } + else + { + if (sp4 == 1) + PlaySE(SE_TOY_DANGO); + else + PlaySE(SE_TOY_KABE); + + arg0->unk25_2 = 1; + } + } +} + +bool32 sub_80218D4(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) +{ + u8 i; + + for (i = 0; i < arg0->unk9; i++) + { + if (!arg1->unk24[i]->invisible) + return FALSE; + } + + for (i = 0; i < 11; i++) + { + if (!arg1->unk4C[i]->invisible) + return FALSE; + } + + if (arg0->unk2C != 0) + arg0->unk2C = 0; + + return TRUE; +} + +void sub_8021944(struct BerryCrushGame_138 *arg0, u16 arg1) +{ + u8 i = 0; + u32 r7 = 0; + s16 r3 = 0; + + arg0->unk4 = arg1 / 3600; + arg0->unk6 = (arg1 % 3600) / 60; + r3 = sub_8151534((arg1 % 60) << 8, 4); + + for (i = 0; i < 8; i++) + { + if ((r3 >> (7 - i)) & 1) + r7 += gUnknown_082F334C[i]; + } + + arg0->unk8 = r7 / 1000000; +} + +void sub_80219C8(u8 windowId, u8 left, u8 colorId, const u8 *string) +{ + left = (left * 4) - (GetStringWidth(2, string, -1) / 2u); + AddTextPrinterParameterized3(windowId, 2, left, 0, gUnknown_082F32D8[colorId], 0, string); +} diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index d0f89ab8a..c3eac783d 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -318,18 +318,18 @@ static bool8 LoadBerryTagGfx(void) { case 0: reset_temp_tile_data_buffers(); - decompress_and_copy_tile_data_to_vram(2, gUnknown_08D9BB44, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(2, gBerryCheck_Gfx, 0, 0, 0); sBerryTag->gfxState++; break; case 1: if (free_temp_tile_data_buffers_if_possible() != TRUE) { - LZDecompressWram(gUnknown_08D9BF98, sBerryTag->tilemapBuffers[0]); + LZDecompressWram(gBerryTag_Gfx, sBerryTag->tilemapBuffers[0]); sBerryTag->gfxState++; } break; case 2: - LZDecompressWram(gUnknown_08D9C13C, sBerryTag->tilemapBuffers[2]); + LZDecompressWram(gBerryTag_Pal, sBerryTag->tilemapBuffers[2]); sBerryTag->gfxState++; break; case 3: @@ -346,15 +346,15 @@ static bool8 LoadBerryTagGfx(void) sBerryTag->gfxState++; break; case 4: - LoadCompressedPalette(gUnknown_08D9BEF0, 0, 0xC0); + LoadCompressedPalette(gBerryCheck_Pal, 0, 0xC0); sBerryTag->gfxState++; break; case 5: - LoadCompressedSpriteSheet(&gUnknown_0857FDEC); + LoadCompressedSpriteSheet(&gBerryCheckCircleSpriteSheet); sBerryTag->gfxState++; break; default: - LoadCompressedSpritePalette(&gUnknown_0857FDF4); + LoadCompressedSpritePalette(&gBerryCheckCirclePaletteTable); return TRUE; // done } @@ -548,7 +548,7 @@ static void Task_HandleInput(u8 taskId) static void TryChangeDisplayedBerry(u8 taskId, s8 toMove) { s16 *data = gTasks[taskId].data; - s16 currPocketPosition = gUnknown_0203CE58.scrollPosition[3] + gUnknown_0203CE58.cursorPosition[3]; + s16 currPocketPosition = gBagPositionStruct.scrollPosition[3] + gBagPositionStruct.cursorPosition[3]; u32 newPocketPosition = currPocketPosition + toMove; if (newPocketPosition < 46 && BagGetItemIdByPocketPosition(POCKET_BERRIES, newPocketPosition) != 0) { @@ -566,8 +566,8 @@ static void TryChangeDisplayedBerry(u8 taskId, s8 toMove) static void HandleBagCursorPositionChange(s8 toMove) { - u16 *scrollPos = &gUnknown_0203CE58.scrollPosition[3]; - u16 *cursorPos = &gUnknown_0203CE58.cursorPosition[3]; + u16 *scrollPos = &gBagPositionStruct.scrollPosition[3]; + u16 *cursorPos = &gBagPositionStruct.cursorPosition[3]; if (toMove > 0) { if (*cursorPos < 4 || BagGetItemIdByPocketPosition(POCKET_BERRIES, *scrollPos + 8) == 0) @@ -37,9 +37,9 @@ struct BgConfig2 s32 bg_y; }; -static IWRAM_DATA struct BgControl sGpuBgConfigs; -static IWRAM_DATA struct BgConfig2 sGpuBgConfigs2[4]; -static IWRAM_DATA u32 sDmaBusyBitfield[4]; +static struct BgControl sGpuBgConfigs; +static struct BgConfig2 sGpuBgConfigs2[4]; +static u32 sDmaBusyBitfield[4]; u32 gUnneededFireRedVariable; @@ -220,7 +220,7 @@ static void ShowBgInternal(u8 bg) (sGpuBgConfigs.configs[bg].wraparound << 13) | (sGpuBgConfigs.configs[bg].screenSize << 14); - SetGpuReg((bg << 1) + 0x8, value); + SetGpuReg((bg << 1) + REG_OFFSET_BG0CNT, value); sGpuBgConfigs.bgVisibilityAndMode |= 1 << (bg + 8); sGpuBgConfigs.bgVisibilityAndMode &= DISPCNT_ALL_BG_AND_MODE_BITS; @@ -914,7 +914,6 @@ void CopyBgTilemapBufferToVram(u8 bg) void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height) { - const void *srcCopy; u16 destX16; u16 destY16; u16 mode; @@ -924,27 +923,31 @@ void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 wi switch (GetBgType(bg)) { case 0: - srcCopy = src; + { + const u16 * srcCopy = src; for (destY16 = destY; destY16 < (destY + height); destY16++) { for (destX16 = destX; destX16 < (destX + width); destX16++) { - ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *((u16*)srcCopy)++; + ((u16*)sGpuBgConfigs2[bg].tilemap)[((destY16 * 0x20) + destX16)] = *srcCopy++; } } break; + } case 1: - srcCopy = src; + { + const u8 * srcCopy = src; mode = GetBgMetricAffineMode(bg, 0x1); for (destY16 = destY; destY16 < (destY + height); destY16++) { for (destX16 = destX; destX16 < (destX + width); destX16++) { - ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *((u8*)srcCopy)++; + ((u8*)sGpuBgConfigs2[bg].tilemap)[((destY16 * mode) + destX16)] = *srcCopy++; } } break; } + } } } diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index 659f8682e..c00be82ad 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -10,6 +10,7 @@ #include "constants/maps.h" #include "constants/songs.h" #include "constants/species.h" +#include "constants/metatile_labels.h" #include "fieldmap.h" #include "party_menu.h" #include "fldeff.h" @@ -86,12 +87,12 @@ bool8 ShouldDoBrailleDigEffect(void) void DoBrailleDigEffect(void) { - MapGridSetMetatileIdAt(16, 8, 0x22A); - MapGridSetMetatileIdAt(17, 8, 0x22B); - MapGridSetMetatileIdAt(18, 8, 0x22C); - MapGridSetMetatileIdAt(16, 9, 0xE32); - MapGridSetMetatileIdAt(17, 9, 0x233); - MapGridSetMetatileIdAt(18, 9, 0xE34); + MapGridSetMetatileIdAt(16, 8, METATILE_ID(Cave, SealedChamberEntrance_TopLeft)); + MapGridSetMetatileIdAt(17, 8, METATILE_ID(Cave, SealedChamberEntrance_TopMid)); + MapGridSetMetatileIdAt(18, 8, METATILE_ID(Cave, SealedChamberEntrance_TopRight)); + MapGridSetMetatileIdAt(16, 9, METATILE_ID(Cave, SealedChamberEntrance_BottomLeft) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(17, 9, METATILE_ID(Cave, SealedChamberEntrance_BottomMid)); + MapGridSetMetatileIdAt(18, 9, METATILE_ID(Cave, SealedChamberEntrance_BottomRight) | METATILE_COLLISION_MASK); DrawWholeMapView(); PlaySE(SE_BAN); FlagSet(FLAG_SYS_BRAILLE_DIG); @@ -279,12 +280,12 @@ void UseRegirockHm_Callback(void) void DoBrailleRegirockEffect(void) { - MapGridSetMetatileIdAt(14, 26, 0x22A); - MapGridSetMetatileIdAt(15, 26, 0x22B); - MapGridSetMetatileIdAt(16, 26, 0x22C); - MapGridSetMetatileIdAt(14, 27, 0xE32); - MapGridSetMetatileIdAt(15, 27, 0x233); - MapGridSetMetatileIdAt(16, 27, 0xE34); + MapGridSetMetatileIdAt(14, 26, METATILE_ID(Cave, SealedChamberEntrance_TopLeft)); + MapGridSetMetatileIdAt(15, 26, METATILE_ID(Cave, SealedChamberEntrance_TopMid)); + MapGridSetMetatileIdAt(16, 26, METATILE_ID(Cave, SealedChamberEntrance_TopRight)); + MapGridSetMetatileIdAt(14, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomLeft) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(15, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomMid)); + MapGridSetMetatileIdAt(16, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomRight) | METATILE_COLLISION_MASK); DrawWholeMapView(); PlaySE(SE_BAN); FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED); @@ -318,12 +319,12 @@ void UseRegisteelHm_Callback(void) void DoBrailleRegisteelEffect(void) { - MapGridSetMetatileIdAt(14, 26, 0x22A); - MapGridSetMetatileIdAt(15, 26, 0x22B); - MapGridSetMetatileIdAt(16, 26, 0x22C); - MapGridSetMetatileIdAt(14, 27, 0xE32); - MapGridSetMetatileIdAt(15, 27, 0x233); - MapGridSetMetatileIdAt(16, 27, 0xE34); + MapGridSetMetatileIdAt(14, 26, METATILE_ID(Cave, SealedChamberEntrance_TopLeft)); + MapGridSetMetatileIdAt(15, 26, METATILE_ID(Cave, SealedChamberEntrance_TopMid)); + MapGridSetMetatileIdAt(16, 26, METATILE_ID(Cave, SealedChamberEntrance_TopRight)); + MapGridSetMetatileIdAt(14, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomLeft) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(15, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomMid)); + MapGridSetMetatileIdAt(16, 27, METATILE_ID(Cave, SealedChamberEntrance_BottomRight) | METATILE_COLLISION_MASK); DrawWholeMapView(); PlaySE(SE_BAN); FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED); diff --git a/src/cable_car.c b/src/cable_car.c index d44c9a241..adeee2647 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -245,7 +245,7 @@ static void CableCarMainCallback_Setup(void) { u16 imebak; u8 i = 0; - int sizeOut = 0; + u32 sizeOut = 0; switch (gMain.state) { diff --git a/src/contest.c b/src/contest.c index eb3252f72..662a27060 100644 --- a/src/contest.c +++ b/src/contest.c @@ -269,8 +269,6 @@ extern const u8 gText_Contest_Fear[]; extern const u8 gText_BDot[]; extern const u8 gText_CDot[]; extern const u8 *const gUnknown_08587E10[]; -extern const struct SpriteTemplate gSpriteTemplate_8587AD0; -extern const struct SpriteTemplate gSpriteTemplate_8587B18[]; extern void (*const gContestEffectFuncs[])(void); static const u8 gUnknown_08587A6C[] = @@ -1268,7 +1266,7 @@ static void sub_80D8108(u8 taskId) gTasks[taskId].data[0]++; break; case 1: - (s16)gBattle_BG1_Y += 7; + *(s16*)&gBattle_BG1_Y += 7; if ((s16)gBattle_BG1_Y <= 160) break; gTasks[taskId].data[0]++; @@ -2975,7 +2973,7 @@ static u8 sub_80DB174(u16 species, u32 otId, u32 personality, u32 index) else HandleLoadSpecialPokePic_DontHandleDeoxys(gMonBackPicTable + species, gMonSpritesGfxPtr->sprites[0], species, personality); - LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x120, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x120, 0x20); SetMultiuseSpriteTemplateToPokemon(species, 0); spriteId = CreateSprite(&gMultiuseSpriteTemplate, 0x70, GetBattlerSpriteFinal_Y(2, species, FALSE), 30); diff --git a/src/contest_link_80F57C4.c b/src/contest_link_80F57C4.c index bae7859b5..a0a29f0ad 100644 --- a/src/contest_link_80F57C4.c +++ b/src/contest_link_80F57C4.c @@ -71,15 +71,10 @@ struct ContestLinkUnk14 u8 unk12; }; -struct ContestLinkUnk4 -{ - struct ContestLinkUnk14 unk0[4]; -}; - struct ContestLink80F57C4 { struct ContestLinkUnk0 *unk0; - struct ContestLinkUnk4 *unk4; + struct ContestLinkUnk14 (*unk4)[4]; u8 *unk8; u8 *unkC[4]; u8 *unk1C; @@ -205,9 +200,7 @@ void sub_80F57C4(void) void sub_80F591C(void) { int i, j; - s8 var0; - s8 var1; - int var2; + s8 var0, var1; u16 tile1, tile2; LZDecompressVram(gUnknown_08C19588, (void *)BG_CHAR_ADDR(0)); @@ -228,11 +221,7 @@ void sub_80F591C(void) if (j < var0) tile1 += 2; - var2 = var1; - if (var1 < 0) - var2 = -var2; - - if (j < var2) + if (j < abs(var1)) { tile2 = 0x60A4; if (var1 < 0) @@ -719,7 +708,7 @@ static void sub_80F6404(u8 taskId) if (top > 80) top = 80; - gBattle_WIN0V = (top << 8) | (160 - top);; + gBattle_WIN0V = (top << 8) | (160 - top); if (top == 80) gTasks[taskId].data[0]++; } @@ -737,8 +726,7 @@ static void sub_80F6404(u8 taskId) static void sub_80F66B4(u8 taskId) { - int i; - u16 nationalDexNum; + int i, nationalDexNum; if (gMain.newKeys & A_BUTTON) { @@ -859,13 +847,13 @@ static void sub_80F68F0(u8 taskId) void sub_80F69B8(u16 species, u8 monIndex, u8 srcOffset, u8 useDmaNow, u32 personality) { - u8 frameNum; const u8 *iconPtr; - u16 var0; - u16 var1; + u16 var0, var1, frameNum; - u8 *contestPlayerMonIndex = &gContestPlayerMonIndex; // fake match - frameNum = (monIndex == *contestPlayerMonIndex) ? 1 : 0; + if (monIndex == gContestPlayerMonIndex) + frameNum = 1; + else + frameNum = 0; iconPtr = GetMonIconPtr(species, personality, frameNum); iconPtr += srcOffset * 0x200 + 0x80; @@ -892,13 +880,12 @@ static void LoadAllContestMonIcons(u8 srcOffset, u8 useDmaNow) static void sub_80F6A9C(void) { - int i; - register u16 species asm("r0"); + int i, species; for (i = 0; i < 4; i++) { - species = GetIconSpecies(gContestMons[i].species, 0); - LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[species]], i * 0x10 + 0xA0, 0x20); + species = gContestMons[i].species; + LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[GetIconSpecies(species, 0)]], i * 0x10 + 0xA0, 0x20); } } @@ -1335,11 +1322,11 @@ static void sub_80F6F40(struct Sprite *sprite) static void sub_80F6F68(struct Sprite *sprite) { int i; - s16 var0; - var0 = (u16)sprite->data[7] + (u16)sprite->data[6]; - sprite->pos1.x -= var0 >> 8; - sprite->data[7] = (sprite->data[6] + sprite->data[7]) & 0xFF; + s16 delta = sprite->data[7] + sprite->data[6]; + sprite->pos1.x -= delta >> 8; + sprite->data[7] += sprite->data[6]; + sprite->data[7] &= 0xFF; if (sprite->pos1.x < sprite->data[4]) sprite->pos1.x = sprite->data[4]; @@ -1366,11 +1353,12 @@ static void sub_80F6FDC(struct Sprite *sprite) static void sub_80F7014(struct Sprite *sprite) { int i; - s16 var0; + s16 delta; - var0 = (u16)sprite->data[7] + (u16)sprite->data[6]; - sprite->pos1.x -= var0 >> 8; - sprite->data[7] = (sprite->data[6] + sprite->data[7]) & 0xFF; + delta = sprite->data[7] + sprite->data[6]; + sprite->pos1.x -= delta >> 8; + sprite->data[7] += sprite->data[6]; + sprite->data[7] &= 0xFF; for (i = 0; i < 3; i++) { struct Sprite *sprite2 = &gSprites[sprite->data[i]]; @@ -1487,14 +1475,11 @@ static void sub_80F71C8(void) CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_0203A034->unkC[2], 0, 0, 32, 4, palette); } -// fakematching? u8 sub_80F7310(u8 monIndex, u8 arg1) { - u32 var0; - u32 var1; + u32 var0 = gContestMonConditions[monIndex] << 16; + u32 var1 = var0 / 0x3F; - var0 = gContestMonConditions[monIndex] << 16; - var1 = var0 / 0x3F; if (var1 & 0xFFFF) var1 += 0x10000; @@ -1510,8 +1495,7 @@ u8 sub_80F7310(u8 monIndex, u8 arg1) s8 sub_80F7364(u8 arg0, u8 arg1) { - u32 r4; - u32 r2; + u32 r4, r2; s16 val; s8 ret; @@ -1607,9 +1591,10 @@ static void sub_80F75A8(struct Sprite *sprite) } else { - s16 delta = (u16)sprite->data[1] + 0x600; + s16 delta = sprite->data[1] + 0x600; sprite->pos1.x -= delta >> 8; - sprite->data[1] = (sprite->data[1] + 0x600) & 0xFF; + sprite->data[1] += 0x600; + sprite->data[1] &= 0xFF; if (sprite->pos1.x < 120) sprite->pos1.x = 120; @@ -1624,9 +1609,10 @@ static void sub_80F75A8(struct Sprite *sprite) static void sub_80F7620(struct Sprite *sprite) { - s16 delta = (u16)sprite->data[1] + 0x600; + s16 delta = sprite->data[1] + 0x600; sprite->pos1.x -= delta >> 8; - sprite->data[1] = (sprite->data[1] + 0x600) & 0xFF; + sprite->data[1] += + 0x600; + sprite->data[1] &= 0xFF; if (sprite->pos1.x < -32) { sprite->callback = SpriteCallbackDummy; @@ -1657,14 +1643,15 @@ static void sub_80F7670(u8 taskId) void sub_80F7768(struct Sprite *sprite) { - register s16 var0 asm("r1"); + s16 delta; sprite->data[3] += sprite->data[0]; sprite->pos2.x = Sin(sprite->data[3] >> 8, sprite->data[1]); - var0 = sprite->data[4] + sprite->data[2]; - sprite->pos1.x += var0 >> 8; - var0 = var0 & 0xFF; - sprite->data[4] = var0; + delta = sprite->data[4] + sprite->data[2]; + sprite->pos1.x += delta >> 8; + sprite->data[4] += sprite->data[2]; + sprite->data[4] &= 0xff; + sprite->pos1.y++; if (gUnknown_0203A034->unk0->unk9) sprite->invisible = 1; @@ -1695,705 +1682,145 @@ static void sub_80F7824(u8 taskId) } } -// static void sub_80F7880(void) -// { -// int i; -// int var0; -// int var1; -// int var2; -// int var3; -// u32 var4; -// int var5; -// int var6; -// s16 var7; -// s16 var8; -// s16 r2; - -// r2 = gUnknown_02039F08[0]; -// for (i = 1; i < 4; i++) -// { -// if (r2 < gUnknown_02039F08[i]) -// r2 = gUnknown_02039F08[i]; -// } - -// if (r2 < 0) -// { -// r2 = gUnknown_02039F08[0]; -// for (i = 1; i < 4; i++) -// { -// if (r2 > gUnknown_02039F08[i]) -// r2 = gUnknown_02039F08[i]; -// } -// } - -// // _080F78E4 -// for (i = 0; i < 4; i++) -// { -// var0 = gContestMonConditions[i] * 1000; -// var1 = r2; -// if (r2 < 0) -// var1 = -var1; - -// var2 = var0 / var1; -// if (var2 % 10 > 4) -// var2 += 10; - -// gUnknown_0203A034->unk4->unk0[i].unk0 = var2 / 10; -// var3 = gUnknown_02039F18[i]; -// if (var3 < 0) -// var3 = -var3; - -// var0 = var3 * 1000; -// var1 = r2; -// if (r2 < 0) -// var1 = -var1; - -// var2 = var0 / var1; -// if (var2 % 10 > 4) -// var2 += 10; - -// // _080F7966 -// gUnknown_0203A034->unk4->unk0[i].unk4 = var2 / 10; -// if (gUnknown_02039F18[i] < 0) -// gUnknown_0203A034->unk4->unk0[i].unk10 = 1; - -// var4 = gUnknown_0203A034->unk4->unk0[i].unk0 * 22528 / 100; -// if ((var4 & 0xFF) > 0x7F) -// var4 += 0x100; - -// gUnknown_0203A034->unk4->unk0[i].unk8 = var4 >> 8; -// var4 = gUnknown_0203A034->unk4->unk0[i].unk4 * 22528 / 100; -// if ((var4 & 0xFF) > 0x7F) -// var4 += 0x100; - -// gUnknown_0203A034->unk4->unk0[i].unkC = var4 >> 8; -// gUnknown_0203A034->unk4->unk0[i].unk11 = sub_80F7310(i, 1); -// var5 = sub_80F7364(i, 1); -// if (var5 < 0) -// var5 = -var5; - -// gUnknown_0203A034->unk4->unk0[i].unk12 = var5; -// if (gContestFinalStandings[i]) -// { -// var7 = gUnknown_0203A034->unk4->unk0[i].unk8; -// var8 = gUnknown_0203A034->unk4->unk0[i].unkC; -// if (gUnknown_0203A034->unk4->unk0[i].unk10) -// var8 = -var8; - -// if (var7 + var8 == 88) -// { -// if (var8 > 0) -// gUnknown_0203A034->unk4->unk0[i].unkC--; -// else if (var7 > 0) -// gUnknown_0203A034->unk4->unk0[i].unk8--; -// } -// } -// } -// } - -NAKED static void sub_80F7880(void) { - asm_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, 0x4\n\ - ldr r0, =gUnknown_02039F08\n\ - ldrh r2, [r0]\n\ - adds r4, r0, 0\n\ - adds r3, r4, 0x2\n\ - movs r0, 0x2\n\ - mov r8, r0\n\ -_080F7898:\n\ - lsls r0, r2, 16\n\ - asrs r0, 16\n\ - movs r5, 0\n\ - ldrsh r1, [r3, r5]\n\ - cmp r0, r1\n\ - bge _080F78A6\n\ - ldrh r2, [r3]\n\ -_080F78A6:\n\ - adds r3, 0x2\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - add r8, r0\n\ - mov r1, r8\n\ - cmp r1, 0\n\ - bge _080F7898\n\ - lsls r0, r2, 16\n\ - str r0, [sp]\n\ - cmp r0, 0\n\ - bge _080F78E4\n\ - ldrh r2, [r4]\n\ - adds r3, r4, 0x2\n\ - movs r4, 0x2\n\ - mov r8, r4\n\ -_080F78C4:\n\ - lsls r0, r2, 16\n\ - asrs r0, 16\n\ - movs r5, 0\n\ - ldrsh r1, [r3, r5]\n\ - cmp r0, r1\n\ - ble _080F78D2\n\ - ldrh r2, [r3]\n\ -_080F78D2:\n\ - adds r3, 0x2\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - add r8, r0\n\ - lsls r1, r2, 16\n\ - str r1, [sp]\n\ - mov r4, r8\n\ - cmp r4, 0\n\ - bge _080F78C4\n\ -_080F78E4:\n\ - movs r5, 0\n\ - mov r8, r5\n\ - mov r10, r5\n\ -_080F78EA:\n\ - ldr r0, =gContestMonConditions\n\ - mov r1, r8\n\ - lsls r7, r1, 1\n\ - adds r0, r7, r0\n\ - movs r2, 0\n\ - ldrsh r1, [r0, r2]\n\ - lsls r0, r1, 5\n\ - subs r0, r1\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - lsls r0, 3\n\ - ldr r4, [sp]\n\ - asrs r5, r4, 16\n\ - adds r1, r5, 0\n\ - cmp r5, 0\n\ - bge _080F790C\n\ - negs r1, r5\n\ -_080F790C:\n\ - bl __divsi3\n\ - adds r4, r0, 0\n\ - movs r1, 0xA\n\ - bl __modsi3\n\ - cmp r0, 0x4\n\ - ble _080F791E\n\ - adds r4, 0xA\n\ -_080F791E:\n\ - ldr r0, =gUnknown_0203A034\n\ - mov r9, r0\n\ - ldr r0, [r0]\n\ - ldr r0, [r0, 0x4]\n\ - mov r1, r10\n\ - adds r6, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - str r0, [r6]\n\ - ldr r0, =gUnknown_02039F18\n\ - adds r7, r0\n\ - movs r2, 0\n\ - ldrsh r1, [r7, r2]\n\ - cmp r1, 0\n\ - bge _080F7942\n\ - negs r1, r1\n\ -_080F7942:\n\ - lsls r0, r1, 5\n\ - subs r0, r1\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - lsls r0, 3\n\ - adds r1, r5, 0\n\ - cmp r1, 0\n\ - bge _080F7954\n\ - negs r1, r1\n\ -_080F7954:\n\ - bl __divsi3\n\ - adds r4, r0, 0\n\ - movs r1, 0xA\n\ - bl __modsi3\n\ - cmp r0, 0x4\n\ - ble _080F7966\n\ - adds r4, 0xA\n\ -_080F7966:\n\ - adds r0, r4, 0\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - str r0, [r6, 0x4]\n\ - movs r4, 0\n\ - ldrsh r0, [r7, r4]\n\ - cmp r0, 0\n\ - bge _080F797C\n\ - movs r0, 0x1\n\ - strb r0, [r6, 0x10]\n\ -_080F797C:\n\ - mov r5, r9\n\ - ldr r0, [r5]\n\ - ldr r0, [r0, 0x4]\n\ - mov r1, r10\n\ - adds r4, r1, r0\n\ - ldr r1, [r4]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - subs r0, r1\n\ - lsls r0, 11\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - adds r1, r0, 0\n\ - movs r5, 0xFF\n\ - ands r0, r5\n\ - cmp r0, 0x7F\n\ - bls _080F79A8\n\ - movs r2, 0x80\n\ - lsls r2, 1\n\ - adds r1, r2\n\ -_080F79A8:\n\ - lsrs r0, r1, 8\n\ - str r0, [r4, 0x8]\n\ - ldr r1, [r4, 0x4]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - subs r0, r1\n\ - lsls r0, 11\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - adds r1, r0, 0\n\ - ands r0, r5\n\ - cmp r0, 0x7F\n\ - bls _080F79CC\n\ - movs r5, 0x80\n\ - lsls r5, 1\n\ - adds r1, r5\n\ -_080F79CC:\n\ - lsrs r0, r1, 8\n\ - str r0, [r4, 0xC]\n\ - mov r0, r8\n\ - lsls r4, r0, 24\n\ - lsrs r4, 24\n\ - adds r0, r4, 0\n\ - movs r1, 0x1\n\ - bl sub_80F7310\n\ - mov r2, r9\n\ - ldr r1, [r2]\n\ - ldr r1, [r1, 0x4]\n\ - add r1, r10\n\ - strb r0, [r1, 0x11]\n\ - adds r0, r4, 0\n\ - movs r1, 0x1\n\ - bl sub_80F7364\n\ - mov r4, r9\n\ - ldr r1, [r4]\n\ - ldr r1, [r1, 0x4]\n\ - add r1, r10\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - cmp r0, 0\n\ - bge _080F7A02\n\ - negs r0, r0\n\ -_080F7A02:\n\ - strb r0, [r1, 0x12]\n\ - ldr r0, =gContestFinalStandings\n\ - add r0, r8\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _080F7A60\n\ - mov r5, r9\n\ - ldr r0, [r5]\n\ - ldr r0, [r0, 0x4]\n\ - mov r2, r10\n\ - adds r1, r2, r0\n\ - ldr r5, [r1, 0x8]\n\ - ldrh r3, [r1, 0x8]\n\ - ldr r4, [r1, 0xC]\n\ - ldrh r2, [r1, 0xC]\n\ - ldrb r0, [r1, 0x10]\n\ - cmp r0, 0\n\ - beq _080F7A2C\n\ - lsls r0, r2, 16\n\ - negs r0, r0\n\ - lsrs r2, r0, 16\n\ -_080F7A2C:\n\ - lsls r0, r3, 16\n\ - asrs r3, r0, 16\n\ - lsls r0, r2, 16\n\ - asrs r2, r0, 16\n\ - adds r0, r3, r2\n\ - cmp r0, 0x58\n\ - bne _080F7A60\n\ - cmp r2, 0\n\ - ble _080F7A58\n\ - subs r0, r4, 0x1\n\ - str r0, [r1, 0xC]\n\ - b _080F7A60\n\ - .pool\n\ -_080F7A58:\n\ - cmp r3, 0\n\ - ble _080F7A60\n\ - subs r0, r5, 0x1\n\ - str r0, [r1, 0x8]\n\ -_080F7A60:\n\ - movs r4, 0x14\n\ - add r10, r4\n\ - movs r5, 0x1\n\ - add r8, r5\n\ - mov r0, r8\n\ - cmp r0, 0x3\n\ - bgt _080F7A70\n\ - b _080F78EA\n\ -_080F7A70:\n\ - add sp, 0x4\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"); -} - -// static void sub_80F7A80(u8 arg0, u8 arg1) -// { -// int i; -// u8 taskId; -// u8 sp8, spC; - -// sp8 = 0; -// spC = 0; -// if (!arg0) -// { -// u32 var0; -// for (i = 0; i < 4; i++) -// { -// int var1 = gUnknown_0203A034->unk4->unk0[i].unk11; -// if (arg1 < var1) -// { -// int x = var1 + 19; -// x -= arg1; -// x--; -// FillBgTilemapBufferRect_Palette0(1, 0x60B3, x, i * 3 + 5, 1, 1); -// taskId = CreateTask(sub_80F7CA8, 10); -// var0 = ((gUnknown_0203A034->unk4->unk0[i].unk8 << 16) / gUnknown_0203A034->unk4->unk0[i].unk11) * (arg1 + 1); -// var0 &= 0xFFFF; -// if (var0 > 0x7FFF) -// var0 += 0x10000; - -// gTasks[taskId].data[0] = i; -// gTasks[taskId].data[1] = var0 >> 16; -// gUnknown_0203A034->unk0->unk14++; -// sp8++; -// } -// } -// } -// else -// { -// u32 var0; -// for (i = 0; i < 4; i++) -// { -// int tile; -// s8 var1 = gUnknown_0203A034->unk4->unk0[i].unk12; -// tile = gUnknown_0203A034->unk4->unk0[i].unk10 ? 0x60A5 : 0x60A3; -// if (arg1 < var1) -// { -// int thing = ((s8)arg1 - 19); -// int x = var1 - thing; -// x--; -// FillBgTilemapBufferRect_Palette0(1, tile, x, i * 3 + 6, 1, 1); -// taskId = CreateTask(sub_80F7CA8, 10); -// var0 = ((gUnknown_0203A034->unk4->unk0[i].unkC << 16) / gUnknown_0203A034->unk4->unk0[i].unk12) * (arg1 + 1); -// var0 &= 0xFFFF; -// if (var0 > 0x7FFF) -// var0 += 0x10000; - -// gTasks[taskId].data[0] = i; -// if (gUnknown_0203A034->unk4->unk0[i].unk10) -// { -// gTasks[taskId].data[2] = 1; -// spC++; -// } -// else -// { -// sp8++; -// } - -// if (gUnknown_0203A034->unk4->unk0[i].unk10) -// gTasks[taskId].data[1] = gUnknown_0203A034->unk4->unk0[i].unk8 - (var0 >> 16); -// else -// gTasks[taskId].data[1] = gUnknown_0203A034->unk4->unk0[i].unk8 + (var0 >> 16); - -// gUnknown_0203A034->unk0->unk14++; -// } -// } -// } - -// if (spC) -// PlaySE(SE_PIN); - -// if (sp8) -// PlaySE(SE_BAN); -// } + int i, r4; + u32 r1; + s16 r2; + s8 var; + + r2 = gUnknown_02039F08[0]; + for (i = 1; i < 4; i++) + { + if (r2 < gUnknown_02039F08[i]) + r2 = gUnknown_02039F08[i]; + } + + if (r2 < 0) + { + r2 = gUnknown_02039F08[0]; + for (i = 1; i < 4; i++) + { + if (r2 > gUnknown_02039F08[i]) + r2 = gUnknown_02039F08[i]; + } + } + + for (i = 0; i < 4; i++) + { + r4 = (gContestMonConditions[i] * 1000) / abs(r2); + if (r4 % 10 > 4) + r4 += 10; + (*gUnknown_0203A034->unk4)[i].unk0 = r4 / 10; + + r4 = (abs(gUnknown_02039F18[i]) * 1000) / abs(r2); + if (r4 % 10 > 4) + r4 += 10; + (*gUnknown_0203A034->unk4)[i].unk4 = r4 / 10; + + if (gUnknown_02039F18[i] < 0) + (*gUnknown_0203A034->unk4)[i].unk10 = 1; + + r1 = ((*gUnknown_0203A034->unk4)[i].unk0 * 22528) / 100; + if ((r1 & 0xFF) > 0x7F) + r1 += 0x100; + (*gUnknown_0203A034->unk4)[i].unk8 = r1 >> 8; + + r1 = ((*gUnknown_0203A034->unk4)[i].unk4 * 22528) / 100; + if ((r1 & 0xFF) > 0x7F) + r1 += 0x100; + (*gUnknown_0203A034->unk4)[i].unkC = r1 >> 8; + + (*gUnknown_0203A034->unk4)[i].unk11 = sub_80F7310(i, 1); + var = sub_80F7364(i, 1); + (*gUnknown_0203A034->unk4)[i].unk12 = abs(var); + + if (gContestFinalStandings[i]) + { + s16 var1 = (*gUnknown_0203A034->unk4)[i].unk8; + s16 var2 = (*gUnknown_0203A034->unk4)[i].unkC; + + if ((*gUnknown_0203A034->unk4)[i].unk10) + var2 *= -1; + + if (var1 + var2 == 88) + { + if (var2 > 0) + (*gUnknown_0203A034->unk4)[i].unkC--; + else if (var1 > 0) + (*gUnknown_0203A034->unk4)[i].unk8--; + } + } + } +} -NAKED static void sub_80F7A80(u8 arg0, u8 arg1) { - asm_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, 0x14\n\ - lsls r0, 24\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - mov r8, r1\n\ - movs r1, 0\n\ - str r1, [sp, 0x8]\n\ - movs r3, 0\n\ - str r3, [sp, 0xC]\n\ - cmp r0, 0\n\ - bne _080F7B5C\n\ - mov r9, r3\n\ - ldr r4, =gUnknown_0203A034\n\ - mov r10, r4\n\ - movs r7, 0xA0\n\ - lsls r7, 19\n\ - movs r6, 0\n\ -_080F7AAC:\n\ - mov r1, r10\n\ - ldr r0, [r1]\n\ - ldr r0, [r0, 0x4]\n\ - adds r0, r6, r0\n\ - ldrb r2, [r0, 0x11]\n\ - cmp r8, r2\n\ - bcs _080F7B2E\n\ - adds r2, 0x13\n\ - mov r3, r8\n\ - subs r2, r3\n\ - subs r2, 0x1\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - lsrs r3, r7, 24\n\ - movs r0, 0x1\n\ - str r0, [sp]\n\ - str r0, [sp, 0x4]\n\ - ldr r1, =0x000060b3\n\ - bl FillBgTilemapBufferRect_Palette0\n\ - ldr r0, =sub_80F7CA8\n\ - movs r1, 0xA\n\ - bl CreateTask\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - mov r0, r10\n\ - ldr r4, [r0]\n\ - ldr r1, [r4, 0x4]\n\ - adds r1, r6, r1\n\ - ldr r0, [r1, 0x8]\n\ - lsls r0, 16\n\ - ldrb r1, [r1, 0x11]\n\ - bl __udivsi3\n\ - mov r1, r8\n\ - adds r1, 0x1\n\ - adds r3, r0, 0\n\ - muls r3, r1\n\ - ldr r0, =0x0000ffff\n\ - ands r0, r3\n\ - ldr r1, =0x00007fff\n\ - cmp r0, r1\n\ - bls _080F7B0A\n\ - movs r1, 0x80\n\ - lsls r1, 9\n\ - adds r3, r1\n\ -_080F7B0A:\n\ - ldr r1, =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - mov r1, r9\n\ - strh r1, [r0, 0x8]\n\ - lsrs r1, r3, 16\n\ - strh r1, [r0, 0xA]\n\ - ldr r1, [r4]\n\ - ldrb r0, [r1, 0x14]\n\ - adds r0, 0x1\n\ - strb r0, [r1, 0x14]\n\ - ldr r0, [sp, 0x8]\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x8]\n\ -_080F7B2E:\n\ - movs r3, 0xC0\n\ - lsls r3, 18\n\ - adds r7, r3\n\ - adds r6, 0x14\n\ - movs r4, 0x1\n\ - add r9, r4\n\ - mov r0, r9\n\ - cmp r0, 0x3\n\ - ble _080F7AAC\n\ - b _080F7C7E\n\ - .pool\n\ -_080F7B5C:\n\ - movs r1, 0\n\ - mov r9, r1\n\ - mov r10, r1\n\ - movs r3, 0xC0\n\ - lsls r3, 19\n\ - str r3, [sp, 0x10]\n\ -_080F7B68:\n\ - ldr r4, =gUnknown_0203A034\n\ - ldr r0, [r4]\n\ - ldr r0, [r0, 0x4]\n\ - add r0, r10\n\ - ldrb r2, [r0, 0x12]\n\ - ldrb r0, [r0, 0x10]\n\ - ldr r1, =0x000060a3\n\ - cmp r0, 0\n\ - beq _080F7B7C\n\ - adds r1, 0x2\n\ -_080F7B7C:\n\ - lsls r0, r2, 24\n\ - asrs r0, 24\n\ - cmp r8, r0\n\ - bge _080F7C64\n\ - mov r3, r8\n\ - lsls r2, r3, 24\n\ - asrs r2, 24\n\ - subs r2, 0x13\n\ - subs r2, r0, r2\n\ - subs r2, 0x1\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - ldr r4, [sp, 0x10]\n\ - lsrs r3, r4, 24\n\ - movs r7, 0x1\n\ - str r7, [sp]\n\ - str r7, [sp, 0x4]\n\ - movs r0, 0x1\n\ - bl FillBgTilemapBufferRect_Palette0\n\ - ldr r0, =sub_80F7CA8\n\ - movs r1, 0xA\n\ - bl CreateTask\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - ldr r0, =gUnknown_0203A034\n\ - ldr r6, [r0]\n\ - ldr r1, [r6, 0x4]\n\ - add r1, r10\n\ - ldr r0, [r1, 0xC]\n\ - lsls r0, 16\n\ - ldrb r1, [r1, 0x12]\n\ - bl __udivsi3\n\ - mov r1, r8\n\ - adds r1, 0x1\n\ - adds r3, r0, 0\n\ - muls r3, r1\n\ - ldr r0, =0x0000ffff\n\ - ands r0, r3\n\ - ldr r1, =0x00007fff\n\ - cmp r0, r1\n\ - bls _080F7BDA\n\ - movs r1, 0x80\n\ - lsls r1, 9\n\ - adds r3, r1\n\ -_080F7BDA:\n\ - ldr r1, =gTasks\n\ - lsls r2, r5, 2\n\ - adds r0, r2, r5\n\ - lsls r0, 3\n\ - adds r4, r0, r1\n\ - mov r0, r9\n\ - strh r0, [r4, 0x8]\n\ - ldr r0, [r6, 0x4]\n\ - add r0, r10\n\ - ldrb r0, [r0, 0x10]\n\ - adds r6, r1, 0\n\ - cmp r0, 0\n\ - beq _080F7C1C\n\ - strh r7, [r4, 0xC]\n\ - ldr r0, [sp, 0xC]\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0xC]\n\ - b _080F7C26\n\ - .pool\n\ -_080F7C1C:\n\ - ldr r0, [sp, 0x8]\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x8]\n\ -_080F7C26:\n\ - ldr r1, =gUnknown_0203A034\n\ - ldr r0, [r1]\n\ - ldr r0, [r0, 0x4]\n\ - mov r4, r10\n\ - adds r1, r4, r0\n\ - ldrb r0, [r1, 0x10]\n\ - ldr r4, =gUnknown_0203A034\n\ - cmp r0, 0\n\ - beq _080F7C4C\n\ - adds r0, r2, r5\n\ - lsls r0, 3\n\ - adds r0, r6\n\ - lsrs r2, r3, 16\n\ - ldr r1, [r1, 0x8]\n\ - subs r1, r2\n\ - b _080F7C58\n\ - .pool\n\ -_080F7C4C:\n\ - adds r0, r2, r5\n\ - lsls r0, 3\n\ - adds r0, r6\n\ - lsrs r2, r3, 16\n\ - ldr r1, [r1, 0x8]\n\ - adds r1, r2\n\ -_080F7C58:\n\ - strh r1, [r0, 0xA]\n\ - ldr r0, [r4]\n\ - ldr r1, [r0]\n\ - ldrb r0, [r1, 0x14]\n\ - adds r0, 0x1\n\ - strb r0, [r1, 0x14]\n\ -_080F7C64:\n\ - movs r0, 0x14\n\ - add r10, r0\n\ - ldr r1, [sp, 0x10]\n\ - movs r3, 0xC0\n\ - lsls r3, 18\n\ - adds r1, r3\n\ - str r1, [sp, 0x10]\n\ - movs r4, 0x1\n\ - add r9, r4\n\ - mov r0, r9\n\ - cmp r0, 0x3\n\ - bgt _080F7C7E\n\ - b _080F7B68\n\ -_080F7C7E:\n\ - ldr r1, [sp, 0xC]\n\ - cmp r1, 0\n\ - beq _080F7C8A\n\ - movs r0, 0x16\n\ - bl PlaySE\n\ -_080F7C8A:\n\ - ldr r3, [sp, 0x8]\n\ - cmp r3, 0\n\ - beq _080F7C96\n\ - movs r0, 0x15\n\ - bl PlaySE\n\ -_080F7C96:\n\ - add sp, 0x14\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"); + int i, taskId; + u32 var0; + u8 sp8 = 0, spC = 0; + + if (!arg0) + { + for (i = 0; i < 4; i++) + { + u8 unk = (*gUnknown_0203A034->unk4)[i].unk11; + if (arg1 < unk) + { + FillBgTilemapBufferRect_Palette0(1, 0x60B3, ((19 + unk) - arg1) - 1, i * 3 + 5, 1, 1); + taskId = CreateTask(sub_80F7CA8, 10); + + var0 = (((*gUnknown_0203A034->unk4)[i].unk8 << 16) / (*gUnknown_0203A034->unk4)[i].unk11) * (arg1 + 1); + if ((var0 & 0xFFFF) > 0x7FFF) + var0 += 0x10000; + + gTasks[taskId].data[0] = i; + gTasks[taskId].data[1] = var0 >> 16; + gUnknown_0203A034->unk0->unk14++; + sp8++; + } + } + } + else + { + for (i = 0; i < 4; i++) + { + s8 unk = (*gUnknown_0203A034->unk4)[i].unk12; + u32 tile = (*gUnknown_0203A034->unk4)[i].unk10 ? 0x60A5 : 0x60A3; + if (arg1 < unk) + { + FillBgTilemapBufferRect_Palette0(1, tile, ((19 + unk) - arg1) - 1, i * 3 + 6, 1, 1); + taskId = CreateTask(sub_80F7CA8, 10); + + var0 = (((*gUnknown_0203A034->unk4)[i].unkC << 16) / (*gUnknown_0203A034->unk4)[i].unk12) * (arg1 + 1); + if ((var0 & 0xFFFF) > 0x7FFF) + var0 += 0x10000; + + gTasks[taskId].data[0] = i; + if ((*gUnknown_0203A034->unk4)[i].unk10) + { + gTasks[taskId].data[2] = 1; + spC++; + } + else + { + sp8++; + } + + if ((*gUnknown_0203A034->unk4)[i].unk10) + gTasks[taskId].data[1] = -(var0 >> 16) + (*gUnknown_0203A034->unk4)[i].unk8 ; + else + gTasks[taskId].data[1] = (var0 >> 16) + (*gUnknown_0203A034->unk4)[i].unk8; + + gUnknown_0203A034->unk0->unk14++; + } + } + } + + if (spC) + PlaySE(SE_BOO); + if (sp8) + PlaySE(SE_PIN); } void sub_80F7CA8(u8 taskId) @@ -2624,8 +2051,7 @@ void sub_80F8290(void) void sub_80F82B4(void) { - u8 i; - u8 count; + u8 i, count; for (i = 0, count = 0; i < 4; i++) { diff --git a/src/contest_painting.c b/src/contest_painting.c index b43923c7b..66127cbbc 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -28,11 +28,11 @@ struct ContestWinner *gUnknown_030061C0; u16 *gContestPaintingMonPalette; // IWRAM bss -IWRAM_DATA u8 gContestPaintingState; -IWRAM_DATA u16 gContestPaintingMosaicVal; -IWRAM_DATA u16 gContestPaintingFadeCounter; -IWRAM_DATA bool8 gUnknown_030011F6; -IWRAM_DATA u8 gContestPaintingWindowId; +static u8 gContestPaintingState; +static u16 gContestPaintingMosaicVal; +static u16 gContestPaintingFadeCounter; +static bool8 gUnknown_030011F6; +static u8 gContestPaintingWindowId; static void ShowContestPainting(void); static void HoldContestPainting(void); @@ -250,8 +250,7 @@ static void HoldContestPainting(void) case 1: if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)) { - u8 two = 2; //needed to make the asm match - gContestPaintingState = two; + gContestPaintingState++; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); } @@ -363,7 +362,7 @@ static void VBlankCB_ContestPainting(void) void sub_81302E8(u16 species, u8 arg1) { - const void *pal = GetFrontSpritePalFromSpeciesAndPersonality(species, gUnknown_030061C0->trainerId, gUnknown_030061C0->personality); + const void *pal = GetMonSpritePalFromSpeciesAndPersonality(species, gUnknown_030061C0->trainerId, gUnknown_030061C0->personality); LZDecompressVram(pal, gContestPaintingMonPalette); if (!arg1) { @@ -685,7 +684,7 @@ static void sub_8130760(u8 contestResult) gUnknown_030061A0.var_16 = 2; gUnknown_030061A0.var_0 = contestResult; - gUnknown_030061A0.var_10 = 0x6010000; + gUnknown_030061A0.var_10 = OBJ_VRAM0; sub_8124F2C(&gUnknown_030061A0); sub_81261A4(&gUnknown_030061A0); diff --git a/src/data/.gitignore b/src/data/.gitignore new file mode 100755 index 000000000..eaf9e1f6d --- /dev/null +++ b/src/data/.gitignore @@ -0,0 +1 @@ +wild_encounters.h diff --git a/src/data/battle_frontier/battle_pyramid_level_50_wild_mons.h b/src/data/battle_frontier/battle_pyramid_level_50_wild_mons.h index 108b3a3b0..d706aafee 100644 --- a/src/data/battle_frontier/battle_pyramid_level_50_wild_mons.h +++ b/src/data/battle_frontier/battle_pyramid_level_50_wild_mons.h @@ -3,49 +3,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round1[] = { .species = SPECIES_PLUSLE, .lvl = 35, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_WAVE, MOVE_SPARK, MOVE_ENCORE, MOVE_NONE} }, { .species = SPECIES_MINUN, .lvl = 35, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_QUICK_ATTACK, MOVE_NONE} }, { .species = SPECIES_PIKACHU, .lvl = 37, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_SLAM, MOVE_NONE} }, { .species = SPECIES_ELECTABUZZ, .lvl = 37, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_PUNCH, MOVE_SWIFT, MOVE_SCREECH, MOVE_NONE} }, { .species = SPECIES_VILEPLUME, .lvl = 39, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_STUN_SPORE, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_MANECTRIC, .lvl = 39, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_QUICK_ATTACK, MOVE_NONE} }, { .species = SPECIES_BRELOOM, .lvl = 40, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_STUN_SPORE, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_MACH_PUNCH} }, { .species = SPECIES_JOLTEON, .lvl = 40, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_PIN_MISSILE, MOVE_QUICK_ATTACK} } }; @@ -55,49 +55,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round2[] = { .species = SPECIES_GULPIN, .lvl = 36, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_SLUDGE, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_ROSELIA, .lvl = 36, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_GIGA_DRAIN, MOVE_MAGICAL_LEAF, MOVE_PETAL_DANCE} }, { .species = SPECIES_BUTTERFREE, .lvl = 38, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_POISON_POWDER, MOVE_GUST, MOVE_PSYBEAM, MOVE_NONE} }, { .species = SPECIES_SEVIPER, .lvl = 38, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_POISON_FANG, MOVE_SWAGGER, MOVE_CRUNCH, MOVE_POISON_TAIL} }, { .species = SPECIES_SKARMORY, .lvl = 40, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_FLY, MOVE_STEEL_WING, MOVE_NONE} }, { .species = SPECIES_LUDICOLO, .lvl = 40, - .abilityBit = 1, + .abilityNum = 1, .moves = {MOVE_TOXIC, MOVE_PROTECT, MOVE_DIVE, MOVE_RAIN_DANCE} }, { .species = SPECIES_CROBAT, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_CONFUSE_RAY, MOVE_MEAN_LOOK, MOVE_BITE} }, { .species = SPECIES_GENGAR, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_SHADOW_PUNCH, MOVE_NIGHT_SHADE, MOVE_NONE} } }; @@ -107,49 +107,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round3[] = { .species = SPECIES_GROWLITHE, .lvl = 37, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FLAME_WHEEL, MOVE_TAKE_DOWN, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_VULPIX, .lvl = 37, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WILL_O_WISP, MOVE_FLAMETHROWER, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_MAGCARGO, .lvl = 39, - .abilityBit = 1, + .abilityNum = 1, .moves = {MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_NINETALES, .lvl = 39, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WILL_O_WISP, MOVE_QUICK_ATTACK, MOVE_FLAMETHROWER, MOVE_NONE} }, { .species = SPECIES_MEDICHAM, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FIRE_PUNCH, MOVE_HI_JUMP_KICK, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_WEEZING, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WILL_O_WISP, MOVE_FLAMETHROWER, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_DUSCLOPS, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_MEAN_LOOK, MOVE_SHADOW_PUNCH} }, { .species = SPECIES_HOUNDOOM, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FLAMETHROWER, MOVE_BITE, MOVE_SOLAR_BEAM, MOVE_OVERHEAT} } }; @@ -159,49 +159,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round4[] = { .species = SPECIES_DUNSPARCE, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SPITE, MOVE_TOXIC, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_BANETTE, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_GRUDGE, MOVE_WILL_O_WISP, MOVE_NIGHT_SHADE, MOVE_NONE} }, { .species = SPECIES_MISDREAVUS, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_GRUDGE, MOVE_SPITE, MOVE_SHADOW_BALL, MOVE_NONE} }, { .species = SPECIES_NINETALES, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_GRUDGE, MOVE_WILL_O_WISP, MOVE_OVERHEAT, MOVE_NONE} }, { .species = SPECIES_ABSOL, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_BITE, MOVE_AERIAL_ACE, MOVE_SHADOW_BALL, MOVE_PROTECT} }, { .species = SPECIES_DUSCLOPS, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WILL_O_WISP, MOVE_PROTECT, MOVE_TOXIC, MOVE_SHADOW_BALL} }, { .species = SPECIES_SHEDINJA, .lvl = 45, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_GRUDGE, MOVE_TOXIC, MOVE_SPITE, MOVE_NONE} }, { .species = SPECIES_GENGAR, .lvl = 45, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_GRUDGE, MOVE_SPITE, MOVE_NIGHT_SHADE, MOVE_NONE} } }; @@ -211,49 +211,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round5[] = { .species = SPECIES_HAUNTER, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_NIGHT_SHADE, MOVE_THUNDERBOLT, MOVE_SLUDGE_BOMB, MOVE_NONE} }, { .species = SPECIES_CHIMECHO, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_DOUBLE_EDGE, MOVE_TOXIC, MOVE_PSYCHIC, MOVE_PROTECT} }, { .species = SPECIES_SOLROCK, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_FIRE_BLAST, MOVE_TOXIC} }, { .species = SPECIES_MISDREAVUS, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYCHIC, MOVE_SPITE, MOVE_SHADOW_BALL, MOVE_PAIN_SPLIT} }, { .species = SPECIES_CLAYDOL, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_SELF_DESTRUCT, MOVE_PSYCHIC} }, { .species = SPECIES_WEEZING, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SLUDGE_BOMB, MOVE_SELF_DESTRUCT, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_FLYGON, .lvl = 45, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_DRAGON_CLAW, MOVE_DRAGON_BREATH} }, { .species = SPECIES_GENGAR, .lvl = 45, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_NIGHT_SHADE} } }; @@ -263,49 +263,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round6[] = { .species = SPECIES_DIGLETT, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ROCK_SLIDE, MOVE_SLASH, MOVE_DIG, MOVE_NONE} }, { .species = SPECIES_TRAPINCH, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ROCK_SLIDE, MOVE_EARTHQUAKE, MOVE_GIGA_DRAIN, MOVE_NONE} }, { .species = SPECIES_WYNAUT, .lvl = 42, - .abilityBit = 0, + .abilityNum = 0, .moves = {MOVE_DESTINY_BOND, MOVE_SPLASH, MOVE_COUNTER, MOVE_MIRROR_COAT} }, { .species = SPECIES_DIGLETT, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_MAGNITUDE, MOVE_TOXIC} }, { .species = SPECIES_TRAPINCH, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ROCK_SLIDE, MOVE_EARTHQUAKE, MOVE_GIGA_DRAIN, MOVE_PROTECT} }, { .species = SPECIES_WYNAUT, .lvl = 44, - .abilityBit = 0, + .abilityNum = 0, .moves = {MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND, MOVE_NONE} }, { .species = SPECIES_WOBBUFFET, .lvl = 45, - .abilityBit = 0, + .abilityNum = 0, .moves = {MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND, MOVE_NONE} }, { .species = SPECIES_DUGTRIO, .lvl = 45, - .abilityBit = 1, + .abilityNum = 1, .moves = {MOVE_ROCK_SLIDE, MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_PROTECT} } }; @@ -315,49 +315,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round7[] = { .species = SPECIES_GLALIE, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ICE_BEAM, MOVE_CRUNCH, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_SNEASEL, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ICE_BEAM, MOVE_CRUSH_CLAW, MOVE_SPITE, MOVE_NONE} }, { .species = SPECIES_DEWGONG, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_BLIZZARD, MOVE_DOUBLE_EDGE, MOVE_SURF, MOVE_NONE} }, { .species = SPECIES_PILOSWINE, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_TOXIC, MOVE_NONE} }, { .species = SPECIES_JYNX, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_BLIZZARD, MOVE_LOVELY_KISS, MOVE_PSYCHIC, MOVE_NONE} }, { .species = SPECIES_CLOYSTER, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ICE_BEAM, MOVE_SURF, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_WALREIN, .lvl = 45, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_BLIZZARD, MOVE_BODY_SLAM, MOVE_SURF, MOVE_NONE} }, { .species = SPECIES_LAPRAS, .lvl = 45, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SING, MOVE_BODY_SLAM, MOVE_ICE_BEAM, MOVE_PSYCHIC} } }; @@ -367,49 +367,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round8[] = { .species = SPECIES_WEEZING, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SELF_DESTRUCT, MOVE_SLUDGE_BOMB, MOVE_FIRE_BLAST, MOVE_NONE} }, { .species = SPECIES_ELECTRODE, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SELF_DESTRUCT, MOVE_THUNDERBOLT, MOVE_ROLLOUT, MOVE_NONE} }, { .species = SPECIES_GENGAR, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_DESTINY_BOND, MOVE_LICK, MOVE_SHADOW_BALL, MOVE_NONE} }, { .species = SPECIES_GOLEM, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SELF_DESTRUCT, MOVE_PROTECT, MOVE_EARTHQUAKE, MOVE_NONE} }, { .species = SPECIES_PINECO, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_DOUBLE_EDGE, MOVE_GIGA_DRAIN, MOVE_NONE} }, { .species = SPECIES_SOLROCK, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_FIRE_SPIN, MOVE_PSYWAVE, MOVE_NONE} }, { .species = SPECIES_FORRETRESS, .lvl = 45, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_TOXIC, MOVE_ROCK_SLIDE, MOVE_NONE} }, { .species = SPECIES_SHIFTRY, .lvl = 45, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_GIGA_DRAIN, MOVE_SOLAR_BEAM, MOVE_PROTECT} } }; @@ -419,49 +419,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round9[] = { .species = SPECIES_WOBBUFFET, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_SAFEGUARD, MOVE_DESTINY_BOND} }, { .species = SPECIES_METANG, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_TOXIC, MOVE_SLUDGE_BOMB, MOVE_PSYCHIC} }, { .species = SPECIES_EXEGGUTOR, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EGG_BOMB, MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_NONE} }, { .species = SPECIES_SLOWKING, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SHADOW_BALL, MOVE_SURF, MOVE_ICE_BEAM, MOVE_FLAMETHROWER} }, { .species = SPECIES_XATU, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_CONFUSE_RAY, MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_STEEL_WING} }, { .species = SPECIES_ALAKAZAM, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_TOXIC} }, { .species = SPECIES_STARMIE, .lvl = 45, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_SURF, MOVE_ICE_BEAM} }, { .species = SPECIES_ESPEON, .lvl = 45, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYCHIC, MOVE_DIG, MOVE_SHADOW_BALL, MOVE_NONE} } }; @@ -471,49 +471,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round10[] = { .species = SPECIES_GOLEM, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SELF_DESTRUCT, MOVE_EARTHQUAKE, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_STEELIX, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_IRON_TAIL, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_NONE} }, { .species = SPECIES_OMASTAR, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SURF, MOVE_MUD_SHOT, MOVE_ANCIENT_POWER, MOVE_NONE} }, { .species = SPECIES_LUNATONE, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYPNOSIS, MOVE_PSYWAVE, MOVE_EXPLOSION, MOVE_NONE} }, { .species = SPECIES_SHUCKLE, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_PROTECT, MOVE_WRAP, MOVE_NONE} }, { .species = SPECIES_ARMALDO, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ANCIENT_POWER, MOVE_PROTECT, MOVE_AERIAL_ACE, MOVE_NONE} }, { .species = SPECIES_CRADILY, .lvl = 45, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN, MOVE_CONFUSE_RAY, MOVE_NONE} }, { .species = SPECIES_AERODACTYL, .lvl = 45, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYPER_BEAM, MOVE_ROCK_SLIDE, MOVE_BITE, MOVE_NONE} } }; @@ -523,49 +523,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round11[] = { .species = SPECIES_POLIWRATH, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SUBMISSION, MOVE_FOCUS_PUNCH, MOVE_SURF, MOVE_NONE} }, { .species = SPECIES_HARIYAMA, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FAKE_OUT, MOVE_SURF, MOVE_FOCUS_PUNCH, MOVE_NONE} }, { .species = SPECIES_BRELOOM, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_MEDICHAM, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_FOCUS_PUNCH} }, { .species = SPECIES_HITMONCHAN, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_FOCUS_PUNCH} }, { .species = SPECIES_HITMONLEE, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_MEGA_KICK, MOVE_FOCUS_PUNCH, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_HERACROSS, .lvl = 45, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_FOCUS_PUNCH, MOVE_ROCK_SLIDE} }, { .species = SPECIES_MACHAMP, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ROCK_SLIDE, MOVE_EARTHQUAKE, MOVE_FOCUS_PUNCH, MOVE_SEISMIC_TOSS} } }; @@ -575,49 +575,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round12[] = { .species = SPECIES_QUAGSIRE, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_RAIN_DANCE, MOVE_SURF, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_TROPIUS, .lvl = 41, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_PUPITAR, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SANDSTORM, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_NONE} }, { .species = SPECIES_LAPRAS, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HAIL, MOVE_ICE_BEAM, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_CACTURNE, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SANDSTORM, MOVE_GIGA_DRAIN, MOVE_SOLAR_BEAM, MOVE_NONE} }, { .species = SPECIES_FLAREON, .lvl = 44, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SUNNY_DAY, MOVE_FLAMETHROWER, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_WALREIN, .lvl = 45, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HAIL, MOVE_ICE_BEAM, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_GYARADOS, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_RAIN_DANCE, MOVE_THUNDER, MOVE_HYDRO_PUMP, MOVE_NONE} } }; @@ -627,49 +627,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round13[] = { .species = SPECIES_PINECO, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_TAKE_DOWN, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_SHUCKLE, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_EARTHQUAKE, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_VENOMOTH, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SILVER_WIND, MOVE_POISON_POWDER, MOVE_SLEEP_POWDER, MOVE_PSYCHIC} }, { .species = SPECIES_SCIZOR, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_QUICK_ATTACK, MOVE_METAL_CLAW, MOVE_FURY_CUTTER, MOVE_PURSUIT} }, { .species = SPECIES_HERACROSS, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_MEGAHORN, MOVE_BRICK_BREAK, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE} }, { .species = SPECIES_FORRETRESS, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_ARMALDO, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WATER_PULSE, MOVE_PROTECT, MOVE_ROCK_SLIDE, MOVE_NONE} }, { .species = SPECIES_SHEDINJA, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SHADOW_BALL, MOVE_TOXIC, MOVE_SPITE, MOVE_GRUDGE} } }; @@ -679,49 +679,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round14[] = { .species = SPECIES_SABLEYE, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_NIGHT_SHADE, MOVE_PSYCHIC, MOVE_AERIAL_ACE, MOVE_NONE} }, { .species = SPECIES_SNEASEL, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ICE_BEAM, MOVE_TAUNT, MOVE_FAINT_ATTACK, MOVE_QUICK_ATTACK} }, { .species = SPECIES_CRAWDAUNT, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_CRABHAMMER, MOVE_ICE_BEAM, MOVE_SURF, MOVE_NONE} }, { .species = SPECIES_SHIFTRY, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_GIGA_DRAIN} }, { .species = SPECIES_CACTURNE, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_GIGA_DRAIN, MOVE_NEEDLE_ARM, MOVE_NONE} }, { .species = SPECIES_ABSOL, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_BITE, MOVE_PROTECT, MOVE_SLASH, MOVE_NONE} }, { .species = SPECIES_HOUNDOOM, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_OVERHEAT, MOVE_CRUNCH, MOVE_SHADOW_BALL, MOVE_PROTECT} }, { .species = SPECIES_UMBREON, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_IRON_TAIL, MOVE_QUICK_ATTACK} } }; @@ -731,49 +731,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round15[] = { .species = SPECIES_OCTILLERY, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_OCTAZOOKA, MOVE_ICE_BEAM, MOVE_FIRE_BLAST, MOVE_NONE} }, { .species = SPECIES_DEWGONG, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WATER_PULSE, MOVE_ICE_BEAM, MOVE_HEADBUTT, MOVE_NONE} }, { .species = SPECIES_PELIPPER, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PROTECT, MOVE_SUPERSONIC, MOVE_SURF, MOVE_NONE} }, { .species = SPECIES_QUAGSIRE, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_TOMB, MOVE_SURF, MOVE_NONE} }, { .species = SPECIES_LUDICOLO, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_TOXIC, MOVE_ICE_BEAM} }, { .species = SPECIES_SLOWKING, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYCHIC, MOVE_HEADBUTT, MOVE_SWAGGER, MOVE_NONE} }, { .species = SPECIES_STARMIE, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WATER_PULSE, MOVE_THUNDERBOLT, MOVE_CONFUSE_RAY, MOVE_BLIZZARD} }, { .species = SPECIES_BLASTOISE, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYDRO_PUMP, MOVE_BITE, MOVE_ICE_BEAM, MOVE_NONE} } }; @@ -783,49 +783,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round16[] = { .species = SPECIES_DUSKULL, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_NIGHT_SHADE, MOVE_WILL_O_WISP, MOVE_SHADOW_BALL, MOVE_PROTECT} }, { .species = SPECIES_HAUNTER, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_SPITE, MOVE_HYPNOSIS, MOVE_SHADOW_BALL} }, { .species = SPECIES_BANETTE, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SHADOW_BALL, MOVE_SPITE, MOVE_WILL_O_WISP, MOVE_NONE} }, { .species = SPECIES_MISDREAVUS, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PERISH_SONG, MOVE_SPITE, MOVE_MEAN_LOOK, MOVE_NONE} }, { .species = SPECIES_SABLEYE, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SHADOW_BALL, MOVE_MEAN_LOOK, MOVE_DIG, MOVE_NIGHT_SHADE} }, { .species = SPECIES_DUSCLOPS, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WILL_O_WISP, MOVE_TOXIC, MOVE_SHADOW_BALL, MOVE_NONE} }, { .species = SPECIES_SHEDINJA, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SHADOW_BALL, MOVE_SPITE, MOVE_GRUDGE, MOVE_PROTECT} }, { .species = SPECIES_GENGAR, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYCHIC, MOVE_DESTINY_BOND, MOVE_SPITE, MOVE_NIGHT_SHADE} } }; @@ -835,49 +835,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round17[] = { .species = SPECIES_MAWILE, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_CRUNCH, MOVE_TOXIC, MOVE_ICE_BEAM, MOVE_NONE} }, { .species = SPECIES_MAGNETON, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_STEELIX, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ROCK_THROW, MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_NONE} }, { .species = SPECIES_SCIZOR, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_METAL_CLAW, MOVE_SLASH, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_FORRETRESS, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_TOXIC, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_SKARMORY, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_STEEL_WING, MOVE_TOXIC, MOVE_FLY, MOVE_PROTECT} }, { .species = SPECIES_AGGRON, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_TAKE_DOWN, MOVE_SURF, MOVE_ICE_BEAM} }, { .species = SPECIES_METAGROSS, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK} } }; @@ -887,49 +887,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round18[] = { .species = SPECIES_DRAGONAIR, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_ICE_BEAM, MOVE_NONE} }, { .species = SPECIES_VIBRAVA, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_BREATH, MOVE_CRUNCH, MOVE_STEEL_WING} }, { .species = SPECIES_ALTARIA, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_SING, MOVE_PROTECT} }, { .species = SPECIES_FLYGON, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_FIRE_BLAST, MOVE_NONE} }, { .species = SPECIES_AERODACTYL, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DRAGON_CLAW, MOVE_NONE} }, { .species = SPECIES_GYARADOS, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_SURF, MOVE_THRASH, MOVE_BITE} }, { .species = SPECIES_KINGDRA, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYDRO_PUMP, MOVE_ICE_BEAM, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_CHARIZARD, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_FIRE_BLAST, MOVE_IRON_TAIL} } }; @@ -939,49 +939,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round19[] = { .species = SPECIES_ARCANINE, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FIRE_BLAST, MOVE_TAKE_DOWN, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_POLIWRATH, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYDRO_PUMP, MOVE_ICE_BEAM, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_RAICHU, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_SLAM, MOVE_NONE} }, { .species = SPECIES_VAPOREON, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_JOLTEON, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDERBOLT, MOVE_PIN_MISSILE, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_FLAREON, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FLAMETHROWER, MOVE_BITE, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_NINETALES, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FLAMETHROWER, MOVE_WILL_O_WISP, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_STARMIE, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ICE_BEAM, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_PSYCHIC} } }; @@ -991,49 +991,49 @@ static const struct PyramidWildMon sLevel50WildMons_Round20[] = { .species = SPECIES_KANGASKHAN, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_SURF, MOVE_DIZZY_PUNCH} }, { .species = SPECIES_SWELLOW, .lvl = 42, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_AERIAL_ACE, MOVE_HYPER_BEAM, MOVE_TOXIC, MOVE_NONE} }, { .species = SPECIES_URSARING, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_FOCUS_PUNCH, MOVE_PROTECT} }, { .species = SPECIES_PORYGON2, .lvl = 46, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYBEAM, MOVE_HYPER_BEAM, MOVE_SHADOW_BALL, MOVE_ICE_BEAM} }, { .species = SPECIES_TAUROS, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_HYPER_BEAM, MOVE_SURF, MOVE_THUNDERBOLT} }, { .species = SPECIES_FEAROW, .lvl = 48, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYPER_BEAM, MOVE_FLY, MOVE_MIRROR_MOVE, MOVE_PROTECT} }, { .species = SPECIES_SNORLAX, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYPER_BEAM, MOVE_BODY_SLAM, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE} }, { .species = SPECIES_SLAKING, .lvl = 50, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_ICE_BEAM} } }; diff --git a/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h b/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h index 10435d767..8738b0de6 100644 --- a/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h +++ b/src/data/battle_frontier/battle_pyramid_open_level_wild_mons.h @@ -3,49 +3,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round1[] = { .species = SPECIES_PLUSLE, .lvl = 15, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_WAVE, MOVE_SPARK, MOVE_ENCORE, MOVE_NONE} }, { .species = SPECIES_MINUN, .lvl = 15, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_QUICK_ATTACK, MOVE_NONE} }, { .species = SPECIES_PIKACHU, .lvl = 13, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_WAVE, MOVE_THUNDERBOLT, MOVE_SLAM, MOVE_NONE} }, { .species = SPECIES_ELECTABUZZ, .lvl = 13, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_PUNCH, MOVE_SWIFT, MOVE_SCREECH, MOVE_NONE} }, { .species = SPECIES_VILEPLUME, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_STUN_SPORE, MOVE_GIGA_DRAIN, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_MANECTRIC, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_QUICK_ATTACK, MOVE_NONE} }, { .species = SPECIES_BRELOOM, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_STUN_SPORE, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_MACH_PUNCH} }, { .species = SPECIES_JOLTEON, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_PIN_MISSILE, MOVE_QUICK_ATTACK} } }; @@ -55,49 +55,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round2[] = { .species = SPECIES_GULPIN, .lvl = 14, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_SLUDGE, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_ROSELIA, .lvl = 14, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_GIGA_DRAIN, MOVE_MAGICAL_LEAF, MOVE_PETAL_DANCE} }, { .species = SPECIES_BUTTERFREE, .lvl = 12, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_POISON_POWDER, MOVE_GUST, MOVE_PSYBEAM, MOVE_NONE} }, { .species = SPECIES_SEVIPER, .lvl = 12, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_POISON_FANG, MOVE_SWAGGER, MOVE_CRUNCH, MOVE_POISON_TAIL} }, { .species = SPECIES_SKARMORY, .lvl = 7, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_FLY, MOVE_STEEL_WING, MOVE_NONE} }, { .species = SPECIES_LUDICOLO, .lvl = 7, - .abilityBit = 1, + .abilityNum = 1, .moves = {MOVE_TOXIC, MOVE_PROTECT, MOVE_DIVE, MOVE_RAIN_DANCE} }, { .species = SPECIES_CROBAT, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_CONFUSE_RAY, MOVE_MEAN_LOOK, MOVE_BITE} }, { .species = SPECIES_GENGAR, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_SHADOW_PUNCH, MOVE_NIGHT_SHADE, MOVE_NONE} } }; @@ -107,49 +107,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round3[] = { .species = SPECIES_GROWLITHE, .lvl = 13, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FLAME_WHEEL, MOVE_TAKE_DOWN, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_VULPIX, .lvl = 13, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WILL_O_WISP, MOVE_FLAMETHROWER, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_MAGCARGO, .lvl = 11, - .abilityBit = 1, + .abilityNum = 1, .moves = {MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_NINETALES, .lvl = 11, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WILL_O_WISP, MOVE_QUICK_ATTACK, MOVE_FLAMETHROWER, MOVE_NONE} }, { .species = SPECIES_MEDICHAM, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FIRE_PUNCH, MOVE_HI_JUMP_KICK, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_WEEZING, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WILL_O_WISP, MOVE_FLAMETHROWER, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_DUSCLOPS, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_MEAN_LOOK, MOVE_SHADOW_PUNCH} }, { .species = SPECIES_HOUNDOOM, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FLAMETHROWER, MOVE_BITE, MOVE_SOLAR_BEAM, MOVE_OVERHEAT} } }; @@ -159,49 +159,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round4[] = { .species = SPECIES_DUNSPARCE, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SPITE, MOVE_TOXIC, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_BANETTE, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_GRUDGE, MOVE_WILL_O_WISP, MOVE_NIGHT_SHADE, MOVE_NONE} }, { .species = SPECIES_MISDREAVUS, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_GRUDGE, MOVE_SPITE, MOVE_SHADOW_BALL, MOVE_NONE} }, { .species = SPECIES_NINETALES, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_GRUDGE, MOVE_WILL_O_WISP, MOVE_OVERHEAT, MOVE_NONE} }, { .species = SPECIES_ABSOL, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_BITE, MOVE_AERIAL_ACE, MOVE_SHADOW_BALL, MOVE_PROTECT} }, { .species = SPECIES_DUSCLOPS, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WILL_O_WISP, MOVE_PROTECT, MOVE_TOXIC, MOVE_SHADOW_BALL} }, { .species = SPECIES_SHEDINJA, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_GRUDGE, MOVE_TOXIC, MOVE_SPITE, MOVE_NONE} }, { .species = SPECIES_GENGAR, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_GRUDGE, MOVE_SPITE, MOVE_NIGHT_SHADE, MOVE_NONE} } }; @@ -211,49 +211,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round5[] = { .species = SPECIES_HAUNTER, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_NIGHT_SHADE, MOVE_THUNDERBOLT, MOVE_SLUDGE_BOMB, MOVE_NONE} }, { .species = SPECIES_CHIMECHO, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_DOUBLE_EDGE, MOVE_TOXIC, MOVE_PSYCHIC, MOVE_PROTECT} }, { .species = SPECIES_SOLROCK, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_FIRE_BLAST, MOVE_TOXIC} }, { .species = SPECIES_MISDREAVUS, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYCHIC, MOVE_SPITE, MOVE_SHADOW_BALL, MOVE_PAIN_SPLIT} }, { .species = SPECIES_CLAYDOL, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_SELF_DESTRUCT, MOVE_PSYCHIC} }, { .species = SPECIES_WEEZING, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SLUDGE_BOMB, MOVE_SELF_DESTRUCT, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_FLYGON, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_DRAGON_CLAW, MOVE_DRAGON_BREATH} }, { .species = SPECIES_GENGAR, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_NIGHT_SHADE} } }; @@ -263,49 +263,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round6[] = { .species = SPECIES_DIGLETT, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ROCK_SLIDE, MOVE_SLASH, MOVE_DIG, MOVE_NONE} }, { .species = SPECIES_TRAPINCH, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ROCK_SLIDE, MOVE_EARTHQUAKE, MOVE_GIGA_DRAIN, MOVE_NONE} }, { .species = SPECIES_WYNAUT, .lvl = 8, - .abilityBit = 0, + .abilityNum = 0, .moves = {MOVE_DESTINY_BOND, MOVE_SPLASH, MOVE_COUNTER, MOVE_MIRROR_COAT} }, { .species = SPECIES_DIGLETT, .lvl = 8, - .abilityBit = 1, + .abilityNum = 1, .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_MAGNITUDE, MOVE_TOXIC} }, { .species = SPECIES_TRAPINCH, .lvl = 6, - .abilityBit = 1, + .abilityNum = 1, .moves = {MOVE_ROCK_SLIDE, MOVE_EARTHQUAKE, MOVE_GIGA_DRAIN, MOVE_PROTECT} }, { .species = SPECIES_WYNAUT, .lvl = 6, - .abilityBit = 0, + .abilityNum = 0, .moves = {MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND, MOVE_NONE} }, { .species = SPECIES_WOBBUFFET, .lvl = 5, - .abilityBit = 0, + .abilityNum = 0, .moves = {MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND, MOVE_NONE} }, { .species = SPECIES_DUGTRIO, .lvl = 5, - .abilityBit = 1, + .abilityNum = 1, .moves = {MOVE_ROCK_SLIDE, MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_PROTECT} } }; @@ -315,49 +315,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round7[] = { .species = SPECIES_GLALIE, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ICE_BEAM, MOVE_CRUNCH, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_SNEASEL, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ICE_BEAM, MOVE_CRUSH_CLAW, MOVE_SPITE, MOVE_NONE} }, { .species = SPECIES_DEWGONG, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_BLIZZARD, MOVE_DOUBLE_EDGE, MOVE_SURF, MOVE_NONE} }, { .species = SPECIES_PILOSWINE, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_TOXIC, MOVE_NONE} }, { .species = SPECIES_JYNX, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_BLIZZARD, MOVE_LOVELY_KISS, MOVE_PSYCHIC, MOVE_NONE} }, { .species = SPECIES_CLOYSTER, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ICE_BEAM, MOVE_SURF, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_WALREIN, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_BLIZZARD, MOVE_BODY_SLAM, MOVE_SURF, MOVE_NONE} }, { .species = SPECIES_LAPRAS, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SING, MOVE_BODY_SLAM, MOVE_ICE_BEAM, MOVE_PSYCHIC} } }; @@ -367,49 +367,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round8[] = { .species = SPECIES_WEEZING, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SELF_DESTRUCT, MOVE_SLUDGE_BOMB, MOVE_FIRE_BLAST, MOVE_NONE} }, { .species = SPECIES_ELECTRODE, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SELF_DESTRUCT, MOVE_THUNDERBOLT, MOVE_ROLLOUT, MOVE_NONE} }, { .species = SPECIES_GENGAR, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_DESTINY_BOND, MOVE_LICK, MOVE_SHADOW_BALL, MOVE_NONE} }, { .species = SPECIES_GOLEM, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SELF_DESTRUCT, MOVE_PROTECT, MOVE_EARTHQUAKE, MOVE_NONE} }, { .species = SPECIES_PINECO, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_DOUBLE_EDGE, MOVE_GIGA_DRAIN, MOVE_NONE} }, { .species = SPECIES_SOLROCK, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_FIRE_SPIN, MOVE_PSYWAVE, MOVE_NONE} }, { .species = SPECIES_FORRETRESS, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_TOXIC, MOVE_ROCK_SLIDE, MOVE_NONE} }, { .species = SPECIES_SHIFTRY, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_GIGA_DRAIN, MOVE_SOLAR_BEAM, MOVE_PROTECT} } }; @@ -419,49 +419,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round9[] = { .species = SPECIES_WOBBUFFET, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_SAFEGUARD, MOVE_DESTINY_BOND} }, { .species = SPECIES_METANG, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_TOXIC, MOVE_SLUDGE_BOMB, MOVE_PSYCHIC} }, { .species = SPECIES_EXEGGUTOR, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EGG_BOMB, MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_NONE} }, { .species = SPECIES_SLOWKING, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SHADOW_BALL, MOVE_SURF, MOVE_ICE_BEAM, MOVE_FLAMETHROWER} }, { .species = SPECIES_XATU, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_CONFUSE_RAY, MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_STEEL_WING} }, { .species = SPECIES_ALAKAZAM, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_TOXIC} }, { .species = SPECIES_STARMIE, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_SURF, MOVE_ICE_BEAM} }, { .species = SPECIES_ESPEON, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYCHIC, MOVE_DIG, MOVE_SHADOW_BALL, MOVE_NONE} } }; @@ -471,49 +471,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round10[] = { .species = SPECIES_GOLEM, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SELF_DESTRUCT, MOVE_EARTHQUAKE, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_STEELIX, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_IRON_TAIL, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_NONE} }, { .species = SPECIES_OMASTAR, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SURF, MOVE_MUD_SHOT, MOVE_ANCIENT_POWER, MOVE_NONE} }, { .species = SPECIES_LUNATONE, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYPNOSIS, MOVE_PSYWAVE, MOVE_EXPLOSION, MOVE_NONE} }, { .species = SPECIES_SHUCKLE, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_PROTECT, MOVE_WRAP, MOVE_NONE} }, { .species = SPECIES_ARMALDO, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ANCIENT_POWER, MOVE_PROTECT, MOVE_AERIAL_ACE, MOVE_NONE} }, { .species = SPECIES_CRADILY, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN, MOVE_CONFUSE_RAY, MOVE_NONE} }, { .species = SPECIES_AERODACTYL, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYPER_BEAM, MOVE_ROCK_SLIDE, MOVE_BITE, MOVE_NONE} } }; @@ -523,49 +523,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round11[] = { .species = SPECIES_POLIWRATH, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SUBMISSION, MOVE_FOCUS_PUNCH, MOVE_SURF, MOVE_NONE} }, { .species = SPECIES_HARIYAMA, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FAKE_OUT, MOVE_SURF, MOVE_FOCUS_PUNCH, MOVE_NONE} }, { .species = SPECIES_BRELOOM, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_MEDICHAM, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_FOCUS_PUNCH} }, { .species = SPECIES_HITMONCHAN, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_FOCUS_PUNCH} }, { .species = SPECIES_HITMONLEE, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_MEGA_KICK, MOVE_FOCUS_PUNCH, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_HERACROSS, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_FOCUS_PUNCH, MOVE_ROCK_SLIDE} }, { .species = SPECIES_MACHAMP, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ROCK_SLIDE, MOVE_EARTHQUAKE, MOVE_FOCUS_PUNCH, MOVE_SEISMIC_TOSS} } }; @@ -575,49 +575,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round12[] = { .species = SPECIES_QUAGSIRE, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_RAIN_DANCE, MOVE_SURF, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_TROPIUS, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_PUPITAR, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SANDSTORM, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_NONE} }, { .species = SPECIES_LAPRAS, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HAIL, MOVE_ICE_BEAM, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_CACTURNE, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SANDSTORM, MOVE_GIGA_DRAIN, MOVE_SOLAR_BEAM, MOVE_NONE} }, { .species = SPECIES_FLAREON, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SUNNY_DAY, MOVE_FLAMETHROWER, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_WALREIN, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HAIL, MOVE_ICE_BEAM, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_GYARADOS, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_RAIN_DANCE, MOVE_THUNDER, MOVE_HYDRO_PUMP, MOVE_NONE} } }; @@ -627,49 +627,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round13[] = { .species = SPECIES_PINECO, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_TAKE_DOWN, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_SHUCKLE, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_EARTHQUAKE, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_VENOMOTH, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SILVER_WIND, MOVE_POISON_POWDER, MOVE_SLEEP_POWDER, MOVE_PSYCHIC} }, { .species = SPECIES_SCIZOR, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_QUICK_ATTACK, MOVE_METAL_CLAW, MOVE_FURY_CUTTER, MOVE_PURSUIT} }, { .species = SPECIES_HERACROSS, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_MEGAHORN, MOVE_BRICK_BREAK, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE} }, { .species = SPECIES_FORRETRESS, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_ARMALDO, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WATER_PULSE, MOVE_PROTECT, MOVE_ROCK_SLIDE, MOVE_NONE} }, { .species = SPECIES_SHEDINJA, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SHADOW_BALL, MOVE_TOXIC, MOVE_SPITE, MOVE_GRUDGE} } }; @@ -679,49 +679,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round14[] = { .species = SPECIES_SABLEYE, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_NIGHT_SHADE, MOVE_PSYCHIC, MOVE_AERIAL_ACE, MOVE_NONE} }, { .species = SPECIES_SNEASEL, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ICE_BEAM, MOVE_TAUNT, MOVE_FAINT_ATTACK, MOVE_QUICK_ATTACK} }, { .species = SPECIES_CRAWDAUNT, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_CRABHAMMER, MOVE_ICE_BEAM, MOVE_SURF, MOVE_NONE} }, { .species = SPECIES_SHIFTRY, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_GIGA_DRAIN} }, { .species = SPECIES_CACTURNE, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_GIGA_DRAIN, MOVE_NEEDLE_ARM, MOVE_NONE} }, { .species = SPECIES_ABSOL, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_BITE, MOVE_PROTECT, MOVE_SLASH, MOVE_NONE} }, { .species = SPECIES_HOUNDOOM, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_OVERHEAT, MOVE_CRUNCH, MOVE_SHADOW_BALL, MOVE_PROTECT} }, { .species = SPECIES_UMBREON, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_IRON_TAIL, MOVE_QUICK_ATTACK} } }; @@ -731,49 +731,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round15[] = { .species = SPECIES_OCTILLERY, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_OCTAZOOKA, MOVE_ICE_BEAM, MOVE_FIRE_BLAST, MOVE_NONE} }, { .species = SPECIES_DEWGONG, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WATER_PULSE, MOVE_ICE_BEAM, MOVE_HEADBUTT, MOVE_NONE} }, { .species = SPECIES_PELIPPER, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PROTECT, MOVE_SUPERSONIC, MOVE_SURF, MOVE_NONE} }, { .species = SPECIES_QUAGSIRE, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_TOMB, MOVE_SURF, MOVE_NONE} }, { .species = SPECIES_LUDICOLO, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_TOXIC, MOVE_ICE_BEAM} }, { .species = SPECIES_SLOWKING, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYCHIC, MOVE_HEADBUTT, MOVE_SWAGGER, MOVE_NONE} }, { .species = SPECIES_STARMIE, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WATER_PULSE, MOVE_THUNDERBOLT, MOVE_CONFUSE_RAY, MOVE_BLIZZARD} }, { .species = SPECIES_BLASTOISE, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYDRO_PUMP, MOVE_BITE, MOVE_ICE_BEAM, MOVE_NONE} } }; @@ -783,49 +783,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round16[] = { .species = SPECIES_DUSKULL, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_NIGHT_SHADE, MOVE_WILL_O_WISP, MOVE_SHADOW_BALL, MOVE_PROTECT} }, { .species = SPECIES_HAUNTER, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_TOXIC, MOVE_SPITE, MOVE_HYPNOSIS, MOVE_SHADOW_BALL} }, { .species = SPECIES_BANETTE, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SHADOW_BALL, MOVE_SPITE, MOVE_WILL_O_WISP, MOVE_NONE} }, { .species = SPECIES_MISDREAVUS, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PERISH_SONG, MOVE_SPITE, MOVE_MEAN_LOOK, MOVE_NONE} }, { .species = SPECIES_SABLEYE, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SHADOW_BALL, MOVE_MEAN_LOOK, MOVE_DIG, MOVE_NIGHT_SHADE} }, { .species = SPECIES_DUSCLOPS, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_WILL_O_WISP, MOVE_TOXIC, MOVE_SHADOW_BALL, MOVE_NONE} }, { .species = SPECIES_SHEDINJA, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SHADOW_BALL, MOVE_SPITE, MOVE_GRUDGE, MOVE_PROTECT} }, { .species = SPECIES_GENGAR, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYCHIC, MOVE_DESTINY_BOND, MOVE_SPITE, MOVE_NIGHT_SHADE} } }; @@ -835,49 +835,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round17[] = { .species = SPECIES_MAWILE, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_CRUNCH, MOVE_TOXIC, MOVE_ICE_BEAM, MOVE_NONE} }, { .species = SPECIES_MAGNETON, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_STEELIX, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ROCK_THROW, MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_NONE} }, { .species = SPECIES_SCIZOR, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_METAL_CLAW, MOVE_SLASH, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_FORRETRESS, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EXPLOSION, MOVE_TOXIC, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_SKARMORY, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_STEEL_WING, MOVE_TOXIC, MOVE_FLY, MOVE_PROTECT} }, { .species = SPECIES_AGGRON, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_TAKE_DOWN, MOVE_SURF, MOVE_ICE_BEAM} }, { .species = SPECIES_METAGROSS, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK} } }; @@ -887,49 +887,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round18[] = { .species = SPECIES_DRAGONAIR, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER_WAVE, MOVE_TOXIC, MOVE_ICE_BEAM, MOVE_NONE} }, { .species = SPECIES_VIBRAVA, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_BREATH, MOVE_CRUNCH, MOVE_STEEL_WING} }, { .species = SPECIES_ALTARIA, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_SING, MOVE_PROTECT} }, { .species = SPECIES_FLYGON, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_FIRE_BLAST, MOVE_NONE} }, { .species = SPECIES_AERODACTYL, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DRAGON_CLAW, MOVE_NONE} }, { .species = SPECIES_GYARADOS, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_SURF, MOVE_THRASH, MOVE_BITE} }, { .species = SPECIES_KINGDRA, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYDRO_PUMP, MOVE_ICE_BEAM, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_CHARIZARD, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH, MOVE_FIRE_BLAST, MOVE_IRON_TAIL} } }; @@ -939,49 +939,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round19[] = { .species = SPECIES_ARCANINE, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FIRE_BLAST, MOVE_TAKE_DOWN, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_POLIWRATH, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYDRO_PUMP, MOVE_ICE_BEAM, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_RAICHU, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_SLAM, MOVE_NONE} }, { .species = SPECIES_VAPOREON, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_JOLTEON, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_THUNDERBOLT, MOVE_PIN_MISSILE, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_FLAREON, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FLAMETHROWER, MOVE_BITE, MOVE_NONE, MOVE_NONE} }, { .species = SPECIES_NINETALES, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_FLAMETHROWER, MOVE_WILL_O_WISP, MOVE_PROTECT, MOVE_NONE} }, { .species = SPECIES_STARMIE, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_ICE_BEAM, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_PSYCHIC} } }; @@ -991,49 +991,49 @@ static const struct PyramidWildMon sOpenLevelWildMons_Round20[] = { .species = SPECIES_KANGASKHAN, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYPER_BEAM, MOVE_FLAMETHROWER, MOVE_SURF, MOVE_DIZZY_PUNCH} }, { .species = SPECIES_SWELLOW, .lvl = 10, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_AERIAL_ACE, MOVE_HYPER_BEAM, MOVE_TOXIC, MOVE_NONE} }, { .species = SPECIES_URSARING, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_FOCUS_PUNCH, MOVE_PROTECT} }, { .species = SPECIES_PORYGON2, .lvl = 8, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_PSYBEAM, MOVE_HYPER_BEAM, MOVE_SHADOW_BALL, MOVE_ICE_BEAM} }, { .species = SPECIES_TAUROS, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_EARTHQUAKE, MOVE_HYPER_BEAM, MOVE_SURF, MOVE_THUNDERBOLT} }, { .species = SPECIES_FEAROW, .lvl = 6, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYPER_BEAM, MOVE_FLY, MOVE_MIRROR_MOVE, MOVE_PROTECT} }, { .species = SPECIES_SNORLAX, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYPER_BEAM, MOVE_BODY_SLAM, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE} }, { .species = SPECIES_SLAKING, .lvl = 5, - .abilityBit = 2, + .abilityNum = ABILITY_RANDOM, .moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_ICE_BEAM} } }; diff --git a/src/data/battle_frontier/trainer_hill.h b/src/data/battle_frontier/trainer_hill.h index ca0d623e9..64d216e4b 100644 --- a/src/data/battle_frontier/trainer_hill.h +++ b/src/data/battle_frontier/trainer_hill.h @@ -45,7 +45,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 24, .spAttackIV = 24, .spDefenseIV = 24, - .altAbility = 0, + .abilityNum = 0, .personality = 0x0, .nickname = _("MISDREAVUS"), .friendship = 255, @@ -68,7 +68,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 24, .spAttackIV = 24, .spDefenseIV = 24, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("SOLROCK"), .friendship = 255, @@ -90,7 +90,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 24, .spAttackIV = 24, .spDefenseIV = 24, - .altAbility = 0, + .abilityNum = 0, .personality = 0xC, .nickname = _("CLAYDOL"), .friendship = 255, @@ -112,7 +112,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 24, .spAttackIV = 24, .spDefenseIV = 24, - .altAbility = 0, + .abilityNum = 0, .personality = 0x80, .nickname = _("WEEZING"), .friendship = 0, @@ -135,7 +135,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 24, .spAttackIV = 24, .spDefenseIV = 24, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("LUNATONE"), .friendship = 255, @@ -157,7 +157,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 24, .spAttackIV = 24, .spDefenseIV = 24, - .altAbility = 0, + .abilityNum = 0, .personality = 0x83, .nickname = _("FLYGON"), .friendship = 255, @@ -191,7 +191,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("SEALEO"), .friendship = 255, @@ -212,7 +212,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("AMPHAROS"), .friendship = 255, @@ -233,7 +233,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x4E, .nickname = _("MACHOKE"), .friendship = 255, @@ -254,7 +254,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x28, .nickname = _("FLAREON"), .friendship = 255, @@ -275,7 +275,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x0, .nickname = _("MAGNETON"), .friendship = 255, @@ -297,7 +297,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x85, .nickname = _("PINSIR"), .friendship = 255, @@ -345,7 +345,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 20, .spAttackIV = 20, .spDefenseIV = 20, - .altAbility = 0, + .abilityNum = 0, .personality = 0x80, .nickname = _("MEDITITE"), .friendship = 255, @@ -367,7 +367,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 20, .spAttackIV = 20, .spDefenseIV = 20, - .altAbility = 1, + .abilityNum = 1, .personality = 0x80, .nickname = _("HERACROSS"), .friendship = 255, @@ -389,7 +389,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 20, .spAttackIV = 20, .spDefenseIV = 20, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("HITMONTOP"), .friendship = 255, @@ -411,7 +411,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 20, .spAttackIV = 20, .spDefenseIV = 20, - .altAbility = 0, + .abilityNum = 0, .personality = 0x4E, .nickname = _("MACHOP"), .friendship = 255, @@ -433,7 +433,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 20, .spAttackIV = 20, .spDefenseIV = 20, - .altAbility = 0, + .abilityNum = 0, .personality = 0x80, .nickname = _("PINSIR"), .friendship = 255, @@ -455,7 +455,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 20, .spAttackIV = 20, .spDefenseIV = 20, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("HITMONCHAN"), .friendship = 255, @@ -490,7 +490,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("VULPIX"), .friendship = 255, @@ -512,7 +512,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x8C, .nickname = _("MINUN"), .friendship = 255, @@ -534,7 +534,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0xF, .nickname = _("ROSELIA"), .friendship = 255, @@ -556,7 +556,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x82, .nickname = _("MR. MIME"), .friendship = 255, @@ -578,7 +578,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x5, .nickname = _("PLUSLE"), .friendship = 255, @@ -600,7 +600,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0x37, .nickname = _("TOGEPI"), .friendship = 255, @@ -648,7 +648,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x37, .nickname = _("VAPOREON"), .friendship = 0, @@ -670,7 +670,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0x8A, .nickname = _("DODRIO"), .friendship = 0, @@ -692,7 +692,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x14, .nickname = _("OMASTAR"), .friendship = 255, @@ -714,7 +714,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x8, .nickname = _("LICKITUNG"), .friendship = 255, @@ -736,7 +736,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0x94, .nickname = _("SLOWBRO"), .friendship = 0, @@ -758,7 +758,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x8, .nickname = _("LINOONE"), .friendship = 255, @@ -792,7 +792,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0xCB, .nickname = _("SKITTY"), .friendship = 255, @@ -814,7 +814,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xD, .nickname = _("MEDICHAM"), .friendship = 0, @@ -836,7 +836,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("STANTLER"), .friendship = 0, @@ -858,7 +858,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("NIDOQUEEN"), .friendship = 0, @@ -880,7 +880,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xD7, .nickname = _("NINETALES"), .friendship = 255, @@ -902,7 +902,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x28, .nickname = _("CHARIZARD"), .friendship = 255, @@ -949,7 +949,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x41, .nickname = _("ALAKAZAM"), .friendship = 255, @@ -971,7 +971,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 1, + .abilityNum = 1, .personality = 0xF, .nickname = _("BLISSEY"), .friendship = 255, @@ -993,7 +993,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x8C, .nickname = _("GRUMPIG"), .friendship = 255, @@ -1014,7 +1014,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 1, + .abilityNum = 1, .personality = 0xF, .nickname = _("GARDEVOIR"), .friendship = 255, @@ -1035,7 +1035,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x80, .nickname = _("VENOMOTH"), .friendship = 255, @@ -1056,7 +1056,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("ESPEON"), .friendship = 255, @@ -1090,7 +1090,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("WEEZING"), .friendship = 255, @@ -1111,7 +1111,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x8C, .nickname = _("GLOOM"), .friendship = 255, @@ -1132,7 +1132,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("MUK"), .friendship = 255, @@ -1154,7 +1154,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x83, .nickname = _("TROPIUS"), .friendship = 255, @@ -1175,7 +1175,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x6, .nickname = _("BELLOSSOM"), .friendship = 255, @@ -1197,7 +1197,7 @@ static const struct TrHillTag sDataTagNormal = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x1F, .nickname = _("MEGANIUM"), .friendship = 255, @@ -1257,7 +1257,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0x8A, .nickname = _("DELIBIRD"), .friendship = 255, @@ -1278,7 +1278,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xD, .nickname = _("CLEFAIRY"), .friendship = 255, @@ -1299,7 +1299,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xD, .nickname = _("PIKACHU"), .friendship = 255, @@ -1320,7 +1320,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0x8A, .nickname = _("MARILL"), .friendship = 255, @@ -1341,7 +1341,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xD, .nickname = _("JIGGLYPUFF"), .friendship = 255, @@ -1362,7 +1362,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0x26, .nickname = _("TOGETIC"), .friendship = 255, @@ -1396,7 +1396,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0xC1, .nickname = _("WIGGLYTUFF"), .friendship = 255, @@ -1417,7 +1417,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x87, .nickname = _("SABLEYE"), .friendship = 255, @@ -1438,7 +1438,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0xA, .nickname = _("GRUMPIG"), .friendship = 255, @@ -1459,7 +1459,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x12, .nickname = _("CORSOLA"), .friendship = 255, @@ -1480,7 +1480,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0xA, .nickname = _("CLAMPERL"), .friendship = 255, @@ -1501,7 +1501,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0xA, .nickname = _("STARMIE"), .friendship = 255, @@ -1552,7 +1552,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x0, .nickname = _("JIGGLYPUFF"), .friendship = 255, @@ -1577,7 +1577,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x0, .nickname = _("JYNX"), .friendship = 255, @@ -1602,7 +1602,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x96, .nickname = _("EXPLOUD"), .friendship = 255, @@ -1627,7 +1627,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x96, .nickname = _("ABSOL"), .friendship = 255, @@ -1652,7 +1652,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x96, .nickname = _("PIDGEOTTO"), .friendship = 255, @@ -1677,7 +1677,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x0, .nickname = _("ALTARIA"), .friendship = 255, @@ -1712,7 +1712,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0xD, .nickname = _("CHIMECHO"), .friendship = 255, @@ -1734,7 +1734,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0xD, .nickname = _("WHISMUR"), .friendship = 255, @@ -1756,7 +1756,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x8A, .nickname = _("YANMA"), .friendship = 255, @@ -1778,7 +1778,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0xA, .nickname = _("ILLUMISE"), .friendship = 255, @@ -1800,7 +1800,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0xA, .nickname = _("SPHEAL"), .friendship = 255, @@ -1822,7 +1822,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x87, .nickname = _("VIGOROTH"), .friendship = 255, @@ -1870,7 +1870,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x8C, .nickname = _("WOOPER"), .friendship = 255, @@ -1892,7 +1892,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0x3, .nickname = _("POLIWAG"), .friendship = 255, @@ -1914,7 +1914,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("PSYDUCK"), .friendship = 255, @@ -1936,7 +1936,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x96, .nickname = _("RHYDON"), .friendship = 0, @@ -1958,7 +1958,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("RHYHORN"), .friendship = 0, @@ -1980,7 +1980,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0x80, .nickname = _("CUBONE"), .friendship = 0, @@ -2015,7 +2015,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x8C, .nickname = _("MAGNEMITE"), .friendship = 255, @@ -2037,7 +2037,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x41, .nickname = _("ELECTABUZZ"), .friendship = 255, @@ -2058,7 +2058,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x0, .nickname = _("FLAAFFY"), .friendship = 255, @@ -2080,7 +2080,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("BALTOY"), .friendship = 0, @@ -2102,7 +2102,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("PINECO"), .friendship = 0, @@ -2124,7 +2124,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x80, .nickname = _("VOLTORB"), .friendship = 0, @@ -2171,7 +2171,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 31, .spAttackIV = 30, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x202, .nickname = _("UNOWN"), .friendship = 255, @@ -2192,7 +2192,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 30, .spAttackIV = 30, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x10001, .nickname = _("UNOWN"), .friendship = 255, @@ -2213,7 +2213,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 30, .spAttackIV = 30, .spDefenseIV = 30, - .altAbility = 0, + .abilityNum = 0, .personality = 0x102, .nickname = _("UNOWN"), .friendship = 255, @@ -2235,7 +2235,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x88FE980F, .nickname = _("SPINDA"), .friendship = 255, @@ -2256,7 +2256,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("PLUSLE"), .friendship = 255, @@ -2277,7 +2277,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0xF, .nickname = _("VOLBEAT"), .friendship = 255, @@ -2312,7 +2312,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xE2880098, .nickname = _("SPINDA"), .friendship = 255, @@ -2333,7 +2333,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x8C, .nickname = _("MINUN"), .friendship = 255, @@ -2354,7 +2354,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("ILLUMISE"), .friendship = 255, @@ -2375,7 +2375,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 30, .spAttackIV = 30, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x302, .nickname = _("UNOWN"), .friendship = 255, @@ -2396,7 +2396,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 31, .spAttackIV = 30, .spDefenseIV = 30, - .altAbility = 0, + .abilityNum = 0, .personality = 0x203, .nickname = _("UNOWN"), .friendship = 255, @@ -2417,7 +2417,7 @@ static const struct TrHillTag sDataTagVariety = .speedIV = 30, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x301, .nickname = _("UNOWN"), .friendship = 255, @@ -2478,7 +2478,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x0, .nickname = _("SUNFLORA"), .friendship = 255, @@ -2499,7 +2499,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x91, .nickname = _("TANGELA"), .friendship = 255, @@ -2523,7 +2523,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x1F, .nickname = _("VENUSAUR"), .friendship = 255, @@ -2544,7 +2544,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("LANTURN"), .friendship = 255, @@ -2565,7 +2565,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0xF, .nickname = _("MANECTRIC"), .friendship = 255, @@ -2586,7 +2586,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("RAIKOU"), .friendship = 255, @@ -2621,7 +2621,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x2F, .nickname = _("RELICANTH"), .friendship = 255, @@ -2642,7 +2642,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("GOLDUCK"), .friendship = 255, @@ -2663,7 +2663,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x28, .nickname = _("BLASTOISE"), .friendship = 255, @@ -2684,7 +2684,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0x93, .nickname = _("MAGCARGO"), .friendship = 255, @@ -2705,7 +2705,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0xF, .nickname = _("RAPIDASH"), .friendship = 255, @@ -2726,7 +2726,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("MOLTRES"), .friendship = 255, @@ -2774,7 +2774,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x8A, .nickname = _("SMEARGLE"), .friendship = 255, @@ -2796,7 +2796,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x87, .nickname = _("SMEARGLE"), .friendship = 255, @@ -2818,7 +2818,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xD, .nickname = _("SMEARGLE"), .friendship = 255, @@ -2840,7 +2840,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xA, .nickname = _("SMEARGLE"), .friendship = 255, @@ -2862,7 +2862,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xA, .nickname = _("SMEARGLE"), .friendship = 255, @@ -2884,7 +2884,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x8A, .nickname = _("SMEARGLE"), .friendship = 255, @@ -2919,7 +2919,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 1, + .abilityNum = 1, .personality = 0xA, .nickname = _("STARYU"), .friendship = 255, @@ -2941,7 +2941,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0xD, .nickname = _("MEOWTH"), .friendship = 255, @@ -2963,7 +2963,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x28, .nickname = _("BLAZIKEN"), .friendship = 255, @@ -2985,7 +2985,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 1, + .abilityNum = 1, .personality = 0x16, .nickname = _("CUBONE"), .friendship = 255, @@ -3006,7 +3006,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 0, + .abilityNum = 0, .personality = 0x8A, .nickname = _("BEEDRILL"), .friendship = 255, @@ -3028,7 +3028,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 5, .spAttackIV = 5, .spDefenseIV = 5, - .altAbility = 1, + .abilityNum = 1, .personality = 0xD, .nickname = _("RATICATE"), .friendship = 255, @@ -3076,7 +3076,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 25, .spAttackIV = 25, .spDefenseIV = 25, - .altAbility = 0, + .abilityNum = 0, .personality = 0x32, .nickname = _("CHARMELEON"), .friendship = 100, @@ -3097,7 +3097,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 25, .spAttackIV = 25, .spDefenseIV = 25, - .altAbility = 0, + .abilityNum = 0, .personality = 0x0, .nickname = _("WARTORTLE"), .friendship = 100, @@ -3119,7 +3119,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 25, .spAttackIV = 25, .spDefenseIV = 25, - .altAbility = 0, + .abilityNum = 0, .personality = 0x0, .nickname = _("IVYSAUR"), .friendship = 100, @@ -3141,7 +3141,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 25, .spAttackIV = 25, .spDefenseIV = 25, - .altAbility = 0, + .abilityNum = 0, .personality = 0x32, .nickname = _("BAYLEEF"), .friendship = 100, @@ -3163,7 +3163,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 25, .spAttackIV = 25, .spDefenseIV = 25, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("CROCONAW"), .friendship = 100, @@ -3185,7 +3185,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x28, .nickname = _("QUILAVA"), .friendship = 100, @@ -3220,7 +3220,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x32, .nickname = _("SMOOCHUM"), .friendship = 50, @@ -3242,7 +3242,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0xC8, .nickname = _("AZURILL"), .friendship = 50, @@ -3264,7 +3264,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x0, .nickname = _("ELEKID"), .friendship = 50, @@ -3286,7 +3286,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x0, .nickname = _("CLEFFA"), .friendship = 50, @@ -3308,7 +3308,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x84, .nickname = _("WYNAUT"), .friendship = 50, @@ -3330,7 +3330,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("MAGBY"), .friendship = 50, @@ -3378,7 +3378,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x80, .nickname = _("SUDOWOODO"), .friendship = 255, @@ -3399,7 +3399,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0x8C, .nickname = _("SLOWKING"), .friendship = 255, @@ -3420,7 +3420,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("ENTEI"), .friendship = 255, @@ -3441,7 +3441,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("HITMONCHAN"), .friendship = 255, @@ -3462,7 +3462,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0x6, .nickname = _("MANTINE"), .friendship = 255, @@ -3483,7 +3483,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x18, .nickname = _("ZAPDOS"), .friendship = 255, @@ -3517,7 +3517,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("HITMONLEE"), .friendship = 255, @@ -3538,7 +3538,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("PORYGON2"), .friendship = 255, @@ -3559,7 +3559,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("SUICUNE"), .friendship = 255, @@ -3580,7 +3580,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 1, + .abilityNum = 1, .personality = 0xF, .nickname = _("HOUNDOOM"), .friendship = 255, @@ -3601,7 +3601,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("STANTLER"), .friendship = 255, @@ -3622,7 +3622,7 @@ static const struct TrHillTag sDataTagUnique = .speedIV = 15, .spAttackIV = 15, .spDefenseIV = 15, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("ARTICUNO"), .friendship = 255, @@ -3683,7 +3683,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x35, .nickname = _("SNORLAX"), .friendship = 255, @@ -3705,7 +3705,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("MILTANK"), .friendship = 255, @@ -3727,7 +3727,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x7F, .nickname = _("URSARING"), .friendship = 255, @@ -3749,7 +3749,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x80, .nickname = _("SLAKING"), .friendship = 255, @@ -3771,7 +3771,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("KANGASKHAN"), .friendship = 255, @@ -3793,7 +3793,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x80, .nickname = _("ZANGOOSE"), .friendship = 255, @@ -3828,7 +3828,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 1, + .abilityNum = 1, .personality = 0xF, .nickname = _("SLOWKING"), .friendship = 255, @@ -3850,7 +3850,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x28, .nickname = _("ESPEON"), .friendship = 255, @@ -3872,7 +3872,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 1, + .abilityNum = 1, .personality = 0xF, .nickname = _("STARMIE"), .friendship = 255, @@ -3894,7 +3894,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("GENGAR"), .friendship = 255, @@ -3916,7 +3916,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("GARDEVOIR"), .friendship = 255, @@ -3938,7 +3938,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("ALAKAZAM"), .friendship = 255, @@ -3986,7 +3986,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("SWELLOW"), .friendship = 255, @@ -4008,7 +4008,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("MACHAMP"), .friendship = 255, @@ -4030,7 +4030,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("URSARING"), .friendship = 255, @@ -4052,7 +4052,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x80, .nickname = _("KINGLER"), .friendship = 255, @@ -4074,7 +4074,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x80, .nickname = _("TYRANITAR"), .friendship = 255, @@ -4096,7 +4096,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x80, .nickname = _("DRAGONITE"), .friendship = 255, @@ -4131,7 +4131,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0xA, .nickname = _("JOLTEON"), .friendship = 255, @@ -4153,7 +4153,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0xA, .nickname = _("ALAKAZAM"), .friendship = 255, @@ -4175,7 +4175,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 1, + .abilityNum = 1, .personality = 0xA, .nickname = _("STARMIE"), .friendship = 255, @@ -4197,7 +4197,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x82, .nickname = _("DUSCLOPS"), .friendship = 255, @@ -4219,7 +4219,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0xD2, .nickname = _("NINETALES"), .friendship = 255, @@ -4241,7 +4241,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x85, .nickname = _("BANETTE"), .friendship = 255, @@ -4289,7 +4289,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x94, .nickname = _("WOBBUFFET"), .friendship = 255, @@ -4311,7 +4311,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x85, .nickname = _("EXPLOUD"), .friendship = 0, @@ -4333,7 +4333,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x0, .nickname = _("CROBAT"), .friendship = 255, @@ -4355,7 +4355,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 1, + .abilityNum = 1, .personality = 0xD, .nickname = _("DUGTRIO"), .friendship = 255, @@ -4377,7 +4377,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x5, .nickname = _("ELECTRODE"), .friendship = 0, @@ -4399,7 +4399,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x14, .nickname = _("GENGAR"), .friendship = 255, @@ -4434,7 +4434,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x82, .nickname = _("LAPRAS"), .friendship = 0, @@ -4456,7 +4456,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x8A, .nickname = _("ABSOL"), .friendship = 0, @@ -4478,7 +4478,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x0, .nickname = _("ALTARIA"), .friendship = 0, @@ -4500,7 +4500,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x14, .nickname = _("DEWGONG"), .friendship = 0, @@ -4522,7 +4522,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 1, + .abilityNum = 1, .personality = 0x14, .nickname = _("POLITOED"), .friendship = 0, @@ -4544,7 +4544,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 1, + .abilityNum = 1, .personality = 0x17, .nickname = _("MAROWAK"), .friendship = 0, @@ -4592,7 +4592,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("FORRETRESS"), .friendship = 255, @@ -4613,7 +4613,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 1, + .abilityNum = 1, .personality = 0xC, .nickname = _("ELECTRODE"), .friendship = 255, @@ -4634,7 +4634,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x7F, .nickname = _("EXEGGUTOR"), .friendship = 255, @@ -4656,7 +4656,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x93, .nickname = _("DUSCLOPS"), .friendship = 255, @@ -4677,7 +4677,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0xF, .nickname = _("NINETALES"), .friendship = 255, @@ -4698,7 +4698,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x96, .nickname = _("BANETTE"), .friendship = 255, @@ -4732,7 +4732,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x95, .nickname = _("SALAMENCE"), .friendship = 255, @@ -4753,7 +4753,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x8C, .nickname = _("GENGAR"), .friendship = 255, @@ -4774,7 +4774,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("GYARADOS"), .friendship = 255, @@ -4795,7 +4795,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x3, .nickname = _("GENGAR"), .friendship = 255, @@ -4817,7 +4817,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x14, .nickname = _("DUSCLOPS"), .friendship = 255, @@ -4839,7 +4839,7 @@ static const struct TrHillTag sDataTagExpert = .speedIV = 31, .spAttackIV = 31, .spDefenseIV = 31, - .altAbility = 0, + .abilityNum = 0, .personality = 0x85, .nickname = _("MISDREAVUS"), .friendship = 255, diff --git a/src/data/graphics/berries.h b/src/data/graphics/berries.h index 326bd1c5b..eb3f9f4dc 100644 --- a/src/data/graphics/berries.h +++ b/src/data/graphics/berries.h @@ -1,8 +1,8 @@ -const u32 gUnknown_08D9BB44[] = INCBIN_U32("graphics/interface/check_berry.4bpp.lz"); -const u32 gUnknown_08D9BEF0[] = INCBIN_U32("graphics/interface/check_berry.gbapal.lz"); +const u32 gBerryCheck_Gfx[] = INCBIN_U32("graphics/interface/check_berry.4bpp.lz"); +const u32 gBerryCheck_Pal[] = INCBIN_U32("graphics/interface/check_berry.gbapal.lz"); -const u32 gUnknown_08D9BF98[] = INCBIN_U32("graphics/interface/berry_tag.bin.lz"); -const u32 gUnknown_08D9C13C[] = INCBIN_U32("graphics/interface/berry_tag_title.bin.lz"); +const u32 gBerryTag_Gfx[] = INCBIN_U32("graphics/interface/berry_tag.bin.lz"); +const u32 gBerryTag_Pal[] = INCBIN_U32("graphics/interface/berry_tag_title.bin.lz"); const u32 gBerryCheckCircle_Gfx[] = INCBIN_U32("graphics/interface/check_berry_circle.4bpp.lz"); diff --git a/src/data/pokemon/base_stats.h b/src/data/pokemon/base_stats.h index 86ebb620b..17e677967 100644 --- a/src/data/pokemon/base_stats.h +++ b/src/data/pokemon/base_stats.h @@ -28,8 +28,7 @@ .growthRate = GROWTH_MEDIUM_FAST, \ .eggGroup1 = EGG_GROUP_UNDISCOVERED,\ .eggGroup2 = EGG_GROUP_UNDISCOVERED,\ - .ability1 = ABILITY_NONE, \ - .ability2 = ABILITY_NONE, \ + .abilities = {0, 0}, \ .safariZoneFleeRate = 0, \ .bodyColor = BODY_COLOR_BLACK, \ .noFlip = FALSE, \ @@ -65,8 +64,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_OVERGROW, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -98,8 +96,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_OVERGROW, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -131,8 +128,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_OVERGROW, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -164,8 +160,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_BLAZE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -197,8 +192,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_BLAZE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -230,8 +224,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_BLAZE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -263,8 +256,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_TORRENT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -296,8 +288,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_TORRENT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -329,8 +320,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_TORRENT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -362,8 +352,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SHIELD_DUST, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -395,8 +384,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SHED_SKIN, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -428,8 +416,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_COMPOUND_EYES, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -461,8 +448,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SHIELD_DUST, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -494,8 +480,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SHED_SKIN, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -527,8 +512,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SWARM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SWARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -560,8 +544,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_KEEN_EYE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -593,8 +576,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_KEEN_EYE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -626,8 +608,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_KEEN_EYE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -659,8 +640,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_RUN_AWAY, - .ability2 = ABILITY_GUTS, + .abilities = {ABILITY_RUN_AWAY, ABILITY_GUTS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -692,8 +672,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_RUN_AWAY, - .ability2 = ABILITY_GUTS, + .abilities = {ABILITY_RUN_AWAY, ABILITY_GUTS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -725,8 +704,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_KEEN_EYE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -758,8 +736,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_KEEN_EYE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -791,8 +768,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_INTIMIDATE, - .ability2 = ABILITY_SHED_SKIN, + .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -824,8 +800,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_INTIMIDATE, - .ability2 = ABILITY_SHED_SKIN, + .abilities = {ABILITY_INTIMIDATE, ABILITY_SHED_SKIN}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -857,8 +832,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_STATIC, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 6, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -890,8 +864,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_STATIC, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -923,8 +896,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_SAND_VEIL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -956,8 +928,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_SAND_VEIL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -989,8 +960,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_POISON_POINT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1022,8 +992,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_POISON_POINT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1055,8 +1024,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_POISON_POINT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1088,8 +1056,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_POISON_POINT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1121,8 +1088,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_POISON_POINT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1154,8 +1120,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_POISON_POINT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1187,8 +1152,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_CUTE_CHARM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -1220,8 +1184,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_CUTE_CHARM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -1253,8 +1216,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_FLASH_FIRE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1286,8 +1248,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_FLASH_FIRE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -1319,8 +1280,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_CUTE_CHARM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -1352,8 +1312,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_CUTE_CHARM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -1385,8 +1344,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_INNER_FOCUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1418,8 +1376,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_INNER_FOCUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1451,8 +1408,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 4, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1484,8 +1440,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 6, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1517,8 +1472,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -1550,8 +1504,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_EFFECT_SPORE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -1583,8 +1536,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_EFFECT_SPORE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -1616,8 +1568,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_COMPOUND_EYES, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1649,8 +1600,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SHIELD_DUST, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -1682,8 +1632,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_SAND_VEIL, - .ability2 = ABILITY_ARENA_TRAP, + .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1715,8 +1664,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_SAND_VEIL, - .ability2 = ABILITY_ARENA_TRAP, + .abilities = {ABILITY_SAND_VEIL, ABILITY_ARENA_TRAP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1748,8 +1696,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_PICKUP, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PICKUP, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -1781,8 +1728,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_LIMBER, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LIMBER, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -1814,8 +1760,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_DAMP, - .ability2 = ABILITY_CLOUD_NINE, + .abilities = {ABILITY_DAMP, ABILITY_CLOUD_NINE}, .safariZoneFleeRate = 6, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -1847,8 +1792,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_DAMP, - .ability2 = ABILITY_CLOUD_NINE, + .abilities = {ABILITY_DAMP, ABILITY_CLOUD_NINE}, .safariZoneFleeRate = 8, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -1880,8 +1824,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_VITAL_SPIRIT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1913,8 +1856,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_VITAL_SPIRIT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1946,8 +1888,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_INTIMIDATE, - .ability2 = ABILITY_FLASH_FIRE, + .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -1979,8 +1920,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_INTIMIDATE, - .ability2 = ABILITY_FLASH_FIRE, + .abilities = {ABILITY_INTIMIDATE, ABILITY_FLASH_FIRE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2012,8 +1952,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_WATER_ABSORB, - .ability2 = ABILITY_DAMP, + .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -2045,8 +1984,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_WATER_ABSORB, - .ability2 = ABILITY_DAMP, + .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -2078,8 +2016,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_WATER_ABSORB, - .ability2 = ABILITY_DAMP, + .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -2111,8 +2048,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_SYNCHRONIZE, - .ability2 = ABILITY_INNER_FOCUS, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2144,8 +2080,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_SYNCHRONIZE, - .ability2 = ABILITY_INNER_FOCUS, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2177,8 +2112,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_SYNCHRONIZE, - .ability2 = ABILITY_INNER_FOCUS, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_INNER_FOCUS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2210,8 +2144,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_GUTS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -2243,8 +2176,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_GUTS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -2276,8 +2208,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_GUTS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -2309,8 +2240,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -2342,8 +2272,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -2375,8 +2304,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -2408,8 +2336,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_CLEAR_BODY, - .ability2 = ABILITY_LIQUID_OOZE, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_LIQUID_OOZE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -2441,8 +2368,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_CLEAR_BODY, - .ability2 = ABILITY_LIQUID_OOZE, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_LIQUID_OOZE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -2474,8 +2400,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_ROCK_HEAD, - .ability2 = ABILITY_STURDY, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, .safariZoneFleeRate = 4, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2507,8 +2432,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_ROCK_HEAD, - .ability2 = ABILITY_STURDY, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2540,8 +2464,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_ROCK_HEAD, - .ability2 = ABILITY_STURDY, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2573,8 +2496,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_RUN_AWAY, - .ability2 = ABILITY_FLASH_FIRE, + .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -2606,8 +2528,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_RUN_AWAY, - .ability2 = ABILITY_FLASH_FIRE, + .abilities = {ABILITY_RUN_AWAY, ABILITY_FLASH_FIRE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -2639,8 +2560,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_OBLIVIOUS, - .ability2 = ABILITY_OWN_TEMPO, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -2672,8 +2592,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_OBLIVIOUS, - .ability2 = ABILITY_OWN_TEMPO, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -2705,8 +2624,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_MAGNET_PULL, - .ability2 = ABILITY_STURDY, + .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -2738,8 +2656,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_MAGNET_PULL, - .ability2 = ABILITY_STURDY, + .abilities = {ABILITY_MAGNET_PULL, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -2771,8 +2688,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_KEEN_EYE, - .ability2 = ABILITY_INNER_FOCUS, + .abilities = {ABILITY_KEEN_EYE, ABILITY_INNER_FOCUS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2804,8 +2720,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_RUN_AWAY, - .ability2 = ABILITY_EARLY_BIRD, + .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 8, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2837,8 +2752,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_RUN_AWAY, - .ability2 = ABILITY_EARLY_BIRD, + .abilities = {ABILITY_RUN_AWAY, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 10, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -2870,8 +2784,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_THICK_FAT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -2903,8 +2816,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_THICK_FAT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -2936,8 +2848,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_STENCH, - .ability2 = ABILITY_STICKY_HOLD, + .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -2969,8 +2880,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_STENCH, - .ability2 = ABILITY_STICKY_HOLD, + .abilities = {ABILITY_STENCH, ABILITY_STICKY_HOLD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3002,8 +2912,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_SHELL_ARMOR, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3035,8 +2944,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_SHELL_ARMOR, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3068,8 +2976,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3101,8 +3008,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3134,8 +3040,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3167,8 +3072,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_ROCK_HEAD, - .ability2 = ABILITY_STURDY, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -3200,8 +3104,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_INSOMNIA, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -3233,8 +3136,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_INSOMNIA, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -3266,8 +3168,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_HYPER_CUTTER, - .ability2 = ABILITY_SHELL_ARMOR, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3299,8 +3200,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_HYPER_CUTTER, - .ability2 = ABILITY_SHELL_ARMOR, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, @@ -3332,8 +3232,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_SOUNDPROOF, - .ability2 = ABILITY_STATIC, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3365,8 +3264,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_SOUNDPROOF, - .ability2 = ABILITY_STATIC, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_STATIC}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3398,8 +3296,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -3431,8 +3328,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -3464,8 +3360,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - .ability1 = ABILITY_ROCK_HEAD, - .ability2 = ABILITY_LIGHTNING_ROD, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3497,8 +3392,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - .ability1 = ABILITY_ROCK_HEAD, - .ability2 = ABILITY_LIGHTNING_ROD, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_LIGHTNING_ROD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3530,8 +3424,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_LIMBER, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LIMBER, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3563,8 +3456,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_KEEN_EYE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3596,8 +3488,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - .ability1 = ABILITY_OWN_TEMPO, - .ability2 = ABILITY_OBLIVIOUS, + .abilities = {ABILITY_OWN_TEMPO, ABILITY_OBLIVIOUS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -3629,8 +3520,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3662,8 +3552,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -3695,8 +3584,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_LIGHTNING_ROD, - .ability2 = ABILITY_ROCK_HEAD, + .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, .safariZoneFleeRate = 4, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -3728,8 +3616,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_LIGHTNING_ROD, - .ability2 = ABILITY_ROCK_HEAD, + .abilities = {ABILITY_LIGHTNING_ROD, ABILITY_ROCK_HEAD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -3761,8 +3648,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_NATURAL_CURE, - .ability2 = ABILITY_SERENE_GRACE, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -3794,8 +3680,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -3827,8 +3712,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - .ability1 = ABILITY_EARLY_BIRD, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_EARLY_BIRD, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -3860,8 +3744,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -3893,8 +3776,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_POISON_POINT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_POISON_POINT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -3926,8 +3808,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_WATER_VEIL, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_VEIL}, .safariZoneFleeRate = 4, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3959,8 +3840,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_WATER_VEIL, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_VEIL}, .safariZoneFleeRate = 6, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -3992,8 +3872,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_ILLUMINATE, - .ability2 = ABILITY_NATURAL_CURE, + .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4025,8 +3904,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_ILLUMINATE, - .ability2 = ABILITY_NATURAL_CURE, + .abilities = {ABILITY_ILLUMINATE, ABILITY_NATURAL_CURE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -4058,8 +3936,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_SOUNDPROOF, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -4091,8 +3968,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SWARM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SWARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -4124,8 +4000,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_OBLIVIOUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -4157,8 +4032,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_STATIC, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = TRUE, @@ -4190,8 +4064,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_FLAME_BODY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -4223,8 +4096,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_HYPER_CUTTER, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_NONE}, .safariZoneFleeRate = 8, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4256,8 +4128,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_INTIMIDATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4289,8 +4160,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 4, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -4322,8 +4192,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_INTIMIDATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4355,8 +4224,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_WATER_ABSORB, - .ability2 = ABILITY_SHELL_ARMOR, + .abilities = {ABILITY_WATER_ABSORB, ABILITY_SHELL_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4388,8 +4256,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_DITTO, .eggGroup2 = EGG_GROUP_DITTO, - .ability1 = ABILITY_LIMBER, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LIMBER, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -4421,8 +4288,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_RUN_AWAY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4454,8 +4320,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_WATER_ABSORB, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_WATER_ABSORB, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4487,8 +4352,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_VOLT_ABSORB, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_VOLT_ABSORB, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -4520,8 +4384,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_FLASH_FIRE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_FLASH_FIRE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -4553,8 +4416,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_TRACE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_TRACE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -4586,8 +4448,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_SHELL_ARMOR, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4619,8 +4480,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_SHELL_ARMOR, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_SHELL_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4652,8 +4512,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_BATTLE_ARMOR, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4685,8 +4544,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_BATTLE_ARMOR, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_BATTLE_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4718,8 +4576,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_ROCK_HEAD, - .ability2 = ABILITY_PRESSURE, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_PRESSURE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -4751,8 +4608,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - .ability1 = ABILITY_IMMUNITY, - .ability2 = ABILITY_THICK_FAT, + .abilities = {ABILITY_IMMUNITY, ABILITY_THICK_FAT}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -4784,8 +4640,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_PRESSURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4817,8 +4672,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_PRESSURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -4850,8 +4704,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_PRESSURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -4883,8 +4736,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_SHED_SKIN, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4916,8 +4768,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_SHED_SKIN, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -4949,8 +4800,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_INNER_FOCUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -4982,8 +4832,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_PRESSURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -5015,8 +4864,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_SYNCHRONIZE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -5048,8 +4896,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_OVERGROW, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5081,8 +4928,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_OVERGROW, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5114,8 +4960,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_OVERGROW, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5147,8 +4992,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_BLAZE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -5180,8 +5024,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_BLAZE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -5213,8 +5056,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_BLAZE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -5246,8 +5088,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_TORRENT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5279,8 +5120,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_TORRENT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = TRUE, @@ -5312,8 +5152,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_TORRENT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5345,8 +5184,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_RUN_AWAY, - .ability2 = ABILITY_KEEN_EYE, + .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -5378,8 +5216,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_RUN_AWAY, - .ability2 = ABILITY_KEEN_EYE, + .abilities = {ABILITY_RUN_AWAY, ABILITY_KEEN_EYE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -5411,8 +5248,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_INSOMNIA, - .ability2 = ABILITY_KEEN_EYE, + .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -5444,8 +5280,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_INSOMNIA, - .ability2 = ABILITY_KEEN_EYE, + .abilities = {ABILITY_INSOMNIA, ABILITY_KEEN_EYE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -5477,8 +5312,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SWARM, - .ability2 = ABILITY_EARLY_BIRD, + .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -5510,8 +5344,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SWARM, - .ability2 = ABILITY_EARLY_BIRD, + .abilities = {ABILITY_SWARM, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -5543,8 +5376,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SWARM, - .ability2 = ABILITY_INSOMNIA, + .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5576,8 +5408,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SWARM, - .ability2 = ABILITY_INSOMNIA, + .abilities = {ABILITY_SWARM, ABILITY_INSOMNIA}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -5609,8 +5440,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_INNER_FOCUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -5642,8 +5472,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_VOLT_ABSORB, - .ability2 = ABILITY_ILLUMINATE, + .abilities = {ABILITY_VOLT_ABSORB, ABILITY_ILLUMINATE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5675,8 +5504,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_VOLT_ABSORB, - .ability2 = ABILITY_ILLUMINATE, + .abilities = {ABILITY_VOLT_ABSORB, ABILITY_ILLUMINATE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -5708,8 +5536,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_STATIC, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -5741,8 +5568,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_CUTE_CHARM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -5774,8 +5600,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_CUTE_CHARM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = TRUE, @@ -5807,8 +5632,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_HUSTLE, - .ability2 = ABILITY_SERENE_GRACE, + .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -5840,8 +5664,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_HUSTLE, - .ability2 = ABILITY_SERENE_GRACE, + .abilities = {ABILITY_HUSTLE, ABILITY_SERENE_GRACE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -5873,8 +5696,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_SYNCHRONIZE, - .ability2 = ABILITY_EARLY_BIRD, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 6, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5906,8 +5728,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_SYNCHRONIZE, - .ability2 = ABILITY_EARLY_BIRD, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 8, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -5939,8 +5760,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_STATIC, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -5972,8 +5792,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_STATIC, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -6005,8 +5824,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_STATIC, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -6038,8 +5856,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -6071,8 +5888,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_THICK_FAT, - .ability2 = ABILITY_HUGE_POWER, + .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -6104,8 +5920,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_THICK_FAT, - .ability2 = ABILITY_HUGE_POWER, + .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -6137,8 +5952,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_STURDY, - .ability2 = ABILITY_ROCK_HEAD, + .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -6170,8 +5984,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_WATER_ABSORB, - .ability2 = ABILITY_DAMP, + .abilities = {ABILITY_WATER_ABSORB, ABILITY_DAMP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -6203,8 +6016,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -6236,8 +6048,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -6269,8 +6080,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -6302,8 +6112,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_RUN_AWAY, - .ability2 = ABILITY_PICKUP, + .abilities = {ABILITY_RUN_AWAY, ABILITY_PICKUP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -6335,8 +6144,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -6368,8 +6176,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -6401,8 +6208,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SPEED_BOOST, - .ability2 = ABILITY_COMPOUND_EYES, + .abilities = {ABILITY_SPEED_BOOST, ABILITY_COMPOUND_EYES}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -6434,8 +6240,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_DAMP, - .ability2 = ABILITY_WATER_ABSORB, + .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -6467,8 +6272,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_DAMP, - .ability2 = ABILITY_WATER_ABSORB, + .abilities = {ABILITY_DAMP, ABILITY_WATER_ABSORB}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -6500,8 +6304,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_SYNCHRONIZE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -6533,8 +6336,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_SYNCHRONIZE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -6566,8 +6368,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_INSOMNIA, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -6599,8 +6400,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_OBLIVIOUS, - .ability2 = ABILITY_OWN_TEMPO, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_OWN_TEMPO}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -6632,8 +6432,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -6665,8 +6464,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, @@ -6698,8 +6496,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_SHADOW_TAG, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE}, .safariZoneFleeRate = 4, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -6731,8 +6528,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_INNER_FOCUS, - .ability2 = ABILITY_EARLY_BIRD, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 4, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -6764,8 +6560,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_STURDY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_STURDY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -6797,8 +6592,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_STURDY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_STURDY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -6830,8 +6624,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_SERENE_GRACE, - .ability2 = ABILITY_RUN_AWAY, + .abilities = {ABILITY_SERENE_GRACE, ABILITY_RUN_AWAY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -6863,8 +6656,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_HYPER_CUTTER, - .ability2 = ABILITY_SAND_VEIL, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SAND_VEIL}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -6896,8 +6688,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_ROCK_HEAD, - .ability2 = ABILITY_STURDY, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -6929,8 +6720,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_INTIMIDATE, - .ability2 = ABILITY_RUN_AWAY, + .abilities = {ABILITY_INTIMIDATE, ABILITY_RUN_AWAY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -6962,8 +6752,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_INTIMIDATE, - .ability2 = ABILITY_INTIMIDATE, + .abilities = {ABILITY_INTIMIDATE, ABILITY_INTIMIDATE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -6995,8 +6784,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_POISON_POINT, - .ability2 = ABILITY_SWIFT_SWIM, + .abilities = {ABILITY_POISON_POINT, ABILITY_SWIFT_SWIM}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -7028,8 +6816,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SWARM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SWARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7061,8 +6848,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_STURDY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_STURDY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -7094,8 +6880,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SWARM, - .ability2 = ABILITY_GUTS, + .abilities = {ABILITY_SWARM, ABILITY_GUTS}, .safariZoneFleeRate = 8, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -7127,8 +6912,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_INNER_FOCUS, - .ability2 = ABILITY_KEEN_EYE, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_KEEN_EYE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, @@ -7160,8 +6944,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_PICKUP, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PICKUP, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, @@ -7193,8 +6976,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_GUTS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -7226,8 +7008,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_MAGMA_ARMOR, - .ability2 = ABILITY_FLAME_BODY, + .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7259,8 +7040,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_MAGMA_ARMOR, - .ability2 = ABILITY_FLAME_BODY, + .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_FLAME_BODY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7292,8 +7072,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_OBLIVIOUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -7325,8 +7104,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_OBLIVIOUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -7358,8 +7136,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_HUSTLE, - .ability2 = ABILITY_NATURAL_CURE, + .abilities = {ABILITY_HUSTLE, ABILITY_NATURAL_CURE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -7391,8 +7168,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_HUSTLE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_HUSTLE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -7424,8 +7200,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_SUCTION_CUPS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7457,8 +7232,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_VITAL_SPIRIT, - .ability2 = ABILITY_HUSTLE, + .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_HUSTLE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7490,8 +7264,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_WATER_ABSORB, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_WATER_ABSORB}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -7523,8 +7296,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_KEEN_EYE, - .ability2 = ABILITY_STURDY, + .abilities = {ABILITY_KEEN_EYE, ABILITY_STURDY}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -7556,8 +7328,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_EARLY_BIRD, - .ability2 = ABILITY_FLASH_FIRE, + .abilities = {ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -7589,8 +7360,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_EARLY_BIRD, - .ability2 = ABILITY_FLASH_FIRE, + .abilities = {ABILITY_EARLY_BIRD, ABILITY_FLASH_FIRE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -7622,8 +7392,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -7655,8 +7424,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_PICKUP, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PICKUP, ABILITY_NONE}, .safariZoneFleeRate = 10, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -7688,8 +7456,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_STURDY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_STURDY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -7721,8 +7488,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_TRACE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_TRACE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7754,8 +7520,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_INTIMIDATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -7787,8 +7552,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_OWN_TEMPO, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -7820,8 +7584,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_GUTS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -7853,8 +7616,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_INTIMIDATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -7886,8 +7648,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_OBLIVIOUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -7919,8 +7680,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_STATIC, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_STATIC, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = TRUE, @@ -7952,8 +7712,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_FLAME_BODY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_FLAME_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -7985,8 +7744,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_THICK_FAT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -8018,8 +7776,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_NATURAL_CURE, - .ability2 = ABILITY_SERENE_GRACE, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_SERENE_GRACE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -8051,8 +7808,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_PRESSURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -8084,8 +7840,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_PRESSURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -8117,8 +7872,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_PRESSURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8150,8 +7904,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - .ability1 = ABILITY_GUTS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8183,8 +7936,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - .ability1 = ABILITY_SHED_SKIN, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -8216,8 +7968,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - .ability1 = ABILITY_SAND_STREAM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SAND_STREAM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8249,8 +8000,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_PRESSURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -8282,8 +8032,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_PRESSURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -8315,8 +8064,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_NATURAL_CURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8398,8 +8146,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_OVERGROW, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8431,8 +8178,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_OVERGROW, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8464,8 +8210,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_OVERGROW, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OVERGROW, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8497,8 +8242,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_BLAZE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -8530,8 +8274,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_BLAZE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -8563,8 +8306,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_BLAZE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_BLAZE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -8596,8 +8338,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_TORRENT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8629,8 +8370,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_TORRENT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8662,8 +8402,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_TORRENT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_TORRENT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -8695,8 +8434,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_RUN_AWAY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_RUN_AWAY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -8728,8 +8466,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_INTIMIDATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -8761,8 +8498,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_PICKUP, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PICKUP, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -8794,8 +8530,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_PICKUP, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PICKUP, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -8827,8 +8562,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SHIELD_DUST, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -8860,8 +8594,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SHED_SKIN, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -8893,8 +8626,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SWARM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SWARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -8926,8 +8658,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SHED_SKIN, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -8959,8 +8690,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SHIELD_DUST, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHIELD_DUST, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -8992,8 +8722,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_RAIN_DISH, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9025,8 +8754,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_RAIN_DISH, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9058,8 +8786,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_RAIN_DISH, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_RAIN_DISH}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9091,8 +8818,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_EARLY_BIRD, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9124,8 +8850,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_EARLY_BIRD, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9157,8 +8882,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_EARLY_BIRD, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_EARLY_BIRD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9190,8 +8914,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_COMPOUND_EYES, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_COMPOUND_EYES, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -9223,8 +8946,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SPEED_BOOST, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SPEED_BOOST, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -9256,8 +8978,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_WONDER_GUARD, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_WONDER_GUARD, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9289,8 +9010,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_GUTS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9322,8 +9042,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_GUTS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_GUTS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9355,8 +9074,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_EFFECT_SPORE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9388,8 +9106,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_EFFECT_SPORE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_EFFECT_SPORE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9421,8 +9138,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_OWN_TEMPO, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OWN_TEMPO, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = TRUE, @@ -9454,8 +9170,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_KEEN_EYE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -9487,8 +9202,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FLYING, - .ability1 = ABILITY_KEEN_EYE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -9520,8 +9234,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9553,8 +9266,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_INTIMIDATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9586,8 +9298,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_WATER_VEIL, - .ability2 = ABILITY_OBLIVIOUS, + .abilities = {ABILITY_WATER_VEIL, ABILITY_OBLIVIOUS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9619,8 +9330,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_WATER_VEIL, - .ability2 = ABILITY_OBLIVIOUS, + .abilities = {ABILITY_WATER_VEIL, ABILITY_OBLIVIOUS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9652,8 +9362,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_CUTE_CHARM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -9685,8 +9394,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_CUTE_CHARM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CUTE_CHARM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -9718,8 +9426,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_COLOR_CHANGE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_COLOR_CHANGE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -9751,8 +9458,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9784,8 +9490,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -9817,8 +9522,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_STURDY, - .ability2 = ABILITY_MAGNET_PULL, + .abilities = {ABILITY_STURDY, ABILITY_MAGNET_PULL}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -9850,8 +9554,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_WHITE_SMOKE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_WHITE_SMOKE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -9883,8 +9586,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_KEEN_EYE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_KEEN_EYE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -9916,8 +9618,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_OBLIVIOUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -9949,8 +9650,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_OBLIVIOUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -9982,8 +9682,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -10015,8 +9714,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_HYPER_CUTTER, - .ability2 = ABILITY_SHELL_ARMOR, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -10048,8 +9746,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_HYPER_CUTTER, - .ability2 = ABILITY_SHELL_ARMOR, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_SHELL_ARMOR}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -10081,8 +9778,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -10114,8 +9810,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_MARVEL_SCALE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_MARVEL_SCALE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -10147,8 +9842,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_ROUGH_SKIN, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_ROUGH_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -10180,8 +9874,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_2, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_ROUGH_SKIN, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_ROUGH_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10213,8 +9906,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_HYPER_CUTTER, - .ability2 = ABILITY_ARENA_TRAP, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_ARENA_TRAP}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -10246,8 +9938,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_LEVITATE, + .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -10279,8 +9970,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_BUG, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_LEVITATE, + .abilities = {ABILITY_LEVITATE, ABILITY_LEVITATE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -10312,8 +10002,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_THICK_FAT, - .ability2 = ABILITY_GUTS, + .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -10345,8 +10034,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_THICK_FAT, - .ability2 = ABILITY_GUTS, + .abilities = {ABILITY_THICK_FAT, ABILITY_GUTS}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -10378,8 +10066,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_STATIC, - .ability2 = ABILITY_LIGHTNING_ROD, + .abilities = {ABILITY_STATIC, ABILITY_LIGHTNING_ROD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -10411,8 +10098,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_STATIC, - .ability2 = ABILITY_LIGHTNING_ROD, + .abilities = {ABILITY_STATIC, ABILITY_LIGHTNING_ROD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -10444,8 +10130,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_OBLIVIOUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -10477,8 +10162,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_MAGMA_ARMOR, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_MAGMA_ARMOR, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -10510,8 +10194,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_THICK_FAT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10543,8 +10226,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_THICK_FAT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10576,8 +10258,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_THICK_FAT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_THICK_FAT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10609,8 +10290,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_SAND_VEIL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -10642,8 +10322,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_GRASS, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_SAND_VEIL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SAND_VEIL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -10675,8 +10354,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_INNER_FOCUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -10708,8 +10386,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_INNER_FOCUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INNER_FOCUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -10741,8 +10418,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -10774,8 +10450,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -10807,8 +10482,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_THICK_FAT, - .ability2 = ABILITY_HUGE_POWER, + .abilities = {ABILITY_THICK_FAT, ABILITY_HUGE_POWER}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -10840,8 +10514,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_THICK_FAT, - .ability2 = ABILITY_OWN_TEMPO, + .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -10873,8 +10546,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_THICK_FAT, - .ability2 = ABILITY_OWN_TEMPO, + .abilities = {ABILITY_THICK_FAT, ABILITY_OWN_TEMPO}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -10906,8 +10578,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_PLUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PLUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -10939,8 +10610,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_MINUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_MINUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -10972,8 +10642,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FAIRY, - .ability1 = ABILITY_HYPER_CUTTER, - .ability2 = ABILITY_INTIMIDATE, + .abilities = {ABILITY_HYPER_CUTTER, ABILITY_INTIMIDATE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -11005,8 +10674,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_PURE_POWER, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PURE_POWER, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11038,8 +10706,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_HUMAN_LIKE, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_PURE_POWER, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PURE_POWER, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -11071,8 +10738,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_NATURAL_CURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11104,8 +10770,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_FLYING, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_NATURAL_CURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11137,8 +10802,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_SHADOW_TAG, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHADOW_TAG, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11170,8 +10834,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -11203,8 +10866,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_PRESSURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -11236,8 +10898,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_NATURAL_CURE, - .ability2 = ABILITY_POISON_POINT, + .abilities = {ABILITY_NATURAL_CURE, ABILITY_POISON_POINT}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = TRUE, @@ -11269,8 +10930,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_TRUANT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_TRUANT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -11302,8 +10962,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_VITAL_SPIRIT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_VITAL_SPIRIT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -11335,8 +10994,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_TRUANT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_TRUANT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -11368,8 +11026,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_LIQUID_OOZE, - .ability2 = ABILITY_STICKY_HOLD, + .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -11401,8 +11058,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_LIQUID_OOZE, - .ability2 = ABILITY_STICKY_HOLD, + .abilities = {ABILITY_LIQUID_OOZE, ABILITY_STICKY_HOLD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -11434,8 +11090,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_GRASS, - .ability1 = ABILITY_CHLOROPHYLL, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CHLOROPHYLL, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -11467,8 +11122,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_SOUNDPROOF, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -11500,8 +11154,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_SOUNDPROOF, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11533,8 +11186,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_SOUNDPROOF, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SOUNDPROOF, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11566,8 +11218,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_SHELL_ARMOR, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHELL_ARMOR, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11599,8 +11250,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -11632,8 +11282,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_1, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PINK, .noFlip = FALSE, @@ -11665,8 +11314,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_SLOW, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_PRESSURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, @@ -11698,8 +11346,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_INSOMNIA, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -11731,8 +11378,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_INSOMNIA, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INSOMNIA, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = FALSE, @@ -11764,8 +11410,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_SHED_SKIN, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SHED_SKIN, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLACK, .noFlip = TRUE, @@ -11797,8 +11442,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_FIELD, .eggGroup2 = EGG_GROUP_FIELD, - .ability1 = ABILITY_IMMUNITY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_IMMUNITY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = TRUE, @@ -11830,8 +11474,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_WATER_1, .eggGroup2 = EGG_GROUP_WATER_2, - .ability1 = ABILITY_SWIFT_SWIM, - .ability2 = ABILITY_ROCK_HEAD, + .abilities = {ABILITY_SWIFT_SWIM, ABILITY_ROCK_HEAD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11863,8 +11506,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - .ability1 = ABILITY_STURDY, - .ability2 = ABILITY_ROCK_HEAD, + .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11896,8 +11538,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - .ability1 = ABILITY_STURDY, - .ability2 = ABILITY_ROCK_HEAD, + .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11929,8 +11570,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MONSTER, .eggGroup2 = EGG_GROUP_MONSTER, - .ability1 = ABILITY_STURDY, - .ability2 = ABILITY_ROCK_HEAD, + .abilities = {ABILITY_STURDY, ABILITY_ROCK_HEAD}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -11962,8 +11602,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_MEDIUM_FAST, .eggGroup1 = EGG_GROUP_FAIRY, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_FORECAST, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_FORECAST, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -11995,8 +11634,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_ILLUMINATE, - .ability2 = ABILITY_SWARM, + .abilities = {ABILITY_ILLUMINATE, ABILITY_SWARM}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -12028,8 +11666,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FLUCTUATING, .eggGroup1 = EGG_GROUP_BUG, .eggGroup2 = EGG_GROUP_HUMAN_LIKE, - .ability1 = ABILITY_OBLIVIOUS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_OBLIVIOUS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -12061,8 +11698,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_SUCTION_CUPS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_PURPLE, .noFlip = FALSE, @@ -12094,8 +11730,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_SUCTION_CUPS, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SUCTION_CUPS, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -12127,8 +11762,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_BATTLE_ARMOR, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -12160,8 +11794,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_ERRATIC, .eggGroup1 = EGG_GROUP_WATER_3, .eggGroup2 = EGG_GROUP_WATER_3, - .ability1 = ABILITY_BATTLE_ARMOR, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_BATTLE_ARMOR, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -12193,8 +11826,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_SYNCHRONIZE, - .ability2 = ABILITY_TRACE, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -12226,8 +11858,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_SYNCHRONIZE, - .ability2 = ABILITY_TRACE, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -12259,8 +11890,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_SYNCHRONIZE, - .ability2 = ABILITY_TRACE, + .abilities = {ABILITY_SYNCHRONIZE, ABILITY_TRACE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -12292,8 +11922,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_DRAGON, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_ROCK_HEAD, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12325,8 +11954,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_DRAGON, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_ROCK_HEAD, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_ROCK_HEAD, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_WHITE, .noFlip = FALSE, @@ -12358,8 +11986,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_DRAGON, .eggGroup2 = EGG_GROUP_DRAGON, - .ability1 = ABILITY_INTIMIDATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_INTIMIDATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12391,8 +12018,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_CLEAR_BODY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12424,8 +12050,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_CLEAR_BODY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12457,8 +12082,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_MINERAL, .eggGroup2 = EGG_GROUP_MINERAL, - .ability1 = ABILITY_CLEAR_BODY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12490,8 +12114,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_CLEAR_BODY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BROWN, .noFlip = FALSE, @@ -12523,8 +12146,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_CLEAR_BODY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12556,8 +12178,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_CLEAR_BODY, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_CLEAR_BODY, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GRAY, .noFlip = FALSE, @@ -12589,8 +12210,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_DRIZZLE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_DRIZZLE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12622,8 +12242,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_DROUGHT, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_DROUGHT, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -12655,8 +12274,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_AIR_LOCK, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_AIR_LOCK, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_GREEN, .noFlip = FALSE, @@ -12688,8 +12306,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = FALSE, @@ -12721,8 +12338,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, @@ -12754,8 +12370,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_SERENE_GRACE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_SERENE_GRACE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_YELLOW, .noFlip = FALSE, @@ -12787,8 +12402,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_SLOW, .eggGroup1 = EGG_GROUP_UNDISCOVERED, .eggGroup2 = EGG_GROUP_UNDISCOVERED, - .ability1 = ABILITY_PRESSURE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_PRESSURE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_RED, .noFlip = TRUE, @@ -12820,8 +12434,7 @@ const struct BaseStats gBaseStats[] = .growthRate = GROWTH_FAST, .eggGroup1 = EGG_GROUP_AMORPHOUS, .eggGroup2 = EGG_GROUP_AMORPHOUS, - .ability1 = ABILITY_LEVITATE, - .ability2 = ABILITY_NONE, + .abilities = {ABILITY_LEVITATE, ABILITY_NONE}, .safariZoneFleeRate = 0, .bodyColor = BODY_COLOR_BLUE, .noFlip = FALSE, diff --git a/src/data/pokemon/trainer_class_lookups.h b/src/data/pokemon/trainer_class_lookups.h index 04c7ab3c4..0f2b53a18 100644 --- a/src/data/pokemon/trainer_class_lookups.h +++ b/src/data/pokemon/trainer_class_lookups.h @@ -166,7 +166,6 @@ const u8 gFacilityClassToTrainerClass[] = [FACILITY_CLASS_DOME_ACE_TUCKER] = TRAINER_CLASS_DOME_ACE, [FACILITY_CLASS_RED] = TRAINER_CLASS_PKMN_TRAINER_3, [FACILITY_CLASS_LEAF] = TRAINER_CLASS_PKMN_TRAINER_3, - [FACILITY_CLASS_RS_BRENDAN] = TRAINER_CLASS_PKMN_TRAINER_4, - [FACILITY_CLASS_RS_MAY] = TRAINER_CLASS_PKMN_TRAINER_4, + [FACILITY_CLASS_RS_BRENDAN] = TRAINER_CLASS_RS_PROTAG, + [FACILITY_CLASS_RS_MAY] = TRAINER_CLASS_RS_PROTAG, }; - diff --git a/src/data/region_map/city_map_entries.h b/src/data/region_map/city_map_entries.h new file mode 100644 index 000000000..7b8361a7c --- /dev/null +++ b/src/data/region_map/city_map_entries.h @@ -0,0 +1,113 @@ +const struct CityMapEntry gPokenavCityMaps[] = +{ + { + .mapSecId = 0, + .index = 0, + .tilemap = gPokenavCityMap_Littleroot_0, + }, + { + .mapSecId = 1, + .index = 0, + .tilemap = gPokenavCityMap_Oldale_0, + }, + { + .mapSecId = 2, + .index = 0, + .tilemap = gPokenavCityMap_Dewford_0, + }, + { + .mapSecId = 3, + .index = 0, + .tilemap = gPokenavCityMap_Lavarige_0, + }, + { + .mapSecId = 4, + .index = 0, + .tilemap = gPokenavCityMap_Fallarbor_0, + }, + { + .mapSecId = 5, + .index = 0, + .tilemap = gPokenavCityMap_Verdanturf_0, + }, + { + .mapSecId = 6, + .index = 0, + .tilemap = gPokenavCityMap_Pacifidlog_0, + }, + { + .mapSecId = 7, + .index = 0, + .tilemap = gPokenavCityMap_Petalburg_0, + }, + { + .mapSecId = 8, + .index = 0, + .tilemap = gPokenavCityMap_Slateport_0, + }, + { + .mapSecId = 8, + .index = 1, + .tilemap = gPokenavCityMap_Slateport_1, + }, + { + .mapSecId = 9, + .index = 0, + .tilemap = gPokenavCityMap_Mauville_0, + }, + { + .mapSecId = 9, + .index = 1, + .tilemap = gPokenavCityMap_Mauville_1, + }, + { + .mapSecId = 10, + .index = 0, + .tilemap = gPokenavCityMap_Rustboro_0, + }, + { + .mapSecId = 10, + .index = 1, + .tilemap = gPokenavCityMap_Rustboro_1, + }, + { + .mapSecId = 11, + .index = 0, + .tilemap = gPokenavCityMap_Fortree_0, + }, + { + .mapSecId = 12, + .index = 0, + .tilemap = gPokenavCityMap_Lilycove_0, + }, + { + .mapSecId = 12, + .index = 1, + .tilemap = gPokenavCityMap_Lilycove_1, + }, + { + .mapSecId = 13, + .index = 0, + .tilemap = gPokenavCityMap_Mossdeep_0, + }, + { + .mapSecId = 13, + .index = 1, + .tilemap = gPokenavCityMap_Mossdeep_1, + }, + { + .mapSecId = 14, + .index = 0, + .tilemap = gPokenavCityMap_Sootopolis_0, + }, + { + .mapSecId = 15, + .index = 0, + .tilemap = gPokenavCityMap_EverGrande_0, + }, + { + .mapSecId = 15, + .index = 1, + .tilemap = gPokenavCityMap_EverGrande_1, + }, +}; diff --git a/src/data/region_map/city_map_tilemaps.h b/src/data/region_map/city_map_tilemaps.h new file mode 100644 index 000000000..8a8a931f9 --- /dev/null +++ b/src/data/region_map/city_map_tilemaps.h @@ -0,0 +1,22 @@ +const u32 gPokenavCityMap_Lavarige_0[] = INCBIN_U32("graphics/pokenav/city_maps/lavaridge_0.bin.lz"); +const u32 gPokenavCityMap_Fallarbor_0[] = INCBIN_U32("graphics/pokenav/city_maps/fallarbor_0.bin.lz"); +const u32 gPokenavCityMap_Fortree_0[] = INCBIN_U32("graphics/pokenav/city_maps/fortree_0.bin.lz"); +const u32 gPokenavCityMap_Slateport_0[] = INCBIN_U32("graphics/pokenav/city_maps/slateport_0.bin.lz"); +const u32 gPokenavCityMap_Slateport_1[] = INCBIN_U32("graphics/pokenav/city_maps/slateport_1.bin.lz"); +const u32 gPokenavCityMap_Rustboro_0[] = INCBIN_U32("graphics/pokenav/city_maps/rustboro_0.bin.lz"); +const u32 gPokenavCityMap_Rustboro_1[] = INCBIN_U32("graphics/pokenav/city_maps/rustboro_1.bin.lz"); +const u32 gPokenavCityMap_Pacifidlog_0[] = INCBIN_U32("graphics/pokenav/city_maps/pacifidlog_0.bin.lz"); +const u32 gPokenavCityMap_Mauville_1[] = INCBIN_U32("graphics/pokenav/city_maps/mauville_1.bin.lz"); +const u32 gPokenavCityMap_Mauville_0[] = INCBIN_U32("graphics/pokenav/city_maps/mauville_0.bin.lz"); +const u32 gPokenavCityMap_Oldale_0[] = INCBIN_U32("graphics/pokenav/city_maps/oldale_0.bin.lz"); +const u32 gPokenavCityMap_Lilycove_1[] = INCBIN_U32("graphics/pokenav/city_maps/lilycove_1.bin.lz"); +const u32 gPokenavCityMap_Lilycove_0[] = INCBIN_U32("graphics/pokenav/city_maps/lilycove_0.bin.lz"); +const u32 gPokenavCityMap_Littleroot_0[] = INCBIN_U32("graphics/pokenav/city_maps/littleroot_0.bin.lz"); +const u32 gPokenavCityMap_Dewford_0[] = INCBIN_U32("graphics/pokenav/city_maps/dewford_0.bin.lz"); +const u32 gPokenavCityMap_Sootopolis_0[] = INCBIN_U32("graphics/pokenav/city_maps/sootopolis_0.bin.lz"); +const u32 gPokenavCityMap_EverGrande_0[] = INCBIN_U32("graphics/pokenav/city_maps/ever_grande_0.bin.lz"); +const u32 gPokenavCityMap_EverGrande_1[] = INCBIN_U32("graphics/pokenav/city_maps/ever_grande_1.bin.lz"); +const u32 gPokenavCityMap_Verdanturf_0[] = INCBIN_U32("graphics/pokenav/city_maps/verdanturf_0.bin.lz"); +const u32 gPokenavCityMap_Mossdeep_1[] = INCBIN_U32("graphics/pokenav/city_maps/mossdeep_1.bin.lz"); +const u32 gPokenavCityMap_Mossdeep_0[] = INCBIN_U32("graphics/pokenav/city_maps/mossdeep_0.bin.lz"); +const u32 gPokenavCityMap_Petalburg_0[] = INCBIN_U32("graphics/pokenav/city_maps/petalburg_0.bin.lz"); diff --git a/src/data/text/gift_ribbon_descriptions.h b/src/data/text/gift_ribbon_descriptions.h new file mode 100644 index 000000000..ea108be18 --- /dev/null +++ b/src/data/text/gift_ribbon_descriptions.h @@ -0,0 +1,115 @@ +const u8 gGiftRibbonDescriptionPart1_2003RegionalTourney[] = _("2003 REGIONAL TOURNEY"); +const u8 gGiftRibbonDescriptionPart2_Champion[] = _("CHAMPION RIBBON"); +const u8 gGiftRibbonDescriptionPart1_2003NationalTourney[] = _("2003 NATIONAL TOURNEY"); +const u8 gGiftRibbonDescriptionPart1_2003GlobalCup[] = _("2003 GLOBAL CUP"); +const u8 gGiftRibbonDescriptionPart2_RunnerUp[] = _("Runner-up RIBBON"); +const u8 gGiftRibbonDescriptionPart2_Semifinalist[] = _("Semifinalist RIBBON"); +const u8 gGiftRibbonDescriptionPart1_2004RegionalTourney[] = _("2004 REGIONAL TOURNEY"); +const u8 gGiftRibbonDescriptionPart1_2004NationalTourney[] = _("2004 NATIONAL TOURNEY"); +const u8 gGiftRibbonDescriptionPart1_2004GlobalCup[] = _("2004 GLOBAL CUP"); +const u8 gGiftRibbonDescriptionPart1_2005RegionalTourney[] = _("2005 REGIONAL TOURNEY"); +const u8 gGiftRibbonDescriptionPart1_2005NationalTourney[] = _("2005 NATIONAL TOURNEY"); +const u8 gGiftRibbonDescriptionPart1_2005GlobalCup[] = _("2005 GLOBAL CUP"); +const u8 gGiftRibbonDescriptionPart1_PokemonBattleCup[] = _("POKéMON BATTLE CUP"); +const u8 gGiftRibbonDescriptionPart2_Participation[] = _("Participation RIBBON"); +const u8 gGiftRibbonDescriptionPart1_PokemonLeague[] = _("POKéMON LEAGUE"); +const u8 gGiftRibbonDescriptionPart1_AdvanceCup[] = _("ADVANCE CUP"); +const u8 gGiftRibbonDescriptionPart1_PokemonTournament[] = _("POKéMON Tournament"); +const u8 gGiftRibbonDescriptionPart2_Participation2[] = _("Participation RIBBON"); +const u8 gGiftRibbonDescriptionPart1_PokemonEvent[] = _("POKéMON Event"); +const u8 gGiftRibbonDescriptionPart1_PokemonFestival[] = _("POKéMON Festival"); +const u8 gGiftRibbonDescriptionPart1_DifficultyClearing[] = _("Difficulty-clearing"); +const u8 gGiftRibbonDescriptionPart2_Commemorative[] = _("Commemorative RIBBON"); +const u8 gGiftRibbonDescriptionPart1_ClearingAllChallenges[] = _("RIBBON awarded for"); +const u8 gGiftRibbonDescriptionPart2_ClearingAllChallenges[] = _("clearing all challenges."); +const u8 gGiftRibbonDescriptionPart1_100StraightWin[] = _("100-straight Win"); +const u8 gGiftRibbonDescriptionPart1_DarknessTower[] = _("DARKNESS TOWER Clear"); +const u8 gGiftRibbonDescriptionPart1_RedTower[] = _("RED TOWER Clear"); +const u8 gGiftRibbonDescriptionPart1_BlackironTower[] = _("BLACKIRON TOWER Clear"); +const u8 gGiftRibbonDescriptionPart1_FinalTower[] = _("FINAL TOWER Clear"); +const u8 gGiftRibbonDescriptionPart1_LegendMaking[] = _("Legend-making"); +const u8 gGiftRibbonDescriptionPart1_PokemonCenterTokyo[] = _("POKéMON CENTER TOKYO"); +const u8 gGiftRibbonDescriptionPart1_PokemonCenterOsaka[] = _("POKéMON CENTER OSAKA"); +const u8 gGiftRibbonDescriptionPart1_PokemonCenterNagoya[] = _("POKéMON CENTER NAGOYA"); +const u8 gGiftRibbonDescriptionPart1_PokemonCenterNY[] = _("POKéMON CENTER NY"); +const u8 gGiftRibbonDescriptionPart1_SummerHolidays[] = _("Summer Holidays RIBBON"); +const u8 gGiftRibbonDescriptionPart2_EmptyString[] = _(""); +const u8 gGiftRibbonDescriptionPart1_WinterHolidays[] = _("Winter Holidays RIBBON"); +const u8 gGiftRibbonDescriptionPart1_SpringHolidays[] = _("Spring Holidays RIBBON"); +const u8 gGiftRibbonDescriptionPart1_Evergreen[] = _("Evergreen RIBBON"); +const u8 gGiftRibbonDescriptionPart1_SpecialHoliday[] = _("Special Holiday RIBBON"); +const u8 gGiftRibbonDescriptionPart1_HardWorker[] = _("Hard Worker RIBBON"); +const u8 gGiftRibbonDescriptionPart1_LotsOfFriends[] = _("Lots of Friends RIBBON"); +const u8 gGiftRibbonDescriptionPart1_FullOfEnergy[] = _("Full of Energy RIBBON"); +const u8 gGiftRibbonDescriptionPart1_LovedPokemon[] = _("A commemorative RIBBON"); +const u8 gGiftRibbonDescriptionPart2_LovedPokemon[] = _("for a loved POKéMON."); +const u8 gGiftRibbonDescriptionPart1_LoveForPokemon[] = _("RIBBON that shows"); +const u8 gGiftRibbonDescriptionPart2_LoveForPokemon[] = _("love for POKéMON."); + +const u8 *const gGiftRibbonDescriptionPointers[][2] = +{ + {gGiftRibbonDescriptionPart1_2003RegionalTourney, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2003NationalTourney, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2003GlobalCup, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2003RegionalTourney, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2003NationalTourney, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2003GlobalCup, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2003RegionalTourney, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2003NationalTourney, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2003GlobalCup, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2004RegionalTourney, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2004NationalTourney, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2004GlobalCup, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2004RegionalTourney, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2004NationalTourney, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2004GlobalCup, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2004RegionalTourney, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2004NationalTourney, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2004GlobalCup, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2005RegionalTourney, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2005NationalTourney, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2005GlobalCup, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_2005RegionalTourney, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2005NationalTourney, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2005GlobalCup, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_2005RegionalTourney, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2005NationalTourney, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_2005GlobalCup, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_PokemonBattleCup, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_PokemonBattleCup, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_PokemonBattleCup, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_PokemonBattleCup, gGiftRibbonDescriptionPart2_Participation}, + {gGiftRibbonDescriptionPart1_PokemonLeague, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_PokemonLeague, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_PokemonLeague, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_PokemonLeague, gGiftRibbonDescriptionPart2_Participation}, + {gGiftRibbonDescriptionPart1_AdvanceCup, gGiftRibbonDescriptionPart2_Champion}, + {gGiftRibbonDescriptionPart1_AdvanceCup, gGiftRibbonDescriptionPart2_RunnerUp}, + {gGiftRibbonDescriptionPart1_AdvanceCup, gGiftRibbonDescriptionPart2_Semifinalist}, + {gGiftRibbonDescriptionPart1_AdvanceCup, gGiftRibbonDescriptionPart2_Participation}, + {gGiftRibbonDescriptionPart1_PokemonTournament, gGiftRibbonDescriptionPart2_Participation2}, + {gGiftRibbonDescriptionPart1_PokemonEvent, gGiftRibbonDescriptionPart2_Participation2}, + {gGiftRibbonDescriptionPart1_PokemonFestival, gGiftRibbonDescriptionPart2_Participation2}, + {gGiftRibbonDescriptionPart1_DifficultyClearing, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_ClearingAllChallenges, gGiftRibbonDescriptionPart2_ClearingAllChallenges}, + {gGiftRibbonDescriptionPart1_100StraightWin, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_DarknessTower, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_RedTower, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_BlackironTower, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_FinalTower, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_LegendMaking, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_PokemonCenterTokyo, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_PokemonCenterOsaka, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_PokemonCenterNagoya, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_PokemonCenterNY, gGiftRibbonDescriptionPart2_Commemorative}, + {gGiftRibbonDescriptionPart1_SummerHolidays, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_WinterHolidays, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_SpringHolidays, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_Evergreen, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_SpecialHoliday, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_HardWorker, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_LotsOfFriends, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_FullOfEnergy, gGiftRibbonDescriptionPart2_EmptyString}, + {gGiftRibbonDescriptionPart1_LovedPokemon, gGiftRibbonDescriptionPart2_LovedPokemon}, + {gGiftRibbonDescriptionPart1_LoveForPokemon, gGiftRibbonDescriptionPart2_LoveForPokemon} +}; diff --git a/src/data/text/match_call_messages.h b/src/data/text/match_call_messages.h new file mode 100644 index 000000000..c3015b5a7 --- /dev/null +++ b/src/data/text/match_call_messages.h @@ -0,0 +1,476 @@ +#define MCFLAVOR(name) {gMatchCallFlavorText_##name##_Strategy, \ + gMatchCallFlavorText_##name##_Pokemon, \ + gMatchCallFlavorText_##name##_Intro1, \ + gMatchCallFlavorText_##name##_Intro2} + +const u8 gMatchCallFlavorText_AromaLady_Rose_Strategy[] = _("Becalm fighting emotions."); +const u8 gMatchCallFlavorText_AromaLady_Rose_Pokemon[] = _("Fragrant GRASS POKéMON."); +const u8 gMatchCallFlavorText_AromaLady_Rose_Intro1[] = _("Soothing aromas make the"); +const u8 gMatchCallFlavorText_AromaLady_Rose_Intro2[] = _("body and mind healthy."); + +const u8 gMatchCallFlavorText_RuinManiac_Andres_Strategy[] = _("I'm not very good at this."); +const u8 gMatchCallFlavorText_RuinManiac_Andres_Pokemon[] = _("Ruin-exploration partners."); +const u8 gMatchCallFlavorText_RuinManiac_Andres_Intro1[] = _("I am searching for undersea"); +const u8 gMatchCallFlavorText_RuinManiac_Andres_Intro2[] = _("ruins and relics."); + +const u8 gMatchCallFlavorText_RuinManiac_Dusty_Strategy[] = _("Overwhelm with power!"); +const u8 gMatchCallFlavorText_RuinManiac_Dusty_Pokemon[] = _("Craggy ROCK POKéMON."); +const u8 gMatchCallFlavorText_RuinManiac_Dusty_Intro1[] = _("In search of ancient lore,"); +const u8 gMatchCallFlavorText_RuinManiac_Dusty_Intro2[] = _("I travel the world."); + +const u8 gMatchCallFlavorText_Tuber_Lola_Strategy[] = _("I'm going to try hard!"); +const u8 gMatchCallFlavorText_Tuber_Lola_Pokemon[] = _("Good swimmer POKéMON."); +const u8 gMatchCallFlavorText_Tuber_Lola_Intro1[] = _("I wish I could swim without"); +const u8 gMatchCallFlavorText_Tuber_Lola_Intro2[] = _("using an inner tube."); + +const u8 gMatchCallFlavorText_Tuber_Ricky_Strategy[] = _("I don't know. I'll try hard."); +const u8 gMatchCallFlavorText_Tuber_Ricky_Pokemon[] = _("WATER POKéMON are buddies."); +const u8 gMatchCallFlavorText_Tuber_Ricky_Intro1[] = _("It's not like I can't swim."); +const u8 gMatchCallFlavorText_Tuber_Ricky_Intro2[] = _("I just like my inner tube."); + +const u8 gMatchCallFlavorText_SisAndBro_LilaAndRoy_Strategy[] = _("We split our duties."); +const u8 gMatchCallFlavorText_SisAndBro_LilaAndRoy_Pokemon[] = _("We like friendly POKéMON."); +const u8 gMatchCallFlavorText_SisAndBro_LilaAndRoy_Intro1[] = _("We enjoy POKéMON together"); +const u8 gMatchCallFlavorText_SisAndBro_LilaAndRoy_Intro2[] = _("as sister and brother."); + +const u8 gMatchCallFlavorText_Cooltrainer_Cristin_Strategy[] = _("I finish with power moves!"); +const u8 gMatchCallFlavorText_Cooltrainer_Cristin_Pokemon[] = _("A mix of different types."); +const u8 gMatchCallFlavorText_Cooltrainer_Cristin_Intro1[] = _("I aim to become the ultimate"); +const u8 gMatchCallFlavorText_Cooltrainer_Cristin_Intro2[] = _("TRAINER!"); + +const u8 gMatchCallFlavorText_Cooltrainer_Brooke_Strategy[] = _("Exploit the foe's weakness."); +const u8 gMatchCallFlavorText_Cooltrainer_Brooke_Pokemon[] = _("Balance is crucial."); +const u8 gMatchCallFlavorText_Cooltrainer_Brooke_Intro1[] = _("My goal is to become the"); +const u8 gMatchCallFlavorText_Cooltrainer_Brooke_Intro2[] = _("POKéMON CHAMPION."); + +const u8 gMatchCallFlavorText_Cooltrainer_Wilton_Strategy[] = _("Upset the opponent."); +const u8 gMatchCallFlavorText_Cooltrainer_Wilton_Pokemon[] = _("Type doesn't matter."); +const u8 gMatchCallFlavorText_Cooltrainer_Wilton_Intro1[] = _("I'm a top student at the"); +const u8 gMatchCallFlavorText_Cooltrainer_Wilton_Intro2[] = _("TRAINER'S SCHOOL."); + +const u8 gMatchCallFlavorText_HexManiac_Valerie_Strategy[] = _("Slow, steady suffering."); +const u8 gMatchCallFlavorText_HexManiac_Valerie_Pokemon[] = _("Scary to meet at night."); +const u8 gMatchCallFlavorText_HexManiac_Valerie_Intro1[] = _("I see things that others"); +const u8 gMatchCallFlavorText_HexManiac_Valerie_Intro2[] = _("can't see..."); + +const u8 gMatchCallFlavorText_Lady_Cindy_Strategy[] = _("Anything to win."); +const u8 gMatchCallFlavorText_Lady_Cindy_Pokemon[] = _("Gorgeous type!"); +const u8 gMatchCallFlavorText_Lady_Cindy_Intro1[] = _("I have a pool specially for"); +const u8 gMatchCallFlavorText_Lady_Cindy_Intro2[] = _("my POKéMON at home."); + +const u8 gMatchCallFlavorText_Beauty_Thalia_Strategy[] = _("You'll fall under my spell!"); +const u8 gMatchCallFlavorText_Beauty_Thalia_Pokemon[] = _("Mature WATER type."); +const u8 gMatchCallFlavorText_Beauty_Thalia_Intro1[] = _("I dream of cruising around"); +const u8 gMatchCallFlavorText_Beauty_Thalia_Intro2[] = _("the world on a luxury liner."); + +const u8 gMatchCallFlavorText_Beauty_Jessica_Strategy[] = _("I'll lead you astray."); +const u8 gMatchCallFlavorText_Beauty_Jessica_Pokemon[] = _("Cute, of course."); +const u8 gMatchCallFlavorText_Beauty_Jessica_Intro1[] = _("I love the SAFARI ZONE."); +const u8 gMatchCallFlavorText_Beauty_Jessica_Intro2[] = _("I seem to end up there."); + +const u8 gMatchCallFlavorText_RichBoy_Winston_Strategy[] = _("Strategy? Who needs it?"); +const u8 gMatchCallFlavorText_RichBoy_Winston_Pokemon[] = _("I spent big money on it!"); +const u8 gMatchCallFlavorText_RichBoy_Winston_Intro1[] = _("I, being rich, sleep in a"); +const u8 gMatchCallFlavorText_RichBoy_Winston_Intro2[] = _("custom POKéMON bed."); + +const u8 gMatchCallFlavorText_PokeManiac_Steve_Strategy[] = _("Wrestle down with power."); +const u8 gMatchCallFlavorText_PokeManiac_Steve_Pokemon[] = _("Took all night to catch."); +const u8 gMatchCallFlavorText_PokeManiac_Steve_Intro1[] = _("Big, burly, and buff"); +const u8 gMatchCallFlavorText_PokeManiac_Steve_Intro2[] = _("POKéMON are the best..."); + +const u8 gMatchCallFlavorText_Swimmer_Tony_Strategy[] = _("Ram at full speed!"); +const u8 gMatchCallFlavorText_Swimmer_Tony_Pokemon[] = _("Funky WATER type!"); +const u8 gMatchCallFlavorText_Swimmer_Tony_Intro1[] = _("If I can't be out swimming,"); +const u8 gMatchCallFlavorText_Swimmer_Tony_Intro2[] = _("I'll be pumping weights."); + +const u8 gMatchCallFlavorText_BlackBelt_Nob_Strategy[] = _("Grand slam pummeling!"); +const u8 gMatchCallFlavorText_BlackBelt_Nob_Pokemon[] = _("FIGHTING type."); +const u8 gMatchCallFlavorText_BlackBelt_Nob_Intro1[] = _("Not to brag, but I can bust"); +const u8 gMatchCallFlavorText_BlackBelt_Nob_Intro2[] = _("ten roof tiles!"); + +const u8 gMatchCallFlavorText_BlackBelt_Koji_Strategy[] = _("Witness karate power!"); +const u8 gMatchCallFlavorText_BlackBelt_Koji_Pokemon[] = _("My partners in training!"); +const u8 gMatchCallFlavorText_BlackBelt_Koji_Intro1[] = _("Let us discuss matters of"); +const u8 gMatchCallFlavorText_BlackBelt_Koji_Intro2[] = _("the world with bare fists!"); + +const u8 gMatchCallFlavorText_Guitarist_Fernando_Strategy[] = _("Rock to stunning sounds!"); +const u8 gMatchCallFlavorText_Guitarist_Fernando_Pokemon[] = _("Electric-and-sound combo!"); +const u8 gMatchCallFlavorText_Guitarist_Fernando_Intro1[] = _("My compositions will shock"); +const u8 gMatchCallFlavorText_Guitarist_Fernando_Intro2[] = _("you and stun you!"); + +const u8 gMatchCallFlavorText_Guitarist_Dalton_Strategy[] = _("I'll electrify you!"); +const u8 gMatchCallFlavorText_Guitarist_Dalton_Pokemon[] = _("They're ELECTRIC!"); +const u8 gMatchCallFlavorText_Guitarist_Dalton_Intro1[] = _("I want to make people cry"); +const u8 gMatchCallFlavorText_Guitarist_Dalton_Intro2[] = _("with songs from my heart."); + +const u8 gMatchCallFlavorText_Kindler_Bernie_Strategy[] = _("Burn it all down!"); +const u8 gMatchCallFlavorText_Kindler_Bernie_Pokemon[] = _("Burn-inducing POKéMON."); +const u8 gMatchCallFlavorText_Kindler_Bernie_Intro1[] = _("When you light a campfire,"); +const u8 gMatchCallFlavorText_Kindler_Bernie_Intro2[] = _("be sure there's some water."); + +const u8 gMatchCallFlavorText_Camper_Ethan_Strategy[] = _("Hang in and be tenacious!"); +const u8 gMatchCallFlavorText_Camper_Ethan_Pokemon[] = _("I'll raise any POKéMON."); +const u8 gMatchCallFlavorText_Camper_Ethan_Intro1[] = _("POKéMON raised in the wild"); +const u8 gMatchCallFlavorText_Camper_Ethan_Intro2[] = _("grow strong!"); + +const u8 gMatchCallFlavorText_OldCouple_JohnAndJay_Strategy[] = _("Our love lets us prevail."); +const u8 gMatchCallFlavorText_OldCouple_JohnAndJay_Pokemon[] = _("We've had them for years."); +const u8 gMatchCallFlavorText_OldCouple_JohnAndJay_Intro1[] = _("Married 50 years, we've"); +const u8 gMatchCallFlavorText_OldCouple_JohnAndJay_Intro2[] = _("devotedly raised POKéMON."); + +const u8 gMatchCallFlavorText_BugManiac_Jeffrey_Strategy[] = _("Attack in waves!"); +const u8 gMatchCallFlavorText_BugManiac_Jeffrey_Pokemon[] = _("BUG POKéMON are cool."); +const u8 gMatchCallFlavorText_BugManiac_Jeffrey_Intro1[] = _("I go into the forest every"); +const u8 gMatchCallFlavorText_BugManiac_Jeffrey_Intro2[] = _("day to catch BUG POKéMON."); + +const u8 gMatchCallFlavorText_Psychic_Cameron_Strategy[] = _("Daze and confuse!"); +const u8 gMatchCallFlavorText_Psychic_Cameron_Pokemon[] = _("Ones with weird powers."); +const u8 gMatchCallFlavorText_Psychic_Cameron_Intro1[] = _("I can see through exactly"); +const u8 gMatchCallFlavorText_Psychic_Cameron_Intro2[] = _("what you're thinking!"); + +const u8 gMatchCallFlavorText_Psychic_Jacki_Strategy[] = _("Battle at full power."); +const u8 gMatchCallFlavorText_Psychic_Jacki_Pokemon[] = _("POKéMON of many mysteries."); +const u8 gMatchCallFlavorText_Psychic_Jacki_Intro1[] = _("When we spoke, I was really"); +const u8 gMatchCallFlavorText_Psychic_Jacki_Intro2[] = _("using telepathy."); + +const u8 gMatchCallFlavorText_Gentleman_Walter_Strategy[] = _("Calm and collected."); +const u8 gMatchCallFlavorText_Gentleman_Walter_Pokemon[] = _("POKéMON of distinction."); +const u8 gMatchCallFlavorText_Gentleman_Walter_Intro1[] = _("We enjoy a spot of tea"); +const u8 gMatchCallFlavorText_Gentleman_Walter_Intro2[] = _("every day. It's imported."); + +const u8 gMatchCallFlavorText_SchoolKid_Karen_Strategy[] = _("I use my head to battle."); +const u8 gMatchCallFlavorText_SchoolKid_Karen_Pokemon[] = _("I love any kind of POKéMON!"); +const u8 gMatchCallFlavorText_SchoolKid_Karen_Intro1[] = _("My daddy gives me spending"); +const u8 gMatchCallFlavorText_SchoolKid_Karen_Intro2[] = _("money if I ace a test."); + +const u8 gMatchCallFlavorText_SchoolKid_Jerry_Strategy[] = _("My knowledge rules!"); +const u8 gMatchCallFlavorText_SchoolKid_Jerry_Pokemon[] = _("Any smart POKéMON!"); +const u8 gMatchCallFlavorText_SchoolKid_Jerry_Intro1[] = _("I want to be a POKéMON"); +const u8 gMatchCallFlavorText_SchoolKid_Jerry_Intro2[] = _("researcher in the future."); + +const u8 gMatchCallFlavorText_SrAndJr_AnnaAndMeg_Strategy[] = _("We talk it over first."); +const u8 gMatchCallFlavorText_SrAndJr_AnnaAndMeg_Pokemon[] = _("POKéMON that we both like."); +const u8 gMatchCallFlavorText_SrAndJr_AnnaAndMeg_Intro1[] = _("We're senior and junior"); +const u8 gMatchCallFlavorText_SrAndJr_AnnaAndMeg_Intro2[] = _("students into POKéMON!"); + +const u8 gMatchCallFlavorText_Pokefan_Isabel_Strategy[] = _("Go for it, my dears!"); +const u8 gMatchCallFlavorText_Pokefan_Isabel_Pokemon[] = _("I have no likes or dislikes."); +const u8 gMatchCallFlavorText_Pokefan_Isabel_Intro1[] = _("While out shopping for"); +const u8 gMatchCallFlavorText_Pokefan_Isabel_Intro2[] = _("supper, I battle too."); + +const u8 gMatchCallFlavorText_Pokefan_Miguel_Strategy[] = _("I battle with love!"); +const u8 gMatchCallFlavorText_Pokefan_Miguel_Pokemon[] = _("A POKéMON raised with love!"); +const u8 gMatchCallFlavorText_Pokefan_Miguel_Intro1[] = _("It's important to build"); +const u8 gMatchCallFlavorText_Pokefan_Miguel_Intro2[] = _("trust with your POKéMON."); + +const u8 gMatchCallFlavorText_Expert_Timothy_Strategy[] = _("I see through your moves!"); +const u8 gMatchCallFlavorText_Expert_Timothy_Pokemon[] = _("The essence of FIGHTING."); +const u8 gMatchCallFlavorText_Expert_Timothy_Intro1[] = _("I'm not ready to give way"); +const u8 gMatchCallFlavorText_Expert_Timothy_Intro2[] = _("to the young yet!"); + +const u8 gMatchCallFlavorText_Expert_Shelby_Strategy[] = _("Attack while defending."); +const u8 gMatchCallFlavorText_Expert_Shelby_Pokemon[] = _("The FIGHTING type."); +const u8 gMatchCallFlavorText_Expert_Shelby_Intro1[] = _("Being old, I have my own"); +const u8 gMatchCallFlavorText_Expert_Shelby_Intro2[] = _("style of battling."); + +const u8 gMatchCallFlavorText_Youngster_Calvin_Strategy[] = _("I do what I can."); +const u8 gMatchCallFlavorText_Youngster_Calvin_Pokemon[] = _("I use different types."); +const u8 gMatchCallFlavorText_Youngster_Calvin_Intro1[] = _("I'm going to keep working"); +const u8 gMatchCallFlavorText_Youngster_Calvin_Intro2[] = _("until I beat a GYM LEADER."); + +const u8 gMatchCallFlavorText_Fisherman_Elliot_Strategy[] = _("I battle patiently."); +const u8 gMatchCallFlavorText_Fisherman_Elliot_Pokemon[] = _("WATER POKéMON to battle!"); +const u8 gMatchCallFlavorText_Fisherman_Elliot_Intro1[] = _("I'm the world's only guy to"); +const u8 gMatchCallFlavorText_Fisherman_Elliot_Intro2[] = _("catch a huge POKéMON!"); + +const u8 gMatchCallFlavorText_Triathlete_Isaiah_Strategy[] = _("Exploit the environment!"); +const u8 gMatchCallFlavorText_Triathlete_Isaiah_Pokemon[] = _("All hail the WATER type!"); +const u8 gMatchCallFlavorText_Triathlete_Isaiah_Intro1[] = _("I won't be beaten by some"); +const u8 gMatchCallFlavorText_Triathlete_Isaiah_Intro2[] = _("beach bum SWIMMER!"); + +const u8 gMatchCallFlavorText_Triathlete_Maria_Strategy[] = _("Speed above all!"); +const u8 gMatchCallFlavorText_Triathlete_Maria_Pokemon[] = _("I use a speedy POKéMON."); +const u8 gMatchCallFlavorText_Triathlete_Maria_Intro1[] = _("A marathon is a challenge"); +const u8 gMatchCallFlavorText_Triathlete_Maria_Intro2[] = _("against your own self."); + +const u8 gMatchCallFlavorText_Triathlete_Abigail_Strategy[] = _("Defense is crucial."); +const u8 gMatchCallFlavorText_Triathlete_Abigail_Pokemon[] = _("My POKéMON is solid."); +const u8 gMatchCallFlavorText_Triathlete_Abigail_Intro1[] = _("I started this for dieting,"); +const u8 gMatchCallFlavorText_Triathlete_Abigail_Intro2[] = _("but I got right into it."); + +const u8 gMatchCallFlavorText_Triathlete_Dylan_Strategy[] = _("Strike before stricken!"); +const u8 gMatchCallFlavorText_Triathlete_Dylan_Pokemon[] = _("A fast-running POKéMON!"); +const u8 gMatchCallFlavorText_Triathlete_Dylan_Intro1[] = _("If you ran and ran, you'd"); +const u8 gMatchCallFlavorText_Triathlete_Dylan_Intro2[] = _("become one with the wind."); + +const u8 gMatchCallFlavorText_Triathlete_Katelyn_Strategy[] = _("All-out offensive!"); +const u8 gMatchCallFlavorText_Triathlete_Katelyn_Pokemon[] = _("WATER POKéMON rule!"); +const u8 gMatchCallFlavorText_Triathlete_Katelyn_Intro1[] = _("I must swim over 6 miles"); +const u8 gMatchCallFlavorText_Triathlete_Katelyn_Intro2[] = _("every day."); + +const u8 gMatchCallFlavorText_Triathlete_Benjamin_Strategy[] = _("Push and push again!"); +const u8 gMatchCallFlavorText_Triathlete_Benjamin_Pokemon[] = _("The strength of STEEL."); +const u8 gMatchCallFlavorText_Triathlete_Benjamin_Intro1[] = _("If you're sweating, get"); +const u8 gMatchCallFlavorText_Triathlete_Benjamin_Intro2[] = _("fluids into you regularly."); + +const u8 gMatchCallFlavorText_Triathlete_Pablo_Strategy[] = _("Draw the power of WATER."); +const u8 gMatchCallFlavorText_Triathlete_Pablo_Pokemon[] = _("Toughened WATER POKéMON."); +const u8 gMatchCallFlavorText_Triathlete_Pablo_Intro1[] = _("Training POKéMON is good,"); +const u8 gMatchCallFlavorText_Triathlete_Pablo_Intro2[] = _("but don't neglect yourself."); + +const u8 gMatchCallFlavorText_DragonTamer_Nicolas_Strategy[] = _("It's about POKéMON power!"); +const u8 gMatchCallFlavorText_DragonTamer_Nicolas_Pokemon[] = _("See the power of DRAGONS!"); +const u8 gMatchCallFlavorText_DragonTamer_Nicolas_Intro1[] = _("I'll become legendary as the"); +const u8 gMatchCallFlavorText_DragonTamer_Nicolas_Intro2[] = _("strongest one day!"); + +const u8 gMatchCallFlavorText_BirdKeeper_Robert_Strategy[] = _("I'll show you my technique!"); +const u8 gMatchCallFlavorText_BirdKeeper_Robert_Pokemon[] = _("Elegantly wheeling BIRDS."); +const u8 gMatchCallFlavorText_BirdKeeper_Robert_Intro1[] = _("My BIRD POKéMON, deliver my"); +const u8 gMatchCallFlavorText_BirdKeeper_Robert_Intro2[] = _("love to that girl!"); + +const u8 gMatchCallFlavorText_NinjaBoy_Lao_Strategy[] = _("You'll suffer from poison!"); +const u8 gMatchCallFlavorText_NinjaBoy_Lao_Pokemon[] = _("Poisonous POKéMON."); +const u8 gMatchCallFlavorText_NinjaBoy_Lao_Intro1[] = _("I undertake training so"); +const u8 gMatchCallFlavorText_NinjaBoy_Lao_Intro2[] = _("that I may become a ninja."); + +const u8 gMatchCallFlavorText_BattleGirl_Cyndy_Strategy[] = _("The first strike wins!"); +const u8 gMatchCallFlavorText_BattleGirl_Cyndy_Pokemon[] = _("Speedy FIGHTING type."); +const u8 gMatchCallFlavorText_BattleGirl_Cyndy_Intro1[] = _("If my POKéMON lose,"); +const u8 gMatchCallFlavorText_BattleGirl_Cyndy_Intro2[] = _("I'll carry on the fight!"); + +const u8 gMatchCallFlavorText_ParasolLady_Madeline_Strategy[] = _("Go, go, my POKéMON!"); +const u8 gMatchCallFlavorText_ParasolLady_Madeline_Pokemon[] = _("I'll raise anything."); +const u8 gMatchCallFlavorText_ParasolLady_Madeline_Intro1[] = _("UV rays are your skin's"); +const u8 gMatchCallFlavorText_ParasolLady_Madeline_Intro2[] = _("enemy. Get protected."); + +const u8 gMatchCallFlavorText_Swimmer_Jenny_Strategy[] = _("No mercy!"); +const u8 gMatchCallFlavorText_Swimmer_Jenny_Pokemon[] = _("Cute WATER POKéMON."); +const u8 gMatchCallFlavorText_Swimmer_Jenny_Intro1[] = _("I have too many fans."); +const u8 gMatchCallFlavorText_Swimmer_Jenny_Intro2[] = _("I was interviewed on TV."); + +const u8 gMatchCallFlavorText_Picnicker_Diana_Strategy[] = _("I think about this & that."); +const u8 gMatchCallFlavorText_Picnicker_Diana_Pokemon[] = _("I like all POKéMON."); +const u8 gMatchCallFlavorText_Picnicker_Diana_Intro1[] = _("What lies beyond that"); +const u8 gMatchCallFlavorText_Picnicker_Diana_Intro2[] = _("yonder hill?"); + +const u8 gMatchCallFlavorText_Twins_AmyAndLiv_Strategy[] = _("We battle together!"); +const u8 gMatchCallFlavorText_Twins_AmyAndLiv_Pokemon[] = _("We train together!"); +const u8 gMatchCallFlavorText_Twins_AmyAndLiv_Intro1[] = _("We like the same POKéMON,"); +const u8 gMatchCallFlavorText_Twins_AmyAndLiv_Intro2[] = _("but different desserts."); + +const u8 gMatchCallFlavorText_Sailor_Ernest_Strategy[] = _("I force things with power!"); +const u8 gMatchCallFlavorText_Sailor_Ernest_Pokemon[] = _("WATER and FIGHTING types."); +const u8 gMatchCallFlavorText_Sailor_Ernest_Intro1[] = _("Seamen are rough spirits!"); +const u8 gMatchCallFlavorText_Sailor_Ernest_Intro2[] = _("Any complaints?"); + +const u8 gMatchCallFlavorText_Sailor_Cory_Strategy[] = _("Up for a fight anytime!"); +const u8 gMatchCallFlavorText_Sailor_Cory_Pokemon[] = _("WATER POKéMON are my faves!"); +const u8 gMatchCallFlavorText_Sailor_Cory_Intro1[] = _("If you want to shout loud,"); +const u8 gMatchCallFlavorText_Sailor_Cory_Intro2[] = _("suck in air with your belly!"); + +const u8 gMatchCallFlavorText_Collector_Edwin_Strategy[] = _("Protect POKéMON from harm."); +const u8 gMatchCallFlavorText_Collector_Edwin_Pokemon[] = _("I love rare POKéMON."); +const u8 gMatchCallFlavorText_Collector_Edwin_Intro1[] = _("I want to collect all the"); +const u8 gMatchCallFlavorText_Collector_Edwin_Intro2[] = _("world's rare POKéMON."); + +const u8 gMatchCallFlavorText_PkmnBreeder_Lydia_Strategy[] = _("I count on power."); +const u8 gMatchCallFlavorText_PkmnBreeder_Lydia_Pokemon[] = _("POKéMON are my children."); +const u8 gMatchCallFlavorText_PkmnBreeder_Lydia_Intro1[] = _("It takes knowledge and"); +const u8 gMatchCallFlavorText_PkmnBreeder_Lydia_Intro2[] = _("love to raise POKéMON."); + +const u8 gMatchCallFlavorText_PkmnBreeder_Isaac_Strategy[] = _("Full-on attack!"); +const u8 gMatchCallFlavorText_PkmnBreeder_Isaac_Pokemon[] = _("Anything. I'll raise it."); +const u8 gMatchCallFlavorText_PkmnBreeder_Isaac_Intro1[] = _("I give them {POKEBLOCK}S for"); +const u8 gMatchCallFlavorText_PkmnBreeder_Isaac_Intro2[] = _("going after CONTEST titles."); + +const u8 gMatchCallFlavorText_PkmnBreeder_Gabrielle_Strategy[] = _("I raise POKéMON with care."); +const u8 gMatchCallFlavorText_PkmnBreeder_Gabrielle_Pokemon[] = _("Fun-to-raise POKéMON."); +const u8 gMatchCallFlavorText_PkmnBreeder_Gabrielle_Intro1[] = _("Treat every POKéMON you"); +const u8 gMatchCallFlavorText_PkmnBreeder_Gabrielle_Intro2[] = _("meet with respect."); + +const u8 gMatchCallFlavorText_PkmnRanger_Catherine_Strategy[] = _("I believe in my POKéMON."); +const u8 gMatchCallFlavorText_PkmnRanger_Catherine_Pokemon[] = _("I like strong POKéMON."); +const u8 gMatchCallFlavorText_PkmnRanger_Catherine_Intro1[] = _("I'm training for rescue"); +const u8 gMatchCallFlavorText_PkmnRanger_Catherine_Intro2[] = _("work with my POKéMON."); + +const u8 gMatchCallFlavorText_PkmnRanger_Jackson_Strategy[] = _("Attack in waves!"); +const u8 gMatchCallFlavorText_PkmnRanger_Jackson_Pokemon[] = _("I use different types."); +const u8 gMatchCallFlavorText_PkmnRanger_Jackson_Intro1[] = _("Those who destroy nature"); +const u8 gMatchCallFlavorText_PkmnRanger_Jackson_Intro2[] = _("must never be forgiven!"); + +const u8 gMatchCallFlavorText_Lass_Haley_Strategy[] = _("I'll show you some guts!"); +const u8 gMatchCallFlavorText_Lass_Haley_Pokemon[] = _("Cute POKéMON are my faves!"); +const u8 gMatchCallFlavorText_Lass_Haley_Intro1[] = _("After a battle, I always"); +const u8 gMatchCallFlavorText_Lass_Haley_Intro2[] = _("bathe with my POKéMON."); + +const u8 gMatchCallFlavorText_BugCatcher_James_Strategy[] = _("Lightning-fast attack!"); +const u8 gMatchCallFlavorText_BugCatcher_James_Pokemon[] = _("BUG POKéMON are number 1!"); +const u8 gMatchCallFlavorText_BugCatcher_James_Intro1[] = _("If you want to catch BUG"); +const u8 gMatchCallFlavorText_BugCatcher_James_Intro2[] = _("POKéMON, wake up early."); + +const u8 gMatchCallFlavorText_Hiker_Trent_Strategy[] = _("I battle with power."); +const u8 gMatchCallFlavorText_Hiker_Trent_Pokemon[] = _("Hard-bodied POKéMON."); +const u8 gMatchCallFlavorText_Hiker_Trent_Intro1[] = _("I've been planning a month"); +const u8 gMatchCallFlavorText_Hiker_Trent_Intro2[] = _("for today's hike."); + +const u8 gMatchCallFlavorText_Hiker_Sawyer_Strategy[] = _("I like it hot!"); +const u8 gMatchCallFlavorText_Hiker_Sawyer_Pokemon[] = _("Hot POKéMON!"); +const u8 gMatchCallFlavorText_Hiker_Sawyer_Intro1[] = _("As much as I love POKéMON,"); +const u8 gMatchCallFlavorText_Hiker_Sawyer_Intro2[] = _("I surely like hiking!"); + +const u8 gMatchCallFlavorText_YoungCouple_LoisAndHal_Strategy[] = _("Lovey-dovey strategy!"); +const u8 gMatchCallFlavorText_YoungCouple_LoisAndHal_Pokemon[] = _("Lovey-dovey POKéMON!"); +const u8 gMatchCallFlavorText_YoungCouple_LoisAndHal_Intro1[] = _("We're lovey-dovey!"); +const u8 gMatchCallFlavorText_YoungCouple_LoisAndHal_Intro2[] = _("Forever lovey-dovey!"); + +const u8 gMatchCallFlavorText_PkmnTrainer_Wally_Strategy[] = _("We let it all hang out."); +const u8 gMatchCallFlavorText_PkmnTrainer_Wally_Pokemon[] = _("The 1st POKéMON I caught."); +const u8 gMatchCallFlavorText_PkmnTrainer_Wally_Intro1[] = _("POKéMON and I have grown"); +const u8 gMatchCallFlavorText_PkmnTrainer_Wally_Intro2[] = _("stronger together."); + +const u8 gMatchCallFlavorText_RockinWhiz_Roxanne_Strategy[] = _("ROCK-type power attack."); +const u8 gMatchCallFlavorText_RockinWhiz_Roxanne_Pokemon[] = _("I prefer rock-hard POKéMON."); +const u8 gMatchCallFlavorText_RockinWhiz_Roxanne_Intro1[] = _("A LEADER of a big GYM bears"); +const u8 gMatchCallFlavorText_RockinWhiz_Roxanne_Intro2[] = _("a lot of responsibility."); + +const u8 gMatchCallFlavorText_TheBigHit_Brawly_Strategy[] = _("Direct physical action!"); +const u8 gMatchCallFlavorText_TheBigHit_Brawly_Pokemon[] = _("FIGHTING POKéMON rule!"); +const u8 gMatchCallFlavorText_TheBigHit_Brawly_Intro1[] = _("The world awaits me as the"); +const u8 gMatchCallFlavorText_TheBigHit_Brawly_Intro2[] = _("next big wave!"); + +const u8 gMatchCallFlavorText_SwellShock_Wattson_Strategy[] = _("I choose to electrify."); +const u8 gMatchCallFlavorText_SwellShock_Wattson_Pokemon[] = _("Get shocked by electricity!"); +const u8 gMatchCallFlavorText_SwellShock_Wattson_Intro1[] = _("One must never throw a"); +const u8 gMatchCallFlavorText_SwellShock_Wattson_Intro2[] = _("match. Even I must not."); + +const u8 gMatchCallFlavorText_PassionBurn_Flannery_Strategy[] = _("Battle aggressively."); +const u8 gMatchCallFlavorText_PassionBurn_Flannery_Pokemon[] = _("Burn with passion!"); +const u8 gMatchCallFlavorText_PassionBurn_Flannery_Intro1[] = _("Completely wash away daily"); +const u8 gMatchCallFlavorText_PassionBurn_Flannery_Intro2[] = _("fatigue in hot springs!"); + +const u8 gMatchCallFlavorText_ReliableOne_Dad_Strategy[] = _("I flexibly adapt my style."); +const u8 gMatchCallFlavorText_ReliableOne_Dad_Pokemon[] = _("Grown in a balanced manner."); +const u8 gMatchCallFlavorText_ReliableOne_Dad_Intro1[] = _("I walk the 30 minutes from"); +const u8 gMatchCallFlavorText_ReliableOne_Dad_Intro2[] = _("home to here every day."); + +const u8 gMatchCallFlavorText_SkyTamer_Winona_Strategy[] = _("I take advantage of speed."); +const u8 gMatchCallFlavorText_SkyTamer_Winona_Pokemon[] = _("Graceful sky dancers."); +const u8 gMatchCallFlavorText_SkyTamer_Winona_Intro1[] = _("The ultimate would be to"); +const u8 gMatchCallFlavorText_SkyTamer_Winona_Intro2[] = _("live as one with nature."); + +const u8 gMatchCallFlavorText_MysticDuo_TateAndLiza_Strategy[] = _("We battle in cooperation."); +const u8 gMatchCallFlavorText_MysticDuo_TateAndLiza_Pokemon[] = _("Always friendly POKéMON."); +const u8 gMatchCallFlavorText_MysticDuo_TateAndLiza_Intro1[] = _("Papa has trouble telling"); +const u8 gMatchCallFlavorText_MysticDuo_TateAndLiza_Intro2[] = _("the two of us apart!"); + +const u8 gMatchCallFlavorText_DandyCharm_Juan_Strategy[] = _("I use splendid waterpower."); +const u8 gMatchCallFlavorText_DandyCharm_Juan_Pokemon[] = _("POKéMON of elegance!"); +const u8 gMatchCallFlavorText_DandyCharm_Juan_Intro1[] = _("The adulation of beautiful"); +const u8 gMatchCallFlavorText_DandyCharm_Juan_Intro2[] = _("ladies fills me with energy!"); + +const u8 gMatchCallFlavorText_EliteFour_Sidney_Strategy[] = _("Offense over defense!"); +const u8 gMatchCallFlavorText_EliteFour_Sidney_Pokemon[] = _("The DARK side's beauties."); +const u8 gMatchCallFlavorText_EliteFour_Sidney_Intro1[] = _("They said I was a punk, but"); +const u8 gMatchCallFlavorText_EliteFour_Sidney_Intro2[] = _("I'm one of the ELITE FOUR!"); + +const u8 gMatchCallFlavorText_EliteFour_Phoebe_Strategy[] = _("Confuse and confound."); +const u8 gMatchCallFlavorText_EliteFour_Phoebe_Pokemon[] = _("There's nothing definite."); +const u8 gMatchCallFlavorText_EliteFour_Phoebe_Intro1[] = _("I wonder how my grandma at"); +const u8 gMatchCallFlavorText_EliteFour_Phoebe_Intro2[] = _("MT. PYRE is doing?"); + +const u8 gMatchCallFlavorText_EliteFour_Glacia_Strategy[] = _("I use items for help."); +const u8 gMatchCallFlavorText_EliteFour_Glacia_Pokemon[] = _("Flaming passion in icy cold!"); +const u8 gMatchCallFlavorText_EliteFour_Glacia_Intro1[] = _("The ICE type can be better"); +const u8 gMatchCallFlavorText_EliteFour_Glacia_Intro2[] = _("trained in this hot land."); + +const u8 gMatchCallFlavorText_EliteFour_Drake_Strategy[] = _("Harness strong abilities."); +const u8 gMatchCallFlavorText_EliteFour_Drake_Pokemon[] = _("The raw power of DRAGONS!"); +const u8 gMatchCallFlavorText_EliteFour_Drake_Intro1[] = _("I dedicate myself to the"); +const u8 gMatchCallFlavorText_EliteFour_Drake_Intro2[] = _("POKéMON that saved me."); + +const u8 gMatchCallFlavorText_Champion_Wallace_Strategy[] = _("Dignity and respect."); +const u8 gMatchCallFlavorText_Champion_Wallace_Pokemon[] = _("I prefer POKéMON of grace."); +const u8 gMatchCallFlavorText_Champion_Wallace_Intro1[] = _("I represent beauty as"); +const u8 gMatchCallFlavorText_Champion_Wallace_Intro2[] = _("well as intelligence."); + +const u8 *const gMatchCallMessages[][4] = +{ + [REMATCH_ROSE] = MCFLAVOR(AromaLady_Rose), + [REMATCH_ANDRES] = MCFLAVOR(RuinManiac_Andres), + [REMATCH_DUSTY] = MCFLAVOR(RuinManiac_Dusty), + [REMATCH_LOLA] = MCFLAVOR(Tuber_Lola), + [REMATCH_RICKY] = MCFLAVOR(Tuber_Ricky), + [REMATCH_LILA_AND_ROY] = MCFLAVOR(SisAndBro_LilaAndRoy), + [REMATCH_CRISTIN] = MCFLAVOR(Cooltrainer_Cristin), + [REMATCH_BROOKE] = MCFLAVOR(Cooltrainer_Brooke), + [REMATCH_WILTON] = MCFLAVOR(Cooltrainer_Wilton), + [REMATCH_VALERIE] = MCFLAVOR(HexManiac_Valerie), + [REMATCH_CINDY] = MCFLAVOR(Lady_Cindy), + [REMATCH_THALIA] = MCFLAVOR(Beauty_Thalia), + [REMATCH_JESSICA] = MCFLAVOR(Beauty_Jessica), + [REMATCH_WINSTON] = MCFLAVOR(RichBoy_Winston), + [REMATCH_STEVE] = MCFLAVOR(PokeManiac_Steve), + [REMATCH_TONY] = MCFLAVOR(Swimmer_Tony), + [REMATCH_NOB] = MCFLAVOR(BlackBelt_Nob), + [REMATCH_KOJI] = MCFLAVOR(BlackBelt_Koji), + [REMATCH_FERNANDO] = MCFLAVOR(Guitarist_Fernando), + [REMATCH_DALTON] = MCFLAVOR(Guitarist_Dalton), + [REMATCH_BERNIE] = MCFLAVOR(Kindler_Bernie), + [REMATCH_ETHAN] = MCFLAVOR(Camper_Ethan), + [REMATCH_JOHN_AND_JAY] = MCFLAVOR(OldCouple_JohnAndJay), + [REMATCH_JEFFREY] = MCFLAVOR(BugManiac_Jeffrey), + [REMATCH_CAMERON] = MCFLAVOR(Psychic_Cameron), + [REMATCH_JACKI] = MCFLAVOR(Psychic_Jacki), + [REMATCH_WALTER] = MCFLAVOR(Gentleman_Walter), + [REMATCH_KAREN] = MCFLAVOR(SchoolKid_Karen), + [REMATCH_JERRY] = MCFLAVOR(SchoolKid_Jerry), + [REMATCH_ANNA_AND_MEG] = MCFLAVOR(SrAndJr_AnnaAndMeg), + [REMATCH_ISABEL] = MCFLAVOR(Pokefan_Isabel), + [REMATCH_MIGUEL] = MCFLAVOR(Pokefan_Miguel), + [REMATCH_TIMOTHY] = MCFLAVOR(Expert_Timothy), + [REMATCH_SHELBY] = MCFLAVOR(Expert_Shelby), + [REMATCH_CALVIN] = MCFLAVOR(Youngster_Calvin), + [REMATCH_ELLIOT] = MCFLAVOR(Fisherman_Elliot), + [REMATCH_ISAIAH] = MCFLAVOR(Triathlete_Isaiah), + [REMATCH_MARIA] = MCFLAVOR(Triathlete_Maria), + [REMATCH_ABIGAIL] = MCFLAVOR(Triathlete_Abigail), + [REMATCH_DYLAN] = MCFLAVOR(Triathlete_Dylan), + [REMATCH_KATELYN] = MCFLAVOR(Triathlete_Katelyn), + [REMATCH_BENJAMIN] = MCFLAVOR(Triathlete_Benjamin), + [REMATCH_PABLO] = MCFLAVOR(Triathlete_Pablo), + [REMATCH_NICOLAS] = MCFLAVOR(DragonTamer_Nicolas), + [REMATCH_ROBERT] = MCFLAVOR(BirdKeeper_Robert), + [REMATCH_LAO] = MCFLAVOR(NinjaBoy_Lao), + [REMATCH_CYNDY] = MCFLAVOR(BattleGirl_Cyndy), + [REMATCH_MADELINE] = MCFLAVOR(ParasolLady_Madeline), + [REMATCH_JENNY] = MCFLAVOR(Swimmer_Jenny), + [REMATCH_DIANA] = MCFLAVOR(Picnicker_Diana), + [REMATCH_AMY_AND_LIV] = MCFLAVOR(Twins_AmyAndLiv), + [REMATCH_ERNEST] = MCFLAVOR(Sailor_Ernest), + [REMATCH_CORY] = MCFLAVOR(Sailor_Cory), + [REMATCH_EDWIN] = MCFLAVOR(Collector_Edwin), + [REMATCH_LYDIA] = MCFLAVOR(PkmnBreeder_Lydia), + [REMATCH_ISAAC] = MCFLAVOR(PkmnBreeder_Isaac), + [REMATCH_GABRIELLE] = MCFLAVOR(PkmnBreeder_Gabrielle), + [REMATCH_CATHERINE] = MCFLAVOR(PkmnRanger_Catherine), + [REMATCH_JACKSON] = MCFLAVOR(PkmnRanger_Jackson), + [REMATCH_HALEY] = MCFLAVOR(Lass_Haley), + [REMATCH_JAMES] = MCFLAVOR(BugCatcher_James), + [REMATCH_TRENT] = MCFLAVOR(Hiker_Trent), + [REMATCH_SAWYER] = MCFLAVOR(Hiker_Sawyer), + [REMATCH_KIRA_AND_DAN] = MCFLAVOR(YoungCouple_LoisAndHal), + [REMATCH_WALLY_3] = MCFLAVOR(PkmnTrainer_Wally), + [REMATCH_ROXANNE] = MCFLAVOR(RockinWhiz_Roxanne), + [REMATCH_BRAWLY] = MCFLAVOR(TheBigHit_Brawly), + [REMATCH_WATTSON] = MCFLAVOR(SwellShock_Wattson), + [REMATCH_FLANNERY] = MCFLAVOR(PassionBurn_Flannery), + [REMATCH_NORMAN] = MCFLAVOR(ReliableOne_Dad), + [REMATCH_WINONA] = MCFLAVOR(SkyTamer_Winona), + [REMATCH_TATE_AND_LIZA] = MCFLAVOR(MysticDuo_TateAndLiza), + [REMATCH_JUAN] = MCFLAVOR(DandyCharm_Juan), + [REMATCH_SIDNEY] = MCFLAVOR(EliteFour_Sidney), + [REMATCH_PHOEBE] = MCFLAVOR(EliteFour_Phoebe), + [REMATCH_GLACIA] = MCFLAVOR(EliteFour_Glacia), + [REMATCH_DRAKE] = MCFLAVOR(EliteFour_Drake), + [REMATCH_WALLACE] = MCFLAVOR(Champion_Wallace), +}; diff --git a/src/data/text/ribbon_descriptions.h b/src/data/text/ribbon_descriptions.h new file mode 100644 index 000000000..f455a7771 --- /dev/null +++ b/src/data/text/ribbon_descriptions.h @@ -0,0 +1,48 @@ +const u8 gRibbonDescriptionPart1_Champion[] = _("CHAMPION-beating, HALL"); +const u8 gRibbonDescriptionPart2_Champion[] = _("OF FAME Member RIBBON"); +const u8 gRibbonDescriptionPart1_CoolContest[] = _("COOL CONTEST"); +const u8 gRibbonDescriptionPart1_BeautyContest[] = _("BEAUTY CONTEST"); +const u8 gRibbonDescriptionPart1_CuteContest[] = _("CUTE CONTEST"); +const u8 gRibbonDescriptionPart1_SmartContest[] = _("SMART CONTEST"); +const u8 gRibbonDescriptionPart1_ToughContest[] = _("TOUGH CONTEST"); +const u8 gRibbonDescriptionPart2_NormalRank[] = _("Normal Rank winner!"); +const u8 gRibbonDescriptionPart2_SuperRank[] = _("Super Rank winner!"); +const u8 gRibbonDescriptionPart2_HyperRank[] = _("Hyper Rank winner!"); +const u8 gRibbonDescriptionPart2_MasterRank[] = _("Master Rank winner!"); +const u8 gRibbonDescriptionPart1_Winning[] = _("For clearing LV50"); +const u8 gRibbonDescriptionPart2_Winning[] = _("at the BATTLE TOWER."); +const u8 gRibbonDescriptionPart1_Victory[] = _("For clearing Open Level"); +const u8 gRibbonDescriptionPart2_Victory[] = _("at the BATTLE TOWER."); +const u8 gRibbonDescriptionPart1_Artist[] = _("RIBBON for being chosen"); +const u8 gRibbonDescriptionPart2_Artist[] = _("as a super sketch model."); +const u8 gRibbonDescriptionPart1_Effort[] = _("RIBBON awarded for"); +const u8 gRibbonDescriptionPart2_Effort[] = _("being a hard worker."); + +const u8 *const gRibbonDescriptionPointers[][2] = +{ + {gRibbonDescriptionPart1_Champion, gRibbonDescriptionPart2_Champion}, + {gRibbonDescriptionPart1_CoolContest, gRibbonDescriptionPart2_NormalRank}, + {gRibbonDescriptionPart1_CoolContest, gRibbonDescriptionPart2_SuperRank}, + {gRibbonDescriptionPart1_CoolContest, gRibbonDescriptionPart2_HyperRank}, + {gRibbonDescriptionPart1_CoolContest, gRibbonDescriptionPart2_MasterRank}, + {gRibbonDescriptionPart1_BeautyContest, gRibbonDescriptionPart2_NormalRank}, + {gRibbonDescriptionPart1_BeautyContest, gRibbonDescriptionPart2_SuperRank}, + {gRibbonDescriptionPart1_BeautyContest, gRibbonDescriptionPart2_HyperRank}, + {gRibbonDescriptionPart1_BeautyContest, gRibbonDescriptionPart2_MasterRank}, + {gRibbonDescriptionPart1_CuteContest, gRibbonDescriptionPart2_NormalRank}, + {gRibbonDescriptionPart1_CuteContest, gRibbonDescriptionPart2_SuperRank}, + {gRibbonDescriptionPart1_CuteContest, gRibbonDescriptionPart2_HyperRank}, + {gRibbonDescriptionPart1_CuteContest, gRibbonDescriptionPart2_MasterRank}, + {gRibbonDescriptionPart1_SmartContest, gRibbonDescriptionPart2_NormalRank}, + {gRibbonDescriptionPart1_SmartContest, gRibbonDescriptionPart2_SuperRank}, + {gRibbonDescriptionPart1_SmartContest, gRibbonDescriptionPart2_HyperRank}, + {gRibbonDescriptionPart1_SmartContest, gRibbonDescriptionPart2_MasterRank}, + {gRibbonDescriptionPart1_ToughContest, gRibbonDescriptionPart2_NormalRank}, + {gRibbonDescriptionPart1_ToughContest, gRibbonDescriptionPart2_SuperRank}, + {gRibbonDescriptionPart1_ToughContest, gRibbonDescriptionPart2_HyperRank}, + {gRibbonDescriptionPart1_ToughContest, gRibbonDescriptionPart2_MasterRank}, + {gRibbonDescriptionPart1_Winning, gRibbonDescriptionPart2_Winning}, + {gRibbonDescriptionPart1_Victory, gRibbonDescriptionPart2_Victory}, + {gRibbonDescriptionPart1_Artist, gRibbonDescriptionPart2_Artist}, + {gRibbonDescriptionPart1_Effort, gRibbonDescriptionPart2_Effort}, +}; diff --git a/src/data/text/trainer_class_names.h b/src/data/text/trainer_class_names.h index dd750b354..f012e877b 100644 --- a/src/data/text/trainer_class_names.h +++ b/src/data/text/trainer_class_names.h @@ -47,7 +47,7 @@ const u8 gTrainerClassNames[][13] = { [TRAINER_CLASS_SWIMMER_F] = _("SWIMMER♀"), [TRAINER_CLASS_TWINS] = _("TWINS"), [TRAINER_CLASS_SAILOR] = _("SAILOR"), - [TRAINER_CLASS_COOLTRAINER_UNUSED] = _("COOLTRAINER"), + [TRAINER_CLASS_COOLTRAINER_2] = _("COOLTRAINER"), [TRAINER_CLASS_MAGMA_ADMIN] = _("MAGMA ADMIN"), [TRAINER_CLASS_PKMN_TRAINER_3] = _("{PKMN} TRAINER"), [TRAINER_CLASS_BUG_CATCHER] = _("BUG CATCHER"), @@ -64,5 +64,5 @@ const u8 gTrainerClassNames[][13] = { [TRAINER_CLASS_FACTORY_HEAD] = _("FACTORY HEAD"), [TRAINER_CLASS_PIKE_QUEEN] = _("PIKE QUEEN"), [TRAINER_CLASS_PYRAMID_KING] = _("PYRAMID KING"), - [TRAINER_CLASS_PKMN_TRAINER_4] = _("{PKMN} TRAINER"), + [TRAINER_CLASS_RS_PROTAG] = _("{PKMN} TRAINER"), }; diff --git a/src/data/trainers.h b/src/data/trainers.h index 5a92926cc..c30d21afd 100644 --- a/src/data/trainers.h +++ b/src/data/trainers.h @@ -10,7 +10,7 @@ const struct Trainer gTrainers[] = { .doubleBattle = FALSE, .aiFlags = 0, .partySize = 0, - .party = {.NoItemDefaultMoves = NULL } + .party = {.NoItemDefaultMoves = NULL}, }, [TRAINER_SAWYER_1] = @@ -23,8 +23,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Sawyer1 } + .partySize = ARRAY_COUNT(sParty_Sawyer1), + .party = {.NoItemDefaultMoves = sParty_Sawyer1}, }, [TRAINER_GRUNT_1] = @@ -37,8 +37,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt1 } + .partySize = ARRAY_COUNT(sParty_Grunt1), + .party = {.NoItemDefaultMoves = sParty_Grunt1}, }, [TRAINER_GRUNT_2] = @@ -51,8 +51,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Grunt2 } + .partySize = ARRAY_COUNT(sParty_Grunt2), + .party = {.NoItemDefaultMoves = sParty_Grunt2}, }, [TRAINER_GRUNT_3] = @@ -65,8 +65,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt3 } + .partySize = ARRAY_COUNT(sParty_Grunt3), + .party = {.NoItemDefaultMoves = sParty_Grunt3}, }, [TRAINER_GRUNT_4] = @@ -79,8 +79,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt4 } + .partySize = ARRAY_COUNT(sParty_Grunt4), + .party = {.NoItemDefaultMoves = sParty_Grunt4}, }, [TRAINER_GRUNT_5] = @@ -93,8 +93,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt5 } + .partySize = ARRAY_COUNT(sParty_Grunt5), + .party = {.NoItemDefaultMoves = sParty_Grunt5}, }, [TRAINER_GRUNT_6] = @@ -107,8 +107,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt6 } + .partySize = ARRAY_COUNT(sParty_Grunt6), + .party = {.NoItemDefaultMoves = sParty_Grunt6}, }, [TRAINER_GRUNT_7] = @@ -121,8 +121,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt7 } + .partySize = ARRAY_COUNT(sParty_Grunt7), + .party = {.NoItemDefaultMoves = sParty_Grunt7}, }, [TRAINER_GABRIELLE_1] = @@ -135,8 +135,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Gabrielle1 } + .partySize = ARRAY_COUNT(sParty_Gabrielle1), + .party = {.NoItemDefaultMoves = sParty_Gabrielle1}, }, [TRAINER_GRUNT_8] = @@ -149,8 +149,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt8 } + .partySize = ARRAY_COUNT(sParty_Grunt8), + .party = {.NoItemDefaultMoves = sParty_Grunt8}, }, [TRAINER_MARCEL] = @@ -163,8 +163,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Marcel } + .partySize = ARRAY_COUNT(sParty_Marcel), + .party = {.NoItemDefaultMoves = sParty_Marcel}, }, [TRAINER_ALBERTO] = @@ -177,8 +177,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Alberto } + .partySize = ARRAY_COUNT(sParty_Alberto), + .party = {.NoItemDefaultMoves = sParty_Alberto}, }, [TRAINER_ED] = @@ -191,8 +191,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Ed } + .partySize = ARRAY_COUNT(sParty_Ed), + .party = {.NoItemDefaultMoves = sParty_Ed}, }, [TRAINER_GRUNT_9] = @@ -205,8 +205,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt9 } + .partySize = ARRAY_COUNT(sParty_Grunt9), + .party = {.NoItemDefaultMoves = sParty_Grunt9}, }, [TRAINER_DECLAN] = @@ -219,8 +219,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Declan } + .partySize = ARRAY_COUNT(sParty_Declan), + .party = {.NoItemDefaultMoves = sParty_Declan}, }, [TRAINER_GRUNT_10] = @@ -233,8 +233,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt10 } + .partySize = ARRAY_COUNT(sParty_Grunt10), + .party = {.NoItemDefaultMoves = sParty_Grunt10}, }, [TRAINER_GRUNT_11] = @@ -247,8 +247,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Grunt11 } + .partySize = ARRAY_COUNT(sParty_Grunt11), + .party = {.NoItemDefaultMoves = sParty_Grunt11}, }, [TRAINER_GRUNT_12] = @@ -261,8 +261,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Grunt12 } + .partySize = ARRAY_COUNT(sParty_Grunt12), + .party = {.NoItemDefaultMoves = sParty_Grunt12}, }, [TRAINER_GRUNT_13] = @@ -275,8 +275,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Grunt13 } + .partySize = ARRAY_COUNT(sParty_Grunt13), + .party = {.NoItemDefaultMoves = sParty_Grunt13}, }, [TRAINER_GRUNT_14] = @@ -289,8 +289,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt14 } + .partySize = ARRAY_COUNT(sParty_Grunt14), + .party = {.NoItemDefaultMoves = sParty_Grunt14}, }, [TRAINER_GRUNT_15] = @@ -303,8 +303,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Grunt15 } + .partySize = ARRAY_COUNT(sParty_Grunt15), + .party = {.NoItemDefaultMoves = sParty_Grunt15}, }, [TRAINER_GRUNT_16] = @@ -317,8 +317,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt16 } + .partySize = ARRAY_COUNT(sParty_Grunt16), + .party = {.NoItemDefaultMoves = sParty_Grunt16}, }, [TRAINER_GRUNT_17] = @@ -331,8 +331,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt17 } + .partySize = ARRAY_COUNT(sParty_Grunt17), + .party = {.NoItemDefaultMoves = sParty_Grunt17}, }, [TRAINER_GRUNT_18] = @@ -345,8 +345,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt18 } + .partySize = ARRAY_COUNT(sParty_Grunt18), + .party = {.NoItemDefaultMoves = sParty_Grunt18}, }, [TRAINER_GRUNT_19] = @@ -359,8 +359,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Grunt19 } + .partySize = ARRAY_COUNT(sParty_Grunt19), + .party = {.NoItemDefaultMoves = sParty_Grunt19}, }, [TRAINER_GRUNT_20] = @@ -373,8 +373,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt20 } + .partySize = ARRAY_COUNT(sParty_Grunt20), + .party = {.NoItemDefaultMoves = sParty_Grunt20}, }, [TRAINER_GRUNT_21] = @@ -387,8 +387,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt21 } + .partySize = ARRAY_COUNT(sParty_Grunt21), + .party = {.NoItemDefaultMoves = sParty_Grunt21}, }, [TRAINER_GRUNT_22] = @@ -401,8 +401,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt22 } + .partySize = ARRAY_COUNT(sParty_Grunt22), + .party = {.NoItemDefaultMoves = sParty_Grunt22}, }, [TRAINER_FREDRICK] = @@ -415,8 +415,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Fredrick } + .partySize = ARRAY_COUNT(sParty_Fredrick), + .party = {.NoItemDefaultMoves = sParty_Fredrick}, }, [TRAINER_MATT] = @@ -429,8 +429,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Matt } + .partySize = ARRAY_COUNT(sParty_Matt), + .party = {.NoItemDefaultMoves = sParty_Matt}, }, [TRAINER_ZANDER] = @@ -443,8 +443,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Zander } + .partySize = ARRAY_COUNT(sParty_Zander), + .party = {.NoItemDefaultMoves = sParty_Zander}, }, [TRAINER_SHELLY_1] = @@ -457,8 +457,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Shelly1 } + .partySize = ARRAY_COUNT(sParty_Shelly1), + .party = {.NoItemDefaultMoves = sParty_Shelly1}, }, [TRAINER_SHELLY_2] = @@ -471,8 +471,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Shelly2 } + .partySize = ARRAY_COUNT(sParty_Shelly2), + .party = {.NoItemDefaultMoves = sParty_Shelly2}, }, [TRAINER_ARCHIE] = @@ -485,8 +485,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Archie } + .partySize = ARRAY_COUNT(sParty_Archie), + .party = {.NoItemDefaultMoves = sParty_Archie}, }, [TRAINER_LEAH] = @@ -499,8 +499,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Leah } + .partySize = ARRAY_COUNT(sParty_Leah), + .party = {.NoItemDefaultMoves = sParty_Leah}, }, [TRAINER_DAISY] = @@ -513,8 +513,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Daisy } + .partySize = ARRAY_COUNT(sParty_Daisy), + .party = {.NoItemDefaultMoves = sParty_Daisy}, }, [TRAINER_ROSE_1] = @@ -527,8 +527,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Rose1 } + .partySize = ARRAY_COUNT(sParty_Rose1), + .party = {.NoItemDefaultMoves = sParty_Rose1}, }, [TRAINER_FELIX] = @@ -541,8 +541,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Felix } + .partySize = ARRAY_COUNT(sParty_Felix), + .party = {.NoItemCustomMoves = sParty_Felix}, }, [TRAINER_VIOLET] = @@ -555,8 +555,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Violet } + .partySize = ARRAY_COUNT(sParty_Violet), + .party = {.NoItemDefaultMoves = sParty_Violet}, }, [TRAINER_ROSE_2] = @@ -569,8 +569,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Rose2 } + .partySize = ARRAY_COUNT(sParty_Rose2), + .party = {.NoItemDefaultMoves = sParty_Rose2}, }, [TRAINER_ROSE_3] = @@ -583,8 +583,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Rose3 } + .partySize = ARRAY_COUNT(sParty_Rose3), + .party = {.NoItemDefaultMoves = sParty_Rose3}, }, [TRAINER_ROSE_4] = @@ -597,8 +597,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Rose4 } + .partySize = ARRAY_COUNT(sParty_Rose4), + .party = {.NoItemDefaultMoves = sParty_Rose4}, }, [TRAINER_ROSE_5] = @@ -611,8 +611,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Rose5 } + .partySize = ARRAY_COUNT(sParty_Rose5), + .party = {.NoItemDefaultMoves = sParty_Rose5}, }, [TRAINER_DUSTY_1] = @@ -625,8 +625,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Dusty1 } + .partySize = ARRAY_COUNT(sParty_Dusty1), + .party = {.NoItemCustomMoves = sParty_Dusty1}, }, [TRAINER_CHIP] = @@ -639,8 +639,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemCustomMoves = sParty_Chip } + .partySize = ARRAY_COUNT(sParty_Chip), + .party = {.NoItemCustomMoves = sParty_Chip}, }, [TRAINER_FOSTER] = @@ -653,8 +653,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Foster } + .partySize = ARRAY_COUNT(sParty_Foster), + .party = {.NoItemCustomMoves = sParty_Foster}, }, [TRAINER_DUSTY_2] = @@ -667,8 +667,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Dusty2 } + .partySize = ARRAY_COUNT(sParty_Dusty2), + .party = {.NoItemCustomMoves = sParty_Dusty2}, }, [TRAINER_DUSTY_3] = @@ -681,8 +681,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Dusty3 } + .partySize = ARRAY_COUNT(sParty_Dusty3), + .party = {.NoItemCustomMoves = sParty_Dusty3}, }, [TRAINER_DUSTY_4] = @@ -695,8 +695,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Dusty4 } + .partySize = ARRAY_COUNT(sParty_Dusty4), + .party = {.NoItemCustomMoves = sParty_Dusty4}, }, [TRAINER_DUSTY_5] = @@ -709,8 +709,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Dusty5 } + .partySize = ARRAY_COUNT(sParty_Dusty5), + .party = {.NoItemCustomMoves = sParty_Dusty5}, }, [TRAINER_GABBY_AND_TY_1] = @@ -723,8 +723,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_GabbyAndTy1 } + .partySize = ARRAY_COUNT(sParty_GabbyAndTy1), + .party = {.NoItemDefaultMoves = sParty_GabbyAndTy1}, }, [TRAINER_GABBY_AND_TY_2] = @@ -737,8 +737,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_GabbyAndTy2 } + .partySize = ARRAY_COUNT(sParty_GabbyAndTy2), + .party = {.NoItemDefaultMoves = sParty_GabbyAndTy2}, }, [TRAINER_GABBY_AND_TY_3] = @@ -751,8 +751,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_GabbyAndTy3 } + .partySize = ARRAY_COUNT(sParty_GabbyAndTy3), + .party = {.NoItemDefaultMoves = sParty_GabbyAndTy3}, }, [TRAINER_GABBY_AND_TY_4] = @@ -765,8 +765,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_GabbyAndTy4 } + .partySize = ARRAY_COUNT(sParty_GabbyAndTy4), + .party = {.NoItemDefaultMoves = sParty_GabbyAndTy4}, }, [TRAINER_GABBY_AND_TY_5] = @@ -779,8 +779,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_GabbyAndTy5 } + .partySize = ARRAY_COUNT(sParty_GabbyAndTy5), + .party = {.NoItemDefaultMoves = sParty_GabbyAndTy5}, }, [TRAINER_GABBY_AND_TY_6] = @@ -793,8 +793,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_GabbyAndTy6 } + .partySize = ARRAY_COUNT(sParty_GabbyAndTy6), + .party = {.NoItemCustomMoves = sParty_GabbyAndTy6}, }, [TRAINER_LOLA_1] = @@ -807,8 +807,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Lola1 } + .partySize = ARRAY_COUNT(sParty_Lola1), + .party = {.NoItemDefaultMoves = sParty_Lola1}, }, [TRAINER_AUSTINA] = @@ -821,8 +821,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Austina } + .partySize = ARRAY_COUNT(sParty_Austina), + .party = {.NoItemDefaultMoves = sParty_Austina}, }, [TRAINER_GWEN] = @@ -835,8 +835,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Gwen } + .partySize = ARRAY_COUNT(sParty_Gwen), + .party = {.NoItemDefaultMoves = sParty_Gwen}, }, [TRAINER_LOLA_2] = @@ -849,8 +849,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Lola2 } + .partySize = ARRAY_COUNT(sParty_Lola2), + .party = {.NoItemDefaultMoves = sParty_Lola2}, }, [TRAINER_LOLA_3] = @@ -863,8 +863,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Lola3 } + .partySize = ARRAY_COUNT(sParty_Lola3), + .party = {.NoItemDefaultMoves = sParty_Lola3}, }, [TRAINER_LOLA_4] = @@ -877,8 +877,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Lola4 } + .partySize = ARRAY_COUNT(sParty_Lola4), + .party = {.NoItemDefaultMoves = sParty_Lola4}, }, [TRAINER_LOLA_5] = @@ -891,8 +891,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Lola5 } + .partySize = ARRAY_COUNT(sParty_Lola5), + .party = {.NoItemDefaultMoves = sParty_Lola5}, }, [TRAINER_RICKY_1] = @@ -905,8 +905,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Ricky1 } + .partySize = ARRAY_COUNT(sParty_Ricky1), + .party = {.NoItemCustomMoves = sParty_Ricky1}, }, [TRAINER_SIMON] = @@ -919,8 +919,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Simon } + .partySize = ARRAY_COUNT(sParty_Simon), + .party = {.NoItemDefaultMoves = sParty_Simon}, }, [TRAINER_CHARLIE] = @@ -933,8 +933,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Charlie } + .partySize = ARRAY_COUNT(sParty_Charlie), + .party = {.NoItemDefaultMoves = sParty_Charlie}, }, [TRAINER_RICKY_2] = @@ -947,8 +947,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Ricky2 } + .partySize = ARRAY_COUNT(sParty_Ricky2), + .party = {.NoItemCustomMoves = sParty_Ricky2}, }, [TRAINER_RICKY_3] = @@ -961,8 +961,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Ricky3 } + .partySize = ARRAY_COUNT(sParty_Ricky3), + .party = {.NoItemCustomMoves = sParty_Ricky3}, }, [TRAINER_RICKY_4] = @@ -975,8 +975,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Ricky4 } + .partySize = ARRAY_COUNT(sParty_Ricky4), + .party = {.NoItemCustomMoves = sParty_Ricky4}, }, [TRAINER_RICKY_5] = @@ -989,8 +989,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Ricky5 } + .partySize = ARRAY_COUNT(sParty_Ricky5), + .party = {.NoItemCustomMoves = sParty_Ricky5}, }, [TRAINER_RANDALL] = @@ -1003,8 +1003,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.ItemCustomMoves = sParty_Randall } + .partySize = ARRAY_COUNT(sParty_Randall), + .party = {.ItemCustomMoves = sParty_Randall}, }, [TRAINER_PARKER] = @@ -1017,8 +1017,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.ItemCustomMoves = sParty_Parker } + .partySize = ARRAY_COUNT(sParty_Parker), + .party = {.ItemCustomMoves = sParty_Parker}, }, [TRAINER_GEORGE] = @@ -1031,8 +1031,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.ItemCustomMoves = sParty_George } + .partySize = ARRAY_COUNT(sParty_George), + .party = {.ItemCustomMoves = sParty_George}, }, [TRAINER_BERKE] = @@ -1045,8 +1045,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.ItemCustomMoves = sParty_Berke } + .partySize = ARRAY_COUNT(sParty_Berke), + .party = {.ItemCustomMoves = sParty_Berke}, }, [TRAINER_BRAXTON] = @@ -1059,8 +1059,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.NoItemCustomMoves = sParty_Braxton } + .partySize = ARRAY_COUNT(sParty_Braxton), + .party = {.NoItemCustomMoves = sParty_Braxton}, }, [TRAINER_VINCENT] = @@ -1073,8 +1073,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Vincent } + .partySize = ARRAY_COUNT(sParty_Vincent), + .party = {.NoItemDefaultMoves = sParty_Vincent}, }, [TRAINER_LEROY] = @@ -1087,8 +1087,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Leroy } + .partySize = ARRAY_COUNT(sParty_Leroy), + .party = {.NoItemDefaultMoves = sParty_Leroy}, }, [TRAINER_WILTON_1] = @@ -1101,8 +1101,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Wilton1 } + .partySize = ARRAY_COUNT(sParty_Wilton1), + .party = {.NoItemDefaultMoves = sParty_Wilton1}, }, [TRAINER_EDGAR] = @@ -1115,8 +1115,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Edgar } + .partySize = ARRAY_COUNT(sParty_Edgar), + .party = {.NoItemDefaultMoves = sParty_Edgar}, }, [TRAINER_ALBERT] = @@ -1129,8 +1129,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Albert } + .partySize = ARRAY_COUNT(sParty_Albert), + .party = {.NoItemDefaultMoves = sParty_Albert}, }, [TRAINER_SAMUEL] = @@ -1143,8 +1143,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Samuel } + .partySize = ARRAY_COUNT(sParty_Samuel), + .party = {.NoItemDefaultMoves = sParty_Samuel}, }, [TRAINER_VITO] = @@ -1157,8 +1157,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Vito } + .partySize = ARRAY_COUNT(sParty_Vito), + .party = {.NoItemDefaultMoves = sParty_Vito}, }, [TRAINER_OWEN] = @@ -1171,8 +1171,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Owen } + .partySize = ARRAY_COUNT(sParty_Owen), + .party = {.NoItemDefaultMoves = sParty_Owen}, }, [TRAINER_WILTON_2] = @@ -1185,8 +1185,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Wilton2 } + .partySize = ARRAY_COUNT(sParty_Wilton2), + .party = {.NoItemDefaultMoves = sParty_Wilton2}, }, [TRAINER_WILTON_3] = @@ -1199,8 +1199,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Wilton3 } + .partySize = ARRAY_COUNT(sParty_Wilton3), + .party = {.NoItemDefaultMoves = sParty_Wilton3}, }, [TRAINER_WILTON_4] = @@ -1213,8 +1213,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Wilton4 } + .partySize = ARRAY_COUNT(sParty_Wilton4), + .party = {.NoItemDefaultMoves = sParty_Wilton4}, }, [TRAINER_WILTON_5] = @@ -1227,8 +1227,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Wilton5 } + .partySize = ARRAY_COUNT(sParty_Wilton5), + .party = {.NoItemDefaultMoves = sParty_Wilton5}, }, [TRAINER_WARREN] = @@ -1241,8 +1241,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Warren } + .partySize = ARRAY_COUNT(sParty_Warren), + .party = {.NoItemDefaultMoves = sParty_Warren}, }, [TRAINER_MARY] = @@ -1255,8 +1255,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.ItemCustomMoves = sParty_Mary } + .partySize = ARRAY_COUNT(sParty_Mary), + .party = {.ItemCustomMoves = sParty_Mary}, }, [TRAINER_ALEXIA] = @@ -1269,8 +1269,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.ItemCustomMoves = sParty_Alexia } + .partySize = ARRAY_COUNT(sParty_Alexia), + .party = {.ItemCustomMoves = sParty_Alexia}, }, [TRAINER_JODY] = @@ -1283,8 +1283,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = 1, - .party = {.ItemCustomMoves = sParty_Jody } + .partySize = ARRAY_COUNT(sParty_Jody), + .party = {.ItemCustomMoves = sParty_Jody}, }, [TRAINER_WENDY] = @@ -1297,8 +1297,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = 3, - .party = {.NoItemCustomMoves = sParty_Wendy } + .partySize = ARRAY_COUNT(sParty_Wendy), + .party = {.NoItemCustomMoves = sParty_Wendy}, }, [TRAINER_KEIRA] = @@ -1311,8 +1311,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Keira } + .partySize = ARRAY_COUNT(sParty_Keira), + .party = {.NoItemDefaultMoves = sParty_Keira}, }, [TRAINER_BROOKE_1] = @@ -1325,8 +1325,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Brooke1 } + .partySize = ARRAY_COUNT(sParty_Brooke1), + .party = {.NoItemDefaultMoves = sParty_Brooke1}, }, [TRAINER_JENNIFER] = @@ -1339,8 +1339,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jennifer } + .partySize = ARRAY_COUNT(sParty_Jennifer), + .party = {.NoItemDefaultMoves = sParty_Jennifer}, }, [TRAINER_HOPE] = @@ -1353,8 +1353,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Hope } + .partySize = ARRAY_COUNT(sParty_Hope), + .party = {.NoItemDefaultMoves = sParty_Hope}, }, [TRAINER_SHANNON] = @@ -1367,8 +1367,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Shannon } + .partySize = ARRAY_COUNT(sParty_Shannon), + .party = {.NoItemDefaultMoves = sParty_Shannon}, }, [TRAINER_MICHELLE] = @@ -1381,8 +1381,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Michelle } + .partySize = ARRAY_COUNT(sParty_Michelle), + .party = {.NoItemDefaultMoves = sParty_Michelle}, }, [TRAINER_CAROLINE] = @@ -1395,8 +1395,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Caroline } + .partySize = ARRAY_COUNT(sParty_Caroline), + .party = {.NoItemDefaultMoves = sParty_Caroline}, }, [TRAINER_JULIE] = @@ -1409,8 +1409,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Julie } + .partySize = ARRAY_COUNT(sParty_Julie), + .party = {.NoItemDefaultMoves = sParty_Julie}, }, [TRAINER_BROOKE_2] = @@ -1423,8 +1423,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Brooke2 } + .partySize = ARRAY_COUNT(sParty_Brooke2), + .party = {.NoItemDefaultMoves = sParty_Brooke2}, }, [TRAINER_BROOKE_3] = @@ -1437,8 +1437,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Brooke3 } + .partySize = ARRAY_COUNT(sParty_Brooke3), + .party = {.NoItemDefaultMoves = sParty_Brooke3}, }, [TRAINER_BROOKE_4] = @@ -1451,8 +1451,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Brooke4 } + .partySize = ARRAY_COUNT(sParty_Brooke4), + .party = {.NoItemDefaultMoves = sParty_Brooke4}, }, [TRAINER_BROOKE_5] = @@ -1465,8 +1465,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Brooke5 } + .partySize = ARRAY_COUNT(sParty_Brooke5), + .party = {.NoItemDefaultMoves = sParty_Brooke5}, }, [TRAINER_PATRICIA] = @@ -1479,8 +1479,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Patricia } + .partySize = ARRAY_COUNT(sParty_Patricia), + .party = {.NoItemDefaultMoves = sParty_Patricia}, }, [TRAINER_KINDRA] = @@ -1493,8 +1493,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Kindra } + .partySize = ARRAY_COUNT(sParty_Kindra), + .party = {.NoItemDefaultMoves = sParty_Kindra}, }, [TRAINER_TAMMY] = @@ -1507,8 +1507,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Tammy } + .partySize = ARRAY_COUNT(sParty_Tammy), + .party = {.NoItemDefaultMoves = sParty_Tammy}, }, [TRAINER_VALERIE_1] = @@ -1521,8 +1521,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Valerie1 } + .partySize = ARRAY_COUNT(sParty_Valerie1), + .party = {.NoItemDefaultMoves = sParty_Valerie1}, }, [TRAINER_TASHA] = @@ -1535,8 +1535,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Tasha } + .partySize = ARRAY_COUNT(sParty_Tasha), + .party = {.NoItemDefaultMoves = sParty_Tasha}, }, [TRAINER_VALERIE_2] = @@ -1549,8 +1549,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Valerie2 } + .partySize = ARRAY_COUNT(sParty_Valerie2), + .party = {.NoItemDefaultMoves = sParty_Valerie2}, }, [TRAINER_VALERIE_3] = @@ -1563,8 +1563,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Valerie3 } + .partySize = ARRAY_COUNT(sParty_Valerie3), + .party = {.NoItemDefaultMoves = sParty_Valerie3}, }, [TRAINER_VALERIE_4] = @@ -1577,8 +1577,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Valerie4 } + .partySize = ARRAY_COUNT(sParty_Valerie4), + .party = {.NoItemDefaultMoves = sParty_Valerie4}, }, [TRAINER_VALERIE_5] = @@ -1591,8 +1591,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Valerie5 } + .partySize = ARRAY_COUNT(sParty_Valerie5), + .party = {.NoItemDefaultMoves = sParty_Valerie5}, }, [TRAINER_CINDY_1] = @@ -1605,8 +1605,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Cindy1 } + .partySize = ARRAY_COUNT(sParty_Cindy1), + .party = {.ItemDefaultMoves = sParty_Cindy1}, }, [TRAINER_DAPHNE] = @@ -1619,8 +1619,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.ItemCustomMoves = sParty_Daphne } + .partySize = ARRAY_COUNT(sParty_Daphne), + .party = {.ItemCustomMoves = sParty_Daphne}, }, [TRAINER_GRUNT_23] = @@ -1633,8 +1633,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Grunt23 } + .partySize = ARRAY_COUNT(sParty_Grunt23), + .party = {.NoItemDefaultMoves = sParty_Grunt23}, }, [TRAINER_CINDY_2] = @@ -1647,8 +1647,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemCustomMoves = sParty_Cindy2 } + .partySize = ARRAY_COUNT(sParty_Cindy2), + .party = {.ItemCustomMoves = sParty_Cindy2}, }, [TRAINER_BRIANNA] = @@ -1661,8 +1661,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Brianna } + .partySize = ARRAY_COUNT(sParty_Brianna), + .party = {.ItemDefaultMoves = sParty_Brianna}, }, [TRAINER_NAOMI] = @@ -1675,8 +1675,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Naomi } + .partySize = ARRAY_COUNT(sParty_Naomi), + .party = {.ItemDefaultMoves = sParty_Naomi}, }, [TRAINER_CINDY_3] = @@ -1689,8 +1689,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Cindy3 } + .partySize = ARRAY_COUNT(sParty_Cindy3), + .party = {.ItemDefaultMoves = sParty_Cindy3}, }, [TRAINER_CINDY_4] = @@ -1703,8 +1703,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Cindy4 } + .partySize = ARRAY_COUNT(sParty_Cindy4), + .party = {.ItemDefaultMoves = sParty_Cindy4}, }, [TRAINER_CINDY_5] = @@ -1717,8 +1717,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Cindy5 } + .partySize = ARRAY_COUNT(sParty_Cindy5), + .party = {.ItemDefaultMoves = sParty_Cindy5}, }, [TRAINER_CINDY_6] = @@ -1731,8 +1731,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemCustomMoves = sParty_Cindy6 } + .partySize = ARRAY_COUNT(sParty_Cindy6), + .party = {.ItemCustomMoves = sParty_Cindy6}, }, [TRAINER_MELISSA] = @@ -1745,8 +1745,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Melissa } + .partySize = ARRAY_COUNT(sParty_Melissa), + .party = {.NoItemDefaultMoves = sParty_Melissa}, }, [TRAINER_SHEILA] = @@ -1759,8 +1759,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Sheila } + .partySize = ARRAY_COUNT(sParty_Sheila), + .party = {.NoItemDefaultMoves = sParty_Sheila}, }, [TRAINER_SHIRLEY] = @@ -1773,8 +1773,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Shirley } + .partySize = ARRAY_COUNT(sParty_Shirley), + .party = {.NoItemDefaultMoves = sParty_Shirley}, }, [TRAINER_JESSICA_1] = @@ -1787,8 +1787,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Jessica1 } + .partySize = ARRAY_COUNT(sParty_Jessica1), + .party = {.NoItemCustomMoves = sParty_Jessica1}, }, [TRAINER_CONNIE] = @@ -1801,8 +1801,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Connie } + .partySize = ARRAY_COUNT(sParty_Connie), + .party = {.NoItemDefaultMoves = sParty_Connie}, }, [TRAINER_BRIDGET] = @@ -1815,8 +1815,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Bridget } + .partySize = ARRAY_COUNT(sParty_Bridget), + .party = {.NoItemDefaultMoves = sParty_Bridget}, }, [TRAINER_OLIVIA] = @@ -1829,8 +1829,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemCustomMoves = sParty_Olivia } + .partySize = ARRAY_COUNT(sParty_Olivia), + .party = {.NoItemCustomMoves = sParty_Olivia}, }, [TRAINER_TIFFANY] = @@ -1843,8 +1843,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Tiffany } + .partySize = ARRAY_COUNT(sParty_Tiffany), + .party = {.NoItemDefaultMoves = sParty_Tiffany}, }, [TRAINER_JESSICA_2] = @@ -1857,8 +1857,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Jessica2 } + .partySize = ARRAY_COUNT(sParty_Jessica2), + .party = {.NoItemCustomMoves = sParty_Jessica2}, }, [TRAINER_JESSICA_3] = @@ -1871,8 +1871,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Jessica3 } + .partySize = ARRAY_COUNT(sParty_Jessica3), + .party = {.NoItemCustomMoves = sParty_Jessica3}, }, [TRAINER_JESSICA_4] = @@ -1885,8 +1885,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Jessica4 } + .partySize = ARRAY_COUNT(sParty_Jessica4), + .party = {.NoItemCustomMoves = sParty_Jessica4}, }, [TRAINER_JESSICA_5] = @@ -1899,8 +1899,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Jessica5 } + .partySize = ARRAY_COUNT(sParty_Jessica5), + .party = {.NoItemCustomMoves = sParty_Jessica5}, }, [TRAINER_WINSTON_1] = @@ -1913,8 +1913,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Winston1 } + .partySize = ARRAY_COUNT(sParty_Winston1), + .party = {.ItemDefaultMoves = sParty_Winston1}, }, [TRAINER_MOLLIE] = @@ -1927,8 +1927,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Mollie } + .partySize = ARRAY_COUNT(sParty_Mollie), + .party = {.NoItemDefaultMoves = sParty_Mollie}, }, [TRAINER_GARRET] = @@ -1941,8 +1941,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Garret } + .partySize = ARRAY_COUNT(sParty_Garret), + .party = {.ItemDefaultMoves = sParty_Garret}, }, [TRAINER_WINSTON_2] = @@ -1955,8 +1955,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Winston2 } + .partySize = ARRAY_COUNT(sParty_Winston2), + .party = {.ItemDefaultMoves = sParty_Winston2}, }, [TRAINER_WINSTON_3] = @@ -1969,8 +1969,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Winston3 } + .partySize = ARRAY_COUNT(sParty_Winston3), + .party = {.ItemDefaultMoves = sParty_Winston3}, }, [TRAINER_WINSTON_4] = @@ -1983,8 +1983,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Winston4 } + .partySize = ARRAY_COUNT(sParty_Winston4), + .party = {.ItemDefaultMoves = sParty_Winston4}, }, [TRAINER_WINSTON_5] = @@ -1997,8 +1997,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemCustomMoves = sParty_Winston5 } + .partySize = ARRAY_COUNT(sParty_Winston5), + .party = {.ItemCustomMoves = sParty_Winston5}, }, [TRAINER_STEVE_1] = @@ -2011,8 +2011,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Steve1 } + .partySize = ARRAY_COUNT(sParty_Steve1), + .party = {.NoItemDefaultMoves = sParty_Steve1}, }, [TRAINER_THALIA_1] = @@ -2025,8 +2025,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Thalia1 } + .partySize = ARRAY_COUNT(sParty_Thalia1), + .party = {.NoItemDefaultMoves = sParty_Thalia1}, }, [TRAINER_MARK] = @@ -2039,8 +2039,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Mark } + .partySize = ARRAY_COUNT(sParty_Mark), + .party = {.NoItemDefaultMoves = sParty_Mark}, }, [TRAINER_GRUNT_24] = @@ -2053,8 +2053,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt24 } + .partySize = ARRAY_COUNT(sParty_Grunt24), + .party = {.NoItemDefaultMoves = sParty_Grunt24}, }, [TRAINER_STEVE_2] = @@ -2067,8 +2067,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Steve2 } + .partySize = ARRAY_COUNT(sParty_Steve2), + .party = {.NoItemDefaultMoves = sParty_Steve2}, }, [TRAINER_STEVE_3] = @@ -2081,8 +2081,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Steve3 } + .partySize = ARRAY_COUNT(sParty_Steve3), + .party = {.NoItemDefaultMoves = sParty_Steve3}, }, [TRAINER_STEVE_4] = @@ -2095,8 +2095,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Steve4 } + .partySize = ARRAY_COUNT(sParty_Steve4), + .party = {.NoItemDefaultMoves = sParty_Steve4}, }, [TRAINER_STEVE_5] = @@ -2109,8 +2109,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Steve5 } + .partySize = ARRAY_COUNT(sParty_Steve5), + .party = {.NoItemDefaultMoves = sParty_Steve5}, }, [TRAINER_LUIS] = @@ -2123,8 +2123,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Luis } + .partySize = ARRAY_COUNT(sParty_Luis), + .party = {.NoItemDefaultMoves = sParty_Luis}, }, [TRAINER_DOMINIK] = @@ -2137,8 +2137,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Dominik } + .partySize = ARRAY_COUNT(sParty_Dominik), + .party = {.NoItemDefaultMoves = sParty_Dominik}, }, [TRAINER_DOUGLAS] = @@ -2151,8 +2151,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Douglas } + .partySize = ARRAY_COUNT(sParty_Douglas), + .party = {.NoItemDefaultMoves = sParty_Douglas}, }, [TRAINER_DARRIN] = @@ -2165,8 +2165,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Darrin } + .partySize = ARRAY_COUNT(sParty_Darrin), + .party = {.NoItemDefaultMoves = sParty_Darrin}, }, [TRAINER_TONY_1] = @@ -2179,8 +2179,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Tony1 } + .partySize = ARRAY_COUNT(sParty_Tony1), + .party = {.NoItemDefaultMoves = sParty_Tony1}, }, [TRAINER_JEROME] = @@ -2193,8 +2193,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jerome } + .partySize = ARRAY_COUNT(sParty_Jerome), + .party = {.NoItemDefaultMoves = sParty_Jerome}, }, [TRAINER_MATTHEW] = @@ -2207,8 +2207,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Matthew } + .partySize = ARRAY_COUNT(sParty_Matthew), + .party = {.NoItemDefaultMoves = sParty_Matthew}, }, [TRAINER_DAVID] = @@ -2221,8 +2221,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_David } + .partySize = ARRAY_COUNT(sParty_David), + .party = {.NoItemDefaultMoves = sParty_David}, }, [TRAINER_SPENCER] = @@ -2235,8 +2235,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Spencer } + .partySize = ARRAY_COUNT(sParty_Spencer), + .party = {.NoItemDefaultMoves = sParty_Spencer}, }, [TRAINER_ROLAND] = @@ -2249,8 +2249,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Roland } + .partySize = ARRAY_COUNT(sParty_Roland), + .party = {.NoItemDefaultMoves = sParty_Roland}, }, [TRAINER_NOLEN] = @@ -2263,8 +2263,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Nolen } + .partySize = ARRAY_COUNT(sParty_Nolen), + .party = {.NoItemDefaultMoves = sParty_Nolen}, }, [TRAINER_STAN] = @@ -2277,8 +2277,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Stan } + .partySize = ARRAY_COUNT(sParty_Stan), + .party = {.NoItemDefaultMoves = sParty_Stan}, }, [TRAINER_BARRY] = @@ -2291,8 +2291,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Barry } + .partySize = ARRAY_COUNT(sParty_Barry), + .party = {.NoItemDefaultMoves = sParty_Barry}, }, [TRAINER_DEAN] = @@ -2305,8 +2305,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Dean } + .partySize = ARRAY_COUNT(sParty_Dean), + .party = {.NoItemDefaultMoves = sParty_Dean}, }, [TRAINER_RODNEY] = @@ -2319,8 +2319,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Rodney } + .partySize = ARRAY_COUNT(sParty_Rodney), + .party = {.NoItemDefaultMoves = sParty_Rodney}, }, [TRAINER_RICHARD] = @@ -2333,8 +2333,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Richard } + .partySize = ARRAY_COUNT(sParty_Richard), + .party = {.NoItemDefaultMoves = sParty_Richard}, }, [TRAINER_HERMAN] = @@ -2347,8 +2347,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Herman } + .partySize = ARRAY_COUNT(sParty_Herman), + .party = {.NoItemDefaultMoves = sParty_Herman}, }, [TRAINER_SANTIAGO] = @@ -2361,8 +2361,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Santiago } + .partySize = ARRAY_COUNT(sParty_Santiago), + .party = {.NoItemDefaultMoves = sParty_Santiago}, }, [TRAINER_GILBERT] = @@ -2375,8 +2375,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Gilbert } + .partySize = ARRAY_COUNT(sParty_Gilbert), + .party = {.NoItemDefaultMoves = sParty_Gilbert}, }, [TRAINER_FRANKLIN] = @@ -2389,8 +2389,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Franklin } + .partySize = ARRAY_COUNT(sParty_Franklin), + .party = {.NoItemDefaultMoves = sParty_Franklin}, }, [TRAINER_KEVIN] = @@ -2403,8 +2403,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Kevin } + .partySize = ARRAY_COUNT(sParty_Kevin), + .party = {.NoItemDefaultMoves = sParty_Kevin}, }, [TRAINER_JACK] = @@ -2417,8 +2417,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jack } + .partySize = ARRAY_COUNT(sParty_Jack), + .party = {.NoItemDefaultMoves = sParty_Jack}, }, [TRAINER_DUDLEY] = @@ -2431,8 +2431,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Dudley } + .partySize = ARRAY_COUNT(sParty_Dudley), + .party = {.NoItemDefaultMoves = sParty_Dudley}, }, [TRAINER_CHAD] = @@ -2445,8 +2445,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Chad } + .partySize = ARRAY_COUNT(sParty_Chad), + .party = {.NoItemDefaultMoves = sParty_Chad}, }, [TRAINER_TONY_2] = @@ -2459,8 +2459,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Tony2 } + .partySize = ARRAY_COUNT(sParty_Tony2), + .party = {.NoItemDefaultMoves = sParty_Tony2}, }, [TRAINER_TONY_3] = @@ -2473,8 +2473,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Tony3 } + .partySize = ARRAY_COUNT(sParty_Tony3), + .party = {.NoItemDefaultMoves = sParty_Tony3}, }, [TRAINER_TONY_4] = @@ -2487,8 +2487,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Tony4 } + .partySize = ARRAY_COUNT(sParty_Tony4), + .party = {.NoItemDefaultMoves = sParty_Tony4}, }, [TRAINER_TONY_5] = @@ -2501,8 +2501,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Tony5 } + .partySize = ARRAY_COUNT(sParty_Tony5), + .party = {.NoItemDefaultMoves = sParty_Tony5}, }, [TRAINER_TAKAO] = @@ -2515,8 +2515,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Takao } + .partySize = ARRAY_COUNT(sParty_Takao), + .party = {.NoItemDefaultMoves = sParty_Takao}, }, [TRAINER_HITOSHI] = @@ -2529,8 +2529,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Hitoshi } + .partySize = ARRAY_COUNT(sParty_Hitoshi), + .party = {.NoItemDefaultMoves = sParty_Hitoshi}, }, [TRAINER_KIYO] = @@ -2543,8 +2543,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Kiyo } + .partySize = ARRAY_COUNT(sParty_Kiyo), + .party = {.NoItemDefaultMoves = sParty_Kiyo}, }, [TRAINER_KOICHI] = @@ -2557,8 +2557,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Koichi } + .partySize = ARRAY_COUNT(sParty_Koichi), + .party = {.NoItemDefaultMoves = sParty_Koichi}, }, [TRAINER_NOB_1] = @@ -2571,8 +2571,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Nob1 } + .partySize = ARRAY_COUNT(sParty_Nob1), + .party = {.NoItemDefaultMoves = sParty_Nob1}, }, [TRAINER_NOB_2] = @@ -2585,8 +2585,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Nob2 } + .partySize = ARRAY_COUNT(sParty_Nob2), + .party = {.NoItemDefaultMoves = sParty_Nob2}, }, [TRAINER_NOB_3] = @@ -2599,8 +2599,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Nob3 } + .partySize = ARRAY_COUNT(sParty_Nob3), + .party = {.NoItemDefaultMoves = sParty_Nob3}, }, [TRAINER_NOB_4] = @@ -2613,8 +2613,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Nob4 } + .partySize = ARRAY_COUNT(sParty_Nob4), + .party = {.NoItemDefaultMoves = sParty_Nob4}, }, [TRAINER_NOB_5] = @@ -2627,8 +2627,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 4, - .party = {.ItemDefaultMoves = sParty_Nob5 } + .partySize = ARRAY_COUNT(sParty_Nob5), + .party = {.ItemDefaultMoves = sParty_Nob5}, }, [TRAINER_YUJI] = @@ -2641,8 +2641,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Yuji } + .partySize = ARRAY_COUNT(sParty_Yuji), + .party = {.NoItemDefaultMoves = sParty_Yuji}, }, [TRAINER_DAISUKE] = @@ -2655,8 +2655,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Daisuke } + .partySize = ARRAY_COUNT(sParty_Daisuke), + .party = {.NoItemDefaultMoves = sParty_Daisuke}, }, [TRAINER_ATSUSHI] = @@ -2669,8 +2669,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Atsushi } + .partySize = ARRAY_COUNT(sParty_Atsushi), + .party = {.NoItemDefaultMoves = sParty_Atsushi}, }, [TRAINER_KIRK] = @@ -2683,8 +2683,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Kirk } + .partySize = ARRAY_COUNT(sParty_Kirk), + .party = {.NoItemCustomMoves = sParty_Kirk}, }, [TRAINER_GRUNT_25] = @@ -2697,8 +2697,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Grunt25 } + .partySize = ARRAY_COUNT(sParty_Grunt25), + .party = {.NoItemDefaultMoves = sParty_Grunt25}, }, [TRAINER_GRUNT_26] = @@ -2711,8 +2711,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt26 } + .partySize = ARRAY_COUNT(sParty_Grunt26), + .party = {.NoItemDefaultMoves = sParty_Grunt26}, }, [TRAINER_SHAWN] = @@ -2725,8 +2725,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Shawn } + .partySize = ARRAY_COUNT(sParty_Shawn), + .party = {.NoItemDefaultMoves = sParty_Shawn}, }, [TRAINER_FERNANDO_1] = @@ -2739,8 +2739,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Fernando1 } + .partySize = ARRAY_COUNT(sParty_Fernando1), + .party = {.NoItemDefaultMoves = sParty_Fernando1}, }, [TRAINER_DALTON_1] = @@ -2753,8 +2753,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Dalton1 } + .partySize = ARRAY_COUNT(sParty_Dalton1), + .party = {.NoItemDefaultMoves = sParty_Dalton1}, }, [TRAINER_DALTON_2] = @@ -2767,8 +2767,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Dalton2 } + .partySize = ARRAY_COUNT(sParty_Dalton2), + .party = {.NoItemDefaultMoves = sParty_Dalton2}, }, [TRAINER_DALTON_3] = @@ -2781,8 +2781,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Dalton3 } + .partySize = ARRAY_COUNT(sParty_Dalton3), + .party = {.NoItemDefaultMoves = sParty_Dalton3}, }, [TRAINER_DALTON_4] = @@ -2795,8 +2795,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Dalton4 } + .partySize = ARRAY_COUNT(sParty_Dalton4), + .party = {.NoItemDefaultMoves = sParty_Dalton4}, }, [TRAINER_DALTON_5] = @@ -2809,8 +2809,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Dalton5 } + .partySize = ARRAY_COUNT(sParty_Dalton5), + .party = {.NoItemDefaultMoves = sParty_Dalton5}, }, [TRAINER_COLE] = @@ -2823,8 +2823,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Cole } + .partySize = ARRAY_COUNT(sParty_Cole), + .party = {.NoItemDefaultMoves = sParty_Cole}, }, [TRAINER_JEFF] = @@ -2837,8 +2837,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Jeff } + .partySize = ARRAY_COUNT(sParty_Jeff), + .party = {.NoItemDefaultMoves = sParty_Jeff}, }, [TRAINER_AXLE] = @@ -2851,8 +2851,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Axle } + .partySize = ARRAY_COUNT(sParty_Axle), + .party = {.NoItemDefaultMoves = sParty_Axle}, }, [TRAINER_JACE] = @@ -2865,8 +2865,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jace } + .partySize = ARRAY_COUNT(sParty_Jace), + .party = {.NoItemDefaultMoves = sParty_Jace}, }, [TRAINER_KEEGAN] = @@ -2879,8 +2879,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Keegan } + .partySize = ARRAY_COUNT(sParty_Keegan), + .party = {.NoItemDefaultMoves = sParty_Keegan}, }, [TRAINER_BERNIE_1] = @@ -2893,8 +2893,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Bernie1 } + .partySize = ARRAY_COUNT(sParty_Bernie1), + .party = {.NoItemDefaultMoves = sParty_Bernie1}, }, [TRAINER_BERNIE_2] = @@ -2907,8 +2907,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Bernie2 } + .partySize = ARRAY_COUNT(sParty_Bernie2), + .party = {.NoItemDefaultMoves = sParty_Bernie2}, }, [TRAINER_BERNIE_3] = @@ -2921,8 +2921,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Bernie3 } + .partySize = ARRAY_COUNT(sParty_Bernie3), + .party = {.NoItemDefaultMoves = sParty_Bernie3}, }, [TRAINER_BERNIE_4] = @@ -2935,8 +2935,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Bernie4 } + .partySize = ARRAY_COUNT(sParty_Bernie4), + .party = {.NoItemDefaultMoves = sParty_Bernie4}, }, [TRAINER_BERNIE_5] = @@ -2949,8 +2949,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Bernie5 } + .partySize = ARRAY_COUNT(sParty_Bernie5), + .party = {.NoItemDefaultMoves = sParty_Bernie5}, }, [TRAINER_DREW] = @@ -2963,8 +2963,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Drew } + .partySize = ARRAY_COUNT(sParty_Drew), + .party = {.NoItemCustomMoves = sParty_Drew}, }, [TRAINER_BEAU] = @@ -2977,8 +2977,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemCustomMoves = sParty_Beau } + .partySize = ARRAY_COUNT(sParty_Beau), + .party = {.NoItemCustomMoves = sParty_Beau}, }, [TRAINER_LARRY] = @@ -2991,8 +2991,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Larry } + .partySize = ARRAY_COUNT(sParty_Larry), + .party = {.NoItemDefaultMoves = sParty_Larry}, }, [TRAINER_SHANE] = @@ -3005,8 +3005,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Shane } + .partySize = ARRAY_COUNT(sParty_Shane), + .party = {.NoItemDefaultMoves = sParty_Shane}, }, [TRAINER_JUSTIN] = @@ -3019,8 +3019,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Justin } + .partySize = ARRAY_COUNT(sParty_Justin), + .party = {.NoItemDefaultMoves = sParty_Justin}, }, [TRAINER_ETHAN_1] = @@ -3033,8 +3033,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Ethan1 } + .partySize = ARRAY_COUNT(sParty_Ethan1), + .party = {.NoItemDefaultMoves = sParty_Ethan1}, }, [TRAINER_AUTUMN] = @@ -3047,8 +3047,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Autumn } + .partySize = ARRAY_COUNT(sParty_Autumn), + .party = {.NoItemDefaultMoves = sParty_Autumn}, }, [TRAINER_TRAVIS] = @@ -3061,8 +3061,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Travis } + .partySize = ARRAY_COUNT(sParty_Travis), + .party = {.NoItemDefaultMoves = sParty_Travis}, }, [TRAINER_ETHAN_2] = @@ -3075,8 +3075,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Ethan2 } + .partySize = ARRAY_COUNT(sParty_Ethan2), + .party = {.NoItemDefaultMoves = sParty_Ethan2}, }, [TRAINER_ETHAN_3] = @@ -3089,8 +3089,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Ethan3 } + .partySize = ARRAY_COUNT(sParty_Ethan3), + .party = {.NoItemDefaultMoves = sParty_Ethan3}, }, [TRAINER_ETHAN_4] = @@ -3103,8 +3103,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Ethan4 } + .partySize = ARRAY_COUNT(sParty_Ethan4), + .party = {.NoItemDefaultMoves = sParty_Ethan4}, }, [TRAINER_ETHAN_5] = @@ -3117,8 +3117,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Ethan5 } + .partySize = ARRAY_COUNT(sParty_Ethan5), + .party = {.NoItemDefaultMoves = sParty_Ethan5}, }, [TRAINER_BRENT] = @@ -3131,8 +3131,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Brent } + .partySize = ARRAY_COUNT(sParty_Brent), + .party = {.NoItemDefaultMoves = sParty_Brent}, }, [TRAINER_DONALD] = @@ -3145,8 +3145,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Donald } + .partySize = ARRAY_COUNT(sParty_Donald), + .party = {.NoItemDefaultMoves = sParty_Donald}, }, [TRAINER_TAYLOR] = @@ -3159,8 +3159,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Taylor } + .partySize = ARRAY_COUNT(sParty_Taylor), + .party = {.NoItemDefaultMoves = sParty_Taylor}, }, [TRAINER_JEFFREY_1] = @@ -3173,8 +3173,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Jeffrey1 } + .partySize = ARRAY_COUNT(sParty_Jeffrey1), + .party = {.NoItemDefaultMoves = sParty_Jeffrey1}, }, [TRAINER_DEREK] = @@ -3187,8 +3187,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Derek } + .partySize = ARRAY_COUNT(sParty_Derek), + .party = {.NoItemDefaultMoves = sParty_Derek}, }, [TRAINER_JEFFREY_2] = @@ -3201,8 +3201,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Jeffrey2 } + .partySize = ARRAY_COUNT(sParty_Jeffrey2), + .party = {.NoItemDefaultMoves = sParty_Jeffrey2}, }, [TRAINER_JEFFREY_3] = @@ -3215,8 +3215,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Jeffrey3 } + .partySize = ARRAY_COUNT(sParty_Jeffrey3), + .party = {.NoItemDefaultMoves = sParty_Jeffrey3}, }, [TRAINER_JEFFREY_4] = @@ -3229,8 +3229,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Jeffrey4 } + .partySize = ARRAY_COUNT(sParty_Jeffrey4), + .party = {.NoItemDefaultMoves = sParty_Jeffrey4}, }, [TRAINER_JEFFREY_5] = @@ -3243,8 +3243,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 5, - .party = {.ItemDefaultMoves = sParty_Jeffrey5 } + .partySize = ARRAY_COUNT(sParty_Jeffrey5), + .party = {.ItemDefaultMoves = sParty_Jeffrey5}, }, [TRAINER_EDWARD] = @@ -3257,8 +3257,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Edward } + .partySize = ARRAY_COUNT(sParty_Edward), + .party = {.NoItemCustomMoves = sParty_Edward}, }, [TRAINER_PRESTON] = @@ -3271,8 +3271,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Preston } + .partySize = ARRAY_COUNT(sParty_Preston), + .party = {.NoItemDefaultMoves = sParty_Preston}, }, [TRAINER_VIRGIL] = @@ -3285,8 +3285,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Virgil } + .partySize = ARRAY_COUNT(sParty_Virgil), + .party = {.NoItemDefaultMoves = sParty_Virgil}, }, [TRAINER_BLAKE] = @@ -3299,8 +3299,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Blake } + .partySize = ARRAY_COUNT(sParty_Blake), + .party = {.NoItemDefaultMoves = sParty_Blake}, }, [TRAINER_WILLIAM] = @@ -3313,8 +3313,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_William } + .partySize = ARRAY_COUNT(sParty_William), + .party = {.NoItemDefaultMoves = sParty_William}, }, [TRAINER_JOSHUA] = @@ -3327,8 +3327,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Joshua } + .partySize = ARRAY_COUNT(sParty_Joshua), + .party = {.NoItemDefaultMoves = sParty_Joshua}, }, [TRAINER_CAMERON_1] = @@ -3341,8 +3341,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Cameron1 } + .partySize = ARRAY_COUNT(sParty_Cameron1), + .party = {.NoItemDefaultMoves = sParty_Cameron1}, }, [TRAINER_CAMERON_2] = @@ -3355,8 +3355,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Cameron2 } + .partySize = ARRAY_COUNT(sParty_Cameron2), + .party = {.NoItemDefaultMoves = sParty_Cameron2}, }, [TRAINER_CAMERON_3] = @@ -3369,8 +3369,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Cameron3 } + .partySize = ARRAY_COUNT(sParty_Cameron3), + .party = {.NoItemDefaultMoves = sParty_Cameron3}, }, [TRAINER_CAMERON_4] = @@ -3383,8 +3383,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Cameron4 } + .partySize = ARRAY_COUNT(sParty_Cameron4), + .party = {.NoItemDefaultMoves = sParty_Cameron4}, }, [TRAINER_CAMERON_5] = @@ -3397,8 +3397,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Cameron5 } + .partySize = ARRAY_COUNT(sParty_Cameron5), + .party = {.NoItemDefaultMoves = sParty_Cameron5}, }, [TRAINER_JACLYN] = @@ -3411,8 +3411,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Jaclyn } + .partySize = ARRAY_COUNT(sParty_Jaclyn), + .party = {.NoItemCustomMoves = sParty_Jaclyn}, }, [TRAINER_HANNAH] = @@ -3425,8 +3425,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Hannah } + .partySize = ARRAY_COUNT(sParty_Hannah), + .party = {.NoItemDefaultMoves = sParty_Hannah}, }, [TRAINER_SAMANTHA] = @@ -3439,8 +3439,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Samantha } + .partySize = ARRAY_COUNT(sParty_Samantha), + .party = {.NoItemDefaultMoves = sParty_Samantha}, }, [TRAINER_MAURA] = @@ -3453,8 +3453,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Maura } + .partySize = ARRAY_COUNT(sParty_Maura), + .party = {.NoItemDefaultMoves = sParty_Maura}, }, [TRAINER_KAYLA] = @@ -3467,8 +3467,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Kayla } + .partySize = ARRAY_COUNT(sParty_Kayla), + .party = {.NoItemDefaultMoves = sParty_Kayla}, }, [TRAINER_ALEXIS] = @@ -3481,8 +3481,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Alexis } + .partySize = ARRAY_COUNT(sParty_Alexis), + .party = {.NoItemDefaultMoves = sParty_Alexis}, }, [TRAINER_JACKI_1] = @@ -3495,8 +3495,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Jacki1 } + .partySize = ARRAY_COUNT(sParty_Jacki1), + .party = {.NoItemDefaultMoves = sParty_Jacki1}, }, [TRAINER_JACKI_2] = @@ -3509,8 +3509,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Jacki2 } + .partySize = ARRAY_COUNT(sParty_Jacki2), + .party = {.NoItemDefaultMoves = sParty_Jacki2}, }, [TRAINER_JACKI_3] = @@ -3523,8 +3523,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Jacki3 } + .partySize = ARRAY_COUNT(sParty_Jacki3), + .party = {.NoItemDefaultMoves = sParty_Jacki3}, }, [TRAINER_JACKI_4] = @@ -3537,8 +3537,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Jacki4 } + .partySize = ARRAY_COUNT(sParty_Jacki4), + .party = {.NoItemDefaultMoves = sParty_Jacki4}, }, [TRAINER_JACKI_5] = @@ -3551,8 +3551,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Jacki5 } + .partySize = ARRAY_COUNT(sParty_Jacki5), + .party = {.NoItemDefaultMoves = sParty_Jacki5}, }, [TRAINER_WALTER_1] = @@ -3565,8 +3565,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Walter1 } + .partySize = ARRAY_COUNT(sParty_Walter1), + .party = {.NoItemDefaultMoves = sParty_Walter1}, }, [TRAINER_MICAH] = @@ -3579,8 +3579,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Micah } + .partySize = ARRAY_COUNT(sParty_Micah), + .party = {.NoItemDefaultMoves = sParty_Micah}, }, [TRAINER_THOMAS] = @@ -3593,8 +3593,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Thomas } + .partySize = ARRAY_COUNT(sParty_Thomas), + .party = {.NoItemDefaultMoves = sParty_Thomas}, }, [TRAINER_WALTER_2] = @@ -3607,8 +3607,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Walter2 } + .partySize = ARRAY_COUNT(sParty_Walter2), + .party = {.NoItemDefaultMoves = sParty_Walter2}, }, [TRAINER_WALTER_3] = @@ -3621,8 +3621,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Walter3 } + .partySize = ARRAY_COUNT(sParty_Walter3), + .party = {.NoItemCustomMoves = sParty_Walter3}, }, [TRAINER_WALTER_4] = @@ -3635,8 +3635,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Walter4 } + .partySize = ARRAY_COUNT(sParty_Walter4), + .party = {.NoItemCustomMoves = sParty_Walter4}, }, [TRAINER_WALTER_5] = @@ -3649,8 +3649,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemCustomMoves = sParty_Walter5 } + .partySize = ARRAY_COUNT(sParty_Walter5), + .party = {.NoItemCustomMoves = sParty_Walter5}, }, [TRAINER_SIDNEY] = @@ -3663,8 +3663,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Sidney } + .partySize = ARRAY_COUNT(sParty_Sidney), + .party = {.ItemCustomMoves = sParty_Sidney}, }, [TRAINER_PHOEBE] = @@ -3677,8 +3677,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Phoebe } + .partySize = ARRAY_COUNT(sParty_Phoebe), + .party = {.ItemCustomMoves = sParty_Phoebe}, }, [TRAINER_GLACIA] = @@ -3691,8 +3691,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Glacia } + .partySize = ARRAY_COUNT(sParty_Glacia), + .party = {.ItemCustomMoves = sParty_Glacia}, }, [TRAINER_DRAKE] = @@ -3705,8 +3705,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Drake } + .partySize = ARRAY_COUNT(sParty_Drake), + .party = {.ItemCustomMoves = sParty_Drake}, }, [TRAINER_ROXANNE_1] = @@ -3719,8 +3719,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_POTION, ITEM_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.ItemCustomMoves = sParty_Roxanne1 } + .partySize = ARRAY_COUNT(sParty_Roxanne1), + .party = {.ItemCustomMoves = sParty_Roxanne1}, }, [TRAINER_BRAWLY_1] = @@ -3733,8 +3733,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.ItemCustomMoves = sParty_Brawly1 } + .partySize = ARRAY_COUNT(sParty_Brawly1), + .party = {.ItemCustomMoves = sParty_Brawly1}, }, [TRAINER_WATTSON_1] = @@ -3747,8 +3747,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.ItemCustomMoves = sParty_Wattson1 } + .partySize = ARRAY_COUNT(sParty_Wattson1), + .party = {.ItemCustomMoves = sParty_Wattson1}, }, [TRAINER_FLANNERY_1] = @@ -3761,8 +3761,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.ItemCustomMoves = sParty_Flannery1 } + .partySize = ARRAY_COUNT(sParty_Flannery1), + .party = {.ItemCustomMoves = sParty_Flannery1}, }, [TRAINER_NORMAN_1] = @@ -3775,8 +3775,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.ItemCustomMoves = sParty_Norman1 } + .partySize = ARRAY_COUNT(sParty_Norman1), + .party = {.ItemCustomMoves = sParty_Norman1}, }, [TRAINER_WINONA_1] = @@ -3789,8 +3789,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Winona1 } + .partySize = ARRAY_COUNT(sParty_Winona1), + .party = {.ItemCustomMoves = sParty_Winona1}, }, [TRAINER_TATE_AND_LIZA_1] = @@ -3803,8 +3803,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_HYPER_POTION}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.ItemCustomMoves = sParty_TateAndLiza1 } + .partySize = ARRAY_COUNT(sParty_TateAndLiza1), + .party = {.ItemCustomMoves = sParty_TateAndLiza1}, }, [TRAINER_JUAN_1] = @@ -3817,8 +3817,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Juan1 } + .partySize = ARRAY_COUNT(sParty_Juan1), + .party = {.ItemCustomMoves = sParty_Juan1}, }, [TRAINER_JERRY_1] = @@ -3831,8 +3831,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jerry1 } + .partySize = ARRAY_COUNT(sParty_Jerry1), + .party = {.NoItemDefaultMoves = sParty_Jerry1}, }, [TRAINER_TED] = @@ -3845,8 +3845,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Ted } + .partySize = ARRAY_COUNT(sParty_Ted), + .party = {.NoItemDefaultMoves = sParty_Ted}, }, [TRAINER_PAUL] = @@ -3859,8 +3859,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Paul } + .partySize = ARRAY_COUNT(sParty_Paul), + .party = {.NoItemDefaultMoves = sParty_Paul}, }, [TRAINER_JERRY_2] = @@ -3873,8 +3873,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Jerry2 } + .partySize = ARRAY_COUNT(sParty_Jerry2), + .party = {.NoItemDefaultMoves = sParty_Jerry2}, }, [TRAINER_JERRY_3] = @@ -3887,8 +3887,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Jerry3 } + .partySize = ARRAY_COUNT(sParty_Jerry3), + .party = {.NoItemDefaultMoves = sParty_Jerry3}, }, [TRAINER_JERRY_4] = @@ -3901,8 +3901,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Jerry4 } + .partySize = ARRAY_COUNT(sParty_Jerry4), + .party = {.NoItemDefaultMoves = sParty_Jerry4}, }, [TRAINER_JERRY_5] = @@ -3915,8 +3915,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Jerry5 } + .partySize = ARRAY_COUNT(sParty_Jerry5), + .party = {.NoItemDefaultMoves = sParty_Jerry5}, }, [TRAINER_KAREN_1] = @@ -3929,8 +3929,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Karen1 } + .partySize = ARRAY_COUNT(sParty_Karen1), + .party = {.NoItemDefaultMoves = sParty_Karen1}, }, [TRAINER_GEORGIA] = @@ -3943,8 +3943,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Georgia } + .partySize = ARRAY_COUNT(sParty_Georgia), + .party = {.NoItemDefaultMoves = sParty_Georgia}, }, [TRAINER_KAREN_2] = @@ -3957,8 +3957,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Karen2 } + .partySize = ARRAY_COUNT(sParty_Karen2), + .party = {.NoItemDefaultMoves = sParty_Karen2}, }, [TRAINER_KAREN_3] = @@ -3971,8 +3971,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Karen3 } + .partySize = ARRAY_COUNT(sParty_Karen3), + .party = {.NoItemDefaultMoves = sParty_Karen3}, }, [TRAINER_KAREN_4] = @@ -3985,8 +3985,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Karen4 } + .partySize = ARRAY_COUNT(sParty_Karen4), + .party = {.NoItemDefaultMoves = sParty_Karen4}, }, [TRAINER_KAREN_5] = @@ -3999,8 +3999,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Karen5 } + .partySize = ARRAY_COUNT(sParty_Karen5), + .party = {.NoItemDefaultMoves = sParty_Karen5}, }, [TRAINER_KATE_AND_JOY] = @@ -4013,8 +4013,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_KateAndJoy } + .partySize = ARRAY_COUNT(sParty_KateAndJoy), + .party = {.NoItemCustomMoves = sParty_KateAndJoy}, }, [TRAINER_ANNA_AND_MEG_1] = @@ -4027,8 +4027,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_AnnaAndMeg1 } + .partySize = ARRAY_COUNT(sParty_AnnaAndMeg1), + .party = {.NoItemCustomMoves = sParty_AnnaAndMeg1}, }, [TRAINER_ANNA_AND_MEG_2] = @@ -4041,8 +4041,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_AnnaAndMeg2 } + .partySize = ARRAY_COUNT(sParty_AnnaAndMeg2), + .party = {.NoItemCustomMoves = sParty_AnnaAndMeg2}, }, [TRAINER_ANNA_AND_MEG_3] = @@ -4055,8 +4055,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_AnnaAndMeg3 } + .partySize = ARRAY_COUNT(sParty_AnnaAndMeg3), + .party = {.NoItemCustomMoves = sParty_AnnaAndMeg3}, }, [TRAINER_ANNA_AND_MEG_4] = @@ -4069,8 +4069,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_AnnaAndMeg4 } + .partySize = ARRAY_COUNT(sParty_AnnaAndMeg4), + .party = {.NoItemCustomMoves = sParty_AnnaAndMeg4}, }, [TRAINER_ANNA_AND_MEG_5] = @@ -4083,8 +4083,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_AnnaAndMeg5 } + .partySize = ARRAY_COUNT(sParty_AnnaAndMeg5), + .party = {.NoItemCustomMoves = sParty_AnnaAndMeg5}, }, [TRAINER_VICTOR] = @@ -4097,8 +4097,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.ItemDefaultMoves = sParty_Victor } + .partySize = ARRAY_COUNT(sParty_Victor), + .party = {.ItemDefaultMoves = sParty_Victor}, }, [TRAINER_MIGUEL_1] = @@ -4111,8 +4111,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Miguel1 } + .partySize = ARRAY_COUNT(sParty_Miguel1), + .party = {.ItemDefaultMoves = sParty_Miguel1}, }, [TRAINER_COLTON] = @@ -4125,8 +4125,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_Colton } + .partySize = ARRAY_COUNT(sParty_Colton), + .party = {.ItemCustomMoves = sParty_Colton}, }, [TRAINER_MIGUEL_2] = @@ -4139,8 +4139,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Miguel2 } + .partySize = ARRAY_COUNT(sParty_Miguel2), + .party = {.ItemDefaultMoves = sParty_Miguel2}, }, [TRAINER_MIGUEL_3] = @@ -4153,8 +4153,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Miguel3 } + .partySize = ARRAY_COUNT(sParty_Miguel3), + .party = {.ItemDefaultMoves = sParty_Miguel3}, }, [TRAINER_MIGUEL_4] = @@ -4167,8 +4167,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Miguel4 } + .partySize = ARRAY_COUNT(sParty_Miguel4), + .party = {.ItemDefaultMoves = sParty_Miguel4}, }, [TRAINER_MIGUEL_5] = @@ -4181,8 +4181,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Miguel5 } + .partySize = ARRAY_COUNT(sParty_Miguel5), + .party = {.ItemDefaultMoves = sParty_Miguel5}, }, [TRAINER_VICTORIA] = @@ -4195,8 +4195,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Victoria } + .partySize = ARRAY_COUNT(sParty_Victoria), + .party = {.ItemDefaultMoves = sParty_Victoria}, }, [TRAINER_VANESSA] = @@ -4209,8 +4209,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.ItemDefaultMoves = sParty_Vanessa } + .partySize = ARRAY_COUNT(sParty_Vanessa), + .party = {.ItemDefaultMoves = sParty_Vanessa}, }, [TRAINER_BETHANY] = @@ -4223,8 +4223,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.ItemDefaultMoves = sParty_Bethany } + .partySize = ARRAY_COUNT(sParty_Bethany), + .party = {.ItemDefaultMoves = sParty_Bethany}, }, [TRAINER_ISABEL_1] = @@ -4237,8 +4237,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.ItemDefaultMoves = sParty_Isabel1 } + .partySize = ARRAY_COUNT(sParty_Isabel1), + .party = {.ItemDefaultMoves = sParty_Isabel1}, }, [TRAINER_ISABEL_2] = @@ -4251,8 +4251,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.ItemDefaultMoves = sParty_Isabel2 } + .partySize = ARRAY_COUNT(sParty_Isabel2), + .party = {.ItemDefaultMoves = sParty_Isabel2}, }, [TRAINER_ISABEL_3] = @@ -4265,8 +4265,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.ItemDefaultMoves = sParty_Isabel3 } + .partySize = ARRAY_COUNT(sParty_Isabel3), + .party = {.ItemDefaultMoves = sParty_Isabel3}, }, [TRAINER_ISABEL_4] = @@ -4279,8 +4279,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.ItemDefaultMoves = sParty_Isabel4 } + .partySize = ARRAY_COUNT(sParty_Isabel4), + .party = {.ItemDefaultMoves = sParty_Isabel4}, }, [TRAINER_ISABEL_5] = @@ -4293,8 +4293,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.ItemDefaultMoves = sParty_Isabel5 } + .partySize = ARRAY_COUNT(sParty_Isabel5), + .party = {.ItemDefaultMoves = sParty_Isabel5}, }, [TRAINER_TIMOTHY_1] = @@ -4307,8 +4307,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Timothy1 } + .partySize = ARRAY_COUNT(sParty_Timothy1), + .party = {.NoItemDefaultMoves = sParty_Timothy1}, }, [TRAINER_TIMOTHY_2] = @@ -4321,8 +4321,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Timothy2 } + .partySize = ARRAY_COUNT(sParty_Timothy2), + .party = {.NoItemCustomMoves = sParty_Timothy2}, }, [TRAINER_TIMOTHY_3] = @@ -4335,8 +4335,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Timothy3 } + .partySize = ARRAY_COUNT(sParty_Timothy3), + .party = {.NoItemCustomMoves = sParty_Timothy3}, }, [TRAINER_TIMOTHY_4] = @@ -4349,8 +4349,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Timothy4 } + .partySize = ARRAY_COUNT(sParty_Timothy4), + .party = {.NoItemCustomMoves = sParty_Timothy4}, }, [TRAINER_TIMOTHY_5] = @@ -4363,8 +4363,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Timothy5 } + .partySize = ARRAY_COUNT(sParty_Timothy5), + .party = {.NoItemCustomMoves = sParty_Timothy5}, }, [TRAINER_VICKY] = @@ -4377,8 +4377,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Vicky } + .partySize = ARRAY_COUNT(sParty_Vicky), + .party = {.NoItemCustomMoves = sParty_Vicky}, }, [TRAINER_SHELBY_1] = @@ -4391,8 +4391,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Shelby1 } + .partySize = ARRAY_COUNT(sParty_Shelby1), + .party = {.NoItemDefaultMoves = sParty_Shelby1}, }, [TRAINER_SHELBY_2] = @@ -4405,8 +4405,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Shelby2 } + .partySize = ARRAY_COUNT(sParty_Shelby2), + .party = {.NoItemDefaultMoves = sParty_Shelby2}, }, [TRAINER_SHELBY_3] = @@ -4419,8 +4419,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Shelby3 } + .partySize = ARRAY_COUNT(sParty_Shelby3), + .party = {.NoItemDefaultMoves = sParty_Shelby3}, }, [TRAINER_SHELBY_4] = @@ -4433,8 +4433,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Shelby4 } + .partySize = ARRAY_COUNT(sParty_Shelby4), + .party = {.NoItemDefaultMoves = sParty_Shelby4}, }, [TRAINER_SHELBY_5] = @@ -4447,8 +4447,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Shelby5 } + .partySize = ARRAY_COUNT(sParty_Shelby5), + .party = {.NoItemDefaultMoves = sParty_Shelby5}, }, [TRAINER_CALVIN_1] = @@ -4461,8 +4461,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Calvin1 } + .partySize = ARRAY_COUNT(sParty_Calvin1), + .party = {.NoItemDefaultMoves = sParty_Calvin1}, }, [TRAINER_BILLY] = @@ -4475,8 +4475,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Billy } + .partySize = ARRAY_COUNT(sParty_Billy), + .party = {.NoItemDefaultMoves = sParty_Billy}, }, [TRAINER_JOSH] = @@ -4489,8 +4489,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Josh } + .partySize = ARRAY_COUNT(sParty_Josh), + .party = {.NoItemCustomMoves = sParty_Josh}, }, [TRAINER_TOMMY] = @@ -4503,8 +4503,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Tommy } + .partySize = ARRAY_COUNT(sParty_Tommy), + .party = {.NoItemDefaultMoves = sParty_Tommy}, }, [TRAINER_JOEY] = @@ -4517,8 +4517,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Joey } + .partySize = ARRAY_COUNT(sParty_Joey), + .party = {.NoItemDefaultMoves = sParty_Joey}, }, [TRAINER_BEN] = @@ -4531,8 +4531,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Ben } + .partySize = ARRAY_COUNT(sParty_Ben), + .party = {.NoItemCustomMoves = sParty_Ben}, }, [TRAINER_QUINCY] = @@ -4545,8 +4545,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Quincy } + .partySize = ARRAY_COUNT(sParty_Quincy), + .party = {.NoItemCustomMoves = sParty_Quincy}, }, [TRAINER_KATELYNN] = @@ -4559,8 +4559,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Katelynn } + .partySize = ARRAY_COUNT(sParty_Katelynn), + .party = {.NoItemCustomMoves = sParty_Katelynn}, }, [TRAINER_JAYLEN] = @@ -4573,8 +4573,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jaylen } + .partySize = ARRAY_COUNT(sParty_Jaylen), + .party = {.NoItemDefaultMoves = sParty_Jaylen}, }, [TRAINER_DILLON] = @@ -4587,8 +4587,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Dillon } + .partySize = ARRAY_COUNT(sParty_Dillon), + .party = {.NoItemDefaultMoves = sParty_Dillon}, }, [TRAINER_CALVIN_2] = @@ -4601,8 +4601,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Calvin2 } + .partySize = ARRAY_COUNT(sParty_Calvin2), + .party = {.NoItemDefaultMoves = sParty_Calvin2}, }, [TRAINER_CALVIN_3] = @@ -4615,8 +4615,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Calvin3 } + .partySize = ARRAY_COUNT(sParty_Calvin3), + .party = {.NoItemDefaultMoves = sParty_Calvin3}, }, [TRAINER_CALVIN_4] = @@ -4629,8 +4629,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Calvin4 } + .partySize = ARRAY_COUNT(sParty_Calvin4), + .party = {.NoItemDefaultMoves = sParty_Calvin4}, }, [TRAINER_CALVIN_5] = @@ -4643,8 +4643,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Calvin5 } + .partySize = ARRAY_COUNT(sParty_Calvin5), + .party = {.NoItemDefaultMoves = sParty_Calvin5}, }, [TRAINER_EDDIE] = @@ -4657,8 +4657,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Eddie } + .partySize = ARRAY_COUNT(sParty_Eddie), + .party = {.NoItemDefaultMoves = sParty_Eddie}, }, [TRAINER_ALLEN] = @@ -4671,8 +4671,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Allen } + .partySize = ARRAY_COUNT(sParty_Allen), + .party = {.NoItemDefaultMoves = sParty_Allen}, }, [TRAINER_TIMMY] = @@ -4685,8 +4685,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Timmy } + .partySize = ARRAY_COUNT(sParty_Timmy), + .party = {.NoItemDefaultMoves = sParty_Timmy}, }, [TRAINER_WALLACE] = @@ -4699,8 +4699,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_Wallace } + .partySize = ARRAY_COUNT(sParty_Wallace), + .party = {.ItemCustomMoves = sParty_Wallace}, }, [TRAINER_ANDREW] = @@ -4713,8 +4713,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Andrew } + .partySize = ARRAY_COUNT(sParty_Andrew), + .party = {.NoItemDefaultMoves = sParty_Andrew}, }, [TRAINER_IVAN] = @@ -4727,8 +4727,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Ivan } + .partySize = ARRAY_COUNT(sParty_Ivan), + .party = {.NoItemDefaultMoves = sParty_Ivan}, }, [TRAINER_CLAUDE] = @@ -4741,8 +4741,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Claude } + .partySize = ARRAY_COUNT(sParty_Claude), + .party = {.NoItemDefaultMoves = sParty_Claude}, }, [TRAINER_ELLIOT_1] = @@ -4755,8 +4755,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Elliot1 } + .partySize = ARRAY_COUNT(sParty_Elliot1), + .party = {.NoItemDefaultMoves = sParty_Elliot1}, }, [TRAINER_NED] = @@ -4769,8 +4769,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Ned } + .partySize = ARRAY_COUNT(sParty_Ned), + .party = {.NoItemDefaultMoves = sParty_Ned}, }, [TRAINER_DALE] = @@ -4783,8 +4783,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Dale } + .partySize = ARRAY_COUNT(sParty_Dale), + .party = {.NoItemDefaultMoves = sParty_Dale}, }, [TRAINER_NOLAN] = @@ -4797,8 +4797,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Nolan } + .partySize = ARRAY_COUNT(sParty_Nolan), + .party = {.NoItemDefaultMoves = sParty_Nolan}, }, [TRAINER_BARNY] = @@ -4811,8 +4811,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Barny } + .partySize = ARRAY_COUNT(sParty_Barny), + .party = {.NoItemDefaultMoves = sParty_Barny}, }, [TRAINER_WADE] = @@ -4825,8 +4825,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Wade } + .partySize = ARRAY_COUNT(sParty_Wade), + .party = {.NoItemDefaultMoves = sParty_Wade}, }, [TRAINER_CARTER] = @@ -4839,8 +4839,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Carter } + .partySize = ARRAY_COUNT(sParty_Carter), + .party = {.NoItemDefaultMoves = sParty_Carter}, }, [TRAINER_ELLIOT_2] = @@ -4853,8 +4853,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Elliot2 } + .partySize = ARRAY_COUNT(sParty_Elliot2), + .party = {.NoItemDefaultMoves = sParty_Elliot2}, }, [TRAINER_ELLIOT_3] = @@ -4867,8 +4867,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Elliot3 } + .partySize = ARRAY_COUNT(sParty_Elliot3), + .party = {.NoItemDefaultMoves = sParty_Elliot3}, }, [TRAINER_ELLIOT_4] = @@ -4881,8 +4881,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Elliot4 } + .partySize = ARRAY_COUNT(sParty_Elliot4), + .party = {.NoItemDefaultMoves = sParty_Elliot4}, }, [TRAINER_ELLIOT_5] = @@ -4895,8 +4895,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Elliot5 } + .partySize = ARRAY_COUNT(sParty_Elliot5), + .party = {.NoItemDefaultMoves = sParty_Elliot5}, }, [TRAINER_RONALD] = @@ -4909,8 +4909,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Ronald } + .partySize = ARRAY_COUNT(sParty_Ronald), + .party = {.NoItemDefaultMoves = sParty_Ronald}, }, [TRAINER_JACOB] = @@ -4923,8 +4923,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Jacob } + .partySize = ARRAY_COUNT(sParty_Jacob), + .party = {.NoItemDefaultMoves = sParty_Jacob}, }, [TRAINER_ANTHONY] = @@ -4937,8 +4937,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Anthony } + .partySize = ARRAY_COUNT(sParty_Anthony), + .party = {.NoItemDefaultMoves = sParty_Anthony}, }, [TRAINER_BENJAMIN_1] = @@ -4951,8 +4951,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Benjamin1 } + .partySize = ARRAY_COUNT(sParty_Benjamin1), + .party = {.NoItemDefaultMoves = sParty_Benjamin1}, }, [TRAINER_BENJAMIN_2] = @@ -4965,8 +4965,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Benjamin2 } + .partySize = ARRAY_COUNT(sParty_Benjamin2), + .party = {.NoItemDefaultMoves = sParty_Benjamin2}, }, [TRAINER_BENJAMIN_3] = @@ -4979,8 +4979,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Benjamin3 } + .partySize = ARRAY_COUNT(sParty_Benjamin3), + .party = {.NoItemDefaultMoves = sParty_Benjamin3}, }, [TRAINER_BENJAMIN_4] = @@ -4993,8 +4993,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Benjamin4 } + .partySize = ARRAY_COUNT(sParty_Benjamin4), + .party = {.NoItemDefaultMoves = sParty_Benjamin4}, }, [TRAINER_BENJAMIN_5] = @@ -5007,8 +5007,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Benjamin5 } + .partySize = ARRAY_COUNT(sParty_Benjamin5), + .party = {.NoItemDefaultMoves = sParty_Benjamin5}, }, [TRAINER_ABIGAIL_1] = @@ -5021,8 +5021,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Abigail1 } + .partySize = ARRAY_COUNT(sParty_Abigail1), + .party = {.NoItemDefaultMoves = sParty_Abigail1}, }, [TRAINER_JASMINE] = @@ -5035,8 +5035,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Jasmine } + .partySize = ARRAY_COUNT(sParty_Jasmine), + .party = {.NoItemDefaultMoves = sParty_Jasmine}, }, [TRAINER_ABIGAIL_2] = @@ -5049,8 +5049,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Abigail2 } + .partySize = ARRAY_COUNT(sParty_Abigail2), + .party = {.NoItemDefaultMoves = sParty_Abigail2}, }, [TRAINER_ABIGAIL_3] = @@ -5063,8 +5063,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Abigail3 } + .partySize = ARRAY_COUNT(sParty_Abigail3), + .party = {.NoItemDefaultMoves = sParty_Abigail3}, }, [TRAINER_ABIGAIL_4] = @@ -5077,8 +5077,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Abigail4 } + .partySize = ARRAY_COUNT(sParty_Abigail4), + .party = {.NoItemDefaultMoves = sParty_Abigail4}, }, [TRAINER_ABIGAIL_5] = @@ -5091,8 +5091,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Abigail5 } + .partySize = ARRAY_COUNT(sParty_Abigail5), + .party = {.NoItemDefaultMoves = sParty_Abigail5}, }, [TRAINER_DYLAN_1] = @@ -5105,8 +5105,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Dylan1 } + .partySize = ARRAY_COUNT(sParty_Dylan1), + .party = {.NoItemDefaultMoves = sParty_Dylan1}, }, [TRAINER_DYLAN_2] = @@ -5119,8 +5119,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Dylan2 } + .partySize = ARRAY_COUNT(sParty_Dylan2), + .party = {.NoItemDefaultMoves = sParty_Dylan2}, }, [TRAINER_DYLAN_3] = @@ -5133,8 +5133,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Dylan3 } + .partySize = ARRAY_COUNT(sParty_Dylan3), + .party = {.NoItemDefaultMoves = sParty_Dylan3}, }, [TRAINER_DYLAN_4] = @@ -5147,8 +5147,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Dylan4 } + .partySize = ARRAY_COUNT(sParty_Dylan4), + .party = {.NoItemDefaultMoves = sParty_Dylan4}, }, [TRAINER_DYLAN_5] = @@ -5161,8 +5161,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Dylan5 } + .partySize = ARRAY_COUNT(sParty_Dylan5), + .party = {.NoItemDefaultMoves = sParty_Dylan5}, }, [TRAINER_MARIA_1] = @@ -5175,8 +5175,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Maria1 } + .partySize = ARRAY_COUNT(sParty_Maria1), + .party = {.NoItemDefaultMoves = sParty_Maria1}, }, [TRAINER_MARIA_2] = @@ -5189,8 +5189,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Maria2 } + .partySize = ARRAY_COUNT(sParty_Maria2), + .party = {.NoItemDefaultMoves = sParty_Maria2}, }, [TRAINER_MARIA_3] = @@ -5203,8 +5203,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Maria3 } + .partySize = ARRAY_COUNT(sParty_Maria3), + .party = {.NoItemDefaultMoves = sParty_Maria3}, }, [TRAINER_MARIA_4] = @@ -5217,8 +5217,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Maria4 } + .partySize = ARRAY_COUNT(sParty_Maria4), + .party = {.NoItemDefaultMoves = sParty_Maria4}, }, [TRAINER_MARIA_5] = @@ -5231,8 +5231,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Maria5 } + .partySize = ARRAY_COUNT(sParty_Maria5), + .party = {.NoItemDefaultMoves = sParty_Maria5}, }, [TRAINER_CAMDEN] = @@ -5245,8 +5245,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Camden } + .partySize = ARRAY_COUNT(sParty_Camden), + .party = {.NoItemDefaultMoves = sParty_Camden}, }, [TRAINER_DEMETRIUS] = @@ -5259,8 +5259,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Demetrius } + .partySize = ARRAY_COUNT(sParty_Demetrius), + .party = {.NoItemDefaultMoves = sParty_Demetrius}, }, [TRAINER_ISAIAH_1] = @@ -5273,8 +5273,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Isaiah1 } + .partySize = ARRAY_COUNT(sParty_Isaiah1), + .party = {.NoItemDefaultMoves = sParty_Isaiah1}, }, [TRAINER_PABLO_1] = @@ -5287,8 +5287,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Pablo1 } + .partySize = ARRAY_COUNT(sParty_Pablo1), + .party = {.NoItemDefaultMoves = sParty_Pablo1}, }, [TRAINER_CHASE] = @@ -5301,8 +5301,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Chase } + .partySize = ARRAY_COUNT(sParty_Chase), + .party = {.NoItemDefaultMoves = sParty_Chase}, }, [TRAINER_ISAIAH_2] = @@ -5315,8 +5315,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Isaiah2 } + .partySize = ARRAY_COUNT(sParty_Isaiah2), + .party = {.NoItemDefaultMoves = sParty_Isaiah2}, }, [TRAINER_ISAIAH_3] = @@ -5329,8 +5329,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Isaiah3 } + .partySize = ARRAY_COUNT(sParty_Isaiah3), + .party = {.NoItemDefaultMoves = sParty_Isaiah3}, }, [TRAINER_ISAIAH_4] = @@ -5343,8 +5343,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Isaiah4 } + .partySize = ARRAY_COUNT(sParty_Isaiah4), + .party = {.NoItemDefaultMoves = sParty_Isaiah4}, }, [TRAINER_ISAIAH_5] = @@ -5357,8 +5357,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Isaiah5 } + .partySize = ARRAY_COUNT(sParty_Isaiah5), + .party = {.NoItemDefaultMoves = sParty_Isaiah5}, }, [TRAINER_ISOBEL] = @@ -5371,8 +5371,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Isobel } + .partySize = ARRAY_COUNT(sParty_Isobel), + .party = {.NoItemDefaultMoves = sParty_Isobel}, }, [TRAINER_DONNY] = @@ -5385,8 +5385,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Donny } + .partySize = ARRAY_COUNT(sParty_Donny), + .party = {.NoItemDefaultMoves = sParty_Donny}, }, [TRAINER_TALIA] = @@ -5399,8 +5399,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Talia } + .partySize = ARRAY_COUNT(sParty_Talia), + .party = {.NoItemDefaultMoves = sParty_Talia}, }, [TRAINER_KATELYN_1] = @@ -5413,8 +5413,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Katelyn1 } + .partySize = ARRAY_COUNT(sParty_Katelyn1), + .party = {.NoItemDefaultMoves = sParty_Katelyn1}, }, [TRAINER_ALLISON] = @@ -5427,8 +5427,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Allison } + .partySize = ARRAY_COUNT(sParty_Allison), + .party = {.NoItemDefaultMoves = sParty_Allison}, }, [TRAINER_KATELYN_2] = @@ -5441,8 +5441,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Katelyn2 } + .partySize = ARRAY_COUNT(sParty_Katelyn2), + .party = {.NoItemDefaultMoves = sParty_Katelyn2}, }, [TRAINER_KATELYN_3] = @@ -5455,8 +5455,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Katelyn3 } + .partySize = ARRAY_COUNT(sParty_Katelyn3), + .party = {.NoItemDefaultMoves = sParty_Katelyn3}, }, [TRAINER_KATELYN_4] = @@ -5469,8 +5469,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Katelyn4 } + .partySize = ARRAY_COUNT(sParty_Katelyn4), + .party = {.NoItemDefaultMoves = sParty_Katelyn4}, }, [TRAINER_KATELYN_5] = @@ -5483,8 +5483,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Katelyn5 } + .partySize = ARRAY_COUNT(sParty_Katelyn5), + .party = {.NoItemDefaultMoves = sParty_Katelyn5}, }, [TRAINER_NICOLAS_1] = @@ -5497,8 +5497,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Nicolas1 } + .partySize = ARRAY_COUNT(sParty_Nicolas1), + .party = {.NoItemDefaultMoves = sParty_Nicolas1}, }, [TRAINER_NICOLAS_2] = @@ -5511,8 +5511,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Nicolas2 } + .partySize = ARRAY_COUNT(sParty_Nicolas2), + .party = {.NoItemDefaultMoves = sParty_Nicolas2}, }, [TRAINER_NICOLAS_3] = @@ -5525,8 +5525,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Nicolas3 } + .partySize = ARRAY_COUNT(sParty_Nicolas3), + .party = {.NoItemDefaultMoves = sParty_Nicolas3}, }, [TRAINER_NICOLAS_4] = @@ -5539,8 +5539,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Nicolas4 } + .partySize = ARRAY_COUNT(sParty_Nicolas4), + .party = {.NoItemDefaultMoves = sParty_Nicolas4}, }, [TRAINER_NICOLAS_5] = @@ -5553,8 +5553,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.ItemDefaultMoves = sParty_Nicolas5 } + .partySize = ARRAY_COUNT(sParty_Nicolas5), + .party = {.ItemDefaultMoves = sParty_Nicolas5}, }, [TRAINER_AARON] = @@ -5567,8 +5567,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Aaron } + .partySize = ARRAY_COUNT(sParty_Aaron), + .party = {.NoItemCustomMoves = sParty_Aaron}, }, [TRAINER_PERRY] = @@ -5581,8 +5581,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Perry } + .partySize = ARRAY_COUNT(sParty_Perry), + .party = {.NoItemDefaultMoves = sParty_Perry}, }, [TRAINER_HUGH] = @@ -5595,8 +5595,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Hugh } + .partySize = ARRAY_COUNT(sParty_Hugh), + .party = {.NoItemDefaultMoves = sParty_Hugh}, }, [TRAINER_PHIL] = @@ -5609,8 +5609,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Phil } + .partySize = ARRAY_COUNT(sParty_Phil), + .party = {.NoItemDefaultMoves = sParty_Phil}, }, [TRAINER_JARED] = @@ -5623,8 +5623,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Jared } + .partySize = ARRAY_COUNT(sParty_Jared), + .party = {.NoItemDefaultMoves = sParty_Jared}, }, [TRAINER_HUMBERTO] = @@ -5637,8 +5637,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Humberto } + .partySize = ARRAY_COUNT(sParty_Humberto), + .party = {.NoItemDefaultMoves = sParty_Humberto}, }, [TRAINER_PRESLEY] = @@ -5651,8 +5651,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Presley } + .partySize = ARRAY_COUNT(sParty_Presley), + .party = {.NoItemDefaultMoves = sParty_Presley}, }, [TRAINER_EDWARDO] = @@ -5665,8 +5665,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Edwardo } + .partySize = ARRAY_COUNT(sParty_Edwardo), + .party = {.NoItemDefaultMoves = sParty_Edwardo}, }, [TRAINER_COLIN] = @@ -5679,8 +5679,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Colin } + .partySize = ARRAY_COUNT(sParty_Colin), + .party = {.NoItemDefaultMoves = sParty_Colin}, }, [TRAINER_ROBERT_1] = @@ -5693,8 +5693,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Robert1 } + .partySize = ARRAY_COUNT(sParty_Robert1), + .party = {.NoItemDefaultMoves = sParty_Robert1}, }, [TRAINER_BENNY] = @@ -5707,8 +5707,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Benny } + .partySize = ARRAY_COUNT(sParty_Benny), + .party = {.NoItemDefaultMoves = sParty_Benny}, }, [TRAINER_CHESTER] = @@ -5721,8 +5721,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Chester } + .partySize = ARRAY_COUNT(sParty_Chester), + .party = {.NoItemDefaultMoves = sParty_Chester}, }, [TRAINER_ROBERT_2] = @@ -5735,8 +5735,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Robert2 } + .partySize = ARRAY_COUNT(sParty_Robert2), + .party = {.NoItemDefaultMoves = sParty_Robert2}, }, [TRAINER_ROBERT_3] = @@ -5749,8 +5749,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Robert3 } + .partySize = ARRAY_COUNT(sParty_Robert3), + .party = {.NoItemDefaultMoves = sParty_Robert3}, }, [TRAINER_ROBERT_4] = @@ -5763,8 +5763,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Robert4 } + .partySize = ARRAY_COUNT(sParty_Robert4), + .party = {.NoItemDefaultMoves = sParty_Robert4}, }, [TRAINER_ROBERT_5] = @@ -5777,8 +5777,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Robert5 } + .partySize = ARRAY_COUNT(sParty_Robert5), + .party = {.NoItemDefaultMoves = sParty_Robert5}, }, [TRAINER_ALEX] = @@ -5791,8 +5791,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Alex } + .partySize = ARRAY_COUNT(sParty_Alex), + .party = {.NoItemDefaultMoves = sParty_Alex}, }, [TRAINER_BECK] = @@ -5805,8 +5805,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Beck } + .partySize = ARRAY_COUNT(sParty_Beck), + .party = {.NoItemDefaultMoves = sParty_Beck}, }, [TRAINER_YASU] = @@ -5819,8 +5819,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Yasu } + .partySize = ARRAY_COUNT(sParty_Yasu), + .party = {.NoItemDefaultMoves = sParty_Yasu}, }, [TRAINER_TAKASHI] = @@ -5833,8 +5833,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Takashi } + .partySize = ARRAY_COUNT(sParty_Takashi), + .party = {.NoItemDefaultMoves = sParty_Takashi}, }, [TRAINER_DIANNE] = @@ -5847,8 +5847,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 2, - .party = {.ItemCustomMoves = sParty_Dianne } + .partySize = ARRAY_COUNT(sParty_Dianne), + .party = {.ItemCustomMoves = sParty_Dianne}, }, [TRAINER_JANI] = @@ -5861,8 +5861,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jani } + .partySize = ARRAY_COUNT(sParty_Jani), + .party = {.NoItemDefaultMoves = sParty_Jani}, }, [TRAINER_LAO_1] = @@ -5875,8 +5875,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 3, - .party = {.NoItemCustomMoves = sParty_Lao1 } + .partySize = ARRAY_COUNT(sParty_Lao1), + .party = {.NoItemCustomMoves = sParty_Lao1}, }, [TRAINER_LUNG] = @@ -5889,8 +5889,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Lung } + .partySize = ARRAY_COUNT(sParty_Lung), + .party = {.NoItemDefaultMoves = sParty_Lung}, }, [TRAINER_LAO_2] = @@ -5903,8 +5903,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 4, - .party = {.NoItemCustomMoves = sParty_Lao2 } + .partySize = ARRAY_COUNT(sParty_Lao2), + .party = {.NoItemCustomMoves = sParty_Lao2}, }, [TRAINER_LAO_3] = @@ -5917,8 +5917,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 4, - .party = {.NoItemCustomMoves = sParty_Lao3 } + .partySize = ARRAY_COUNT(sParty_Lao3), + .party = {.NoItemCustomMoves = sParty_Lao3}, }, [TRAINER_LAO_4] = @@ -5931,8 +5931,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 4, - .party = {.NoItemCustomMoves = sParty_Lao4 } + .partySize = ARRAY_COUNT(sParty_Lao4), + .party = {.NoItemCustomMoves = sParty_Lao4}, }, [TRAINER_LAO_5] = @@ -5945,8 +5945,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 4, - .party = {.ItemCustomMoves = sParty_Lao5 } + .partySize = ARRAY_COUNT(sParty_Lao5), + .party = {.ItemCustomMoves = sParty_Lao5}, }, [TRAINER_JOCELYN] = @@ -5959,8 +5959,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jocelyn } + .partySize = ARRAY_COUNT(sParty_Jocelyn), + .party = {.NoItemDefaultMoves = sParty_Jocelyn}, }, [TRAINER_LAURA] = @@ -5973,8 +5973,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Laura } + .partySize = ARRAY_COUNT(sParty_Laura), + .party = {.NoItemDefaultMoves = sParty_Laura}, }, [TRAINER_CYNDY_1] = @@ -5987,8 +5987,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Cyndy1 } + .partySize = ARRAY_COUNT(sParty_Cyndy1), + .party = {.NoItemDefaultMoves = sParty_Cyndy1}, }, [TRAINER_CORA] = @@ -6001,8 +6001,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Cora } + .partySize = ARRAY_COUNT(sParty_Cora), + .party = {.NoItemDefaultMoves = sParty_Cora}, }, [TRAINER_PAULA] = @@ -6015,8 +6015,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Paula } + .partySize = ARRAY_COUNT(sParty_Paula), + .party = {.NoItemDefaultMoves = sParty_Paula}, }, [TRAINER_CYNDY_2] = @@ -6029,8 +6029,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Cyndy2 } + .partySize = ARRAY_COUNT(sParty_Cyndy2), + .party = {.NoItemDefaultMoves = sParty_Cyndy2}, }, [TRAINER_CYNDY_3] = @@ -6043,8 +6043,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Cyndy3 } + .partySize = ARRAY_COUNT(sParty_Cyndy3), + .party = {.NoItemDefaultMoves = sParty_Cyndy3}, }, [TRAINER_CYNDY_4] = @@ -6057,8 +6057,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Cyndy4 } + .partySize = ARRAY_COUNT(sParty_Cyndy4), + .party = {.NoItemDefaultMoves = sParty_Cyndy4}, }, [TRAINER_CYNDY_5] = @@ -6071,8 +6071,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Cyndy5 } + .partySize = ARRAY_COUNT(sParty_Cyndy5), + .party = {.NoItemDefaultMoves = sParty_Cyndy5}, }, [TRAINER_MADELINE_1] = @@ -6085,8 +6085,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Madeline1 } + .partySize = ARRAY_COUNT(sParty_Madeline1), + .party = {.NoItemCustomMoves = sParty_Madeline1}, }, [TRAINER_CLARISSA] = @@ -6099,8 +6099,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Clarissa } + .partySize = ARRAY_COUNT(sParty_Clarissa), + .party = {.NoItemDefaultMoves = sParty_Clarissa}, }, [TRAINER_ANGELICA] = @@ -6113,8 +6113,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Angelica } + .partySize = ARRAY_COUNT(sParty_Angelica), + .party = {.NoItemCustomMoves = sParty_Angelica}, }, [TRAINER_MADELINE_2] = @@ -6127,8 +6127,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Madeline2 } + .partySize = ARRAY_COUNT(sParty_Madeline2), + .party = {.NoItemCustomMoves = sParty_Madeline2}, }, [TRAINER_MADELINE_3] = @@ -6141,8 +6141,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Madeline3 } + .partySize = ARRAY_COUNT(sParty_Madeline3), + .party = {.NoItemCustomMoves = sParty_Madeline3}, }, [TRAINER_MADELINE_4] = @@ -6155,8 +6155,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Madeline4 } + .partySize = ARRAY_COUNT(sParty_Madeline4), + .party = {.NoItemCustomMoves = sParty_Madeline4}, }, [TRAINER_MADELINE_5] = @@ -6169,8 +6169,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Madeline5 } + .partySize = ARRAY_COUNT(sParty_Madeline5), + .party = {.NoItemCustomMoves = sParty_Madeline5}, }, [TRAINER_BEVERLY] = @@ -6183,8 +6183,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Beverly } + .partySize = ARRAY_COUNT(sParty_Beverly), + .party = {.NoItemDefaultMoves = sParty_Beverly}, }, [TRAINER_IMANI] = @@ -6197,8 +6197,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Imani } + .partySize = ARRAY_COUNT(sParty_Imani), + .party = {.NoItemDefaultMoves = sParty_Imani}, }, [TRAINER_KYLA] = @@ -6211,8 +6211,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Kyla } + .partySize = ARRAY_COUNT(sParty_Kyla), + .party = {.NoItemDefaultMoves = sParty_Kyla}, }, [TRAINER_DENISE] = @@ -6225,8 +6225,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Denise } + .partySize = ARRAY_COUNT(sParty_Denise), + .party = {.NoItemDefaultMoves = sParty_Denise}, }, [TRAINER_BETH] = @@ -6239,8 +6239,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Beth } + .partySize = ARRAY_COUNT(sParty_Beth), + .party = {.NoItemDefaultMoves = sParty_Beth}, }, [TRAINER_TARA] = @@ -6253,8 +6253,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Tara } + .partySize = ARRAY_COUNT(sParty_Tara), + .party = {.NoItemDefaultMoves = sParty_Tara}, }, [TRAINER_MISSY] = @@ -6267,8 +6267,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Missy } + .partySize = ARRAY_COUNT(sParty_Missy), + .party = {.NoItemDefaultMoves = sParty_Missy}, }, [TRAINER_ALICE] = @@ -6281,8 +6281,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Alice } + .partySize = ARRAY_COUNT(sParty_Alice), + .party = {.NoItemDefaultMoves = sParty_Alice}, }, [TRAINER_JENNY_1] = @@ -6295,8 +6295,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jenny1 } + .partySize = ARRAY_COUNT(sParty_Jenny1), + .party = {.NoItemDefaultMoves = sParty_Jenny1}, }, [TRAINER_GRACE] = @@ -6309,8 +6309,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grace } + .partySize = ARRAY_COUNT(sParty_Grace), + .party = {.NoItemDefaultMoves = sParty_Grace}, }, [TRAINER_TANYA] = @@ -6323,8 +6323,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Tanya } + .partySize = ARRAY_COUNT(sParty_Tanya), + .party = {.NoItemDefaultMoves = sParty_Tanya}, }, [TRAINER_SHARON] = @@ -6337,8 +6337,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Sharon } + .partySize = ARRAY_COUNT(sParty_Sharon), + .party = {.NoItemDefaultMoves = sParty_Sharon}, }, [TRAINER_NIKKI] = @@ -6351,8 +6351,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Nikki } + .partySize = ARRAY_COUNT(sParty_Nikki), + .party = {.NoItemDefaultMoves = sParty_Nikki}, }, [TRAINER_BRENDA] = @@ -6365,8 +6365,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Brenda } + .partySize = ARRAY_COUNT(sParty_Brenda), + .party = {.NoItemDefaultMoves = sParty_Brenda}, }, [TRAINER_KATIE] = @@ -6379,8 +6379,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Katie } + .partySize = ARRAY_COUNT(sParty_Katie), + .party = {.NoItemDefaultMoves = sParty_Katie}, }, [TRAINER_SUSIE] = @@ -6393,8 +6393,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Susie } + .partySize = ARRAY_COUNT(sParty_Susie), + .party = {.NoItemDefaultMoves = sParty_Susie}, }, [TRAINER_KARA] = @@ -6407,8 +6407,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Kara } + .partySize = ARRAY_COUNT(sParty_Kara), + .party = {.NoItemDefaultMoves = sParty_Kara}, }, [TRAINER_DANA] = @@ -6421,8 +6421,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Dana } + .partySize = ARRAY_COUNT(sParty_Dana), + .party = {.NoItemDefaultMoves = sParty_Dana}, }, [TRAINER_SIENNA] = @@ -6435,8 +6435,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Sienna } + .partySize = ARRAY_COUNT(sParty_Sienna), + .party = {.NoItemDefaultMoves = sParty_Sienna}, }, [TRAINER_DEBRA] = @@ -6449,8 +6449,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Debra } + .partySize = ARRAY_COUNT(sParty_Debra), + .party = {.NoItemDefaultMoves = sParty_Debra}, }, [TRAINER_LINDA] = @@ -6463,8 +6463,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Linda } + .partySize = ARRAY_COUNT(sParty_Linda), + .party = {.NoItemDefaultMoves = sParty_Linda}, }, [TRAINER_KAYLEE] = @@ -6477,8 +6477,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Kaylee } + .partySize = ARRAY_COUNT(sParty_Kaylee), + .party = {.NoItemDefaultMoves = sParty_Kaylee}, }, [TRAINER_LAUREL] = @@ -6491,8 +6491,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Laurel } + .partySize = ARRAY_COUNT(sParty_Laurel), + .party = {.NoItemDefaultMoves = sParty_Laurel}, }, [TRAINER_CARLEE] = @@ -6505,8 +6505,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Carlee } + .partySize = ARRAY_COUNT(sParty_Carlee), + .party = {.NoItemDefaultMoves = sParty_Carlee}, }, [TRAINER_JENNY_2] = @@ -6519,8 +6519,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jenny2 } + .partySize = ARRAY_COUNT(sParty_Jenny2), + .party = {.NoItemDefaultMoves = sParty_Jenny2}, }, [TRAINER_JENNY_3] = @@ -6533,8 +6533,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jenny3 } + .partySize = ARRAY_COUNT(sParty_Jenny3), + .party = {.NoItemDefaultMoves = sParty_Jenny3}, }, [TRAINER_JENNY_4] = @@ -6547,8 +6547,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Jenny4 } + .partySize = ARRAY_COUNT(sParty_Jenny4), + .party = {.NoItemDefaultMoves = sParty_Jenny4}, }, [TRAINER_JENNY_5] = @@ -6561,8 +6561,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Jenny5 } + .partySize = ARRAY_COUNT(sParty_Jenny5), + .party = {.NoItemDefaultMoves = sParty_Jenny5}, }, [TRAINER_HEIDI] = @@ -6575,8 +6575,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Heidi } + .partySize = ARRAY_COUNT(sParty_Heidi), + .party = {.NoItemCustomMoves = sParty_Heidi}, }, [TRAINER_BECKY] = @@ -6589,8 +6589,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Becky } + .partySize = ARRAY_COUNT(sParty_Becky), + .party = {.NoItemCustomMoves = sParty_Becky}, }, [TRAINER_CAROL] = @@ -6603,8 +6603,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Carol } + .partySize = ARRAY_COUNT(sParty_Carol), + .party = {.NoItemDefaultMoves = sParty_Carol}, }, [TRAINER_NANCY] = @@ -6617,8 +6617,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Nancy } + .partySize = ARRAY_COUNT(sParty_Nancy), + .party = {.NoItemDefaultMoves = sParty_Nancy}, }, [TRAINER_MARTHA] = @@ -6631,8 +6631,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Martha } + .partySize = ARRAY_COUNT(sParty_Martha), + .party = {.NoItemDefaultMoves = sParty_Martha}, }, [TRAINER_DIANA_1] = @@ -6645,8 +6645,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Diana1 } + .partySize = ARRAY_COUNT(sParty_Diana1), + .party = {.NoItemDefaultMoves = sParty_Diana1}, }, [TRAINER_CEDRIC] = @@ -6659,8 +6659,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Cedric } + .partySize = ARRAY_COUNT(sParty_Cedric), + .party = {.NoItemCustomMoves = sParty_Cedric}, }, [TRAINER_IRENE] = @@ -6673,8 +6673,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Irene } + .partySize = ARRAY_COUNT(sParty_Irene), + .party = {.NoItemDefaultMoves = sParty_Irene}, }, [TRAINER_DIANA_2] = @@ -6687,8 +6687,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Diana2 } + .partySize = ARRAY_COUNT(sParty_Diana2), + .party = {.NoItemDefaultMoves = sParty_Diana2}, }, [TRAINER_DIANA_3] = @@ -6701,8 +6701,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Diana3 } + .partySize = ARRAY_COUNT(sParty_Diana3), + .party = {.NoItemDefaultMoves = sParty_Diana3}, }, [TRAINER_DIANA_4] = @@ -6715,8 +6715,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Diana4 } + .partySize = ARRAY_COUNT(sParty_Diana4), + .party = {.NoItemDefaultMoves = sParty_Diana4}, }, [TRAINER_DIANA_5] = @@ -6729,8 +6729,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Diana5 } + .partySize = ARRAY_COUNT(sParty_Diana5), + .party = {.NoItemDefaultMoves = sParty_Diana5}, }, [TRAINER_AMY_AND_LIV_1] = @@ -6743,8 +6743,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_AmyAndLiv1 } + .partySize = ARRAY_COUNT(sParty_AmyAndLiv1), + .party = {.NoItemDefaultMoves = sParty_AmyAndLiv1}, }, [TRAINER_AMY_AND_LIV_2] = @@ -6757,8 +6757,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_AmyAndLiv2 } + .partySize = ARRAY_COUNT(sParty_AmyAndLiv2), + .party = {.NoItemDefaultMoves = sParty_AmyAndLiv2}, }, [TRAINER_GINA_AND_MIA_1] = @@ -6771,8 +6771,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_GinaAndMia1 } + .partySize = ARRAY_COUNT(sParty_GinaAndMia1), + .party = {.NoItemDefaultMoves = sParty_GinaAndMia1}, }, [TRAINER_MIU_AND_YUKI] = @@ -6785,8 +6785,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_MiuAndYuki } + .partySize = ARRAY_COUNT(sParty_MiuAndYuki), + .party = {.NoItemDefaultMoves = sParty_MiuAndYuki}, }, [TRAINER_AMY_AND_LIV_3] = @@ -6799,8 +6799,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_AmyAndLiv3 } + .partySize = ARRAY_COUNT(sParty_AmyAndLiv3), + .party = {.NoItemDefaultMoves = sParty_AmyAndLiv3}, }, [TRAINER_GINA_AND_MIA_2] = @@ -6813,8 +6813,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_GinaAndMia2 } + .partySize = ARRAY_COUNT(sParty_GinaAndMia2), + .party = {.NoItemCustomMoves = sParty_GinaAndMia2}, }, [TRAINER_AMY_AND_LIV_4] = @@ -6827,8 +6827,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_AmyAndLiv4 } + .partySize = ARRAY_COUNT(sParty_AmyAndLiv4), + .party = {.NoItemDefaultMoves = sParty_AmyAndLiv4}, }, [TRAINER_AMY_AND_LIV_5] = @@ -6841,8 +6841,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_AmyAndLiv5 } + .partySize = ARRAY_COUNT(sParty_AmyAndLiv5), + .party = {.NoItemCustomMoves = sParty_AmyAndLiv5}, }, [TRAINER_AMY_AND_LIV_6] = @@ -6855,8 +6855,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_AmyAndLiv6 } + .partySize = ARRAY_COUNT(sParty_AmyAndLiv6), + .party = {.NoItemCustomMoves = sParty_AmyAndLiv6}, }, [TRAINER_HUEY] = @@ -6869,8 +6869,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Huey } + .partySize = ARRAY_COUNT(sParty_Huey), + .party = {.NoItemDefaultMoves = sParty_Huey}, }, [TRAINER_EDMOND] = @@ -6883,8 +6883,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Edmond } + .partySize = ARRAY_COUNT(sParty_Edmond), + .party = {.NoItemDefaultMoves = sParty_Edmond}, }, [TRAINER_ERNEST_1] = @@ -6897,8 +6897,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Ernest1 } + .partySize = ARRAY_COUNT(sParty_Ernest1), + .party = {.NoItemDefaultMoves = sParty_Ernest1}, }, [TRAINER_DWAYNE] = @@ -6911,8 +6911,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Dwayne } + .partySize = ARRAY_COUNT(sParty_Dwayne), + .party = {.NoItemDefaultMoves = sParty_Dwayne}, }, [TRAINER_PHILLIP] = @@ -6925,8 +6925,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Phillip } + .partySize = ARRAY_COUNT(sParty_Phillip), + .party = {.NoItemDefaultMoves = sParty_Phillip}, }, [TRAINER_LEONARD] = @@ -6939,8 +6939,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Leonard } + .partySize = ARRAY_COUNT(sParty_Leonard), + .party = {.NoItemDefaultMoves = sParty_Leonard}, }, [TRAINER_DUNCAN] = @@ -6953,8 +6953,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Duncan } + .partySize = ARRAY_COUNT(sParty_Duncan), + .party = {.NoItemDefaultMoves = sParty_Duncan}, }, [TRAINER_ERNEST_2] = @@ -6967,8 +6967,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Ernest2 } + .partySize = ARRAY_COUNT(sParty_Ernest2), + .party = {.NoItemDefaultMoves = sParty_Ernest2}, }, [TRAINER_ERNEST_3] = @@ -6981,8 +6981,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Ernest3 } + .partySize = ARRAY_COUNT(sParty_Ernest3), + .party = {.NoItemDefaultMoves = sParty_Ernest3}, }, [TRAINER_ERNEST_4] = @@ -6995,8 +6995,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Ernest4 } + .partySize = ARRAY_COUNT(sParty_Ernest4), + .party = {.NoItemDefaultMoves = sParty_Ernest4}, }, [TRAINER_ERNEST_5] = @@ -7009,8 +7009,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Ernest5 } + .partySize = ARRAY_COUNT(sParty_Ernest5), + .party = {.NoItemDefaultMoves = sParty_Ernest5}, }, [TRAINER_ELI] = @@ -7023,8 +7023,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Eli } + .partySize = ARRAY_COUNT(sParty_Eli), + .party = {.NoItemDefaultMoves = sParty_Eli}, }, [TRAINER_ANNIKA] = @@ -7037,22 +7037,22 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.ItemCustomMoves = sParty_Annika } + .partySize = ARRAY_COUNT(sParty_Annika), + .party = {.ItemCustomMoves = sParty_Annika}, }, [TRAINER_JAZMYN] = { .partyFlags = 0, - .trainerClass = TRAINER_CLASS_COOLTRAINER_UNUSED, + .trainerClass = TRAINER_CLASS_COOLTRAINER_2, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_COOL, .trainerPic = TRAINER_PIC_COOLTRAINER_F, .trainerName = _("JAZMYN"), .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jazmyn } + .partySize = ARRAY_COUNT(sParty_Jazmyn), + .party = {.NoItemDefaultMoves = sParty_Jazmyn}, }, [TRAINER_JONAS] = @@ -7065,8 +7065,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Jonas } + .partySize = ARRAY_COUNT(sParty_Jonas), + .party = {.NoItemCustomMoves = sParty_Jonas}, }, [TRAINER_KAYLEY] = @@ -7079,8 +7079,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Kayley } + .partySize = ARRAY_COUNT(sParty_Kayley), + .party = {.NoItemCustomMoves = sParty_Kayley}, }, [TRAINER_AURON] = @@ -7093,8 +7093,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Auron } + .partySize = ARRAY_COUNT(sParty_Auron), + .party = {.NoItemDefaultMoves = sParty_Auron}, }, [TRAINER_KELVIN] = @@ -7107,8 +7107,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Kelvin } + .partySize = ARRAY_COUNT(sParty_Kelvin), + .party = {.NoItemDefaultMoves = sParty_Kelvin}, }, [TRAINER_MARLEY] = @@ -7121,8 +7121,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.ItemCustomMoves = sParty_Marley } + .partySize = ARRAY_COUNT(sParty_Marley), + .party = {.ItemCustomMoves = sParty_Marley}, }, [TRAINER_REYNA] = @@ -7135,8 +7135,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Reyna } + .partySize = ARRAY_COUNT(sParty_Reyna), + .party = {.NoItemDefaultMoves = sParty_Reyna}, }, [TRAINER_HUDSON] = @@ -7149,8 +7149,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Hudson } + .partySize = ARRAY_COUNT(sParty_Hudson), + .party = {.NoItemDefaultMoves = sParty_Hudson}, }, [TRAINER_CONOR] = @@ -7163,8 +7163,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Conor } + .partySize = ARRAY_COUNT(sParty_Conor), + .party = {.NoItemDefaultMoves = sParty_Conor}, }, [TRAINER_EDWIN_1] = @@ -7177,8 +7177,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Edwin1 } + .partySize = ARRAY_COUNT(sParty_Edwin1), + .party = {.NoItemDefaultMoves = sParty_Edwin1}, }, [TRAINER_HECTOR] = @@ -7191,8 +7191,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Hector } + .partySize = ARRAY_COUNT(sParty_Hector), + .party = {.NoItemDefaultMoves = sParty_Hector}, }, [TRAINER_TABITHA_1] = @@ -7205,8 +7205,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Tabitha1 } + .partySize = ARRAY_COUNT(sParty_Tabitha1), + .party = {.NoItemDefaultMoves = sParty_Tabitha1}, }, [TRAINER_EDWIN_2] = @@ -7219,8 +7219,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Edwin2 } + .partySize = ARRAY_COUNT(sParty_Edwin2), + .party = {.NoItemDefaultMoves = sParty_Edwin2}, }, [TRAINER_EDWIN_3] = @@ -7233,8 +7233,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Edwin3 } + .partySize = ARRAY_COUNT(sParty_Edwin3), + .party = {.NoItemDefaultMoves = sParty_Edwin3}, }, [TRAINER_EDWIN_4] = @@ -7247,8 +7247,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Edwin4 } + .partySize = ARRAY_COUNT(sParty_Edwin4), + .party = {.NoItemDefaultMoves = sParty_Edwin4}, }, [TRAINER_EDWIN_5] = @@ -7261,8 +7261,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Edwin5 } + .partySize = ARRAY_COUNT(sParty_Edwin5), + .party = {.NoItemDefaultMoves = sParty_Edwin5}, }, [TRAINER_WALLY_1] = @@ -7275,8 +7275,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.NoItemCustomMoves = sParty_Wally1 } + .partySize = ARRAY_COUNT(sParty_Wally1), + .party = {.NoItemCustomMoves = sParty_Wally1}, }, [TRAINER_BRENDAN_1] = @@ -7289,8 +7289,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Brendan1 } + .partySize = ARRAY_COUNT(sParty_Brendan1), + .party = {.NoItemDefaultMoves = sParty_Brendan1}, }, [TRAINER_BRENDAN_2] = @@ -7303,8 +7303,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Brendan2 } + .partySize = ARRAY_COUNT(sParty_Brendan2), + .party = {.NoItemDefaultMoves = sParty_Brendan2}, }, [TRAINER_BRENDAN_3] = @@ -7317,8 +7317,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Brendan3 } + .partySize = ARRAY_COUNT(sParty_Brendan3), + .party = {.NoItemDefaultMoves = sParty_Brendan3}, }, [TRAINER_BRENDAN_4] = @@ -7331,8 +7331,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Brendan4 } + .partySize = ARRAY_COUNT(sParty_Brendan4), + .party = {.NoItemDefaultMoves = sParty_Brendan4}, }, [TRAINER_BRENDAN_5] = @@ -7345,8 +7345,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Brendan5 } + .partySize = ARRAY_COUNT(sParty_Brendan5), + .party = {.NoItemDefaultMoves = sParty_Brendan5}, }, [TRAINER_BRENDAN_6] = @@ -7359,8 +7359,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Brendan6 } + .partySize = ARRAY_COUNT(sParty_Brendan6), + .party = {.NoItemDefaultMoves = sParty_Brendan6}, }, [TRAINER_BRENDAN_7] = @@ -7373,8 +7373,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Brendan7 } + .partySize = ARRAY_COUNT(sParty_Brendan7), + .party = {.NoItemDefaultMoves = sParty_Brendan7}, }, [TRAINER_BRENDAN_8] = @@ -7387,8 +7387,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Brendan8 } + .partySize = ARRAY_COUNT(sParty_Brendan8), + .party = {.NoItemDefaultMoves = sParty_Brendan8}, }, [TRAINER_BRENDAN_9] = @@ -7401,8 +7401,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Brendan9 } + .partySize = ARRAY_COUNT(sParty_Brendan9), + .party = {.NoItemDefaultMoves = sParty_Brendan9}, }, [TRAINER_MAY_1] = @@ -7415,8 +7415,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_May1 } + .partySize = ARRAY_COUNT(sParty_May1), + .party = {.NoItemDefaultMoves = sParty_May1}, }, [TRAINER_MAY_2] = @@ -7429,8 +7429,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_May2 } + .partySize = ARRAY_COUNT(sParty_May2), + .party = {.NoItemDefaultMoves = sParty_May2}, }, [TRAINER_MAY_3] = @@ -7443,8 +7443,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_May3 } + .partySize = ARRAY_COUNT(sParty_May3), + .party = {.NoItemDefaultMoves = sParty_May3}, }, [TRAINER_MAY_4] = @@ -7457,8 +7457,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_May4 } + .partySize = ARRAY_COUNT(sParty_May4), + .party = {.NoItemDefaultMoves = sParty_May4}, }, [TRAINER_MAY_5] = @@ -7471,8 +7471,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_May5 } + .partySize = ARRAY_COUNT(sParty_May5), + .party = {.NoItemDefaultMoves = sParty_May5}, }, [TRAINER_MAY_6] = @@ -7485,8 +7485,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_May6 } + .partySize = ARRAY_COUNT(sParty_May6), + .party = {.NoItemDefaultMoves = sParty_May6}, }, [TRAINER_MAY_7] = @@ -7499,8 +7499,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_May7 } + .partySize = ARRAY_COUNT(sParty_May7), + .party = {.NoItemDefaultMoves = sParty_May7}, }, [TRAINER_MAY_8] = @@ -7513,8 +7513,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_May8 } + .partySize = ARRAY_COUNT(sParty_May8), + .party = {.NoItemDefaultMoves = sParty_May8}, }, [TRAINER_MAY_9] = @@ -7527,8 +7527,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_May9 } + .partySize = ARRAY_COUNT(sParty_May9), + .party = {.NoItemDefaultMoves = sParty_May9}, }, [TRAINER_ISAAC_1] = @@ -7541,8 +7541,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Isaac1 } + .partySize = ARRAY_COUNT(sParty_Isaac1), + .party = {.NoItemDefaultMoves = sParty_Isaac1}, }, [TRAINER_DAVIS] = @@ -7555,8 +7555,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Davis } + .partySize = ARRAY_COUNT(sParty_Davis), + .party = {.NoItemDefaultMoves = sParty_Davis}, }, [TRAINER_MITCHELL] = @@ -7569,8 +7569,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Mitchell } + .partySize = ARRAY_COUNT(sParty_Mitchell), + .party = {.NoItemCustomMoves = sParty_Mitchell}, }, [TRAINER_ISAAC_2] = @@ -7583,8 +7583,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Isaac2 } + .partySize = ARRAY_COUNT(sParty_Isaac2), + .party = {.NoItemDefaultMoves = sParty_Isaac2}, }, [TRAINER_ISAAC_3] = @@ -7597,8 +7597,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Isaac3 } + .partySize = ARRAY_COUNT(sParty_Isaac3), + .party = {.NoItemDefaultMoves = sParty_Isaac3}, }, [TRAINER_ISAAC_4] = @@ -7611,8 +7611,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Isaac4 } + .partySize = ARRAY_COUNT(sParty_Isaac4), + .party = {.NoItemDefaultMoves = sParty_Isaac4}, }, [TRAINER_ISAAC_5] = @@ -7625,8 +7625,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Isaac5 } + .partySize = ARRAY_COUNT(sParty_Isaac5), + .party = {.NoItemDefaultMoves = sParty_Isaac5}, }, [TRAINER_LYDIA_1] = @@ -7639,8 +7639,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Lydia1 } + .partySize = ARRAY_COUNT(sParty_Lydia1), + .party = {.NoItemDefaultMoves = sParty_Lydia1}, }, [TRAINER_HALLE] = @@ -7653,8 +7653,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Halle } + .partySize = ARRAY_COUNT(sParty_Halle), + .party = {.NoItemDefaultMoves = sParty_Halle}, }, [TRAINER_GARRISON] = @@ -7667,8 +7667,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Garrison } + .partySize = ARRAY_COUNT(sParty_Garrison), + .party = {.NoItemDefaultMoves = sParty_Garrison}, }, [TRAINER_LYDIA_2] = @@ -7681,8 +7681,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Lydia2 } + .partySize = ARRAY_COUNT(sParty_Lydia2), + .party = {.NoItemDefaultMoves = sParty_Lydia2}, }, [TRAINER_LYDIA_3] = @@ -7695,8 +7695,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Lydia3 } + .partySize = ARRAY_COUNT(sParty_Lydia3), + .party = {.NoItemDefaultMoves = sParty_Lydia3}, }, [TRAINER_LYDIA_4] = @@ -7709,8 +7709,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Lydia4 } + .partySize = ARRAY_COUNT(sParty_Lydia4), + .party = {.NoItemDefaultMoves = sParty_Lydia4}, }, [TRAINER_LYDIA_5] = @@ -7723,8 +7723,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Lydia5 } + .partySize = ARRAY_COUNT(sParty_Lydia5), + .party = {.NoItemDefaultMoves = sParty_Lydia5}, }, [TRAINER_JACKSON_1] = @@ -7737,8 +7737,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jackson1 } + .partySize = ARRAY_COUNT(sParty_Jackson1), + .party = {.NoItemDefaultMoves = sParty_Jackson1}, }, [TRAINER_LORENZO] = @@ -7751,8 +7751,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Lorenzo } + .partySize = ARRAY_COUNT(sParty_Lorenzo), + .party = {.NoItemDefaultMoves = sParty_Lorenzo}, }, [TRAINER_SEBASTIAN] = @@ -7765,8 +7765,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Sebastian } + .partySize = ARRAY_COUNT(sParty_Sebastian), + .party = {.NoItemDefaultMoves = sParty_Sebastian}, }, [TRAINER_JACKSON_2] = @@ -7779,8 +7779,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jackson2 } + .partySize = ARRAY_COUNT(sParty_Jackson2), + .party = {.NoItemDefaultMoves = sParty_Jackson2}, }, [TRAINER_JACKSON_3] = @@ -7793,8 +7793,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jackson3 } + .partySize = ARRAY_COUNT(sParty_Jackson3), + .party = {.NoItemDefaultMoves = sParty_Jackson3}, }, [TRAINER_JACKSON_4] = @@ -7807,8 +7807,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Jackson4 } + .partySize = ARRAY_COUNT(sParty_Jackson4), + .party = {.NoItemDefaultMoves = sParty_Jackson4}, }, [TRAINER_JACKSON_5] = @@ -7821,8 +7821,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Jackson5 } + .partySize = ARRAY_COUNT(sParty_Jackson5), + .party = {.NoItemDefaultMoves = sParty_Jackson5}, }, [TRAINER_CATHERINE_1] = @@ -7835,8 +7835,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Catherine1 } + .partySize = ARRAY_COUNT(sParty_Catherine1), + .party = {.NoItemDefaultMoves = sParty_Catherine1}, }, [TRAINER_JENNA] = @@ -7849,8 +7849,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Jenna } + .partySize = ARRAY_COUNT(sParty_Jenna), + .party = {.NoItemDefaultMoves = sParty_Jenna}, }, [TRAINER_SOPHIA] = @@ -7863,8 +7863,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Sophia } + .partySize = ARRAY_COUNT(sParty_Sophia), + .party = {.NoItemDefaultMoves = sParty_Sophia}, }, [TRAINER_CATHERINE_2] = @@ -7877,8 +7877,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Catherine2 } + .partySize = ARRAY_COUNT(sParty_Catherine2), + .party = {.NoItemDefaultMoves = sParty_Catherine2}, }, [TRAINER_CATHERINE_3] = @@ -7891,8 +7891,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Catherine3 } + .partySize = ARRAY_COUNT(sParty_Catherine3), + .party = {.NoItemDefaultMoves = sParty_Catherine3}, }, [TRAINER_CATHERINE_4] = @@ -7905,8 +7905,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Catherine4 } + .partySize = ARRAY_COUNT(sParty_Catherine4), + .party = {.NoItemDefaultMoves = sParty_Catherine4}, }, [TRAINER_CATHERINE_5] = @@ -7919,8 +7919,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Catherine5 } + .partySize = ARRAY_COUNT(sParty_Catherine5), + .party = {.NoItemDefaultMoves = sParty_Catherine5}, }, [TRAINER_JULIO] = @@ -7933,8 +7933,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Julio } + .partySize = ARRAY_COUNT(sParty_Julio), + .party = {.NoItemDefaultMoves = sParty_Julio}, }, [TRAINER_GRUNT_27] = @@ -7947,8 +7947,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Grunt27 } + .partySize = ARRAY_COUNT(sParty_Grunt27), + .party = {.NoItemDefaultMoves = sParty_Grunt27}, }, [TRAINER_GRUNT_28] = @@ -7961,8 +7961,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Grunt28 } + .partySize = ARRAY_COUNT(sParty_Grunt28), + .party = {.NoItemDefaultMoves = sParty_Grunt28}, }, [TRAINER_GRUNT_29] = @@ -7975,8 +7975,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Grunt29 } + .partySize = ARRAY_COUNT(sParty_Grunt29), + .party = {.NoItemDefaultMoves = sParty_Grunt29}, }, [TRAINER_GRUNT_30] = @@ -7989,8 +7989,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Grunt30 } + .partySize = ARRAY_COUNT(sParty_Grunt30), + .party = {.NoItemDefaultMoves = sParty_Grunt30}, }, [TRAINER_MARC] = @@ -8003,8 +8003,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Marc } + .partySize = ARRAY_COUNT(sParty_Marc), + .party = {.NoItemDefaultMoves = sParty_Marc}, }, [TRAINER_BRENDEN] = @@ -8017,8 +8017,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Brenden } + .partySize = ARRAY_COUNT(sParty_Brenden), + .party = {.NoItemDefaultMoves = sParty_Brenden}, }, [TRAINER_LILITH] = @@ -8031,8 +8031,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Lilith } + .partySize = ARRAY_COUNT(sParty_Lilith), + .party = {.NoItemDefaultMoves = sParty_Lilith}, }, [TRAINER_CRISTIAN] = @@ -8045,8 +8045,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Cristian } + .partySize = ARRAY_COUNT(sParty_Cristian), + .party = {.NoItemDefaultMoves = sParty_Cristian}, }, [TRAINER_SYLVIA] = @@ -8059,8 +8059,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Sylvia } + .partySize = ARRAY_COUNT(sParty_Sylvia), + .party = {.NoItemDefaultMoves = sParty_Sylvia}, }, [TRAINER_LEONARDO] = @@ -8073,8 +8073,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Leonardo } + .partySize = ARRAY_COUNT(sParty_Leonardo), + .party = {.NoItemDefaultMoves = sParty_Leonardo}, }, [TRAINER_ATHENA] = @@ -8087,8 +8087,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.ItemCustomMoves = sParty_Athena } + .partySize = ARRAY_COUNT(sParty_Athena), + .party = {.ItemCustomMoves = sParty_Athena}, }, [TRAINER_HARRISON] = @@ -8101,8 +8101,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Harrison } + .partySize = ARRAY_COUNT(sParty_Harrison), + .party = {.NoItemDefaultMoves = sParty_Harrison}, }, [TRAINER_GRUNT_31] = @@ -8115,8 +8115,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt31 } + .partySize = ARRAY_COUNT(sParty_Grunt31), + .party = {.NoItemDefaultMoves = sParty_Grunt31}, }, [TRAINER_CLARENCE] = @@ -8129,8 +8129,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Clarence } + .partySize = ARRAY_COUNT(sParty_Clarence), + .party = {.NoItemDefaultMoves = sParty_Clarence}, }, [TRAINER_TERRY] = @@ -8143,8 +8143,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Terry } + .partySize = ARRAY_COUNT(sParty_Terry), + .party = {.NoItemDefaultMoves = sParty_Terry}, }, [TRAINER_NATE] = @@ -8157,8 +8157,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Nate } + .partySize = ARRAY_COUNT(sParty_Nate), + .party = {.NoItemDefaultMoves = sParty_Nate}, }, [TRAINER_KATHLEEN] = @@ -8171,8 +8171,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Kathleen } + .partySize = ARRAY_COUNT(sParty_Kathleen), + .party = {.NoItemDefaultMoves = sParty_Kathleen}, }, [TRAINER_CLIFFORD] = @@ -8185,8 +8185,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Clifford } + .partySize = ARRAY_COUNT(sParty_Clifford), + .party = {.NoItemDefaultMoves = sParty_Clifford}, }, [TRAINER_NICHOLAS] = @@ -8199,8 +8199,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Nicholas } + .partySize = ARRAY_COUNT(sParty_Nicholas), + .party = {.NoItemDefaultMoves = sParty_Nicholas}, }, [TRAINER_GRUNT_32] = @@ -8213,8 +8213,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Grunt32 } + .partySize = ARRAY_COUNT(sParty_Grunt32), + .party = {.NoItemDefaultMoves = sParty_Grunt32}, }, [TRAINER_GRUNT_33] = @@ -8227,8 +8227,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt33 } + .partySize = ARRAY_COUNT(sParty_Grunt33), + .party = {.NoItemDefaultMoves = sParty_Grunt33}, }, [TRAINER_GRUNT_34] = @@ -8241,8 +8241,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt34 } + .partySize = ARRAY_COUNT(sParty_Grunt34), + .party = {.NoItemDefaultMoves = sParty_Grunt34}, }, [TRAINER_GRUNT_35] = @@ -8255,8 +8255,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt35 } + .partySize = ARRAY_COUNT(sParty_Grunt35), + .party = {.NoItemDefaultMoves = sParty_Grunt35}, }, [TRAINER_GRUNT_36] = @@ -8269,8 +8269,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt36 } + .partySize = ARRAY_COUNT(sParty_Grunt36), + .party = {.NoItemDefaultMoves = sParty_Grunt36}, }, [TRAINER_MACEY] = @@ -8283,8 +8283,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Macey } + .partySize = ARRAY_COUNT(sParty_Macey), + .party = {.NoItemDefaultMoves = sParty_Macey}, }, [TRAINER_BRENDAN_10] = @@ -8297,8 +8297,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Brendan10 } + .partySize = ARRAY_COUNT(sParty_Brendan10), + .party = {.NoItemDefaultMoves = sParty_Brendan10}, }, [TRAINER_BRENDAN_11] = @@ -8311,8 +8311,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Brendan11 } + .partySize = ARRAY_COUNT(sParty_Brendan11), + .party = {.NoItemDefaultMoves = sParty_Brendan11}, }, [TRAINER_PAXTON] = @@ -8325,8 +8325,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Paxton } + .partySize = ARRAY_COUNT(sParty_Paxton), + .party = {.NoItemDefaultMoves = sParty_Paxton}, }, [TRAINER_ISABELLA] = @@ -8339,8 +8339,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Isabella } + .partySize = ARRAY_COUNT(sParty_Isabella), + .party = {.NoItemDefaultMoves = sParty_Isabella}, }, [TRAINER_GRUNT_37] = @@ -8353,8 +8353,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Grunt37 } + .partySize = ARRAY_COUNT(sParty_Grunt37), + .party = {.NoItemDefaultMoves = sParty_Grunt37}, }, [TRAINER_TABITHA_2] = @@ -8367,8 +8367,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Tabitha2 } + .partySize = ARRAY_COUNT(sParty_Tabitha2), + .party = {.NoItemDefaultMoves = sParty_Tabitha2}, }, [TRAINER_JONATHAN] = @@ -8381,8 +8381,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Jonathan } + .partySize = ARRAY_COUNT(sParty_Jonathan), + .party = {.NoItemDefaultMoves = sParty_Jonathan}, }, [TRAINER_BRENDAN_12] = @@ -8395,8 +8395,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Brendan12 } + .partySize = ARRAY_COUNT(sParty_Brendan12), + .party = {.NoItemDefaultMoves = sParty_Brendan12}, }, [TRAINER_MAY_10] = @@ -8409,8 +8409,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_May10 } + .partySize = ARRAY_COUNT(sParty_May10), + .party = {.NoItemDefaultMoves = sParty_May10}, }, [TRAINER_MAXIE_1] = @@ -8423,8 +8423,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Maxie1 } + .partySize = ARRAY_COUNT(sParty_Maxie1), + .party = {.NoItemDefaultMoves = sParty_Maxie1}, }, [TRAINER_MAXIE_2] = @@ -8437,8 +8437,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_SUPER_POTION, ITEM_SUPER_POTION, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Maxie2 } + .partySize = ARRAY_COUNT(sParty_Maxie2), + .party = {.NoItemDefaultMoves = sParty_Maxie2}, }, [TRAINER_TIANA] = @@ -8451,8 +8451,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Tiana } + .partySize = ARRAY_COUNT(sParty_Tiana), + .party = {.NoItemDefaultMoves = sParty_Tiana}, }, [TRAINER_HALEY_1] = @@ -8465,8 +8465,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Haley1 } + .partySize = ARRAY_COUNT(sParty_Haley1), + .party = {.NoItemDefaultMoves = sParty_Haley1}, }, [TRAINER_JANICE] = @@ -8479,8 +8479,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Janice } + .partySize = ARRAY_COUNT(sParty_Janice), + .party = {.NoItemDefaultMoves = sParty_Janice}, }, [TRAINER_VIVI] = @@ -8493,8 +8493,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Vivi } + .partySize = ARRAY_COUNT(sParty_Vivi), + .party = {.NoItemDefaultMoves = sParty_Vivi}, }, [TRAINER_HALEY_2] = @@ -8507,8 +8507,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Haley2 } + .partySize = ARRAY_COUNT(sParty_Haley2), + .party = {.NoItemDefaultMoves = sParty_Haley2}, }, [TRAINER_HALEY_3] = @@ -8521,8 +8521,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Haley3 } + .partySize = ARRAY_COUNT(sParty_Haley3), + .party = {.NoItemDefaultMoves = sParty_Haley3}, }, [TRAINER_HALEY_4] = @@ -8535,8 +8535,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Haley4 } + .partySize = ARRAY_COUNT(sParty_Haley4), + .party = {.NoItemDefaultMoves = sParty_Haley4}, }, [TRAINER_HALEY_5] = @@ -8549,8 +8549,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Haley5 } + .partySize = ARRAY_COUNT(sParty_Haley5), + .party = {.NoItemDefaultMoves = sParty_Haley5}, }, [TRAINER_SALLY] = @@ -8563,8 +8563,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Sally } + .partySize = ARRAY_COUNT(sParty_Sally), + .party = {.NoItemDefaultMoves = sParty_Sally}, }, [TRAINER_ROBIN] = @@ -8577,8 +8577,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Robin } + .partySize = ARRAY_COUNT(sParty_Robin), + .party = {.NoItemDefaultMoves = sParty_Robin}, }, [TRAINER_ANDREA] = @@ -8591,8 +8591,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Andrea } + .partySize = ARRAY_COUNT(sParty_Andrea), + .party = {.NoItemDefaultMoves = sParty_Andrea}, }, [TRAINER_CRISSY] = @@ -8605,8 +8605,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Crissy } + .partySize = ARRAY_COUNT(sParty_Crissy), + .party = {.NoItemDefaultMoves = sParty_Crissy}, }, [TRAINER_RICK] = @@ -8619,8 +8619,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Rick } + .partySize = ARRAY_COUNT(sParty_Rick), + .party = {.NoItemDefaultMoves = sParty_Rick}, }, [TRAINER_LYLE] = @@ -8633,8 +8633,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Lyle } + .partySize = ARRAY_COUNT(sParty_Lyle), + .party = {.NoItemDefaultMoves = sParty_Lyle}, }, [TRAINER_JOSE] = @@ -8647,8 +8647,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Jose } + .partySize = ARRAY_COUNT(sParty_Jose), + .party = {.NoItemDefaultMoves = sParty_Jose}, }, [TRAINER_DOUG] = @@ -8661,8 +8661,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Doug } + .partySize = ARRAY_COUNT(sParty_Doug), + .party = {.NoItemDefaultMoves = sParty_Doug}, }, [TRAINER_GREG] = @@ -8675,8 +8675,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Greg } + .partySize = ARRAY_COUNT(sParty_Greg), + .party = {.NoItemDefaultMoves = sParty_Greg}, }, [TRAINER_KENT] = @@ -8689,8 +8689,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Kent } + .partySize = ARRAY_COUNT(sParty_Kent), + .party = {.NoItemDefaultMoves = sParty_Kent}, }, [TRAINER_JAMES_1] = @@ -8703,8 +8703,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_James1 } + .partySize = ARRAY_COUNT(sParty_James1), + .party = {.NoItemDefaultMoves = sParty_James1}, }, [TRAINER_JAMES_2] = @@ -8717,8 +8717,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_James2 } + .partySize = ARRAY_COUNT(sParty_James2), + .party = {.NoItemDefaultMoves = sParty_James2}, }, [TRAINER_JAMES_3] = @@ -8731,8 +8731,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_James3 } + .partySize = ARRAY_COUNT(sParty_James3), + .party = {.NoItemDefaultMoves = sParty_James3}, }, [TRAINER_JAMES_4] = @@ -8745,8 +8745,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_James4 } + .partySize = ARRAY_COUNT(sParty_James4), + .party = {.NoItemDefaultMoves = sParty_James4}, }, [TRAINER_JAMES_5] = @@ -8759,8 +8759,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_James5 } + .partySize = ARRAY_COUNT(sParty_James5), + .party = {.NoItemDefaultMoves = sParty_James5}, }, [TRAINER_BRICE] = @@ -8773,8 +8773,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Brice } + .partySize = ARRAY_COUNT(sParty_Brice), + .party = {.NoItemDefaultMoves = sParty_Brice}, }, [TRAINER_TRENT_1] = @@ -8787,8 +8787,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Trent1 } + .partySize = ARRAY_COUNT(sParty_Trent1), + .party = {.NoItemDefaultMoves = sParty_Trent1}, }, [TRAINER_LENNY] = @@ -8801,8 +8801,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Lenny } + .partySize = ARRAY_COUNT(sParty_Lenny), + .party = {.NoItemDefaultMoves = sParty_Lenny}, }, [TRAINER_LUCAS_1] = @@ -8815,8 +8815,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Lucas1 } + .partySize = ARRAY_COUNT(sParty_Lucas1), + .party = {.NoItemDefaultMoves = sParty_Lucas1}, }, [TRAINER_ALAN] = @@ -8829,8 +8829,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Alan } + .partySize = ARRAY_COUNT(sParty_Alan), + .party = {.NoItemDefaultMoves = sParty_Alan}, }, [TRAINER_CLARK] = @@ -8843,8 +8843,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Clark } + .partySize = ARRAY_COUNT(sParty_Clark), + .party = {.NoItemDefaultMoves = sParty_Clark}, }, [TRAINER_ERIC] = @@ -8857,8 +8857,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Eric } + .partySize = ARRAY_COUNT(sParty_Eric), + .party = {.NoItemDefaultMoves = sParty_Eric}, }, [TRAINER_LUCAS_2] = @@ -8871,8 +8871,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Lucas2 } + .partySize = ARRAY_COUNT(sParty_Lucas2), + .party = {.NoItemCustomMoves = sParty_Lucas2}, }, [TRAINER_MIKE_1] = @@ -8885,8 +8885,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Mike1 } + .partySize = ARRAY_COUNT(sParty_Mike1), + .party = {.NoItemCustomMoves = sParty_Mike1}, }, [TRAINER_MIKE_2] = @@ -8899,8 +8899,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Mike2 } + .partySize = ARRAY_COUNT(sParty_Mike2), + .party = {.NoItemDefaultMoves = sParty_Mike2}, }, [TRAINER_TRENT_2] = @@ -8913,8 +8913,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Trent2 } + .partySize = ARRAY_COUNT(sParty_Trent2), + .party = {.NoItemDefaultMoves = sParty_Trent2}, }, [TRAINER_TRENT_3] = @@ -8927,8 +8927,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Trent3 } + .partySize = ARRAY_COUNT(sParty_Trent3), + .party = {.NoItemDefaultMoves = sParty_Trent3}, }, [TRAINER_TRENT_4] = @@ -8941,8 +8941,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Trent4 } + .partySize = ARRAY_COUNT(sParty_Trent4), + .party = {.NoItemDefaultMoves = sParty_Trent4}, }, [TRAINER_TRENT_5] = @@ -8955,8 +8955,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Trent5 } + .partySize = ARRAY_COUNT(sParty_Trent5), + .party = {.NoItemDefaultMoves = sParty_Trent5}, }, [TRAINER_DEZ_AND_LUKE] = @@ -8969,8 +8969,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_DezAndLuke } + .partySize = ARRAY_COUNT(sParty_DezAndLuke), + .party = {.NoItemDefaultMoves = sParty_DezAndLuke}, }, [TRAINER_LEA_AND_JED] = @@ -8983,8 +8983,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_LeaAndJed } + .partySize = ARRAY_COUNT(sParty_LeaAndJed), + .party = {.NoItemDefaultMoves = sParty_LeaAndJed}, }, [TRAINER_KIRA_AND_DAN_1] = @@ -8997,8 +8997,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_KiraAndDan1 } + .partySize = ARRAY_COUNT(sParty_KiraAndDan1), + .party = {.NoItemDefaultMoves = sParty_KiraAndDan1}, }, [TRAINER_KIRA_AND_DAN_2] = @@ -9011,8 +9011,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_KiraAndDan2 } + .partySize = ARRAY_COUNT(sParty_KiraAndDan2), + .party = {.NoItemDefaultMoves = sParty_KiraAndDan2}, }, [TRAINER_KIRA_AND_DAN_3] = @@ -9025,8 +9025,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_KiraAndDan3 } + .partySize = ARRAY_COUNT(sParty_KiraAndDan3), + .party = {.NoItemDefaultMoves = sParty_KiraAndDan3}, }, [TRAINER_KIRA_AND_DAN_4] = @@ -9039,8 +9039,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_KiraAndDan4 } + .partySize = ARRAY_COUNT(sParty_KiraAndDan4), + .party = {.NoItemDefaultMoves = sParty_KiraAndDan4}, }, [TRAINER_KIRA_AND_DAN_5] = @@ -9053,8 +9053,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_KiraAndDan5 } + .partySize = ARRAY_COUNT(sParty_KiraAndDan5), + .party = {.NoItemDefaultMoves = sParty_KiraAndDan5}, }, [TRAINER_JOHANNA] = @@ -9067,8 +9067,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Johanna } + .partySize = ARRAY_COUNT(sParty_Johanna), + .party = {.NoItemDefaultMoves = sParty_Johanna}, }, [TRAINER_GERALD] = @@ -9081,8 +9081,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Gerald } + .partySize = ARRAY_COUNT(sParty_Gerald), + .party = {.NoItemCustomMoves = sParty_Gerald}, }, [TRAINER_VIVIAN] = @@ -9095,8 +9095,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Vivian } + .partySize = ARRAY_COUNT(sParty_Vivian), + .party = {.NoItemCustomMoves = sParty_Vivian}, }, [TRAINER_DANIELLE] = @@ -9109,8 +9109,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Danielle } + .partySize = ARRAY_COUNT(sParty_Danielle), + .party = {.NoItemCustomMoves = sParty_Danielle}, }, [TRAINER_HIDEO] = @@ -9123,8 +9123,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Hideo } + .partySize = ARRAY_COUNT(sParty_Hideo), + .party = {.NoItemCustomMoves = sParty_Hideo}, }, [TRAINER_KEIGO] = @@ -9137,8 +9137,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Keigo } + .partySize = ARRAY_COUNT(sParty_Keigo), + .party = {.NoItemCustomMoves = sParty_Keigo}, }, [TRAINER_RILEY] = @@ -9151,8 +9151,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_Riley } + .partySize = ARRAY_COUNT(sParty_Riley), + .party = {.NoItemCustomMoves = sParty_Riley}, }, [TRAINER_FLINT] = @@ -9165,8 +9165,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Flint } + .partySize = ARRAY_COUNT(sParty_Flint), + .party = {.NoItemDefaultMoves = sParty_Flint}, }, [TRAINER_ASHLEY] = @@ -9179,8 +9179,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Ashley } + .partySize = ARRAY_COUNT(sParty_Ashley), + .party = {.NoItemDefaultMoves = sParty_Ashley}, }, [TRAINER_WALLY_2] = @@ -9193,8 +9193,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Wally2 } + .partySize = ARRAY_COUNT(sParty_Wally2), + .party = {.NoItemDefaultMoves = sParty_Wally2}, }, [TRAINER_WALLY_3] = @@ -9207,8 +9207,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.NoItemCustomMoves = sParty_Wally3 } + .partySize = ARRAY_COUNT(sParty_Wally3), + .party = {.NoItemCustomMoves = sParty_Wally3}, }, [TRAINER_WALLY_4] = @@ -9221,8 +9221,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.NoItemCustomMoves = sParty_Wally4 } + .partySize = ARRAY_COUNT(sParty_Wally4), + .party = {.NoItemCustomMoves = sParty_Wally4}, }, [TRAINER_WALLY_5] = @@ -9235,8 +9235,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.NoItemCustomMoves = sParty_Wally5 } + .partySize = ARRAY_COUNT(sParty_Wally5), + .party = {.NoItemCustomMoves = sParty_Wally5}, }, [TRAINER_WALLY_6] = @@ -9249,8 +9249,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.NoItemCustomMoves = sParty_Wally6 } + .partySize = ARRAY_COUNT(sParty_Wally6), + .party = {.NoItemCustomMoves = sParty_Wally6}, }, [TRAINER_BRENDAN_13] = @@ -9263,8 +9263,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Brendan13 } + .partySize = ARRAY_COUNT(sParty_Brendan13), + .party = {.NoItemDefaultMoves = sParty_Brendan13}, }, [TRAINER_BRENDAN_14] = @@ -9277,8 +9277,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Brendan14 } + .partySize = ARRAY_COUNT(sParty_Brendan14), + .party = {.NoItemDefaultMoves = sParty_Brendan14}, }, [TRAINER_BRENDAN_15] = @@ -9291,8 +9291,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Brendan15 } + .partySize = ARRAY_COUNT(sParty_Brendan15), + .party = {.NoItemDefaultMoves = sParty_Brendan15}, }, [TRAINER_MAY_11] = @@ -9305,8 +9305,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_May11 } + .partySize = ARRAY_COUNT(sParty_May11), + .party = {.NoItemDefaultMoves = sParty_May11}, }, [TRAINER_MAY_12] = @@ -9319,8 +9319,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_May12 } + .partySize = ARRAY_COUNT(sParty_May12), + .party = {.NoItemDefaultMoves = sParty_May12}, }, [TRAINER_MAY_13] = @@ -9333,8 +9333,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_May13 } + .partySize = ARRAY_COUNT(sParty_May13), + .party = {.NoItemDefaultMoves = sParty_May13}, }, [TRAINER_JONAH] = @@ -9347,8 +9347,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Jonah } + .partySize = ARRAY_COUNT(sParty_Jonah), + .party = {.NoItemDefaultMoves = sParty_Jonah}, }, [TRAINER_HENRY] = @@ -9361,8 +9361,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Henry } + .partySize = ARRAY_COUNT(sParty_Henry), + .party = {.NoItemDefaultMoves = sParty_Henry}, }, [TRAINER_ROGER] = @@ -9375,8 +9375,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Roger } + .partySize = ARRAY_COUNT(sParty_Roger), + .party = {.NoItemDefaultMoves = sParty_Roger}, }, [TRAINER_ALEXA] = @@ -9389,8 +9389,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Alexa } + .partySize = ARRAY_COUNT(sParty_Alexa), + .party = {.NoItemDefaultMoves = sParty_Alexa}, }, [TRAINER_RUBEN] = @@ -9403,8 +9403,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Ruben } + .partySize = ARRAY_COUNT(sParty_Ruben), + .party = {.NoItemDefaultMoves = sParty_Ruben}, }, [TRAINER_KOJI_1] = @@ -9417,8 +9417,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Koji1 } + .partySize = ARRAY_COUNT(sParty_Koji1), + .party = {.NoItemDefaultMoves = sParty_Koji1}, }, [TRAINER_WAYNE] = @@ -9431,8 +9431,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Wayne } + .partySize = ARRAY_COUNT(sParty_Wayne), + .party = {.NoItemDefaultMoves = sParty_Wayne}, }, [TRAINER_AIDAN] = @@ -9445,8 +9445,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Aidan } + .partySize = ARRAY_COUNT(sParty_Aidan), + .party = {.NoItemDefaultMoves = sParty_Aidan}, }, [TRAINER_REED] = @@ -9459,8 +9459,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Reed } + .partySize = ARRAY_COUNT(sParty_Reed), + .party = {.NoItemDefaultMoves = sParty_Reed}, }, [TRAINER_TISHA] = @@ -9473,8 +9473,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Tisha } + .partySize = ARRAY_COUNT(sParty_Tisha), + .party = {.NoItemDefaultMoves = sParty_Tisha}, }, [TRAINER_TORI_AND_TIA] = @@ -9487,8 +9487,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_ToriAndTia } + .partySize = ARRAY_COUNT(sParty_ToriAndTia), + .party = {.NoItemDefaultMoves = sParty_ToriAndTia}, }, [TRAINER_KIM_AND_IRIS] = @@ -9501,8 +9501,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_KimAndIris } + .partySize = ARRAY_COUNT(sParty_KimAndIris), + .party = {.NoItemCustomMoves = sParty_KimAndIris}, }, [TRAINER_TYRA_AND_IVY] = @@ -9515,8 +9515,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_TyraAndIvy } + .partySize = ARRAY_COUNT(sParty_TyraAndIvy), + .party = {.NoItemCustomMoves = sParty_TyraAndIvy}, }, [TRAINER_MEL_AND_PAUL] = @@ -9529,8 +9529,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_MelAndPaul } + .partySize = ARRAY_COUNT(sParty_MelAndPaul), + .party = {.NoItemCustomMoves = sParty_MelAndPaul}, }, [TRAINER_JOHN_AND_JAY_1] = @@ -9543,8 +9543,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_JohnAndJay1 } + .partySize = ARRAY_COUNT(sParty_JohnAndJay1), + .party = {.NoItemCustomMoves = sParty_JohnAndJay1}, }, [TRAINER_JOHN_AND_JAY_2] = @@ -9557,8 +9557,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_JohnAndJay2 } + .partySize = ARRAY_COUNT(sParty_JohnAndJay2), + .party = {.NoItemCustomMoves = sParty_JohnAndJay2}, }, [TRAINER_JOHN_AND_JAY_3] = @@ -9571,8 +9571,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_JohnAndJay3 } + .partySize = ARRAY_COUNT(sParty_JohnAndJay3), + .party = {.NoItemCustomMoves = sParty_JohnAndJay3}, }, [TRAINER_JOHN_AND_JAY_4] = @@ -9585,8 +9585,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_SETUP_FIRST_TURN, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_JohnAndJay4 } + .partySize = ARRAY_COUNT(sParty_JohnAndJay4), + .party = {.NoItemCustomMoves = sParty_JohnAndJay4}, }, [TRAINER_JOHN_AND_JAY_5] = @@ -9599,8 +9599,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemCustomMoves = sParty_JohnAndJay5 } + .partySize = ARRAY_COUNT(sParty_JohnAndJay5), + .party = {.NoItemCustomMoves = sParty_JohnAndJay5}, }, [TRAINER_RELI_AND_IAN] = @@ -9613,8 +9613,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_ReliAndIan } + .partySize = ARRAY_COUNT(sParty_ReliAndIan), + .party = {.NoItemDefaultMoves = sParty_ReliAndIan}, }, [TRAINER_LILA_AND_ROY_1] = @@ -9627,8 +9627,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_LilaAndRoy1 } + .partySize = ARRAY_COUNT(sParty_LilaAndRoy1), + .party = {.NoItemDefaultMoves = sParty_LilaAndRoy1}, }, [TRAINER_LILA_AND_ROY_2] = @@ -9641,8 +9641,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_LilaAndRoy2 } + .partySize = ARRAY_COUNT(sParty_LilaAndRoy2), + .party = {.NoItemDefaultMoves = sParty_LilaAndRoy2}, }, [TRAINER_LILA_AND_ROY_3] = @@ -9655,8 +9655,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_LilaAndRoy3 } + .partySize = ARRAY_COUNT(sParty_LilaAndRoy3), + .party = {.NoItemDefaultMoves = sParty_LilaAndRoy3}, }, [TRAINER_LILA_AND_ROY_4] = @@ -9669,8 +9669,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_LilaAndRoy4 } + .partySize = ARRAY_COUNT(sParty_LilaAndRoy4), + .party = {.NoItemDefaultMoves = sParty_LilaAndRoy4}, }, [TRAINER_LILA_AND_ROY_5] = @@ -9683,8 +9683,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_LilaAndRoy5 } + .partySize = ARRAY_COUNT(sParty_LilaAndRoy5), + .party = {.NoItemDefaultMoves = sParty_LilaAndRoy5}, }, [TRAINER_LISA_AND_RAY] = @@ -9697,8 +9697,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_LisaAndRay } + .partySize = ARRAY_COUNT(sParty_LisaAndRay), + .party = {.NoItemDefaultMoves = sParty_LisaAndRay}, }, [TRAINER_CHRIS] = @@ -9711,8 +9711,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Chris } + .partySize = ARRAY_COUNT(sParty_Chris), + .party = {.NoItemDefaultMoves = sParty_Chris}, }, [TRAINER_DAWSON] = @@ -9725,8 +9725,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.ItemDefaultMoves = sParty_Dawson } + .partySize = ARRAY_COUNT(sParty_Dawson), + .party = {.ItemDefaultMoves = sParty_Dawson}, }, [TRAINER_SARAH] = @@ -9739,8 +9739,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.ItemDefaultMoves = sParty_Sarah } + .partySize = ARRAY_COUNT(sParty_Sarah), + .party = {.ItemDefaultMoves = sParty_Sarah}, }, [TRAINER_DARIAN] = @@ -9753,8 +9753,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Darian } + .partySize = ARRAY_COUNT(sParty_Darian), + .party = {.NoItemDefaultMoves = sParty_Darian}, }, [TRAINER_HAILEY] = @@ -9767,8 +9767,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Hailey } + .partySize = ARRAY_COUNT(sParty_Hailey), + .party = {.NoItemDefaultMoves = sParty_Hailey}, }, [TRAINER_CHANDLER] = @@ -9781,8 +9781,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Chandler } + .partySize = ARRAY_COUNT(sParty_Chandler), + .party = {.NoItemDefaultMoves = sParty_Chandler}, }, [TRAINER_KALEB] = @@ -9795,8 +9795,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.ItemDefaultMoves = sParty_Kaleb } + .partySize = ARRAY_COUNT(sParty_Kaleb), + .party = {.ItemDefaultMoves = sParty_Kaleb}, }, [TRAINER_JOSEPH] = @@ -9809,8 +9809,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Joseph } + .partySize = ARRAY_COUNT(sParty_Joseph), + .party = {.NoItemDefaultMoves = sParty_Joseph}, }, [TRAINER_ALYSSA] = @@ -9823,8 +9823,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Alyssa } + .partySize = ARRAY_COUNT(sParty_Alyssa), + .party = {.NoItemDefaultMoves = sParty_Alyssa}, }, [TRAINER_MARCOS] = @@ -9837,8 +9837,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Marcos } + .partySize = ARRAY_COUNT(sParty_Marcos), + .party = {.NoItemDefaultMoves = sParty_Marcos}, }, [TRAINER_RHETT] = @@ -9851,8 +9851,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Rhett } + .partySize = ARRAY_COUNT(sParty_Rhett), + .party = {.NoItemDefaultMoves = sParty_Rhett}, }, [TRAINER_TYRON] = @@ -9865,8 +9865,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Tyron } + .partySize = ARRAY_COUNT(sParty_Tyron), + .party = {.NoItemDefaultMoves = sParty_Tyron}, }, [TRAINER_CELINA] = @@ -9879,8 +9879,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Celina } + .partySize = ARRAY_COUNT(sParty_Celina), + .party = {.NoItemDefaultMoves = sParty_Celina}, }, [TRAINER_BIANCA] = @@ -9893,8 +9893,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Bianca } + .partySize = ARRAY_COUNT(sParty_Bianca), + .party = {.NoItemDefaultMoves = sParty_Bianca}, }, [TRAINER_HAYDEN] = @@ -9907,8 +9907,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Hayden } + .partySize = ARRAY_COUNT(sParty_Hayden), + .party = {.NoItemDefaultMoves = sParty_Hayden}, }, [TRAINER_SOPHIE] = @@ -9921,8 +9921,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Sophie } + .partySize = ARRAY_COUNT(sParty_Sophie), + .party = {.NoItemDefaultMoves = sParty_Sophie}, }, [TRAINER_COBY] = @@ -9935,8 +9935,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Coby } + .partySize = ARRAY_COUNT(sParty_Coby), + .party = {.NoItemDefaultMoves = sParty_Coby}, }, [TRAINER_LAWRENCE] = @@ -9949,8 +9949,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Lawrence } + .partySize = ARRAY_COUNT(sParty_Lawrence), + .party = {.NoItemDefaultMoves = sParty_Lawrence}, }, [TRAINER_WYATT] = @@ -9963,8 +9963,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Wyatt } + .partySize = ARRAY_COUNT(sParty_Wyatt), + .party = {.NoItemDefaultMoves = sParty_Wyatt}, }, [TRAINER_ANGELINA] = @@ -9977,8 +9977,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Angelina } + .partySize = ARRAY_COUNT(sParty_Angelina), + .party = {.NoItemDefaultMoves = sParty_Angelina}, }, [TRAINER_KAI] = @@ -9991,8 +9991,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Kai } + .partySize = ARRAY_COUNT(sParty_Kai), + .party = {.NoItemDefaultMoves = sParty_Kai}, }, [TRAINER_CHARLOTTE] = @@ -10005,8 +10005,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Charlotte } + .partySize = ARRAY_COUNT(sParty_Charlotte), + .party = {.NoItemDefaultMoves = sParty_Charlotte}, }, [TRAINER_DEANDRE] = @@ -10019,8 +10019,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Deandre } + .partySize = ARRAY_COUNT(sParty_Deandre), + .party = {.NoItemDefaultMoves = sParty_Deandre}, }, [TRAINER_GRUNT_38] = @@ -10033,8 +10033,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt38 } + .partySize = ARRAY_COUNT(sParty_Grunt38), + .party = {.NoItemDefaultMoves = sParty_Grunt38}, }, [TRAINER_GRUNT_39] = @@ -10047,8 +10047,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt39 } + .partySize = ARRAY_COUNT(sParty_Grunt39), + .party = {.NoItemDefaultMoves = sParty_Grunt39}, }, [TRAINER_GRUNT_40] = @@ -10061,8 +10061,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt40 } + .partySize = ARRAY_COUNT(sParty_Grunt40), + .party = {.NoItemDefaultMoves = sParty_Grunt40}, }, [TRAINER_GRUNT_41] = @@ -10075,8 +10075,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Grunt41 } + .partySize = ARRAY_COUNT(sParty_Grunt41), + .party = {.NoItemDefaultMoves = sParty_Grunt41}, }, [TRAINER_GRUNT_42] = @@ -10089,8 +10089,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Grunt42 } + .partySize = ARRAY_COUNT(sParty_Grunt42), + .party = {.NoItemDefaultMoves = sParty_Grunt42}, }, [TRAINER_GRUNT_43] = @@ -10103,8 +10103,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt43 } + .partySize = ARRAY_COUNT(sParty_Grunt43), + .party = {.NoItemDefaultMoves = sParty_Grunt43}, }, [TRAINER_GRUNT_44] = @@ -10117,8 +10117,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt44 } + .partySize = ARRAY_COUNT(sParty_Grunt44), + .party = {.NoItemDefaultMoves = sParty_Grunt44}, }, [TRAINER_GRUNT_45] = @@ -10131,8 +10131,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt45 } + .partySize = ARRAY_COUNT(sParty_Grunt45), + .party = {.NoItemDefaultMoves = sParty_Grunt45}, }, [TRAINER_GRUNT_46] = @@ -10145,8 +10145,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt46 } + .partySize = ARRAY_COUNT(sParty_Grunt46), + .party = {.NoItemDefaultMoves = sParty_Grunt46}, }, [TRAINER_GRUNT_47] = @@ -10159,8 +10159,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt47 } + .partySize = ARRAY_COUNT(sParty_Grunt47), + .party = {.NoItemDefaultMoves = sParty_Grunt47}, }, [TRAINER_GRUNT_48] = @@ -10173,8 +10173,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt48 } + .partySize = ARRAY_COUNT(sParty_Grunt48), + .party = {.NoItemDefaultMoves = sParty_Grunt48}, }, [TRAINER_GRUNT_49] = @@ -10187,8 +10187,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt49 } + .partySize = ARRAY_COUNT(sParty_Grunt49), + .party = {.NoItemDefaultMoves = sParty_Grunt49}, }, [TRAINER_GRUNT_50] = @@ -10201,8 +10201,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt50 } + .partySize = ARRAY_COUNT(sParty_Grunt50), + .party = {.NoItemDefaultMoves = sParty_Grunt50}, }, [TRAINER_GRUNT_51] = @@ -10215,8 +10215,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt51 } + .partySize = ARRAY_COUNT(sParty_Grunt51), + .party = {.NoItemDefaultMoves = sParty_Grunt51}, }, [TRAINER_GRUNT_52] = @@ -10229,8 +10229,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt52 } + .partySize = ARRAY_COUNT(sParty_Grunt52), + .party = {.NoItemDefaultMoves = sParty_Grunt52}, }, [TRAINER_GRUNT_53] = @@ -10243,8 +10243,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Grunt53 } + .partySize = ARRAY_COUNT(sParty_Grunt53), + .party = {.NoItemDefaultMoves = sParty_Grunt53}, }, [TRAINER_TABITHA_3] = @@ -10257,8 +10257,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 4, - .party = {.NoItemDefaultMoves = sParty_Tabitha3 } + .partySize = ARRAY_COUNT(sParty_Tabitha3), + .party = {.NoItemDefaultMoves = sParty_Tabitha3}, }, [TRAINER_DARCY] = @@ -10271,8 +10271,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Darcy } + .partySize = ARRAY_COUNT(sParty_Darcy), + .party = {.NoItemDefaultMoves = sParty_Darcy}, }, [TRAINER_MAXIE_3] = @@ -10285,8 +10285,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Maxie3 } + .partySize = ARRAY_COUNT(sParty_Maxie3), + .party = {.NoItemDefaultMoves = sParty_Maxie3}, }, [TRAINER_PETE] = @@ -10299,8 +10299,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Pete } + .partySize = ARRAY_COUNT(sParty_Pete), + .party = {.NoItemDefaultMoves = sParty_Pete}, }, [TRAINER_ISABELLE] = @@ -10313,8 +10313,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Isabelle } + .partySize = ARRAY_COUNT(sParty_Isabelle), + .party = {.NoItemDefaultMoves = sParty_Isabelle}, }, [TRAINER_ANDRES_1] = @@ -10327,8 +10327,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Andres1 } + .partySize = ARRAY_COUNT(sParty_Andres1), + .party = {.NoItemDefaultMoves = sParty_Andres1}, }, [TRAINER_JOSUE] = @@ -10341,8 +10341,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Josue } + .partySize = ARRAY_COUNT(sParty_Josue), + .party = {.NoItemDefaultMoves = sParty_Josue}, }, [TRAINER_CAMRON] = @@ -10355,8 +10355,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Camron } + .partySize = ARRAY_COUNT(sParty_Camron), + .party = {.NoItemDefaultMoves = sParty_Camron}, }, [TRAINER_CORY_1] = @@ -10369,8 +10369,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Cory1 } + .partySize = ARRAY_COUNT(sParty_Cory1), + .party = {.NoItemDefaultMoves = sParty_Cory1}, }, [TRAINER_CAROLINA] = @@ -10383,8 +10383,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Carolina } + .partySize = ARRAY_COUNT(sParty_Carolina), + .party = {.NoItemDefaultMoves = sParty_Carolina}, }, [TRAINER_ELIJAH] = @@ -10397,8 +10397,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Elijah } + .partySize = ARRAY_COUNT(sParty_Elijah), + .party = {.NoItemDefaultMoves = sParty_Elijah}, }, [TRAINER_CELIA] = @@ -10411,8 +10411,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Celia } + .partySize = ARRAY_COUNT(sParty_Celia), + .party = {.NoItemDefaultMoves = sParty_Celia}, }, [TRAINER_BRYAN] = @@ -10425,8 +10425,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Bryan } + .partySize = ARRAY_COUNT(sParty_Bryan), + .party = {.NoItemDefaultMoves = sParty_Bryan}, }, [TRAINER_BRANDEN] = @@ -10439,8 +10439,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Branden } + .partySize = ARRAY_COUNT(sParty_Branden), + .party = {.NoItemDefaultMoves = sParty_Branden}, }, [TRAINER_BRYANT] = @@ -10453,8 +10453,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Bryant } + .partySize = ARRAY_COUNT(sParty_Bryant), + .party = {.NoItemDefaultMoves = sParty_Bryant}, }, [TRAINER_SHAYLA] = @@ -10467,8 +10467,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Shayla } + .partySize = ARRAY_COUNT(sParty_Shayla), + .party = {.NoItemDefaultMoves = sParty_Shayla}, }, [TRAINER_KYRA] = @@ -10481,8 +10481,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Kyra } + .partySize = ARRAY_COUNT(sParty_Kyra), + .party = {.NoItemDefaultMoves = sParty_Kyra}, }, [TRAINER_JAIDEN] = @@ -10495,8 +10495,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Jaiden } + .partySize = ARRAY_COUNT(sParty_Jaiden), + .party = {.NoItemDefaultMoves = sParty_Jaiden}, }, [TRAINER_ALIX] = @@ -10509,8 +10509,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Alix } + .partySize = ARRAY_COUNT(sParty_Alix), + .party = {.NoItemDefaultMoves = sParty_Alix}, }, [TRAINER_HELENE] = @@ -10523,8 +10523,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Helene } + .partySize = ARRAY_COUNT(sParty_Helene), + .party = {.NoItemDefaultMoves = sParty_Helene}, }, [TRAINER_MARLENE] = @@ -10537,8 +10537,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Marlene } + .partySize = ARRAY_COUNT(sParty_Marlene), + .party = {.NoItemDefaultMoves = sParty_Marlene}, }, [TRAINER_DEVAN] = @@ -10551,8 +10551,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Devan } + .partySize = ARRAY_COUNT(sParty_Devan), + .party = {.NoItemDefaultMoves = sParty_Devan}, }, [TRAINER_JOHNSON] = @@ -10565,8 +10565,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Johnson } + .partySize = ARRAY_COUNT(sParty_Johnson), + .party = {.NoItemDefaultMoves = sParty_Johnson}, }, [TRAINER_MELINA] = @@ -10579,8 +10579,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Melina } + .partySize = ARRAY_COUNT(sParty_Melina), + .party = {.NoItemDefaultMoves = sParty_Melina}, }, [TRAINER_BRANDI] = @@ -10593,8 +10593,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Brandi } + .partySize = ARRAY_COUNT(sParty_Brandi), + .party = {.NoItemDefaultMoves = sParty_Brandi}, }, [TRAINER_AISHA] = @@ -10607,8 +10607,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Aisha } + .partySize = ARRAY_COUNT(sParty_Aisha), + .party = {.NoItemDefaultMoves = sParty_Aisha}, }, [TRAINER_MAKAYLA] = @@ -10621,8 +10621,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Makayla } + .partySize = ARRAY_COUNT(sParty_Makayla), + .party = {.NoItemDefaultMoves = sParty_Makayla}, }, [TRAINER_FABIAN] = @@ -10635,8 +10635,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Fabian } + .partySize = ARRAY_COUNT(sParty_Fabian), + .party = {.NoItemDefaultMoves = sParty_Fabian}, }, [TRAINER_DAYTON] = @@ -10649,8 +10649,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Dayton } + .partySize = ARRAY_COUNT(sParty_Dayton), + .party = {.NoItemDefaultMoves = sParty_Dayton}, }, [TRAINER_RACHEL] = @@ -10663,8 +10663,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Rachel } + .partySize = ARRAY_COUNT(sParty_Rachel), + .party = {.NoItemDefaultMoves = sParty_Rachel}, }, [TRAINER_LEONEL] = @@ -10677,8 +10677,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemCustomMoves = sParty_Leonel } + .partySize = ARRAY_COUNT(sParty_Leonel), + .party = {.NoItemCustomMoves = sParty_Leonel}, }, [TRAINER_CALLIE] = @@ -10691,8 +10691,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Callie } + .partySize = ARRAY_COUNT(sParty_Callie), + .party = {.NoItemDefaultMoves = sParty_Callie}, }, [TRAINER_CALE] = @@ -10705,8 +10705,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Cale } + .partySize = ARRAY_COUNT(sParty_Cale), + .party = {.NoItemDefaultMoves = sParty_Cale}, }, [TRAINER_MYLES] = @@ -10719,8 +10719,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Myles } + .partySize = ARRAY_COUNT(sParty_Myles), + .party = {.NoItemDefaultMoves = sParty_Myles}, }, [TRAINER_PAT] = @@ -10733,8 +10733,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Pat } + .partySize = ARRAY_COUNT(sParty_Pat), + .party = {.NoItemDefaultMoves = sParty_Pat}, }, [TRAINER_CRISTIN_1] = @@ -10747,8 +10747,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Cristin1 } + .partySize = ARRAY_COUNT(sParty_Cristin1), + .party = {.NoItemDefaultMoves = sParty_Cristin1}, }, [TRAINER_MAY_14] = @@ -10761,8 +10761,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_May14 } + .partySize = ARRAY_COUNT(sParty_May14), + .party = {.NoItemDefaultMoves = sParty_May14}, }, [TRAINER_MAY_15] = @@ -10775,8 +10775,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_May15 } + .partySize = ARRAY_COUNT(sParty_May15), + .party = {.NoItemDefaultMoves = sParty_May15}, }, [TRAINER_ROXANNE_2] = @@ -10789,8 +10789,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.ItemCustomMoves = sParty_Roxanne2 } + .partySize = ARRAY_COUNT(sParty_Roxanne2), + .party = {.ItemCustomMoves = sParty_Roxanne2}, }, [TRAINER_ROXANNE_3] = @@ -10803,8 +10803,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Roxanne3 } + .partySize = ARRAY_COUNT(sParty_Roxanne3), + .party = {.ItemCustomMoves = sParty_Roxanne3}, }, [TRAINER_ROXANNE_4] = @@ -10817,8 +10817,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Roxanne4 } + .partySize = ARRAY_COUNT(sParty_Roxanne4), + .party = {.ItemCustomMoves = sParty_Roxanne4}, }, [TRAINER_ROXANNE_5] = @@ -10831,8 +10831,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_Roxanne5 } + .partySize = ARRAY_COUNT(sParty_Roxanne5), + .party = {.ItemCustomMoves = sParty_Roxanne5}, }, [TRAINER_BRAWLY_2] = @@ -10845,8 +10845,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.ItemCustomMoves = sParty_Brawly2 } + .partySize = ARRAY_COUNT(sParty_Brawly2), + .party = {.ItemCustomMoves = sParty_Brawly2}, }, [TRAINER_BRAWLY_3] = @@ -10859,8 +10859,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.ItemCustomMoves = sParty_Brawly3 } + .partySize = ARRAY_COUNT(sParty_Brawly3), + .party = {.ItemCustomMoves = sParty_Brawly3}, }, [TRAINER_BRAWLY_4] = @@ -10873,8 +10873,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Brawly4 } + .partySize = ARRAY_COUNT(sParty_Brawly4), + .party = {.ItemCustomMoves = sParty_Brawly4}, }, [TRAINER_BRAWLY_5] = @@ -10887,8 +10887,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_Brawly5 } + .partySize = ARRAY_COUNT(sParty_Brawly5), + .party = {.ItemCustomMoves = sParty_Brawly5}, }, [TRAINER_WATTSON_2] = @@ -10901,8 +10901,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.ItemCustomMoves = sParty_Wattson2 } + .partySize = ARRAY_COUNT(sParty_Wattson2), + .party = {.ItemCustomMoves = sParty_Wattson2}, }, [TRAINER_WATTSON_3] = @@ -10915,8 +10915,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Wattson3 } + .partySize = ARRAY_COUNT(sParty_Wattson3), + .party = {.ItemCustomMoves = sParty_Wattson3}, }, [TRAINER_WATTSON_4] = @@ -10929,8 +10929,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Wattson4 } + .partySize = ARRAY_COUNT(sParty_Wattson4), + .party = {.ItemCustomMoves = sParty_Wattson4}, }, [TRAINER_WATTSON_5] = @@ -10943,8 +10943,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_Wattson5 } + .partySize = ARRAY_COUNT(sParty_Wattson5), + .party = {.ItemCustomMoves = sParty_Wattson5}, }, [TRAINER_FLANNERY_2] = @@ -10957,8 +10957,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.ItemCustomMoves = sParty_Flannery2 } + .partySize = ARRAY_COUNT(sParty_Flannery2), + .party = {.ItemCustomMoves = sParty_Flannery2}, }, [TRAINER_FLANNERY_3] = @@ -10971,8 +10971,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Flannery3 } + .partySize = ARRAY_COUNT(sParty_Flannery3), + .party = {.ItemCustomMoves = sParty_Flannery3}, }, [TRAINER_FLANNERY_4] = @@ -10985,8 +10985,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_Flannery4 } + .partySize = ARRAY_COUNT(sParty_Flannery4), + .party = {.ItemCustomMoves = sParty_Flannery4}, }, [TRAINER_FLANNERY_5] = @@ -10999,8 +10999,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_Flannery5 } + .partySize = ARRAY_COUNT(sParty_Flannery5), + .party = {.ItemCustomMoves = sParty_Flannery5}, }, [TRAINER_NORMAN_2] = @@ -11013,8 +11013,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 4, - .party = {.ItemCustomMoves = sParty_Norman2 } + .partySize = ARRAY_COUNT(sParty_Norman2), + .party = {.ItemCustomMoves = sParty_Norman2}, }, [TRAINER_NORMAN_3] = @@ -11027,8 +11027,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Norman3 } + .partySize = ARRAY_COUNT(sParty_Norman3), + .party = {.ItemCustomMoves = sParty_Norman3}, }, [TRAINER_NORMAN_4] = @@ -11041,8 +11041,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Norman4 } + .partySize = ARRAY_COUNT(sParty_Norman4), + .party = {.ItemCustomMoves = sParty_Norman4}, }, [TRAINER_NORMAN_5] = @@ -11055,8 +11055,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_Norman5 } + .partySize = ARRAY_COUNT(sParty_Norman5), + .party = {.ItemCustomMoves = sParty_Norman5}, }, [TRAINER_WINONA_2] = @@ -11069,8 +11069,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Winona2 } + .partySize = ARRAY_COUNT(sParty_Winona2), + .party = {.ItemCustomMoves = sParty_Winona2}, }, [TRAINER_WINONA_3] = @@ -11083,8 +11083,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_Winona3 } + .partySize = ARRAY_COUNT(sParty_Winona3), + .party = {.ItemCustomMoves = sParty_Winona3}, }, [TRAINER_WINONA_4] = @@ -11097,8 +11097,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_Winona4 } + .partySize = ARRAY_COUNT(sParty_Winona4), + .party = {.ItemCustomMoves = sParty_Winona4}, }, [TRAINER_WINONA_5] = @@ -11111,8 +11111,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY | AI_SCRIPT_RISKY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_Winona5 } + .partySize = ARRAY_COUNT(sParty_Winona5), + .party = {.ItemCustomMoves = sParty_Winona5}, }, [TRAINER_TATE_AND_LIZA_2] = @@ -11125,8 +11125,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_TateAndLiza2 } + .partySize = ARRAY_COUNT(sParty_TateAndLiza2), + .party = {.ItemCustomMoves = sParty_TateAndLiza2}, }, [TRAINER_TATE_AND_LIZA_3] = @@ -11139,8 +11139,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_TateAndLiza3 } + .partySize = ARRAY_COUNT(sParty_TateAndLiza3), + .party = {.ItemCustomMoves = sParty_TateAndLiza3}, }, [TRAINER_TATE_AND_LIZA_4] = @@ -11153,8 +11153,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_TateAndLiza4 } + .partySize = ARRAY_COUNT(sParty_TateAndLiza4), + .party = {.ItemCustomMoves = sParty_TateAndLiza4}, }, [TRAINER_TATE_AND_LIZA_5] = @@ -11167,8 +11167,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_TateAndLiza5 } + .partySize = ARRAY_COUNT(sParty_TateAndLiza5), + .party = {.ItemCustomMoves = sParty_TateAndLiza5}, }, [TRAINER_JUAN_2] = @@ -11181,8 +11181,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Juan2 } + .partySize = ARRAY_COUNT(sParty_Juan2), + .party = {.ItemCustomMoves = sParty_Juan2}, }, [TRAINER_JUAN_3] = @@ -11195,8 +11195,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 5, - .party = {.ItemCustomMoves = sParty_Juan3 } + .partySize = ARRAY_COUNT(sParty_Juan3), + .party = {.ItemCustomMoves = sParty_Juan3}, }, [TRAINER_JUAN_4] = @@ -11209,8 +11209,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_Juan4 } + .partySize = ARRAY_COUNT(sParty_Juan4), + .party = {.ItemCustomMoves = sParty_Juan4}, }, [TRAINER_JUAN_5] = @@ -11223,8 +11223,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_NONE}, .doubleBattle = TRUE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_Juan5 } + .partySize = ARRAY_COUNT(sParty_Juan5), + .party = {.ItemCustomMoves = sParty_Juan5}, }, [TRAINER_ANGELO] = @@ -11237,8 +11237,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.ItemCustomMoves = sParty_Angelo } + .partySize = ARRAY_COUNT(sParty_Angelo), + .party = {.ItemCustomMoves = sParty_Angelo}, }, [TRAINER_DARIUS] = @@ -11251,8 +11251,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Darius } + .partySize = ARRAY_COUNT(sParty_Darius), + .party = {.NoItemDefaultMoves = sParty_Darius}, }, [TRAINER_STEVEN] = @@ -11265,8 +11265,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE, ITEM_FULL_RESTORE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 6, - .party = {.ItemCustomMoves = sParty_Steven } + .partySize = ARRAY_COUNT(sParty_Steven), + .party = {.ItemCustomMoves = sParty_Steven}, }, [TRAINER_ANABEL] = @@ -11279,8 +11279,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Anabel } + .partySize = ARRAY_COUNT(sParty_Anabel), + .party = {.NoItemDefaultMoves = sParty_Anabel}, }, [TRAINER_TUCKER] = @@ -11293,8 +11293,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Tucker } + .partySize = ARRAY_COUNT(sParty_Tucker), + .party = {.NoItemDefaultMoves = sParty_Tucker}, }, [TRAINER_SPENSER] = @@ -11307,8 +11307,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Spenser } + .partySize = ARRAY_COUNT(sParty_Spenser), + .party = {.NoItemDefaultMoves = sParty_Spenser}, }, [TRAINER_GRETA] = @@ -11321,8 +11321,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Greta } + .partySize = ARRAY_COUNT(sParty_Greta), + .party = {.NoItemDefaultMoves = sParty_Greta}, }, [TRAINER_NOLAND] = @@ -11335,8 +11335,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Noland } + .partySize = ARRAY_COUNT(sParty_Noland), + .party = {.NoItemDefaultMoves = sParty_Noland}, }, [TRAINER_LUCY] = @@ -11349,8 +11349,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Lucy } + .partySize = ARRAY_COUNT(sParty_Lucy), + .party = {.NoItemDefaultMoves = sParty_Lucy}, }, [TRAINER_BRANDON] = @@ -11363,8 +11363,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Brandon } + .partySize = ARRAY_COUNT(sParty_Brandon), + .party = {.NoItemDefaultMoves = sParty_Brandon}, }, [TRAINER_ANDRES_2] = @@ -11377,8 +11377,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Andres2 } + .partySize = ARRAY_COUNT(sParty_Andres2), + .party = {.NoItemDefaultMoves = sParty_Andres2}, }, [TRAINER_ANDRES_3] = @@ -11391,8 +11391,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Andres3 } + .partySize = ARRAY_COUNT(sParty_Andres3), + .party = {.NoItemDefaultMoves = sParty_Andres3}, }, [TRAINER_ANDRES_4] = @@ -11405,8 +11405,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Andres4 } + .partySize = ARRAY_COUNT(sParty_Andres4), + .party = {.NoItemDefaultMoves = sParty_Andres4}, }, [TRAINER_ANDRES_5] = @@ -11419,8 +11419,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Andres5 } + .partySize = ARRAY_COUNT(sParty_Andres5), + .party = {.NoItemDefaultMoves = sParty_Andres5}, }, [TRAINER_CORY_2] = @@ -11433,8 +11433,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Cory2 } + .partySize = ARRAY_COUNT(sParty_Cory2), + .party = {.NoItemDefaultMoves = sParty_Cory2}, }, [TRAINER_CORY_3] = @@ -11447,8 +11447,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Cory3 } + .partySize = ARRAY_COUNT(sParty_Cory3), + .party = {.NoItemDefaultMoves = sParty_Cory3}, }, [TRAINER_CORY_4] = @@ -11461,8 +11461,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Cory4 } + .partySize = ARRAY_COUNT(sParty_Cory4), + .party = {.NoItemDefaultMoves = sParty_Cory4}, }, [TRAINER_CORY_5] = @@ -11475,8 +11475,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Cory5 } + .partySize = ARRAY_COUNT(sParty_Cory5), + .party = {.NoItemDefaultMoves = sParty_Cory5}, }, [TRAINER_PABLO_2] = @@ -11489,8 +11489,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Pablo2 } + .partySize = ARRAY_COUNT(sParty_Pablo2), + .party = {.NoItemDefaultMoves = sParty_Pablo2}, }, [TRAINER_PABLO_3] = @@ -11503,8 +11503,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Pablo3 } + .partySize = ARRAY_COUNT(sParty_Pablo3), + .party = {.NoItemDefaultMoves = sParty_Pablo3}, }, [TRAINER_PABLO_4] = @@ -11517,8 +11517,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Pablo4 } + .partySize = ARRAY_COUNT(sParty_Pablo4), + .party = {.NoItemDefaultMoves = sParty_Pablo4}, }, [TRAINER_PABLO_5] = @@ -11531,8 +11531,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Pablo5 } + .partySize = ARRAY_COUNT(sParty_Pablo5), + .party = {.NoItemDefaultMoves = sParty_Pablo5}, }, [TRAINER_KOJI_2] = @@ -11545,8 +11545,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Koji2 } + .partySize = ARRAY_COUNT(sParty_Koji2), + .party = {.NoItemDefaultMoves = sParty_Koji2}, }, [TRAINER_KOJI_3] = @@ -11559,8 +11559,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Koji3 } + .partySize = ARRAY_COUNT(sParty_Koji3), + .party = {.NoItemDefaultMoves = sParty_Koji3}, }, [TRAINER_KOJI_4] = @@ -11573,8 +11573,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Koji4 } + .partySize = ARRAY_COUNT(sParty_Koji4), + .party = {.NoItemDefaultMoves = sParty_Koji4}, }, [TRAINER_KOJI_5] = @@ -11587,8 +11587,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Koji5 } + .partySize = ARRAY_COUNT(sParty_Koji5), + .party = {.NoItemDefaultMoves = sParty_Koji5}, }, [TRAINER_CRISTIN_2] = @@ -11601,8 +11601,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Cristin2 } + .partySize = ARRAY_COUNT(sParty_Cristin2), + .party = {.NoItemDefaultMoves = sParty_Cristin2}, }, [TRAINER_CRISTIN_3] = @@ -11615,8 +11615,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Cristin3 } + .partySize = ARRAY_COUNT(sParty_Cristin3), + .party = {.NoItemDefaultMoves = sParty_Cristin3}, }, [TRAINER_CRISTIN_4] = @@ -11629,8 +11629,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Cristin4 } + .partySize = ARRAY_COUNT(sParty_Cristin4), + .party = {.NoItemDefaultMoves = sParty_Cristin4}, }, [TRAINER_CRISTIN_5] = @@ -11643,8 +11643,8 @@ const struct Trainer gTrainers[] = { .items = {ITEM_HYPER_POTION, ITEM_NONE, ITEM_NONE, ITEM_NONE}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Cristin5 } + .partySize = ARRAY_COUNT(sParty_Cristin5), + .party = {.NoItemDefaultMoves = sParty_Cristin5}, }, [TRAINER_FERNANDO_2] = @@ -11657,8 +11657,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Fernando2 } + .partySize = ARRAY_COUNT(sParty_Fernando2), + .party = {.NoItemDefaultMoves = sParty_Fernando2}, }, [TRAINER_FERNANDO_3] = @@ -11671,8 +11671,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Fernando3 } + .partySize = ARRAY_COUNT(sParty_Fernando3), + .party = {.NoItemDefaultMoves = sParty_Fernando3}, }, [TRAINER_FERNANDO_4] = @@ -11685,8 +11685,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Fernando4 } + .partySize = ARRAY_COUNT(sParty_Fernando4), + .party = {.NoItemDefaultMoves = sParty_Fernando4}, }, [TRAINER_FERNANDO_5] = @@ -11699,8 +11699,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Fernando5 } + .partySize = ARRAY_COUNT(sParty_Fernando5), + .party = {.NoItemDefaultMoves = sParty_Fernando5}, }, [TRAINER_SAWYER_2] = @@ -11713,8 +11713,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Sawyer2 } + .partySize = ARRAY_COUNT(sParty_Sawyer2), + .party = {.NoItemDefaultMoves = sParty_Sawyer2}, }, [TRAINER_SAWYER_3] = @@ -11727,8 +11727,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Sawyer3 } + .partySize = ARRAY_COUNT(sParty_Sawyer3), + .party = {.NoItemDefaultMoves = sParty_Sawyer3}, }, [TRAINER_SAWYER_4] = @@ -11741,8 +11741,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Sawyer4 } + .partySize = ARRAY_COUNT(sParty_Sawyer4), + .party = {.NoItemDefaultMoves = sParty_Sawyer4}, }, [TRAINER_SAWYER_5] = @@ -11755,8 +11755,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE | AI_SCRIPT_TRY_TO_FAINT | AI_SCRIPT_CHECK_VIABILITY, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Sawyer5 } + .partySize = ARRAY_COUNT(sParty_Sawyer5), + .party = {.NoItemDefaultMoves = sParty_Sawyer5}, }, [TRAINER_GABRIELLE_2] = @@ -11769,8 +11769,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Gabrielle2 } + .partySize = ARRAY_COUNT(sParty_Gabrielle2), + .party = {.NoItemDefaultMoves = sParty_Gabrielle2}, }, [TRAINER_GABRIELLE_3] = @@ -11783,8 +11783,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Gabrielle3 } + .partySize = ARRAY_COUNT(sParty_Gabrielle3), + .party = {.NoItemDefaultMoves = sParty_Gabrielle3}, }, [TRAINER_GABRIELLE_4] = @@ -11797,8 +11797,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Gabrielle4 } + .partySize = ARRAY_COUNT(sParty_Gabrielle4), + .party = {.NoItemDefaultMoves = sParty_Gabrielle4}, }, [TRAINER_GABRIELLE_5] = @@ -11811,8 +11811,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 6, - .party = {.NoItemDefaultMoves = sParty_Gabrielle5 } + .partySize = ARRAY_COUNT(sParty_Gabrielle5), + .party = {.NoItemDefaultMoves = sParty_Gabrielle5}, }, [TRAINER_THALIA_2] = @@ -11825,8 +11825,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Thalia2 } + .partySize = ARRAY_COUNT(sParty_Thalia2), + .party = {.NoItemDefaultMoves = sParty_Thalia2}, }, [TRAINER_THALIA_3] = @@ -11839,8 +11839,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Thalia3 } + .partySize = ARRAY_COUNT(sParty_Thalia3), + .party = {.NoItemDefaultMoves = sParty_Thalia3}, }, [TRAINER_THALIA_4] = @@ -11853,8 +11853,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Thalia4 } + .partySize = ARRAY_COUNT(sParty_Thalia4), + .party = {.NoItemDefaultMoves = sParty_Thalia4}, }, [TRAINER_THALIA_5] = @@ -11867,8 +11867,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = AI_SCRIPT_CHECK_BAD_MOVE, - .partySize = 3, - .party = {.NoItemDefaultMoves = sParty_Thalia5 } + .partySize = ARRAY_COUNT(sParty_Thalia5), + .party = {.NoItemDefaultMoves = sParty_Thalia5}, }, [TRAINER_MARIELA] = @@ -11881,8 +11881,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Mariela } + .partySize = ARRAY_COUNT(sParty_Mariela), + .party = {.NoItemDefaultMoves = sParty_Mariela}, }, [TRAINER_ALVARO] = @@ -11895,8 +11895,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 2, - .party = {.NoItemDefaultMoves = sParty_Alvaro } + .partySize = ARRAY_COUNT(sParty_Alvaro), + .party = {.NoItemDefaultMoves = sParty_Alvaro}, }, [TRAINER_EVERETT] = @@ -11909,8 +11909,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Everett } + .partySize = ARRAY_COUNT(sParty_Everett), + .party = {.NoItemDefaultMoves = sParty_Everett}, }, [TRAINER_RED] = @@ -11923,8 +11923,8 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Red } + .partySize = ARRAY_COUNT(sParty_Red), + .party = {.NoItemDefaultMoves = sParty_Red}, }, [TRAINER_LEAF] = @@ -11937,35 +11937,35 @@ const struct Trainer gTrainers[] = { .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Leaf } + .partySize = ARRAY_COUNT(sParty_Leaf), + .party = {.NoItemDefaultMoves = sParty_Leaf}, }, [TRAINER_BRENDAN_16] = { .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_4, + .trainerClass = TRAINER_CLASS_RS_PROTAG, .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_BRENDAN, .trainerName = _("BRENDAN"), .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_Brendan16 } + .partySize = ARRAY_COUNT(sParty_Brendan16), + .party = {.NoItemDefaultMoves = sParty_Brendan16}, }, [TRAINER_MAY_16] = { .partyFlags = 0, - .trainerClass = TRAINER_CLASS_PKMN_TRAINER_4, + .trainerClass = TRAINER_CLASS_RS_PROTAG, .encounterMusic_gender = F_TRAINER_FEMALE | TRAINER_ENCOUNTER_MUSIC_MALE, .trainerPic = TRAINER_PIC_RS_MAY, .trainerName = _("MAY"), .items = {}, .doubleBattle = FALSE, .aiFlags = 0, - .partySize = 1, - .party = {.NoItemDefaultMoves = sParty_May16 } + .partySize = ARRAY_COUNT(sParty_May16), + .party = {.NoItemDefaultMoves = sParty_May16}, }, }; diff --git a/src/data/wild_encounters.h b/src/data/wild_encounters.h deleted file mode 100644 index d1f2eb616..000000000 --- a/src/data/wild_encounters.h +++ /dev/null @@ -1,4573 +0,0 @@ -// const rom data - -/*This file consists of several parts. - *First, the actual tables that define the available Pokemon and their level ranges. - *Second, the headers for each area that links the tables to the actual maps. - *Third, Battle Pyramid-specific tables and headers. - *Fourth, Battle Pike-specific tables and headers. - *And then finally, Feebas-related data. - *You can search for // to jump between the sections. - */ - - //Start of regular Pokemon tables. - -const struct WildPokemon gRoute101_LandMons[] = -{ - {2, 2, SPECIES_WURMPLE}, - {2, 2, SPECIES_POOCHYENA}, - {2, 2, SPECIES_WURMPLE}, - {3, 3, SPECIES_WURMPLE}, - {3, 3, SPECIES_POOCHYENA}, - {3, 3, SPECIES_POOCHYENA}, - {3, 3, SPECIES_WURMPLE}, - {3, 3, SPECIES_POOCHYENA}, - {2, 2, SPECIES_ZIGZAGOON}, - {2, 2, SPECIES_ZIGZAGOON}, - {3, 3, SPECIES_ZIGZAGOON}, - {3, 3, SPECIES_ZIGZAGOON}, -}; - -const struct WildPokemonInfo gRoute101_LandMonsInfo = {20, gRoute101_LandMons}; - -const struct WildPokemon gRoute102_LandMons[] = -{ - {3, 3, SPECIES_POOCHYENA}, - {3, 3, SPECIES_WURMPLE}, - {4, 4, SPECIES_POOCHYENA}, - {4, 4, SPECIES_WURMPLE}, - {3, 3, SPECIES_LOTAD}, - {4, 4, SPECIES_LOTAD}, - {3, 3, SPECIES_ZIGZAGOON}, - {3, 3, SPECIES_ZIGZAGOON}, - {4, 4, SPECIES_ZIGZAGOON}, - {4, 4, SPECIES_RALTS}, - {4, 4, SPECIES_ZIGZAGOON}, - {3, 3, SPECIES_SEEDOT}, -}; - -const struct WildPokemonInfo gRoute102_LandMonsInfo = {20, gRoute102_LandMons}; - -const struct WildPokemon gRoute102_WaterMons[] = -{ - {20, 30, SPECIES_MARILL}, - {10, 20, SPECIES_MARILL}, - {30, 35, SPECIES_MARILL}, - {5, 10, SPECIES_MARILL}, - {20, 30, SPECIES_GOLDEEN}, -}; - -const struct WildPokemonInfo gRoute102_WaterMonsInfo = {4, gRoute102_WaterMons}; - -const struct WildPokemon gRoute102_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_CORPHISH}, - {25, 30, SPECIES_CORPHISH}, - {30, 35, SPECIES_CORPHISH}, - {20, 25, SPECIES_CORPHISH}, - {35, 40, SPECIES_CORPHISH}, - {40, 45, SPECIES_CORPHISH}, -}; - -const struct WildPokemonInfo gRoute102_FishingMonsInfo = {30, gRoute102_FishingMons}; - -const struct WildPokemon gRoute103_LandMons[] = -{ - {2, 2, SPECIES_POOCHYENA}, - {3, 3, SPECIES_POOCHYENA}, - {3, 3, SPECIES_POOCHYENA}, - {4, 4, SPECIES_POOCHYENA}, - {2, 2, SPECIES_WINGULL}, - {3, 3, SPECIES_ZIGZAGOON}, - {3, 3, SPECIES_ZIGZAGOON}, - {4, 4, SPECIES_ZIGZAGOON}, - {3, 3, SPECIES_WINGULL}, - {3, 3, SPECIES_WINGULL}, - {2, 2, SPECIES_WINGULL}, - {4, 4, SPECIES_WINGULL}, -}; - -const struct WildPokemonInfo gRoute103_LandMonsInfo = {20, gRoute103_LandMons}; - -const struct WildPokemon gRoute103_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute103_WaterMonsInfo = {4, gRoute103_WaterMons}; - -const struct WildPokemon gRoute103_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute103_FishingMonsInfo = {30, gRoute103_FishingMons}; - -const struct WildPokemon gRoute104_LandMons[] = -{ - {4, 4, SPECIES_POOCHYENA}, - {4, 4, SPECIES_WURMPLE}, - {5, 5, SPECIES_POOCHYENA}, - {5, 5, SPECIES_MARILL}, - {4, 4, SPECIES_MARILL}, - {5, 5, SPECIES_POOCHYENA}, - {4, 4, SPECIES_TAILLOW}, - {5, 5, SPECIES_TAILLOW}, - {4, 4, SPECIES_WINGULL}, - {4, 4, SPECIES_WINGULL}, - {3, 3, SPECIES_WINGULL}, - {5, 5, SPECIES_WINGULL}, -}; - -const struct WildPokemonInfo gRoute104_LandMonsInfo = {20, gRoute104_LandMons}; - -const struct WildPokemon gRoute104_WaterMons[] = -{ - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute104_WaterMonsInfo = {4, gRoute104_WaterMons}; - -const struct WildPokemon gRoute104_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_MAGIKARP}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_MAGIKARP}, - {25, 30, SPECIES_MAGIKARP}, - {30, 35, SPECIES_MAGIKARP}, - {20, 25, SPECIES_MAGIKARP}, - {35, 40, SPECIES_MAGIKARP}, - {40, 45, SPECIES_MAGIKARP}, -}; - -const struct WildPokemonInfo gRoute104_FishingMonsInfo = {30, gRoute104_FishingMons}; - -const struct WildPokemon gRoute105_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute105_WaterMonsInfo = {4, gRoute105_WaterMons}; - -const struct WildPokemon gRoute105_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute105_FishingMonsInfo = {30, gRoute105_FishingMons}; - -const struct WildPokemon gRoute110_LandMons[] = -{ - {12, 12, SPECIES_POOCHYENA}, - {12, 12, SPECIES_ELECTRIKE}, - {12, 12, SPECIES_GULPIN}, - {13, 13, SPECIES_ELECTRIKE}, - {13, 13, SPECIES_MINUN}, - {13, 13, SPECIES_ODDISH}, - {13, 13, SPECIES_MINUN}, - {13, 13, SPECIES_GULPIN}, - {12, 12, SPECIES_WINGULL}, - {12, 12, SPECIES_WINGULL}, - {12, 12, SPECIES_PLUSLE}, - {13, 13, SPECIES_PLUSLE}, -}; - -const struct WildPokemonInfo gRoute110_LandMonsInfo = {20, gRoute110_LandMons}; - -const struct WildPokemon gRoute110_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute110_WaterMonsInfo = {4, gRoute110_WaterMons}; - -const struct WildPokemon gRoute110_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute110_FishingMonsInfo = {30, gRoute110_FishingMons}; - -const struct WildPokemon gRoute111_LandMons[] = -{ - {20, 20, SPECIES_SANDSHREW}, - {20, 20, SPECIES_TRAPINCH}, - {21, 21, SPECIES_SANDSHREW}, - {21, 21, SPECIES_TRAPINCH}, - {19, 19, SPECIES_BALTOY}, - {21, 21, SPECIES_BALTOY}, - {19, 19, SPECIES_SANDSHREW}, - {19, 19, SPECIES_TRAPINCH}, - {20, 20, SPECIES_BALTOY}, - {20, 20, SPECIES_CACNEA}, - {22, 22, SPECIES_CACNEA}, - {22, 22, SPECIES_CACNEA}, -}; - -const struct WildPokemonInfo gRoute111_LandMonsInfo = {10, gRoute111_LandMons}; - -const struct WildPokemon gRoute111_WaterMons[] = -{ - {20, 30, SPECIES_MARILL}, - {10, 20, SPECIES_MARILL}, - {30, 35, SPECIES_MARILL}, - {5, 10, SPECIES_MARILL}, - {20, 30, SPECIES_GOLDEEN}, -}; - -const struct WildPokemonInfo gRoute111_WaterMonsInfo = {4, gRoute111_WaterMons}; - -const struct WildPokemon gRoute111_RockSmashMons[] = -{ - {10, 15, SPECIES_GEODUDE}, - {5, 10, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, -}; - -const struct WildPokemonInfo gRoute111_RockSmashMonsInfo = {20, gRoute111_RockSmashMons}; - -const struct WildPokemon gRoute111_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {20, 25, SPECIES_BARBOACH}, - {35, 40, SPECIES_BARBOACH}, - {40, 45, SPECIES_BARBOACH}, -}; - -const struct WildPokemonInfo gRoute111_FishingMonsInfo = {30, gRoute111_FishingMons}; - -const struct WildPokemon gRoute112_LandMons[] = -{ - {15, 15, SPECIES_NUMEL}, - {15, 15, SPECIES_NUMEL}, - {15, 15, SPECIES_MARILL}, - {14, 14, SPECIES_NUMEL}, - {14, 14, SPECIES_NUMEL}, - {14, 14, SPECIES_MARILL}, - {16, 16, SPECIES_NUMEL}, - {16, 16, SPECIES_MARILL}, - {16, 16, SPECIES_NUMEL}, - {16, 16, SPECIES_NUMEL}, - {16, 16, SPECIES_NUMEL}, - {16, 16, SPECIES_NUMEL}, -}; - -const struct WildPokemonInfo gRoute112_LandMonsInfo = {20, gRoute112_LandMons}; - -const struct WildPokemon gRoute113_LandMons[] = -{ - {15, 15, SPECIES_SPINDA}, - {15, 15, SPECIES_SPINDA}, - {15, 15, SPECIES_SLUGMA}, - {14, 14, SPECIES_SPINDA}, - {14, 14, SPECIES_SPINDA}, - {14, 14, SPECIES_SLUGMA}, - {16, 16, SPECIES_SPINDA}, - {16, 16, SPECIES_SLUGMA}, - {16, 16, SPECIES_SPINDA}, - {16, 16, SPECIES_SKARMORY}, - {16, 16, SPECIES_SPINDA}, - {16, 16, SPECIES_SKARMORY}, -}; - -const struct WildPokemonInfo gRoute113_LandMonsInfo = {20, gRoute113_LandMons}; - -const struct WildPokemon gRoute114_LandMons[] = -{ - {16, 16, SPECIES_SWABLU}, - {16, 16, SPECIES_LOTAD}, - {17, 17, SPECIES_SWABLU}, - {15, 15, SPECIES_SWABLU}, - {15, 15, SPECIES_LOTAD}, - {16, 16, SPECIES_LOMBRE}, - {16, 16, SPECIES_LOMBRE}, - {18, 18, SPECIES_LOMBRE}, - {17, 17, SPECIES_SEVIPER}, - {15, 15, SPECIES_SEVIPER}, - {17, 17, SPECIES_SEVIPER}, - {15, 15, SPECIES_NUZLEAF}, -}; - -const struct WildPokemonInfo gRoute114_LandMonsInfo = {20, gRoute114_LandMons}; - -const struct WildPokemon gRoute114_WaterMons[] = -{ - {20, 30, SPECIES_MARILL}, - {10, 20, SPECIES_MARILL}, - {30, 35, SPECIES_MARILL}, - {5, 10, SPECIES_MARILL}, - {20, 30, SPECIES_GOLDEEN}, -}; - -const struct WildPokemonInfo gRoute114_WaterMonsInfo = {4, gRoute114_WaterMons}; - -const struct WildPokemon gRoute114_RockSmashMons[] = -{ - {10, 15, SPECIES_GEODUDE}, - {5, 10, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, -}; - -const struct WildPokemonInfo gRoute114_RockSmashMonsInfo = {20, gRoute114_RockSmashMons}; - -const struct WildPokemon gRoute114_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {20, 25, SPECIES_BARBOACH}, - {35, 40, SPECIES_BARBOACH}, - {40, 45, SPECIES_BARBOACH}, -}; - -const struct WildPokemonInfo gRoute114_FishingMonsInfo = {30, gRoute114_FishingMons}; - -const struct WildPokemon gRoute116_LandMons[] = -{ - {6, 6, SPECIES_POOCHYENA}, - {6, 6, SPECIES_WHISMUR}, - {6, 6, SPECIES_NINCADA}, - {7, 7, SPECIES_ABRA}, - {7, 7, SPECIES_NINCADA}, - {6, 6, SPECIES_TAILLOW}, - {7, 7, SPECIES_TAILLOW}, - {8, 8, SPECIES_TAILLOW}, - {7, 7, SPECIES_POOCHYENA}, - {8, 8, SPECIES_POOCHYENA}, - {7, 7, SPECIES_SKITTY}, - {8, 8, SPECIES_SKITTY}, -}; - -const struct WildPokemonInfo gRoute116_LandMonsInfo = {20, gRoute116_LandMons}; - -const struct WildPokemon gRoute117_LandMons[] = -{ - {13, 13, SPECIES_POOCHYENA}, - {13, 13, SPECIES_ODDISH}, - {14, 14, SPECIES_POOCHYENA}, - {14, 14, SPECIES_ODDISH}, - {13, 13, SPECIES_MARILL}, - {13, 13, SPECIES_ODDISH}, - {13, 13, SPECIES_ILLUMISE}, - {13, 13, SPECIES_ILLUMISE}, - {14, 14, SPECIES_ILLUMISE}, - {14, 14, SPECIES_ILLUMISE}, - {13, 13, SPECIES_VOLBEAT}, - {13, 13, SPECIES_SEEDOT}, -}; - -const struct WildPokemonInfo gRoute117_LandMonsInfo = {20, gRoute117_LandMons}; - -const struct WildPokemon gRoute117_WaterMons[] = -{ - {20, 30, SPECIES_MARILL}, - {10, 20, SPECIES_MARILL}, - {30, 35, SPECIES_MARILL}, - {5, 10, SPECIES_MARILL}, - {20, 30, SPECIES_GOLDEEN}, -}; - -const struct WildPokemonInfo gRoute117_WaterMonsInfo = {4, gRoute117_WaterMons}; - -const struct WildPokemon gRoute117_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_CORPHISH}, - {25, 30, SPECIES_CORPHISH}, - {30, 35, SPECIES_CORPHISH}, - {20, 25, SPECIES_CORPHISH}, - {35, 40, SPECIES_CORPHISH}, - {40, 45, SPECIES_CORPHISH}, -}; - -const struct WildPokemonInfo gRoute117_FishingMonsInfo = {30, gRoute117_FishingMons}; - -const struct WildPokemon gRoute118_LandMons[] = -{ - {24, 24, SPECIES_ZIGZAGOON}, - {24, 24, SPECIES_ELECTRIKE}, - {26, 26, SPECIES_ZIGZAGOON}, - {26, 26, SPECIES_ELECTRIKE}, - {26, 26, SPECIES_LINOONE}, - {26, 26, SPECIES_MANECTRIC}, - {25, 25, SPECIES_WINGULL}, - {25, 25, SPECIES_WINGULL}, - {26, 26, SPECIES_WINGULL}, - {26, 26, SPECIES_WINGULL}, - {27, 27, SPECIES_WINGULL}, - {25, 25, SPECIES_KECLEON}, -}; - -const struct WildPokemonInfo gRoute118_LandMonsInfo = {20, gRoute118_LandMons}; - -const struct WildPokemon gRoute118_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute118_WaterMonsInfo = {4, gRoute118_WaterMons}; - -const struct WildPokemon gRoute118_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_CARVANHA}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_CARVANHA}, - {20, 25, SPECIES_CARVANHA}, - {35, 40, SPECIES_CARVANHA}, - {40, 45, SPECIES_CARVANHA}, -}; - -const struct WildPokemonInfo gRoute118_FishingMonsInfo = {30, gRoute118_FishingMons}; - -const struct WildPokemon gRoute124_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute124_WaterMonsInfo = {4, gRoute124_WaterMons}; - -const struct WildPokemon gRoute124_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute124_FishingMonsInfo = {30, gRoute124_FishingMons}; - -const struct WildPokemon gPetalburgWoods_LandMons[] = -{ - {5, 5, SPECIES_POOCHYENA}, - {5, 5, SPECIES_WURMPLE}, - {5, 5, SPECIES_SHROOMISH}, - {6, 6, SPECIES_POOCHYENA}, - {5, 5, SPECIES_SILCOON}, - {5, 5, SPECIES_CASCOON}, - {6, 6, SPECIES_WURMPLE}, - {6, 6, SPECIES_SHROOMISH}, - {5, 5, SPECIES_TAILLOW}, - {5, 5, SPECIES_SLAKOTH}, - {6, 6, SPECIES_TAILLOW}, - {6, 6, SPECIES_SLAKOTH}, -}; - -const struct WildPokemonInfo gPetalburgWoods_LandMonsInfo = {20, gPetalburgWoods_LandMons}; - -const struct WildPokemon gRusturfTunnel_LandMons[] = -{ - {6, 6, SPECIES_WHISMUR}, - {7, 7, SPECIES_WHISMUR}, - {6, 6, SPECIES_WHISMUR}, - {6, 6, SPECIES_WHISMUR}, - {7, 7, SPECIES_WHISMUR}, - {7, 7, SPECIES_WHISMUR}, - {5, 5, SPECIES_WHISMUR}, - {8, 8, SPECIES_WHISMUR}, - {5, 5, SPECIES_WHISMUR}, - {8, 8, SPECIES_WHISMUR}, - {5, 5, SPECIES_WHISMUR}, - {8, 8, SPECIES_WHISMUR}, -}; - -const struct WildPokemonInfo gRusturfTunnel_LandMonsInfo = {10, gRusturfTunnel_LandMons}; - -const struct WildPokemon gGraniteCave_1F_LandMons[] = -{ - {7, 7, SPECIES_ZUBAT}, - {8, 8, SPECIES_MAKUHITA}, - {7, 7, SPECIES_MAKUHITA}, - {8, 8, SPECIES_ZUBAT}, - {9, 9, SPECIES_MAKUHITA}, - {8, 8, SPECIES_ABRA}, - {10, 10, SPECIES_MAKUHITA}, - {6, 6, SPECIES_MAKUHITA}, - {7, 7, SPECIES_GEODUDE}, - {8, 8, SPECIES_GEODUDE}, - {6, 6, SPECIES_GEODUDE}, - {9, 9, SPECIES_GEODUDE}, -}; - -const struct WildPokemonInfo gGraniteCave_1F_LandMonsInfo = {10, gGraniteCave_1F_LandMons}; - -const struct WildPokemon gGraniteCave_B1F_LandMons[] = -{ - {9, 9, SPECIES_ZUBAT}, - {10, 10, SPECIES_ARON}, - {9, 9, SPECIES_ARON}, - {11, 11, SPECIES_ARON}, - {10, 10, SPECIES_ZUBAT}, - {9, 9, SPECIES_ABRA}, - {10, 10, SPECIES_MAKUHITA}, - {11, 11, SPECIES_MAKUHITA}, - {10, 10, SPECIES_SABLEYE}, - {10, 10, SPECIES_SABLEYE}, - {9, 9, SPECIES_SABLEYE}, - {11, 11, SPECIES_SABLEYE}, -}; - -const struct WildPokemonInfo gGraniteCave_B1F_LandMonsInfo = {10, gGraniteCave_B1F_LandMons}; - -const struct WildPokemon gMtPyre_1F_LandMons[] = -{ - {27, 27, SPECIES_SHUPPET}, - {28, 28, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {23, 23, SPECIES_SHUPPET}, - {22, 22, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, -}; - -const struct WildPokemonInfo gMtPyre_1F_LandMonsInfo = {10, gMtPyre_1F_LandMons}; - -const struct WildPokemon gVictoryRoad_1F_LandMons[] = -{ - {40, 40, SPECIES_GOLBAT}, - {40, 40, SPECIES_HARIYAMA}, - {40, 40, SPECIES_LAIRON}, - {40, 40, SPECIES_LOUDRED}, - {36, 36, SPECIES_ZUBAT}, - {36, 36, SPECIES_MAKUHITA}, - {38, 38, SPECIES_GOLBAT}, - {38, 38, SPECIES_HARIYAMA}, - {36, 36, SPECIES_ARON}, - {36, 36, SPECIES_WHISMUR}, - {36, 36, SPECIES_ARON}, - {36, 36, SPECIES_WHISMUR}, -}; - -const struct WildPokemonInfo gVictoryRoad_1F_LandMonsInfo = {10, gVictoryRoad_1F_LandMons}; - -const struct WildPokemon gSafariZone_South_LandMons[] = -{ - {25, 25, SPECIES_ODDISH}, - {27, 27, SPECIES_ODDISH}, - {25, 25, SPECIES_GIRAFARIG}, - {27, 27, SPECIES_GIRAFARIG}, - {25, 25, SPECIES_NATU}, - {25, 25, SPECIES_DODUO}, - {25, 25, SPECIES_GLOOM}, - {27, 27, SPECIES_WOBBUFFET}, - {25, 25, SPECIES_PIKACHU}, - {27, 27, SPECIES_WOBBUFFET}, - {27, 27, SPECIES_PIKACHU}, - {29, 29, SPECIES_WOBBUFFET}, -}; - -const struct WildPokemonInfo gSafariZone_South_LandMonsInfo = {25, gSafariZone_South_LandMons}; - -const struct WildPokemon gUnderwater2_WaterMons[] = -{ - {20, 30, SPECIES_CLAMPERL}, - {20, 30, SPECIES_CHINCHOU}, - {30, 35, SPECIES_CLAMPERL}, - {30, 35, SPECIES_RELICANTH}, - {30, 35, SPECIES_RELICANTH}, -}; - -const struct WildPokemonInfo gUnderwater2_WaterMonsInfo = {4, gUnderwater2_WaterMons}; - -const struct WildPokemon gAbandonedShip_Rooms_B1F_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_TENTACOOL}, - {30, 35, SPECIES_TENTACRUEL}, -}; - -const struct WildPokemonInfo gAbandonedShip_Rooms_B1F_WaterMonsInfo = {4, gAbandonedShip_Rooms_B1F_WaterMons}; - -const struct WildPokemon gAbandonedShip_Rooms_B1F_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_TENTACOOL}, - {25, 30, SPECIES_TENTACOOL}, - {30, 35, SPECIES_TENTACOOL}, - {30, 35, SPECIES_TENTACRUEL}, - {25, 30, SPECIES_TENTACRUEL}, - {20, 25, SPECIES_TENTACRUEL}, -}; - -const struct WildPokemonInfo gAbandonedShip_Rooms_B1F_FishingMonsInfo = {20, gAbandonedShip_Rooms_B1F_FishingMons}; - -const struct WildPokemon gGraniteCave_B2F_LandMons[] = -{ - {10, 10, SPECIES_ZUBAT}, - {11, 11, SPECIES_ARON}, - {10, 10, SPECIES_ARON}, - {11, 11, SPECIES_ZUBAT}, - {12, 12, SPECIES_ARON}, - {10, 10, SPECIES_ABRA}, - {10, 10, SPECIES_SABLEYE}, - {11, 11, SPECIES_SABLEYE}, - {12, 12, SPECIES_SABLEYE}, - {10, 10, SPECIES_SABLEYE}, - {12, 12, SPECIES_SABLEYE}, - {10, 10, SPECIES_SABLEYE}, -}; - -const struct WildPokemonInfo gGraniteCave_B2F_LandMonsInfo = {10, gGraniteCave_B2F_LandMons}; - -const struct WildPokemon gGraniteCave_B2F_RockSmashMons[] = -{ - {10, 15, SPECIES_GEODUDE}, - {10, 20, SPECIES_NOSEPASS}, - {5, 10, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, -}; - -const struct WildPokemonInfo gGraniteCave_B2F_RockSmashMonsInfo = {20, gGraniteCave_B2F_RockSmashMons}; - -const struct WildPokemon gFieryPath_LandMons[] = -{ - {15, 15, SPECIES_NUMEL}, - {15, 15, SPECIES_KOFFING}, - {16, 16, SPECIES_NUMEL}, - {15, 15, SPECIES_MACHOP}, - {15, 15, SPECIES_TORKOAL}, - {15, 15, SPECIES_SLUGMA}, - {16, 16, SPECIES_KOFFING}, - {16, 16, SPECIES_MACHOP}, - {14, 14, SPECIES_TORKOAL}, - {16, 16, SPECIES_TORKOAL}, - {14, 14, SPECIES_GRIMER}, - {14, 14, SPECIES_GRIMER}, -}; - -const struct WildPokemonInfo gFieryPath_LandMonsInfo = {10, gFieryPath_LandMons}; - -const struct WildPokemon gMeteorFalls_B1F_2R_LandMons[] = -{ - {33, 33, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {30, 30, SPECIES_BAGON}, - {35, 35, SPECIES_SOLROCK}, - {35, 35, SPECIES_BAGON}, - {37, 37, SPECIES_SOLROCK}, - {25, 25, SPECIES_BAGON}, - {39, 39, SPECIES_SOLROCK}, - {38, 38, SPECIES_GOLBAT}, - {40, 40, SPECIES_GOLBAT}, - {38, 38, SPECIES_GOLBAT}, - {40, 40, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gMeteorFalls_B1F_2R_LandMonsInfo = {10, gMeteorFalls_B1F_2R_LandMons}; - -const struct WildPokemon gMeteorFalls_B1F_2R_WaterMons[] = -{ - {30, 35, SPECIES_GOLBAT}, - {30, 35, SPECIES_GOLBAT}, - {25, 35, SPECIES_SOLROCK}, - {15, 25, SPECIES_SOLROCK}, - {5, 15, SPECIES_SOLROCK}, -}; - -const struct WildPokemonInfo gMeteorFalls_B1F_2R_WaterMonsInfo = {4, gMeteorFalls_B1F_2R_WaterMons}; - -const struct WildPokemon gMeteorFalls_B1F_2R_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {30, 35, SPECIES_WHISCASH}, - {35, 40, SPECIES_WHISCASH}, - {40, 45, SPECIES_WHISCASH}, -}; - -const struct WildPokemonInfo gMeteorFalls_B1F_2R_FishingMonsInfo = {30, gMeteorFalls_B1F_2R_FishingMons}; - -const struct WildPokemon gJaggedPass_LandMons[] = -{ - {21, 21, SPECIES_NUMEL}, - {21, 21, SPECIES_NUMEL}, - {21, 21, SPECIES_MACHOP}, - {20, 20, SPECIES_NUMEL}, - {20, 20, SPECIES_SPOINK}, - {20, 20, SPECIES_MACHOP}, - {21, 21, SPECIES_SPOINK}, - {22, 22, SPECIES_MACHOP}, - {22, 22, SPECIES_NUMEL}, - {22, 22, SPECIES_SPOINK}, - {22, 22, SPECIES_NUMEL}, - {22, 22, SPECIES_SPOINK}, -}; - -const struct WildPokemonInfo gJaggedPass_LandMonsInfo = {20, gJaggedPass_LandMons}; - -const struct WildPokemon gRoute106_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute106_WaterMonsInfo = {4, gRoute106_WaterMons}; - -const struct WildPokemon gRoute106_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute106_FishingMonsInfo = {30, gRoute106_FishingMons}; - -const struct WildPokemon gRoute107_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute107_WaterMonsInfo = {4, gRoute107_WaterMons}; - -const struct WildPokemon gRoute107_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute107_FishingMonsInfo = {30, gRoute107_FishingMons}; - -const struct WildPokemon gRoute108_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute108_WaterMonsInfo = {4, gRoute108_WaterMons}; - -const struct WildPokemon gRoute108_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute108_FishingMonsInfo = {30, gRoute108_FishingMons}; - -const struct WildPokemon gRoute109_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute109_WaterMonsInfo = {4, gRoute109_WaterMons}; - -const struct WildPokemon gRoute109_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute109_FishingMonsInfo = {30, gRoute109_FishingMons}; - -const struct WildPokemon gRoute115_LandMons[] = -{ - {23, 23, SPECIES_SWABLU}, - {23, 23, SPECIES_TAILLOW}, - {25, 25, SPECIES_SWABLU}, - {24, 24, SPECIES_TAILLOW}, - {25, 25, SPECIES_TAILLOW}, - {25, 25, SPECIES_SWELLOW}, - {24, 24, SPECIES_JIGGLYPUFF}, - {25, 25, SPECIES_JIGGLYPUFF}, - {24, 24, SPECIES_WINGULL}, - {24, 24, SPECIES_WINGULL}, - {26, 26, SPECIES_WINGULL}, - {25, 25, SPECIES_WINGULL}, -}; - -const struct WildPokemonInfo gRoute115_LandMonsInfo = {20, gRoute115_LandMons}; - -const struct WildPokemon gRoute115_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute115_WaterMonsInfo = {4, gRoute115_WaterMons}; - -const struct WildPokemon gRoute115_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute115_FishingMonsInfo = {30, gRoute115_FishingMons}; - -const struct WildPokemon gNewMauville_Inside_LandMons[] = -{ - {24, 24, SPECIES_VOLTORB}, - {24, 24, SPECIES_MAGNEMITE}, - {25, 25, SPECIES_VOLTORB}, - {25, 25, SPECIES_MAGNEMITE}, - {23, 23, SPECIES_VOLTORB}, - {23, 23, SPECIES_MAGNEMITE}, - {26, 26, SPECIES_VOLTORB}, - {26, 26, SPECIES_MAGNEMITE}, - {22, 22, SPECIES_VOLTORB}, - {22, 22, SPECIES_MAGNEMITE}, - {26, 26, SPECIES_ELECTRODE}, - {26, 26, SPECIES_MAGNETON}, -}; - -const struct WildPokemonInfo gNewMauville_Inside_LandMonsInfo = {10, gNewMauville_Inside_LandMons}; - -const struct WildPokemon gRoute119_LandMons[] = -{ - {25, 25, SPECIES_ZIGZAGOON}, - {25, 25, SPECIES_LINOONE}, - {27, 27, SPECIES_ZIGZAGOON}, - {25, 25, SPECIES_ODDISH}, - {27, 27, SPECIES_LINOONE}, - {26, 26, SPECIES_ODDISH}, - {27, 27, SPECIES_ODDISH}, - {24, 24, SPECIES_ODDISH}, - {25, 25, SPECIES_TROPIUS}, - {26, 26, SPECIES_TROPIUS}, - {27, 27, SPECIES_TROPIUS}, - {25, 25, SPECIES_KECLEON}, -}; - -const struct WildPokemonInfo gRoute119_LandMonsInfo = {15, gRoute119_LandMons}; - -const struct WildPokemon gRoute119_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute119_WaterMonsInfo = {4, gRoute119_WaterMons}; - -const struct WildPokemon gRoute119_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_CARVANHA}, - {25, 30, SPECIES_CARVANHA}, - {30, 35, SPECIES_CARVANHA}, - {20, 25, SPECIES_CARVANHA}, - {35, 40, SPECIES_CARVANHA}, - {40, 45, SPECIES_CARVANHA}, -}; - -const struct WildPokemonInfo gRoute119_FishingMonsInfo = {30, gRoute119_FishingMons}; - -const struct WildPokemon gRoute120_LandMons[] = -{ - {25, 25, SPECIES_POOCHYENA}, - {25, 25, SPECIES_MIGHTYENA}, - {27, 27, SPECIES_MIGHTYENA}, - {25, 25, SPECIES_ODDISH}, - {25, 25, SPECIES_MARILL}, - {26, 26, SPECIES_ODDISH}, - {27, 27, SPECIES_ODDISH}, - {27, 27, SPECIES_MARILL}, - {25, 25, SPECIES_ABSOL}, - {27, 27, SPECIES_ABSOL}, - {25, 25, SPECIES_KECLEON}, - {25, 25, SPECIES_SEEDOT}, -}; - -const struct WildPokemonInfo gRoute120_LandMonsInfo = {20, gRoute120_LandMons}; - -const struct WildPokemon gRoute120_WaterMons[] = -{ - {20, 30, SPECIES_MARILL}, - {10, 20, SPECIES_MARILL}, - {30, 35, SPECIES_MARILL}, - {5, 10, SPECIES_MARILL}, - {20, 30, SPECIES_GOLDEEN}, -}; - -const struct WildPokemonInfo gRoute120_WaterMonsInfo = {4, gRoute120_WaterMons}; - -const struct WildPokemon gRoute120_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {20, 25, SPECIES_BARBOACH}, - {35, 40, SPECIES_BARBOACH}, - {40, 45, SPECIES_BARBOACH}, -}; - -const struct WildPokemonInfo gRoute120_FishingMonsInfo = {30, gRoute120_FishingMons}; - -const struct WildPokemon gRoute121_LandMons[] = -{ - {26, 26, SPECIES_POOCHYENA}, - {26, 26, SPECIES_SHUPPET}, - {26, 26, SPECIES_MIGHTYENA}, - {28, 28, SPECIES_SHUPPET}, - {28, 28, SPECIES_MIGHTYENA}, - {26, 26, SPECIES_ODDISH}, - {28, 28, SPECIES_ODDISH}, - {28, 28, SPECIES_GLOOM}, - {26, 26, SPECIES_WINGULL}, - {27, 27, SPECIES_WINGULL}, - {28, 28, SPECIES_WINGULL}, - {25, 25, SPECIES_KECLEON}, -}; - -const struct WildPokemonInfo gRoute121_LandMonsInfo = {20, gRoute121_LandMons}; - -const struct WildPokemon gRoute121_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute121_WaterMonsInfo = {4, gRoute121_WaterMons}; - -const struct WildPokemon gRoute121_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute121_FishingMonsInfo = {30, gRoute121_FishingMons}; - -const struct WildPokemon gRoute122_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute122_WaterMonsInfo = {4, gRoute122_WaterMons}; - -const struct WildPokemon gRoute122_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute122_FishingMonsInfo = {30, gRoute122_FishingMons}; - -const struct WildPokemon gRoute123_LandMons[] = -{ - {26, 26, SPECIES_POOCHYENA}, - {26, 26, SPECIES_SHUPPET}, - {26, 26, SPECIES_MIGHTYENA}, - {28, 28, SPECIES_SHUPPET}, - {28, 28, SPECIES_MIGHTYENA}, - {26, 26, SPECIES_ODDISH}, - {28, 28, SPECIES_ODDISH}, - {28, 28, SPECIES_GLOOM}, - {26, 26, SPECIES_WINGULL}, - {27, 27, SPECIES_WINGULL}, - {28, 28, SPECIES_WINGULL}, - {25, 25, SPECIES_KECLEON}, -}; - -const struct WildPokemonInfo gRoute123_LandMonsInfo = {20, gRoute123_LandMons}; - -const struct WildPokemon gRoute123_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute123_WaterMonsInfo = {4, gRoute123_WaterMons}; - -const struct WildPokemon gRoute123_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute123_FishingMonsInfo = {30, gRoute123_FishingMons}; - -const struct WildPokemon gMtPyre_2F_LandMons[] = -{ - {27, 27, SPECIES_SHUPPET}, - {28, 28, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {23, 23, SPECIES_SHUPPET}, - {22, 22, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, -}; - -const struct WildPokemonInfo gMtPyre_2F_LandMonsInfo = {10, gMtPyre_2F_LandMons}; - -const struct WildPokemon gMtPyre_3F_LandMons[] = -{ - {27, 27, SPECIES_SHUPPET}, - {28, 28, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {23, 23, SPECIES_SHUPPET}, - {22, 22, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, -}; - -const struct WildPokemonInfo gMtPyre_3F_LandMonsInfo = {10, gMtPyre_3F_LandMons}; - -const struct WildPokemon gMtPyre_4F_LandMons[] = -{ - {27, 27, SPECIES_SHUPPET}, - {28, 28, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {23, 23, SPECIES_SHUPPET}, - {22, 22, SPECIES_SHUPPET}, - {27, 27, SPECIES_DUSKULL}, - {27, 27, SPECIES_DUSKULL}, - {25, 25, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, -}; - -const struct WildPokemonInfo gMtPyre_4F_LandMonsInfo = {10, gMtPyre_4F_LandMons}; - -const struct WildPokemon gMtPyre_5F_LandMons[] = -{ - {27, 27, SPECIES_SHUPPET}, - {28, 28, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {23, 23, SPECIES_SHUPPET}, - {22, 22, SPECIES_SHUPPET}, - {27, 27, SPECIES_DUSKULL}, - {27, 27, SPECIES_DUSKULL}, - {25, 25, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, -}; - -const struct WildPokemonInfo gMtPyre_5F_LandMonsInfo = {10, gMtPyre_5F_LandMons}; - -const struct WildPokemon gMtPyre_6F_LandMons[] = -{ - {27, 27, SPECIES_SHUPPET}, - {28, 28, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {23, 23, SPECIES_SHUPPET}, - {22, 22, SPECIES_SHUPPET}, - {27, 27, SPECIES_DUSKULL}, - {27, 27, SPECIES_DUSKULL}, - {25, 25, SPECIES_DUSKULL}, - {29, 29, SPECIES_DUSKULL}, -}; - -const struct WildPokemonInfo gMtPyre_6F_LandMonsInfo = {10, gMtPyre_6F_LandMons}; - -const struct WildPokemon gMtPyre_Exterior_LandMons[] = -{ - {27, 27, SPECIES_SHUPPET}, - {27, 27, SPECIES_SHUPPET}, - {28, 28, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {29, 29, SPECIES_VULPIX}, - {27, 27, SPECIES_VULPIX}, - {29, 29, SPECIES_VULPIX}, - {25, 25, SPECIES_VULPIX}, - {27, 27, SPECIES_WINGULL}, - {27, 27, SPECIES_WINGULL}, - {26, 26, SPECIES_WINGULL}, - {28, 28, SPECIES_WINGULL}, -}; - -const struct WildPokemonInfo gMtPyre_Exterior_LandMonsInfo = {10, gMtPyre_Exterior_LandMons}; - -const struct WildPokemon gMtPyre_Summit_LandMons[] = -{ - {28, 28, SPECIES_SHUPPET}, - {29, 29, SPECIES_SHUPPET}, - {27, 27, SPECIES_SHUPPET}, - {26, 26, SPECIES_SHUPPET}, - {30, 30, SPECIES_SHUPPET}, - {25, 25, SPECIES_SHUPPET}, - {24, 24, SPECIES_SHUPPET}, - {28, 28, SPECIES_DUSKULL}, - {26, 26, SPECIES_DUSKULL}, - {30, 30, SPECIES_DUSKULL}, - {28, 28, SPECIES_CHIMECHO}, - {28, 28, SPECIES_CHIMECHO}, -}; - -const struct WildPokemonInfo gMtPyre_Summit_LandMonsInfo = {10, gMtPyre_Summit_LandMons}; - -const struct WildPokemon gGraniteCave_StevensRoom_LandMons[] = -{ - {7, 7, SPECIES_ZUBAT}, - {8, 8, SPECIES_MAKUHITA}, - {7, 7, SPECIES_MAKUHITA}, - {8, 8, SPECIES_ZUBAT}, - {9, 9, SPECIES_MAKUHITA}, - {8, 8, SPECIES_ABRA}, - {10, 10, SPECIES_MAKUHITA}, - {6, 6, SPECIES_MAKUHITA}, - {7, 7, SPECIES_ARON}, - {8, 8, SPECIES_ARON}, - {7, 7, SPECIES_ARON}, - {8, 8, SPECIES_ARON}, -}; - -const struct WildPokemonInfo gGraniteCave_StevensRoom_LandMonsInfo = {10, gGraniteCave_StevensRoom_LandMons}; - -const struct WildPokemon gRoute125_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute125_WaterMonsInfo = {4, gRoute125_WaterMons}; - -const struct WildPokemon gRoute125_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute125_FishingMonsInfo = {30, gRoute125_FishingMons}; - -const struct WildPokemon gRoute126_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute126_WaterMonsInfo = {4, gRoute126_WaterMons}; - -const struct WildPokemon gRoute126_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute126_FishingMonsInfo = {30, gRoute126_FishingMons}; - -const struct WildPokemon gRoute127_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute127_WaterMonsInfo = {4, gRoute127_WaterMons}; - -const struct WildPokemon gRoute127_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute127_FishingMonsInfo = {30, gRoute127_FishingMons}; - -const struct WildPokemon gRoute128_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute128_WaterMonsInfo = {4, gRoute128_WaterMons}; - -const struct WildPokemon gRoute128_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_LUVDISC}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_LUVDISC}, - {30, 35, SPECIES_WAILMER}, - {30, 35, SPECIES_CORSOLA}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute128_FishingMonsInfo = {30, gRoute128_FishingMons}; - -const struct WildPokemon gRoute129_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_WAILORD}, -}; - -const struct WildPokemonInfo gRoute129_WaterMonsInfo = {4, gRoute129_WaterMons}; - -const struct WildPokemon gRoute129_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute129_FishingMonsInfo = {30, gRoute129_FishingMons}; - -const struct WildPokemon gRoute130_LandMons[] = -{ - {30, 30, SPECIES_WYNAUT}, - {35, 35, SPECIES_WYNAUT}, - {25, 25, SPECIES_WYNAUT}, - {40, 40, SPECIES_WYNAUT}, - {20, 20, SPECIES_WYNAUT}, - {45, 45, SPECIES_WYNAUT}, - {15, 15, SPECIES_WYNAUT}, - {50, 50, SPECIES_WYNAUT}, - {10, 10, SPECIES_WYNAUT}, - {5, 5, SPECIES_WYNAUT}, - {10, 10, SPECIES_WYNAUT}, - {5, 5, SPECIES_WYNAUT}, -}; - -const struct WildPokemonInfo gRoute130_LandMonsInfo = {20, gRoute130_LandMons}; - -const struct WildPokemon gRoute130_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute130_WaterMonsInfo = {4, gRoute130_WaterMons}; - -const struct WildPokemon gRoute130_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute130_FishingMonsInfo = {30, gRoute130_FishingMons}; - -const struct WildPokemon gRoute131_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute131_WaterMonsInfo = {4, gRoute131_WaterMons}; - -const struct WildPokemon gRoute131_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute131_FishingMonsInfo = {30, gRoute131_FishingMons}; - -const struct WildPokemon gRoute132_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute132_WaterMonsInfo = {4, gRoute132_WaterMons}; - -const struct WildPokemon gRoute132_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_HORSEA}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute132_FishingMonsInfo = {30, gRoute132_FishingMons}; - -const struct WildPokemon gRoute133_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute133_WaterMonsInfo = {4, gRoute133_WaterMons}; - -const struct WildPokemon gRoute133_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_HORSEA}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute133_FishingMonsInfo = {30, gRoute133_FishingMons}; - -const struct WildPokemon gRoute134_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gRoute134_WaterMonsInfo = {4, gRoute134_WaterMons}; - -const struct WildPokemon gRoute134_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_HORSEA}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gRoute134_FishingMonsInfo = {30, gRoute134_FishingMons}; - -const struct WildPokemon gAbandonedShip_HiddenFloorCorridors_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_TENTACOOL}, - {30, 35, SPECIES_TENTACRUEL}, -}; - -const struct WildPokemonInfo gAbandonedShip_HiddenFloorCorridors_WaterMonsInfo = {4, gAbandonedShip_HiddenFloorCorridors_WaterMons}; - -const struct WildPokemon gAbandonedShip_HiddenFloorCorridors_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_TENTACOOL}, - {25, 30, SPECIES_TENTACOOL}, - {30, 35, SPECIES_TENTACOOL}, - {30, 35, SPECIES_TENTACRUEL}, - {25, 30, SPECIES_TENTACRUEL}, - {20, 25, SPECIES_TENTACRUEL}, -}; - -const struct WildPokemonInfo gAbandonedShip_HiddenFloorCorridors_FishingMonsInfo = {20, gAbandonedShip_HiddenFloorCorridors_FishingMons}; - -const struct WildPokemon gSeafloorCavern_Room1_LandMons[] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gSeafloorCavern_Room1_LandMonsInfo = {4, gSeafloorCavern_Room1_LandMons}; - -const struct WildPokemon gSeafloorCavern_Room2_LandMons[] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gSeafloorCavern_Room2_LandMonsInfo = {4, gSeafloorCavern_Room2_LandMons}; - -const struct WildPokemon gSeafloorCavern_Room3_LandMons[] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gSeafloorCavern_Room3_LandMonsInfo = {4, gSeafloorCavern_Room3_LandMons}; - -const struct WildPokemon gSeafloorCavern_Room4_LandMons[] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gSeafloorCavern_Room4_LandMonsInfo = {4, gSeafloorCavern_Room4_LandMons}; - -const struct WildPokemon gSeafloorCavern_Room5_LandMons[] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gSeafloorCavern_Room5_LandMonsInfo = {4, gSeafloorCavern_Room5_LandMons}; - -const struct WildPokemon gSeafloorCavern_Room6_LandMons[] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gSeafloorCavern_Room6_LandMonsInfo = {4, gSeafloorCavern_Room6_LandMons}; - -const struct WildPokemon gSeafloorCavern_Room6_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_ZUBAT}, - {30, 35, SPECIES_ZUBAT}, - {30, 35, SPECIES_GOLBAT}, - {30, 35, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gSeafloorCavern_Room6_WaterMonsInfo = {4, gSeafloorCavern_Room6_WaterMons}; - -const struct WildPokemon gSeafloorCavern_Room6_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gSeafloorCavern_Room6_FishingMonsInfo = {10, gSeafloorCavern_Room6_FishingMons}; - -const struct WildPokemon gSeafloorCavern_Room7_LandMons[] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gSeafloorCavern_Room7_LandMonsInfo = {4, gSeafloorCavern_Room7_LandMons}; - -const struct WildPokemon gSeafloorCavern_Room7_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_ZUBAT}, - {30, 35, SPECIES_ZUBAT}, - {30, 35, SPECIES_GOLBAT}, - {30, 35, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gSeafloorCavern_Room7_WaterMonsInfo = {4, gSeafloorCavern_Room7_WaterMons}; - -const struct WildPokemon gSeafloorCavern_Room7_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gSeafloorCavern_Room7_FishingMonsInfo = {10, gSeafloorCavern_Room7_FishingMons}; - -const struct WildPokemon gSeafloorCavern_Room8_LandMons[] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gSeafloorCavern_Room8_LandMonsInfo = {4, gSeafloorCavern_Room8_LandMons}; - -const struct WildPokemon gSeafloorCavern_Entrance_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_ZUBAT}, - {30, 35, SPECIES_ZUBAT}, - {30, 35, SPECIES_GOLBAT}, - {30, 35, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gSeafloorCavern_Entrance_WaterMonsInfo = {4, gSeafloorCavern_Entrance_WaterMons}; - -const struct WildPokemon gSeafloorCavern_Entrance_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gSeafloorCavern_Entrance_FishingMonsInfo = {10, gSeafloorCavern_Entrance_FishingMons}; - -const struct WildPokemon gCaveOfOrigin_Entrance_LandMons[] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {33, 33, SPECIES_ZUBAT}, - {28, 28, SPECIES_ZUBAT}, - {29, 29, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {35, 35, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gCaveOfOrigin_Entrance_LandMonsInfo = {4, gCaveOfOrigin_Entrance_LandMons}; - -const struct WildPokemon gCaveOfOrigin_1F_LandMons[] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {30, 30, SPECIES_SABLEYE}, - {32, 32, SPECIES_SABLEYE}, - {34, 34, SPECIES_SABLEYE}, - {33, 33, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gCaveOfOrigin_1F_LandMonsInfo = {4, gCaveOfOrigin_1F_LandMons}; - -const struct WildPokemon gCaveOfOrigin_UnusedRubySapphireMap1_LandMons[] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {30, 30, SPECIES_SABLEYE}, - {32, 32, SPECIES_SABLEYE}, - {34, 34, SPECIES_SABLEYE}, - {33, 33, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gCaveOfOrigin_UnusedRubySapphireMap1_LandMonsInfo = {4, gCaveOfOrigin_UnusedRubySapphireMap1_LandMons}; - -const struct WildPokemon gCaveOfOrigin_UnusedRubySapphireMap2_LandMons[] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {30, 30, SPECIES_SABLEYE}, - {32, 32, SPECIES_SABLEYE}, - {34, 34, SPECIES_SABLEYE}, - {33, 33, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gCaveOfOrigin_UnusedRubySapphireMap2_LandMonsInfo = {4, gCaveOfOrigin_UnusedRubySapphireMap2_LandMons}; - -const struct WildPokemon gCaveOfOrigin_UnusedRubySapphireMap3_LandMons[] = -{ - {30, 30, SPECIES_ZUBAT}, - {31, 31, SPECIES_ZUBAT}, - {32, 32, SPECIES_ZUBAT}, - {30, 30, SPECIES_SABLEYE}, - {32, 32, SPECIES_SABLEYE}, - {34, 34, SPECIES_SABLEYE}, - {33, 33, SPECIES_ZUBAT}, - {34, 34, SPECIES_ZUBAT}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {36, 36, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gCaveOfOrigin_UnusedRubySapphireMap3_LandMonsInfo = {4, gCaveOfOrigin_UnusedRubySapphireMap3_LandMons}; - -const struct WildPokemon gNewMauville_Entrance_LandMons[] = -{ - {24, 24, SPECIES_VOLTORB}, - {24, 24, SPECIES_MAGNEMITE}, - {25, 25, SPECIES_VOLTORB}, - {25, 25, SPECIES_MAGNEMITE}, - {23, 23, SPECIES_VOLTORB}, - {23, 23, SPECIES_MAGNEMITE}, - {26, 26, SPECIES_VOLTORB}, - {26, 26, SPECIES_MAGNEMITE}, - {22, 22, SPECIES_VOLTORB}, - {22, 22, SPECIES_MAGNEMITE}, - {22, 22, SPECIES_VOLTORB}, - {22, 22, SPECIES_MAGNEMITE}, -}; - -const struct WildPokemonInfo gNewMauville_Entrance_LandMonsInfo = {10, gNewMauville_Entrance_LandMons}; - -const struct WildPokemon gSafariZone_Southwest_LandMons[] = -{ - {25, 25, SPECIES_ODDISH}, - {27, 27, SPECIES_ODDISH}, - {25, 25, SPECIES_GIRAFARIG}, - {27, 27, SPECIES_GIRAFARIG}, - {25, 25, SPECIES_NATU}, - {27, 27, SPECIES_DODUO}, - {25, 25, SPECIES_GLOOM}, - {27, 27, SPECIES_WOBBUFFET}, - {25, 25, SPECIES_PIKACHU}, - {27, 27, SPECIES_WOBBUFFET}, - {27, 27, SPECIES_PIKACHU}, - {29, 29, SPECIES_WOBBUFFET}, -}; - -const struct WildPokemonInfo gSafariZone_Southwest_LandMonsInfo = {25, gSafariZone_Southwest_LandMons}; - -const struct WildPokemon gSafariZone_Southwest_WaterMons[] = -{ - {20, 30, SPECIES_PSYDUCK}, - {20, 30, SPECIES_PSYDUCK}, - {30, 35, SPECIES_PSYDUCK}, - {30, 35, SPECIES_PSYDUCK}, - {30, 35, SPECIES_PSYDUCK}, -}; - -const struct WildPokemonInfo gSafariZone_Southwest_WaterMonsInfo = {9, gSafariZone_Southwest_WaterMons}; - -const struct WildPokemon gSafariZone_Southwest_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 25, SPECIES_GOLDEEN}, - {10, 30, SPECIES_GOLDEEN}, - {25, 30, SPECIES_GOLDEEN}, - {30, 35, SPECIES_GOLDEEN}, - {30, 35, SPECIES_SEAKING}, - {35, 40, SPECIES_SEAKING}, - {25, 30, SPECIES_SEAKING}, -}; - -const struct WildPokemonInfo gSafariZone_Southwest_FishingMonsInfo = {35, gSafariZone_Southwest_FishingMons}; - -const struct WildPokemon gSafariZone_North_LandMons[] = -{ - {27, 27, SPECIES_PHANPY}, - {27, 27, SPECIES_ODDISH}, - {29, 29, SPECIES_PHANPY}, - {29, 29, SPECIES_ODDISH}, - {27, 27, SPECIES_NATU}, - {29, 29, SPECIES_GLOOM}, - {31, 31, SPECIES_GLOOM}, - {29, 29, SPECIES_NATU}, - {29, 29, SPECIES_XATU}, - {27, 27, SPECIES_HERACROSS}, - {31, 31, SPECIES_XATU}, - {29, 29, SPECIES_HERACROSS}, -}; - -const struct WildPokemonInfo gSafariZone_North_LandMonsInfo = {25, gSafariZone_North_LandMons}; - -const struct WildPokemon gSafariZone_North_RockSmashMons[] = -{ - {10, 15, SPECIES_GEODUDE}, - {5, 10, SPECIES_GEODUDE}, - {15, 20, SPECIES_GEODUDE}, - {20, 25, SPECIES_GEODUDE}, - {25, 30, SPECIES_GEODUDE}, -}; - -const struct WildPokemonInfo gSafariZone_North_RockSmashMonsInfo = {25, gSafariZone_North_RockSmashMons}; - -const struct WildPokemon gSafariZone_Northwest_LandMons[] = -{ - {27, 27, SPECIES_RHYHORN}, - {27, 27, SPECIES_ODDISH}, - {29, 29, SPECIES_RHYHORN}, - {29, 29, SPECIES_ODDISH}, - {27, 27, SPECIES_DODUO}, - {29, 29, SPECIES_GLOOM}, - {31, 31, SPECIES_GLOOM}, - {29, 29, SPECIES_DODUO}, - {29, 29, SPECIES_DODRIO}, - {27, 27, SPECIES_PINSIR}, - {31, 31, SPECIES_DODRIO}, - {29, 29, SPECIES_PINSIR}, -}; - -const struct WildPokemonInfo gSafariZone_Northwest_LandMonsInfo = {25, gSafariZone_Northwest_LandMons}; - -const struct WildPokemon gSafariZone_Northwest_WaterMons[] = -{ - {20, 30, SPECIES_PSYDUCK}, - {20, 30, SPECIES_PSYDUCK}, - {30, 35, SPECIES_PSYDUCK}, - {30, 35, SPECIES_GOLDUCK}, - {25, 40, SPECIES_GOLDUCK}, -}; - -const struct WildPokemonInfo gSafariZone_Northwest_WaterMonsInfo = {9, gSafariZone_Northwest_WaterMons}; - -const struct WildPokemon gSafariZone_Northwest_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 25, SPECIES_GOLDEEN}, - {10, 30, SPECIES_GOLDEEN}, - {25, 30, SPECIES_GOLDEEN}, - {30, 35, SPECIES_GOLDEEN}, - {30, 35, SPECIES_SEAKING}, - {35, 40, SPECIES_SEAKING}, - {25, 30, SPECIES_SEAKING}, -}; - -const struct WildPokemonInfo gSafariZone_Northwest_FishingMonsInfo = {35, gSafariZone_Northwest_FishingMons}; - -const struct WildPokemon gVictoryRoad_B1F_LandMons[] = -{ - {40, 40, SPECIES_GOLBAT}, - {40, 40, SPECIES_HARIYAMA}, - {40, 40, SPECIES_LAIRON}, - {40, 40, SPECIES_LAIRON}, - {38, 38, SPECIES_GOLBAT}, - {38, 38, SPECIES_HARIYAMA}, - {42, 42, SPECIES_GOLBAT}, - {42, 42, SPECIES_HARIYAMA}, - {42, 42, SPECIES_LAIRON}, - {38, 38, SPECIES_MAWILE}, - {42, 42, SPECIES_LAIRON}, - {38, 38, SPECIES_MAWILE}, -}; - -const struct WildPokemonInfo gVictoryRoad_B1F_LandMonsInfo = {10, gVictoryRoad_B1F_LandMons}; - -const struct WildPokemon gVictoryRoad_B1F_RockSmashMons[] = -{ - {30, 40, SPECIES_GRAVELER}, - {30, 40, SPECIES_GEODUDE}, - {35, 40, SPECIES_GRAVELER}, - {35, 40, SPECIES_GRAVELER}, - {35, 40, SPECIES_GRAVELER}, -}; - -const struct WildPokemonInfo gVictoryRoad_B1F_RockSmashMonsInfo = {20, gVictoryRoad_B1F_RockSmashMons}; - -const struct WildPokemon gVictoryRoad_B2F_LandMons[] = -{ - {40, 40, SPECIES_GOLBAT}, - {40, 40, SPECIES_SABLEYE}, - {40, 40, SPECIES_LAIRON}, - {40, 40, SPECIES_LAIRON}, - {42, 42, SPECIES_GOLBAT}, - {42, 42, SPECIES_SABLEYE}, - {44, 44, SPECIES_GOLBAT}, - {44, 44, SPECIES_SABLEYE}, - {42, 42, SPECIES_LAIRON}, - {42, 42, SPECIES_MAWILE}, - {44, 44, SPECIES_LAIRON}, - {44, 44, SPECIES_MAWILE}, -}; - -const struct WildPokemonInfo gVictoryRoad_B2F_LandMonsInfo = {10, gVictoryRoad_B2F_LandMons}; - -const struct WildPokemon gVictoryRoad_B2F_WaterMons[] = -{ - {30, 35, SPECIES_GOLBAT}, - {25, 30, SPECIES_GOLBAT}, - {35, 40, SPECIES_GOLBAT}, - {35, 40, SPECIES_GOLBAT}, - {35, 40, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gVictoryRoad_B2F_WaterMonsInfo = {4, gVictoryRoad_B2F_WaterMons}; - -const struct WildPokemon gVictoryRoad_B2F_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {30, 35, SPECIES_WHISCASH}, - {35, 40, SPECIES_WHISCASH}, - {40, 45, SPECIES_WHISCASH}, -}; - -const struct WildPokemonInfo gVictoryRoad_B2F_FishingMonsInfo = {30, gVictoryRoad_B2F_FishingMons}; - -const struct WildPokemon gMeteorFalls_1F_1R_LandMons[] = -{ - {16, 16, SPECIES_ZUBAT}, - {17, 17, SPECIES_ZUBAT}, - {18, 18, SPECIES_ZUBAT}, - {15, 15, SPECIES_ZUBAT}, - {14, 14, SPECIES_ZUBAT}, - {16, 16, SPECIES_SOLROCK}, - {18, 18, SPECIES_SOLROCK}, - {14, 14, SPECIES_SOLROCK}, - {19, 19, SPECIES_ZUBAT}, - {20, 20, SPECIES_ZUBAT}, - {19, 19, SPECIES_ZUBAT}, - {20, 20, SPECIES_ZUBAT}, -}; - -const struct WildPokemonInfo gMeteorFalls_1F_1R_LandMonsInfo = {10, gMeteorFalls_1F_1R_LandMons}; - -const struct WildPokemon gMeteorFalls_1F_1R_WaterMons[] = -{ - {5, 35, SPECIES_ZUBAT}, - {30, 35, SPECIES_ZUBAT}, - {25, 35, SPECIES_SOLROCK}, - {15, 25, SPECIES_SOLROCK}, - {5, 15, SPECIES_SOLROCK}, -}; - -const struct WildPokemonInfo gMeteorFalls_1F_1R_WaterMonsInfo = {4, gMeteorFalls_1F_1R_WaterMons}; - -const struct WildPokemon gMeteorFalls_1F_1R_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {20, 25, SPECIES_BARBOACH}, - {35, 40, SPECIES_BARBOACH}, - {40, 45, SPECIES_BARBOACH}, -}; - -const struct WildPokemonInfo gMeteorFalls_1F_1R_FishingMonsInfo = {30, gMeteorFalls_1F_1R_FishingMons}; - -const struct WildPokemon gMeteorFalls_1F_2R_LandMons[] = -{ - {33, 33, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {35, 35, SPECIES_SOLROCK}, - {33, 33, SPECIES_SOLROCK}, - {37, 37, SPECIES_SOLROCK}, - {35, 35, SPECIES_GOLBAT}, - {39, 39, SPECIES_SOLROCK}, - {38, 38, SPECIES_GOLBAT}, - {40, 40, SPECIES_GOLBAT}, - {38, 38, SPECIES_GOLBAT}, - {40, 40, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gMeteorFalls_1F_2R_LandMonsInfo = {10, gMeteorFalls_1F_2R_LandMons}; - -const struct WildPokemon gMeteorFalls_1F_2R_WaterMons[] = -{ - {30, 35, SPECIES_GOLBAT}, - {30, 35, SPECIES_GOLBAT}, - {25, 35, SPECIES_SOLROCK}, - {15, 25, SPECIES_SOLROCK}, - {5, 15, SPECIES_SOLROCK}, -}; - -const struct WildPokemonInfo gMeteorFalls_1F_2R_WaterMonsInfo = {4, gMeteorFalls_1F_2R_WaterMons}; - -const struct WildPokemon gMeteorFalls_1F_2R_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {30, 35, SPECIES_WHISCASH}, - {35, 40, SPECIES_WHISCASH}, - {40, 45, SPECIES_WHISCASH}, -}; - -const struct WildPokemonInfo gMeteorFalls_1F_2R_FishingMonsInfo = {30, gMeteorFalls_1F_2R_FishingMons}; - -const struct WildPokemon gMeteorFalls_B1F_1R_LandMons[] = -{ - {33, 33, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {35, 35, SPECIES_SOLROCK}, - {33, 33, SPECIES_SOLROCK}, - {37, 37, SPECIES_SOLROCK}, - {35, 35, SPECIES_GOLBAT}, - {39, 39, SPECIES_SOLROCK}, - {38, 38, SPECIES_GOLBAT}, - {40, 40, SPECIES_GOLBAT}, - {38, 38, SPECIES_GOLBAT}, - {40, 40, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gMeteorFalls_B1F_1R_LandMonsInfo = {10, gMeteorFalls_B1F_1R_LandMons}; - -const struct WildPokemon gMeteorFalls_B1F_1R_WaterMons[] = -{ - {30, 35, SPECIES_GOLBAT}, - {30, 35, SPECIES_GOLBAT}, - {25, 35, SPECIES_SOLROCK}, - {15, 25, SPECIES_SOLROCK}, - {5, 15, SPECIES_SOLROCK}, -}; - -const struct WildPokemonInfo gMeteorFalls_B1F_1R_WaterMonsInfo = {4, gMeteorFalls_B1F_1R_WaterMons}; - -const struct WildPokemon gMeteorFalls_B1F_1R_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_BARBOACH}, - {25, 30, SPECIES_BARBOACH}, - {30, 35, SPECIES_BARBOACH}, - {30, 35, SPECIES_WHISCASH}, - {35, 40, SPECIES_WHISCASH}, - {40, 45, SPECIES_WHISCASH}, -}; - -const struct WildPokemonInfo gMeteorFalls_B1F_1R_FishingMonsInfo = {30, gMeteorFalls_B1F_1R_FishingMons}; - -const struct WildPokemon gShoalCave_LowTideStairsRoom_LandMons[] = -{ - {26, 26, SPECIES_ZUBAT}, - {26, 26, SPECIES_SPHEAL}, - {28, 28, SPECIES_ZUBAT}, - {28, 28, SPECIES_SPHEAL}, - {30, 30, SPECIES_ZUBAT}, - {30, 30, SPECIES_SPHEAL}, - {32, 32, SPECIES_ZUBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, -}; - -const struct WildPokemonInfo gShoalCave_LowTideStairsRoom_LandMonsInfo = {10, gShoalCave_LowTideStairsRoom_LandMons}; - -const struct WildPokemon gShoalCave_LowTideLowerRoom_LandMons[] = -{ - {26, 26, SPECIES_ZUBAT}, - {26, 26, SPECIES_SPHEAL}, - {28, 28, SPECIES_ZUBAT}, - {28, 28, SPECIES_SPHEAL}, - {30, 30, SPECIES_ZUBAT}, - {30, 30, SPECIES_SPHEAL}, - {32, 32, SPECIES_ZUBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, -}; - -const struct WildPokemonInfo gShoalCave_LowTideLowerRoom_LandMonsInfo = {10, gShoalCave_LowTideLowerRoom_LandMons}; - -const struct WildPokemon gShoalCave_LowTideInnerRoom_LandMons[] = -{ - {26, 26, SPECIES_ZUBAT}, - {26, 26, SPECIES_SPHEAL}, - {28, 28, SPECIES_ZUBAT}, - {28, 28, SPECIES_SPHEAL}, - {30, 30, SPECIES_ZUBAT}, - {30, 30, SPECIES_SPHEAL}, - {32, 32, SPECIES_ZUBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, -}; - -const struct WildPokemonInfo gShoalCave_LowTideInnerRoom_LandMonsInfo = {10, gShoalCave_LowTideInnerRoom_LandMons}; - -const struct WildPokemon gShoalCave_LowTideInnerRoom_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_ZUBAT}, - {25, 30, SPECIES_SPHEAL}, - {25, 30, SPECIES_SPHEAL}, - {25, 35, SPECIES_SPHEAL}, -}; - -const struct WildPokemonInfo gShoalCave_LowTideInnerRoom_WaterMonsInfo = {4, gShoalCave_LowTideInnerRoom_WaterMons}; - -const struct WildPokemon gShoalCave_LowTideInnerRoom_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gShoalCave_LowTideInnerRoom_FishingMonsInfo = {10, gShoalCave_LowTideInnerRoom_FishingMons}; - -const struct WildPokemon gShoalCave_LowTideEntranceRoom_LandMons[] = -{ - {26, 26, SPECIES_ZUBAT}, - {26, 26, SPECIES_SPHEAL}, - {28, 28, SPECIES_ZUBAT}, - {28, 28, SPECIES_SPHEAL}, - {30, 30, SPECIES_ZUBAT}, - {30, 30, SPECIES_SPHEAL}, - {32, 32, SPECIES_ZUBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, - {32, 32, SPECIES_GOLBAT}, - {32, 32, SPECIES_SPHEAL}, -}; - -const struct WildPokemonInfo gShoalCave_LowTideEntranceRoom_LandMonsInfo = {10, gShoalCave_LowTideEntranceRoom_LandMons}; - -const struct WildPokemon gShoalCave_LowTideEntranceRoom_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {5, 35, SPECIES_ZUBAT}, - {25, 30, SPECIES_SPHEAL}, - {25, 30, SPECIES_SPHEAL}, - {25, 35, SPECIES_SPHEAL}, -}; - -const struct WildPokemonInfo gShoalCave_LowTideEntranceRoom_WaterMonsInfo = {4, gShoalCave_LowTideEntranceRoom_WaterMons}; - -const struct WildPokemon gShoalCave_LowTideEntranceRoom_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gShoalCave_LowTideEntranceRoom_FishingMonsInfo = {10, gShoalCave_LowTideEntranceRoom_FishingMons}; - -const struct WildPokemon gLilycoveCity_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gLilycoveCity_WaterMonsInfo = {4, gLilycoveCity_WaterMons}; - -const struct WildPokemon gLilycoveCity_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_STARYU}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gLilycoveCity_FishingMonsInfo = {10, gLilycoveCity_FishingMons}; - -const struct WildPokemon gDewfordTown_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gDewfordTown_WaterMonsInfo = {4, gDewfordTown_WaterMons}; - -const struct WildPokemon gDewfordTown_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gDewfordTown_FishingMonsInfo = {10, gDewfordTown_FishingMons}; - -const struct WildPokemon gSlateportCity_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gSlateportCity_WaterMonsInfo = {4, gSlateportCity_WaterMons}; - -const struct WildPokemon gSlateportCity_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_WAILMER}, - {20, 25, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gSlateportCity_FishingMonsInfo = {10, gSlateportCity_FishingMons}; - -const struct WildPokemon gMossdeepCity_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gMossdeepCity_WaterMonsInfo = {4, gMossdeepCity_WaterMons}; - -const struct WildPokemon gMossdeepCity_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gMossdeepCity_FishingMonsInfo = {10, gMossdeepCity_FishingMons}; - -const struct WildPokemon gPacifidlogTown_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gPacifidlogTown_WaterMonsInfo = {4, gPacifidlogTown_WaterMons}; - -const struct WildPokemon gPacifidlogTown_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_SHARPEDO}, - {30, 35, SPECIES_WAILMER}, - {25, 30, SPECIES_WAILMER}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gPacifidlogTown_FishingMonsInfo = {10, gPacifidlogTown_FishingMons}; - -const struct WildPokemon gEverGrandeCity_WaterMons[] = -{ - {5, 35, SPECIES_TENTACOOL}, - {10, 30, SPECIES_WINGULL}, - {15, 25, SPECIES_WINGULL}, - {25, 30, SPECIES_PELIPPER}, - {25, 30, SPECIES_PELIPPER}, -}; - -const struct WildPokemonInfo gEverGrandeCity_WaterMonsInfo = {4, gEverGrandeCity_WaterMons}; - -const struct WildPokemon gEverGrandeCity_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_LUVDISC}, - {10, 30, SPECIES_WAILMER}, - {30, 35, SPECIES_LUVDISC}, - {30, 35, SPECIES_WAILMER}, - {30, 35, SPECIES_CORSOLA}, - {35, 40, SPECIES_WAILMER}, - {40, 45, SPECIES_WAILMER}, -}; - -const struct WildPokemonInfo gEverGrandeCity_FishingMonsInfo = {10, gEverGrandeCity_FishingMons}; - -const struct WildPokemon gPetalburgCity_WaterMons[] = -{ - {20, 30, SPECIES_MARILL}, - {10, 20, SPECIES_MARILL}, - {30, 35, SPECIES_MARILL}, - {5, 10, SPECIES_MARILL}, - {5, 10, SPECIES_MARILL}, -}; - -const struct WildPokemonInfo gPetalburgCity_WaterMonsInfo = {1, gPetalburgCity_WaterMons}; - -const struct WildPokemon gPetalburgCity_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_GOLDEEN}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_GOLDEEN}, - {10, 30, SPECIES_CORPHISH}, - {25, 30, SPECIES_CORPHISH}, - {30, 35, SPECIES_CORPHISH}, - {20, 25, SPECIES_CORPHISH}, - {35, 40, SPECIES_CORPHISH}, - {40, 45, SPECIES_CORPHISH}, -}; - -const struct WildPokemonInfo gPetalburgCity_FishingMonsInfo = {10, gPetalburgCity_FishingMons}; - -const struct WildPokemon gUnderwater1_WaterMons[] = -{ - {20, 30, SPECIES_CLAMPERL}, - {20, 30, SPECIES_CHINCHOU}, - {30, 35, SPECIES_CLAMPERL}, - {30, 35, SPECIES_RELICANTH}, - {30, 35, SPECIES_RELICANTH}, -}; - -const struct WildPokemonInfo gUnderwater1_WaterMonsInfo = {4, gUnderwater1_WaterMons}; - -const struct WildPokemon gShoalCave_LowTideIceRoom_LandMons[] = -{ - {26, 26, SPECIES_ZUBAT}, - {26, 26, SPECIES_SPHEAL}, - {28, 28, SPECIES_ZUBAT}, - {28, 28, SPECIES_SPHEAL}, - {30, 30, SPECIES_ZUBAT}, - {30, 30, SPECIES_SPHEAL}, - {26, 26, SPECIES_SNORUNT}, - {32, 32, SPECIES_SPHEAL}, - {30, 30, SPECIES_GOLBAT}, - {28, 28, SPECIES_SNORUNT}, - {32, 32, SPECIES_GOLBAT}, - {30, 30, SPECIES_SNORUNT}, -}; - -const struct WildPokemonInfo gShoalCave_LowTideIceRoom_LandMonsInfo = {10, gShoalCave_LowTideIceRoom_LandMons}; - -const struct WildPokemon gSkyPillar_1F_LandMons[] = -{ - {33, 33, SPECIES_SABLEYE}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {34, 34, SPECIES_SABLEYE}, - {36, 36, SPECIES_CLAYDOL}, - {37, 37, SPECIES_BANETTE}, - {38, 38, SPECIES_BANETTE}, - {36, 36, SPECIES_CLAYDOL}, - {37, 37, SPECIES_CLAYDOL}, - {38, 38, SPECIES_CLAYDOL}, - {37, 37, SPECIES_CLAYDOL}, - {38, 38, SPECIES_CLAYDOL}, -}; - -const struct WildPokemonInfo gSkyPillar_1F_LandMonsInfo = {10, gSkyPillar_1F_LandMons}; - -const struct WildPokemon gSootopolisCity_WaterMons[] = -{ - {5, 35, SPECIES_MAGIKARP}, - {10, 30, SPECIES_MAGIKARP}, - {15, 25, SPECIES_MAGIKARP}, - {25, 30, SPECIES_MAGIKARP}, - {25, 30, SPECIES_MAGIKARP}, -}; - -const struct WildPokemonInfo gSootopolisCity_WaterMonsInfo = {1, gSootopolisCity_WaterMons}; - -const struct WildPokemon gSootopolisCity_FishingMons[] = -{ - {5, 10, SPECIES_MAGIKARP}, - {5, 10, SPECIES_TENTACOOL}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_MAGIKARP}, - {10, 30, SPECIES_MAGIKARP}, - {30, 35, SPECIES_MAGIKARP}, - {30, 35, SPECIES_MAGIKARP}, - {35, 40, SPECIES_GYARADOS}, - {35, 45, SPECIES_GYARADOS}, - {5, 45, SPECIES_GYARADOS}, -}; - -const struct WildPokemonInfo gSootopolisCity_FishingMonsInfo = {10, gSootopolisCity_FishingMons}; - -const struct WildPokemon gSkyPillar_3F_LandMons[] = -{ - {33, 33, SPECIES_SABLEYE}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {34, 34, SPECIES_SABLEYE}, - {36, 36, SPECIES_CLAYDOL}, - {37, 37, SPECIES_BANETTE}, - {38, 38, SPECIES_BANETTE}, - {36, 36, SPECIES_CLAYDOL}, - {37, 37, SPECIES_CLAYDOL}, - {38, 38, SPECIES_CLAYDOL}, - {37, 37, SPECIES_CLAYDOL}, - {38, 38, SPECIES_CLAYDOL}, -}; - -const struct WildPokemonInfo gSkyPillar_3F_LandMonsInfo = {10, gSkyPillar_3F_LandMons}; - -const struct WildPokemon gSkyPillar_5F_LandMons[] = -{ - {33, 33, SPECIES_SABLEYE}, - {34, 34, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {34, 34, SPECIES_SABLEYE}, - {36, 36, SPECIES_CLAYDOL}, - {37, 37, SPECIES_BANETTE}, - {38, 38, SPECIES_BANETTE}, - {36, 36, SPECIES_CLAYDOL}, - {37, 37, SPECIES_CLAYDOL}, - {38, 38, SPECIES_ALTARIA}, - {39, 39, SPECIES_ALTARIA}, - {39, 39, SPECIES_ALTARIA}, -}; - -const struct WildPokemonInfo gSkyPillar_5F_LandMonsInfo = {10, gSkyPillar_5F_LandMons}; - -const struct WildPokemon gSafariZone_Southeast_LandMons[] = -{ - {33, 33, SPECIES_SUNKERN}, - {34, 34, SPECIES_MAREEP}, - {35, 35, SPECIES_SUNKERN}, - {36, 36, SPECIES_MAREEP}, - {34, 34, SPECIES_AIPOM}, - {33, 33, SPECIES_SPINARAK}, - {35, 35, SPECIES_HOOTHOOT}, - {34, 34, SPECIES_SNUBBULL}, - {36, 36, SPECIES_STANTLER}, - {37, 37, SPECIES_GLIGAR}, - {39, 39, SPECIES_STANTLER}, - {40, 40, SPECIES_GLIGAR}, -}; - -const struct WildPokemonInfo gSafariZone_Southeast_LandMonsInfo = {25, gSafariZone_Southeast_LandMons}; - -const struct WildPokemon gSafariZone_Southeast_WaterMons[] = -{ - {25, 30, SPECIES_WOOPER}, - {25, 30, SPECIES_MARILL}, - {25, 30, SPECIES_MARILL}, - {30, 35, SPECIES_MARILL}, - {35, 40, SPECIES_QUAGSIRE}, -}; - -const struct WildPokemonInfo gSafariZone_Southeast_WaterMonsInfo = {9, gSafariZone_Southeast_WaterMons}; - -const struct WildPokemon gSafariZone_Southeast_FishingMons[] = -{ - {25, 30, SPECIES_MAGIKARP}, - {25, 30, SPECIES_GOLDEEN}, - {25, 30, SPECIES_MAGIKARP}, - {25, 30, SPECIES_GOLDEEN}, - {30, 35, SPECIES_REMORAID}, - {25, 30, SPECIES_GOLDEEN}, - {25, 30, SPECIES_REMORAID}, - {30, 35, SPECIES_REMORAID}, - {30, 35, SPECIES_REMORAID}, - {35, 40, SPECIES_OCTILLERY}, -}; - -const struct WildPokemonInfo gSafariZone_Southeast_FishingMonsInfo = {35, gSafariZone_Southeast_FishingMons}; - -const struct WildPokemon gSafariZone_Northeast_LandMons[] = -{ - {33, 33, SPECIES_AIPOM}, - {34, 34, SPECIES_TEDDIURSA}, - {35, 35, SPECIES_AIPOM}, - {36, 36, SPECIES_TEDDIURSA}, - {34, 34, SPECIES_SUNKERN}, - {33, 33, SPECIES_LEDYBA}, - {35, 35, SPECIES_HOOTHOOT}, - {34, 34, SPECIES_PINECO}, - {36, 36, SPECIES_HOUNDOUR}, - {37, 37, SPECIES_MILTANK}, - {39, 39, SPECIES_HOUNDOUR}, - {40, 40, SPECIES_MILTANK}, -}; - -const struct WildPokemonInfo gSafariZone_Northeast_LandMonsInfo = {25, gSafariZone_Northeast_LandMons}; - -const struct WildPokemon gSafariZone_Northeast_RockSmashMons[] = -{ - {25, 30, SPECIES_SHUCKLE}, - {20, 25, SPECIES_SHUCKLE}, - {30, 35, SPECIES_SHUCKLE}, - {30, 35, SPECIES_SHUCKLE}, - {35, 40, SPECIES_SHUCKLE}, -}; - -const struct WildPokemonInfo gSafariZone_Northeast_RockSmashMonsInfo = {25, gSafariZone_Northeast_RockSmashMons}; - -const struct WildPokemon gMagmaHideout_1F_LandMons[] = -{ - {27, 27, SPECIES_GEODUDE}, - {28, 28, SPECIES_TORKOAL}, - {28, 28, SPECIES_GEODUDE}, - {30, 30, SPECIES_TORKOAL}, - {29, 29, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GRAVELER}, - {30, 30, SPECIES_GRAVELER}, - {31, 31, SPECIES_GRAVELER}, - {32, 32, SPECIES_GRAVELER}, - {33, 33, SPECIES_GRAVELER}, -}; - -const struct WildPokemonInfo gMagmaHideout_1F_LandMonsInfo = {10, gMagmaHideout_1F_LandMons}; - -const struct WildPokemon gMagmaHideout_2F_1R_LandMons[] = -{ - {27, 27, SPECIES_GEODUDE}, - {28, 28, SPECIES_TORKOAL}, - {28, 28, SPECIES_GEODUDE}, - {30, 30, SPECIES_TORKOAL}, - {29, 29, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GRAVELER}, - {30, 30, SPECIES_GRAVELER}, - {31, 31, SPECIES_GRAVELER}, - {32, 32, SPECIES_GRAVELER}, - {33, 33, SPECIES_GRAVELER}, -}; - -const struct WildPokemonInfo gMagmaHideout_2F_1R_LandMonsInfo = {10, gMagmaHideout_2F_1R_LandMons}; - -const struct WildPokemon gMagmaHideout_2F_2R_LandMons[] = -{ - {27, 27, SPECIES_GEODUDE}, - {28, 28, SPECIES_TORKOAL}, - {28, 28, SPECIES_GEODUDE}, - {30, 30, SPECIES_TORKOAL}, - {29, 29, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GRAVELER}, - {30, 30, SPECIES_GRAVELER}, - {31, 31, SPECIES_GRAVELER}, - {32, 32, SPECIES_GRAVELER}, - {33, 33, SPECIES_GRAVELER}, -}; - -const struct WildPokemonInfo gMagmaHideout_2F_2R_LandMonsInfo = {10, gMagmaHideout_2F_2R_LandMons}; - -const struct WildPokemon gMagmaHideout_3F_1R_LandMons[] = -{ - {27, 27, SPECIES_GEODUDE}, - {28, 28, SPECIES_TORKOAL}, - {28, 28, SPECIES_GEODUDE}, - {30, 30, SPECIES_TORKOAL}, - {29, 29, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GRAVELER}, - {30, 30, SPECIES_GRAVELER}, - {31, 31, SPECIES_GRAVELER}, - {32, 32, SPECIES_GRAVELER}, - {33, 33, SPECIES_GRAVELER}, -}; - -const struct WildPokemonInfo gMagmaHideout_3F_1R_LandMonsInfo = {10, gMagmaHideout_3F_1R_LandMons}; - -const struct WildPokemon gMagmaHideout_3F_2R_LandMons[] = -{ - {27, 27, SPECIES_GEODUDE}, - {28, 28, SPECIES_TORKOAL}, - {28, 28, SPECIES_GEODUDE}, - {30, 30, SPECIES_TORKOAL}, - {29, 29, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GRAVELER}, - {30, 30, SPECIES_GRAVELER}, - {31, 31, SPECIES_GRAVELER}, - {32, 32, SPECIES_GRAVELER}, - {33, 33, SPECIES_GRAVELER}, -}; - -const struct WildPokemonInfo gMagmaHideout_3F_2R_LandMonsInfo = {10, gMagmaHideout_3F_2R_LandMons}; - -const struct WildPokemon gMagmaHideout_4F_LandMons[] = -{ - {27, 27, SPECIES_GEODUDE}, - {28, 28, SPECIES_TORKOAL}, - {28, 28, SPECIES_GEODUDE}, - {30, 30, SPECIES_TORKOAL}, - {29, 29, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GRAVELER}, - {30, 30, SPECIES_GRAVELER}, - {31, 31, SPECIES_GRAVELER}, - {32, 32, SPECIES_GRAVELER}, - {33, 33, SPECIES_GRAVELER}, -}; - -const struct WildPokemonInfo gMagmaHideout_4F_LandMonsInfo = {10, gMagmaHideout_4F_LandMons}; - -const struct WildPokemon gMagmaHideout_3F_3R_LandMons[] = -{ - {27, 27, SPECIES_GEODUDE}, - {28, 28, SPECIES_TORKOAL}, - {28, 28, SPECIES_GEODUDE}, - {30, 30, SPECIES_TORKOAL}, - {29, 29, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GRAVELER}, - {30, 30, SPECIES_GRAVELER}, - {31, 31, SPECIES_GRAVELER}, - {32, 32, SPECIES_GRAVELER}, - {33, 33, SPECIES_GRAVELER}, -}; - -const struct WildPokemonInfo gMagmaHideout_3F_3R_LandMonsInfo = {10, gMagmaHideout_3F_3R_LandMons}; - -const struct WildPokemon gMagmaHideout_2F_3R_LandMons[] = -{ - {27, 27, SPECIES_GEODUDE}, - {28, 28, SPECIES_TORKOAL}, - {28, 28, SPECIES_GEODUDE}, - {30, 30, SPECIES_TORKOAL}, - {29, 29, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GEODUDE}, - {30, 30, SPECIES_GRAVELER}, - {30, 30, SPECIES_GRAVELER}, - {31, 31, SPECIES_GRAVELER}, - {32, 32, SPECIES_GRAVELER}, - {33, 33, SPECIES_GRAVELER}, -}; - -const struct WildPokemonInfo gMagmaHideout_2F_3R_LandMonsInfo = {10, gMagmaHideout_2F_3R_LandMons}; - -const struct WildPokemon gMirageTower_1F_LandMons[] = -{ - {21, 21, SPECIES_SANDSHREW}, - {21, 21, SPECIES_TRAPINCH}, - {20, 20, SPECIES_SANDSHREW}, - {20, 20, SPECIES_TRAPINCH}, - {20, 20, SPECIES_SANDSHREW}, - {20, 20, SPECIES_TRAPINCH}, - {22, 22, SPECIES_SANDSHREW}, - {22, 22, SPECIES_TRAPINCH}, - {23, 23, SPECIES_SANDSHREW}, - {23, 23, SPECIES_TRAPINCH}, - {24, 24, SPECIES_SANDSHREW}, - {24, 24, SPECIES_TRAPINCH}, -}; - -const struct WildPokemonInfo gMirageTower_1F_LandMonsInfo = {10, gMirageTower_1F_LandMons}; - -const struct WildPokemon gMirageTower_2F_LandMons[] = -{ - {21, 21, SPECIES_SANDSHREW}, - {21, 21, SPECIES_TRAPINCH}, - {20, 20, SPECIES_SANDSHREW}, - {20, 20, SPECIES_TRAPINCH}, - {20, 20, SPECIES_SANDSHREW}, - {20, 20, SPECIES_TRAPINCH}, - {22, 22, SPECIES_SANDSHREW}, - {22, 22, SPECIES_TRAPINCH}, - {23, 23, SPECIES_SANDSHREW}, - {23, 23, SPECIES_TRAPINCH}, - {24, 24, SPECIES_SANDSHREW}, - {24, 24, SPECIES_TRAPINCH}, -}; - -const struct WildPokemonInfo gMirageTower_2F_LandMonsInfo = {10, gMirageTower_2F_LandMons}; - -const struct WildPokemon gMirageTower_3F_LandMons[] = -{ - {21, 21, SPECIES_SANDSHREW}, - {21, 21, SPECIES_TRAPINCH}, - {20, 20, SPECIES_SANDSHREW}, - {20, 20, SPECIES_TRAPINCH}, - {20, 20, SPECIES_SANDSHREW}, - {20, 20, SPECIES_TRAPINCH}, - {22, 22, SPECIES_SANDSHREW}, - {22, 22, SPECIES_TRAPINCH}, - {23, 23, SPECIES_SANDSHREW}, - {23, 23, SPECIES_TRAPINCH}, - {24, 24, SPECIES_SANDSHREW}, - {24, 24, SPECIES_TRAPINCH}, -}; - -const struct WildPokemonInfo gMirageTower_3F_LandMonsInfo = {10, gMirageTower_3F_LandMons}; - -const struct WildPokemon gMirageTower_4F_LandMons[] = -{ - {21, 21, SPECIES_SANDSHREW}, - {21, 21, SPECIES_TRAPINCH}, - {20, 20, SPECIES_SANDSHREW}, - {20, 20, SPECIES_TRAPINCH}, - {20, 20, SPECIES_SANDSHREW}, - {20, 20, SPECIES_TRAPINCH}, - {22, 22, SPECIES_SANDSHREW}, - {22, 22, SPECIES_TRAPINCH}, - {23, 23, SPECIES_SANDSHREW}, - {23, 23, SPECIES_TRAPINCH}, - {24, 24, SPECIES_SANDSHREW}, - {24, 24, SPECIES_TRAPINCH}, -}; - -const struct WildPokemonInfo gMirageTower_4F_LandMonsInfo = {10, gMirageTower_4F_LandMons}; - -const struct WildPokemon gDesertUnderpass_LandMons[] = -{ - {38, 38, SPECIES_DITTO}, - {35, 35, SPECIES_WHISMUR}, - {40, 40, SPECIES_DITTO}, - {40, 40, SPECIES_LOUDRED}, - {41, 41, SPECIES_DITTO}, - {36, 36, SPECIES_WHISMUR}, - {38, 38, SPECIES_LOUDRED}, - {42, 42, SPECIES_DITTO}, - {38, 38, SPECIES_WHISMUR}, - {43, 43, SPECIES_DITTO}, - {44, 44, SPECIES_LOUDRED}, - {45, 45, SPECIES_DITTO}, -}; - -const struct WildPokemonInfo gDesertUnderpass_LandMonsInfo = {10, gDesertUnderpass_LandMons}; - -const struct WildPokemon gArtisanCave_B1F_LandMons[] = -{ - {40, 40, SPECIES_SMEARGLE}, - {41, 41, SPECIES_SMEARGLE}, - {42, 42, SPECIES_SMEARGLE}, - {43, 43, SPECIES_SMEARGLE}, - {44, 44, SPECIES_SMEARGLE}, - {45, 45, SPECIES_SMEARGLE}, - {46, 46, SPECIES_SMEARGLE}, - {47, 47, SPECIES_SMEARGLE}, - {48, 48, SPECIES_SMEARGLE}, - {49, 49, SPECIES_SMEARGLE}, - {50, 50, SPECIES_SMEARGLE}, - {50, 50, SPECIES_SMEARGLE}, -}; - -const struct WildPokemonInfo gArtisanCave_B1F_LandMonsInfo = {10, gArtisanCave_B1F_LandMons}; - -const struct WildPokemon gArtisanCave_1F_LandMons[] = -{ - {40, 40, SPECIES_SMEARGLE}, - {41, 41, SPECIES_SMEARGLE}, - {42, 42, SPECIES_SMEARGLE}, - {43, 43, SPECIES_SMEARGLE}, - {44, 44, SPECIES_SMEARGLE}, - {45, 45, SPECIES_SMEARGLE}, - {46, 46, SPECIES_SMEARGLE}, - {47, 47, SPECIES_SMEARGLE}, - {48, 48, SPECIES_SMEARGLE}, - {49, 49, SPECIES_SMEARGLE}, - {50, 50, SPECIES_SMEARGLE}, - {50, 50, SPECIES_SMEARGLE}, -}; - -const struct WildPokemonInfo gArtisanCave_1F_LandMonsInfo = {10, gArtisanCave_1F_LandMons}; - -const struct WildPokemon gAlteringCave1_LandMons[] = -{ - {10, 10, SPECIES_ZUBAT}, - {12, 12, SPECIES_ZUBAT}, - {8, 8, SPECIES_ZUBAT}, - {14, 14, SPECIES_ZUBAT}, - {10, 10, SPECIES_ZUBAT}, - {12, 12, SPECIES_ZUBAT}, - {16, 16, SPECIES_ZUBAT}, - {6, 6, SPECIES_ZUBAT}, - {8, 8, SPECIES_ZUBAT}, - {14, 14, SPECIES_ZUBAT}, - {8, 8, SPECIES_ZUBAT}, - {14, 14, SPECIES_ZUBAT}, -}; - -const struct WildPokemonInfo gAlteringCave1_LandMonsInfo = {7, gAlteringCave1_LandMons}; - -const struct WildPokemon gAlteringCave2_LandMons[] = -{ - {7, 7, SPECIES_MAREEP}, - {9, 9, SPECIES_MAREEP}, - {5, 5, SPECIES_MAREEP}, - {11, 11, SPECIES_MAREEP}, - {7, 7, SPECIES_MAREEP}, - {9, 9, SPECIES_MAREEP}, - {13, 13, SPECIES_MAREEP}, - {3, 3, SPECIES_MAREEP}, - {5, 5, SPECIES_MAREEP}, - {11, 11, SPECIES_MAREEP}, - {5, 5, SPECIES_MAREEP}, - {11, 11, SPECIES_MAREEP}, -}; - -const struct WildPokemonInfo gAlteringCave2_LandMonsInfo = {7, gAlteringCave2_LandMons}; - -const struct WildPokemon gAlteringCave3_LandMons[] = -{ - {23, 23, SPECIES_PINECO}, - {25, 25, SPECIES_PINECO}, - {22, 22, SPECIES_PINECO}, - {27, 27, SPECIES_PINECO}, - {23, 23, SPECIES_PINECO}, - {25, 25, SPECIES_PINECO}, - {29, 29, SPECIES_PINECO}, - {19, 19, SPECIES_PINECO}, - {21, 21, SPECIES_PINECO}, - {27, 27, SPECIES_PINECO}, - {21, 21, SPECIES_PINECO}, - {27, 27, SPECIES_PINECO}, -}; - -const struct WildPokemonInfo gAlteringCave3_LandMonsInfo = {7, gAlteringCave3_LandMons}; - -const struct WildPokemon gAlteringCave4_LandMons[] = -{ - {16, 16, SPECIES_HOUNDOUR}, - {18, 18, SPECIES_HOUNDOUR}, - {14, 14, SPECIES_HOUNDOUR}, - {20, 20, SPECIES_HOUNDOUR}, - {16, 16, SPECIES_HOUNDOUR}, - {18, 18, SPECIES_HOUNDOUR}, - {22, 22, SPECIES_HOUNDOUR}, - {12, 12, SPECIES_HOUNDOUR}, - {14, 14, SPECIES_HOUNDOUR}, - {20, 20, SPECIES_HOUNDOUR}, - {14, 14, SPECIES_HOUNDOUR}, - {20, 20, SPECIES_HOUNDOUR}, -}; - -const struct WildPokemonInfo gAlteringCave4_LandMonsInfo = {7, gAlteringCave4_LandMons}; - -const struct WildPokemon gAlteringCave5_LandMons[] = -{ - {10, 10, SPECIES_TEDDIURSA}, - {12, 12, SPECIES_TEDDIURSA}, - {8, 8, SPECIES_TEDDIURSA}, - {14, 14, SPECIES_TEDDIURSA}, - {10, 10, SPECIES_TEDDIURSA}, - {12, 12, SPECIES_TEDDIURSA}, - {16, 16, SPECIES_TEDDIURSA}, - {6, 6, SPECIES_TEDDIURSA}, - {8, 8, SPECIES_TEDDIURSA}, - {14, 14, SPECIES_TEDDIURSA}, - {8, 8, SPECIES_TEDDIURSA}, - {14, 14, SPECIES_TEDDIURSA}, -}; - -const struct WildPokemonInfo gAlteringCave5_LandMonsInfo = {7, gAlteringCave5_LandMons}; - -const struct WildPokemon gAlteringCave6_LandMons[] = -{ - {22, 22, SPECIES_AIPOM}, - {24, 24, SPECIES_AIPOM}, - {20, 20, SPECIES_AIPOM}, - {26, 26, SPECIES_AIPOM}, - {22, 22, SPECIES_AIPOM}, - {24, 24, SPECIES_AIPOM}, - {28, 28, SPECIES_AIPOM}, - {18, 18, SPECIES_AIPOM}, - {20, 20, SPECIES_AIPOM}, - {26, 26, SPECIES_AIPOM}, - {20, 20, SPECIES_AIPOM}, - {26, 26, SPECIES_AIPOM}, -}; - -const struct WildPokemonInfo gAlteringCave6_LandMonsInfo = {7, gAlteringCave6_LandMons}; - -const struct WildPokemon gAlteringCave7_LandMons[] = -{ - {22, 22, SPECIES_SHUCKLE}, - {24, 24, SPECIES_SHUCKLE}, - {20, 20, SPECIES_SHUCKLE}, - {26, 26, SPECIES_SHUCKLE}, - {22, 22, SPECIES_SHUCKLE}, - {24, 24, SPECIES_SHUCKLE}, - {28, 28, SPECIES_SHUCKLE}, - {18, 18, SPECIES_SHUCKLE}, - {20, 20, SPECIES_SHUCKLE}, - {26, 26, SPECIES_SHUCKLE}, - {20, 20, SPECIES_SHUCKLE}, - {26, 26, SPECIES_SHUCKLE}, -}; - -const struct WildPokemonInfo gAlteringCave7_LandMonsInfo = {7, gAlteringCave7_LandMons}; - -const struct WildPokemon gAlteringCave8_LandMons[] = -{ - {22, 22, SPECIES_STANTLER}, - {24, 24, SPECIES_STANTLER}, - {20, 20, SPECIES_STANTLER}, - {26, 26, SPECIES_STANTLER}, - {22, 22, SPECIES_STANTLER}, - {24, 24, SPECIES_STANTLER}, - {28, 28, SPECIES_STANTLER}, - {18, 18, SPECIES_STANTLER}, - {20, 20, SPECIES_STANTLER}, - {26, 26, SPECIES_STANTLER}, - {20, 20, SPECIES_STANTLER}, - {26, 26, SPECIES_STANTLER}, -}; - -const struct WildPokemonInfo gAlteringCave8_LandMonsInfo = {7, gAlteringCave8_LandMons}; - -const struct WildPokemon gAlteringCave9_LandMons[] = -{ - {22, 22, SPECIES_SMEARGLE}, - {24, 24, SPECIES_SMEARGLE}, - {20, 20, SPECIES_SMEARGLE}, - {26, 26, SPECIES_SMEARGLE}, - {22, 22, SPECIES_SMEARGLE}, - {24, 24, SPECIES_SMEARGLE}, - {28, 28, SPECIES_SMEARGLE}, - {18, 18, SPECIES_SMEARGLE}, - {20, 20, SPECIES_SMEARGLE}, - {26, 26, SPECIES_SMEARGLE}, - {20, 20, SPECIES_SMEARGLE}, - {26, 26, SPECIES_SMEARGLE}, -}; - -const struct WildPokemonInfo gAlteringCave9_LandMonsInfo = {7, gAlteringCave9_LandMons}; - -const struct WildPokemon gMeteorFalls_StevensCave_LandMons[] = -{ - {33, 33, SPECIES_GOLBAT}, - {35, 35, SPECIES_GOLBAT}, - {33, 33, SPECIES_GOLBAT}, - {35, 35, SPECIES_SOLROCK}, - {33, 33, SPECIES_SOLROCK}, - {37, 37, SPECIES_SOLROCK}, - {35, 35, SPECIES_GOLBAT}, - {39, 39, SPECIES_SOLROCK}, - {38, 38, SPECIES_GOLBAT}, - {40, 40, SPECIES_GOLBAT}, - {38, 38, SPECIES_GOLBAT}, - {40, 40, SPECIES_GOLBAT}, -}; - -const struct WildPokemonInfo gMeteorFalls_StevensCave_LandMonsInfo = {10, gMeteorFalls_StevensCave_LandMons}; - -//The actual headers that link the encounter tables to particular maps start here. - -const struct WildPokemonHeader gWildMonHeaders[] = -{ - { - .mapGroup = MAP_GROUP(ROUTE101), - .mapNum = MAP_NUM(ROUTE101), - .landMonsInfo = &gRoute101_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ROUTE102), - .mapNum = MAP_NUM(ROUTE102), - .landMonsInfo = &gRoute102_LandMonsInfo, - .waterMonsInfo = &gRoute102_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute102_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE103), - .mapNum = MAP_NUM(ROUTE103), - .landMonsInfo = &gRoute103_LandMonsInfo, - .waterMonsInfo = &gRoute103_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute103_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE104), - .mapNum = MAP_NUM(ROUTE104), - .landMonsInfo = &gRoute104_LandMonsInfo, - .waterMonsInfo = &gRoute104_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute104_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE105), - .mapNum = MAP_NUM(ROUTE105), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute105_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute105_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE110), - .mapNum = MAP_NUM(ROUTE110), - .landMonsInfo = &gRoute110_LandMonsInfo, - .waterMonsInfo = &gRoute110_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute110_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE111), - .mapNum = MAP_NUM(ROUTE111), - .landMonsInfo = &gRoute111_LandMonsInfo, - .waterMonsInfo = &gRoute111_WaterMonsInfo, - .rockSmashMonsInfo = &gRoute111_RockSmashMonsInfo, - .fishingMonsInfo = &gRoute111_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE112), - .mapNum = MAP_NUM(ROUTE112), - .landMonsInfo = &gRoute112_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ROUTE113), - .mapNum = MAP_NUM(ROUTE113), - .landMonsInfo = &gRoute113_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ROUTE114), - .mapNum = MAP_NUM(ROUTE114), - .landMonsInfo = &gRoute114_LandMonsInfo, - .waterMonsInfo = &gRoute114_WaterMonsInfo, - .rockSmashMonsInfo = &gRoute114_RockSmashMonsInfo, - .fishingMonsInfo = &gRoute114_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE116), - .mapNum = MAP_NUM(ROUTE116), - .landMonsInfo = &gRoute116_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ROUTE117), - .mapNum = MAP_NUM(ROUTE117), - .landMonsInfo = &gRoute117_LandMonsInfo, - .waterMonsInfo = &gRoute117_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute117_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE118), - .mapNum = MAP_NUM(ROUTE118), - .landMonsInfo = &gRoute118_LandMonsInfo, - .waterMonsInfo = &gRoute118_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute118_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE124), - .mapNum = MAP_NUM(ROUTE124), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute124_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute124_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(PETALBURG_WOODS), - .mapNum = MAP_NUM(PETALBURG_WOODS), - .landMonsInfo = &gPetalburgWoods_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(RUSTURF_TUNNEL), - .mapNum = MAP_NUM(RUSTURF_TUNNEL), - .landMonsInfo = &gRusturfTunnel_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(GRANITE_CAVE_1F), - .mapNum = MAP_NUM(GRANITE_CAVE_1F), - .landMonsInfo = &gGraniteCave_1F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(GRANITE_CAVE_B1F), - .mapNum = MAP_NUM(GRANITE_CAVE_B1F), - .landMonsInfo = &gGraniteCave_B1F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MT_PYRE_1F), - .mapNum = MAP_NUM(MT_PYRE_1F), - .landMonsInfo = &gMtPyre_1F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(VICTORY_ROAD_1F), - .mapNum = MAP_NUM(VICTORY_ROAD_1F), - .landMonsInfo = &gVictoryRoad_1F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTH), - .mapNum = MAP_NUM(SAFARI_ZONE_SOUTH), - .landMonsInfo = &gSafariZone_South_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(UNDERWATER2), - .mapNum = MAP_NUM(UNDERWATER2), - .landMonsInfo = NULL, - .waterMonsInfo = &gUnderwater2_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ABANDONED_SHIP_ROOMS_B1F), - .mapNum = MAP_NUM(ABANDONED_SHIP_ROOMS_B1F), - .landMonsInfo = NULL, - .waterMonsInfo = &gAbandonedShip_Rooms_B1F_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gAbandonedShip_Rooms_B1F_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(GRANITE_CAVE_B2F), - .mapNum = MAP_NUM(GRANITE_CAVE_B2F), - .landMonsInfo = &gGraniteCave_B2F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = &gGraniteCave_B2F_RockSmashMonsInfo, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(FIERY_PATH), - .mapNum = MAP_NUM(FIERY_PATH), - .landMonsInfo = &gFieryPath_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(METEOR_FALLS_B1F_2R), - .mapNum = MAP_NUM(METEOR_FALLS_B1F_2R), - .landMonsInfo = &gMeteorFalls_B1F_2R_LandMonsInfo, - .waterMonsInfo = &gMeteorFalls_B1F_2R_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gMeteorFalls_B1F_2R_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(JAGGED_PASS), - .mapNum = MAP_NUM(JAGGED_PASS), - .landMonsInfo = &gJaggedPass_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ROUTE106), - .mapNum = MAP_NUM(ROUTE106), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute106_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute106_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE107), - .mapNum = MAP_NUM(ROUTE107), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute107_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute107_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE108), - .mapNum = MAP_NUM(ROUTE108), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute108_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute108_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE109), - .mapNum = MAP_NUM(ROUTE109), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute109_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute109_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE115), - .mapNum = MAP_NUM(ROUTE115), - .landMonsInfo = &gRoute115_LandMonsInfo, - .waterMonsInfo = &gRoute115_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute115_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(NEW_MAUVILLE_INSIDE), - .mapNum = MAP_NUM(NEW_MAUVILLE_INSIDE), - .landMonsInfo = &gNewMauville_Inside_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ROUTE119), - .mapNum = MAP_NUM(ROUTE119), - .landMonsInfo = &gRoute119_LandMonsInfo, - .waterMonsInfo = &gRoute119_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute119_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE120), - .mapNum = MAP_NUM(ROUTE120), - .landMonsInfo = &gRoute120_LandMonsInfo, - .waterMonsInfo = &gRoute120_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute120_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE121), - .mapNum = MAP_NUM(ROUTE121), - .landMonsInfo = &gRoute121_LandMonsInfo, - .waterMonsInfo = &gRoute121_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute121_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE122), - .mapNum = MAP_NUM(ROUTE122), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute122_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute122_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE123), - .mapNum = MAP_NUM(ROUTE123), - .landMonsInfo = &gRoute123_LandMonsInfo, - .waterMonsInfo = &gRoute123_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute123_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(MT_PYRE_2F), - .mapNum = MAP_NUM(MT_PYRE_2F), - .landMonsInfo = &gMtPyre_2F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MT_PYRE_3F), - .mapNum = MAP_NUM(MT_PYRE_3F), - .landMonsInfo = &gMtPyre_3F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MT_PYRE_4F), - .mapNum = MAP_NUM(MT_PYRE_4F), - .landMonsInfo = &gMtPyre_4F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MT_PYRE_5F), - .mapNum = MAP_NUM(MT_PYRE_5F), - .landMonsInfo = &gMtPyre_5F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MT_PYRE_6F), - .mapNum = MAP_NUM(MT_PYRE_6F), - .landMonsInfo = &gMtPyre_6F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MT_PYRE_EXTERIOR), - .mapNum = MAP_NUM(MT_PYRE_EXTERIOR), - .landMonsInfo = &gMtPyre_Exterior_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MT_PYRE_SUMMIT), - .mapNum = MAP_NUM(MT_PYRE_SUMMIT), - .landMonsInfo = &gMtPyre_Summit_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(GRANITE_CAVE_STEVENS_ROOM), - .mapNum = MAP_NUM(GRANITE_CAVE_STEVENS_ROOM), - .landMonsInfo = &gGraniteCave_StevensRoom_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ROUTE125), - .mapNum = MAP_NUM(ROUTE125), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute125_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute125_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE126), - .mapNum = MAP_NUM(ROUTE126), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute126_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute126_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE127), - .mapNum = MAP_NUM(ROUTE127), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute127_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute127_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE128), - .mapNum = MAP_NUM(ROUTE128), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute128_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute128_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE129), - .mapNum = MAP_NUM(ROUTE129), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute129_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute129_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE130), - .mapNum = MAP_NUM(ROUTE130), - .landMonsInfo = &gRoute130_LandMonsInfo, - .waterMonsInfo = &gRoute130_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute130_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE131), - .mapNum = MAP_NUM(ROUTE131), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute131_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute131_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE132), - .mapNum = MAP_NUM(ROUTE132), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute132_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute132_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE133), - .mapNum = MAP_NUM(ROUTE133), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute133_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute133_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ROUTE134), - .mapNum = MAP_NUM(ROUTE134), - .landMonsInfo = NULL, - .waterMonsInfo = &gRoute134_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gRoute134_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS), - .mapNum = MAP_NUM(ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS), - .landMonsInfo = NULL, - .waterMonsInfo = &gAbandonedShip_HiddenFloorCorridors_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gAbandonedShip_HiddenFloorCorridors_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM1), - .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM1), - .landMonsInfo = &gSeafloorCavern_Room1_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM2), - .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM2), - .landMonsInfo = &gSeafloorCavern_Room2_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM3), - .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM3), - .landMonsInfo = &gSeafloorCavern_Room3_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM4), - .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM4), - .landMonsInfo = &gSeafloorCavern_Room4_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM5), - .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM5), - .landMonsInfo = &gSeafloorCavern_Room5_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM6), - .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM6), - .landMonsInfo = &gSeafloorCavern_Room6_LandMonsInfo, - .waterMonsInfo = &gSeafloorCavern_Room6_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gSeafloorCavern_Room6_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM7), - .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM7), - .landMonsInfo = &gSeafloorCavern_Room7_LandMonsInfo, - .waterMonsInfo = &gSeafloorCavern_Room7_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gSeafloorCavern_Room7_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM8), - .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM8), - .landMonsInfo = &gSeafloorCavern_Room8_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ENTRANCE), - .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ENTRANCE), - .landMonsInfo = NULL, - .waterMonsInfo = &gSeafloorCavern_Entrance_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gSeafloorCavern_Entrance_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_ENTRANCE), - .mapNum = MAP_NUM(CAVE_OF_ORIGIN_ENTRANCE), - .landMonsInfo = &gCaveOfOrigin_Entrance_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_1F), - .mapNum = MAP_NUM(CAVE_OF_ORIGIN_1F), - .landMonsInfo = &gCaveOfOrigin_1F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1), - .mapNum = MAP_NUM(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1), - .landMonsInfo = &gCaveOfOrigin_UnusedRubySapphireMap1_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2), - .mapNum = MAP_NUM(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2), - .landMonsInfo = &gCaveOfOrigin_UnusedRubySapphireMap2_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3), - .mapNum = MAP_NUM(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3), - .landMonsInfo = &gCaveOfOrigin_UnusedRubySapphireMap3_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(NEW_MAUVILLE_ENTRANCE), - .mapNum = MAP_NUM(NEW_MAUVILLE_ENTRANCE), - .landMonsInfo = &gNewMauville_Entrance_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTHWEST), - .mapNum = MAP_NUM(SAFARI_ZONE_SOUTHWEST), - .landMonsInfo = &gSafariZone_Southwest_LandMonsInfo, - .waterMonsInfo = &gSafariZone_Southwest_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gSafariZone_Southwest_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTH), - .mapNum = MAP_NUM(SAFARI_ZONE_NORTH), - .landMonsInfo = &gSafariZone_North_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = &gSafariZone_North_RockSmashMonsInfo, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTHWEST), - .mapNum = MAP_NUM(SAFARI_ZONE_NORTHWEST), - .landMonsInfo = &gSafariZone_Northwest_LandMonsInfo, - .waterMonsInfo = &gSafariZone_Northwest_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gSafariZone_Northwest_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(VICTORY_ROAD_B1F), - .mapNum = MAP_NUM(VICTORY_ROAD_B1F), - .landMonsInfo = &gVictoryRoad_B1F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = &gVictoryRoad_B1F_RockSmashMonsInfo, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(VICTORY_ROAD_B2F), - .mapNum = MAP_NUM(VICTORY_ROAD_B2F), - .landMonsInfo = &gVictoryRoad_B2F_LandMonsInfo, - .waterMonsInfo = &gVictoryRoad_B2F_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gVictoryRoad_B2F_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(METEOR_FALLS_1F_1R), - .mapNum = MAP_NUM(METEOR_FALLS_1F_1R), - .landMonsInfo = &gMeteorFalls_1F_1R_LandMonsInfo, - .waterMonsInfo = &gMeteorFalls_1F_1R_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gMeteorFalls_1F_1R_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(METEOR_FALLS_1F_2R), - .mapNum = MAP_NUM(METEOR_FALLS_1F_2R), - .landMonsInfo = &gMeteorFalls_1F_2R_LandMonsInfo, - .waterMonsInfo = &gMeteorFalls_1F_2R_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gMeteorFalls_1F_2R_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(METEOR_FALLS_B1F_1R), - .mapNum = MAP_NUM(METEOR_FALLS_B1F_1R), - .landMonsInfo = &gMeteorFalls_B1F_1R_LandMonsInfo, - .waterMonsInfo = &gMeteorFalls_B1F_1R_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gMeteorFalls_B1F_1R_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM), - .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM), - .landMonsInfo = &gShoalCave_LowTideStairsRoom_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_LOWER_ROOM), - .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_LOWER_ROOM), - .landMonsInfo = &gShoalCave_LowTideLowerRoom_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_INNER_ROOM), - .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_INNER_ROOM), - .landMonsInfo = &gShoalCave_LowTideInnerRoom_LandMonsInfo, - .waterMonsInfo = &gShoalCave_LowTideInnerRoom_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gShoalCave_LowTideInnerRoom_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM), - .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM), - .landMonsInfo = &gShoalCave_LowTideEntranceRoom_LandMonsInfo, - .waterMonsInfo = &gShoalCave_LowTideEntranceRoom_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gShoalCave_LowTideEntranceRoom_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(LILYCOVE_CITY), - .mapNum = MAP_NUM(LILYCOVE_CITY), - .landMonsInfo = NULL, - .waterMonsInfo = &gLilycoveCity_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gLilycoveCity_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(DEWFORD_TOWN), - .mapNum = MAP_NUM(DEWFORD_TOWN), - .landMonsInfo = NULL, - .waterMonsInfo = &gDewfordTown_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gDewfordTown_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(SLATEPORT_CITY), - .mapNum = MAP_NUM(SLATEPORT_CITY), - .landMonsInfo = NULL, - .waterMonsInfo = &gSlateportCity_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gSlateportCity_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(MOSSDEEP_CITY), - .mapNum = MAP_NUM(MOSSDEEP_CITY), - .landMonsInfo = NULL, - .waterMonsInfo = &gMossdeepCity_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gMossdeepCity_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(PACIFIDLOG_TOWN), - .mapNum = MAP_NUM(PACIFIDLOG_TOWN), - .landMonsInfo = NULL, - .waterMonsInfo = &gPacifidlogTown_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gPacifidlogTown_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(EVER_GRANDE_CITY), - .mapNum = MAP_NUM(EVER_GRANDE_CITY), - .landMonsInfo = NULL, - .waterMonsInfo = &gEverGrandeCity_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gEverGrandeCity_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(PETALBURG_CITY), - .mapNum = MAP_NUM(PETALBURG_CITY), - .landMonsInfo = NULL, - .waterMonsInfo = &gPetalburgCity_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gPetalburgCity_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(UNDERWATER1), - .mapNum = MAP_NUM(UNDERWATER1), - .landMonsInfo = NULL, - .waterMonsInfo = &gUnderwater1_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_ICE_ROOM), - .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_ICE_ROOM), - .landMonsInfo = &gShoalCave_LowTideIceRoom_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SKY_PILLAR_1F), - .mapNum = MAP_NUM(SKY_PILLAR_1F), - .landMonsInfo = &gSkyPillar_1F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SOOTOPOLIS_CITY), - .mapNum = MAP_NUM(SOOTOPOLIS_CITY), - .landMonsInfo = NULL, - .waterMonsInfo = &gSootopolisCity_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gSootopolisCity_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(SKY_PILLAR_3F), - .mapNum = MAP_NUM(SKY_PILLAR_3F), - .landMonsInfo = &gSkyPillar_3F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SKY_PILLAR_5F), - .mapNum = MAP_NUM(SKY_PILLAR_5F), - .landMonsInfo = &gSkyPillar_5F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTHEAST), - .mapNum = MAP_NUM(SAFARI_ZONE_SOUTHEAST), - .landMonsInfo = &gSafariZone_Southeast_LandMonsInfo, - .waterMonsInfo = &gSafariZone_Southeast_WaterMonsInfo, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = &gSafariZone_Southeast_FishingMonsInfo, - }, - { - .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTHEAST), - .mapNum = MAP_NUM(SAFARI_ZONE_NORTHEAST), - .landMonsInfo = &gSafariZone_Northeast_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = &gSafariZone_Northeast_RockSmashMonsInfo, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_1F), - .mapNum = MAP_NUM(MAGMA_HIDEOUT_1F), - .landMonsInfo = &gMagmaHideout_1F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_2F_1R), - .mapNum = MAP_NUM(MAGMA_HIDEOUT_2F_1R), - .landMonsInfo = &gMagmaHideout_2F_1R_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_2F_2R), - .mapNum = MAP_NUM(MAGMA_HIDEOUT_2F_2R), - .landMonsInfo = &gMagmaHideout_2F_2R_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_3F_1R), - .mapNum = MAP_NUM(MAGMA_HIDEOUT_3F_1R), - .landMonsInfo = &gMagmaHideout_3F_1R_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_3F_2R), - .mapNum = MAP_NUM(MAGMA_HIDEOUT_3F_2R), - .landMonsInfo = &gMagmaHideout_3F_2R_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_4F), - .mapNum = MAP_NUM(MAGMA_HIDEOUT_4F), - .landMonsInfo = &gMagmaHideout_4F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_3F_3R), - .mapNum = MAP_NUM(MAGMA_HIDEOUT_3F_3R), - .landMonsInfo = &gMagmaHideout_3F_3R_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_2F_3R), - .mapNum = MAP_NUM(MAGMA_HIDEOUT_2F_3R), - .landMonsInfo = &gMagmaHideout_2F_3R_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MIRAGE_TOWER_1F), - .mapNum = MAP_NUM(MIRAGE_TOWER_1F), - .landMonsInfo = &gMirageTower_1F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MIRAGE_TOWER_2F), - .mapNum = MAP_NUM(MIRAGE_TOWER_2F), - .landMonsInfo = &gMirageTower_2F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MIRAGE_TOWER_3F), - .mapNum = MAP_NUM(MIRAGE_TOWER_3F), - .landMonsInfo = &gMirageTower_3F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(MIRAGE_TOWER_4F), - .mapNum = MAP_NUM(MIRAGE_TOWER_4F), - .landMonsInfo = &gMirageTower_4F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(DESERT_UNDERPASS), - .mapNum = MAP_NUM(DESERT_UNDERPASS), - .landMonsInfo = &gDesertUnderpass_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ARTISAN_CAVE_B1F), - .mapNum = MAP_NUM(ARTISAN_CAVE_B1F), - .landMonsInfo = &gArtisanCave_B1F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ARTISAN_CAVE_1F), - .mapNum = MAP_NUM(ARTISAN_CAVE_1F), - .landMonsInfo = &gArtisanCave_1F_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ALTERING_CAVE), - .mapNum = MAP_NUM(ALTERING_CAVE), - .landMonsInfo = &gAlteringCave1_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ALTERING_CAVE), - .mapNum = MAP_NUM(ALTERING_CAVE), - .landMonsInfo = &gAlteringCave2_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ALTERING_CAVE), - .mapNum = MAP_NUM(ALTERING_CAVE), - .landMonsInfo = &gAlteringCave3_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ALTERING_CAVE), - .mapNum = MAP_NUM(ALTERING_CAVE), - .landMonsInfo = &gAlteringCave4_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ALTERING_CAVE), - .mapNum = MAP_NUM(ALTERING_CAVE), - .landMonsInfo = &gAlteringCave5_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ALTERING_CAVE), - .mapNum = MAP_NUM(ALTERING_CAVE), - .landMonsInfo = &gAlteringCave6_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ALTERING_CAVE), - .mapNum = MAP_NUM(ALTERING_CAVE), - .landMonsInfo = &gAlteringCave7_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ALTERING_CAVE), - .mapNum = MAP_NUM(ALTERING_CAVE), - .landMonsInfo = &gAlteringCave8_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(ALTERING_CAVE), - .mapNum = MAP_NUM(ALTERING_CAVE), - .landMonsInfo = &gAlteringCave9_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(METEOR_FALLS_STEVENS_CAVE), - .mapNum = MAP_NUM(METEOR_FALLS_STEVENS_CAVE), - .landMonsInfo = &gMeteorFalls_StevensCave_LandMonsInfo, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = MAP_GROUP(UNDEFINED), - .mapNum = MAP_NUM(UNDEFINED), - .landMonsInfo = NULL, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, -}; - -//Battle Pyramid-specific tables and headers start here. - -const struct WildPokemon gBattlePyramidPlaceholders_1[] = -{ - {5, 5, SPECIES_BULBASAUR}, - {5, 5, SPECIES_BULBASAUR}, - {5, 5, SPECIES_BULBASAUR}, - {5, 5, SPECIES_BULBASAUR}, - {5, 5, SPECIES_IVYSAUR}, - {5, 5, SPECIES_IVYSAUR}, - {5, 5, SPECIES_VENUSAUR}, - {5, 5, SPECIES_VENUSAUR}, - {5, 5, SPECIES_VENUSAUR}, - {5, 5, SPECIES_CHARMANDER}, - {5, 5, SPECIES_VENUSAUR}, - {5, 5, SPECIES_CHARMANDER}, -}; - -const struct WildPokemonInfo gBattlePyramidPlaceholders_1Info = {4, gBattlePyramidPlaceholders_1}; - -const struct WildPokemon gBattlePyramidPlaceholders_2[] = -{ - {5, 5, SPECIES_IVYSAUR}, - {5, 5, SPECIES_IVYSAUR}, - {5, 5, SPECIES_IVYSAUR}, - {5, 5, SPECIES_IVYSAUR}, - {5, 5, SPECIES_VENUSAUR}, - {5, 5, SPECIES_VENUSAUR}, - {5, 5, SPECIES_CHARMANDER}, - {5, 5, SPECIES_CHARMANDER}, - {5, 5, SPECIES_CHARMANDER}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARMANDER}, -}; - -const struct WildPokemonInfo gBattlePyramidPlaceholders_2Info = {4, gBattlePyramidPlaceholders_2}; - -const struct WildPokemon gBattlePyramidPlaceholders_3[] = -{ - {5, 5, SPECIES_VENUSAUR}, - {5, 5, SPECIES_VENUSAUR}, - {5, 5, SPECIES_VENUSAUR}, - {5, 5, SPECIES_VENUSAUR}, - {5, 5, SPECIES_CHARMANDER}, - {5, 5, SPECIES_CHARMANDER}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARIZARD}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARIZARD}, -}; - -const struct WildPokemonInfo gBattlePyramidPlaceholders_3Info = {4, gBattlePyramidPlaceholders_3}; - -const struct WildPokemon gBattlePyramidPlaceholders_4[] = -{ - {5, 5, SPECIES_CHARMANDER}, - {5, 5, SPECIES_CHARMANDER}, - {5, 5, SPECIES_CHARMANDER}, - {5, 5, SPECIES_CHARMANDER}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARIZARD}, - {5, 5, SPECIES_CHARIZARD}, - {5, 5, SPECIES_CHARIZARD}, - {5, 5, SPECIES_SQUIRTLE}, - {5, 5, SPECIES_CHARIZARD}, - {5, 5, SPECIES_SQUIRTLE}, -}; - -const struct WildPokemonInfo gBattlePyramidPlaceholders_4Info = {4, gBattlePyramidPlaceholders_4}; - -const struct WildPokemon gBattlePyramidPlaceholders_5[] = -{ - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARIZARD}, - {5, 5, SPECIES_CHARIZARD}, - {5, 5, SPECIES_SQUIRTLE}, - {5, 5, SPECIES_SQUIRTLE}, - {5, 5, SPECIES_SQUIRTLE}, - {5, 5, SPECIES_WARTORTLE}, - {5, 5, SPECIES_SQUIRTLE}, - {5, 5, SPECIES_WARTORTLE}, -}; - -const struct WildPokemonInfo gBattlePyramidPlaceholders_5Info = {4, gBattlePyramidPlaceholders_5}; - -const struct WildPokemon gBattlePyramidPlaceholders_6[] = -{ - {5, 5, SPECIES_CHARIZARD}, - {5, 5, SPECIES_CHARIZARD}, - {5, 5, SPECIES_CHARIZARD}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_SQUIRTLE}, - {5, 5, SPECIES_SQUIRTLE}, - {5, 5, SPECIES_WARTORTLE}, - {5, 5, SPECIES_WARTORTLE}, - {5, 5, SPECIES_WARTORTLE}, - {5, 5, SPECIES_WARTORTLE}, - {5, 5, SPECIES_WARTORTLE}, - {5, 5, SPECIES_WARTORTLE}, -}; - -const struct WildPokemonInfo gBattlePyramidPlaceholders_6Info = {4, gBattlePyramidPlaceholders_6}; - -const struct WildPokemon gBattlePyramidPlaceholders_7[] = -{ - {5, 5, SPECIES_WARTORTLE}, - {5, 5, SPECIES_WARTORTLE}, - {5, 5, SPECIES_SQUIRTLE}, - {5, 5, SPECIES_SQUIRTLE}, - {5, 5, SPECIES_SQUIRTLE}, - {5, 5, SPECIES_CHARIZARD}, - {5, 5, SPECIES_CHARIZARD}, - {5, 5, SPECIES_CHARIZARD}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARMELEON}, - {5, 5, SPECIES_CHARMELEON}, -}; - -const struct WildPokemonInfo gBattlePyramidPlaceholders_7Info = {8, gBattlePyramidPlaceholders_7}; - -const struct WildPokemonHeader gBattlePyramidWildMonHeaders[] = -{ - { - .mapGroup = 0, - .mapNum = 1, - .landMonsInfo = &gBattlePyramidPlaceholders_1Info, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = 0, - .mapNum = 2, - .landMonsInfo = &gBattlePyramidPlaceholders_2Info, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = 0, - .mapNum = 3, - .landMonsInfo = &gBattlePyramidPlaceholders_3Info, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = 0, - .mapNum = 4, - .landMonsInfo = &gBattlePyramidPlaceholders_4Info, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = 0, - .mapNum = 5, - .landMonsInfo = &gBattlePyramidPlaceholders_5Info, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = 0, - .mapNum = 6, - .landMonsInfo = &gBattlePyramidPlaceholders_6Info, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = 0, - .mapNum = 7, - .landMonsInfo = &gBattlePyramidPlaceholders_7Info, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = 255, - .mapNum = 255, - .landMonsInfo = NULL, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, -}; - -//Battle Pike-specific tables and headers start here. - -const struct WildPokemon gBattlePikeMons_1[] = -{ - {5, 5, SPECIES_SEVIPER}, - {5, 5, SPECIES_MILOTIC}, - {5, 5, SPECIES_DUSCLOPS}, - {5, 5, SPECIES_DUSCLOPS}, - {5, 5, SPECIES_DUSCLOPS}, - {5, 5, SPECIES_DUSCLOPS}, - {5, 5, SPECIES_SEVIPER}, - {5, 5, SPECIES_MILOTIC}, - {5, 5, SPECIES_DUSCLOPS}, - {5, 5, SPECIES_DUSCLOPS}, - {5, 5, SPECIES_SEVIPER}, - {5, 5, SPECIES_MILOTIC}, -}; - -const struct WildPokemonInfo gBattlePikeMonsInfo_1 = {10, gBattlePikeMons_1}; - -const struct WildPokemon gBattlePikeMons_2[] = -{ - {5, 5, SPECIES_SEVIPER}, - {5, 5, SPECIES_MILOTIC}, - {5, 5, SPECIES_ELECTRODE}, - {5, 5, SPECIES_ELECTRODE}, - {5, 5, SPECIES_ELECTRODE}, - {5, 5, SPECIES_ELECTRODE}, - {5, 5, SPECIES_SEVIPER}, - {5, 5, SPECIES_MILOTIC}, - {5, 5, SPECIES_ELECTRODE}, - {5, 5, SPECIES_ELECTRODE}, - {5, 5, SPECIES_SEVIPER}, - {5, 5, SPECIES_MILOTIC}, -}; - -const struct WildPokemonInfo gBattlePikeMonsInfo_2 = {10, gBattlePikeMons_2}; - -const struct WildPokemon gBattlePikeMons_3[] = -{ - {5, 5, SPECIES_SEVIPER}, - {5, 5, SPECIES_MILOTIC}, - {5, 5, SPECIES_BRELOOM}, - {5, 5, SPECIES_BRELOOM}, - {5, 5, SPECIES_BRELOOM}, - {5, 5, SPECIES_BRELOOM}, - {5, 5, SPECIES_SEVIPER}, - {5, 5, SPECIES_MILOTIC}, - {5, 5, SPECIES_BRELOOM}, - {5, 5, SPECIES_BRELOOM}, - {5, 5, SPECIES_SEVIPER}, - {5, 5, SPECIES_MILOTIC}, -}; - -const struct WildPokemonInfo gBattlePikeMonsInfo_3 = {10, gBattlePikeMons_3}; - -const struct WildPokemon gBattlePikeMons_4[] = -{ - {5, 5, SPECIES_SEVIPER}, - {5, 5, SPECIES_MILOTIC}, - {5, 5, SPECIES_WOBBUFFET}, - {5, 5, SPECIES_WOBBUFFET}, - {5, 5, SPECIES_WOBBUFFET}, - {5, 5, SPECIES_WOBBUFFET}, - {5, 5, SPECIES_SEVIPER}, - {5, 5, SPECIES_MILOTIC}, - {5, 5, SPECIES_WOBBUFFET}, - {5, 5, SPECIES_WOBBUFFET}, - {5, 5, SPECIES_SEVIPER}, - {5, 5, SPECIES_MILOTIC}, -}; - -const struct WildPokemonInfo gBattlePikeMonsInfo_4 = {10, gBattlePikeMons_4}; - -const struct WildPokemonHeader gBattlePikeWildMonHeaders[] = -{ - { - .mapGroup = 0, - .mapNum = 1, - .landMonsInfo = &gBattlePikeMonsInfo_1, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = 0, - .mapNum = 2, - .landMonsInfo = &gBattlePikeMonsInfo_2, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = 0, - .mapNum = 3, - .landMonsInfo = &gBattlePikeMonsInfo_3, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = 0, - .mapNum = 4, - .landMonsInfo = &gBattlePikeMonsInfo_4, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, - { - .mapGroup = 255, - .mapNum = 255, - .landMonsInfo = NULL, - .waterMonsInfo = NULL, - .rockSmashMonsInfo = NULL, - .fishingMonsInfo = NULL, - }, -}; - -//Special Feebas-related data. - -const struct WildPokemon gWildFeebasRoute119Data = {20, 25, SPECIES_FEEBAS}; - -const u16 gRoute119WaterTileData[] = -{ - 0, 0x2D, 0, - 0x2E, 0x5B, 0x83, - 0x5C, 0x8B, 0x12A, -}; - diff --git a/src/data/wild_encounters.json b/src/data/wild_encounters.json new file mode 100755 index 000000000..6dd24bfed --- /dev/null +++ b/src/data/wild_encounters.json @@ -0,0 +1,12186 @@ +{ + "wild_encounter_groups": [ + { + "label": "gWildMonHeaders", + "for_maps": true, + "encounters": [ + { + "map": "MAP_ROUTE101", + "base_label": "gRoute101", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 2, + "max_level": 2, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 2, + "max_level": 2, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 2, + "max_level": 2, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 2, + "max_level": 2, + "species": "SPECIES_ZIGZAGOON" + }, + { + "min_level": 2, + "max_level": 2, + "species": "SPECIES_ZIGZAGOON" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_ZIGZAGOON" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_ZIGZAGOON" + } + ] + } + }, + { + "map": "MAP_ROUTE102", + "base_label": "gRoute102", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_LOTAD" + }, + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_LOTAD" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_ZIGZAGOON" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_ZIGZAGOON" + }, + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_ZIGZAGOON" + }, + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_RALTS" + }, + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_ZIGZAGOON" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_SEEDOT" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_MARILL" + }, + { + "min_level": 10, + "max_level": 20, + "species": "SPECIES_MARILL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_MARILL" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MARILL" + }, + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_CORPHISH" + } + ] + } + }, + { + "map": "MAP_ROUTE103", + "base_label": "gRoute103", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 2, + "max_level": 2, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 2, + "max_level": 2, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_ZIGZAGOON" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_ZIGZAGOON" + }, + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_ZIGZAGOON" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 2, + "max_level": 2, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_WINGULL" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE104", + "base_label": "gRoute104", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MARILL" + }, + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_MARILL" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_TAILLOW" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_TAILLOW" + }, + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 4, + "max_level": 4, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WINGULL" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_MAGIKARP" + } + ] + } + }, + { + "map": "MAP_ROUTE105", + "base_label": "gRoute105", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE110", + "base_label": "gRoute110", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 12, + "max_level": 12, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 12, + "max_level": 12, + "species": "SPECIES_ELECTRIKE" + }, + { + "min_level": 12, + "max_level": 12, + "species": "SPECIES_GULPIN" + }, + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_ELECTRIKE" + }, + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_MINUN" + }, + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_MINUN" + }, + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_GULPIN" + }, + { + "min_level": 12, + "max_level": 12, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 12, + "max_level": 12, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 12, + "max_level": 12, + "species": "SPECIES_PLUSLE" + }, + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_PLUSLE" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE111", + "base_label": "gRoute111", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 19, + "max_level": 19, + "species": "SPECIES_BALTOY" + }, + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_BALTOY" + }, + { + "min_level": 19, + "max_level": 19, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 19, + "max_level": 19, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_BALTOY" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_CACNEA" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_CACNEA" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_CACNEA" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_MARILL" + }, + { + "min_level": 10, + "max_level": 20, + "species": "SPECIES_MARILL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_MARILL" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MARILL" + }, + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + } + ] + }, + "rock_smash_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 10, + "max_level": 15, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 15, + "max_level": 20, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 15, + "max_level": 20, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 15, + "max_level": 20, + "species": "SPECIES_GEODUDE" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_BARBOACH" + } + ] + } + }, + { + "map": "MAP_ROUTE112", + "base_label": "gRoute112", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_MARILL" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_MARILL" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_MARILL" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_NUMEL" + } + ] + } + }, + { + "map": "MAP_ROUTE113", + "base_label": "gRoute113", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_SPINDA" + }, + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_SPINDA" + }, + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_SLUGMA" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_SPINDA" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_SPINDA" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_SLUGMA" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_SPINDA" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_SLUGMA" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_SPINDA" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_SKARMORY" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_SPINDA" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_SKARMORY" + } + ] + } + }, + { + "map": "MAP_ROUTE114", + "base_label": "gRoute114", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_SWABLU" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_LOTAD" + }, + { + "min_level": 17, + "max_level": 17, + "species": "SPECIES_SWABLU" + }, + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_SWABLU" + }, + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_LOTAD" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_LOMBRE" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_LOMBRE" + }, + { + "min_level": 18, + "max_level": 18, + "species": "SPECIES_LOMBRE" + }, + { + "min_level": 17, + "max_level": 17, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 17, + "max_level": 17, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_NUZLEAF" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_MARILL" + }, + { + "min_level": 10, + "max_level": 20, + "species": "SPECIES_MARILL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_MARILL" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MARILL" + }, + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + } + ] + }, + "rock_smash_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 10, + "max_level": 15, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 15, + "max_level": 20, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 15, + "max_level": 20, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 15, + "max_level": 20, + "species": "SPECIES_GEODUDE" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_BARBOACH" + } + ] + } + }, + { + "map": "MAP_ROUTE116", + "base_label": "gRoute116", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_NINCADA" + }, + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_ABRA" + }, + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_NINCADA" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_TAILLOW" + }, + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_TAILLOW" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_TAILLOW" + }, + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_SKITTY" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_SKITTY" + } + ] + } + }, + { + "map": "MAP_ROUTE117", + "base_label": "gRoute117", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_MARILL" + }, + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_ILLUMISE" + }, + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_ILLUMISE" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_ILLUMISE" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_ILLUMISE" + }, + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_VOLBEAT" + }, + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_SEEDOT" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_MARILL" + }, + { + "min_level": 10, + "max_level": 20, + "species": "SPECIES_MARILL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_MARILL" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MARILL" + }, + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_CORPHISH" + } + ] + } + }, + { + "map": "MAP_ROUTE118", + "base_label": "gRoute118", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_ZIGZAGOON" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_ELECTRIKE" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_ZIGZAGOON" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_ELECTRIKE" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_LINOONE" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_MANECTRIC" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_KECLEON" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_CARVANHA" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_CARVANHA" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_CARVANHA" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_CARVANHA" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_CARVANHA" + } + ] + } + }, + { + "map": "MAP_ROUTE124", + "base_label": "gRoute124", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_PETALBURG_WOODS", + "base_label": "gPetalburgWoods", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SHROOMISH" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SILCOON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CASCOON" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_WURMPLE" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_SHROOMISH" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_TAILLOW" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SLAKOTH" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_TAILLOW" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_SLAKOTH" + } + ] + } + }, + { + "map": "MAP_RUSTURF_TUNNEL", + "base_label": "gRusturfTunnel", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_WHISMUR" + } + ] + } + }, + { + "map": "MAP_GRANITE_CAVE_1F", + "base_label": "gGraniteCave_1F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_MAKUHITA" + }, + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_MAKUHITA" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 9, + "max_level": 9, + "species": "SPECIES_MAKUHITA" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_ABRA" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_MAKUHITA" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_MAKUHITA" + }, + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 9, + "max_level": 9, + "species": "SPECIES_GEODUDE" + } + ] + } + }, + { + "map": "MAP_GRANITE_CAVE_B1F", + "base_label": "gGraniteCave_B1F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 9, + "max_level": 9, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_ARON" + }, + { + "min_level": 9, + "max_level": 9, + "species": "SPECIES_ARON" + }, + { + "min_level": 11, + "max_level": 11, + "species": "SPECIES_ARON" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 9, + "max_level": 9, + "species": "SPECIES_ABRA" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_MAKUHITA" + }, + { + "min_level": 11, + "max_level": 11, + "species": "SPECIES_MAKUHITA" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 9, + "max_level": 9, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 11, + "max_level": 11, + "species": "SPECIES_SABLEYE" + } + ] + } + }, + { + "map": "MAP_MT_PYRE_1F", + "base_label": "gMtPyre_1F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUPPET" + } + ] + } + }, + { + "map": "MAP_VICTORY_ROAD_1F", + "base_label": "gVictoryRoad_1F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_HARIYAMA" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_LAIRON" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_LOUDRED" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_MAKUHITA" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_HARIYAMA" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_ARON" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_ARON" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_WHISMUR" + } + ] + } + }, + { + "map": "MAP_SAFARI_ZONE_SOUTH", + "base_label": "gSafariZone_South", + "land_mons": { + "encounter_rate": 25, + "mons": [ + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_GIRAFARIG" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_GIRAFARIG" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_NATU" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_DODUO" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_GLOOM" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_WOBBUFFET" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_PIKACHU" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_WOBBUFFET" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_PIKACHU" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_WOBBUFFET" + } + ] + } + }, + { + "map": "MAP_UNDERWATER2", + "base_label": "gUnderwater2", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_CLAMPERL" + }, + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_CHINCHOU" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_CLAMPERL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_RELICANTH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_RELICANTH" + } + ] + } + }, + { + "map": "MAP_ABANDONED_SHIP_ROOMS_B1F", + "base_label": "gAbandonedShip_Rooms_B1F", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_TENTACRUEL" + } + ] + }, + "fishing_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_TENTACRUEL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_TENTACRUEL" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_TENTACRUEL" + } + ] + } + }, + { + "map": "MAP_GRANITE_CAVE_B2F", + "base_label": "gGraniteCave_B2F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 11, + "max_level": 11, + "species": "SPECIES_ARON" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_ARON" + }, + { + "min_level": 11, + "max_level": 11, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 12, + "max_level": 12, + "species": "SPECIES_ARON" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_ABRA" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 11, + "max_level": 11, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 12, + "max_level": 12, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 12, + "max_level": 12, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_SABLEYE" + } + ] + }, + "rock_smash_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 10, + "max_level": 15, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 10, + "max_level": 20, + "species": "SPECIES_NOSEPASS" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 15, + "max_level": 20, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 15, + "max_level": 20, + "species": "SPECIES_GEODUDE" + } + ] + } + }, + { + "map": "MAP_FIERY_PATH", + "base_label": "gFieryPath", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_KOFFING" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_MACHOP" + }, + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_SLUGMA" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_KOFFING" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_MACHOP" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_GRIMER" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_GRIMER" + } + ] + } + }, + { + "map": "MAP_METEOR_FALLS_B1F_2R", + "base_label": "gMeteorFalls_B1F_2R", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_BAGON" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_BAGON" + }, + { + "min_level": 37, + "max_level": 37, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_BAGON" + }, + { + "min_level": 39, + "max_level": 39, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_GOLBAT" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 25, + "max_level": 35, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 5, + "max_level": 15, + "species": "SPECIES_SOLROCK" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WHISCASH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WHISCASH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WHISCASH" + } + ] + } + }, + { + "map": "MAP_JAGGED_PASS", + "base_label": "gJaggedPass", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_MACHOP" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SPOINK" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_MACHOP" + }, + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_SPOINK" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_MACHOP" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SPOINK" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_NUMEL" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SPOINK" + } + ] + } + }, + { + "map": "MAP_ROUTE106", + "base_label": "gRoute106", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE107", + "base_label": "gRoute107", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE108", + "base_label": "gRoute108", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE109", + "base_label": "gRoute109", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE115", + "base_label": "gRoute115", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_SWABLU" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_TAILLOW" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_SWABLU" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_TAILLOW" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_TAILLOW" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_SWELLOW" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_JIGGLYPUFF" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_JIGGLYPUFF" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_WINGULL" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_NEW_MAUVILLE_INSIDE", + "base_label": "gNewMauville_Inside", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_VOLTORB" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_MAGNEMITE" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_VOLTORB" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_MAGNEMITE" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_VOLTORB" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_MAGNEMITE" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_VOLTORB" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_MAGNEMITE" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_VOLTORB" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_MAGNEMITE" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_ELECTRODE" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_MAGNETON" + } + ] + } + }, + { + "map": "MAP_ROUTE119", + "base_label": "gRoute119", + "land_mons": { + "encounter_rate": 15, + "mons": [ + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_ZIGZAGOON" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_LINOONE" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_ZIGZAGOON" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_LINOONE" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_TROPIUS" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_TROPIUS" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_TROPIUS" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_KECLEON" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_CARVANHA" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_CARVANHA" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_CARVANHA" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_CARVANHA" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_CARVANHA" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_CARVANHA" + } + ] + } + }, + { + "map": "MAP_ROUTE120", + "base_label": "gRoute120", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_MIGHTYENA" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_MIGHTYENA" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_MARILL" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_MARILL" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_ABSOL" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_ABSOL" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_KECLEON" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_SEEDOT" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_MARILL" + }, + { + "min_level": 10, + "max_level": 20, + "species": "SPECIES_MARILL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_MARILL" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MARILL" + }, + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_BARBOACH" + } + ] + } + }, + { + "map": "MAP_ROUTE121", + "base_label": "gRoute121", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_MIGHTYENA" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_MIGHTYENA" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_GLOOM" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_KECLEON" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE122", + "base_label": "gRoute122", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE123", + "base_label": "gRoute123", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_POOCHYENA" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_MIGHTYENA" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_MIGHTYENA" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_GLOOM" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_KECLEON" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_MT_PYRE_2F", + "base_label": "gMtPyre_2F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUPPET" + } + ] + } + }, + { + "map": "MAP_MT_PYRE_3F", + "base_label": "gMtPyre_3F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUPPET" + } + ] + } + }, + { + "map": "MAP_MT_PYRE_4F", + "base_label": "gMtPyre_4F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_DUSKULL" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_DUSKULL" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_DUSKULL" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_DUSKULL" + } + ] + } + }, + { + "map": "MAP_MT_PYRE_5F", + "base_label": "gMtPyre_5F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_DUSKULL" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_DUSKULL" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_DUSKULL" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_DUSKULL" + } + ] + } + }, + { + "map": "MAP_MT_PYRE_6F", + "base_label": "gMtPyre_6F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_DUSKULL" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_DUSKULL" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_DUSKULL" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_DUSKULL" + } + ] + } + }, + { + "map": "MAP_MT_PYRE_EXTERIOR", + "base_label": "gMtPyre_Exterior", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_VULPIX" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_VULPIX" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_VULPIX" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_VULPIX" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_WINGULL" + } + ] + } + }, + { + "map": "MAP_MT_PYRE_SUMMIT", + "base_label": "gMtPyre_Summit", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUPPET" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_DUSKULL" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_DUSKULL" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_DUSKULL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_CHIMECHO" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_CHIMECHO" + } + ] + } + }, + { + "map": "MAP_GRANITE_CAVE_STEVENS_ROOM", + "base_label": "gGraniteCave_StevensRoom", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_MAKUHITA" + }, + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_MAKUHITA" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 9, + "max_level": 9, + "species": "SPECIES_MAKUHITA" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_ABRA" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_MAKUHITA" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_MAKUHITA" + }, + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_ARON" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_ARON" + }, + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_ARON" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_ARON" + } + ] + } + }, + { + "map": "MAP_ROUTE125", + "base_label": "gRoute125", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE126", + "base_label": "gRoute126", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE127", + "base_label": "gRoute127", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE128", + "base_label": "gRoute128", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_LUVDISC" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_LUVDISC" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_CORSOLA" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE129", + "base_label": "gRoute129", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILORD" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE130", + "base_label": "gRoute130", + "land_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_WYNAUT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_WYNAUT" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_WYNAUT" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_WYNAUT" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_WYNAUT" + }, + { + "min_level": 45, + "max_level": 45, + "species": "SPECIES_WYNAUT" + }, + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_WYNAUT" + }, + { + "min_level": 50, + "max_level": 50, + "species": "SPECIES_WYNAUT" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_WYNAUT" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WYNAUT" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_WYNAUT" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WYNAUT" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE131", + "base_label": "gRoute131", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE132", + "base_label": "gRoute132", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_HORSEA" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE133", + "base_label": "gRoute133", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_HORSEA" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ROUTE134", + "base_label": "gRoute134", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_HORSEA" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS", + "base_label": "gAbandonedShip_HiddenFloorCorridors", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_TENTACRUEL" + } + ] + }, + "fishing_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_TENTACRUEL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_TENTACRUEL" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_TENTACRUEL" + } + ] + } + }, + { + "map": "MAP_SEAFLOOR_CAVERN_ROOM1", + "base_label": "gSeafloorCavern_Room1", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_GOLBAT" + } + ] + } + }, + { + "map": "MAP_SEAFLOOR_CAVERN_ROOM2", + "base_label": "gSeafloorCavern_Room2", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_GOLBAT" + } + ] + } + }, + { + "map": "MAP_SEAFLOOR_CAVERN_ROOM3", + "base_label": "gSeafloorCavern_Room3", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_GOLBAT" + } + ] + } + }, + { + "map": "MAP_SEAFLOOR_CAVERN_ROOM4", + "base_label": "gSeafloorCavern_Room4", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_GOLBAT" + } + ] + } + }, + { + "map": "MAP_SEAFLOOR_CAVERN_ROOM5", + "base_label": "gSeafloorCavern_Room5", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_GOLBAT" + } + ] + } + }, + { + "map": "MAP_SEAFLOOR_CAVERN_ROOM6", + "base_label": "gSeafloorCavern_Room6", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_GOLBAT" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + } + ] + }, + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_SEAFLOOR_CAVERN_ROOM7", + "base_label": "gSeafloorCavern_Room7", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_GOLBAT" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + } + ] + }, + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_SEAFLOOR_CAVERN_ROOM8", + "base_label": "gSeafloorCavern_Room8", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_GOLBAT" + } + ] + } + }, + { + "map": "MAP_SEAFLOOR_CAVERN_ENTRANCE", + "base_label": "gSeafloorCavern_Entrance", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + } + ] + }, + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_CAVE_OF_ORIGIN_ENTRANCE", + "base_label": "gCaveOfOrigin_Entrance", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_GOLBAT" + } + ] + } + }, + { + "map": "MAP_CAVE_OF_ORIGIN_1F", + "base_label": "gCaveOfOrigin_1F", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_GOLBAT" + } + ] + } + }, + { + "map": "MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1", + "base_label": "gCaveOfOrigin_UnusedRubySapphireMap1", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_GOLBAT" + } + ] + } + }, + { + "map": "MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2", + "base_label": "gCaveOfOrigin_UnusedRubySapphireMap2", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_GOLBAT" + } + ] + } + }, + { + "map": "MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3", + "base_label": "gCaveOfOrigin_UnusedRubySapphireMap3", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_GOLBAT" + } + ] + } + }, + { + "map": "MAP_NEW_MAUVILLE_ENTRANCE", + "base_label": "gNewMauville_Entrance", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_VOLTORB" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_MAGNEMITE" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_VOLTORB" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_MAGNEMITE" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_VOLTORB" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_MAGNEMITE" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_VOLTORB" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_MAGNEMITE" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_VOLTORB" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_MAGNEMITE" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_VOLTORB" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_MAGNEMITE" + } + ] + } + }, + { + "map": "MAP_SAFARI_ZONE_SOUTHWEST", + "base_label": "gSafariZone_Southwest", + "land_mons": { + "encounter_rate": 25, + "mons": [ + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_GIRAFARIG" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_GIRAFARIG" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_NATU" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_DODUO" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_GLOOM" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_WOBBUFFET" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_PIKACHU" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_WOBBUFFET" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_PIKACHU" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_WOBBUFFET" + } + ] + }, + "water_mons": { + "encounter_rate": 9, + "mons": [ + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_PSYDUCK" + }, + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_PSYDUCK" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_PSYDUCK" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_PSYDUCK" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_PSYDUCK" + } + ] + }, + "fishing_mons": { + "encounter_rate": 35, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 25, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SEAKING" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_SEAKING" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_SEAKING" + } + ] + } + }, + { + "map": "MAP_SAFARI_ZONE_NORTH", + "base_label": "gSafariZone_North", + "land_mons": { + "encounter_rate": 25, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_PHANPY" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_PHANPY" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_NATU" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_GLOOM" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_GLOOM" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_NATU" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_XATU" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_HERACROSS" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_XATU" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_HERACROSS" + } + ] + }, + "rock_smash_mons": { + "encounter_rate": 25, + "mons": [ + { + "min_level": 10, + "max_level": 15, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 15, + "max_level": 20, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_GEODUDE" + } + ] + } + }, + { + "map": "MAP_SAFARI_ZONE_NORTHWEST", + "base_label": "gSafariZone_Northwest", + "land_mons": { + "encounter_rate": 25, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_RHYHORN" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_RHYHORN" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_ODDISH" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_DODUO" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_GLOOM" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_GLOOM" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_DODUO" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_DODRIO" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_PINSIR" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_DODRIO" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_PINSIR" + } + ] + }, + "water_mons": { + "encounter_rate": 9, + "mons": [ + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_PSYDUCK" + }, + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_PSYDUCK" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_PSYDUCK" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLDUCK" + }, + { + "min_level": 25, + "max_level": 40, + "species": "SPECIES_GOLDUCK" + } + ] + }, + "fishing_mons": { + "encounter_rate": 35, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 25, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SEAKING" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_SEAKING" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_SEAKING" + } + ] + } + }, + { + "map": "MAP_VICTORY_ROAD_B1F", + "base_label": "gVictoryRoad_B1F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_HARIYAMA" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_LAIRON" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_LAIRON" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_HARIYAMA" + }, + { + "min_level": 42, + "max_level": 42, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 42, + "max_level": 42, + "species": "SPECIES_HARIYAMA" + }, + { + "min_level": 42, + "max_level": 42, + "species": "SPECIES_LAIRON" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_MAWILE" + }, + { + "min_level": 42, + "max_level": 42, + "species": "SPECIES_LAIRON" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_MAWILE" + } + ] + }, + "rock_smash_mons": { + "encounter_rate": 20, + "mons": [ + { + "min_level": 30, + "max_level": 40, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 30, + "max_level": 40, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_GRAVELER" + } + ] + } + }, + { + "map": "MAP_VICTORY_ROAD_B2F", + "base_label": "gVictoryRoad_B2F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_LAIRON" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_LAIRON" + }, + { + "min_level": 42, + "max_level": 42, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 42, + "max_level": 42, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 44, + "max_level": 44, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 44, + "max_level": 44, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 42, + "max_level": 42, + "species": "SPECIES_LAIRON" + }, + { + "min_level": 42, + "max_level": 42, + "species": "SPECIES_MAWILE" + }, + { + "min_level": 44, + "max_level": 44, + "species": "SPECIES_LAIRON" + }, + { + "min_level": 44, + "max_level": 44, + "species": "SPECIES_MAWILE" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_GOLBAT" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WHISCASH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WHISCASH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WHISCASH" + } + ] + } + }, + { + "map": "MAP_METEOR_FALLS_1F_1R", + "base_label": "gMeteorFalls_1F_1R", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 17, + "max_level": 17, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 18, + "max_level": 18, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 15, + "max_level": 15, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 18, + "max_level": 18, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 19, + "max_level": 19, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 19, + "max_level": 19, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_ZUBAT" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 25, + "max_level": 35, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 5, + "max_level": 15, + "species": "SPECIES_SOLROCK" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_BARBOACH" + } + ] + } + }, + { + "map": "MAP_METEOR_FALLS_1F_2R", + "base_label": "gMeteorFalls_1F_2R", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 37, + "max_level": 37, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 39, + "max_level": 39, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_GOLBAT" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 25, + "max_level": 35, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 5, + "max_level": 15, + "species": "SPECIES_SOLROCK" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WHISCASH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WHISCASH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WHISCASH" + } + ] + } + }, + { + "map": "MAP_METEOR_FALLS_B1F_1R", + "base_label": "gMeteorFalls_B1F_1R", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 37, + "max_level": 37, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 39, + "max_level": 39, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_GOLBAT" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 25, + "max_level": 35, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 5, + "max_level": 15, + "species": "SPECIES_SOLROCK" + } + ] + }, + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WHISCASH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WHISCASH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WHISCASH" + } + ] + } + }, + { + "map": "MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM", + "base_label": "gShoalCave_LowTideStairsRoom", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SPHEAL" + } + ] + } + }, + { + "map": "MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM", + "base_label": "gShoalCave_LowTideLowerRoom", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SPHEAL" + } + ] + } + }, + { + "map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM", + "base_label": "gShoalCave_LowTideInnerRoom", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SPHEAL" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 25, + "max_level": 35, + "species": "SPECIES_SPHEAL" + } + ] + }, + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM", + "base_label": "gShoalCave_LowTideEntranceRoom", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SPHEAL" + } + ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 25, + "max_level": 35, + "species": "SPECIES_SPHEAL" + } + ] + }, + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_LILYCOVE_CITY", + "base_label": "gLilycoveCity", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_STARYU" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_DEWFORD_TOWN", + "base_label": "gDewfordTown", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_SLATEPORT_CITY", + "base_label": "gSlateportCity", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_MOSSDEEP_CITY", + "base_label": "gMossdeepCity", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_PACIFIDLOG_TOWN", + "base_label": "gPacifidlogTown", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_EVER_GRANDE_CITY", + "base_label": "gEverGrandeCity", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_LUVDISC" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_LUVDISC" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_CORSOLA" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + } + }, + { + "map": "MAP_PETALBURG_CITY", + "base_label": "gPetalburgCity", + "water_mons": { + "encounter_rate": 1, + "mons": [ + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_MARILL" + }, + { + "min_level": 10, + "max_level": 20, + "species": "SPECIES_MARILL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_MARILL" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MARILL" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MARILL" + } + ] + }, + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_CORPHISH" + } + ] + } + }, + { + "map": "MAP_UNDERWATER1", + "base_label": "gUnderwater1", + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_CLAMPERL" + }, + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_CHINCHOU" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_CLAMPERL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_RELICANTH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_RELICANTH" + } + ] + } + }, + { + "map": "MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM", + "base_label": "gShoalCave_LowTideIceRoom", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SNORUNT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_SPHEAL" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SNORUNT" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_SNORUNT" + } + ] + } + }, + { + "map": "MAP_SKY_PILLAR_1F", + "base_label": "gSkyPillar_1F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_CLAYDOL" + }, + { + "min_level": 37, + "max_level": 37, + "species": "SPECIES_BANETTE" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_BANETTE" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_CLAYDOL" + }, + { + "min_level": 37, + "max_level": 37, + "species": "SPECIES_CLAYDOL" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_CLAYDOL" + }, + { + "min_level": 37, + "max_level": 37, + "species": "SPECIES_CLAYDOL" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_CLAYDOL" + } + ] + } + }, + { + "map": "MAP_SOOTOPOLIS_CITY", + "base_label": "gSootopolisCity", + "water_mons": { + "encounter_rate": 1, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + } + ] + }, + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_GYARADOS" + }, + { + "min_level": 35, + "max_level": 45, + "species": "SPECIES_GYARADOS" + }, + { + "min_level": 5, + "max_level": 45, + "species": "SPECIES_GYARADOS" + } + ] + } + }, + { + "map": "MAP_SKY_PILLAR_3F", + "base_label": "gSkyPillar_3F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_CLAYDOL" + }, + { + "min_level": 37, + "max_level": 37, + "species": "SPECIES_BANETTE" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_BANETTE" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_CLAYDOL" + }, + { + "min_level": 37, + "max_level": 37, + "species": "SPECIES_CLAYDOL" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_CLAYDOL" + }, + { + "min_level": 37, + "max_level": 37, + "species": "SPECIES_CLAYDOL" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_CLAYDOL" + } + ] + } + }, + { + "map": "MAP_SKY_PILLAR_5F", + "base_label": "gSkyPillar_5F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_SABLEYE" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_CLAYDOL" + }, + { + "min_level": 37, + "max_level": 37, + "species": "SPECIES_BANETTE" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_BANETTE" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_CLAYDOL" + }, + { + "min_level": 37, + "max_level": 37, + "species": "SPECIES_CLAYDOL" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_ALTARIA" + }, + { + "min_level": 39, + "max_level": 39, + "species": "SPECIES_ALTARIA" + }, + { + "min_level": 39, + "max_level": 39, + "species": "SPECIES_ALTARIA" + } + ] + } + }, + { + "map": "MAP_SAFARI_ZONE_SOUTHEAST", + "base_label": "gSafariZone_Southeast", + "land_mons": { + "encounter_rate": 25, + "mons": [ + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_SUNKERN" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_MAREEP" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_SUNKERN" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_MAREEP" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_AIPOM" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_SPINARAK" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_HOOTHOOT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_SNUBBULL" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_STANTLER" + }, + { + "min_level": 37, + "max_level": 37, + "species": "SPECIES_GLIGAR" + }, + { + "min_level": 39, + "max_level": 39, + "species": "SPECIES_STANTLER" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_GLIGAR" + } + ] + }, + "water_mons": { + "encounter_rate": 9, + "mons": [ + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WOOPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_MARILL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_MARILL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_MARILL" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_QUAGSIRE" + } + ] + }, + "fishing_mons": { + "encounter_rate": 35, + "mons": [ + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_REMORAID" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_REMORAID" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_REMORAID" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_REMORAID" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_OCTILLERY" + } + ] + } + }, + { + "map": "MAP_SAFARI_ZONE_NORTHEAST", + "base_label": "gSafariZone_Northeast", + "land_mons": { + "encounter_rate": 25, + "mons": [ + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_AIPOM" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_TEDDIURSA" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_AIPOM" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_TEDDIURSA" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_SUNKERN" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_LEDYBA" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_HOOTHOOT" + }, + { + "min_level": 34, + "max_level": 34, + "species": "SPECIES_PINECO" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_HOUNDOUR" + }, + { + "min_level": 37, + "max_level": 37, + "species": "SPECIES_MILTANK" + }, + { + "min_level": 39, + "max_level": 39, + "species": "SPECIES_HOUNDOUR" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_MILTANK" + } + ] + }, + "rock_smash_mons": { + "encounter_rate": 25, + "mons": [ + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_SHUCKLE" + } + ] + } + }, + { + "map": "MAP_MAGMA_HIDEOUT_1F", + "base_label": "gMagmaHideout_1F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GRAVELER" + } + ] + } + }, + { + "map": "MAP_MAGMA_HIDEOUT_2F_1R", + "base_label": "gMagmaHideout_2F_1R", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GRAVELER" + } + ] + } + }, + { + "map": "MAP_MAGMA_HIDEOUT_2F_2R", + "base_label": "gMagmaHideout_2F_2R", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GRAVELER" + } + ] + } + }, + { + "map": "MAP_MAGMA_HIDEOUT_3F_1R", + "base_label": "gMagmaHideout_3F_1R", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GRAVELER" + } + ] + } + }, + { + "map": "MAP_MAGMA_HIDEOUT_3F_2R", + "base_label": "gMagmaHideout_3F_2R", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GRAVELER" + } + ] + } + }, + { + "map": "MAP_MAGMA_HIDEOUT_4F", + "base_label": "gMagmaHideout_4F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GRAVELER" + } + ] + } + }, + { + "map": "MAP_MAGMA_HIDEOUT_3F_3R", + "base_label": "gMagmaHideout_3F_3R", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GRAVELER" + } + ] + } + }, + { + "map": "MAP_MAGMA_HIDEOUT_2F_3R", + "base_label": "gMagmaHideout_2F_3R", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_TORKOAL" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GEODUDE" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 30, + "max_level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 31, + "max_level": 31, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 32, + "max_level": 32, + "species": "SPECIES_GRAVELER" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GRAVELER" + } + ] + } + }, + { + "map": "MAP_MIRAGE_TOWER_1F", + "base_label": "gMirageTower_1F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_TRAPINCH" + } + ] + } + }, + { + "map": "MAP_MIRAGE_TOWER_2F", + "base_label": "gMirageTower_2F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_TRAPINCH" + } + ] + } + }, + { + "map": "MAP_MIRAGE_TOWER_3F", + "base_label": "gMirageTower_3F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_TRAPINCH" + } + ] + } + }, + { + "map": "MAP_MIRAGE_TOWER_4F", + "base_label": "gMirageTower_4F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_TRAPINCH" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SANDSHREW" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_TRAPINCH" + } + ] + } + }, + { + "map": "MAP_DESERT_UNDERPASS", + "base_label": "gDesertUnderpass", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_DITTO" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_DITTO" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_LOUDRED" + }, + { + "min_level": 41, + "max_level": 41, + "species": "SPECIES_DITTO" + }, + { + "min_level": 36, + "max_level": 36, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_LOUDRED" + }, + { + "min_level": 42, + "max_level": 42, + "species": "SPECIES_DITTO" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_WHISMUR" + }, + { + "min_level": 43, + "max_level": 43, + "species": "SPECIES_DITTO" + }, + { + "min_level": 44, + "max_level": 44, + "species": "SPECIES_LOUDRED" + }, + { + "min_level": 45, + "max_level": 45, + "species": "SPECIES_DITTO" + } + ] + } + }, + { + "map": "MAP_ARTISAN_CAVE_B1F", + "base_label": "gArtisanCave_B1F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 41, + "max_level": 41, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 42, + "max_level": 42, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 43, + "max_level": 43, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 44, + "max_level": 44, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 45, + "max_level": 45, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 46, + "max_level": 46, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 47, + "max_level": 47, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 48, + "max_level": 48, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 49, + "max_level": 49, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 50, + "max_level": 50, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 50, + "max_level": 50, + "species": "SPECIES_SMEARGLE" + } + ] + } + }, + { + "map": "MAP_ARTISAN_CAVE_1F", + "base_label": "gArtisanCave_1F", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 41, + "max_level": 41, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 42, + "max_level": 42, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 43, + "max_level": 43, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 44, + "max_level": 44, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 45, + "max_level": 45, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 46, + "max_level": 46, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 47, + "max_level": 47, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 48, + "max_level": 48, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 49, + "max_level": 49, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 50, + "max_level": 50, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 50, + "max_level": 50, + "species": "SPECIES_SMEARGLE" + } + ] + } + }, + { + "map": "MAP_ALTERING_CAVE", + "base_label": "gAlteringCave1", + "land_mons": { + "encounter_rate": 7, + "mons": [ + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 12, + "max_level": 12, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 12, + "max_level": 12, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_ZUBAT" + } + ] + } + }, + { + "map": "MAP_ALTERING_CAVE", + "base_label": "gAlteringCave2", + "land_mons": { + "encounter_rate": 7, + "mons": [ + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_MAREEP" + }, + { + "min_level": 9, + "max_level": 9, + "species": "SPECIES_MAREEP" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MAREEP" + }, + { + "min_level": 11, + "max_level": 11, + "species": "SPECIES_MAREEP" + }, + { + "min_level": 7, + "max_level": 7, + "species": "SPECIES_MAREEP" + }, + { + "min_level": 9, + "max_level": 9, + "species": "SPECIES_MAREEP" + }, + { + "min_level": 13, + "max_level": 13, + "species": "SPECIES_MAREEP" + }, + { + "min_level": 3, + "max_level": 3, + "species": "SPECIES_MAREEP" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MAREEP" + }, + { + "min_level": 11, + "max_level": 11, + "species": "SPECIES_MAREEP" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MAREEP" + }, + { + "min_level": 11, + "max_level": 11, + "species": "SPECIES_MAREEP" + } + ] + } + }, + { + "map": "MAP_ALTERING_CAVE", + "base_label": "gAlteringCave3", + "land_mons": { + "encounter_rate": 7, + "mons": [ + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_PINECO" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_PINECO" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_PINECO" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_PINECO" + }, + { + "min_level": 23, + "max_level": 23, + "species": "SPECIES_PINECO" + }, + { + "min_level": 25, + "max_level": 25, + "species": "SPECIES_PINECO" + }, + { + "min_level": 29, + "max_level": 29, + "species": "SPECIES_PINECO" + }, + { + "min_level": 19, + "max_level": 19, + "species": "SPECIES_PINECO" + }, + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_PINECO" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_PINECO" + }, + { + "min_level": 21, + "max_level": 21, + "species": "SPECIES_PINECO" + }, + { + "min_level": 27, + "max_level": 27, + "species": "SPECIES_PINECO" + } + ] + } + }, + { + "map": "MAP_ALTERING_CAVE", + "base_label": "gAlteringCave4", + "land_mons": { + "encounter_rate": 7, + "mons": [ + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_HOUNDOUR" + }, + { + "min_level": 18, + "max_level": 18, + "species": "SPECIES_HOUNDOUR" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_HOUNDOUR" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_HOUNDOUR" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_HOUNDOUR" + }, + { + "min_level": 18, + "max_level": 18, + "species": "SPECIES_HOUNDOUR" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_HOUNDOUR" + }, + { + "min_level": 12, + "max_level": 12, + "species": "SPECIES_HOUNDOUR" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_HOUNDOUR" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_HOUNDOUR" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_HOUNDOUR" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_HOUNDOUR" + } + ] + } + }, + { + "map": "MAP_ALTERING_CAVE", + "base_label": "gAlteringCave5", + "land_mons": { + "encounter_rate": 7, + "mons": [ + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_TEDDIURSA" + }, + { + "min_level": 12, + "max_level": 12, + "species": "SPECIES_TEDDIURSA" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_TEDDIURSA" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_TEDDIURSA" + }, + { + "min_level": 10, + "max_level": 10, + "species": "SPECIES_TEDDIURSA" + }, + { + "min_level": 12, + "max_level": 12, + "species": "SPECIES_TEDDIURSA" + }, + { + "min_level": 16, + "max_level": 16, + "species": "SPECIES_TEDDIURSA" + }, + { + "min_level": 6, + "max_level": 6, + "species": "SPECIES_TEDDIURSA" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_TEDDIURSA" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_TEDDIURSA" + }, + { + "min_level": 8, + "max_level": 8, + "species": "SPECIES_TEDDIURSA" + }, + { + "min_level": 14, + "max_level": 14, + "species": "SPECIES_TEDDIURSA" + } + ] + } + }, + { + "map": "MAP_ALTERING_CAVE", + "base_label": "gAlteringCave6", + "land_mons": { + "encounter_rate": 7, + "mons": [ + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_AIPOM" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_AIPOM" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_AIPOM" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_AIPOM" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_AIPOM" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_AIPOM" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_AIPOM" + }, + { + "min_level": 18, + "max_level": 18, + "species": "SPECIES_AIPOM" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_AIPOM" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_AIPOM" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_AIPOM" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_AIPOM" + } + ] + } + }, + { + "map": "MAP_ALTERING_CAVE", + "base_label": "gAlteringCave7", + "land_mons": { + "encounter_rate": 7, + "mons": [ + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 18, + "max_level": 18, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SHUCKLE" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SHUCKLE" + } + ] + } + }, + { + "map": "MAP_ALTERING_CAVE", + "base_label": "gAlteringCave8", + "land_mons": { + "encounter_rate": 7, + "mons": [ + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_STANTLER" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_STANTLER" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_STANTLER" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_STANTLER" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_STANTLER" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_STANTLER" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_STANTLER" + }, + { + "min_level": 18, + "max_level": 18, + "species": "SPECIES_STANTLER" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_STANTLER" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_STANTLER" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_STANTLER" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_STANTLER" + } + ] + } + }, + { + "map": "MAP_ALTERING_CAVE", + "base_label": "gAlteringCave9", + "land_mons": { + "encounter_rate": 7, + "mons": [ + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 22, + "max_level": 22, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 24, + "max_level": 24, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 28, + "max_level": 28, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 18, + "max_level": 18, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 20, + "max_level": 20, + "species": "SPECIES_SMEARGLE" + }, + { + "min_level": 26, + "max_level": 26, + "species": "SPECIES_SMEARGLE" + } + ] + } + }, + { + "map": "MAP_METEOR_FALLS_STEVENS_CAVE", + "base_label": "gMeteorFalls_StevensCave", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 33, + "max_level": 33, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 37, + "max_level": 37, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 35, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 39, + "max_level": 39, + "species": "SPECIES_SOLROCK" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 38, + "max_level": 38, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 40, + "max_level": 40, + "species": "SPECIES_GOLBAT" + } + ] + } + } + ] + }, + { + "label": "gBattlePyramidWildMonHeaders", + "for_maps": false, + "encounters": [ + { + "base_label": "gBattlePyramid_1", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_BULBASAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_BULBASAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_BULBASAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_BULBASAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_IVYSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_IVYSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_VENUSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_VENUSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_VENUSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMANDER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_VENUSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMANDER" + } + ] + } + }, + { + "base_label": "gBattlePyramid_2", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_IVYSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_IVYSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_IVYSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_IVYSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_VENUSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_VENUSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMANDER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMANDER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMANDER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMANDER" + } + ] + } + }, + { + "base_label": "gBattlePyramid_3", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_VENUSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_VENUSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_VENUSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_VENUSAUR" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMANDER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMANDER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARIZARD" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARIZARD" + } + ] + } + }, + { + "base_label": "gBattlePyramid_4", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMANDER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMANDER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMANDER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMANDER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARIZARD" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARIZARD" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARIZARD" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SQUIRTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARIZARD" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SQUIRTLE" + } + ] + } + }, + { + "base_label": "gBattlePyramid_5", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARIZARD" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARIZARD" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SQUIRTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SQUIRTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SQUIRTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WARTORTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SQUIRTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WARTORTLE" + } + ] + } + }, + { + "base_label": "gBattlePyramid_6", + "land_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARIZARD" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARIZARD" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARIZARD" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SQUIRTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SQUIRTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WARTORTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WARTORTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WARTORTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WARTORTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WARTORTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WARTORTLE" + } + ] + } + }, + { + "base_label": "gBattlePyramid_7", + "land_mons": { + "encounter_rate": 8, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WARTORTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WARTORTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SQUIRTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SQUIRTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SQUIRTLE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARIZARD" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARIZARD" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARIZARD" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_CHARMELEON" + } + ] + } + } + ] + }, + { + "label": "gBattlePikeWildMonHeaders", + "for_maps": false, + "encounters": [ + { + "base_label": "gBattlePike_1", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MILOTIC" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_DUSCLOPS" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_DUSCLOPS" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_DUSCLOPS" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_DUSCLOPS" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MILOTIC" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_DUSCLOPS" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_DUSCLOPS" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MILOTIC" + } + ] + } + }, + { + "base_label": "gBattlePike_2", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MILOTIC" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_ELECTRODE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_ELECTRODE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_ELECTRODE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_ELECTRODE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MILOTIC" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_ELECTRODE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_ELECTRODE" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MILOTIC" + } + ] + } + }, + { + "base_label": "gBattlePike_3", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MILOTIC" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_BRELOOM" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_BRELOOM" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_BRELOOM" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_BRELOOM" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MILOTIC" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_BRELOOM" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_BRELOOM" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MILOTIC" + } + ] + } + }, + { + "base_label": "gBattlePike_4", + "land_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MILOTIC" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WOBBUFFET" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WOBBUFFET" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WOBBUFFET" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WOBBUFFET" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MILOTIC" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WOBBUFFET" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_WOBBUFFET" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_SEVIPER" + }, + { + "min_level": 5, + "max_level": 5, + "species": "SPECIES_MILOTIC" + } + ] + } + } + ] + } + ] +}
\ No newline at end of file diff --git a/src/data/wild_encounters.json.txt b/src/data/wild_encounters.json.txt new file mode 100755 index 000000000..8f88cc587 --- /dev/null +++ b/src/data/wild_encounters.json.txt @@ -0,0 +1,67 @@ +{{ doNotModifyHeader }} +## for wild_encounter_group in wild_encounter_groups +## for encounter in wild_encounter_group.encounters +{% if existsIn(encounter, "land_mons") %} +const struct WildPokemon {{ encounter.base_label }}_LandMons[] = +{ +## for wild_mon in encounter.land_mons.mons + { {{ wild_mon.min_level }}, {{ wild_mon.max_level }}, {{ wild_mon.species }} }, +## endfor +}; + +const struct WildPokemonInfo {{ encounter.base_label }}_LandMonsInfo = { {{encounter.land_mons.encounter_rate}}, {{ encounter.base_label }}_LandMons }; +{% endif %} +{% if existsIn(encounter, "water_mons") %} +const struct WildPokemon {{ encounter.base_label }}_WaterMons[] = +{ +## for wild_mon in encounter.water_mons.mons + { {{ wild_mon.min_level }}, {{ wild_mon.max_level }}, {{ wild_mon.species }} }, +## endfor +}; + +const struct WildPokemonInfo {{ encounter.base_label }}_WaterMonsInfo = { {{encounter.water_mons.encounter_rate}}, {{ encounter.base_label }}_WaterMons }; +{% endif %} +{% if existsIn(encounter, "rock_smash_mons") %} +const struct WildPokemon {{ encounter.base_label }}_RockSmashMons[] = +{ +## for wild_mon in encounter.rock_smash_mons.mons + { {{ wild_mon.min_level }}, {{ wild_mon.max_level }}, {{ wild_mon.species }} }, +## endfor +}; + +const struct WildPokemonInfo {{ encounter.base_label }}_RockSmashMonsInfo = { {{encounter.rock_smash_mons.encounter_rate}}, {{ encounter.base_label }}_RockSmashMons }; +{% endif %} +{% if existsIn(encounter, "fishing_mons") %} +const struct WildPokemon {{ encounter.base_label }}_FishingMons[] = +{ +## for wild_mon in encounter.fishing_mons.mons + { {{ wild_mon.min_level }}, {{ wild_mon.max_level }}, {{ wild_mon.species }} }, +## endfor +}; + +const struct WildPokemonInfo {{ encounter.base_label }}_FishingMonsInfo = { {{encounter.fishing_mons.encounter_rate}}, {{ encounter.base_label }}_FishingMons }; +{% endif %} +## endfor + +const struct WildPokemonHeader {{ wild_encounter_group.label }}[] = +{ +## for encounter in wild_encounter_group.encounters + { + .mapGroup = {% if wild_encounter_group.for_maps %}MAP_GROUP({{ removePrefix(encounter.map, "MAP_") }}){% else %}0{% endif %}, + .mapNum = {% if wild_encounter_group.for_maps %}MAP_NUM({{ removePrefix(encounter.map, "MAP_") }}){% else %}{{ loop.index1 }}{% endif %}, + .landMonsInfo = {% if existsIn(encounter, "land_mons") %}&{{ encounter.base_label }}_LandMonsInfo{% else %}NULL{% endif %}, + .waterMonsInfo = {% if existsIn(encounter, "water_mons") %}&{{ encounter.base_label }}_WaterMonsInfo{% else %}NULL{% endif %}, + .rockSmashMonsInfo = {% if existsIn(encounter, "rock_smash_mons") %}&{{ encounter.base_label }}_RockSmashMonsInfo{% else %}NULL{% endif %}, + .fishingMonsInfo = {% if existsIn(encounter, "fishing_mons") %}&{{ encounter.base_label }}_FishingMonsInfo{% else %}NULL{% endif %}, + }, +## endfor + { + .mapGroup = MAP_GROUP(UNDEFINED), + .mapNum = MAP_NUM(UNDEFINED), + .landMonsInfo = NULL, + .waterMonsInfo = NULL, + .rockSmashMonsInfo = NULL, + .fishingMonsInfo = NULL, + }, +}; +## endfor diff --git a/src/decoration.c b/src/decoration.c index 0f6dd082b..974859c88 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -36,6 +36,7 @@ #include "constants/event_objects.h" #include "constants/songs.h" #include "constants/region_map_sections.h" +#include "constants/metatile_labels.h" #define PLACE_DECORATION_SELECTOR_TAG 0xbe5 #define PLACE_DECORATION_PLAYER_TAG 0x008 diff --git a/src/dma3_manager.c b/src/dma3_manager.c index 51fa7072d..43744883f 100644 --- a/src/dma3_manager.c +++ b/src/dma3_manager.c @@ -8,7 +8,7 @@ #define DMA_REQUEST_COPY16 3 #define DMA_REQUEST_FILL16 4 -IWRAM_DATA struct +BSS_DATA struct { const u8 *src; u8 *dest; @@ -17,7 +17,7 @@ IWRAM_DATA struct u32 value; } gDma3Requests[MAX_DMA_REQUESTS]; -static bool8 gDma3ManagerLocked; +static volatile bool8 gDma3ManagerLocked; static u8 gDma3RequestCursor; void ClearDma3Requests(void) diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c new file mode 100644 index 000000000..714b10ef6 --- /dev/null +++ b/src/dodrio_berry_picking.c @@ -0,0 +1,5086 @@ +#include "global.h" +#include "alloc.h" +#include "bg.h" +#include "dodrio_berry_picking.h" +#include "dynamic_placeholder_text_util.h" +#include "event_data.h" +#include "gpu_regs.h" +#include "international_string_util.h" +#include "item.h" +#include "link.h" +#include "link_rfu.h" +#include "m4a.h" +#include "main.h" +#include "palette.h" +#include "pokemon_jump.h" +#include "random.h" +#include "save.h" +#include "script.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text_window.h" +#include "window.h" +#include "constants/items.h" +#include "constants/songs.h" +#include "constants/species.h" + +struct DodrioSubstruct_0160 +{ + /*0x0000 : 0x3000*/ u16 ALIGNED(4) tilemapBuffers[3][BG_SCREEN_SIZE]; + /*0x3000 : 0x3160*/ bool32 finished; + /*0x3004 : 0x3164*/ u8 ALIGNED(4) unk3004; + /*0x3008 : 0x3168*/ u8 ALIGNED(4) unk3008[10]; + /*0x3014 : 0x3174*/ u8 ALIGNED(4) state; + /*0x3018 : 0x3178*/ u8 ALIGNED(4) unk3018; + /*0x301C : 0x317C*/ u16 ALIGNED(4) unk301C; + /*0x3020 : 0x3180*/ u8 ALIGNED(4) unk3020; + /*0x3024 : 0x3184*/ u8 ALIGNED(4) unk3024; + /*0x3024 : 0x3184*/ void (*unk3028)(void); +}; // size = 0x302C + +struct DodrioStruct_2022CF4 +{ + u8 filler_00[0xc]; + u8 unkC[10]; + s16 unk16[10]; + u16 unk2A[10]; + u16 unk3E; +}; // size = 0x40 + +struct DodrioSubstruct_31A0_14 +{ + u8 unk0[11]; + u8 unkB[11]; +}; + +struct DodrioSubstruct_31A0_2C +{ + u8 unk0; + u8 ALIGNED(4) unk4; + u8 ALIGNED(4) unk8; +}; + +struct DodrioSubstruct_31A0 +{ + u8 name[0x10]; + u32 unk10; + struct DodrioSubstruct_31A0_14 unk14; + struct DodrioSubstruct_31A0_2C unk2C; + u8 filler_35[4]; +}; // size = 0x3C + +struct DodrioSubstruct_318C +{ + bool8 isShiny; +}; + +struct DodrioSubstruct_3308 +{ + u8 unk0; + u32 unk4; +}; + +struct DodrioStruct +{ + /*0x0000*/ void (*savedCallback)(void); + /*0x0004*/ u8 ALIGNED(4) unk04; + /*0x0008*/ u8 ALIGNED(4) unk08; + /*0x000C*/ u8 ALIGNED(4) unk0C; + /*0x0010*/ u8 ALIGNED(4) unk10; + /*0x0014*/ u8 ALIGNED(4) unk14; + /*0x0018*/ u8 ALIGNED(4) unk18; + /*0x001C*/ u8 ALIGNED(4) unk1C; + /*0x0020*/ u8 ALIGNED(4) unk20; + /*0x0024*/ u8 ALIGNED(4) unk24; + /*0x0028*/ u8 ALIGNED(4) multiplayerId; + /*0x0029*/ u8 filler_0029[7]; + /*0x0030*/ u8 ALIGNED(4) unk30; + /*0x0034*/ u8 ALIGNED(4) unk34[5]; + /*0x003C*/ u8 ALIGNED(4) unk3C; + /*0x0040*/ u8 ALIGNED(4) unk40; + /*0x0044*/ u8 ALIGNED(4) unk44; + /*0x0048*/ u8 ALIGNED(4) unk48; + /*0x004A*/ u16 unk4A[5][6]; + /*0x0086*/ u16 unk86[5]; + /*0x0090*/ u8 ALIGNED(4) unk90[5]; + /*0x0098*/ u8 ALIGNED(4) unk98[4]; + /*0x009C*/ u8 ALIGNED(4) unk9C[11]; + /*0x00A8*/ u8 ALIGNED(4) unkA8[5]; + /*0x00B0*/ u8 ALIGNED(4) unkB0[5]; + /*0x00B8*/ u8 ALIGNED(4) unkB8[11]; + /*0x00C4*/ u8 ALIGNED(4) unkC4[11]; + /*0x00D0*/ u8 ALIGNED(4) unkD0[11]; + /*0x00DC*/ u8 ALIGNED(4) unkDC[11]; + /*0x00E8*/ u8 ALIGNED(4) unkE8[11]; + /*0x00F4*/ u8 ALIGNED(4) unkF4[11][2]; + /*0x010C*/ u8 ALIGNED(4) unk10C[5]; + /*0x0112*/ u16 unk112; + /*0x0114*/ u16 unk114; + /*0x0118*/ u32 unk118; + /*0x011C*/ u32 unk11C; + /*0x0120*/ u32 unk120; + /*0x0124*/ u8 ALIGNED(4) unk124; + /*0x0128*/ u8 ALIGNED(4) unk128; + /*0x012C*/ u32 unk12C; + /*0x0130*/ u32 unk130[5]; + /*0x0144*/ u8 ALIGNED(4) unk144; + /*0x0148*/ u8 ALIGNED(4) unk148[11]; + /*0x0154*/ u8 ALIGNED(4) unk154; + /*0x0158*/ u8 ALIGNED(4) unk158[5]; + /*0x0160*/ struct DodrioSubstruct_0160 unk160; + /*0x318C*/ struct DodrioSubstruct_318C unk318C[5]; + /*0x31A0*/ struct DodrioSubstruct_31A0 unk31A0[5]; + /*0x32CC*/ struct DodrioSubstruct_31A0 unk32CC; + /*0x3308*/ struct DodrioSubstruct_3308 unk3308[5]; +}; // size = 0x3330 + +EWRAM_DATA static struct DodrioStruct * gUnknown_02022C98 = NULL; +EWRAM_DATA static u16 *gUnknown_02022C9C[5] = {NULL}; +EWRAM_DATA static u16 *gUnknown_02022CB0[2] = {NULL}; +EWRAM_DATA static u16 *gUnknown_02022CB8[11] = {NULL}; +EWRAM_DATA static u16 *gUnknown_02022CE4[4] = {NULL}; +EWRAM_DATA static struct DodrioStruct_2022CF4 *gUnknown_02022CF4 = NULL; +EWRAM_DATA static struct DodrioSubstruct_0160 *gUnknown_02022CF8 = NULL; + +static bool32 gUnknown_03000DB0; + +static void sub_8024A1C(void); +static void sub_8024A30(struct DodrioStruct *); +static void sub_8024BC8(u8 taskId); +static void sub_8024DBC(void); +static void sub_8024E00(void); +static void sub_8024E38(void); +static void sub_8024F10(void); +static void sub_8024F38(void); +static void sub_8024FFC(void); +static void sub_80250D4(void); +static void sub_8025158(void); +static void sub_8025198(void); +static void sub_8025230(void); +static void sub_8025324(void); +static void sub_8025470(void); +static void sub_8025644(void); +static void sub_80256AC(void); +static void sub_8025758(void); +static void sub_802589C(u8 taskId); +static void sub_8025910(u8 taskId); +static void sub_8025D04(void); +static void sub_8025D50(void); +static void sub_8025E0C(void); +static void sub_8025ED8(void); +static void sub_8025F48(void); +static void sub_8026044(void); +static void sub_80261CC(void); +static void sub_80261E4(void); +static void sub_80261F8(struct DodrioSubstruct_318C *, struct Pokemon *); +static void sub_802620C(TaskFunc, u8); +static void sub_802621C(TaskFunc); +static void sub_8026240(u8); +static bool32 sub_8026264(void); +static void sub_80262C0(void); +static bool32 sub_8026634(u8, u8, u8); +static void sub_802671C(void); +static void sub_8026AF4(void); +static void sub_8026B28(void); +static void sub_8026B5C(u8, u8*, u8*); +static bool32 sub_8026BB8(void); +static void sub_8026C28(void); +static bool32 sub_8026C50(void); +static bool32 sub_8026C90(void); +static void sub_8026D1C(u8); +static u8 sub_8026D8C(u8); +static u8 sub_8026DB0(u8, u8); +static void sub_8026F1C(u8, u8, u8); +static void sub_8027234(bool32 arg0); +static void sub_80272A4(void); +static void sub_80272E8(void); +static void sub_80273F0(void); +static void sub_802749C(void); +static u8 sub_8027518(u8); +static void sub_8027554(void); +static void sub_8027608(void); +static u32 sub_8027748(void); +static void sub_8027DD0(u32 arg0); +static void sub_8027E30(struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 arg6, u32 arg7, u32 arg8); +static u32 sub_8028164(u32 unused, struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 *arg6, u32 *arg7, u32 *arg8); +static void sub_80282EC(u8); +static u32 sub_8028318(u32 arg0, u8 *arg1); +static void sub_8028350(u32 arg0); +static u32 sub_8028374(u32 arg0); +static void sub_80283A8(void); +static void sub_8028408(struct DodrioSubstruct_318C *arg0, u8 arg1, u8 id, u8 arg3); +static void sub_80284CC(u8); +static void sub_8028504(u8); +static void sub_8028614(u8 count); +static void sub_802868C(bool8 invisible, u8 count); +static void sub_8028734(void); +static void sub_80287E4(void); +static void sub_80289E8(bool8 invisible); +static void sub_80286E4(void); +static bool32 sub_8028828(void); +static void sub_8028A34(void); +static void sub_8028A88(void); +static void sub_8028B80(void); +static void sub_8028D44(void); +static void sub_8028DFC(void); +static void sub_8028E4C(void); +static void sub_8028E84(void); +static void sub_8028EC8(bool8 invisible); +static void sub_8028FCC(void); +static void sub_802903C(void); +static void sub_8029274(struct DodrioSubstruct_0160 *PTR); +static void sub_80292E0(u8); +static bool32 sub_802A770(void); +static u8 sub_802A794(void); +static void sub_8028BF8(u8 id, bool8 invisible); +static void sub_8028C30(bool8 invisible); +static void sub_8028CA4(u16 id, u8 frameNum); +static void sub_8028C7C(u8 id, u8 y); +static void sub_80286B4(u8 id, u8 frameNum); +static u8 sub_8026E70(u8 arg0, u8 arg1); +static void sub_80288D4(u8 arg0); +static u32 sub_8027DFC(u32 arg0); +static u32 IncrementWithLimit(u32 arg0, u32 arg1); +static u32 Min(u32 arg0, u32 arg1); +static u32 sub_80276C0(u8 arg0); +static void sub_8027ACC(u8 taskId); +static void sub_8029314(u8 taskId); +static void sub_8027BEC(u8 windowId, s32 width); +static void nullsub_15(struct Sprite *sprite); +static void sub_80284A8(struct Sprite *sprite); +static u32 sub_802853C(struct Sprite *sprite); +static u32 sub_80285AC(struct Sprite *sprite); +static s16 sub_8028F14(u8 arg0, u8 arg1); +static void sub_8028654(bool8 invisible, u8 id); +static void sub_8029338(void); +static bool32 sub_802A8E8(void); +static void sub_802A7A8(void); +static void sub_802A72C(void (*func)(void)); +static void (*sub_802A75C(void))(void); +static void sub_8029338(void); +static void sub_8029440(void); +static void sub_802988C(void); +static void sub_802A010(void); +static void sub_802A380(void); +static void sub_802A454(void); +static void sub_802A534(void); +static void sub_802A588(void); +static void sub_802A6FC(void); +static void nullsub_16(void); + +// const rom data +static const u8 gUnknown_082F449C[5][5][11] = +{ + { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 3, 8, 9, 0}, + {0, 1, 2, 5, 6, 3, 4, 5, 8, 9, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 7, 2, 9, 0}, + {0, 1, 4, 5, 6, 7, 2, 3, 4, 9, 0}, + {0, 1, 6, 7, 2, 3, 4, 5, 6, 9, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 0}, + {0, 3, 4, 5, 6, 7, 8, 1, 2, 3, 0}, + {0, 5, 6, 7, 8, 1, 2, 3, 4, 5, 0}, + {0, 7, 8, 1, 2, 3, 4, 5, 6, 7, 0}, + }, + { + {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, + {2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2}, + {4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4}, + {6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6}, + {8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8}, + }, +}; + +static const u8 gUknnown_082F45AF[5][5][3] = +{ + { + {4, 5, 6}, + }, + { + {3, 4, 5}, + {5, 6, 3}, + }, + { + {4, 5, 6}, + {6, 7, 2}, + {2, 3, 4}, + }, + { + {3, 4, 5}, + {5, 6, 7}, + {7, 8, 1}, + {1, 2, 3}, + }, + { + {4, 5, 6}, + {6, 7, 8}, + {8, 9, 0}, + {0, 1, 2}, + {2, 3, 4}, + }, +}; + +static const u8 gUnknown_082F45FA[5][5][3] = +{ + { + {1, 0, 1}, + }, + { + {1, 0, 1}, + {0, 1, 0}, + }, + { + {2, 0, 1}, + {0, 1, 2}, + {1, 2, 0}, + }, + { + {3, 0, 1}, + {0, 1, 2}, + {1, 2, 3}, + {2, 3, 0}, + }, + { + {4, 0, 1}, + {0, 1, 2}, + {1, 2, 3}, + {2, 3, 4}, + {3, 4, 0}, + }, +}; + +ALIGNED(4) +static const u8 gUnknown_082F4648[5][11] = +{ + {9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9}, + {9, 9, 9, 0, 0, 1, 1, 0, 9, 9, 9}, + {9, 9, 2, 2, 0, 0, 1, 1, 1, 9, 9}, + {9, 3, 3, 0, 0, 1, 1, 2, 2, 3, 9}, + {3, 3, 4, 4, 0, 0, 1, 1, 2, 2, 3}, +}; + +static const u8 gUnknown_082F467F[5][5] = +{ + {5}, + {4, 6}, + {3, 5, 7}, + {2, 4, 6, 8}, + {1, 3, 5, 6, 9}, +}; + +// Duplicate and unused gfx. Feel free to remove. +static const u32 sDuplicateGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.gbapal", + "graphics/link_games/dodrioberry_bg2.gbapal", + "graphics/link_games/dodrioberry_pkmn.gbapal", + "graphics/link_games/dodrioberry_shiny.gbapal", + "graphics/link_games/dodrioberry_status.gbapal", + "graphics/link_games/dodrioberry_berrysprites.gbapal", + "graphics/link_games/dodrioberry_berrysprites.4bpp.lz", + "graphics/link_games/dodrioberry_platform.gbapal", + "graphics/link_games/dodrioberry_bg1.4bpp.lz", + "graphics/link_games/dodrioberry_bg2.4bpp.lz", + "graphics/link_games/dodrioberry_status.4bpp.lz", + "graphics/link_games/dodrioberry_platform.4bpp.lz", + "graphics/link_games/dodrioberry_pkmn.4bpp.lz", + "graphics/link_games/dodrioberry_bg1.bin.lz", + "graphics/link_games/dodrioberry_bg2right.bin.lz", + "graphics/link_games/dodrioberry_bg2left.bin.lz"); + + +static const u8 gUnknown_082F7A88[][3] = +{ + {40, 24, 13}, + {32, 19, 10}, + {22, 13, 7}, +}; + +ALIGNED(4) +static const u8 gUnknown_082F7A94[] = {8, 5, 8, 11, 15}; + +ALIGNED(4) +static const u8 gUnknown_082F7A9C[] = {5, 10, 20, 30, 50, 70, 100}; + +ALIGNED(4) +static const u8 gUnknown_082F7AA4[][10] = +{ + {15, 16, 17, 18, 19, 19, 18, 17, 16, 15}, + {20, 21, 22, 23, 24, 25, 26, 27, 28, 29}, + {30, 31, 32, 33, 34, 34, 33, 32, 31, 30}, +}; + +static void (*const gUnknown_082F7AC4[])(void) = +{ + sub_8024DBC, + sub_8024E00, + sub_8024E38, + sub_8024F10, + sub_8024F38, + sub_8025198, + sub_8025324, + sub_8025470, + sub_8025644, + sub_80256AC, + sub_8025758, + sub_80250D4 +}; + +static void (*const gUnknown_082F7AF4[])(void) = +{ + sub_8024DBC, + sub_8024E00, + sub_8024E38, + sub_8024F10, + sub_8024FFC, + sub_8025230, + sub_8025324, + sub_8025470, + sub_8025644, + sub_80256AC, + sub_8025758, + sub_8025158 +}; + +// code +void sub_802493C(u16 a0, void (*callback)(void)) +{ + gUnknown_03000DB0 = FALSE; + + if (gReceivedRemoteLinkPlayers != 0 && (gUnknown_02022C98 = AllocZeroed(sizeof(*gUnknown_02022C98))) != NULL) + { + sub_8024A1C(); + sub_8024A30(gUnknown_02022C98); + gUnknown_02022C98->savedCallback = callback; + gUnknown_02022C98->multiplayerId = GetMultiplayerId(); + gUnknown_02022C98->unk32CC = gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId]; + sub_80261F8(&gUnknown_02022C98->unk318C[gUnknown_02022C98->multiplayerId], &gPlayerParty[a0]); + CreateTask(sub_8024BC8, 1); + SetMainCallback2(sub_80261CC); + sub_80273F0(); + sub_8026B5C(gUnknown_02022C98->unk24, &gUnknown_02022C98->unk44, &gUnknown_02022C98->unk48); + StopMapMusic(); + PlayNewMapMusic(MUS_RG_KINOMIKUI); + } + else + { + SetMainCallback2(callback); + return; + } +} + +static void sub_8024A1C(void) +{ + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); +} + +static void sub_8024A30(struct DodrioStruct * data) +{ + u8 i; + + data->unk0C = 0; + data->unk10 = 0; + data->unk14 = 0; + data->unk18 = 0; + data->unk1C = 0; + data->unk11C = 0; + data->unk120 = 0; + data->unk30 = 0; + data->unk40 = 0; + data->unk3C = 0; + data->unk12C = 0; + + for (i = 0; i < 4; i++) + { + data->unk98[i] = 0; + } + + for (i = 0; i < 5; i++) + { + data->unkA8[i] = 0; + data->unkB0[i] = 0; + data->unk4A[i][0] = 0; + data->unk4A[i][1] = 0; + data->unk4A[i][2] = 0; + data->unk4A[i][3] = 0; + data->unk4A[i][5] = 0; + data->unk10C[i] = 0; + data->unk130[i] = 0; + } + + for (i = 0; i < 11; i++) + { + data->unkD0[i] = 0; + data->unkDC[i] = 0; + data->unkC4[i] = 0; + data->unkF4[i][0] = 0xFF; + data->unkF4[i][1] = 0xFF; + } + + data->unk20 = GetMultiplayerId() == 0 ? 1 : 0; + data->unk24 = GetLinkPlayerCount(); + data->unk34[0] = GetMultiplayerId(); + for (i = 1; i < data->unk24; i++) + { + data->unk34[i] = data->unk34[i - 1] + 1; + if (data->unk34[i] > data->unk24 - 1) + data->unk34[i] %= data->unk24; + } +} + +static void sub_8024BC8(u8 taskId) +{ + u8 r4, r5; + + switch (gUnknown_02022C98->unk0C) + { + case 0: + SetVBlankCallback(NULL); + sub_802620C(sub_8025910, 4); + gUnknown_02022C98->unk0C++; + break; + case 1: + if (!FuncIsActiveTask(sub_8025910)) + { + sub_8029274(&gUnknown_02022C98->unk160); + gUnknown_02022C98->unk0C++; + } + break; + case 2: + if (!sub_802A770()) + { + sub_8010434(); + gUnknown_02022C98->unk0C++; + } + break; + case 3: + if (IsLinkTaskFinished()) + { + if (gReceivedRemoteLinkPlayers != 0) + { + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(0, 0); + } + gUnknown_02022C98->unk0C++; + } + break; + case 4: + r5 = gUnknown_02022C98->unk24; + sub_80283A8(); + for (r4 = 0; r4 < r5; r4++) + { + sub_8028408(&gUnknown_02022C98->unk318C[gUnknown_02022C98->unk34[r4]], r4, gUnknown_02022C98->unk34[r4], gUnknown_02022C98->unk24); + } + sub_802868C(FALSE, gUnknown_02022C98->unk24); + gUnknown_02022C98->unk0C++; + break; + case 5: + sub_8028A34(); + sub_8028A88(); + sub_8028D44(); + sub_8028734(); + gUnknown_02022C98->unk0C++; + break; + case 6: + BlendPalettes(0xFFFFFFFF, 0x10, 0x00); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + SetVBlankCallback(sub_80261E4); + gUnknown_02022C98->unk0C++; + break; + case 7: + UpdatePaletteFade(); + if (!gPaletteFade.active) + { + gUnknown_02022C98->unk0C++; + } + break; + default: + DestroyTask(taskId); + sub_802621C(sub_802589C); + break; + } +} + +static void sub_8024D4C(u8 taskId) +{ + sub_8025D04(); + gUnknown_082F7AC4[gUnknown_02022C98->unk18](); + if (!gUnknown_03000DB0) + { + sub_8026AF4(); + } + sub_8025D50(); +} + +static void sub_8024D84(u8 taskId) +{ + sub_8025E0C(); + gUnknown_082F7AF4[gUnknown_02022C98->unk18](); + if (!gUnknown_03000DB0) + { + sub_8026B28(); + } + sub_8025ED8(); +} + +static void sub_8024DBC(void) +{ + switch (gUnknown_02022C98->unk10) + { + case 0: + sub_8028504(1); + sub_80292E0(1); + gUnknown_02022C98->unk10++; + break; + case 1: + if (!sub_802A770()) + sub_8026240(1); + break; + } +} + +static void sub_8024E00(void) +{ + if (gUnknown_02022C98->unk10 == 0) + { + sub_80262C0(); + gUnknown_02022C98->unk10++; + } + else + { + gUnknown_02022C98->unk118 = 1; + sub_8026240(2); + } +} + +static void sub_8024E38(void) +{ + switch (gUnknown_02022C98->unk10) + { + case 0: + sub_802EB24(7, 8, 120, 80, 0); + gUnknown_02022C98->unk10++; + break; + case 1: + sub_8010434(); + gUnknown_02022C98->unk10++; + break; + case 2: + if (IsLinkTaskFinished()) + { + gUnknown_02022C98->unk10++; + gUnknown_02022C98->unk30 = 0; + } + break; + case 3: + if (!sub_802EB84()) + { + gUnknown_02022C98->unk10++; + } + break; + case 4: + if (++gUnknown_02022C98->unk30 > 5) + { + sub_8010434(); + gUnknown_02022C98->unk10++; + } + break; + case 5: + if (IsLinkTaskFinished()) + { + sub_8026240(3); + } + break; + } +} + +static void sub_8024F10(void) +{ + if (gUnknown_02022C98->unk10 == 0) + { + if (gUnknown_02022C98->unk11C != 0) + { + sub_8026240(4); + } + } +} + +static void sub_8024F38(void) +{ + if (gUnknown_02022C98->unk10 == 0) + { + if (gUnknown_02022C98->unk40 < 10) + { + if (gUnknown_02022C98->unkA8[0] == 0) + { + if (JOY_NEW(DPAD_UP)) + { + if (gUnknown_02022C98->unk31A0[0].unk2C.unk0 == 0) + { + gUnknown_02022C98->unk31A0[0].unk2C.unk4 = 0; + gUnknown_02022C98->unk31A0[0].unk2C.unk0 = sub_8027518(2); + } + } + else if (JOY_NEW(DPAD_RIGHT)) + { + if (gUnknown_02022C98->unk31A0[0].unk2C.unk0 == 0) + { + gUnknown_02022C98->unk31A0[0].unk2C.unk4 = 0; + gUnknown_02022C98->unk31A0[0].unk2C.unk0 = sub_8027518(1); + } + } + else if (JOY_NEW(DPAD_LEFT)) + { + if (gUnknown_02022C98->unk31A0[0].unk2C.unk0 == 0) + { + gUnknown_02022C98->unk31A0[0].unk2C.unk4 = 0; + gUnknown_02022C98->unk31A0[0].unk2C.unk0 = sub_8027518(3); + } + } + else + { + gUnknown_02022C98->unk31A0[0].unk2C.unk0 = sub_8027518(0); + } + } + } + else + { + sub_8026240(11); + } + sub_802671C(); + sub_8025F48(); + } +} + +static void sub_8024FFC(void) +{ + if (gUnknown_02022C98->unk40 < 10) + { + if (JOY_NEW(DPAD_UP)) + { + if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 == 0) + { + gUnknown_02022C98->unk32CC.unk2C.unk0 = 2; + } + } + else if (JOY_NEW(DPAD_RIGHT)) + { + if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 == 0) + { + gUnknown_02022C98->unk32CC.unk2C.unk0 = 1; + } + } + else if (JOY_NEW(DPAD_LEFT)) + { + if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 == 0) + { + gUnknown_02022C98->unk32CC.unk2C.unk0 = 3; + } + } + else + { + gUnknown_02022C98->unk32CC.unk2C.unk0 = 0; + } + } + else + { + sub_8026240(11); + } + sub_8026044(); +} + +static void sub_80250D4(void) +{ + u8 i; + + sub_802671C(); + sub_8025F48(); + if (sub_8026C50() == 1) + { + sub_80272A4(); + sub_8026240(5); + } + else + { + gUnknown_02022C98->unk12C = 1; + for (i = 1; i < gUnknown_02022C98->unk24; i++) + { + if (gUnknown_02022C98->unk130[i] != 1) + { + gUnknown_02022C98->unk12C = 0; + break; + } + } + } +} + +static void sub_8025158(void) +{ + sub_8026044(); + if (sub_8026C90() == 1) + sub_8026240(5); +} + +static bool32 sub_8025170(void) +{ + u8 r4 = GetBlockReceivedStatus(); + u8 r0 = sub_800A9D8(); + if (r4 == r0) + { + ResetBlockReceivedFlags(); + return TRUE; + } + else + { + return FALSE; + } +} + +static void sub_8025198(void) +{ + switch (gUnknown_02022C98->unk10) + { + case 0: + if (SendBlock(0, gUnknown_02022C98->unk4A, sizeof(gUnknown_02022C98->unk4A))) + { + gUnknown_02022C98->unk08 = 0; + gUnknown_02022C98->unk10++; + } + break; + case 1: + if (IsLinkTaskFinished()) + { + gUnknown_02022C98->unk10++; + } + break; + case 2: + if (sub_8025170()) + { + gUnknown_02022C98->unk08 = gUnknown_02022C98->unk24; + } + if (gUnknown_02022C98->unk08 >= gUnknown_02022C98->unk24) + { + gUnknown_02022C98->unk14++; + gUnknown_02022C98->unk10++; + } + break; + default: + if (WaitFanfare(TRUE)) + { + sub_8026240(6); + FadeOutAndPlayNewMapMusic(MUS_RG_WIN_YASEI, 4); + } + break; + } +} + +static void sub_8025230(void) +{ + u8 i; + + switch (gUnknown_02022C98->unk10) { + case 0: + if (SendBlock(0, gUnknown_02022C98->unk4A[gUnknown_02022C98->unk14], + sizeof(gUnknown_02022C98->unk4A))) { + gUnknown_02022C98->unk08 = 0; + gUnknown_02022C98->unk10++; + } + break; + case 1: + if (IsLinkTaskFinished()) { + gUnknown_02022C98->unk10++; + } + break; + case 2: + if (sub_8025170()) { + for (i = 0; i < gUnknown_02022C98->unk24; i++) { + memcpy(gUnknown_02022C98->unk4A, gBlockRecvBuffer, sizeof(gUnknown_02022C98->unk4A)); + gUnknown_02022C98->unk08 = gUnknown_02022C98->unk24; + } + } + if (gUnknown_02022C98->unk08 >= gUnknown_02022C98->unk24) { + gUnknown_02022C98->unk14++; + gUnknown_02022C98->unk10++; + } + break; + default: + if (WaitFanfare(TRUE)) { + gUnknown_02022C98->unk114 = gUnknown_02022C98->unk4A[gUnknown_02022C98->multiplayerId][5]; + sub_8026240(6); + FadeOutAndPlayNewMapMusic(MUS_RG_WIN_YASEI, 4); + } + break; + } +} + +static void sub_8025324(void) +{ + u8 sp00 = 1; + u8 i; + + switch (gUnknown_02022C98->unk10) + { + case 0: + sub_802749C(); + sub_80289E8(TRUE); + sub_8028DFC(); + sub_8028EC8(TRUE); + sub_80292E0(2); + gUnknown_02022C98->unk10++; + break; + case 1: + if (!sub_802A770()) + { + sub_80292E0(5); + gUnknown_02022C98->unk10++; + } + break; + case 2: + sp00 = sub_802A794(); + if (SendBlock(0, &sp00, sizeof(sp00))) + { + gUnknown_02022C98->unk10++; + } + break; + case 3: + if (IsLinkTaskFinished()) + { + gUnknown_02022C98->unk10++; + gUnknown_02022C98->unk08 = 0; + } + break; + case 4: + if (sub_8025170()) + { + for (i = 0; i < gUnknown_02022C98->unk24; i++) + { + *(gUnknown_02022C98->unk10C + i) = *(u8 *)gBlockRecvBuffer[i]; + gUnknown_02022C98->unk08 = gUnknown_02022C98->unk24; + } + } + if (gUnknown_02022C98->unk08 >= gUnknown_02022C98->unk24) { + if (++gUnknown_02022C98->unk14 >= 120) + { + sub_80292E0(6); + gUnknown_02022C98->unk10++; + } + } + break; + default: + if (!sub_802A770()) + { + sub_8026240(7); + } + break; + } +} + +static void sub_8025470(void) +{ + u8 sp0; + u8 i; + + switch (gUnknown_02022C98->unk10) + { + case 0: + if (sub_8027748() >= 3000) + { + sub_80292E0(4); + } + gUnknown_02022C98->unk10++; + break; + case 1: + if (!sub_802A770()) + { + sub_80292E0(3); + gUnknown_02022C98->unk10++; + } + break; + case 2: + sub_8028FCC(); + sub_80272E8(); + gUnknown_02022C98->unk10++; + break; + case 3: + if ((sp0 = sub_802A794()) != 0) + { + gUnknown_02022C98->unk10++; + } + break; + case 4: + if (!sub_802A770()) + { + sub_80292E0(5); + gUnknown_02022C98->unk10++; + } + break; + case 5: + sp0 = sub_802A794(); + if (SendBlock(0, &sp0, sizeof(sp0))) + { + gUnknown_02022C98->unk08 = 0; + gUnknown_02022C98->unk10++; + } + break; + case 6: + if (IsLinkTaskFinished()) + { + gUnknown_02022C98->unk10++; + } + break; + case 7: + if (sub_8025170()) + { + for (i = 0; i < gUnknown_02022C98->unk24; i++) + { + *(gUnknown_02022C98->unk10C + i) = *(u8 *)gBlockRecvBuffer[i]; + gUnknown_02022C98->unk08 = gUnknown_02022C98->unk24; + } + } + if (gUnknown_02022C98->unk08 >= gUnknown_02022C98->unk24) { + if (++gUnknown_02022C98->unk14 >= 120) + { + sub_8027608(); + sub_80292E0(6); + gUnknown_02022C98->unk10++; + } + } + else + { + sub_8027554(); + } + break; + default: + if (!sub_802A770()) + { + for (i = 0; i < gUnknown_02022C98->unk24; i++) + { + if (gUnknown_02022C98->unk10C[i] == 2) + { + sub_8026240(8); + return; + } + } + sub_8026240(10); + } + break; + } +} + +static void sub_8025644(void) +{ + switch (gUnknown_02022C98->unk10) + { + case 0: + sub_800AC34(); + sub_80292E0(7); + gUnknown_02022C98->unk10++; + break; + case 1: + if (!sub_802A770()) + { + gUnknown_02022C98->unk10++; + } + break; + case 2: + if (sub_802A794() == 5) + { + gUnknown_02022C98->unk10++; + } + break; + default: + if (gReceivedRemoteLinkPlayers == 0) + { + sub_8026240(9); + } + break; + } +} + +static void sub_80256AC(void) +{ + switch (gUnknown_02022C98->unk10) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gUnknown_02022C98->unk10++; + break; + case 1: + UpdatePaletteFade(); + if (!gPaletteFade.active) + { + gUnknown_02022C98->unk10++; + } + break; + case 2: + sub_8028B80(); + sub_80287E4(); + sub_8028614(gUnknown_02022C98->unk24); + sub_8028E84(); + gUnknown_03000DB0 = TRUE; + sub_80292E0(8); + gUnknown_02022C98->unk10++; + break; + default: + if (!sub_802A770()) + { + SetMainCallback2(gUnknown_02022C98->savedCallback); + DestroyTask(gUnknown_02022C98->unk04); + Free(gUnknown_02022C98); + FreeAllWindowBuffers(); + } + break; + } +} + +static void sub_8025758(void) +{ + switch (gUnknown_02022C98->unk10) + { + case 0: + sub_80292E0(9); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gUnknown_02022C98->unk10++; + break; + case 1: + UpdatePaletteFade(); + if (!gPaletteFade.active) + { + gUnknown_02022C98->unk10++; + } + break; + case 2: + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + gUnknown_02022C98->unk10++; + break; + case 3: + StopMapMusic(); + gUnknown_02022C98->unk10++; + break; + case 4: + PlayNewMapMusic(MUS_RG_KINOMIKUI); + sub_8028E4C(); + gUnknown_02022C98->unk10++; + break; + case 5: + BlendPalettes(0xFFFFFFFF, 16, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + gUnknown_02022C98->unk10++; + break; + case 6: + UpdatePaletteFade(); + if (!gPaletteFade.active) + { + gUnknown_02022C98->unk10++; + } + break; + default: + DestroyTask(gUnknown_02022C98->unk04); + sub_802621C(sub_802589C); + sub_802903C(); + sub_8024A30(gUnknown_02022C98); + if (gReceivedRemoteLinkPlayers == 0) + { + gUnknown_02022C98->unk24 = 1; + } + sub_80273F0(); + sub_8028EC8(FALSE); + break; + } +} + +static void sub_802589C(u8 taskId) +{ + switch (gUnknown_02022C98->unk10) + { + case 0: + if (sub_8026264() == 1) + { + gUnknown_02022C98->unk10++; + } + break; + case 1: + sub_80286E4(); + gUnknown_02022C98->unk10++; + break; + case 2: + if (sub_8028828() == TRUE) + { + gUnknown_02022C98->unk10++; + } + break; + default: + if (gUnknown_02022C98->unk20 != 0) + { + sub_802621C(sub_8024D4C); + } + else + { + sub_802621C(sub_8024D84); + } + DestroyTask(taskId); + break; + } +} + +static void sub_8025910(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u8 i; + + switch (data[0]) + { + case 0: + if (SendBlock(0, &gUnknown_02022C98->unk318C[gUnknown_02022C98->multiplayerId].isShiny, sizeof(gUnknown_02022C98->unk318C[gUnknown_02022C98->multiplayerId].isShiny))) + { + gUnknown_02022C98->unk08 = 0; + data[0]++; + } + break; + case 1: + if (IsLinkTaskFinished()) + { + data[0]++; + } + break; + case 2: + if (sub_8025170()) + { + for (i = 0; i < gUnknown_02022C98->unk24; i++) + { + *(u8 *)&gUnknown_02022C98->unk318C[i] = *(u8 *)gBlockRecvBuffer[i]; + gUnknown_02022C98->unk08 = gUnknown_02022C98->unk24; + } + } + if (gUnknown_02022C98->unk08 >= gUnknown_02022C98->unk24) + { + DestroyTask(taskId); + sub_80292E0(6); + gUnknown_02022C98->unk10++; + } + break; + } +} + +static void sub_80259FC(void) +{ + u8 i; + u8 r7 = gUnknown_02022C98->unk24; + + gUnknown_02022C98->unk31A0[0].unk10 = sub_8028164(0, &gUnknown_02022C98->unk31A0[0], &gUnknown_02022C98->unk31A0[0].unk2C, &gUnknown_02022C98->unk31A0[1].unk2C, &gUnknown_02022C98->unk31A0[2].unk2C, &gUnknown_02022C98->unk31A0[3].unk2C, &gUnknown_02022C98->unk31A0[4].unk2C, &gUnknown_02022C98->unk40, &gUnknown_02022C98->unk120, &gUnknown_02022C98->unk12C); + gUnknown_02022C98->unk128 = 1; + + for (i = 1; i < r7; i++) + { + if ( gUnknown_02022C98->unkA8[i] == 0 + && sub_8028318(i, &gUnknown_02022C98->unk31A0[i].unk2C.unk0) == 0) + { + gUnknown_02022C98->unk31A0[i].unk2C.unk0 = 0; + gUnknown_02022C98->unk128 = 0; + } + } + if (++gUnknown_02022C98->unk124 >= 60) + { + if (gUnknown_02022C98->unk128 != 0) + { + sub_8011AC8(); + gUnknown_02022C98->unk124 = 0; + } + else if (gUnknown_02022C98->unk124 > 70) + { + sub_8011AC8(); + gUnknown_02022C98->unk124 = 0; + } + } + + for (i = 0; i < r7; i++) + { + if ( gUnknown_02022C98->unk31A0[i].unk2C.unk0 != 0 + && gUnknown_02022C98->unkA8[i] == 0) + { + gUnknown_02022C98->unkA8[i] = 1; + } + switch (gUnknown_02022C98->unkA8[i]) + { + case 0: + default: + break; + case 1 ... 3: + if (++gUnknown_02022C98->unkB0[i] >= 6) + { + gUnknown_02022C98->unkB0[i] = 0; + gUnknown_02022C98->unkA8[i] = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk0 = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk4 = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk8 = 0; + } + break; + case 4: + if (++gUnknown_02022C98->unkB0[i] >= 40) + { + gUnknown_02022C98->unkB0[i] = 0; + gUnknown_02022C98->unkA8[i] = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk0 = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk4 = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk8 = 0; + } + break; + } + } +} + +static void sub_8025C0C(void) +{ + u8 i; + u8 r6 = gUnknown_02022C98->unk24; + + gUnknown_02022C98->unk31A0[0].unk10 = sub_8028164(0, &gUnknown_02022C98->unk31A0[0], &gUnknown_02022C98->unk31A0[0].unk2C, &gUnknown_02022C98->unk31A0[1].unk2C, &gUnknown_02022C98->unk31A0[2].unk2C, &gUnknown_02022C98->unk31A0[3].unk2C, &gUnknown_02022C98->unk31A0[4].unk2C, &gUnknown_02022C98->unk40, &gUnknown_02022C98->unk120, &gUnknown_02022C98->unk12C); + gUnknown_02022C98->unk128 = 1; + + for (i = 1; i < r6; i++) + { + if (sub_8028374(i) != 0) + { + gUnknown_02022C98->unk130[i] = 1; + gUnknown_02022C98->unk128 = 0; + } + } + if (++gUnknown_02022C98->unk124 >= 60) + { + if (gUnknown_02022C98->unk128 != 0) + { + sub_8011AC8(); + gUnknown_02022C98->unk124 = 0; + } + else if (gUnknown_02022C98->unk124 > 70) + { + sub_8011AC8(); + gUnknown_02022C98->unk124 = 0; + } + } +} + +static void sub_8025D04(void) +{ + switch (gUnknown_02022C98->unk18) + { + case 3: + if (sub_8026BB8() == TRUE) + { + sub_8026C28(); + gUnknown_02022C98->unk11C = 1; + } + break; + case 4: + sub_80259FC(); + break; + case 11: + sub_8025C0C(); + break; + } +} + +static void sub_8025D50(void) +{ + switch (gUnknown_02022C98->unk18) + { + case 4: + sub_8027E30(&gUnknown_02022C98->unk32CC, &gUnknown_02022C98->unk31A0[0].unk2C, &gUnknown_02022C98->unk31A0[1].unk2C, &gUnknown_02022C98->unk31A0[2].unk2C, &gUnknown_02022C98->unk31A0[3].unk2C, &gUnknown_02022C98->unk31A0[4].unk2C, gUnknown_02022C98->unk40, gUnknown_02022C98->unk120, gUnknown_02022C98->unk12C); + break; + case 11: + sub_8027E30(&gUnknown_02022C98->unk32CC, &gUnknown_02022C98->unk31A0[0].unk2C, &gUnknown_02022C98->unk31A0[1].unk2C, &gUnknown_02022C98->unk31A0[2].unk2C, &gUnknown_02022C98->unk31A0[3].unk2C, &gUnknown_02022C98->unk31A0[4].unk2C, gUnknown_02022C98->unk40, gUnknown_02022C98->unk120, gUnknown_02022C98->unk12C); + break; + } +} + +static void sub_8025E0C(void) +{ + switch (gUnknown_02022C98->unk18) + { + case 4: + sub_8028164(gUnknown_02022C98->multiplayerId, &gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId], &gUnknown_02022C98->unk31A0[0].unk2C, &gUnknown_02022C98->unk31A0[1].unk2C, &gUnknown_02022C98->unk31A0[2].unk2C, &gUnknown_02022C98->unk31A0[3].unk2C, &gUnknown_02022C98->unk31A0[4].unk2C, &gUnknown_02022C98->unk40, &gUnknown_02022C98->unk120, &gUnknown_02022C98->unk12C); + break; + case 11: + sub_8028164(gUnknown_02022C98->multiplayerId, &gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId], &gUnknown_02022C98->unk31A0[0].unk2C, &gUnknown_02022C98->unk31A0[1].unk2C, &gUnknown_02022C98->unk31A0[2].unk2C, &gUnknown_02022C98->unk31A0[3].unk2C, &gUnknown_02022C98->unk31A0[4].unk2C, &gUnknown_02022C98->unk40, &gUnknown_02022C98->unk120, &gUnknown_02022C98->unk12C); + break; + } +} + +static void sub_8025ED8(void) +{ + switch (gUnknown_02022C98->unk18) + { + case 3: + sub_8027DD0(1); + gUnknown_02022C98->unk11C = 1; + break; + case 4: + if (gUnknown_02022C98->unk32CC.unk2C.unk0 != 0) + { + sub_80282EC(gUnknown_02022C98->unk32CC.unk2C.unk0); + } + break; + case 11: + if (gUnknown_02022C98->unk120 == 0 && gUnknown_02022C98->unk12C == 0) + { + sub_8028350(1); + } + break; + } +} + +static void sub_8025F48(void) +{ + if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 == 0) + { + if (!IsSEPlaying()) + { + gUnknown_02022C98->unk144 = 0; + } + } + else if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk4 == 1) + { + if (gUnknown_02022C98->unk144 == 0) + { + m4aSongNumStop(SE_SEIKAI); + PlaySE(SE_SEIKAI); + gUnknown_02022C98->unk144 = 1; + } + } + else if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk8 == 1) + { + if (gUnknown_02022C98->unk144 == 0 && !IsSEPlaying()) + { + PlaySE(SE_BOO); + sub_80284CC(1); + gUnknown_02022C98->unk144 = 1; + } + } + + if (gUnknown_02022C98->unk154 == 0 && gUnknown_02022C98->unk40 >= 10) + { + StopMapMusic(); + gUnknown_02022C98->unk154 = 1; + } + else if (gUnknown_02022C98->unk154 == 1) + { + PlayFanfareByFanfareNum(11); // MUS_ME_ZANNEN + gUnknown_02022C98->unk154 = 2; + } +} + +static void sub_8026044(void) +{ + u8 r8 = gUnknown_02022C98->unk44; + u8 r7 = gUnknown_02022C98->unk48; + u8 r4; + if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 == 0) + { + if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk4 != 1 && gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk8 != 1) + { + gUnknown_02022C98->unk144 = 0; + } + } + else if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk4 == 1) + { + if (gUnknown_02022C98->unk144 == 0) + { + m4aSongNumStop(SE_SEIKAI); + PlaySE(SE_SEIKAI); + gUnknown_02022C98->unk144 = 1; + } + } + else if (gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk8 == 1) + { + if (gUnknown_02022C98->unk144 == 0 && !IsSEPlaying()) + { + PlaySE(SE_BOO); + sub_80284CC(1); + gUnknown_02022C98->unk144 = 1; + } + } + for (r4 = r8; r4 < r7; r4++) + { + struct DodrioSubstruct_31A0_14 * ptr = &gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk14; + if (ptr->unkB[r4] >= 10) + { + if (gUnknown_02022C98->unk148[r4] == 0) + { + PlaySE(SE_FUUSEN1 + ptr->unk0[r4]); + gUnknown_02022C98->unk148[r4] = 1; + } + } + else + { + gUnknown_02022C98->unk148[r4] = 0; + } + } + if (gUnknown_02022C98->unk154 == 0 && gUnknown_02022C98->unk40 >= 10) + { + StopMapMusic(); + gUnknown_02022C98->unk154 = 1; + } + else if (gUnknown_02022C98->unk154 == 1) + { + PlayFanfareByFanfareNum(11); // MUS_ME_ZANNEN + gUnknown_02022C98->unk154 = 2; + } +} + +static void sub_80261CC(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void sub_80261E4(void) +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); +} + +static void sub_80261F8(struct DodrioSubstruct_318C * a0, struct Pokemon * a1) +{ + a0->isShiny = IsMonShiny(a1); +} + +static void sub_802620C(TaskFunc func, u8 priority) +{ + CreateTask(func, priority); +} + +static void sub_802621C(TaskFunc func) +{ + gUnknown_02022C98->unk04 = CreateTask(func, 1); + gUnknown_02022C98->unk10 = 0; + gUnknown_02022C98->unk0C = 0; + gUnknown_02022C98->unk14 = 0; +} + +static void sub_8026240(u8 a0) +{ + gUnknown_02022C98->unk1C = gUnknown_02022C98->unk18; + gUnknown_02022C98->unk18 = a0; + gUnknown_02022C98->unk10 = 0; + gUnknown_02022C98->unk14 = 0; +} + +static bool32 sub_8026264(void) +{ + u8 r2 = gUnknown_02022C98->unk14 / 4; + gUnknown_02022C98->unk14++; + if (r2 != 0 && gUnknown_02022C98->unk14 % 4 == 0) + { + if (r2 < gUnknown_082F7A94[gUnknown_02022C98->unk24 - 1]) + { + SetGpuReg(REG_OFFSET_BG1HOFS, (r2 * 8)); + SetGpuReg(REG_OFFSET_BG2HOFS, -(r2 * 8)); + return FALSE; + } + else + { + return TRUE; + } + } + else + { + return FALSE; + } +} + +static void sub_80262C0(void) +{ + u8 i; + u8 start = gUnknown_02022C98->unk44; + u8 finish = gUnknown_02022C98->unk48; + + for (i = start; i < finish; i++) + { + struct DodrioSubstruct_31A0_14 * ptr = &gUnknown_02022C98->unk32CC.unk14; + ptr->unkB[i] = (i % 2 == 0) ? 1 : 0; + ptr->unk0[i] = 0; + } +} + +static void sub_8026324(void) +{ + u8 sp0 = gUnknown_02022C98->unk44; + u8 sp4 = gUnknown_02022C98->unk48; + u8 sp8 = gUnknown_02022C98->unk24; + u8 i, j, k, r5; + + if (gUnknown_02022C98->unk40 >= 10) + return; + + for (i = 0; i < sp8; i++) + { + u8 *ptr = &gUnknown_02022C98->unk31A0[i].unk2C.unk0; + if (*ptr != 0 && gUnknown_02022C98->unkA8[i] == 1) + { + for (j = sp0; j < sp4; j++) + { + r5 = gUnknown_082F449C[0][0][j]; + if (gUnknown_02022C98->unkF4[r5][0] == i || gUnknown_02022C98->unkF4[r5][1] == i) + break; + if (sub_8026634(i, *ptr, r5) == TRUE) + { + for (k = 0; k < 2; k++) + { + if (gUnknown_02022C98->unkF4[r5][k] == 0xFF) + { + gUnknown_02022C98->unkF4[r5][k] = i; + gUnknown_02022C98->unkA8[i] = 2; + gUnknown_02022C98->unkC4[r5] = 1; + break; + } + } + break; + } + if (gUnknown_02022C98->unk31A0[i].unk2C.unk8 == 1) + break; + } + } + } + + for (j = sp0; j < sp4; j++) + { + u8 id = 0xFF; + r5 = gUnknown_082F449C[0][0][j]; + if (gUnknown_02022C98->unkC4[r5] == 1) + { + s32 r2; + u8 r4, r3 = gUnknown_02022C98->unk90[sub_8026D8C(r5)] / 7; + if (r3 >= ARRAY_COUNT(gUnknown_082F7A88) - 1) + r3 = ARRAY_COUNT(gUnknown_082F7A88) - 1; + + r2 = gUnknown_082F7A88[r3][gUnknown_02022C98->unk31A0[0].unk14.unk0[r5]] - gUnknown_02022C98->unkD0[r5]; + if (r2 < 6) + gUnknown_02022C98->unk9C[r5] += r2; + + if (++gUnknown_02022C98->unk9C[r5] >= 6) + { + gUnknown_02022C98->unk9C[r5] = 0; + if (gUnknown_02022C98->unkF4[r5][0] == 0xFF && gUnknown_02022C98->unkF4[r5][1] == 0xFF) + { + continue; + } + else if (gUnknown_02022C98->unkF4[r5][0] != 0xFF && gUnknown_02022C98->unkF4[r5][1] == 0xFF) + { + r4 = gUnknown_02022C98->unkF4[r5][0]; + } + else + { + u8 unk0 = gUnknown_02022C98->unkF4[r5][0]; + i = gUnknown_02022C98->unkF4[r5][1]; // Have to re-use the variable to match. + if (!(Random() & 1)) + { + r4 = unk0; + id = i; + } + else + { + r4 = i; + id = unk0; + } + } + gUnknown_02022C98->unk32CC.unk14.unkB[r5] = 7; + gUnknown_02022C98->unkC4[r5] = 2; + gUnknown_02022C98->unkA8[r4] = 3; + gUnknown_02022C98->unkB8[r5] = r4; + gUnknown_02022C98->unk31A0[r4].unk2C.unk4 = 1; + gUnknown_02022C98->unk31A0[id].unk2C.unk8 = 1; + gUnknown_02022C98->unk86[r4]++; + sub_8026F1C(0, r5, r4); + sub_8027234(TRUE); + sub_8026D1C(r4); + gUnknown_02022C98->unkE8[r5] = gUnknown_02022C98->unk32CC.unk14.unk0[r5]; + gUnknown_02022C98->unk32CC.unk14.unk0[r5] = 3; + gUnknown_02022C98->unkF4[r5][0] = 0xFF; + gUnknown_02022C98->unkF4[r5][1] = 0xFF; + } + } + } +} + +static bool32 sub_8026634(u8 a0, u8 a1, u8 a2) +{ + s32 r7 = 0; + u8 r5 = gUnknown_02022C98->unk24 - 1; + struct DodrioSubstruct_31A0_14 * ptr = &gUnknown_02022C98->unk32CC.unk14; + + switch (a1) + { + case 3: + default: + r7 = 0; + break; + case 2: + r7 = 1; + break; + case 1: + r7 = 2; + break; + } + if (ptr->unkB[a2] == 6 || ptr->unkB[a2] == 7) + { + if (a2 == gUknnown_082F45AF[r5][a0][r7]) + { + if (gUnknown_02022C98->unkC4[a2] == 1 || gUnknown_02022C98->unkC4[a2] == 2) + { + gUnknown_02022C98->unk31A0[a0].unk2C.unk8 = 1; + return FALSE; + } + else + { + return TRUE; + } + } + } + else + { + if (a2 == gUknnown_082F45AF[r5][a0][r7]) + { + gUnknown_02022C98->unkA8[a0] = 4; + gUnknown_02022C98->unk31A0[a0].unk2C.unk8 = 1; + } + } + return FALSE; +} + +static void sub_802671C(void) +{ + u8 r1 = gUnknown_02022C98->unk44; + u8 r9 = gUnknown_02022C98->unk48; + u8 r3 = 0; + u8 r10 = 0; + u8 i; + u8 r2; + struct DodrioStruct *ptr; + + gUnknown_02022C98->unk120 = 0; + + for (i = r1; i < r9 - 1; i++) + { + ptr = gUnknown_02022C98; + + if (gUnknown_02022C98->unkC4[i] == 0 || gUnknown_02022C98->unkC4[i] == 1) + { + gUnknown_02022C98->unk120 = 1; + if (ptr->unk32CC.unk14.unkB[i] >= 10) + { + ptr->unk32CC.unk14.unkB[i] = 10; + gUnknown_02022C98->unkC4[i] = 3; + if (gUnknown_02022C98->unk148[i] == 0) + { + gUnknown_02022C98->unk148[i] = 1; + PlaySE(SE_FUUSEN1 + ptr->unk32CC.unk14.unk0[i]); + } + if (gUnknown_02022C98->unk40 < 10 || r10 == 1) + { + r10 = 1; + gUnknown_02022C98->unk148[i] = 0; + if (gUnknown_02022C98->unk40 < 10) + { + gUnknown_02022C98->unk40++; + } + sub_8026F1C(3, i, 0); + sub_8027234(FALSE); + } + } + else + { + r3 = gUnknown_02022C98->unk90[sub_8026D8C(i)] / 7; + if (r3 >= 2) + { + r3 = 2; + } + r2 = gUnknown_082F7A88[r3][ptr->unk32CC.unk14.unk0[i]]; + if (++gUnknown_02022C98->unkD0[i] >= r2) + { + ptr->unk32CC.unk14.unkB[i]++; + gUnknown_02022C98->unkD0[i] = 0; + } + sub_8026324(); + } + } + else if (gUnknown_02022C98->unkC4[i] == 2) + { + gUnknown_02022C98->unk120 = 1; + if (++gUnknown_02022C98->unkDC[i] >= 20) + { + gUnknown_02022C98->unk31A0[gUnknown_02022C98->unkB8[i]].unk2C.unk4 = 0; + gUnknown_02022C98->unkDC[i] = 0; + gUnknown_02022C98->unkD0[i] = 0; + gUnknown_02022C98->unkC4[i] = 0; + ptr->unk32CC.unk14.unkB[i] = 1; + ptr->unk32CC.unk14.unk0[i] = sub_8026DB0(sub_8026D8C(i), i); + } + } + else if (gUnknown_02022C98->unkC4[i] == 3) + { + if (++gUnknown_02022C98->unkDC[i] >= 20) + { + if (gUnknown_02022C98->unk40 < 10) + { + gUnknown_02022C98->unkDC[i] = 0; + gUnknown_02022C98->unkD0[i] = 0; + gUnknown_02022C98->unkC4[i] = 0; + ptr->unk32CC.unk14.unkB[i] = 1; + gUnknown_02022C98->unkE8[i] = ptr->unk32CC.unk14.unk0[i]; + ptr->unk32CC.unk14.unk0[i] = sub_8026DB0(sub_8026D8C(i), i); + } + } + } + } +} + +static void sub_8026988(void) +{ + u8 i, first, count; + + first = gUnknown_02022C98->unk44; + count = gUnknown_02022C98->unk48; + for (i = first; i < count; i++) + { + struct DodrioSubstruct_31A0 *ptr = &gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId]; + u8 var = gUnknown_082F449C[gUnknown_02022C98->unk24 - 1][gUnknown_02022C98->multiplayerId][i]; + + if (ptr->unk14.unkB[var] != 0) + sub_8028BF8(i, FALSE); + else + sub_8028BF8(i, TRUE); + + if (ptr->unk14.unkB[var] > 9) + { + sub_8028CA4(i, ptr->unk14.unk0[var] + 3); + sub_8028C7C(i, ptr->unk14.unkB[var] * 2 - 1); + } + else if (ptr->unk14.unk0[var] == 3) + { + ptr->unk14.unkB[var] = 7; + sub_8028CA4(i, 6); + sub_8028C7C(i, ptr->unk14.unkB[var] * 2 - 1); + } + else + { + sub_8028CA4(i, ptr->unk14.unk0[var]); + sub_8028C7C(i, ptr->unk14.unkB[var] * 2); + } + } +} + +static void sub_8026A88(void) +{ + u8 i, count; + + count = gUnknown_02022C98->unk24; + for (i = 0; i < count; i++) + { + struct DodrioSubstruct_31A0 *ptr = &gUnknown_02022C98->unk31A0[i]; + sub_80286B4(i, ptr->unk2C.unk0); + } +} + +static void sub_8026AC8(void) +{ + u8 i, count; + + count = gUnknown_02022C98->unk24; + for (i = 0; i < count; i++) + sub_80286B4(i, 4); +} + +static void sub_8026AF4(void) +{ + sub_8026988(); + if (gUnknown_02022C98->unk40 > 9) + sub_8026AC8(); + else + sub_8026A88(); + + sub_80288D4(gUnknown_02022C98->unk40); +} + +// This function is literally the same as the one above...Why? +static void sub_8026B28(void) +{ + sub_8026988(); + if (gUnknown_02022C98->unk40 > 9) + sub_8026AC8(); + else + sub_8026A88(); + + sub_80288D4(gUnknown_02022C98->unk40); +} + +static void sub_8026B5C(u8 arg0, u8 *arg1, u8 *arg2) +{ + switch (arg0) + { + case 1: + *arg1 = 4, *arg2 = 7; + break; + case 2: + *arg1 = 3, *arg2 = 8; + break; + case 3: + *arg1 = 2, *arg2 = 9; + break; + case 4: + *arg1 = 1, *arg2 = 10; + break; + case 5: + *arg1 = 0, *arg2 = 11; + break; + } +} + +static bool32 sub_8026BB8(void) +{ + u8 i, count; + + count = gUnknown_02022C98->unk24; + for (i = 1; i < count; i++) + { + if (gUnknown_02022C98->unk158[i] == 0) + gUnknown_02022C98->unk158[i] = sub_8027DFC(i); + } + + // This loop won't ever run, the seemingly poitnless assingment below is to make the compiler + // generate code for it. + count = count; + for (; i < count; i++) + { + if (gUnknown_02022C98->unk158[i] == 0) + return FALSE; + } + + return TRUE; +} + +static void sub_8026C28(void) +{ + u8 i; + + for (i = 0; i < 5; i++) + gUnknown_02022C98->unk158[i] = 0; +} + +static bool32 sub_8026C50(void) +{ + if (gUnknown_02022C98->unk40 > 9 && gUnknown_02022C98->unk120 == 0) + { + gUnknown_02022C98->unk40 = 10; + if (gUnknown_02022C98->unk12C != 0) + return TRUE; + } + + return FALSE; +} + +static bool32 sub_8026C90(void) +{ + u8 i, first, count; + + if (gUnknown_02022C98->unk40 > 9) + { + first = gUnknown_02022C98->unk44; + count = gUnknown_02022C98->unk48; + gUnknown_02022C98->unk40 = 10; + if (gUnknown_02022C98->unk12C != 0) + { + for (i = first; i < count; i++) + { + struct DodrioSubstruct_31A0 *ptr = &gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId]; + u8 var = gUnknown_082F449C[gUnknown_02022C98->unk24 - 1][gUnknown_02022C98->multiplayerId][i]; + + if (ptr->unk14.unkB[var] != 10) + return FALSE; + } + return TRUE; + } + } + + return FALSE; +} + +static void sub_8026D1C(u8 arg0) +{ + u8 var = gUnknown_082F7A9C[gUnknown_02022C98->unk90[arg0] % 7] + (gUnknown_02022C98->unk90[arg0] / 7) * 100; + if (gUnknown_02022C98->unk86[arg0] >= var) + gUnknown_02022C98->unk90[arg0]++; +} + +static u8 sub_8026D8C(u8 arg0) +{ + return gUnknown_082F4648[gUnknown_02022C98->unk24 - 1][arg0]; +} + +static u8 sub_8026DB0(u8 arg0, u8 arg1) +{ + u8 i, var3; + u8 count = gUnknown_02022C98->unk24 - 1; + u8 var0 = gUnknown_082F45FA[count][arg0][0]; + u8 var1 = gUnknown_082F45FA[count][arg0][1]; + u8 var2 = gUnknown_082F45FA[count][arg0][2]; + + for (i = 0; gUnknown_082F467F[count][i] != 0; i++) + { + if (arg1 == gUnknown_082F467F[count][i]) + return sub_8026E70(gUnknown_02022C98->unk90[var1], arg1); + } + + // Gets the highest of the three. + if (gUnknown_02022C98->unk90[var0] > gUnknown_02022C98->unk90[var1]) + var3 = gUnknown_02022C98->unk90[var0]; + else + var3 = gUnknown_02022C98->unk90[var1]; + + if (gUnknown_02022C98->unk90[var2] > var3) + var3 = gUnknown_02022C98->unk90[var2]; + + return sub_8026E70(var3, arg1); +} + +static u8 sub_8026E70(u8 arg0, u8 arg1) +{ + u8 var = gUnknown_02022C98->unkE8[arg1]; + switch (arg0 % 7) + { + default: return 0; + case 0: return 0; + case 1: return 1; + case 2: return 2; + case 3: + if (var == 0) + return 1; + else + return 0; + case 4: + if (var == 0) + return 2; + else + return 0; + case 5: + if (var == 2) + return 1; + else + return 2; + case 6: + if (var == 0) + return 1; + else if (var == 1) + return 2; + else + return 0; + } +} + +static bool32 sub_8026EEC(u16 arg0[5][6]) +{ + int sum, i; + for (sum = 0, i = 0; i < GetLinkPlayerCount(); sum += arg0[i][3], i++) + ; + + if (sum >= 11) + return TRUE; + else + return FALSE; +} + +static void sub_8026F1C(u8 arg0, u8 arg1, u8 arg2) +{ + u8 var; + u8 count = gUnknown_02022C98->unk24; + switch (arg0) + { + case 0: + case 1: + case 2: + var = gUnknown_02022C98->unk31A0[0].unk14.unk0[arg1]; + gUnknown_02022C98->unk4A[arg2][var] = IncrementWithLimit(gUnknown_02022C98->unk4A[arg2][var], 20000); + break; + case 3: + if (sub_8026EEC(gUnknown_02022C98->unk4A)) + break; + switch (count) + { + case 5: + switch (arg1) + { + case 0: + gUnknown_02022C98->unk4A[2][3]++; + gUnknown_02022C98->unk4A[3][3]++; + break; + case 1: + gUnknown_02022C98->unk4A[3][3]++; + break; + case 2: + gUnknown_02022C98->unk4A[3][3]++; + gUnknown_02022C98->unk4A[4][3]++; + break; + case 3: + gUnknown_02022C98->unk4A[4][3]++; + break; + case 4: + gUnknown_02022C98->unk4A[4][3]++; + gUnknown_02022C98->unk4A[0][3]++; + break; + case 5: + gUnknown_02022C98->unk4A[0][3]++; + break; + case 6: + gUnknown_02022C98->unk4A[0][3]++; + gUnknown_02022C98->unk4A[1][3]++; + break; + case 7: + gUnknown_02022C98->unk4A[1][3]++; + break; + case 8: + gUnknown_02022C98->unk4A[1][3]++; + gUnknown_02022C98->unk4A[2][3]++; + break; + case 9: + gUnknown_02022C98->unk4A[2][3]++; + break; + } + break; + case 4: + switch (arg1) + { + case 1: + gUnknown_02022C98->unk4A[2][3]++; + gUnknown_02022C98->unk4A[3][3]++; + break; + case 2: + gUnknown_02022C98->unk4A[3][3]++; + break; + case 3: + gUnknown_02022C98->unk4A[3][3]++; + gUnknown_02022C98->unk4A[0][3]++; + break; + case 4: + gUnknown_02022C98->unk4A[0][3]++; + break; + case 5: + gUnknown_02022C98->unk4A[0][3]++; + gUnknown_02022C98->unk4A[1][3]++; + break; + case 6: + gUnknown_02022C98->unk4A[1][3]++; + break; + case 7: + gUnknown_02022C98->unk4A[1][3]++; + gUnknown_02022C98->unk4A[2][3]++; + break; + case 8: + gUnknown_02022C98->unk4A[2][3]++; + break; + } + break; + case 3: + switch (arg1) + { + case 2: + gUnknown_02022C98->unk4A[1][3]++; + gUnknown_02022C98->unk4A[2][3]++; + break; + case 3: + gUnknown_02022C98->unk4A[2][3]++; + break; + case 4: + gUnknown_02022C98->unk4A[2][3]++; + gUnknown_02022C98->unk4A[0][3]++; + break; + case 5: + gUnknown_02022C98->unk4A[0][3]++; + break; + case 6: + gUnknown_02022C98->unk4A[0][3]++; + gUnknown_02022C98->unk4A[1][3]++; + break; + case 7: + gUnknown_02022C98->unk4A[1][3]++; + break; + } + break; + case 2: + switch (arg1) + { + case 3: + gUnknown_02022C98->unk4A[0][3]++; + gUnknown_02022C98->unk4A[1][3]++; + break; + case 4: + gUnknown_02022C98->unk4A[0][3]++; + break; + case 5: + gUnknown_02022C98->unk4A[0][3]++; + gUnknown_02022C98->unk4A[1][3]++; + break; + case 6: + gUnknown_02022C98->unk4A[1][3]++; + break; + } + break; + } + break; + } +} + +static void sub_8027234(bool32 arg0) +{ + if (gUnknown_02022C98->unk24 != 5) + return; + + if (arg0 == TRUE) + { + if (++gUnknown_02022C98->unk112 > gUnknown_02022C98->unk114) + gUnknown_02022C98->unk114 = gUnknown_02022C98->unk112; + if (gUnknown_02022C98->unk112 > 9999) + gUnknown_02022C98->unk112 = 9999; + } + else + { + if (gUnknown_02022C98->unk112 > gUnknown_02022C98->unk114) + gUnknown_02022C98->unk114 = gUnknown_02022C98->unk112; + gUnknown_02022C98->unk112 = 0; + } +} + +static void sub_80272A4(void) +{ + u8 i; + for (i = 0; i < gUnknown_02022C98->unk24; i++) + gUnknown_02022C98->unk4A[i][5] = gUnknown_02022C98->unk114; +} + +static void sub_80272E8(void) +{ + u8 i, j; + + for (i = 0; i < 5; i++) + { + for (j = 0; j < 11; j++) + gUnknown_02022C98->unk31A0[i].unk14.unkB[j] = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk0 = 0; + gUnknown_02022C98->unk31A0[i].unk2C.unk4 = 0; + gUnknown_02022C98->unk90[i] = 0; + gUnknown_02022C98->unk86[i] = 0; + gUnknown_02022C98->unk3308[i].unk0 = 0; + gUnknown_02022C98->unk3308[i].unk4 = 0; + gUnknown_02022C98->unk4A[i][0] = 0; + gUnknown_02022C98->unk4A[i][1] = 0; + gUnknown_02022C98->unk4A[i][2] = 0; + gUnknown_02022C98->unk4A[i][3] = 0; + gUnknown_02022C98->unk4A[i][4] = 0; + gUnknown_02022C98->unk4A[i][5] = 0; + } + gUnknown_02022C98->unk154 = 0; + gUnknown_02022C98->unk112 = 0; + gUnknown_02022C98->unk40 = 0; + sub_8026A88(); + sub_8026988(); +} + +static const s16 gUnknown_082F7B24[] = {10, 30, 50, 50}; + +static void sub_80273F0(void) +{ + u8 i, var = 0, var2 = 0; + + switch (gUnknown_02022C98->unk24) + { + case 4: var = 1; break; + case 5: var = 2; break; + } + + var2 = Random() % 10; + for (i = 0; i < 5; i++) + gUnknown_02022C98->unk4A[i][4] = gUnknown_082F7AA4[var][var2]; +} + +static u32 sub_802745C(u8 arg0) +{ + u32 sum = gUnknown_02022C98->unk4A[arg0][0] + + gUnknown_02022C98->unk4A[arg0][1] + + gUnknown_02022C98->unk4A[arg0][2]; + return min(sum, 9999); +} + +static void sub_802749C(void) +{ + u32 berriesPicked = Min(sub_802745C(gUnknown_02022C98->multiplayerId), 9999); + u32 score = Min(sub_80276C0(gUnknown_02022C98->multiplayerId), 999990); + + if (gSaveBlock2Ptr->berryPick.bestScore < score) + gSaveBlock2Ptr->berryPick.bestScore = score; + if (gSaveBlock2Ptr->berryPick.berriesPicked < berriesPicked) + gSaveBlock2Ptr->berryPick.berriesPicked = berriesPicked; + if (gSaveBlock2Ptr->berryPick.berriesPickedInRow < gUnknown_02022C98->unk114) + gSaveBlock2Ptr->berryPick.berriesPickedInRow = gUnknown_02022C98->unk114; +} + +static u8 sub_8027518(u8 arg0) +{ + u8 i, saved; + + saved = gUnknown_02022C98->unk98[3]; + for (i = 3; i != 0; i--) + gUnknown_02022C98->unk98[i] = gUnknown_02022C98->unk98[i - 1]; + gUnknown_02022C98->unk98[0] = arg0; + return saved; +} + +static void sub_8027554(void) +{ + if (gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] == 0) + { + if (gMain.newKeys & DPAD_UP) + { + gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 2; + gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6; + PlaySE(SE_W204); + } + else if (gMain.newKeys & DPAD_LEFT) + { + gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 3; + gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6; + PlaySE(SE_W204); + } + else if (gMain.newKeys & DPAD_RIGHT) + { + gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 1; + gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId] = 6; + PlaySE(SE_W204); + } + else + { + gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 0; + } + } + else + { + gUnknown_02022C98->unkB0[gUnknown_02022C98->multiplayerId]--; + } +} + +static void sub_8027608(void) +{ + gUnknown_02022C98->unk31A0[gUnknown_02022C98->multiplayerId].unk2C.unk0 = 0; +} + +static u16 sub_802762C(void) +{ + return gUnknown_02022C98->unk4A[gUnknown_02022C98->multiplayerId][4] + FIRST_BERRY_INDEX; +} + +static u8 sub_8027650(void) +{ + return gUnknown_02022C98->unk24; +} + +static u8 *sub_8027660(u8 id) +{ + if (gReceivedRemoteLinkPlayers) + return gLinkPlayers[id].name; + else + return gUnknown_02022C98->unk31A0[id].name; +} + +static u16 sub_80276A0(u8 arg0, u8 arg1) +{ + return gUnknown_02022C98->unk4A[arg0][arg1]; +} + +static u32 sub_80276C0(u8 arg0) +{ + u8 i; + u32 var, sum = 0; + + for (i = 0; i < 3; i++) + sum += gUnknown_02022C98->unk4A[arg0][i] * gUnknown_082F7B24[i]; + + var = gUnknown_02022C98->unk4A[arg0][3] * gUnknown_082F7B24[3]; + if (sum <= var) + return 0; + else + return sum - var; +} + +static u32 sub_8027748(void) +{ + u8 i, count = gUnknown_02022C98->unk24; + u32 maxVar = sub_80276C0(0); + + for (i = 1; i < count; i++) + { + u32 var = sub_80276C0(i); + if (var > maxVar) + maxVar = var; + } + return Min(maxVar, 999990); +} + +static u32 sub_802778C(u8 arg0) +{ + u8 i, count = gUnknown_02022C98->unk24; + u16 maxVar = gUnknown_02022C98->unk4A[0][arg0]; + + for (i = 0; i < count; i++) + { + u16 var = gUnknown_02022C98->unk4A[i][arg0]; + if (var > maxVar) + maxVar = var; + } + return maxVar; +} + +static u32 sub_80277D0(u8 arg0) +{ + u32 vals[5], temp; + s16 r6 = TRUE; + u8 i, count = gUnknown_02022C98->unk24; + + for (i = 0; i < count; i++) + vals[i] = temp = sub_80276C0(i); + + while (r6) + { + r6 = FALSE; + for (i = 0; i < count - 1; i++) + { + if (vals[i] < vals[i + 1]) + { + SWAP(vals[i], vals[i + 1], temp); + r6 = TRUE; + } + } + } + + return vals[arg0]; +} + +static u32 sub_802784C(void) +{ + u8 i, r10 = 0, r8 = 0, r9 = 0, count = gUnknown_02022C98->unk24; + + // Function called two times for some reason. + sub_8027748(); + if (sub_8027748() == 0) + { + for (i = 0; i < count; i++) + { + gUnknown_02022C98->unk3308[i].unk0 = 4; + gUnknown_02022C98->unk3308[i].unk4 = 0; + } + } + + for (i = 0; i < count; i++) + gUnknown_02022C98->unk3308[i].unk4 = Min(sub_80276C0(i), 999990); + + do + { + u32 r6 = sub_80277D0(r10); + u8 r3 = r8; + for (i = 0; i < count; i++) + { + if (r6 == gUnknown_02022C98->unk3308[i].unk4) + { + gUnknown_02022C98->unk3308[i].unk0 = r3; + r8++; + r9++; + } + } + r10 = r8; + } while (r9 < count); + + return 0; +} + +static void sub_802793C(struct DodrioSubstruct_3308 *dst, u8 id) +{ + *dst = gUnknown_02022C98->unk3308[id]; +} + +// Unused function +static u8 sub_802795C(u8 arg0) +{ + u8 i, ret = 0, count = gUnknown_02022C98->unk24; + u32 var, vars[5] = {0}; + + for (i = 0; i < count; i++) + vars[i] = sub_80276C0(i); + + var = vars[arg0]; + for (i = 0; i < 5; i++) + { + if (i != arg0 && var < vars[i]) + ret++; + } + + return ret; +} + +static u8 sub_80279C8(void) +{ + u8 multiplayerId = gUnknown_02022C98->multiplayerId; + u16 itemId = sub_802762C(); + + if (sub_80276C0(multiplayerId) != sub_8027748()) + return 3; + if (!CheckBagHasSpace(itemId, 1)) + return 2; + + AddBagItem(itemId, 1); + if (!CheckBagHasSpace(itemId, 1)) + return 1; + return 0; +} + +// Really? What next, u32 Add(u32 a)return a+1;? +static u32 IncrementWithLimit(u32 a, u32 max) +{ + if (a < max) + return a + 1; + else + return max; +} + +// Gamefreak pls, min(a, b) ((a) < (b) ? (a) : (b)) is a well-known macro +static u32 Min(u32 a, u32 b) +{ + if (a < b) + return a; + else + return b; +} + +static u8 sub_8027A48(u8 id) +{ + return gUnknown_02022C98->unk34[id]; +} + +void sub_8027A5C(void) +{ + int i; + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SANITY_HAS_SPECIES) + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_DODRIO) + { + gSpecialVar_Result = 1; + return; + } + } + + gSpecialVar_Result = 0; +} + +void sub_8027AAC(void) +{ + u8 taskId = CreateTask(sub_8027ACC, 0); + sub_8027ACC(taskId); +} + +// Data related to printing saved results. +static const struct WindowTemplate gUnknown_082F7B2C = +{ + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 1, + .width = 20, + .height = 11, + .paletteNum = 15, + .baseBlock = 0x1, +}; + +static const u8 *const gUnknown_082F7B34[3] = {gText_BerriesPicked, gText_BestScore, gText_BerriesInRowFivePlayers}; +static const u8 gUnknown_082F7B40[] = {4, 7, 4}; + +ALIGNED(4) +static const u8 gUnknown_082F7B44[][2] = {{25}, {41}, {57}}; +static const u8 gUnknown_082F7B4A[][2] = {{25}, {41}, {73}}; + +static void sub_8027ACC(u8 taskId) +{ + struct WindowTemplate window; + s32 i, width, widthCurr; + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + window = gUnknown_082F7B2C; + width = GetStringWidth(1, gText_BerryPickingRecords, 0); + for (i = 0; i < ARRAY_COUNT(gUnknown_082F7B34); i++) + { + widthCurr = GetStringWidth(1, gUnknown_082F7B34[i], 0) + 50; + if (widthCurr > width) + width = widthCurr; + } + width = (width + 7) / 8; + if (width & 1) + width++; + window.tilemapLeft = (30 - width) / 2; + window.width = width; + data[1] = AddWindow(&window); + sub_8027BEC(data[1], width); + CopyWindowToVram(data[1], 3); + data[0]++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + data[0]++; + break; + case 2: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + rbox_fill_rectangle(data[1]); + CopyWindowToVram(data[1], 1); + data[0]++; + } + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + RemoveWindow(data[1]); + DestroyTask(taskId); + EnableBothScriptContexts(); + } + break; + } +} + +static void sub_8027BEC(u8 windowId, s32 width) +{ + s32 i, x, numWidth; + s32 results[3]; + results[0] = gSaveBlock2Ptr->berryPick.berriesPicked; + results[1] = gSaveBlock2Ptr->berryPick.bestScore; + results[2] = gSaveBlock2Ptr->berryPick.berriesPickedInRow; + + LoadUserWindowBorderGfx_(windowId, 0x21D, 0xD0); + DrawTextBorderOuter(windowId, 0x21D, 0xD); + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + AddTextPrinterParameterized(windowId, 1, gText_BerryPickingRecords, GetStringCenterAlignXOffset(1, gText_BerryPickingRecords, width * 8), 1, TEXT_SPEED_FF, NULL); + for (i = 0; i < 3; i++) + { + ConvertIntToDecimalStringN(gStringVar1, results[i], STR_CONV_MODE_LEFT_ALIGN, gUnknown_082F7B40[i]); + numWidth = GetStringWidth(1, gStringVar1, -1); + AddTextPrinterParameterized(windowId, 1, gUnknown_082F7B34[i], 0, gUnknown_082F7B44[i][0], TEXT_SPEED_FF, NULL); + x = (width * 8) - numWidth; + AddTextPrinterParameterized(windowId, 1, gStringVar1, x, gUnknown_082F7B4A[i][0], TEXT_SPEED_FF, NULL); + } + PutWindowTilemap(windowId); +} + +// Debug functions? +static const u16 gUnknown_082F7B50[][4] = +{ + {9999, 0, 90, 9999}, + {9999, 9999, 70, 9999}, + {9999, 0, 9999, 0}, + {9999, 9999, 60, 0}, + {9999, 9999, 9999, 0}, +}; + +static const u8 gUnknown_082F7B78[] = _("あいうえおかき"); +static const u8 gUnknown_082F7B80[] = _("ABCDEFG"); +static const u8 gUnknown_082F7B88[] = _("0123456"); + +static const u8 *const gUnknown_082F7B90[] = +{ + gUnknown_082F7B78, + gUnknown_082F7B78, + gUnknown_082F7B78, + gUnknown_082F7B80, + gUnknown_082F7B88 +}; + +static void sub_8027D20(void) +{ + gUnknown_02022C98->unk24 = GetLinkPlayerCount(); +} + +static void sub_8027D38(void) +{ + u8 i, playerId; + + for (playerId = gUnknown_02022C98->unk24; playerId < 5; playerId++) + StringCopy(gLinkPlayers[playerId].name, gUnknown_082F7B90[playerId]); + + gUnknown_02022C98->unk24 = 5; + for (i = 0; i < 4; i++) + { + for (playerId = 0; playerId < gUnknown_02022C98->unk24; playerId++) + gUnknown_02022C98->unk4A[playerId][i] = gUnknown_082F7B50[playerId][i]; + } +} + +struct UnkPacket1 +{ + u8 id; + u8 ALIGNED(4) unk4; +}; + +static void sub_8027DD0(u32 arg0) +{ + struct UnkPacket1 packet; + packet.id = 1; + packet.unk4 = arg0; + sub_800FE50(&packet); +} + +static u32 sub_8027DFC(u32 arg0) +{ + struct UnkPacket1 *packet; + + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) + return 0; + + packet = (void *)&gRecvCmds[arg0][1]; + if (packet->id == 1) + return packet->unk4; + + return 0; +} + +struct UnkPacket2 +{ + u8 id; + u8 unk1_0:4; + u8 unk1_1:4; + u8 unk2_0:4; + u8 unk2_1:4; + u8 unk3_0:4; + u8 unk3_1:4; + u8 unk4_0:4; + u8 unk4_1:4; + u8 unk5_0:4; + u8 unk5_1:4; + u8 unk6_0:2; + u8 unk6_1:2; + u8 unk6_2:2; + u8 unk6_3:2; + u8 unk7_0:2; + u8 unk7_1:2; + u8 unk7_2:2; + u8 unk7_3:2; + u8 unk8_0:2; + u8 unk8_1:2; + u8 unk8_2:2; + u8 unk8_3:2; + u8 unk9_0:2; + u8 unk9_1:2; + u8 unk9_2:2; + u8 unk9_3:1; + u8 unk9_4:1; + u8 unkA_0:1; + u8 unkA_1:1; + u8 unkA_2:1; + u8 unkA_3:5; + u8 unkB_0:1; + u8 unkB_1:1; + u8 unkB_2:1; + u8 unkB_3:1; + u8 unkB_4:1; + u8 unkB_5:1; + u8 unkB_6:1; +}; + +#ifdef NONMATCHING +static void sub_8027E30(struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 arg6, u32 arg7, u32 arg8) +{ + struct UnkPacket2 packet; + struct DodrioSubstruct_31A0_14 *ptr = &arg0->unk14; + + packet.id = 2; + packet.unk1_0 = ptr->unkB[0]; + packet.unk1_1 = ptr->unkB[1]; + packet.unk2_0 = ptr->unkB[2]; + packet.unk2_1 = ptr->unkB[3]; + packet.unk3_0 = ptr->unkB[4]; + packet.unk3_1 = ptr->unkB[5]; + packet.unk4_0 = ptr->unkB[6]; + packet.unk4_1 = ptr->unkB[7]; + packet.unk5_0 = ptr->unkB[8]; + packet.unk5_1 = ptr->unkB[9]; + + packet.unk6_0 = ptr->unk0[0]; + packet.unk6_1 = ptr->unk0[1]; + packet.unk6_2 = ptr->unk0[2]; + packet.unk6_3 = ptr->unk0[3]; + packet.unk7_0 = ptr->unk0[4]; + packet.unk7_1 = ptr->unk0[5]; + packet.unk7_2 = ptr->unk0[6]; + packet.unk7_3 = ptr->unk0[7]; + packet.unk8_0 = ptr->unk0[8]; + packet.unk8_1 = ptr->unk0[9]; + + packet.unk8_2 = arg1->unk0; + packet.unk8_3 = arg2->unk0; + packet.unk9_0 = arg3->unk0; + packet.unk9_1 = arg4->unk0; + packet.unk9_2 = arg5->unk0; + + packet.unk9_3 = arg1->unk4; + packet.unk9_4 = arg2->unk4; + packet.unkA_0 = arg3->unk4; + packet.unkA_1 = arg4->unk4; + packet.unkA_2 = arg5->unk4; + + packet.unkB_2 = arg1->unk8; + packet.unkB_3 = arg2->unk8; + packet.unkB_4 = arg3->unk8; + packet.unkB_5 = arg4->unk8; + packet.unkB_6 = arg5->unk8; + + packet.unkA_3 = arg6; + packet.unkB_1 = arg7; + packet.unkB_0 = arg8; + sub_800FE50(&packet); +} +#else +NAKED +static void sub_8027E30(struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 arg6, u32 arg7, u32 arg8) +{ + asm_unified(" push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x20\n\ + ldr r4, [sp, 0x48]\n\ + lsls r4, 24\n\ + str r4, [sp, 0x1C]\n\ + movs r4, 0x14\n\ + adds r4, r0\n\ + mov r9, r4\n\ + mov r5, sp\n\ + movs r4, 0x2\n\ + strb r4, [r5]\n\ + mov r10, sp\n\ + mov r5, r9\n\ + ldrb r4, [r5, 0xB]\n\ + movs r7, 0xF\n\ + adds r5, r7, 0\n\ + ands r5, r4\n\ + mov r6, r10\n\ + ldrb r6, [r6, 0x1]\n\ + mov r8, r6\n\ + movs r4, 0x10\n\ + negs r4, r4\n\ + mov r6, r8\n\ + ands r4, r6\n\ + orrs r4, r5\n\ + mov r5, r10\n\ + strb r4, [r5, 0x1]\n\ + mov r8, sp\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0xC]\n\ + lsls r5, 4\n\ + ands r4, r7\n\ + orrs r4, r5\n\ + mov r5, r8\n\ + strb r4, [r5, 0x1]\n\ + ldrb r5, [r6, 0xD]\n\ + movs r6, 0xF\n\ + ands r5, r6\n\ + mov r4, r10\n\ + ldrb r4, [r4, 0x2]\n\ + mov r8, r4\n\ + movs r4, 0x10\n\ + negs r4, r4\n\ + mov r6, r8\n\ + ands r4, r6\n\ + orrs r4, r5\n\ + mov r5, r10\n\ + strb r4, [r5, 0x2]\n\ + mov r8, sp\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0xE]\n\ + lsls r5, 4\n\ + ands r4, r7\n\ + orrs r4, r5\n\ + mov r5, r8\n\ + strb r4, [r5, 0x2]\n\ + ldrb r5, [r6, 0xF]\n\ + movs r6, 0xF\n\ + ands r5, r6\n\ + mov r4, r10\n\ + ldrb r4, [r4, 0x3]\n\ + mov r8, r4\n\ + movs r4, 0x10\n\ + negs r4, r4\n\ + mov r6, r8\n\ + ands r4, r6\n\ + orrs r4, r5\n\ + mov r5, r10\n\ + strb r4, [r5, 0x3]\n\ + mov r8, sp\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0x10]\n\ + lsls r5, 4\n\ + ands r4, r7\n\ + orrs r4, r5\n\ + mov r5, r8\n\ + strb r4, [r5, 0x3]\n\ + ldrb r5, [r6, 0x11]\n\ + movs r6, 0xF\n\ + ands r5, r6\n\ + mov r4, r10\n\ + ldrb r4, [r4, 0x4]\n\ + mov r8, r4\n\ + movs r4, 0x10\n\ + negs r4, r4\n\ + mov r6, r8\n\ + ands r4, r6\n\ + orrs r4, r5\n\ + mov r5, r10\n\ + strb r4, [r5, 0x4]\n\ + mov r8, sp\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0x12]\n\ + lsls r5, 4\n\ + ands r4, r7\n\ + orrs r4, r5\n\ + mov r5, r8\n\ + strb r4, [r5, 0x4]\n\ + ldrb r4, [r6, 0x13]\n\ + movs r6, 0xF\n\ + ands r4, r6\n\ + mov r6, r8\n\ + ldrb r5, [r6, 0x5]\n\ + movs r6, 0x10\n\ + negs r6, r6\n\ + ands r6, r5\n\ + orrs r6, r4\n\ + str r6, [sp, 0xC]\n\ + mov r4, r8\n\ + strb r6, [r4, 0x5]\n\ + mov r5, sp\n\ + mov r6, r9\n\ + ldrb r4, [r6, 0x14]\n\ + lsls r4, 4\n\ + ldr r6, [sp, 0xC]\n\ + ands r6, r7\n\ + orrs r6, r4\n\ + strb r6, [r5, 0x5]\n\ + mov r7, sp\n\ + movs r4, 0x3\n\ + mov r8, r4\n\ + ldrb r0, [r0, 0x14]\n\ + mov r5, r8\n\ + ands r0, r5\n\ + ldrb r5, [r7, 0x6]\n\ + movs r6, 0x4\n\ + negs r6, r6\n\ + mov r10, r6\n\ + mov r4, r10\n\ + ands r4, r5\n\ + orrs r4, r0\n\ + strb r4, [r7, 0x6]\n\ + mov r5, r9\n\ + ldrb r0, [r5, 0x1]\n\ + mov r6, r8\n\ + ands r0, r6\n\ + lsls r0, 2\n\ + movs r5, 0xD\n\ + negs r5, r5\n\ + ands r5, r4\n\ + orrs r5, r0\n\ + strb r5, [r7, 0x6]\n\ + mov r0, r9\n\ + ldrb r4, [r0, 0x2]\n\ + ands r4, r6\n\ + lsls r4, 4\n\ + movs r0, 0x31\n\ + negs r0, r0\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + strb r0, [r7, 0x6]\n\ + mov r5, sp\n\ + mov r6, r9\n\ + ldrb r4, [r6, 0x3]\n\ + lsls r4, 6\n\ + movs r6, 0x3F\n\ + ands r0, r6\n\ + orrs r0, r4\n\ + strb r0, [r5, 0x6]\n\ + mov r4, r9\n\ + ldrb r0, [r4, 0x4]\n\ + mov r5, r8\n\ + ands r0, r5\n\ + ldrb r5, [r7, 0x7]\n\ + mov r4, r10\n\ + ands r4, r5\n\ + orrs r4, r0\n\ + strb r4, [r7, 0x7]\n\ + mov r6, r9\n\ + ldrb r0, [r6, 0x5]\n\ + mov r5, r8\n\ + ands r0, r5\n\ + lsls r0, 2\n\ + movs r5, 0xD\n\ + negs r5, r5\n\ + ands r5, r4\n\ + orrs r5, r0\n\ + strb r5, [r7, 0x7]\n\ + ldrb r4, [r6, 0x6]\n\ + mov r6, r8\n\ + ands r4, r6\n\ + lsls r4, 4\n\ + movs r0, 0x31\n\ + negs r0, r0\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + strb r0, [r7, 0x7]\n\ + mov r5, sp\n\ + mov r6, r9\n\ + ldrb r4, [r6, 0x7]\n\ + lsls r4, 6\n\ + movs r6, 0x3F\n\ + ands r0, r6\n\ + orrs r0, r4\n\ + strb r0, [r5, 0x7]\n\ + mov r8, sp\n\ + mov r0, r9\n\ + ldrb r4, [r0, 0x8]\n\ + movs r7, 0x3\n\ + adds r0, r7, 0\n\ + ands r0, r4\n\ + mov r4, r8\n\ + ldrb r5, [r4, 0x8]\n\ + mov r4, r10\n\ + ands r4, r5\n\ + orrs r4, r0\n\ + mov r5, r8\n\ + strb r4, [r5, 0x8]\n\ + mov r6, r9\n\ + ldrb r5, [r6, 0x9]\n\ + adds r0, r7, 0\n\ + ands r0, r5\n\ + lsls r0, 2\n\ + movs r5, 0xD\n\ + negs r5, r5\n\ + ands r5, r4\n\ + orrs r5, r0\n\ + mov r0, r8\n\ + strb r5, [r0, 0x8]\n\ + ldrb r0, [r1]\n\ + adds r4, r7, 0\n\ + ands r4, r0\n\ + lsls r4, 4\n\ + movs r0, 0x31\n\ + negs r0, r0\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + mov r4, r8\n\ + strb r0, [r4, 0x8]\n\ + mov r5, sp\n\ + ldrb r4, [r2]\n\ + lsls r4, 6\n\ + movs r6, 0x3F\n\ + ands r0, r6\n\ + orrs r0, r4\n\ + strb r0, [r5, 0x8]\n\ + ldrb r4, [r3]\n\ + adds r0, r7, 0\n\ + ands r0, r4\n\ + ldrb r4, [r5, 0x9]\n\ + mov r6, r10\n\ + ands r6, r4\n\ + orrs r6, r0\n\ + mov r10, r6\n\ + strb r6, [r5, 0x9]\n\ + ldr r0, [sp, 0x40]\n\ + ldrb r4, [r0]\n\ + adds r0, r7, 0\n\ + ands r0, r4\n\ + lsls r0, 2\n\ + movs r4, 0xD\n\ + negs r4, r4\n\ + ands r6, r4\n\ + orrs r6, r0\n\ + str r6, [sp, 0x10]\n\ + strb r6, [r5, 0x9]\n\ + mov r4, sp\n\ + ldr r5, [sp, 0x44]\n\ + ldrb r0, [r5]\n\ + adds r6, r7, 0\n\ + ands r6, r0\n\ + lsls r0, r6, 4\n\ + subs r7, 0x34\n\ + ldr r5, [sp, 0x10]\n\ + ands r7, r5\n\ + orrs r7, r0\n\ + strb r7, [r4, 0x9]\n\ + mov r5, sp\n\ + ldrb r0, [r1, 0x4]\n\ + movs r6, 0x1\n\ + mov r12, r6\n\ + mov r4, r12\n\ + ands r4, r0\n\ + lsls r4, 6\n\ + movs r0, 0x41\n\ + negs r0, r0\n\ + mov r10, r0\n\ + ands r0, r7\n\ + orrs r0, r4\n\ + strb r0, [r5, 0x9]\n\ + ldrb r4, [r2, 0x4]\n\ + lsls r4, 7\n\ + movs r5, 0x7F\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + mov r4, r8\n\ + strb r0, [r4, 0x9]\n\ + ldrb r4, [r3, 0x4]\n\ + mov r0, r12\n\ + ands r0, r4\n\ + mov r5, r8\n\ + ldrb r4, [r5, 0xA]\n\ + movs r7, 0x2\n\ + negs r7, r7\n\ + adds r5, r7, 0\n\ + ands r5, r4\n\ + orrs r5, r0\n\ + mov r6, r8\n\ + strb r5, [r6, 0xA]\n\ + mov r9, sp\n\ + ldr r4, [sp, 0x40]\n\ + ldrb r0, [r4, 0x4]\n\ + mov r4, r12\n\ + ands r4, r0\n\ + lsls r4, 1\n\ + movs r6, 0x3\n\ + negs r6, r6\n\ + mov r8, r6\n\ + mov r0, r8\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + mov r4, r9\n\ + strb r0, [r4, 0xA]\n\ + ldr r6, [sp, 0x44]\n\ + ldrb r5, [r6, 0x4]\n\ + mov r4, r12\n\ + ands r4, r5\n\ + lsls r4, 2\n\ + movs r5, 0x5\n\ + negs r5, r5\n\ + ands r0, r5\n\ + orrs r0, r4\n\ + mov r4, r9\n\ + strb r0, [r4, 0xA]\n\ + mov r4, sp\n\ + ldrb r1, [r1, 0x8]\n\ + mov r0, r12\n\ + ands r0, r1\n\ + lsls r0, 2\n\ + ldrb r1, [r4, 0xB]\n\ + ands r5, r1\n\ + orrs r5, r0\n\ + strb r5, [r4, 0xB]\n\ + ldrb r1, [r2, 0x8]\n\ + mov r0, r12\n\ + ands r0, r1\n\ + lsls r0, 3\n\ + movs r1, 0x9\n\ + negs r1, r1\n\ + ands r1, r5\n\ + orrs r1, r0\n\ + strb r1, [r4, 0xB]\n\ + ldrb r2, [r3, 0x8]\n\ + mov r0, r12\n\ + ands r0, r2\n\ + lsls r0, 4\n\ + movs r2, 0x11\n\ + negs r2, r2\n\ + ands r2, r1\n\ + orrs r2, r0\n\ + strb r2, [r4, 0xB]\n\ + mov r3, sp\n\ + ldr r5, [sp, 0x40]\n\ + ldrb r0, [r5, 0x8]\n\ + mov r1, r12\n\ + ands r1, r0\n\ + lsls r1, 5\n\ + movs r0, 0x21\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r3, 0xB]\n\ + mov r2, sp\n\ + ldrb r1, [r6, 0x8]\n\ + mov r6, r12\n\ + ands r6, r1\n\ + lsls r1, r6, 6\n\ + mov r3, r10\n\ + ands r0, r3\n\ + orrs r0, r1\n\ + strb r0, [r2, 0xB]\n\ + ldr r4, [sp, 0x1C]\n\ + lsrs r3, r4, 21\n\ + ldrb r1, [r2, 0xA]\n\ + movs r0, 0x7\n\ + ands r0, r1\n\ + orrs r0, r3\n\ + strb r0, [r2, 0xA]\n\ + mov r1, sp\n\ + ldr r5, [sp, 0x4C]\n\ + movs r6, 0x1\n\ + ands r5, r6\n\ + lsls r2, r5, 1\n\ + ldrb r0, [r1, 0xB]\n\ + mov r3, r8\n\ + ands r3, r0\n\ + orrs r3, r2\n\ + mov r8, r3\n\ + strb r3, [r1, 0xB]\n\ + mov r0, sp\n\ + ldr r4, [sp, 0x50]\n\ + ands r4, r6\n\ + mov r5, r8\n\ + ands r5, r7\n\ + orrs r5, r4\n\ + strb r5, [r0, 0xB]\n\ + bl sub_800FE50\n\ + add sp, 0x20\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\ +"); +} +#endif + +static u32 sub_8028164(u32 unused, struct DodrioSubstruct_31A0 *arg0, struct DodrioSubstruct_31A0_2C *arg1, struct DodrioSubstruct_31A0_2C *arg2, struct DodrioSubstruct_31A0_2C *arg3, struct DodrioSubstruct_31A0_2C *arg4, struct DodrioSubstruct_31A0_2C *arg5, u8 *arg6, u32 *arg7, u32 *arg8) +{ + struct UnkPacket2 *packet; + struct DodrioSubstruct_31A0_14 *ptr = &arg0->unk14; + + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) + return 0; + + packet = (void *)&gRecvCmds[0][1]; + if (packet->id == 2) + { + ptr->unkB[0] = packet->unk1_0; + ptr->unkB[1] = packet->unk1_1; + ptr->unkB[2] = packet->unk2_0; + ptr->unkB[3] = packet->unk2_1; + ptr->unkB[4] = packet->unk3_0; + ptr->unkB[5] = packet->unk3_1; + ptr->unkB[6] = packet->unk4_0; + ptr->unkB[7] = packet->unk4_1; + ptr->unkB[8] = packet->unk5_0; + ptr->unkB[9] = packet->unk5_1; + ptr->unkB[10] = packet->unk1_0; + + ptr->unk0[0] = packet->unk6_0; + ptr->unk0[1] = packet->unk6_1; + ptr->unk0[2] = packet->unk6_2; + ptr->unk0[3] = packet->unk6_3; + ptr->unk0[4] = packet->unk7_0; + ptr->unk0[5] = packet->unk7_1; + ptr->unk0[6] = packet->unk7_2; + ptr->unk0[7] = packet->unk7_3; + ptr->unk0[8] = packet->unk8_0; + ptr->unk0[9] = packet->unk8_1; + ptr->unk0[10] = packet->unk6_0; + + arg1->unk0 = packet->unk8_2; + arg1->unk4 = packet->unk9_3; + arg1->unk8 = packet->unkB_2; + + arg2->unk0 = packet->unk8_3; + arg2->unk4 = packet->unk9_4; + arg2->unk8 = packet->unkB_3; + + arg3->unk0 = packet->unk9_0; + arg3->unk4 = packet->unkA_0; + arg3->unk8 = packet->unkB_4; + + arg4->unk0 = packet->unk9_1; + arg4->unk4 = packet->unkA_1; + arg4->unk8 = packet->unkB_5; + + arg5->unk0 = packet->unk9_2; + arg5->unk4 = packet->unkA_2; + arg5->unk8 = packet->unkB_6; + + *arg6 = packet->unkA_3; + *arg7 = packet->unkB_1; + *arg8 = packet->unkB_0; + return 1; + } + + return 0; +} + +struct UnkPacket3 +{ + u8 id; + u8 ALIGNED(4) unk4; +}; + +static void sub_80282EC(u8 arg0) +{ + struct UnkPacket3 packet; + packet.id = 3; + packet.unk4 = arg0; + sub_800FE50(&packet); +} + +static u32 sub_8028318(u32 arg0, u8 *arg1) +{ + struct UnkPacket3 *packet; + + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) + return 0; + + packet = (void *)&gRecvCmds[arg0][1]; + if (packet->id == 3) + { + *arg1 = packet->unk4; + return 1; + } + + return 0; +} + +struct UnkPacket4 +{ + u8 id; + u32 unk4; +}; + +static void sub_8028350(u32 arg0) +{ + struct UnkPacket4 packet; + packet.id = 4; + packet.unk4 = arg0; + sub_800FE50(&packet); +} + +static u32 sub_8028374(u32 arg0) +{ + struct UnkPacket4 *packet; + + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) + return 0; + + packet = (void *)&gRecvCmds[arg0][1]; + if (packet->id == 4) + return packet->unk4; + + return 0; +} + +// Large chunk of data +static const struct BgTemplate gUnknown_082F7BA4[] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 2, + .mapBaseIndex = 12, + .screenSize = 1, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 14, + .screenSize = 1, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, +}; + +// Unknown unreferenced data, feel free to remove. +static const u32 sUnused[] = {255, 0}; + +static const struct WindowTemplate gUnknown_082F7BBC[] = +{ + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 28, + .height = 2, + .paletteNum = 13, + .baseBlock = 0x13, + }, + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 28, + .height = 14, + .paletteNum = 13, + .baseBlock = 0x4B, + } +}; +static const struct WindowTemplate gUnknown_082F7BCC = +{ + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 28, + .height = 7, + .paletteNum = 13, + .baseBlock = 0x4B, +}; +static const struct WindowTemplate gUnknown_082F7BD4[] = +{ + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 8, + .width = 19, + .height = 3, + .paletteNum = 13, + .baseBlock = 0x13, + }, + { + .bg = 0, + .tilemapLeft = 22, + .tilemapTop = 7, + .width = 6, + .height = 4, + .paletteNum = 13, + .baseBlock = 0x4C, + } +}; +static const struct WindowTemplate gUnknown_082F7BE4 = +{ + .bg = 0, + .tilemapLeft = 4, + .tilemapTop = 6, + .width = 22, + .height = 5, + .paletteNum = 13, + .baseBlock = 0x13, +}; +static const struct WindowTemplate gUnknown_082F7BEC = +{ + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 8, + .width = 19, + .height = 3, + .paletteNum = 13, + .baseBlock = 0x13, +}; + +// This is an unused copy of the tables from the top of the file. Feel free to remove. +static const u8 sDuplicateArray[] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 3, 8, 9, 0, 0, 1, 2, 5, 6, 3, 4, 5, 8, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 2, 9, + 0, 0, 1, 4, 5, 6, 7, 2, 3, 4, 9, 0, 0, 1, 6, 7, 2, 3, 4, 5, 6, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 1, 0, 0, 3, 4, 5, 6, 7, 8, 1, 2, 3, 0, 0, 5, 6, 7, 8, 1, 2, 3, 4, 5, 0, 0, 7, + 8, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 2, 3, 4, 5, 6, 7, 8, 9, 0, + 1, 2, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 4, 5, 6, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 5, 5, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 6, 7, 2, 2, 3, 4, 0, 0, 0, 0, 0, 0, + 3, 4, 5, 5, 6, 7, 7, 8, 1, 1, 2, 3, 0, 0, 0, 4, 5, 6, 6, 7, 8, 8, 9, 0, 0, 1, 2, 2, 3, 4, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 0, 1, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 3, 0, 1, 0, 1, + 2, 1, 2, 3, 2, 3, 0, 0, 0, 0, 4, 0, 1, 0, 1, 2, 1, 2, 3, 2, 3, 4, 3, 4, 0, 0, 0, 0, 9, 9, 9, 9, 1, 1, 1, 9, 9, 9, 9, 9, + 9, 9, 0, 0, 1, 1, 0, 9, 9, 9, 9, 9, 2, 2, 0, 0, 1, 1, 1, 9, 9, 9, 3, 3, 0, 0, 1, 1, 2, 2, 3, 9, 3, 3, 4, 4, 0, 0, 1, 1, + 2, 2, 3, 5, 0, 0, 0, 0, 4, 6, 0, 0, 0, 3, 5, 7, 0, 0, 2, 4, 6, 8, 0, 1, 3, 5, 6, 9 +}; + +static const u16 gDodrioBerryBgPal1[] = INCBIN_U16("graphics/link_games/dodrioberry_bg1.gbapal", + "graphics/link_games/dodrioberry_bg2.gbapal"); +static const u16 gDodrioBerryPkmnPal[] = INCBIN_U16("graphics/link_games/dodrioberry_pkmn.gbapal"); +static const u16 gDodrioBerryShinyPal[] = INCBIN_U16("graphics/link_games/dodrioberry_shiny.gbapal"); +static const u16 gDodrioBerryStatusPal[] = INCBIN_U16("graphics/link_games/dodrioberry_status.gbapal"); +static const u16 gDodrioBerrySpritesPal[] = INCBIN_U16("graphics/link_games/dodrioberry_berrysprites.gbapal"); +static const u32 gDodrioBerrySpritesGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_berrysprites.4bpp.lz"); +static const u16 gDodrioBerryPlatformPal[] = INCBIN_U16("graphics/link_games/dodrioberry_platform.gbapal"); +static const u32 gDodrioBerryBgGfx1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.4bpp.lz"); +static const u32 gDodrioBerryBgGfx2[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2.4bpp.lz"); +static const u32 gDodrioBerryStatusGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_status.4bpp.lz"); +static const u32 gDodrioBerryPlatformGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_platform.4bpp.lz"); +static const u32 gDodrioBerryPkmnGfx[] = INCBIN_U32("graphics/link_games/dodrioberry_pkmn.4bpp.lz"); +static const u32 gDodrioBerryBgTilemap1[] = INCBIN_U32("graphics/link_games/dodrioberry_bg1.bin.lz"); +static const u32 gDodrioBerryBgTilemap2Right[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2right.bin.lz"); +static const u32 gDodrioBerryBgTilemap2Left[] = INCBIN_U32("graphics/link_games/dodrioberry_bg2left.bin.lz"); + +static const struct OamData sOamData_82FB1E0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData sOamData_82FB1E8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData sOamData_82FB1F0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData sOamData_82FB1F8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 3, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_82FB200[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB208[] = +{ + ANIMCMD_FRAME(64, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB210[] = +{ + ANIMCMD_FRAME(128, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB218[] = +{ + ANIMCMD_FRAME(192, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB220[] = +{ + ANIMCMD_FRAME(256, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sSpriteAnimTable_82FB228[] = +{ + sSpriteAnim_82FB200, + sSpriteAnim_82FB208, + sSpriteAnim_82FB210, + sSpriteAnim_82FB218, + sSpriteAnim_82FB220 +}; + +static const union AnimCmd sSpriteAnim_82FB23C[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB244[] = +{ + ANIMCMD_FRAME(4, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB24C[] = +{ + ANIMCMD_FRAME(8, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sSpriteAnimTable_82FB254[] = +{ + sSpriteAnim_82FB23C, + sSpriteAnim_82FB244, + sSpriteAnim_82FB24C +}; + +static const union AnimCmd sSpriteAnim_82FB260[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB268[] = +{ + ANIMCMD_FRAME(4, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB270[] = +{ + ANIMCMD_FRAME(8, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB278[] = +{ + ANIMCMD_FRAME(12, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB280[] = +{ + ANIMCMD_FRAME(16, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB288[] = +{ + ANIMCMD_FRAME(20, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB290[] = +{ + ANIMCMD_FRAME(24, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB298[] = +{ + ANIMCMD_FRAME(28, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_82FB2A0[] = +{ + ANIMCMD_FRAME(32, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sSpriteAnimTable_82FB2A8[] = +{ + sSpriteAnim_82FB260, + sSpriteAnim_82FB268, + sSpriteAnim_82FB270, + sSpriteAnim_82FB278, + sSpriteAnim_82FB280, + sSpriteAnim_82FB288, + sSpriteAnim_82FB290, + sSpriteAnim_82FB298, + sSpriteAnim_82FB2A0 +}; + +static const union AnimCmd sSpriteAnim_82FB2CC[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sSpriteAnimTable_82FB2D4[] = +{ + sSpriteAnim_82FB2CC +}; + +static void sub_80283A8(void) +{ + void *ptr = AllocZeroed(0x3000); + struct SpritePalette pal1 = {gDodrioBerryPkmnPal, 0}; + struct SpritePalette pal2 = {gDodrioBerryShinyPal, 1}; + + LZ77UnCompWram(gDodrioBerryPkmnGfx, ptr); + // This check should be one line up. + if (ptr != NULL) + { + struct SpriteSheet sheet = {ptr, 0x3000, 0}; + LoadSpriteSheet(&sheet); + Free(ptr); + } + LoadSpritePalette(&pal1); + LoadSpritePalette(&pal2); +} + +static void sub_8028408(struct DodrioSubstruct_318C *arg0, u8 arg1, u8 id, u8 arg3) +{ + struct SpriteTemplate sprTemplate = + { + .tileTag = 0, + .paletteTag = arg0->isShiny, + .oam = &sOamData_82FB1E0, + .anims = sSpriteAnimTable_82FB228, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80284A8, + }; + + gUnknown_02022C9C[id] = AllocZeroed(4); + *gUnknown_02022C9C[id] = CreateSprite(&sprTemplate, sub_8028F14(arg1, arg3), 136, 3); + sub_8028654(TRUE, id); +} + +static void sub_80284A8(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + break; + case 1: + sub_802853C(sprite); + break; + case 2: + sub_80285AC(sprite); + break; + } +} + +static void sub_80284CC(u8 unused) +{ + struct Sprite *sprite = &gSprites[*gUnknown_02022C9C[GetMultiplayerId()]]; + sprite->data[0] = 1; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; +} + +static void sub_8028504(u8 unused) +{ + struct Sprite *sprite = &gSprites[*gUnknown_02022C9C[GetMultiplayerId()]]; + sprite->data[0] = 2; + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->data[3] = 0; + sprite->data[4] = 0; +} + +static u32 sub_802853C(struct Sprite *sprite) +{ + s8 var; + u8 mod = (++sprite->data[1] / 2) % 4; + + if (sprite->data[1] >= 3) + { + switch (mod) + { + default: + var = 1; + break; + case 1: + case 2: + var = -1; + break; + } + + sprite->pos1.x += var; + if (++sprite->data[1] >= 40) + { + sprite->data[0] = 0; + sprite->pos1.x = sub_8028F14(0, sub_8027650()); + } + } + + return 0; +} + +static u32 sub_80285AC(struct Sprite *sprite) +{ + u8 mod = (++sprite->data[1] / 13) % 4; + + if (sprite->data[1] % 13 == 0 && mod != 0) + PlaySE(SE_W204); + if (sprite->data[1] >= 104) + { + sprite->data[0] = 0; + mod = 0; + } + sub_80286B4(GetMultiplayerId(), mod); + return 0; +} + +static void sub_8028614(u8 count) +{ + u8 i; + for (i = 0; i < count; i++) + { + struct Sprite *sprite = &gSprites[*gUnknown_02022C9C[i]]; + if (sprite != NULL) + DestroySpriteAndFreeResources(sprite); + // Memory should be freed here but is not. + } +} + +static void sub_8028654(bool8 invisible, u8 id) +{ + gSprites[*gUnknown_02022C9C[id]].invisible = invisible; +} + +static void sub_802868C(bool8 invisible, u8 count) +{ + u8 i; + for (i = 0; i < count; i++) + sub_8028654(invisible, i); +} + +static void sub_80286B4(u8 id, u8 frameNum) +{ + StartSpriteAnim(&gSprites[*gUnknown_02022C9C[id]], frameNum); +} + +static void nullsub_15(struct Sprite *sprite) +{ + +} + +static void sub_80286E4(void) +{ + u8 i; + for (i = 0; i < 10; i++) + { + struct Sprite *sprite = &gSprites[gUnknown_02022CF4->unk2A[i]]; + sprite->pos1.x = (i * 16) + 48; + sprite->pos1.y = -8 - (i * 8); + gUnknown_02022CF4->unkC[i] = 0; + } +} + +static void sub_8028734(void) +{ + u8 i; + void *ptr = AllocZeroed(0x180); + struct SpritePalette spPal = {gDodrioBerryStatusPal, 2}; + + LZ77UnCompWram(gDodrioBerryStatusGfx, ptr); + // This check should be one line up. + if (ptr != NULL) + { + struct SpriteSheet spSheet = {ptr, 0x180, 1}; + struct SpriteTemplate spTemplate = + { + .tileTag = 1, + .paletteTag = 2, + .oam = &sOamData_82FB1E8, + .anims = sSpriteAnimTable_82FB254, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = nullsub_15, + }; + + gUnknown_02022CF4 = AllocZeroed(sizeof(*gUnknown_02022CF4)); + LoadSpriteSheet(&spSheet); + LoadSpritePalette(&spPal); + for (i = 0; i < 10; i++) + gUnknown_02022CF4->unk2A[i] = CreateSprite(&spTemplate, (i * 16) + 48, -8 - (i * 8), 0); + } + + Free(ptr); +} + +static void sub_80287E4(void) +{ + u8 i; + for (i = 0; i < 10; i++) + { + struct Sprite *sprite = &gSprites[gUnknown_02022CF4->unk2A[i]]; + if (sprite != NULL) + DestroySpriteAndFreeResources(sprite); + } + FREE_AND_SET_NULL(gUnknown_02022CF4); +} + +static bool32 sub_8028828(void) +{ + u8 i; + bool32 r3 = FALSE; + for (i = 0; i < 10; i++) + { + struct Sprite *sprite = &gSprites[gUnknown_02022CF4->unk2A[i]]; + gUnknown_02022CF4->unk16[i] = 2; + if (gUnknown_02022CF4->unkC[i] != 0 && sprite->pos1.y == 8) + continue; + r3 = TRUE; + if (sprite->pos1.y == 8) + { + if (gUnknown_02022CF4->unkC[i] != 0) + continue; + gUnknown_02022CF4->unkC[i] = 1; + gUnknown_02022CF4->unk16[i] = -16; + PlaySE(SE_TK_KASYA); + } + sprite->pos1.y += gUnknown_02022CF4->unk16[i]; + } + + if (r3) + return FALSE; + else + return TRUE; +} + +static void sub_80288D4(u8 arg0) +{ + u8 i; + + if (arg0 > 10) + { + for (i = 0; i < 10; i++) + StartSpriteAnim(&gSprites[gUnknown_02022CF4->unk2A[i]], 1); + } + else + { + for (i = 0; i < 10 - arg0; i++) + { + if (arg0 > 6) + { + gUnknown_02022CF4->unk3E += arg0 - 6; + if (gUnknown_02022CF4->unk3E > 30) + gUnknown_02022CF4->unk3E = 0; + else if (gUnknown_02022CF4->unk3E > 10) + StartSpriteAnim(&gSprites[gUnknown_02022CF4->unk2A[i]], 2); + else + StartSpriteAnim(&gSprites[gUnknown_02022CF4->unk2A[i]], 0); + } + else + { + StartSpriteAnim(&gSprites[gUnknown_02022CF4->unk2A[i]], 0); + } + } + for (; i < 10; i++) + StartSpriteAnim(&gSprites[gUnknown_02022CF4->unk2A[i]], 1); + } +} + +static void sub_80289E8(bool8 invisible) +{ + u8 i; + for (i = 0; i < 10; i++) + gSprites[gUnknown_02022CF4->unk2A[i]].invisible = invisible; +} + +// Unknown unused data, feel free to remove. +static const u8 sUnused2[] = {0xD4, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0xFB, 0x0, 0x0}; + +static void sub_8028A34(void) +{ + void *ptr = AllocZeroed(0x480); + struct SpritePalette sprPal = {gDodrioBerrySpritesPal, 3}; + + LZ77UnCompWram(gDodrioBerrySpritesGfx, ptr); + if (ptr != NULL) + { + struct SpriteSheet sprSheet = {ptr, 0x480, 2}; + LoadSpriteSheet(&sprSheet); + } + + LoadSpritePalette(&sprPal); + Free(ptr); +} + +static const s16 gUnknown_082FB31C[] = {88, 128, 168, 208}; + +static void sub_8028A88(void) +{ + u8 i; + s16 x; + + struct SpriteTemplate sprTemplate1 = + { + .tileTag = 2, + .paletteTag = 3, + .oam = &sOamData_82FB1F0, + .anims = sSpriteAnimTable_82FB2A8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + struct SpriteTemplate sprTemplate2 = + { + .tileTag = 2, + .paletteTag = 3, + .oam = &sOamData_82FB1E8, + .anims = sSpriteAnimTable_82FB2A8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + + for (i = 0; i < 11; i++) + { + gUnknown_02022CB8[i] = AllocZeroed(4); + x = i * 16; + *gUnknown_02022CB8[i] = CreateSprite(&sprTemplate1, x + (i * 8), 8, 1); + sub_8028BF8(i, TRUE); + } + for (i = 0; i < 4; i++) + { + gUnknown_02022CE4[i] = AllocZeroed(4); + if (i == 3) + *gUnknown_02022CE4[i] = CreateSprite(&sprTemplate2, gUnknown_082FB31C[i], 49, 0); + else + *gUnknown_02022CE4[i] = CreateSprite(&sprTemplate2, gUnknown_082FB31C[i], 52, 0); + StartSpriteAnim(&gSprites[*gUnknown_02022CE4[i]], i); + } + + sub_8028C30(TRUE); +} + +static void sub_8028B80(void) +{ + struct Sprite *sprite; + u8 i; + + for (i = 0; i < 11; i++) + { + sprite = &gSprites[*gUnknown_02022CB8[i]]; + if (sprite != NULL) + DestroySprite(sprite); + FREE_AND_SET_NULL(gUnknown_02022CB8[i]); + } + for (i = 0; i < 4; i++) + { + sprite = &gSprites[*gUnknown_02022CE4[i]]; + if (sprite != NULL) + DestroySprite(sprite); + FREE_AND_SET_NULL(gUnknown_02022CE4[i]); + } +} + +static void sub_8028BF8(u8 id, bool8 invisible) +{ + gSprites[*gUnknown_02022CB8[id]].invisible = invisible; +} + +static void sub_8028C30(bool8 invisible) +{ + u8 i; + for (i = 0; i < 4; i++) + gSprites[*gUnknown_02022CE4[i]].invisible = invisible; +} + +static void sub_8028C7C(u8 id, u8 y) +{ + gSprites[*gUnknown_02022CB8[id]].pos1.y = y * 8; +} + +static void sub_8028CA4(u16 id, u8 frameNum) +{ + StartSpriteAnim(&gSprites[*gUnknown_02022CB8[id]], frameNum); +} + +// Unused +static void sub_8028CD0(u8 spriteId) +{ + gSprites[spriteId].pos1.x = 20 * spriteId + 50; + gSprites[spriteId].pos1.y = 50; +} + +// Gamefreak made a mistake there and goes out of bounds for the data array as it holds 8 elements +// in turn overwriting sprite's subpriority and subsprites fields. +#if defined(NONMATCHING) || MODERN + #define sKeepPosX data[1] +#else + #define sKeepPosX data[10] +#endif // NONMATCHING + +static void sub_8028CF4(struct Sprite *sprite) +{ + u8 i; + static const u8 array[] = {30, 20}; + + if (sprite->sKeepPosX != TRUE) + { + for (i = 0; i < 2; i++) + { + if (++gUnknown_02022CB0[i][1] > array[i]) + { + sprite->pos1.x--; + gUnknown_02022CB0[i][1] = 0; + } + } + } +} + +static const s16 gUnknown_082FB356[][2] = {{230, 55}, {30, 74}}; + +static void sub_8028D44(void) +{ + u8 i; + void *ptr = AllocZeroed(0x400); + struct SpritePalette sprPal = {gDodrioBerryPlatformPal, 6}; + + LZ77UnCompWram(gDodrioBerryPlatformGfx, ptr); + if (ptr != NULL) + { + struct SpriteSheet sprSheet = {ptr, 0x400, 5}; + struct SpriteTemplate sprTemplate = + { + .tileTag = 5, + .paletteTag = 6, + .oam = &sOamData_82FB1F8, + .anims = sSpriteAnimTable_82FB2D4, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8028CF4, + }; + + LoadSpriteSheet(&sprSheet); + LoadSpritePalette(&sprPal); + for (i = 0; i < 2; i++) + { + gUnknown_02022CB0[i] = AllocZeroed(4); + *gUnknown_02022CB0[i] = CreateSprite(&sprTemplate, gUnknown_082FB356[i][0], gUnknown_082FB356[i][1], 4); + } + } + + Free(ptr); +} + +static void sub_8028DFC(void) +{ + u8 i; + for (i = 0; i < 2; i++) + { + struct Sprite *sprite = &gSprites[*gUnknown_02022CB0[i]]; + sprite->sKeepPosX = TRUE; + sprite->pos1.x = gUnknown_082FB356[i][0]; + sprite->pos1.y = gUnknown_082FB356[i][1]; + } +} + +static void sub_8028E4C(void) +{ + u8 i; + for (i = 0; i < 2; i++) + { + struct Sprite *sprite = &gSprites[*gUnknown_02022CB0[i]]; + sprite->sKeepPosX = FALSE; + } +} + +static void sub_8028E84(void) +{ + u8 i; + for (i = 0; i < 2; i++) + { + struct Sprite *sprite = &gSprites[*gUnknown_02022CB0[i]]; + if (sprite) + DestroySprite(sprite); + FREE_AND_SET_NULL(gUnknown_02022CB0[i]); + } +} + +static void sub_8028EC8(bool8 invisible) +{ + u8 i; + for (i = 0; i < 2; i++) + gSprites[*gUnknown_02022CB0[i]].invisible = invisible; +} + +#undef sKeepPosX + +static s16 sub_8028F14(u8 arg0, u8 arg1) +{ + s16 x = 0; + switch (arg1) + { + case 1: + x = 15; + break; + case 2: + switch (arg0) + { + case 0: x = 12; break; + case 1: x = 18; break; + } + break; + case 3: + switch (arg0) + { + case 0: x = 15; break; + case 1: x = 21; break; + case 2: x = 9; break; + } + break; + case 4: + switch (arg0) + { + case 0: x = 12; break; + case 1: x = 18; break; + case 2: x = 24; break; + case 3: x = 6; break; + } + break; + case 5: + switch (arg0) + { + case 0: x = 15; break; + case 1: x = 21; break; + case 2: x = 27; break; + case 3: x = 3; break; + case 4: x = 9; break; + } + break; + } + + return x * 8; +} + +static void sub_8028FCC(void) +{ + u8 i; + for (i = 0; i < 11; i++) + { + sub_8028BF8(i, TRUE); + sub_8028C7C(i, 1); + } + sub_80289E8(FALSE); +} + +static void sub_8028FF8(u8 frameId) +{ + LoadBgTiles(0, GetWindowFrameTilesPal(frameId)->tiles, 0x120, 1); + LoadPalette(GetWindowFrameTilesPal(frameId)->pal, 0xA0, 0x20); +} + +static void sub_802902C(void) +{ + LoadUserWindowBorderGfx_(0, 0xA, 0xB0); +} + +static void sub_802903C(void) +{ + gUnknown_02022CF8->finished = FALSE; + gUnknown_02022CF8->state = 0; + gUnknown_02022CF8->unk3018 = 0; + gUnknown_02022CF8->unk3020 = 0; + gUnknown_02022CF8->unk3024 = 0; +} + +static void sub_8029074(const struct WindowTemplate *winTempl) +{ + u8 pal = 0xA; + + FillBgTilemapBufferRect(0, 1, winTempl->tilemapLeft - 1, winTempl->tilemapTop - 1, 1, 1, pal); + FillBgTilemapBufferRect(0, 2, winTempl->tilemapLeft, winTempl->tilemapTop - 1, winTempl->width, 1, pal); + FillBgTilemapBufferRect(0, 3, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop - 1, 1, 1, pal); + FillBgTilemapBufferRect(0, 4, winTempl->tilemapLeft - 1, winTempl->tilemapTop, 1, winTempl->height, pal); + FillBgTilemapBufferRect(0, 6, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop, 1, winTempl->height, pal); + FillBgTilemapBufferRect(0, 7, winTempl->tilemapLeft - 1, winTempl->tilemapTop + winTempl->height, 1, 1, pal); + FillBgTilemapBufferRect(0, 8, winTempl->tilemapLeft, winTempl->tilemapTop + winTempl->height, winTempl->width, 1, pal); + FillBgTilemapBufferRect(0, 9, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop + winTempl->height, 1, 1, pal); +} + +static void sub_8029174(const struct WindowTemplate *winTempl) +{ + u8 pal = 0xB; + + FillBgTilemapBufferRect(0, 10, winTempl->tilemapLeft - 1, winTempl->tilemapTop - 1, 1, 1, pal); + FillBgTilemapBufferRect(0, 11, winTempl->tilemapLeft, winTempl->tilemapTop - 1, winTempl->width, 1, pal); + FillBgTilemapBufferRect(0, 12, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop - 1, 1, 1, pal); + FillBgTilemapBufferRect(0, 13, winTempl->tilemapLeft - 1, winTempl->tilemapTop, 1, winTempl->height, pal); + FillBgTilemapBufferRect(0, 15, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop, 1, winTempl->height, pal); + FillBgTilemapBufferRect(0, 16, winTempl->tilemapLeft - 1, winTempl->tilemapTop + winTempl->height, 1, 1, pal); + FillBgTilemapBufferRect(0, 17, winTempl->tilemapLeft, winTempl->tilemapTop + winTempl->height, winTempl->width, 1, pal); + FillBgTilemapBufferRect(0, 18, winTempl->tilemapLeft + winTempl->width, winTempl->tilemapTop + winTempl->height, 1, 1, pal); +} + +static void sub_8029274(struct DodrioSubstruct_0160 *ptr) +{ + gUnknown_02022CF8 = ptr; + gUnknown_02022CF8->finished = FALSE; + gUnknown_02022CF8->state = 0; + gUnknown_02022CF8->unk3018 = 0; + gUnknown_02022CF8->unk3020 = 0; + gUnknown_02022CF8->unk3024 = 0; + gUnknown_02022CF8->unk3004 = CreateTask(sub_8029314, 3); + sub_802A72C(sub_8029338); +} + +static void sub_80292D4(void) +{ + FreeAllWindowBuffers(); +} + +// Data used by functions below. +struct WinCoords +{ + u8 left; + u8 top; +}; + +static const u8 gUnknown_082FB380[][3] = +{ + {1, 2, 3}, + {1, 4, 5}, + {1, 8, 9}, + {1, 6, 7}, +}; + +static const struct WinCoords gUnknown_082FB38C[] = {{12, 6}}; +static const struct WinCoords gUnknown_082FB390[] = {{9, 10}, {15, 6}}; +static const struct WinCoords gUnknown_082FB398[] = {{12, 6}, {18, 10}, {6, 10}}; +static const struct WinCoords gUnknown_082FB3A4[] = {{9, 10}, {15, 6}, {21, 10}, {3, 6}}; +static const struct WinCoords gUnknown_082FB3B4[] = {{12, 6}, {18, 10}, {23, 6}, {1, 6}, {6, 10}}; + +static const struct WinCoords *const gUnknown_082FB3C8[] = +{ + gUnknown_082FB38C, + gUnknown_082FB390, + gUnknown_082FB398, + gUnknown_082FB3A4, + gUnknown_082FB3B4, +}; + +static const u8 *const gUnknown_082FB3DC[] = +{ + gText_1Colon, + gText_2Colon, + gText_3Colon, + gText_4Colon, + gText_5Colon, +}; + +static const u16 gUnknown_082FB3F0[] = {92, 132, 172, 212}; +static const u16 gUnknown_082FB3F8[] = {33, 49, 65, 81, 97}; +static const u16 gUnknown_082FB402[] = {17, 33, 49, 65, 81}; + +struct +{ + u8 id; + void (*func)(void); +} const gUnknown_082FB40C[] = +{ + {0, sub_8029338}, + {1, sub_8029440}, + {2, sub_802988C}, + {3, sub_802A010}, + {4, sub_802A380}, + {5, sub_802A454}, + {6, sub_802A534}, + {7, sub_802A588}, + {8, sub_802A6FC}, + {9, nullsub_16}, +}; + +static void sub_80292E0(u8 arg0) +{ + u8 i; + for (i = 0; i < 10; i++) + { + if (gUnknown_082FB40C[i].id == arg0) + sub_802A72C(gUnknown_082FB40C[i].func); + } +} + +static void sub_8029314(u8 taskId) +{ + if (!gUnknown_02022CF8->finished) + sub_802A75C()(); +} + +static void sub_8029338(void) +{ + switch (gUnknown_02022CF8->state) + { + case 0: + sub_802A7A8(); + gUnknown_02022CF8->state++; + break; + case 1: + if (sub_802A8E8() == TRUE) + gUnknown_02022CF8->state++; + break; + case 2: + CopyToBgTilemapBuffer(3, gDodrioBerryBgTilemap1, 0, 0); + CopyToBgTilemapBuffer(1, gDodrioBerryBgTilemap2Left, 0, 0); + CopyToBgTilemapBuffer(2, gDodrioBerryBgTilemap2Right, 0, 0); + CopyBgTilemapBufferToVram(3); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + gUnknown_02022CF8->state++; + break; + case 3: + ShowBg(0); + ShowBg(3); + ShowBg(1); + ShowBg(2); + gUnknown_02022CF8->state++; + break; + case 4: + sub_8028FF8(gSaveBlock2Ptr->optionsWindowFrameType); + sub_802902C(); + gUnknown_02022CF8->state++; + break; + default: + gUnknown_02022CF8->finished = TRUE; + break; + } +} + +static void sub_8029440(void) +{ + u8 i, playersCount, id, colorsId, *name; + u32 left; + struct WindowTemplate window; + const struct WinCoords *ptr; + + switch (gUnknown_02022CF8->state) + { + case 0: + playersCount = sub_8027650(); + ptr = gUnknown_082FB3C8[playersCount - 1]; + window.bg = 0; + window.width = 7; + window.height = 2; + window.paletteNum = 0xD; + window.baseBlock = 0x13; + for (i = 0; i < playersCount; ptr++, i++) + { + colorsId = 0; + id = sub_8027A48(i); + left = (56 - GetStringWidth(1, sub_8027660(id), -1)) / 2u; + window.tilemapLeft = ptr->left; + window.tilemapTop = ptr->top; + gUnknown_02022CF8->unk3008[i] = AddWindow(&window); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[i]); + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[i], PIXEL_FILL(1)); + if (id == GetMultiplayerId()) + colorsId = 2; + name = sub_8027660(id); + AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[i], 1, left, 1, gUnknown_082FB380[colorsId], -1, name); + CopyWindowToVram(gUnknown_02022CF8->unk3008[i], 2); + window.baseBlock += 0xE; + sub_8029174(&window); + } + gUnknown_02022CF8->state++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + playersCount = sub_8027650(); + for (i = 0; i < playersCount; i++) + PutWindowTilemap(gUnknown_02022CF8->unk3008[i]); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->state++; + } + break; + default: + if (++gUnknown_02022CF8->state > 180) + { + playersCount = sub_8027650(); + for (i = 0; i < playersCount; i++) + { + ClearWindowTilemap(gUnknown_02022CF8->unk3008[i]); + RemoveWindow(gUnknown_02022CF8->unk3008[i]); + } + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->finished = TRUE; + } + break; + } +} + +static void sub_80296A8(u8 playersCount_) +{ + u8 i, r8 = 0, r6 = 0; + u8 playersCount = playersCount_; // Pointless variable, I know, but it's needed to match. + u8 *name; + u32 x, numWidth; + u8 numString[32]; + u8 array[5] = {0, 1, 2, 3, 4}; + struct DodrioSubstruct_3308 temp, structArray[5]; + + for (i = 0; i < playersCount; i++) + { + array[i] = i; + sub_802793C(&temp, i); + structArray[i] = temp; + } + + if (sub_8027748() != 0) + { + do + { + for (i = 0; i < playersCount; i++) + { + if (structArray[i].unk0 == r8) + { + array[r6] = i; + r6++; + } + } + r8 = r6; + } while (r6 < playersCount); + } + + for (i = 0; i < playersCount; i++) + { + if (structArray[i].unk4 == 0) + structArray[i].unk0 = playersCount - 1; + } + + x = 216 - GetStringWidth(1, gText_SpacePoints, 0); + for (i = 0; i < playersCount; i++) + { + u8 colorsId = 0; + u8 id = array[i]; + u32 points = structArray[id].unk4; + + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gUnknown_082FB3DC[structArray[id].unk0], 8, gUnknown_082FB402[i], -1, NULL); + if (id == GetMultiplayerId()) + colorsId = 2; + name = sub_8027660(id); + AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[1], 1, 28, gUnknown_082FB402[i], gUnknown_082FB380[colorsId], -1, name); + ConvertIntToDecimalStringN(numString, points, STR_CONV_MODE_LEFT_ALIGN, 7); + numWidth = GetStringWidth(1, numString, -1); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, numString, x - numWidth, gUnknown_082FB402[i], -1, NULL); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_SpacePoints, x, gUnknown_082FB402[i], -1, NULL); + } +} + +static void sub_802988C(void) +{ + u8 i, j, itemGiveRet, playersCount = sub_8027650(); + u8 *name; + u32 strWidth, x; + + switch (gUnknown_02022CF8->state) + { + case 0: + sub_802784C(); + gUnknown_02022CF8->unk301C = 0; + gUnknown_02022CF8->state++; + break; + case 1: + gUnknown_02022CF8->unk3008[0] = AddWindow(&gUnknown_082F7BBC[0]); + gUnknown_02022CF8->unk3008[1] = AddWindow(&gUnknown_082F7BBC[1]); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[1]); + sub_8029174(&gUnknown_082F7BBC[0]); + sub_8029174(&gUnknown_082F7BBC[1]); + gUnknown_02022CF8->state++; + break; + case 2: + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[0], PIXEL_FILL(1)); + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[1], PIXEL_FILL(1)); + strWidth = GetStringWidth(1, gText_BerryPickingResults, -1); + x = (224 - strWidth) / 2; + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[0], 1, gText_BerryPickingResults, x, 1, -1, NULL); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_10P30P50P50P, 68, 17, -1, NULL); + for (i = 0; i < playersCount; i++) + { + u8 colorsId = 0; + if (i == GetMultiplayerId()) + colorsId = 2; + + name = sub_8027660(i); + AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[1], 1, 0, gUnknown_082FB3F8[i], gUnknown_082FB380[colorsId], -1, name); + for (j = 0; j < 4; j++) + { + u32 width; + u16 result1 = Min(sub_80276A0(i, j), 9999); + u16 result2 = Min(sub_802778C(j), 9999); + + ConvertIntToDecimalStringN(gStringVar4, result1, STR_CONV_MODE_LEFT_ALIGN, 4); + width = GetStringWidth(1, gStringVar4, -1); + if (result2 == result1 && result2 != 0) + AddTextPrinterParameterized3(gUnknown_02022CF8->unk3008[1], 1, gUnknown_082FB3F0[j] - width, gUnknown_082FB3F8[i], gUnknown_082FB380[1], -1, gStringVar4); + else + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gStringVar4, gUnknown_082FB3F0[j] - width, gUnknown_082FB3F8[i], -1, NULL); + } + } + CopyWindowToVram(gUnknown_02022CF8->unk3008[0], 2); + CopyWindowToVram(gUnknown_02022CF8->unk3008[1], 2); + gUnknown_02022CF8->state++; + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022CF8->unk3008[0]); + PutWindowTilemap(gUnknown_02022CF8->unk3008[1]); + } + CopyBgTilemapBufferToVram(0); + sub_8028C30(FALSE); + gUnknown_02022CF8->state++; + break; + case 4: + if (++gUnknown_02022CF8->unk301C >= 30 && gMain.newKeys & A_BUTTON) + { + gUnknown_02022CF8->unk301C = 0; + PlaySE(SE_SELECT); + sub_8028C30(TRUE); + gUnknown_02022CF8->state++; + } + break; + case 5: + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[0], PIXEL_FILL(1)); + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[1], PIXEL_FILL(1)); + strWidth = GetStringWidth(1, gText_AnnouncingRankings, -1); + x = (224 - strWidth) / 2; + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[0], 1, gText_AnnouncingRankings, x, 1, -1, NULL); + gUnknown_02022CF8->state++; + break; + case 6: + sub_80296A8(playersCount); + CopyWindowToVram(gUnknown_02022CF8->unk3008[0], 2); + CopyWindowToVram(gUnknown_02022CF8->unk3008[1], 2); + gUnknown_02022CF8->state++; + break; + case 7: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022CF8->unk3008[0]); + PutWindowTilemap(gUnknown_02022CF8->unk3008[1]); + } + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->state++; + break; + case 8: + if (++gUnknown_02022CF8->unk301C >= 30 && gMain.newKeys & A_BUTTON) + { + gUnknown_02022CF8->unk301C = 0; + PlaySE(SE_SELECT); + if (sub_8027748() < 3000) + { + gUnknown_02022CF8->state = 127; + } + else + { + StopMapMusic(); + gUnknown_02022CF8->state++; + } + + FillBgTilemapBufferRect_Palette0(0, 0, 0, 5, 30, 15); + RemoveWindow(gUnknown_02022CF8->unk3008[1]); + gUnknown_02022CF8->unk3008[1] = AddWindow(&gUnknown_082F7BCC); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[1]); + sub_8029174(&gUnknown_082F7BCC); + } + break; + case 9: + PlayNewMapMusic(MUS_FANFA1); + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[0], PIXEL_FILL(1)); + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[1], PIXEL_FILL(1)); + strWidth = GetStringWidth(1, gText_AnnouncingPrizes, -1); + x = (224 - strWidth) / 2; + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[0], 1, gText_AnnouncingPrizes, x, 1, -1, NULL); + DynamicPlaceholderTextUtil_Reset(); + CopyItemName(sub_802762C(), gStringVar1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_FirstPlacePrize); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gStringVar4, 0, 1, -1, NULL); + itemGiveRet = sub_80279C8(); + if (itemGiveRet != 0 && itemGiveRet != 3) + { + DynamicPlaceholderTextUtil_Reset(); + CopyItemName(sub_802762C(), gStringVar1); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); + if (itemGiveRet == 2) + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_CantHoldAnyMore); + else if (itemGiveRet == 1) + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_FilledStorageSpace); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gStringVar4, 0, 41, -1, NULL); + } + CopyWindowToVram(gUnknown_02022CF8->unk3008[0], 2); + CopyWindowToVram(gUnknown_02022CF8->unk3008[1], 2); + gUnknown_02022CF8->state++; + break; + case 10: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022CF8->unk3008[0]); + PutWindowTilemap(gUnknown_02022CF8->unk3008[1]); + } + CopyBgTilemapBufferToVram(0); + FadeOutAndFadeInNewMapMusic(MUS_RG_WIN_YASEI, 20, 10); + gUnknown_02022CF8->state++; + break; + case 11: + if (++gUnknown_02022CF8->unk301C >= 30 && gMain.newKeys & A_BUTTON) + { + gUnknown_02022CF8->unk301C = 0; + PlaySE(SE_SELECT); + gUnknown_02022CF8->state++; + } + break; + default: + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[1]); + RemoveWindow(gUnknown_02022CF8->unk3008[0]); + RemoveWindow(gUnknown_02022CF8->unk3008[1]); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->finished = TRUE; + break; + } +} + +static void sub_802A010(void) +{ + u8 y; + + switch (gUnknown_02022CF8->state) + { + case 0: + gUnknown_02022CF8->unk3008[0] = AddWindow(&gUnknown_082F7BD4[0]); + gUnknown_02022CF8->unk3008[1] = AddWindow(&gUnknown_082F7BD4[1]); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[1]); + sub_8029174(&gUnknown_082F7BD4[0]); + sub_8029074(&gUnknown_082F7BD4[1]); + gUnknown_02022CF8->state++; + gUnknown_02022CF8->unk3020 = 0; + gUnknown_02022CF8->unk3024 = 0; + break; + case 1: + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[0], PIXEL_FILL(1)); + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[1], PIXEL_FILL(1)); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[0], 1, gText_WantToPlayAgain, 0, 5, -1, NULL); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_Yes, 8, 1, -1, NULL); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_No, 8, 17, -1, NULL); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_SelectorArrow2, 0, 1, -1, NULL); + CopyWindowToVram(gUnknown_02022CF8->unk3008[0], 2); + CopyWindowToVram(gUnknown_02022CF8->unk3008[1], 2); + gUnknown_02022CF8->state++; + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022CF8->unk3008[0]); + PutWindowTilemap(gUnknown_02022CF8->unk3008[1]); + } + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->state++; + break; + case 3: + y = gUnknown_02022CF8->unk3020; + if (y == 0) + y = 1; + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[1], PIXEL_FILL(1)); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_Yes, 8, 1, -1, NULL); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_No, 8, 17, -1, NULL); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[1], 1, gText_SelectorArrow2, 0, ((y - 1) * 16) + 1, -1, NULL); + CopyWindowToVram(gUnknown_02022CF8->unk3008[1], 3); + // Increment state only if A or B button have been pressed. + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gUnknown_02022CF8->unk3020 == 0) + gUnknown_02022CF8->unk3020 = 1; + gUnknown_02022CF8->state++; + } + else if (gMain.newKeys & (DPAD_UP | DPAD_DOWN)) + { + PlaySE(SE_SELECT); + switch (gUnknown_02022CF8->unk3020) + { + case 0: + gUnknown_02022CF8->unk3020 = 2; + break; + case 1: + gUnknown_02022CF8->unk3020 = 2; + break; + case 2: + gUnknown_02022CF8->unk3020 = 1; + break; + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_02022CF8->unk3020 = 2; + gUnknown_02022CF8->state++; + } + break; + default: + gUnknown_02022CF8->unk3024 = gUnknown_02022CF8->unk3020; + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[1]); + RemoveWindow(gUnknown_02022CF8->unk3008[0]); + RemoveWindow(gUnknown_02022CF8->unk3008[1]); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->finished = TRUE; + break; + } +} + +static void sub_802A380(void) +{ + switch (gUnknown_02022CF8->state) + { + case 0: + DrawDialogueFrame(0, FALSE); + AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, NULL, 2, 1, 3); + gUnknown_02022CF8->state++; + break; + case 1: + CopyWindowToVram(0, 3); + gUnknown_02022CF8->state++; + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + CreateTask(sub_8153688, 0); + gUnknown_02022CF8->state++; + } + break; + case 3: + if (!FuncIsActiveTask(sub_8153688)) + gUnknown_02022CF8->state++; + break; + default: + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->finished = TRUE; + break; + } +} + +static void sub_802A454(void) +{ + switch (gUnknown_02022CF8->state) + { + case 0: + gUnknown_02022CF8->unk3008[0] = AddWindow(&gUnknown_082F7BEC); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + sub_8029174(&gUnknown_082F7BEC); + gUnknown_02022CF8->state++; + break; + case 1: + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[0], PIXEL_FILL(1)); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[0], 1, gText_CommunicationStandby3, 0, 5, -1, NULL); + CopyWindowToVram(gUnknown_02022CF8->unk3008[0], 2); + gUnknown_02022CF8->state++; + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + PutWindowTilemap(gUnknown_02022CF8->unk3008[0]); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->state++; + break; + default: + gUnknown_02022CF8->finished = TRUE; + break; + } +} + +static void sub_802A534(void) +{ + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + RemoveWindow(gUnknown_02022CF8->unk3008[0]); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->finished = TRUE; +} + +static void sub_802A588(void) +{ + switch (gUnknown_02022CF8->state) + { + case 0: + gUnknown_02022CF8->unk3008[0] = AddWindow(&gUnknown_082F7BE4); + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + sub_8029174(&gUnknown_082F7BE4); + gUnknown_02022CF8->state++; + gUnknown_02022CF8->unk301C = 0; + gUnknown_02022CF8->unk3020 = 0; + gUnknown_02022CF8->unk3024 = 0; + break; + case 1: + FillWindowPixelBuffer(gUnknown_02022CF8->unk3008[0], PIXEL_FILL(1)); + AddTextPrinterParameterized(gUnknown_02022CF8->unk3008[0], 1, gText_SomeoneDroppedOut, 0, 5, -1, NULL); + CopyWindowToVram(gUnknown_02022CF8->unk3008[0], 2); + gUnknown_02022CF8->state++; + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + PutWindowTilemap(gUnknown_02022CF8->unk3008[0]); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->state++; + break; + case 3: + if (++gUnknown_02022CF8->unk301C >= 120) + gUnknown_02022CF8->state++; + break; + default: + gUnknown_02022CF8->unk3024 = 5; + ClearWindowTilemap(gUnknown_02022CF8->unk3008[0]); + RemoveWindow(gUnknown_02022CF8->unk3008[0]); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + gUnknown_02022CF8->finished = TRUE; + break; + } +} + +static void sub_802A6FC(void) +{ + DestroyTask(gUnknown_02022CF8->unk3004); + gUnknown_02022CF8->finished = TRUE; +} + +static void nullsub_16(void) +{ + +} + +static void sub_802A72C(void (*func)(void)) +{ + gUnknown_02022CF8->state = 0; + gUnknown_02022CF8->finished = FALSE; + gUnknown_02022CF8->unk3028 = func; +} + +static void (*sub_802A75C(void))(void) +{ + return gUnknown_02022CF8->unk3028; +} + +static bool32 sub_802A770(void) +{ + if (gUnknown_02022CF8->finished == TRUE) + return FALSE; + else + return TRUE; +} + +static u8 sub_802A794(void) +{ + return gUnknown_02022CF8->unk3024; +} + +static void sub_802A7A8(void) +{ + DmaClearLarge16(3, (void *)VRAM, VRAM_SIZE, 0x1000); + DmaClear32(3,(void *)OAM, OAM_SIZE); + DmaClear16(3, (void *)PLTT, PLTT_SIZE); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_082F7BA4, ARRAY_COUNT(gUnknown_082F7BA4)); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + InitStandardTextBoxWindows(); + sub_8197200(); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + SetBgTilemapBuffer(3, gUnknown_02022CF8->tilemapBuffers[0]); + SetBgTilemapBuffer(1, gUnknown_02022CF8->tilemapBuffers[1]); + SetBgTilemapBuffer(2, gUnknown_02022CF8->tilemapBuffers[2]); +} + +static bool32 sub_802A8E8(void) +{ + switch (gUnknown_02022CF8->unk3018) + { + case 0: + LoadPalette(gDodrioBerryBgPal1, 0, sizeof(gDodrioBerryBgPal1)); + break; + case 1: + reset_temp_tile_data_buffers(); + break; + case 2: + decompress_and_copy_tile_data_to_vram(3, gDodrioBerryBgGfx1, 0, 0, 0); + break; + case 3: + decompress_and_copy_tile_data_to_vram(1, gDodrioBerryBgGfx2, 0, 0, 0); + break; + case 4: + if (free_temp_tile_data_buffers_if_possible() == TRUE) + return FALSE; + break; + case 5: + LoadPalette(stdpal_get(3), 0xD0, 0x20); + break; + default: + gUnknown_02022CF8->unk3018 = 0; + return TRUE; + } + + gUnknown_02022CF8->unk3018++; + return FALSE; +} diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 605cd0366..835141ef2 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -73,7 +73,7 @@ static void CreateRandomEggShardSprite(void); static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex); // IWRAM bss -static IWRAM_DATA struct EggHatchData *sEggHatchData; +static struct EggHatchData *sEggHatchData; // rom data static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/normal.gbapal"); diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c index cd64afe0e..11aaaafe7 100755 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -26,17 +26,17 @@ static void sub_81D414C(void); static void sub_81D3F1C(u32, u32*, u32*); static void sub_81D3F68(void); -IWRAM_DATA struct Unknown030012C8 gUnknown_030012C8; -IWRAM_DATA u16 gUnknown_030012E0; -IWRAM_DATA u16 gUnknown_030012E2; -IWRAM_DATA u16 gUnknown_030012E4; -IWRAM_DATA u16 gUnknown_030012E6; -IWRAM_DATA u32 gUnknown_030012E8; -IWRAM_DATA u16 gUnknown_030012EC; -IWRAM_DATA u16 gUnknown_030012EE; -IWRAM_DATA u16 gUnknown_030012F0; -IWRAM_DATA u16 gUnknown_030012F2; -IWRAM_DATA u16 gUnknown_030012F4; +static struct Unknown030012C8 gUnknown_030012C8; +static u16 gUnknown_030012E0; +static u16 gUnknown_030012E2; +static u16 gUnknown_030012E4; +static u16 gUnknown_030012E6; +static u32 gUnknown_030012E8; +static u16 gUnknown_030012EC; +static u16 gUnknown_030012EE; +static u16 gUnknown_030012F0; +static u16 gUnknown_030012F2; +static u16 gUnknown_030012F4; extern const u8 gUnknown_08625B6C[][0x148]; diff --git a/src/ereader_screen.c b/src/ereader_screen.c index f74efa32b..98f0d9b8c 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -38,7 +38,7 @@ struct Unk03006370 static void sub_81D5084(u8); -extern struct Unk03006370 gUnknown_03006370; +struct Unk03006370 gUnknown_03006370; extern const u8 gUnknown_089A3470[]; extern const u8 gMultiBootProgram_BerryGlitchFix_Start[]; diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 1e120bc90..96ca2ed1c 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -556,7 +556,7 @@ static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon) SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_NICKNAME, (gSpeciesNames[gEvolutionTable[preEvoSpecies][1].targetSpecies])); SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_HELD_ITEM, (&data)); SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_MARKINGS, (&data)); - SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_10, (&data)); + SetMonData(&gPlayerParty[gPlayerPartyCount], MON_DATA_ENCRYPT_SEPARATOR, (&data)); for (i = MON_DATA_COOL_RIBBON; i < MON_DATA_COOL_RIBBON + 5; i++) SetMonData(&gPlayerParty[gPlayerPartyCount], i, (&data)); diff --git a/src/field_camera.c b/src/field_camera.c index b976cf2ff..7f294afdb 100644 --- a/src/field_camera.c +++ b/src/field_camera.c @@ -36,11 +36,11 @@ static void DrawMetatile(s32 a, u16 *b, u16 c); static void CameraPanningCB_PanAhead(void); // IWRAM bss vars -static IWRAM_DATA struct FieldCameraOffset sFieldCameraOffset; -static IWRAM_DATA s16 sHorizontalCameraPan; -static IWRAM_DATA s16 sVerticalCameraPan; -static IWRAM_DATA u8 gUnknown_03000E2C; -static IWRAM_DATA void (*sFieldCameraPanningCallback)(void); +static struct FieldCameraOffset sFieldCameraOffset; +static s16 sHorizontalCameraPan; +static s16 sVerticalCameraPan; +static u8 gUnknown_03000E2C; +static void (*sFieldCameraPanningCallback)(void); struct CameraObject gFieldCamera; u16 gTotalCameraPixelOffsetY; diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 455c38deb..8a41087f5 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -304,7 +304,7 @@ static const u8 *GetInteractedEventObjectScript(struct MapPosition *position, u8 gSpecialVar_Facing = direction; if (InTrainerHill() == TRUE) - script = sub_81D62AC(); + script = GetTrainerHillTrainerScript(); else script = GetEventObjectScriptPointerByEventObjectId(eventObjectId); diff --git a/src/field_effect.c b/src/field_effect.c index 22bf44f28..7569bdc75 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -232,7 +232,7 @@ static void Fldeff_MoveDeoxysRock_Step(u8 taskId); // Static RAM declarations -static IWRAM_DATA u8 sActiveList[32]; +static u8 sActiveList[32]; // External declarations extern struct CompressedSpritePalette gMonPaletteTable[]; // GF made a mistake and did not extern it as const. diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index c715da25d..fb883b105 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -868,13 +868,13 @@ u32 FldEff_Unknown22(void) return 0; } -void StartAshFieldEffect(s16 x, s16 y, u16 c, s16 d) +void StartAshFieldEffect(s16 x, s16 y, u16 metatileId, s16 d) { gFieldEffectArguments[0] = x; gFieldEffectArguments[1] = y; gFieldEffectArguments[2] = 0x52; gFieldEffectArguments[3] = 1; - gFieldEffectArguments[4] = c; + gFieldEffectArguments[4] = metatileId; gFieldEffectArguments[5] = d; FieldEffectStart(FLDEFF_ASH); } diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index ab2667c8c..6d62cdc4a 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -336,14 +336,9 @@ void player_step(u8 direction, u16 newKeys, u16 heldKeys) static bool8 TryInterruptEventObjectSpecialAnim(struct EventObject *playerEventObj, u8 direction) { - #ifdef NONMATCHING - u8 r5 = direction; - u8 r6 = direction; - #else - u8 r5 = direction; - register u8 r6 asm("r6") = direction; - #endif - //a very bad HACK + u8 r5 = direction; + u8 r6 = direction; + r6++; r6--; if (EventObjectIsMovementOverridden(playerEventObj) && !EventObjectClearHeldMovementIfFinished(playerEventObj)) @@ -1337,13 +1332,13 @@ void SetPlayerAvatarStateMask(u8 flags) gPlayerAvatar.flags |= flags; } -static u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 a, u8 gender) +static u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 graphicsId, u8 gender) { u8 i; for (i = 0; i < 5; i++) { - if (gUnknown_0849750C[gender][i][0] == a) + if (gUnknown_0849750C[gender][i][0] == graphicsId) return gUnknown_0849750C[gender][i][1]; } return 1; @@ -1362,9 +1357,9 @@ u8 GetPlayerAvatarGraphicsIdByCurrentState(void) return 0; } -void SetPlayerAvatarExtraStateTransition(u8 a, u8 b) +void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 b) { - u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(a, gPlayerAvatar.gender); + u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender); gPlayerAvatar.unk1 |= unk | b; DoPlayerAvatarTransition(); diff --git a/src/field_special_scene.c b/src/field_special_scene.c index e059e6ef8..dbf68e1a2 100644 --- a/src/field_special_scene.c +++ b/src/field_special_scene.c @@ -13,8 +13,10 @@ #include "sound.h" #include "sprite.h" #include "task.h" +#include "constants/event_objects.h" #include "constants/songs.h" #include "constants/vars.h" +#include "constants/metatile_labels.h" #define SECONDS(value) ((signed) (60.0 * value + 0.5)) @@ -202,9 +204,9 @@ void Task_HandleTruckSequence(u8 taskId) data[1]++; if (data[1] == 120) { - MapGridSetMetatileIdAt(11, 8, 520); - MapGridSetMetatileIdAt(11, 9, 528); - MapGridSetMetatileIdAt(11, 10, 536); + MapGridSetMetatileIdAt(11, 8, METATILE_ID(InsideOfTruck, ExitLight_Top)); + MapGridSetMetatileIdAt(11, 9, METATILE_ID(InsideOfTruck, ExitLight_Mid)); + MapGridSetMetatileIdAt(11, 10, METATILE_ID(InsideOfTruck, ExitLight_Bottom)); DrawWholeMapView(); PlaySE(SE_TRACK_DOOR); DestroyTask(taskId); @@ -216,9 +218,9 @@ void Task_HandleTruckSequence(u8 taskId) void ExecuteTruckSequence(void) { - MapGridSetMetatileIdAt(11, 8, 525); - MapGridSetMetatileIdAt(11, 9, 533); - MapGridSetMetatileIdAt(11, 10, 541); + MapGridSetMetatileIdAt(11, 8, METATILE_ID(InsideOfTruck, DoorClosedFloor_Top)); + MapGridSetMetatileIdAt(11, 9, METATILE_ID(InsideOfTruck, DoorClosedFloor_Mid)); + MapGridSetMetatileIdAt(11, 10, METATILE_ID(InsideOfTruck, DoorClosedFloor_Bottom)); DrawWholeMapView(); ScriptContext2_Enable(); CpuFastFill(0, gPlttBufferFaded, 0x400); @@ -311,7 +313,7 @@ void Task_HandlePorthole(u8 taskId) void sub_80FB6EC(void) { - u8 spriteId = AddPseudoEventObject(0x8C, SpriteCallbackDummy, 112, 80, 0); + u8 spriteId = AddPseudoEventObject(EVENT_OBJ_GFX_SS_TIDAL, SpriteCallbackDummy, 112, 80, 0); gSprites[spriteId].coordOffsetEnabled = FALSE; diff --git a/src/field_specials.c b/src/field_specials.c index 8bd990063..efe77bd70 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -55,13 +55,14 @@ #include "constants/vars.h" #include "constants/battle_frontier.h" #include "constants/weather.h" +#include "constants/metatile_labels.h" #include "palette.h" EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE; EWRAM_DATA u8 gBikeCollisions = 0; static EWRAM_DATA u32 gBikeCyclingTimer = 0; static EWRAM_DATA u8 gUnknown_0203AB5C = 0; -static EWRAM_DATA u8 gUnknown_0203AB5D = 0; +static EWRAM_DATA u8 sPetalburgGymSlidingDoorFrameCounter = 0; static EWRAM_DATA u8 gUnknown_0203AB5E = 0; static EWRAM_DATA u16 gUnknown_0203AB60 = 0; static EWRAM_DATA u16 gUnknown_0203AB62 = 0; @@ -100,7 +101,7 @@ static void sub_81395BC(u8 taskId); static void sub_8139620(u8 taskId); static void sub_8139AF4(u8 taskId); static void sub_8139C2C(u16 a1, u8 a2); -static void sub_8139C80(u8 taskId); +static void MoveElevatorWindowLights(u8 taskId); static void sub_813A2DC(u8 taskId); static void sub_813AA60(u16 a0, u16 a1); static void sub_813ACE8(u8 a0, u16 a1); @@ -623,25 +624,26 @@ static void LoadLinkPartnerEventObjectSpritePalette(u8 graphicsId, u8 localEvent } } -static const struct UCoords8 gUnknown_085B2B68[] = { +static const struct UCoords8 sMauvilleGymSwitchCoords[] = { { 7, 22}, {11, 19}, {10, 16}, {15, 16} }; +// Flips the switches on the ground when the player steps on them. void MauvilleGymSpecial1(void) { u8 i; - for (i = 0; i < ARRAY_COUNT(gUnknown_085B2B68); i++) + for (i = 0; i < ARRAY_COUNT(sMauvilleGymSwitchCoords); i++) { if (i == gSpecialVar_0x8004) { - MapGridSetMetatileIdAt(gUnknown_085B2B68[i].x, gUnknown_085B2B68[i].y, 0x206); + MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_ID(MauvilleGym, PressedSwitch)); } else { - MapGridSetMetatileIdAt(gUnknown_085B2B68[i].x, gUnknown_085B2B68[i].y, 0x205); + MapGridSetMetatileIdAt(sMauvilleGymSwitchCoords[i].x, sMauvilleGymSwitchCoords[i].y, METATILE_ID(MauvilleGym, RaisedSwitch)); } } } @@ -655,100 +657,101 @@ void MauvilleGymSpecial2(void) { switch (MapGridGetMetatileIdAt(x, y)) { - case 0x220: - MapGridSetMetatileIdAt(x, y, 0x230); + case METATILE_ID(MauvilleGym, GreenBeamH1_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH1_Off)); break; - case 0x221: - MapGridSetMetatileIdAt(x, y, 0x231); + case METATILE_ID(MauvilleGym, GreenBeamH2_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH2_Off)); break; - case 0x228: - MapGridSetMetatileIdAt(x, y, 0x238); + case METATILE_ID(MauvilleGym, GreenBeamH3_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH3_Off)); break; - case 0x229: - MapGridSetMetatileIdAt(x, y, 0x239); + case METATILE_ID(MauvilleGym, GreenBeamH4_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH4_Off)); break; - case 0x230: - MapGridSetMetatileIdAt(x, y, 0x220); + case METATILE_ID(MauvilleGym, GreenBeamH1_Off): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH1_On)); break; - case 0x231: - MapGridSetMetatileIdAt(x, y, 0x221); + case METATILE_ID(MauvilleGym, GreenBeamH2_Off): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH2_On)); break; - case 0x238: - MapGridSetMetatileIdAt(x, y, 0xe28); + case METATILE_ID(MauvilleGym, GreenBeamH3_Off): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH3_On) | METATILE_COLLISION_MASK); break; - case 0x239: - MapGridSetMetatileIdAt(x, y, 0xe29); + case METATILE_ID(MauvilleGym, GreenBeamH4_Off): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH4_On) | METATILE_COLLISION_MASK); break; - case 0x222: - MapGridSetMetatileIdAt(x, y, 0x232); + case METATILE_ID(MauvilleGym, RedBeamH1_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH1_Off)); break; - case 0x223: - MapGridSetMetatileIdAt(x, y, 0x233); + case METATILE_ID(MauvilleGym, RedBeamH2_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH2_Off)); break; - case 0x22a: - MapGridSetMetatileIdAt(x, y, 0x23a); + case METATILE_ID(MauvilleGym, RedBeamH3_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH3_Off)); break; - case 0x22b: - MapGridSetMetatileIdAt(x, y, 0x23b); + case METATILE_ID(MauvilleGym, RedBeamH4_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH4_Off)); break; - case 0x232: - MapGridSetMetatileIdAt(x, y, 0x222); + case METATILE_ID(MauvilleGym, RedBeamH1_Off): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH1_On)); break; - case 0x233: - MapGridSetMetatileIdAt(x, y, 0x223); + case METATILE_ID(MauvilleGym, RedBeamH2_Off): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH2_On)); break; - case 0x23a: - MapGridSetMetatileIdAt(x, y, 0xe2a); + case METATILE_ID(MauvilleGym, RedBeamH3_Off): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH3_On) | METATILE_COLLISION_MASK); break; - case 0x23b: - MapGridSetMetatileIdAt(x, y, 0xe2b); + case METATILE_ID(MauvilleGym, RedBeamH4_Off): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH4_On) | METATILE_COLLISION_MASK); break; - case 0x240: - MapGridSetMetatileIdAt(x, y, 0xe42); + case METATILE_ID(MauvilleGym, GreenBeamV1_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_On) | METATILE_COLLISION_MASK); break; - case 0x248: - MapGridSetMetatileIdAt(x, y, 0x21a); + case METATILE_ID(MauvilleGym, GreenBeamV2_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, FloorTile)); break; - case 0x241: - MapGridSetMetatileIdAt(x, y, 0xe43); + case METATILE_ID(MauvilleGym, RedBeamV1_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_Off) | METATILE_COLLISION_MASK); break; - case 0x249: - MapGridSetMetatileIdAt(x, y, 0x21a); + case METATILE_ID(MauvilleGym, RedBeamV2_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, FloorTile)); break; - case 0x242: - MapGridSetMetatileIdAt(x, y, 0xe40); + case METATILE_ID(MauvilleGym, PoleBottom_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamV1_On) | METATILE_COLLISION_MASK); break; - case 0x21a: - if (MapGridGetMetatileIdAt(x, y - 1) == 0x240) + case METATILE_ID(MauvilleGym, FloorTile): + if (MapGridGetMetatileIdAt(x, y - 1) == METATILE_ID(MauvilleGym, GreenBeamV1_On)) { - MapGridSetMetatileIdAt(x, y, 0xe48); + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamV2_On) | METATILE_COLLISION_MASK); } else { - MapGridSetMetatileIdAt(x, y, 0xe49); + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamV2_On) | METATILE_COLLISION_MASK); } break; - case 0x243: - MapGridSetMetatileIdAt(x, y, 0xe41); + case METATILE_ID(MauvilleGym, PoleBottom_Off): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamV1_On) | METATILE_COLLISION_MASK); break; - case 0x251: - MapGridSetMetatileIdAt(x, y, 0xe50); + case METATILE_ID(MauvilleGym, PoleTop_Off): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleTop_On) | METATILE_COLLISION_MASK); break; - case 0x250: - MapGridSetMetatileIdAt(x, y, 0x251); + case METATILE_ID(MauvilleGym, PoleTop_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleTop_Off)); break; } } } } +// Presses all switches and deactivates all beams. void MauvilleGymSpecial3(void) { int i, x, y; - const struct UCoords8 *switchCoords = gUnknown_085B2B68; - for (i = ARRAY_COUNT(gUnknown_085B2B68) - 1; i >= 0; i--) + const struct UCoords8 *switchCoords = sMauvilleGymSwitchCoords; + for (i = ARRAY_COUNT(sMauvilleGymSwitchCoords) - 1; i >= 0; i--) { - MapGridSetMetatileIdAt(switchCoords->x, switchCoords->y, 0x206); + MapGridSetMetatileIdAt(switchCoords->x, switchCoords->y, METATILE_ID(MauvilleGym, PressedSwitch)); switchCoords++; } for (y = 12; y < 24; y++) @@ -757,42 +760,42 @@ void MauvilleGymSpecial3(void) { switch (MapGridGetMetatileIdAt(x, y)) { - case 0x220: - MapGridSetMetatileIdAt(x, y, 0x230); + case METATILE_ID(MauvilleGym, GreenBeamH1_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH1_Off)); break; - case 0x221: - MapGridSetMetatileIdAt(x, y, 0x231); + case METATILE_ID(MauvilleGym, GreenBeamH2_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH2_Off)); break; - case 0x228: - MapGridSetMetatileIdAt(x, y, 0x238); + case METATILE_ID(MauvilleGym, GreenBeamH3_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH3_Off)); break; - case 0x229: - MapGridSetMetatileIdAt(x, y, 0x239); + case METATILE_ID(MauvilleGym, GreenBeamH4_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, GreenBeamH4_Off)); break; - case 0x222: - MapGridSetMetatileIdAt(x, y, 0x232); + case METATILE_ID(MauvilleGym, RedBeamH1_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH1_Off)); break; - case 0x223: - MapGridSetMetatileIdAt(x, y, 0x233); + case METATILE_ID(MauvilleGym, RedBeamH2_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH2_Off)); break; - case 0x22a: - MapGridSetMetatileIdAt(x, y, 0x23a); + case METATILE_ID(MauvilleGym, RedBeamH3_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH3_Off)); break; - case 0x22b: - MapGridSetMetatileIdAt(x, y, 0x23b); + case METATILE_ID(MauvilleGym, RedBeamH4_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, RedBeamH4_Off)); break; - case 0x240: - MapGridSetMetatileIdAt(x, y, 0xe42); + case METATILE_ID(MauvilleGym, GreenBeamV1_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_On) | METATILE_COLLISION_MASK); break; - case 0x241: - MapGridSetMetatileIdAt(x, y, 0xe43); + case METATILE_ID(MauvilleGym, RedBeamV1_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleBottom_Off) | METATILE_COLLISION_MASK); break; - case 0x248: - case 0x249: - MapGridSetMetatileIdAt(x, y, 0x21a); + case METATILE_ID(MauvilleGym, GreenBeamV2_On): + case METATILE_ID(MauvilleGym, RedBeamV2_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, FloorTile)); break; - case 0x250: - MapGridSetMetatileIdAt(x, y, 0x251); + case METATILE_ID(MauvilleGym, PoleTop_On): + MapGridSetMetatileIdAt(x, y, METATILE_ID(MauvilleGym, PoleTop_Off)); break; } } @@ -800,23 +803,30 @@ void MauvilleGymSpecial3(void) } static const u8 gUnknown_085B2B78[] = {0, 1, 1, 1, 1}; -static const u16 gUnknown_085B2B7E[] = {0x218, 0x219, 0x21a, 0x21b, 0x21c}; + +static const u16 sPetalburgGymSlidingDoorMetatiles[] = { + METATILE_ID(PetalburgGym, SlidingDoor_Frame0), + METATILE_ID(PetalburgGym, SlidingDoor_Frame1), + METATILE_ID(PetalburgGym, SlidingDoor_Frame2), + METATILE_ID(PetalburgGym, SlidingDoor_Frame3), + METATILE_ID(PetalburgGym, SlidingDoor_Frame4), +}; void PetalburgGymSpecial1(void) { gUnknown_0203AB5C = 0; - gUnknown_0203AB5D = 0; + sPetalburgGymSlidingDoorFrameCounter = 0; PlaySE(SE_KI_GASYAN); CreateTask(Task_PetalburgGym, 8); } static void Task_PetalburgGym(u8 taskId) { - if (gUnknown_085B2B78[gUnknown_0203AB5D] == gUnknown_0203AB5C) + if (gUnknown_085B2B78[sPetalburgGymSlidingDoorFrameCounter] == gUnknown_0203AB5C) { - PetalburgGymFunc(gSpecialVar_0x8004, gUnknown_085B2B7E[gUnknown_0203AB5D]); + PetalburgGymFunc(gSpecialVar_0x8004, sPetalburgGymSlidingDoorMetatiles[sPetalburgGymSlidingDoorFrameCounter]); gUnknown_0203AB5C = 0; - if ((++gUnknown_0203AB5D) == 5) + if ((++sPetalburgGymSlidingDoorFrameCounter) == ARRAY_COUNT(sPetalburgGymSlidingDoorMetatiles)) { DestroyTask(taskId); EnableBothScriptContexts(); @@ -828,74 +838,74 @@ static void Task_PetalburgGym(u8 taskId) } } -static void PetalburgGymFunc(u8 a0, u16 a1) +static void PetalburgGymFunc(u8 roomNumber, u16 metatileId) { - u16 x[4]; - u16 y[4]; + u16 doorCoordsX[4]; + u16 doorCoordsY[4]; u8 i; u8 nDoors = 0; - switch (a0) + switch (roomNumber) { case 1: nDoors = 2; - x[0] = 1; - x[1] = 7; - y[0] = 0x68; - y[1] = 0x68; + doorCoordsX[0] = 1; + doorCoordsX[1] = 7; + doorCoordsY[0] = 104; + doorCoordsY[1] = 104; break; case 2: nDoors = 2; - x[0] = 1; - x[1] = 7; - y[0] = 0x4e; - y[1] = 0x4e; + doorCoordsX[0] = 1; + doorCoordsX[1] = 7; + doorCoordsY[0] = 78; + doorCoordsY[1] = 78; break; case 3: nDoors = 2; - x[0] = 1; - x[1] = 7; - y[0] = 0x5b; - y[1] = 0x5b; + doorCoordsX[0] = 1; + doorCoordsX[1] = 7; + doorCoordsY[0] = 91; + doorCoordsY[1] = 91; break; case 4: nDoors = 1; - x[0] = 7; - y[0] = 0x27; + doorCoordsX[0] = 7; + doorCoordsY[0] = 39; break; case 5: nDoors = 2; - x[0] = 1; - x[1] = 7; - y[0] = 0x34; - y[1] = 0x34; + doorCoordsX[0] = 1; + doorCoordsX[1] = 7; + doorCoordsY[0] = 52; + doorCoordsY[1] = 52; break; case 6: nDoors = 1; - x[0] = 1; - y[0] = 0x41; + doorCoordsX[0] = 1; + doorCoordsY[0] = 65; break; case 7: nDoors = 1; - x[0] = 7; - y[0] = 0xd; + doorCoordsX[0] = 7; + doorCoordsY[0] = 13; break; case 8: nDoors = 1; - x[0] = 1; - y[0] = 0x1a; + doorCoordsX[0] = 1; + doorCoordsY[0] = 26; break; } for (i = 0; i < nDoors; i++) { - MapGridSetMetatileIdAt(x[i] + 7, y[i] + 7, a1 | METATILE_COLLISION_MASK); - MapGridSetMetatileIdAt(x[i] + 7, y[i] + 8, (a1 + 8) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(doorCoordsX[i] + 7, doorCoordsY[i] + 7, metatileId | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(doorCoordsX[i] + 7, doorCoordsY[i] + 8, (metatileId + 8) | METATILE_COLLISION_MASK); } DrawWholeMapView(); } void PetalburgGymSpecial2(void) { - PetalburgGymFunc(gSpecialVar_0x8004, gUnknown_085B2B7E[4]); + PetalburgGymFunc(gSpecialVar_0x8004, sPetalburgGymSlidingDoorMetatiles[4]); } void ShowFieldMessageStringVar4(void) @@ -1067,6 +1077,7 @@ static void PCTurnOnEffect_0(struct Task *task) task->data[3]++; } +// enum pc location, static void PCTurnOnEffect_1(s16 flag, s8 dx, s8 dy) { u16 tileId = 0; @@ -1074,30 +1085,30 @@ static void PCTurnOnEffect_1(s16 flag, s8 dx, s8 dy) { if (gSpecialVar_0x8004 == 0) { - tileId = 0x4; + tileId = METATILE_ID(Building, PC_Off); } else if (gSpecialVar_0x8004 == 1) { - tileId = 0x25a; + tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_Off); } else if (gSpecialVar_0x8004 == 2) { - tileId = 0x259; + tileId = METATILE_ID(BrendansMaysHouse, MayPC_Off); } } else { if (gSpecialVar_0x8004 == 0) { - tileId = 0x5; + tileId = METATILE_ID(Building, PC_On); } else if (gSpecialVar_0x8004 == 1) { - tileId = 0x27f; + tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_On); } else if (gSpecialVar_0x8004 == 2) { - tileId = 0x27e; + tileId = METATILE_ID(BrendansMaysHouse, MayPC_On); } } MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + 7, gSaveBlock1Ptr->pos.y + dy + 7, tileId | METATILE_COLLISION_MASK); @@ -1131,15 +1142,15 @@ static void PCTurnOffEffect(void) } if (gSpecialVar_0x8004 == 0) { - tileId = 0x4; + tileId = METATILE_ID(Building, PC_Off); } else if (gSpecialVar_0x8004 == 1) { - tileId = 0x25a; + tileId = METATILE_ID(BrendansMaysHouse, BrendanPC_Off); } else if (gSpecialVar_0x8004 == 2) { - tileId = 0x259; + tileId = METATILE_ID(BrendansMaysHouse, MayPC_Off); } MapGridSetMetatileIdAt(gSaveBlock1Ptr->pos.x + dx + 7, gSaveBlock1Ptr->pos.y + dy + 7, tileId | METATILE_COLLISION_MASK); DrawWholeMapView(); @@ -1174,13 +1185,13 @@ static void LotteryCornerComputerEffect(struct Task *task) task->data[3] = 0; if (task->data[4] != 0) { - MapGridSetMetatileIdAt(18, 8, 0xe9d); - MapGridSetMetatileIdAt(18, 9, 0xea5); + MapGridSetMetatileIdAt(18, 8, METATILE_ID(Shop, Laptop1_Normal) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(18, 9, METATILE_ID(Shop, Laptop2_Normal) | METATILE_COLLISION_MASK); } else { - MapGridSetMetatileIdAt(18, 8, 0xe58); - MapGridSetMetatileIdAt(18, 9, 0xe60); + MapGridSetMetatileIdAt(18, 8, METATILE_ID(Shop, Laptop1_Flash) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(18, 9, METATILE_ID(Shop, Laptop2_Flash) | METATILE_COLLISION_MASK); } DrawWholeMapView(); task->data[4] ^= 1; @@ -1194,8 +1205,8 @@ static void LotteryCornerComputerEffect(struct Task *task) void EndLotteryCornerComputerEffect(void) { - MapGridSetMetatileIdAt(18, 8, 0xe9d); - MapGridSetMetatileIdAt(18, 9, 0xea5); + MapGridSetMetatileIdAt(18, 8, METATILE_ID(Shop, Laptop1_Normal) | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(18, 9, METATILE_ID(Shop, Laptop2_Normal) | METATILE_COLLISION_MASK); DrawWholeMapView(); } @@ -1433,7 +1444,7 @@ void PutZigzagoonInPlayerParty(void) u16 monData; CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, 0x20, FALSE, 0, FALSE, 0); monData = TRUE; - SetMonData(&gPlayerParty[0], MON_DATA_ALT_ABILITY, &monData); + SetMonData(&gPlayerParty[0], MON_DATA_ABILITY_NUM, &monData); monData = MOVE_TACKLE; SetMonData(&gPlayerParty[0], MON_DATA_MOVE1, &monData); monData = MOVE_NONE; @@ -1711,17 +1722,42 @@ const u8 *const gElevatorFloorsTable[] = { gText_Rooftop }; -const u16 gUnknown_085B2BF4[][3] = +static const u16 sElevatorWindowTiles_Ascending[][3] = { - {0x0329, 0x032a, 0x032b}, - {0x0331, 0x0332, 0x0333}, - {0x0339, 0x033a, 0x033b}, + { + METATILE_ID(BattleFrontier, Elevator_Top0), + METATILE_ID(BattleFrontier, Elevator_Top1), + METATILE_ID(BattleFrontier, Elevator_Top2) + }, + { + METATILE_ID(BattleFrontier, Elevator_Mid0), + METATILE_ID(BattleFrontier, Elevator_Mid1), + METATILE_ID(BattleFrontier, Elevator_Mid2) + }, + { + METATILE_ID(BattleFrontier, Elevator_Bottom0), + METATILE_ID(BattleFrontier, Elevator_Bottom1), + METATILE_ID(BattleFrontier, Elevator_Bottom2) + }, }; -const u16 gUnknown_085B2C06[][3] = + +static const u16 sElevatorWindowTiles_Descending[][3] = { - {0x0329, 0x032b, 0x032a}, - {0x0331, 0x0333, 0x0332}, - {0x0339, 0x033b, 0x033a}, + { + METATILE_ID(BattleFrontier, Elevator_Top0), + METATILE_ID(BattleFrontier, Elevator_Top2), + METATILE_ID(BattleFrontier, Elevator_Top1) + }, + { + METATILE_ID(BattleFrontier, Elevator_Mid0), + METATILE_ID(BattleFrontier, Elevator_Mid2), + METATILE_ID(BattleFrontier, Elevator_Mid1) + }, + { + METATILE_ID(BattleFrontier, Elevator_Bottom0), + METATILE_ID(BattleFrontier, Elevator_Bottom2), + METATILE_ID(BattleFrontier, Elevator_Bottom1) + }, }; void SetDepartmentStoreFloorVar(void) @@ -1864,21 +1900,21 @@ void sub_8139C10(void) RemoveWindow(gUnknown_0203AB5E); } -static void sub_8139C2C(u16 a1, u8 a2) +static void sub_8139C2C(u16 a1, bool8 descending) { static const u8 gUnknown_085B2C21[] = { 0x03, 0x06, 0x09, 0x0c, 0x0f, 0x12, 0x15, 0x18, 0x1b }; - if (FuncIsActiveTask(sub_8139C80) != TRUE) + if (FuncIsActiveTask(MoveElevatorWindowLights) != TRUE) { - u8 taskId = CreateTask(sub_8139C80, 8); + u8 taskId = CreateTask(MoveElevatorWindowLights, 8); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = a2; + gTasks[taskId].data[2] = descending; gTasks[taskId].data[3] = gUnknown_085B2C21[a1]; } } -static void sub_8139C80(u8 taskId) +static void MoveElevatorWindowLights(u8 taskId) { u8 x, y; s16 *data = gTasks[taskId].data; @@ -1886,13 +1922,13 @@ static void sub_8139C80(u8 taskId) if (data[1] == 6) { data[0]++; - if (data[2] == 0) + if (data[2] == FALSE) { for (y = 0; y < 3; y++) { for (x = 0; x < 3; x++) { - MapGridSetMetatileIdAt(x + 8, y + 7, gUnknown_085B2BF4[y][data[0] % 3] | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(x + 8, y + 7, sElevatorWindowTiles_Ascending[y][data[0] % 3] | METATILE_COLLISION_MASK); } } } @@ -1902,7 +1938,7 @@ static void sub_8139C80(u8 taskId) { for (x = 0; x < 3; x++) { - MapGridSetMetatileIdAt(x + 8, y + 7, gUnknown_085B2C06[y][data[0] % 3] | METATILE_COLLISION_MASK); + MapGridSetMetatileIdAt(x + 8, y + 7, sElevatorWindowTiles_Descending[y][data[0] % 3] | METATILE_COLLISION_MASK); } } } diff --git a/src/field_tasks.c b/src/field_tasks.c index 22b8697d8..63539e475 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -19,6 +19,7 @@ #include "constants/items.h" #include "constants/songs.h" #include "constants/vars.h" +#include "constants/metatile_labels.h" struct PacifidlogMetatileOffsets { @@ -50,26 +51,26 @@ static const TaskFunc sPerStepCallbacks[] = // they are in pairs but declared as 1D array static const struct PacifidlogMetatileOffsets sHalfSubmergedBridgeMetatileOffsets[] = { - { 0, 0, 0x259}, { 0, 1, 0x261}, - { 0, -1, 0x259}, { 0, 0, 0x261}, - { 0, 0, 0x252}, { 1, 0, 0x253}, - { -1, 0, 0x252}, { 0, 0, 0x253} + { 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)}, + { 0, -1, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Vertical1)}, + { 0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)}, + {-1, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, HalfSubmergedLogs_Horizontal1)} }; static const struct PacifidlogMetatileOffsets sFullySubmergedBridgeMetatileOffsets[] = { - { 0, 0, 0x25A}, { 0, 1, 0x262}, - { 0, -1, 0x25A}, { 0, 0, 0x262}, - { 0, 0, 0x254}, { 1, 0, 0x255}, - { -1, 0, 0x254}, { 0, 0, 0x255} + { 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)}, + { 0, -1, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Vertical1)}, + { 0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)}, + {-1, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, SubmergedLogs_Horizontal1)} }; static const struct PacifidlogMetatileOffsets sFloatingBridgeMetatileOffsets[] = { - { 0, 0, 0x258}, { 0, 1, 0x260}, - { 0, -1, 0x258}, { 0, 0, 0x260}, - { 0, 0, 0x250}, { 1, 0, 0x251}, - { -1, 0, 0x250}, { 0, 0, 0x251} + { 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, {0, 1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)}, + { 0, -1, METATILE_ID(Pacifidlog, FloatingLogs_Vertical0)}, {0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Vertical1)}, + { 0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, {1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)}, + {-1, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal0)}, {0, 0, METATILE_ID(Pacifidlog, FloatingLogs_Horizontal1)} }; // Each element corresponds to a y coordinate row in the sootopolis gym 1F map. @@ -103,7 +104,12 @@ static const u16 sSootopolisGymIceRowVars[] = 0 }; -static const u16 sMuddySlopeMetatiles[] = {0xe8, 0xeb, 0xea, 0xe9}; +static const u16 sMuddySlopeMetatiles[] = { + METATILE_ID(General, MuddySlope_Frame0), + METATILE_ID(General, MuddySlope_Frame3), + METATILE_ID(General, MuddySlope_Frame2), + METATILE_ID(General, MuddySlope_Frame1) +}; static void Task_RunPerStepCallback(u8 taskId) { @@ -374,11 +380,11 @@ static void SetLoweredForetreeBridgeMetatile(s16 x, s16 y) { switch (MapGridGetMetatileIdAt(x, y)) { - case 0x24e: - MapGridSetMetatileIdAt(x, y, 0x24f); + case METATILE_ID(Fortree, BridgeOverGrass_Raised): + MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverGrass_Lowered)); break; - case 0x256: - MapGridSetMetatileIdAt(x, y, 0x257); + case METATILE_ID(Fortree, BridgeOverTrees_Raised): + MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverTrees_Lowered)); break; } } @@ -391,11 +397,11 @@ static void SetNormalFortreeBridgeMetatile(s16 x, s16 y) { switch (MapGridGetMetatileIdAt(x, y)) { - case 0x24f: - MapGridSetMetatileIdAt(x, y, 0x24e); + case METATILE_ID(Fortree, BridgeOverGrass_Lowered): + MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverGrass_Raised)); break; - case 0x257: - MapGridSetMetatileIdAt(x, y, 0x256); + case METATILE_ID(Fortree, BridgeOverTrees_Lowered): + MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, BridgeOverTrees_Raised)); break; } } @@ -523,7 +529,7 @@ void SetSootopolisGymCrackedIceMetatiles(void) for (y = 0; y < height; y++) { if (IsIcePuzzleCoordVisited(x, y) == TRUE) - MapGridSetMetatileIdAt(x + 7, y + 7, 0x20e); + MapGridSetMetatileIdAt(x + 7, y + 7, METATILE_ID(SootopolisGym, Ice_Cracked)); } } } @@ -578,7 +584,7 @@ static void SootopolisGymIcePerStepCallback(u8 taskId) x = data[4]; y = data[5]; PlaySE(SE_RU_BARI); - MapGridSetMetatileIdAt(x, y, 0x20e); + MapGridSetMetatileIdAt(x, y, METATILE_ID(SootopolisGym, Ice_Cracked)); CurrentMapDrawMetatileAt(x, y); MarkIcePuzzleCoordVisited(x - 7, y - 7); data[1] = 1; @@ -594,7 +600,7 @@ static void SootopolisGymIcePerStepCallback(u8 taskId) x = data[4]; y = data[5]; PlaySE(SE_RU_GASYAN); - MapGridSetMetatileIdAt(x, y, 0x206); + MapGridSetMetatileIdAt(x, y, METATILE_ID(SootopolisGym, Ice_Broken)); CurrentMapDrawMetatileAt(x, y); data[1] = 1; } @@ -614,10 +620,10 @@ static void AshGrassPerStepCallback(u8 taskId) data[2] = y; if (MetatileBehavior_IsAshGrass(MapGridGetMetatileBehaviorAt(x, y))) { - if (MapGridGetMetatileIdAt(x, y) == 0x20a) - StartAshFieldEffect(x, y, 0x212, 4); + if (MapGridGetMetatileIdAt(x, y) == METATILE_ID(Fallarbor, AshGrass)) + StartAshFieldEffect(x, y, METATILE_ID(Fallarbor, NormalGrass), 4); else - StartAshFieldEffect(x, y, 0x206, 4); + StartAshFieldEffect(x, y, METATILE_ID(Lavaridge, NormalGrass), 4); if (CheckBagHasItem(ITEM_SOOT_SACK, 1)) { @@ -631,7 +637,7 @@ static void AshGrassPerStepCallback(u8 taskId) static void SetCrackedFloorHoleMetatile(s16 x, s16 y) { - MapGridSetMetatileIdAt(x, y, MapGridGetMetatileIdAt(x, y) == 0x22f ? 0x206 : 0x237); + MapGridSetMetatileIdAt(x, y, MapGridGetMetatileIdAt(x, y) == 0x22f ? 0x206 : 0x237);// unsure what these are referring to CurrentMapDrawMetatileAt(x, y); } @@ -686,7 +692,7 @@ static void SetMuddySlopeMetatile(s16 *data, s16 x, s16 y) MapGridSetMetatileIdAt(x, y, tile); CurrentMapDrawMetatileAt(x, y); - MapGridSetMetatileIdAt(x, y, 0xe8); + MapGridSetMetatileIdAt(x, y, METATILE_ID(General, MuddySlope_Frame0)); } static void Task_MuddySlope(u8 taskId) diff --git a/src/field_weather.c b/src/field_weather.c index 814e85ef4..024b6631f 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -68,7 +68,7 @@ static u8 None_Finish(void); EWRAM_DATA struct Weather gWeather = {0}; EWRAM_DATA static u8 sFieldEffectPaletteGammaTypes[32] = {0}; -IWRAM_DATA static const u8 *sPaletteGammaTypes; +static const u8 *sPaletteGammaTypes; // The drought weather effect uses a precalculated color lookup table. Presumably this // is because the underlying color shift calculation is slow. diff --git a/src/fire.c b/src/fire.c index d428dc13b..2998d46ca 100644 --- a/src/fire.c +++ b/src/fire.c @@ -891,6 +891,7 @@ static void sub_81094D0(u8 taskId) // animate Move_ERUPTION? break; default: + break; } } diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index be655b86a..3115ff231 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -20,6 +20,7 @@ #include "constants/event_objects.h" #include "constants/field_effects.h" #include "constants/songs.h" +#include "constants/metatile_labels.h" extern struct MapPosition gPlayerFacingPosition; @@ -29,42 +30,6 @@ extern const u8 FarawayIsland_Interior_EventScript_267EDB[]; extern const u8 gFieldEffectPic_CutGrass[]; extern const u16 gFieldEffectObjectPalette6[]; -// tileset 0 as first -#define METATILE_ID_GRASS 0x1 -#define METATILE_ID_POKE_GRASS 0xD - -#define METATILE_ID_POKE_GRASS_TREE_UP 0x25 -#define METATILE_ID_GRASS_TREE_UP 0xE - -#define METATILE_ID_POKE_GRASS_TREE_LEFT 0x1C6 -#define METATILE_ID_POKE_GRASS_TREE_RIGHT 0x1C7 - -#define METATILE_ID_GRASS_TREE_LEFT 0x1CE -#define METATILE_ID_GRASS_TREE_RIGHT 0x1CF - -#define METATILE_ID_POKE_LONG_GRASS 0x15 - -// tileset 6 as second -#define METATILE_ID_POKE_STEP_LAVA_GRASS 0x206 -#define METATILE_ID_POKE_LAVA_GRASS 0x207 -#define METATILE_ID_LAVA_FIELD 0x271 - -// tileset 7 as second -#define METATILE_ID_POKE_ASH_GRASS 0x20A -#define METATILE_ID_POKE_STEP_ASH_GRASS 0x212 -#define METATILE_ID_ASH 0x218 - -// tileset 8 as second -#define METATILE_ID_POKE_LONG_GRASS_START 0x208 - -#define METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS 0x279 -#define METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS 0x27A -#define METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS 0x27B - -#define METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS 0x281 -#define METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS 0x282 -#define METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS 0x283 - // cut 'square' defines #define CUT_NORMAL_SIDE 3 #define CUT_NORMAL_AREA CUT_NORMAL_SIDE * CUT_NORMAL_SIDE @@ -94,11 +59,11 @@ static void CutGrassSpriteCallbackEnd(struct Sprite *); static void HandleLongGrassOnHyper(u8, s16, s16); // IWRAM variables -static IWRAM_DATA u8 sCutSquareSide; -static IWRAM_DATA u8 sTileCountFromPlayer_X; -static IWRAM_DATA u8 sTileCountFromPlayer_Y; -static IWRAM_DATA u32 sUnused; -static IWRAM_DATA bool8 sHyperCutTiles[CUT_HYPER_AREA]; +static u8 sCutSquareSide; +static u8 sTileCountFromPlayer_X; +static u8 sTileCountFromPlayer_Y; +static u32 sUnused; +static bool8 sHyperCutTiles[CUT_HYPER_AREA]; // EWRAM variables static EWRAM_DATA u8 *sCutGrassSpriteArrayPtr = NULL; @@ -390,36 +355,36 @@ static void SetCutGrassMetatile(s16 x, s16 y) switch (metatileId) { - case METATILE_ID_POKE_LONG_GRASS_START: - case METATILE_ID_POKE_LONG_GRASS: - case METATILE_ID_POKE_GRASS: - MapGridSetMetatileIdAt(x, y, METATILE_ID_GRASS); + case METATILE_ID(Fortree, LongGrass_Root): + case METATILE_ID(General, LongGrass): + case METATILE_ID(General, TallGrass): + MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass)); break; - case METATILE_ID_POKE_GRASS_TREE_LEFT: - MapGridSetMetatileIdAt(x, y, METATILE_ID_GRASS_TREE_LEFT); + case METATILE_ID(General, TallGrass_TreeLeft): + MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass_TreeLeft)); break; - case METATILE_ID_POKE_GRASS_TREE_RIGHT: - MapGridSetMetatileIdAt(x, y, METATILE_ID_GRASS_TREE_RIGHT); + case METATILE_ID(General, TallGrass_TreeRight): + MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass_TreeRight)); break; - case METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS: - MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS); + case METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft): + MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft)); break; - case METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS: - MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS); + case METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid): + MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid)); break; - case METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS: - MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS); + case METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight): + MapGridSetMetatileIdAt(x, y, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight)); break; - case METATILE_ID_POKE_STEP_LAVA_GRASS: - case METATILE_ID_POKE_LAVA_GRASS: - MapGridSetMetatileIdAt(x, y, METATILE_ID_LAVA_FIELD); + case METATILE_ID(Lavaridge, NormalGrass): + case METATILE_ID(Lavaridge, AshGrass): + MapGridSetMetatileIdAt(x, y, METATILE_ID(Lavaridge, LavaField)); break; - case METATILE_ID_POKE_STEP_ASH_GRASS: - case METATILE_ID_POKE_ASH_GRASS: - MapGridSetMetatileIdAt(x, y, METATILE_ID_ASH); + case METATILE_ID(Fallarbor, NormalGrass): + case METATILE_ID(Fallarbor, AshGrass): + MapGridSetMetatileIdAt(x, y, METATILE_ID(Fallarbor, AshField)); break; - case METATILE_ID_POKE_GRASS_TREE_UP: - MapGridSetMetatileIdAt(x, y, METATILE_ID_GRASS_TREE_UP); + case METATILE_ID(General, TallGrass_TreeUp): + MapGridSetMetatileIdAt(x, y, METATILE_ID(General, Grass_TreeUp)); break; } } @@ -437,13 +402,13 @@ static u8 GetLongGrassCaseAt(s16 x, s16 y) { u16 metatileId = MapGridGetMetatileIdAt(x, y); - if (metatileId == METATILE_ID_GRASS) + if (metatileId == METATILE_ID(General, Grass)) return LONG_GRASS_FIELD; - else if (metatileId == METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS) + else if (metatileId == METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft)) return LONG_GRASS_BASE_LEFT; - else if (metatileId == METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS) + else if (metatileId == METATILE_ID(Fortree, SecretBase_LongGrass_TopMid)) return LONG_GRASS_BASE_CENTER; - else if (metatileId == METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS) + else if (metatileId == METATILE_ID(Fortree, SecretBase_LongGrass_TopRight)) return LONG_GRASS_BASE_RIGHT; else return LONG_GRASS_NONE; @@ -457,34 +422,34 @@ static void SetCutGrassMetatiles(s16 x, s16 y) for (i = 0; i < sCutSquareSide; i++) { s16 currentX = x + i; - if (MapGridGetMetatileIdAt(currentX, y) == METATILE_ID_POKE_LONG_GRASS) + if (MapGridGetMetatileIdAt(currentX, y) == METATILE_ID(General, LongGrass)) { switch (GetLongGrassCaseAt(currentX, y + 1)) { case LONG_GRASS_FIELD: - MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_POKE_LONG_GRASS_START); + MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, LongGrass_Root)); break; case LONG_GRASS_BASE_LEFT: - MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS); + MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft)); break; case LONG_GRASS_BASE_CENTER: - MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS); + MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid)); break; case LONG_GRASS_BASE_RIGHT: - MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS); + MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight)); break; } } - if (MapGridGetMetatileIdAt(currentX, lowerY) == METATILE_ID_GRASS) + if (MapGridGetMetatileIdAt(currentX, lowerY) == METATILE_ID(General, Grass)) { - if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_POKE_LONG_GRASS_START) - MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_GRASS); - if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS) - MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS); - if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS) - MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS); - if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS) - MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS); + if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, LongGrass_Root)) + MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(General, Grass)); + if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft)) + MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft)); + if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid)) + MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid)); + if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight)) + MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight)); } } @@ -521,62 +486,62 @@ static void HandleLongGrassOnHyper(u8 caseId, s16 x, s16 y) if (arr[0] == TRUE) { - if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_POKE_LONG_GRASS_START) - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_GRASS); - if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS) - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS); - if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS) - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS); - if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS) - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS); + if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, LongGrass_Root)) + MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(General, Grass)); + if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft)) + MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft)); + if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid)) + MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid)); + if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight)) + MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight)); } if (arr[1] == TRUE) { - if (MapGridGetMetatileIdAt(newX, y + 2) == METATILE_ID_POKE_LONG_GRASS) + if (MapGridGetMetatileIdAt(newX, y + 2) == METATILE_ID(General, LongGrass)) { switch (GetLongGrassCaseAt(newX, y + 3)) { case LONG_GRASS_FIELD: - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_POKE_LONG_GRASS_START); + MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, LongGrass_Root)); break; case LONG_GRASS_BASE_LEFT: - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS); + MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft)); break; case LONG_GRASS_BASE_CENTER: - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS); + MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid)); break; case LONG_GRASS_BASE_RIGHT: - MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS); + MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight)); break; } } - if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_POKE_LONG_GRASS_START) - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_GRASS); - if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS) - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS); - if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS) - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS); - if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS) - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS); + if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, LongGrass_Root)) + MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(General, Grass)); + if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft)) + MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft)); + if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid)) + MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid)); + if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight)) + MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight)); } if (arr[2] == TRUE) { - if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_POKE_LONG_GRASS) + if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID(General, LongGrass)) { switch (GetLongGrassCaseAt(newX, y + 4)) { case LONG_GRASS_FIELD: - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_POKE_LONG_GRASS_START); + MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, LongGrass_Root)); break; case LONG_GRASS_BASE_LEFT: - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS); + MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft)); break; case LONG_GRASS_BASE_CENTER: - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS); + MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid)); break; case LONG_GRASS_BASE_RIGHT: - MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS); + MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight)); break; } } @@ -630,16 +595,16 @@ void FixLongGrassMetatilesWindowTop(s16 x, s16 y) switch (GetLongGrassCaseAt(x, y + 1)) { case LONG_GRASS_FIELD: - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_POKE_LONG_GRASS_START); + MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, LongGrass_Root)); break; case LONG_GRASS_BASE_LEFT: - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS); + MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft)); break; case LONG_GRASS_BASE_CENTER: - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS); + MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid)); break; case LONG_GRASS_BASE_RIGHT: - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS); + MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight)); break; } } @@ -647,7 +612,7 @@ void FixLongGrassMetatilesWindowTop(s16 x, s16 y) void FixLongGrassMetatilesWindowBottom(s16 x, s16 y) { - if (MapGridGetMetatileIdAt(x, y) == METATILE_ID_GRASS) + if (MapGridGetMetatileIdAt(x, y) == METATILE_ID(General, Grass)) { u8 metatileBehavior = MapGridGetMetatileBehaviorAt(x, y + 1); if (MetatileBehavior_IsLongGrassSouthEdge(metatileBehavior)) @@ -655,17 +620,17 @@ void FixLongGrassMetatilesWindowBottom(s16 x, s16 y) s32 metatileId = MapGridGetMetatileIdAt(x, y + 1); switch (metatileId) { - case METATILE_ID_POKE_LONG_GRASS_START: - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_GRASS); + case METATILE_ID(Fortree, LongGrass_Root): + MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(General, Grass)); break; - case METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS: - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS); + case METATILE_ID(Fortree, SecretBase_LongGrass_BottomLeft): + MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopLeft)); break; - case METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS: - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS); + case METATILE_ID(Fortree, SecretBase_LongGrass_BottomMid): + MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopMid)); break; - case METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS: - MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS); + case METATILE_ID(Fortree, SecretBase_LongGrass_BottomRight): + MapGridSetMetatileIdAt(x, y + 1, METATILE_ID(Fortree, SecretBase_LongGrass_TopRight)); break; } } diff --git a/src/fldeff_escalator.c b/src/fldeff_escalator.c index 7ab2db4db..10fb78ee2 100644 --- a/src/fldeff_escalator.c +++ b/src/fldeff_escalator.c @@ -4,6 +4,7 @@ #include "fieldmap.h" #include "fldeff.h" #include "task.h" +#include "constants/metatile_labels.h" static EWRAM_DATA u8 sEscalatorAnim_TaskId = 0; @@ -53,13 +54,47 @@ static void sub_80E12E8(u8 taskId, const s16 *list, u16 isImpassableFlag) } } -static const u16 gUnknown_08589ABA[] = {0x284, 0x282, 0x280}; -static const u16 gUnknown_08589AC0[] = {0x285, 0x283, 0x281}; -static const u16 gUnknown_08589AC6[] = {0x28C, 0x28A, 0x288}; -static const u16 gUnknown_08589ACC[] = {0x28D, 0x28B, 0x289}; -static const u16 gUnknown_08589AD2[] = {0x2A0, 0x2A2, 0x2A4}; -static const u16 gUnknown_08589AD8[] = {0x2A1, 0x2A3, 0x2A5}; -static const u16 gUnknown_08589ADE[] = {0x2A8, 0x2AA, 0x2AC}; +static const u16 sElevatorMetatiles_1F_0[] = { + METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame2), + METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame1), + METATILE_ID(PokemonCenter, Elevator1F_Tile0_Frame0) +}; + +static const u16 sElevatorMetatiles_1F_1[] = { + METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame2), + METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame1), + METATILE_ID(PokemonCenter, Elevator1F_Tile1_Frame0) +}; + +static const u16 sElevatorMetatiles_1F_2[] = { + METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame2), + METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame1), + METATILE_ID(PokemonCenter, Elevator1F_Tile2_Frame0) +}; + +static const u16 sElevatorMetatiles_1F_3[] = { + METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame2), + METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame1), + METATILE_ID(PokemonCenter, Elevator1F_Tile3_Frame0) +}; + +static const u16 sElevatorMetatiles_2F_0[] = { + METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame0), + METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame1), + METATILE_ID(PokemonCenter, Elevator2F_Tile0_Frame2) +}; + +static const u16 sElevatorMetatiles_2F_1[] = { + METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame0), + METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame1), + METATILE_ID(PokemonCenter, Elevator2F_Tile1_Frame2) +}; + +static const u16 sElevatorMetatiles_2F_2[] = { + METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame0), + METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame1), + METATILE_ID(PokemonCenter, Elevator2F_Tile2_Frame2) +}; static void sub_80E1444(u8 taskId) { @@ -70,25 +105,25 @@ static void sub_80E1444(u8 taskId) switch (data[0]) { case 0: - sub_80E12E8(taskId, gUnknown_08589ABA, 0); + sub_80E12E8(taskId, sElevatorMetatiles_1F_0, 0); break; case 1: - sub_80E12E8(taskId, gUnknown_08589AC0, 0); + sub_80E12E8(taskId, sElevatorMetatiles_1F_1, 0); break; case 2: - sub_80E12E8(taskId, gUnknown_08589AC6, METATILE_COLLISION_MASK); + sub_80E12E8(taskId, sElevatorMetatiles_1F_2, METATILE_COLLISION_MASK); break; case 3: - sub_80E12E8(taskId, gUnknown_08589ACC, 0); + sub_80E12E8(taskId, sElevatorMetatiles_1F_3, 0); break; case 4: - sub_80E12E8(taskId, gUnknown_08589AD2, METATILE_COLLISION_MASK); + sub_80E12E8(taskId, sElevatorMetatiles_2F_0, METATILE_COLLISION_MASK); break; case 5: - sub_80E12E8(taskId, gUnknown_08589AD8, 0); + sub_80E12E8(taskId, sElevatorMetatiles_2F_1, 0); break; case 6: - sub_80E12E8(taskId, gUnknown_08589ADE, 0); + sub_80E12E8(taskId, sElevatorMetatiles_2F_2, 0); break; } diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c index c002f700f..a2457307b 100644 --- a/src/fldeff_flash.c +++ b/src/fldeff_flash.c @@ -219,8 +219,8 @@ static void sub_8137404(u8 taskId) static void sub_8137420(u8 taskId) { SetGpuReg(REG_OFFSET_DISPCNT, 0); - LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000); - LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800); + LZ77UnCompVram(gCaveTransitionTiles, (void *)(VRAM + 0xC000)); + LZ77UnCompVram(gCaveTransitionTilemap, (void *)(VRAM + 0xF800)); LoadPalette(gCaveTransitionPalette_White, 0xE0, 0x20); LoadPalette(gUnknown_085B28A0, 0xE0, 0x10); SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 @@ -304,8 +304,8 @@ static void sub_81375BC(u8 taskId) static void sub_81375D8(u8 taskId) { SetGpuReg(REG_OFFSET_DISPCNT, 0); - LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000); - LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800); + LZ77UnCompVram(gCaveTransitionTiles, (void *)(VRAM + 0xC000)); + LZ77UnCompVram(gCaveTransitionTilemap, (void *)(VRAM + 0xF800)); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); SetGpuReg(REG_OFFSET_BLDY, 0); diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c index 39ed30260..c68a95d41 100644 --- a/src/fldeff_misc.c +++ b/src/fldeff_misc.c @@ -22,6 +22,7 @@ #include "constants/metatile_behaviors.h" #include "constants/songs.h" #include "constants/vars.h" +#include "constants/metatile_labels.h" EWRAM_DATA struct MapPosition gPlayerFacingPosition = {0}; @@ -800,16 +801,16 @@ static void Task_SecretBasePCTurnOn(u8 taskId) { case 4: case 12: - MapGridSetMetatileIdAt(data[0], data[1], 548); + MapGridSetMetatileIdAt(data[0], data[1], 0x224); CurrentMapDrawMetatileAt(data[0], data[1]); break; case 8: case 16: - MapGridSetMetatileIdAt(data[0], data[1], 544); + MapGridSetMetatileIdAt(data[0], data[1], 0x220); CurrentMapDrawMetatileAt(data[0], data[1]); break; case 20: - MapGridSetMetatileIdAt(data[0], data[1], 548); + MapGridSetMetatileIdAt(data[0], data[1], 0x224); CurrentMapDrawMetatileAt(data[0], data[1]); FieldEffectActiveListRemove(FLDEFF_PCTURN_ON); EnableBothScriptContexts(); @@ -828,9 +829,9 @@ void DoSecretBasePCTurnOffEffect(void) PlaySE(SE_PC_OFF); if (!VarGet(VAR_CURRENT_SECRET_BASE)) - MapGridSetMetatileIdAt(x, y, 3616); + MapGridSetMetatileIdAt(x, y, 0x220 | METATILE_COLLISION_MASK); else - MapGridSetMetatileIdAt(x, y, 3617); + MapGridSetMetatileIdAt(x, y, 0x221 | METATILE_COLLISION_MASK); CurrentMapDrawMetatileAt(x, y); } @@ -902,8 +903,8 @@ bool8 FldEff_NopA700(void) static void DoSecretBaseBreakableDoorEffect(s16 x, s16 y) { PlaySE(SE_TOY_KABE); - MapGridSetMetatileIdAt(x, y, 630); - MapGridSetMetatileIdAt(x, y - 1, 622); + MapGridSetMetatileIdAt(x, y, 0x276); + MapGridSetMetatileIdAt(x, y - 1, 0x26E); CurrentMapDrawMetatileAt(x, y); CurrentMapDrawMetatileAt(x, y - 1); } diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c index eca7d045b..c18602c68 100644 --- a/src/fldeff_softboiled.c +++ b/src/fldeff_softboiled.c @@ -32,7 +32,7 @@ bool8 SetUpFieldMove_SoftBoiled(void) void sub_8161560(u8 taskId) { gUnknown_0203CEC8.unkB = 0xA; - gUnknown_0203CEC8.unkA = gUnknown_0203CEC8.unk9; + gUnknown_0203CEC8.unkA = gUnknown_0203CEC8.slotId; sub_81B0FCC(GetCursorSelectionMonId(), 0x1); display_pokemon_menu_message(0x5); gTasks[taskId].func = sub_81B1370; @@ -42,7 +42,7 @@ void sub_81615A8(u8 taskId) { u16 hp; - u8 unk9 = gUnknown_0203CEC8.unk9; + u8 slotId = gUnknown_0203CEC8.slotId; u8 pokemonIndex = gUnknown_0203CEC8.unkA; if(pokemonIndex > 6) { @@ -53,20 +53,20 @@ void sub_81615A8(u8 taskId) } hp = GetMonData(&gPlayerParty[pokemonIndex], MON_DATA_HP); - if(hp == 0 || unk9 == pokemonIndex || GetMonData(&gPlayerParty[pokemonIndex], MON_DATA_MAX_HP) == hp) + if(hp == 0 || slotId == pokemonIndex || GetMonData(&gPlayerParty[pokemonIndex], MON_DATA_MAX_HP) == hp) { sub_81617B8(taskId); return; } PlaySE(SE_KAIFUKU); - sub_81B1F18(taskId, unk9, -1, GetMonData(&gPlayerParty[unk9], MON_DATA_MAX_HP)/5, sub_816166C); + sub_81B1F18(taskId, slotId, -1, GetMonData(&gPlayerParty[slotId], MON_DATA_MAX_HP)/5, sub_816166C); } static void sub_816166C(u8 taskId) { PlaySE(SE_KAIFUKU); - sub_81B1F18(taskId, gUnknown_0203CEC8.unkA, 1, GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_MAX_HP)/5, sub_81616C0); + sub_81B1F18(taskId, gUnknown_0203CEC8.unkA, 1, GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_MAX_HP)/5, sub_81616C0); } static void sub_81616C0(u8 taskId) @@ -83,8 +83,8 @@ static void sub_8161724(u8 taskId) if(sub_81B1BD4() == 1) return; gUnknown_0203CEC8.unkB = 0x0; - sub_81B0FCC(gUnknown_0203CEC8.unk9, 0); - gUnknown_0203CEC8.unk9 = gUnknown_0203CEC8.unkA; + sub_81B0FCC(gUnknown_0203CEC8.slotId, 0); + gUnknown_0203CEC8.slotId = gUnknown_0203CEC8.unkA; sub_81B0FCC(gUnknown_0203CEC8.unkA, 1); ClearStdWindowAndFrameToTransparent(0x6, FALSE); ClearWindowTilemap(0x6); diff --git a/src/ghost.c b/src/ghost.c index 97b86aa76..dd29fb7ca 100644 --- a/src/ghost.c +++ b/src/ghost.c @@ -1148,7 +1148,8 @@ static void sub_8112B78(struct Sprite *sprite) if (++coeffB > 16) coeffB = 16; - if (--(s16)coeffA < 0) + --coeffA; + if ((s16)coeffA < 0) coeffA = 0; SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(coeffA, coeffB)); diff --git a/src/gpu_regs.c b/src/gpu_regs.c index e5ff4fe8f..3bcc4fd93 100644 --- a/src/gpu_regs.c +++ b/src/gpu_regs.c @@ -10,9 +10,9 @@ static u8 sGpuRegBuffer[GPU_REG_BUF_SIZE]; static u8 sGpuRegWaitingList[GPU_REG_BUF_SIZE]; -static bool8 sGpuRegBufferLocked; -static bool8 sShouldSyncRegIE; -static u16 sRegIE; +static volatile bool8 sGpuRegBufferLocked; +static volatile bool8 sShouldSyncRegIE; +static vu16 sRegIE; static void CopyBufferedValueToGpuReg(u8 regOffset); static void SyncRegIE(void); diff --git a/src/graphics.c b/src/graphics.c index 0832101d8..679f16af1 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1172,13 +1172,11 @@ const u32 gBagScreenMale_Pal[] = INCBIN_U32("graphics/interface/bag_screen_male. const u32 gBagScreenFemale_Pal[] = INCBIN_U32("graphics/interface/bag_screen_female.gbapal.lz"); const u32 gBagScreen_Gfx[] = INCBIN_U32("graphics/interface/bag_screen.4bpp.lz"); - -const u32 gUnknown_08D9A88C[] = INCBIN_U32("graphics/unknown/unknown_D9A88C.bin.lz"); +const u32 gBagScreen_GfxTileMap[] = INCBIN_U32("graphics/interface/bag_screen_tilemap.bin.lz"); const u32 gBattleFrontierGfx_PyramidBag[] = INCBIN_U32("graphics/interface/bag_pyramid.4bpp.lz"); -const u32 gUnknown_08D9ADD0[] = INCBIN_U32("graphics/interface/bag_pyramid.gbapal.lz"); // female palette is first and male is second. - -const u32 gUnknown_08D9AE04[] = INCBIN_U32("graphics/unknown/unknown_D9AE04.bin.lz"); +const u32 gBattleFrontierGfx_PyramidBag_Pal[] = INCBIN_U32("graphics/interface/bag_pyramid.gbapal.lz"); // female palette is first and male is second. +const u32 gBattleFrontierGfx_PyramidBagTileMap[] = INCBIN_U32("graphics/interface/bag_pyramid_tilemap.bin.lz"); const u32 gUnknown_08D9AF44[] = INCBIN_U32("graphics/unknown/unknown_D9AF44.gbapal.lz"); diff --git a/src/item.c b/src/item.c index fe8e8eadd..5e505724c 100644 --- a/src/item.c +++ b/src/item.c @@ -18,6 +18,9 @@ extern u16 gUnknown_0203CF30[]; // this file's functions +#if !defined(NONMATCHING) && MODERN +#define static +#endif static bool8 CheckPyramidBagHasItem(u16 itemId, u16 count); static bool8 CheckPyramidBagHasSpace(u16 itemId, u16 count); diff --git a/src/item_menu.c b/src/item_menu.c index bfeeaacd0..5b47a567b 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -53,40 +53,40 @@ void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)()); void CB2_Bag(void); -bool8 setup_bag_menu(void); -void bag_menu_init_bgs(void); -bool8 load_bag_menu_graphics(void); -void setup_bag_menu_textboxes(void); -void allocate_bag_item_list_buffers(void); -void load_bag_item_list_buffers(u8); -void bag_menu_print_pocket_names(const u8*, const u8*); -void bag_menu_copy_pocket_name_to_window(u32); -void bag_menu_draw_pocket_indicator_square(u8, u8); +bool8 SetupBagMenu(void); +void BagMenu_InitBGs(void); +bool8 LoadBagMenu_Graphics(void); +void SetupBagMenu_Textboxes(void); +void AllocateBagItemListBuffers(void); +void LoadBagItemListBuffers(u8); +void BagMenu_PrintPocketNames(const u8*, const u8*); +void BagMenu_CopyPocketNameToWindow(u32); +void BagMenu_DrawPocketIndicatorSquare(u8, u8); void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void); void bag_menu_add_list_scroll_arrow_indicators_maybe(void); -void bag_menu_prepare_tmhm_move_window(void); +void BagMenu_PrepareTMHMMoveWindow(void); bool8 IsWallysBag(void); void Task_WallyTutorialBagMenu(u8); void Task_BagMenu(u8); -void get_name(s8*, u16); +void GetItemName(s8*, u16); u16 ItemIdToBattleMoveId(u16); u16 BagGetItemIdByPocketPosition(u8, u16); -void bag_menu_print_description_box_text(int); -void bag_menu_print_cursor(u8, u8); -void bag_menu_print(u8, u8, const u8*, u8, u8, u8, u8, u8, u8); +void BagMenu_PrintDescription(int); +void BagMenu_PrintCursor(u8, u8); +void BagMenu_Print(u8, u8, const u8*, u8, u8, u8, u8, u8, u8); bool8 ItemId_GetImportance(u16); u16 BagGetQuantityByPocketPosition(u8, u16); void sub_81AB89C(void); -void task_close_bag_menu_2(u8); +void TaskCloseBagMenu_2(u8); u8 AddItemMessageWindow(u8); void bag_menu_RemoveBagItem_message_window(u8); void set_callback3_to_bag(u8); -void sub_81ABC54(u8, s16); -u8 bag_menu_add_window(u8); +void PrintItemDepositAmount(u8, s16); +u8 BagMenu_AddWindow(u8); u8 GetSwitchBagPocketDirection(void); void SwitchBagPocket(u8, s16, u16); bool8 sub_81AC2C0(void); -void bag_menu_swap_items(u8); +void BagMenu_SwapItems(u8); void sub_81AC10C(u8); void sub_81AC3C0(u8); void sub_81AC498(u8); @@ -97,15 +97,15 @@ void sub_81ACB54(u8, u8, u8); void Task_HandleInBattleItemMenuInput(u8); void Task_HandleOutOfBattleItemMenuInput(u8); bool8 sub_81ACDFC(s8); -void bag_menu_remove_window(u8); -void bag_menu_print_there_is_no_pokemon(u8); +void BagMenu_RemoveWindow(u8); +void BagMenu_PrintThereIsNoPokemon(u8); void Task_ChooseHowManyToToss(u8); -void BagMenuConfirmToss(u8); -void bag_menu_yes_no(u8, u8, const struct YesNoFuncTable*); +void BagMenu_TossItems(u8); +void BagMenu_YesNo(u8, u8, const struct YesNoFuncTable*); void Task_ActuallyToss(u8); void ItemMenu_Cancel(u8); void sub_81AD350(u8); -void bag_menu_print_cant_be_held_msg(u8); +void BagMenu_PrintItemCantBeHeld(u8); void bag_menu_AddMoney_window(void); void sub_81AD680(u8); void sub_81AD730(u8); @@ -126,8 +126,8 @@ static void SetPocketListPositions(void); void sub_81ABAE0(void); u8 sub_81AB1F0(u8); void sub_81AC23C(u8); -void bag_menu_change_item_callback(s32 a, bool8 b, struct ListMenu*); -void sub_81AB520(u8 rboxId, int item_index_in_pocket, u8 a); +void BagMenu_MoveCursorCallback(s32 a, bool8 b, struct ListMenu*); +void PrintItemQuantityPlusGFX(u8 rboxId, s32 item_index_in_pocket, u8 a); void ItemMenu_UseOutOfBattle(u8 taskId); void ItemMenu_Toss(u8 taskId); void ItemMenu_Register(u8 taskId); @@ -141,13 +141,13 @@ void unknown_ItemMenu_Give2(u8 taskId); void unknown_ItemMenu_Confirm2(u8 taskId); void unknown_item_menu_type(u8 taskId); void item_menu_type_2(u8 taskId); -void display_sell_item_ask_str(u8 taskId); -void display_deposit_item_ask_str(u8 taskId); +void DisplaySellItemAskString(u8 taskId); +void DisplayDepositItemAskString(u8 taskId); void item_menu_type_b(u8 taskId); -void BagMenuActuallyToss(u8 taskId); -void BagMenuCancelToss(u8 taskId); -void sub_81AD84C(u8 taskId); -void sub_81AD6FC(u8 taskId); +void BagMenu_ConfirmToss(u8 taskId); +void BagMenu_CancelToss(u8 taskId); +void BagMenu_ConfirmSell(u8 taskId); +void BagMenu_CancelSell(u8 taskId); // .rodata @@ -185,8 +185,8 @@ static const struct BgTemplate sBgTemplates_ItemMenu[3] = static const struct ListMenuTemplate sItemListMenu = { .items = NULL, - .moveCursorFunc = bag_menu_change_item_callback, - .itemPrintFunc = sub_81AB520, + .moveCursorFunc = BagMenu_MoveCursorCallback, + .itemPrintFunc = PrintItemQuantityPlusGFX, .totalItems = 0, .maxShowed = 0, .windowId = 0, @@ -204,7 +204,7 @@ static const struct ListMenuTemplate sItemListMenu = .cursorKind = 0 }; -const struct MenuAction gUnknown_08613FB4[] = { +const struct MenuAction sItemMenuActions[] = { {gMenuText_Use, ItemMenu_UseOutOfBattle}, {gMenuText_Toss, ItemMenu_Toss}, {gMenuText_Register, ItemMenu_Register}, @@ -239,10 +239,10 @@ const TaskFunc gUnknown_08614054[] = { unknown_item_menu_type, unknown_item_menu_type, item_menu_type_2, - display_sell_item_ask_str, + DisplaySellItemAskString, unknown_ItemMenu_Confirm, unknown_item_menu_type, - display_deposit_item_ask_str, + DisplayDepositItemAskString, unknown_item_menu_type, unknown_item_menu_type, unknown_item_menu_type, @@ -250,11 +250,11 @@ const TaskFunc gUnknown_08614054[] = { item_menu_type_b }; -const struct YesNoFuncTable gUnknown_08614084 = {BagMenuActuallyToss, BagMenuCancelToss}; +const struct YesNoFuncTable sYesNoTossFunctions = {BagMenu_ConfirmToss, BagMenu_CancelToss}; -const struct YesNoFuncTable gUnknown_0861408C = {sub_81AD84C, sub_81AD6FC}; +const struct YesNoFuncTable sYesNoSellItemFunctions = {BagMenu_ConfirmSell, BagMenu_CancelSell}; -const struct ScrollArrowsTemplate gUnknown_08614094 = {SCROLL_ARROW_LEFT, 0x1C, 16, SCROLL_ARROW_RIGHT, 100, 16, -1, -1, 0x6F, 0x6F, 0}; +const struct ScrollArrowsTemplate gBagScrollArrowsTemplate = {SCROLL_ARROW_LEFT, 0x1C, 16, SCROLL_ARROW_RIGHT, 100, 16, -1, -1, 0x6F, 0x6F, 0}; const u8 gUnknown_086140A4[] = INCBIN_U8("graphics/interface/select_button.4bpp"); @@ -439,8 +439,8 @@ struct TempWallyStruct { u16 pocket; }; -EWRAM_DATA struct UnkBagStruct *gUnknown_0203CE54 = 0; -EWRAM_DATA struct BagStruct gUnknown_0203CE58 = {0}; +EWRAM_DATA struct BagMenuStruct *gBagMenu = 0; +EWRAM_DATA struct BagStruct gBagPositionStruct = {0}; static EWRAM_DATA struct ListBuffer1 *sListBuffer1 = 0; static EWRAM_DATA struct ListBuffer2 *sListBuffer2 = 0; EWRAM_DATA u16 gSpecialVar_ItemId = 0; @@ -453,9 +453,9 @@ extern const u16 gUnknown_0860F074[]; void ResetBagScrollPositions(void) { - gUnknown_0203CE58.pocket = ITEMS_POCKET; - memset(gUnknown_0203CE58.cursorPosition, 0, 10); - memset(gUnknown_0203CE58.scrollPosition, 0, 10); + gBagPositionStruct.pocket = ITEMS_POCKET; + memset(gBagPositionStruct.cursorPosition, 0, 10); + memset(gBagPositionStruct.scrollPosition, 0, 10); } void CB2_BagMenuFromStartMenu(void) @@ -513,28 +513,28 @@ void sub_81AAC70(void) void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)()) { u8 temp; - gUnknown_0203CE54 = AllocZeroed(sizeof(struct UnkBagStruct)); - if (gUnknown_0203CE54 == 0) + gBagMenu = AllocZeroed(sizeof(struct BagMenuStruct)); + if (gBagMenu == 0) { SetMainCallback2(postExitMenuMainCallback2); } else { if (bagMenuType != RETURN_LOCATION_UNCHANGED) - gUnknown_0203CE58.location = bagMenuType; + gBagPositionStruct.location = bagMenuType; if (postExitMenuMainCallback2) - gUnknown_0203CE58.bagCallback = postExitMenuMainCallback2; + gBagPositionStruct.bagCallback = postExitMenuMainCallback2; if (pocketId < POCKETS_COUNT) - gUnknown_0203CE58.pocket = pocketId; - temp = gUnknown_0203CE58.location - (POCKETS_COUNT - 1); + gBagPositionStruct.pocket = pocketId; + temp = gBagPositionStruct.location - (POCKETS_COUNT - 1); if (temp <= 1) - gUnknown_0203CE54->unk81B = 1; - gUnknown_0203CE54->mainCallback2 = 0; - gUnknown_0203CE54->unk81A = 0xFF; - gUnknown_0203CE54->unk81E = -1; - gUnknown_0203CE54->unk81F = -1; - memset(gUnknown_0203CE54->spriteId, 0xFF, sizeof(gUnknown_0203CE54->spriteId)); - memset(gUnknown_0203CE54->windowPointers, 0xFF, 10); + gBagMenu->unk81B = 1; + gBagMenu->mainCallback2 = 0; + gBagMenu->unk81A = 0xFF; + gBagMenu->unk81E = -1; + gBagMenu->unk81F = -1; + memset(gBagMenu->spriteId, 0xFF, sizeof(gBagMenu->spriteId)); + memset(gBagMenu->windowPointers, 0xFF, 10); SetMainCallback2(CB2_Bag); } } @@ -557,10 +557,10 @@ void vblank_cb_bag_menu(void) void CB2_Bag(void) { - while(sub_81221EC() != TRUE && setup_bag_menu() != TRUE && sub_81221AC() != TRUE) {}; + while(sub_81221EC() != TRUE && SetupBagMenu() != TRUE && sub_81221AC() != TRUE) {}; } -bool8 setup_bag_menu(void) +bool8 SetupBagMenu(void) { u32 index; u8 taskId; @@ -598,17 +598,17 @@ bool8 setup_bag_menu(void) gMain.state++; break; case 7: - bag_menu_init_bgs(); - gUnknown_0203CE54->unk834 = 0; + BagMenu_InitBGs(); + gBagMenu->unk834 = 0; gMain.state++; break; case 8: - if (!load_bag_menu_graphics()) + if (!LoadBagMenu_Graphics()) break; gMain.state++; break; case 9: - setup_bag_menu_textboxes(); + SetupBagMenu_Textboxes(); gMain.state++; break; case 10: @@ -618,28 +618,28 @@ bool8 setup_bag_menu(void) gMain.state++; break; case 11: - allocate_bag_item_list_buffers(); + AllocateBagItemListBuffers(); gMain.state++; break; case 12: - load_bag_item_list_buffers(gUnknown_0203CE58.pocket); + LoadBagItemListBuffers(gBagPositionStruct.pocket); gMain.state++; break; case 13: - bag_menu_print_pocket_names(gPocketNamesStringsTable[gUnknown_0203CE58.pocket], 0); - bag_menu_copy_pocket_name_to_window(0); - bag_menu_draw_pocket_indicator_square(gUnknown_0203CE58.pocket, 1); + BagMenu_PrintPocketNames(gPocketNamesStringsTable[gBagPositionStruct.pocket], 0); + BagMenu_CopyPocketNameToWindow(0); + BagMenu_DrawPocketIndicatorSquare(gBagPositionStruct.pocket, 1); gMain.state++; break; case 14: - taskId = sub_81AB1F0(gUnknown_0203CE58.location); - gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); + taskId = sub_81AB1F0(gBagPositionStruct.location); + gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]); gTasks[taskId].data[3] = 0; gTasks[taskId].data[8] = 0; gMain.state++; break; case 15: - AddBagVisualSprite(gUnknown_0203CE58.pocket); + AddBagVisualSprite(gBagPositionStruct.pocket); gMain.state++; break; case 16: @@ -652,7 +652,7 @@ bool8 setup_bag_menu(void) gMain.state++; break; case 18: - bag_menu_prepare_tmhm_move_window(); + BagMenu_PrepareTMHMMoveWindow(); gMain.state++; break; case 19: @@ -672,13 +672,13 @@ bool8 setup_bag_menu(void) return FALSE; } -void bag_menu_init_bgs(void) +void BagMenu_InitBGs(void) { ResetVramOamAndBgCntRegs(); - memset(gUnknown_0203CE54->tilemapBuffer, 0, 0x800); + memset(gBagMenu->tilemapBuffer, 0, 0x800); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, sBgTemplates_ItemMenu, 3); - SetBgTilemapBuffer(2, gUnknown_0203CE54->tilemapBuffer); + SetBgTilemapBuffer(2, gBagMenu->tilemapBuffer); ResetAllBgsCoordinates(); schedule_bg_copy_tilemap_to_vram(2); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); @@ -688,20 +688,20 @@ void bag_menu_init_bgs(void) SetGpuReg(REG_OFFSET_BLDCNT, 0); } -bool8 load_bag_menu_graphics(void) +bool8 LoadBagMenu_Graphics(void) { - switch (gUnknown_0203CE54->unk834) + switch (gBagMenu->unk834) { case 0: reset_temp_tile_data_buffers(); decompress_and_copy_tile_data_to_vram(2, gBagScreen_Gfx, 0, 0, 0); - gUnknown_0203CE54->unk834++; + gBagMenu->unk834++; break; case 1: if (free_temp_tile_data_buffers_if_possible() != TRUE) { - LZDecompressWram(gUnknown_08D9A88C, gUnknown_0203CE54->tilemapBuffer); - gUnknown_0203CE54->unk834++; + LZDecompressWram(gBagScreen_GfxTileMap, gBagMenu->tilemapBuffer); + gBagMenu->unk834++; } break; case 2: @@ -709,22 +709,22 @@ bool8 load_bag_menu_graphics(void) LoadCompressedPalette(gBagScreenFemale_Pal, 0, 0x40); else LoadCompressedPalette(gBagScreenMale_Pal, 0, 0x40); - gUnknown_0203CE54->unk834++; + gBagMenu->unk834++; break; case 3: if (IsWallysBag() == TRUE || gSaveBlock2Ptr->playerGender == MALE) - LoadCompressedSpriteSheet(&gUnknown_0857FB34); + LoadCompressedSpriteSheet(&gBagMaleSpriteSheet); else - LoadCompressedSpriteSheet(&gUnknown_0857FB3C); - gUnknown_0203CE54->unk834++; + LoadCompressedSpriteSheet(&gBagFemaleSpriteSheet); + gBagMenu->unk834++; break; case 4: - LoadCompressedSpritePalette(&gUnknown_0857FB44); - gUnknown_0203CE54->unk834++; + LoadCompressedSpritePalette(&gBagPaletteTable); + gBagMenu->unk834++; break; default: LoadListMenuArrowsGfx(); - gUnknown_0203CE54->unk834 = 0; + gBagMenu->unk834 = 0; return TRUE; } return FALSE; @@ -740,23 +740,23 @@ u8 sub_81AB1F0(u8 a) return taskId; } -void allocate_bag_item_list_buffers(void) +void AllocateBagItemListBuffers(void) { sListBuffer1 = Alloc(sizeof(struct ListBuffer1)); sListBuffer2 = Alloc(sizeof(struct ListBuffer2)); } -void load_bag_item_list_buffers(u8 pocketId) +void LoadBagItemListBuffers(u8 pocketId) { u16 i; struct BagPocket *pocket = &gBagPockets[pocketId]; struct ListMenuItem *subBuffer; - if (!gUnknown_0203CE54->hideCloseBagText) + if (!gBagMenu->hideCloseBagText) { - for (i = 0; i < gUnknown_0203CE54->numItemStacks[pocketId] - 1; i++) + for (i = 0; i < gBagMenu->numItemStacks[pocketId] - 1; i++) { - get_name(sListBuffer2->name[i], pocket->itemSlots[i].itemId); + GetItemName(sListBuffer2->name[i], pocket->itemSlots[i].itemId); subBuffer = sListBuffer1->subBuffers; subBuffer[i].name = sListBuffer2->name[i]; subBuffer[i].id = i; @@ -768,23 +768,23 @@ void load_bag_item_list_buffers(u8 pocketId) } else { - for (i = 0; i < gUnknown_0203CE54->numItemStacks[pocketId]; i++) + for (i = 0; i < gBagMenu->numItemStacks[pocketId]; i++) { - get_name(sListBuffer2->name[i], pocket->itemSlots[i].itemId); + GetItemName(sListBuffer2->name[i], pocket->itemSlots[i].itemId); subBuffer = sListBuffer1->subBuffers; subBuffer[i].name = sListBuffer2->name[i]; subBuffer[i].id = i; } } gMultiuseListMenuTemplate = sItemListMenu; - gMultiuseListMenuTemplate.totalItems = gUnknown_0203CE54->numItemStacks[pocketId]; + gMultiuseListMenuTemplate.totalItems = gBagMenu->numItemStacks[pocketId]; gMultiuseListMenuTemplate.items = sListBuffer1->subBuffers; - gMultiuseListMenuTemplate.maxShowed = gUnknown_0203CE54->numShownItems[pocketId]; + gMultiuseListMenuTemplate.maxShowed = gBagMenu->numShownItems[pocketId]; } -void get_name(s8 *dest, u16 itemId) +void GetItemName(s8 *dest, u16 itemId) { - switch (gUnknown_0203CE58.pocket) + switch (gBagPositionStruct.pocket) { case TMHM_POCKET: StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(itemId)]); @@ -810,27 +810,27 @@ void get_name(s8 *dest, u16 itemId) } } -void bag_menu_change_item_callback(s32 a, bool8 b, struct ListMenu *unused) +void BagMenu_MoveCursorCallback(s32 a, bool8 b, struct ListMenu *unused) { if (b != 1) { PlaySE(SE_SELECT); ShakeBagVisual(); } - if (gUnknown_0203CE54->unk81A == 0xFF) + if (gBagMenu->unk81A == 0xFF) { - RemoveBagItemIconSprite(1 ^ gUnknown_0203CE54->unk81B_1); + RemoveBagItemIconSprite(1 ^ gBagMenu->unk81B_1); if (a != -2) - AddBagItemIconSprite(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, a), gUnknown_0203CE54->unk81B_1); + AddBagItemIconSprite(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, a), gBagMenu->unk81B_1); else - AddBagItemIconSprite(-1, gUnknown_0203CE54->unk81B_1); - gUnknown_0203CE54->unk81B_1 ^= 1; - if (!gUnknown_0203CE54->unk81B_3) - bag_menu_print_description_box_text(a); + AddBagItemIconSprite(-1, gBagMenu->unk81B_1); + gBagMenu->unk81B_1 ^= 1; + if (!gBagMenu->unk81B_3) + BagMenu_PrintDescription(a); } } -void sub_81AB520(u8 rboxId, int item_index_in_pocket, u8 a) +void PrintItemQuantityPlusGFX(u8 rboxId, s32 item_index_in_pocket, u8 a) { u16 itemId; u16 itemQuantity; @@ -838,30 +838,30 @@ void sub_81AB520(u8 rboxId, int item_index_in_pocket, u8 a) int offset; if (item_index_in_pocket != -2) { - if (gUnknown_0203CE54->unk81A != 0xFF) + if (gBagMenu->unk81A != 0xFF) { - if (gUnknown_0203CE54->unk81A == (u8)item_index_in_pocket) - bag_menu_print_cursor(a, 2); + if (gBagMenu->unk81A == (u8)item_index_in_pocket) + BagMenu_PrintCursor(a, 2); else - bag_menu_print_cursor(a, -1); + BagMenu_PrintCursor(a, -1); } - itemId = BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, item_index_in_pocket); - itemQuantity = BagGetQuantityByPocketPosition(gUnknown_0203CE58.pocket + 1, item_index_in_pocket); + itemId = BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, item_index_in_pocket); + itemQuantity = BagGetQuantityByPocketPosition(gBagPositionStruct.pocket + 1, item_index_in_pocket); if (itemId >= ITEM_HM01 && itemId <= ITEM_HM08) BlitBitmapToWindow(rboxId, gBagMenuHMIcon_Gfx, 8, a - 1, 16, 16); - if (gUnknown_0203CE58.pocket == BERRIES_POCKET) + if (gBagPositionStruct.pocket == BERRIES_POCKET) { ConvertIntToDecimalStringN(gStringVar1, itemQuantity, 1, 3); StringExpandPlaceholders(gStringVar4, gText_xVar1); offset = GetStringRightAlignXOffset(7, gStringVar4, 0x77); - bag_menu_print(rboxId, 7, gStringVar4, offset, a, 0, 0, -1, 0); + BagMenu_Print(rboxId, 7, gStringVar4, offset, a, 0, 0, -1, 0); } - else if (gUnknown_0203CE58.pocket != KEYITEMS_POCKET && (unique = ItemId_GetImportance(itemId)) == FALSE) + else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && (unique = ItemId_GetImportance(itemId)) == FALSE) { ConvertIntToDecimalStringN(gStringVar1, itemQuantity, 1, 2); StringExpandPlaceholders(gStringVar4, gText_xVar1); offset = GetStringRightAlignXOffset(7, gStringVar4, 0x77); - bag_menu_print(rboxId, 7, gStringVar4, offset, a, unique, unique, -1, unique); + BagMenu_Print(rboxId, 7, gStringVar4, offset, a, unique, unique, -1, unique); } else { @@ -871,96 +871,96 @@ void sub_81AB520(u8 rboxId, int item_index_in_pocket, u8 a) } } -void bag_menu_print_description_box_text(int a) +void BagMenu_PrintDescription(int a) { const u8 *str; if (a != -2) { - str = ItemId_GetDescription(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, a)); + str = ItemId_GetDescription(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, a)); } else { - StringCopy(gStringVar1, gReturnToXStringsTable[gUnknown_0203CE58.location]); + StringCopy(gStringVar1, gReturnToXStringsTable[gBagPositionStruct.location]); StringExpandPlaceholders(gStringVar4, gText_ReturnToVar1); str = gStringVar4; } FillWindowPixelBuffer(1, PIXEL_FILL(0)); - bag_menu_print(1, 1, str, 3, 1, 0, 0, 0, 0); + BagMenu_Print(1, 1, str, 3, 1, 0, 0, 0, 0); } -void bag_menu_print_cursor_(u8 a, u8 b) +void BagMenu_PrintCursor_(u8 a, u8 b) { - bag_menu_print_cursor(ListMenuGetYCoordForPrintingArrowCursor(a), b); + BagMenu_PrintCursor(ListMenuGetYCoordForPrintingArrowCursor(a), b); } -void bag_menu_print_cursor(u8 a, u8 b) +void BagMenu_PrintCursor(u8 a, u8 b) { if (b == 0xFF) FillWindowPixelRect(0, PIXEL_FILL(0), 0, a, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1)); else - bag_menu_print(0, 1, gText_SelectorArrow2, 0, a, 0, 0, 0, b); + BagMenu_Print(0, 1, gText_SelectorArrow2, 0, a, 0, 0, 0, b); } void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void) { - if (gUnknown_0203CE54->unk81E == 0xFF) - gUnknown_0203CE54->unk81E = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0xAC, 12, 0x94, gUnknown_0203CE54->numItemStacks[gUnknown_0203CE58.pocket] - gUnknown_0203CE54->numShownItems[gUnknown_0203CE58.pocket], 0x6E, 0x6E, &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]); + if (gBagMenu->unk81E == 0xFF) + gBagMenu->unk81E = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0xAC, 12, 0x94, gBagMenu->numItemStacks[gBagPositionStruct.pocket] - gBagMenu->numShownItems[gBagPositionStruct.pocket], 0x6E, 0x6E, &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]); } void sub_81AB824(void) { - if (gUnknown_0203CE54->unk81E != 0xFF) + if (gBagMenu->unk81E != 0xFF) { - RemoveScrollIndicatorArrowPair(gUnknown_0203CE54->unk81E); - gUnknown_0203CE54->unk81E = 0xFF; + RemoveScrollIndicatorArrowPair(gBagMenu->unk81E); + gBagMenu->unk81E = 0xFF; } sub_81AB89C(); } void bag_menu_add_list_scroll_arrow_indicators_maybe(void) { - if (gUnknown_0203CE54->unk81B != 1 && gUnknown_0203CE54->unk81F == 0xFF) - gUnknown_0203CE54->unk81F = AddScrollIndicatorArrowPair(&gUnknown_08614094, &gUnknown_0203CE58.unk6); + if (gBagMenu->unk81B != 1 && gBagMenu->unk81F == 0xFF) + gBagMenu->unk81F = AddScrollIndicatorArrowPair(&gBagScrollArrowsTemplate, &gBagPositionStruct.unk6); } void sub_81AB89C(void) { - if (gUnknown_0203CE54->unk81F != 0xFF) + if (gBagMenu->unk81F != 0xFF) { - RemoveScrollIndicatorArrowPair(gUnknown_0203CE54->unk81F); - gUnknown_0203CE54->unk81F = 0xFF; + RemoveScrollIndicatorArrowPair(gBagMenu->unk81F); + gBagMenu->unk81F = 0xFF; } } -void free_bag_item_list_buffers(void) +void FreeBagItemListBuffers(void) { Free(sListBuffer2); Free(sListBuffer1); FreeAllWindowBuffers(); - Free(gUnknown_0203CE54); + Free(gBagMenu); } void unknown_ItemMenu_Confirm(u8 taskId) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gTasks[taskId].func = task_close_bag_menu_2; + gTasks[taskId].func = TaskCloseBagMenu_2; } -void task_close_bag_menu_2(u8 taskId) +void TaskCloseBagMenu_2(u8 taskId) { s16* data = gTasks[taskId].data; if (!gPaletteFade.active) { - DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); - if (gUnknown_0203CE54->mainCallback2 != 0) - SetMainCallback2(gUnknown_0203CE54->mainCallback2); + DestroyListMenuTask(data[0], &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]); + if (gBagMenu->mainCallback2 != 0) + SetMainCallback2(gBagMenu->mainCallback2); else - SetMainCallback2(gUnknown_0203CE58.bagCallback); + SetMainCallback2(gBagPositionStruct.bagCallback); sub_81AB824(); ResetSpriteData(); FreeAllSpritePalettes(); - free_bag_item_list_buffers(); + FreeBagItemListBuffers(); DestroyTask(taskId); } } @@ -979,17 +979,17 @@ void sub_81AB9A8(u8 pocketId) CompactItemsInBagPocket(pocket); break; } - gUnknown_0203CE54->numItemStacks[pocketId] = 0; + gBagMenu->numItemStacks[pocketId] = 0; for (i = 0; i < pocket->capacity && pocket->itemSlots[i].itemId; i++) - gUnknown_0203CE54->numItemStacks[pocketId]++; + gBagMenu->numItemStacks[pocketId]++; - if (!gUnknown_0203CE54->hideCloseBagText) - gUnknown_0203CE54->numItemStacks[pocketId]++; + if (!gBagMenu->hideCloseBagText) + gBagMenu->numItemStacks[pocketId]++; - if (gUnknown_0203CE54->numItemStacks[pocketId] > 8) - gUnknown_0203CE54->numShownItems[pocketId] = 8; + if (gBagMenu->numItemStacks[pocketId] > 8) + gBagMenu->numShownItems[pocketId] = 8; else - gUnknown_0203CE54->numShownItems[pocketId] = gUnknown_0203CE54->numItemStacks[pocketId]; + gBagMenu->numShownItems[pocketId] = gBagMenu->numItemStacks[pocketId]; } void sub_81ABA6C(void) @@ -1001,7 +1001,7 @@ void sub_81ABA6C(void) void SetInitialScrollAndCursorPositions(u8 pocketId) { - sub_812225C(&gUnknown_0203CE58.scrollPosition[pocketId], &gUnknown_0203CE58.cursorPosition[pocketId], gUnknown_0203CE54->numShownItems[pocketId], gUnknown_0203CE54->numItemStacks[pocketId]); + sub_812225C(&gBagPositionStruct.scrollPosition[pocketId], &gBagPositionStruct.cursorPosition[pocketId], gBagMenu->numShownItems[pocketId], gBagMenu->numItemStacks[pocketId]); } static void SetPocketListPositions(void) @@ -1015,12 +1015,12 @@ void sub_81ABAE0(void) { u8 i; for (i = 0; i < POCKETS_COUNT; i++) - sub_8122298(&gUnknown_0203CE58.scrollPosition[i], &gUnknown_0203CE58.cursorPosition[i], gUnknown_0203CE54->numShownItems[i], gUnknown_0203CE54->numItemStacks[i], 8); + sub_8122298(&gBagPositionStruct.scrollPosition[i], &gBagPositionStruct.cursorPosition[i], gBagMenu->numShownItems[i], gBagMenu->numItemStacks[i], 8); } u8 GetItemListPosition(u8 pocketId) { - return gUnknown_0203CE58.scrollPosition[pocketId] + gUnknown_0203CE58.cursorPosition[pocketId]; + return gBagPositionStruct.scrollPosition[pocketId] + gBagPositionStruct.cursorPosition[pocketId]; } void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void ( *callback)(u8 taskId)) @@ -1033,16 +1033,16 @@ void DisplayItemMessage(u8 taskId, u8 fontId, const u8 *str, void ( *callback)(u schedule_bg_copy_tilemap_to_vram(1); } -void bag_menu_inits_lists_menu(u8 taskId) +void BagMenu_InitListsMenu(u8 taskId) { s16* data = gTasks[taskId].data; - u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]; - u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]; + u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]; + u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; bag_menu_RemoveBagItem_message_window(4); DestroyListMenuTask(data[0], scrollPos, cursorPos); - sub_81AB9A8(gUnknown_0203CE58.pocket); - SetInitialScrollAndCursorPositions(gUnknown_0203CE58.pocket); - load_bag_item_list_buffers(gUnknown_0203CE58.pocket); + sub_81AB9A8(gBagPositionStruct.pocket); + SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket); + LoadBagItemListBuffers(gBagPositionStruct.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); schedule_bg_copy_tilemap_to_vram(0); set_callback3_to_bag(taskId); @@ -1050,12 +1050,12 @@ void bag_menu_inits_lists_menu(u8 taskId) void sub_81ABC3C(u8 a) { - sub_81ABC54(bag_menu_add_window(a), 1); + PrintItemDepositAmount(BagMenu_AddWindow(a), 1); } -void sub_81ABC54(u8 a, s16 b) +void PrintItemDepositAmount(u8 a, s16 b) { - u8 r3 = (gUnknown_0203CE58.pocket == BERRIES_POCKET) ? 3 : 2; + u8 r3 = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2; ConvertIntToDecimalStringN(gStringVar1, b, 2, r3); StringExpandPlaceholders(gStringVar4, gText_xVar1); AddTextPrinterParameterized(a, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 0x28), 2, 0, 0); @@ -1063,7 +1063,7 @@ void sub_81ABC54(u8 a, s16 b) void sub_81ABCC0(int a, int b, int c) { - u8 r3 = (gUnknown_0203CE58.pocket == BERRIES_POCKET) ? 3 : 2; + u8 r3 = (gBagPositionStruct.pocket == BERRIES_POCKET) ? 3 : 2; ConvertIntToDecimalStringN(gStringVar1, b, 2, r3); StringExpandPlaceholders(gStringVar4, gText_xVar1); AddTextPrinterParameterized(a, 1, gStringVar4, 0, 1, -1, 0); @@ -1073,8 +1073,8 @@ void sub_81ABCC0(int a, int b, int c) void Task_BagMenu(u8 taskId) { s16* data = gTasks[taskId].data; - u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]; - u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]; + u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]; + u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; u16 select; if (sub_81221EC() != TRUE && !gPaletteFade.active) { @@ -1092,10 +1092,10 @@ void Task_BagMenu(u8 taskId) if (sub_81AC2C0() == 1) { ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos); - if ((*scrollPos + *cursorPos) != gUnknown_0203CE54->numItemStacks[gUnknown_0203CE58.pocket] - 1) + if ((*scrollPos + *cursorPos) != gBagMenu->numItemStacks[gBagPositionStruct.pocket] - 1) { PlaySE(SE_SELECT); - bag_menu_swap_items(taskId); + BagMenu_SwapItems(taskId); } } return; @@ -1109,7 +1109,7 @@ void Task_BagMenu(u8 taskId) case LIST_NOTHING_CHOSEN: break; case LIST_CANCEL: - if (gUnknown_0203CE58.location == 5) + if (gBagPositionStruct.location == 5) { PlaySE(SE_HAZURE); break; @@ -1121,11 +1121,11 @@ void Task_BagMenu(u8 taskId) default: // A_BUTTON PlaySE(SE_SELECT); sub_81AB824(); - bag_menu_print_cursor_(data[0], 2); + BagMenu_PrintCursor_(data[0], 2); data[1] = listPosition; - data[2] = BagGetQuantityByPocketPosition(gUnknown_0203CE58.pocket + 1, listPosition); - gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, listPosition); - gUnknown_08614054[gUnknown_0203CE58.location](taskId); + data[2] = BagGetQuantityByPocketPosition(gBagPositionStruct.pocket + 1, listPosition); + gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, listPosition); + gUnknown_08614054[gBagPositionStruct.location](taskId); break; } } @@ -1146,7 +1146,7 @@ void set_callback3_to_bag(u8 taskId) u8 GetSwitchBagPocketDirection(void) { u8 LRKeys; - if (gUnknown_0203CE54->unk81B != 0) + if (gBagMenu->unk81B != 0) return 0; LRKeys = GetLRKeysState(); if ((gMain.newKeys & DPAD_LEFT) || LRKeys == 1) @@ -1184,25 +1184,25 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3) { ClearWindowTilemap(0); ClearWindowTilemap(1); - DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); + DestroyListMenuTask(data[0], &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]); schedule_bg_copy_tilemap_to_vram(0); - gSprites[gUnknown_0203CE54->spriteId[2 + (gUnknown_0203CE54->unk81B_1 ^ 1)]].invisible = TRUE; + gSprites[gBagMenu->spriteId[2 + (gBagMenu->unk81B_1 ^ 1)]].invisible = TRUE; sub_81AB824(); } - pocketId = gUnknown_0203CE58.pocket; + pocketId = gBagPositionStruct.pocket; ChangeBagPocketId(&pocketId, deltaBagPocketId); if (deltaBagPocketId == 1) { - bag_menu_print_pocket_names(gPocketNamesStringsTable[gUnknown_0203CE58.pocket], gPocketNamesStringsTable[pocketId]); - bag_menu_copy_pocket_name_to_window(0); + BagMenu_PrintPocketNames(gPocketNamesStringsTable[gBagPositionStruct.pocket], gPocketNamesStringsTable[pocketId]); + BagMenu_CopyPocketNameToWindow(0); } else { - bag_menu_print_pocket_names(gPocketNamesStringsTable[pocketId], gPocketNamesStringsTable[gUnknown_0203CE58.pocket]); - bag_menu_copy_pocket_name_to_window(8); + BagMenu_PrintPocketNames(gPocketNamesStringsTable[pocketId], gPocketNamesStringsTable[gBagPositionStruct.pocket]); + BagMenu_CopyPocketNameToWindow(8); } - bag_menu_draw_pocket_indicator_square(gUnknown_0203CE58.pocket, 0); - bag_menu_draw_pocket_indicator_square(pocketId, 1); + BagMenu_DrawPocketIndicatorSquare(gBagPositionStruct.pocket, 0); + BagMenu_DrawPocketIndicatorSquare(pocketId, 1); FillBgTilemapBufferRect_Palette0(2, 11, 14, 2, 15, 16); schedule_bg_copy_tilemap_to_vram(2); SetBagVisualPocketId(pocketId, 1); @@ -1220,12 +1220,12 @@ void sub_81AC10C(u8 taskId) switch (GetSwitchBagPocketDirection()) { case 1: - ChangeBagPocketId(&gUnknown_0203CE58.pocket, data[11]); + ChangeBagPocketId(&gBagPositionStruct.pocket, data[11]); SwitchTaskToFollowupFunc(taskId); SwitchBagPocket(taskId, -1, 1); return; case 2: - ChangeBagPocketId(&gUnknown_0203CE58.pocket, data[11]); + ChangeBagPocketId(&gBagPositionStruct.pocket, data[11]); SwitchTaskToFollowupFunc(taskId); SwitchBagPocket(taskId, 1, 1); return; @@ -1238,17 +1238,17 @@ void sub_81AC10C(u8 taskId) if (!(++data[12] & 1)) { if (data[11] == 1) - bag_menu_copy_pocket_name_to_window((u8)(data[12] >> 1)); + BagMenu_CopyPocketNameToWindow((u8)(data[12] >> 1)); else - bag_menu_copy_pocket_name_to_window((u8)(8 - (data[12] >> 1))); + BagMenu_CopyPocketNameToWindow((u8)(8 - (data[12] >> 1))); } if (data[12] == 16) data[13]++; break; case 1: - ChangeBagPocketId(&gUnknown_0203CE58.pocket, data[11]); - load_bag_item_list_buffers(gUnknown_0203CE58.pocket); - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); + ChangeBagPocketId(&gBagPositionStruct.pocket, data[11]); + LoadBagItemListBuffers(gBagPositionStruct.pocket); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]); PutWindowTilemap(1); PutWindowTilemap(2); schedule_bg_copy_tilemap_to_vram(0); @@ -1264,7 +1264,7 @@ void sub_81AC23C(u8 a) schedule_bg_copy_tilemap_to_vram(2); } -void bag_menu_draw_pocket_indicator_square(u8 x, u8 is_current_bag) +void BagMenu_DrawPocketIndicatorSquare(u8 x, u8 is_current_bag) { if (is_current_bag == 0) FillBgTilemapBufferRect_Palette0(2, 0x1017, x + 5, 3, 1, 1); @@ -1275,29 +1275,29 @@ void bag_menu_draw_pocket_indicator_square(u8 x, u8 is_current_bag) bool8 sub_81AC2C0(void) { - if (gUnknown_0203CE58.location <= 1) + if (gBagPositionStruct.location <= 1) { - u8 temp = gUnknown_0203CE58.pocket - 2; + u8 temp = gBagPositionStruct.pocket - 2; if (temp > 1) return TRUE; } return FALSE; } -void bag_menu_swap_items(u8 taskId) +void BagMenu_SwapItems(u8 taskId) { s16* data = gTasks[taskId].data; ListMenuSetUnkIndicatorsStructField(data[0], 16, 1); - data[1] = gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket] + gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]; - gUnknown_0203CE54->unk81A = data[1]; - CopyItemName(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, data[1]), gStringVar1); + data[1] = gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket] + gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; + gBagMenu->unk81A = data[1]; + CopyItemName(BagGetItemIdByPocketPosition(gBagPositionStruct.pocket + 1, data[1]), gStringVar1); StringExpandPlaceholders(gStringVar4, gText_MoveVar1Where); FillWindowPixelBuffer(1, PIXEL_FILL(0)); - bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); + BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); sub_80D4FEC(data[1]); sub_81AB89C(); - bag_menu_print_cursor_(data[0], 2); + BagMenu_PrintCursor_(data[0], 2); gTasks[taskId].func = sub_81AC3C0; } @@ -1311,15 +1311,15 @@ void sub_81AC3C0(u8 taskId) if (gMain.newKeys & SELECT_BUTTON) { PlaySE(SE_SELECT); - ListMenuGetScrollAndRow(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); + ListMenuGetScrollAndRow(data[0], &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]); sub_81AC498(taskId); } else { input = ListMenu_ProcessInput(data[0]); - ListMenuGetScrollAndRow(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); + ListMenuGetScrollAndRow(data[0], &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket], &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]); sub_80D4FC8(0); - sub_80D4FEC(gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]); + sub_80D4FEC(gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]); switch (input) { case LIST_NOTHING_CHOSEN: @@ -1342,20 +1342,20 @@ void sub_81AC3C0(u8 taskId) void sub_81AC498(u8 taskId) { s16* data = gTasks[taskId].data; - u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]; - u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]; + u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]; + u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; u16 realPos = (*scrollPos + *cursorPos); if (data[1] == realPos || data[1] == (realPos - 1)) sub_81AC590(taskId); else { - MoveItemSlotInList(gBagPockets[gUnknown_0203CE58.pocket].itemSlots, data[1], realPos); - gUnknown_0203CE54->unk81A = -1; + MoveItemSlotInList(gBagPockets[gBagPositionStruct.pocket].itemSlots, data[1], realPos); + gBagMenu->unk81A = -1; DestroyListMenuTask(data[0], scrollPos, cursorPos); if (data[1] < realPos) - gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]--; - load_bag_item_list_buffers(gUnknown_0203CE58.pocket); + gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]--; + LoadBagItemListBuffers(gBagPositionStruct.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); sub_80D4FC8(1); bag_menu_add_list_scroll_arrow_indicators_maybe(); @@ -1366,14 +1366,14 @@ void sub_81AC498(u8 taskId) void sub_81AC590(u8 taskId) { s16* data = gTasks[taskId].data; - u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]; - u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]; + u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]; + u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; - gUnknown_0203CE54->unk81A = -1; + gBagMenu->unk81A = -1; DestroyListMenuTask(data[0], scrollPos, cursorPos); if (data[1] < (*scrollPos + *cursorPos)) - gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]--; - load_bag_item_list_buffers(gUnknown_0203CE58.pocket); + gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]--; + LoadBagItemListBuffers(gBagPositionStruct.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); sub_80D4FC8(1); bag_menu_add_list_scroll_arrow_indicators_maybe(); @@ -1382,59 +1382,59 @@ void sub_81AC590(u8 taskId) void sub_81AC644(u8 unused) { - switch (gUnknown_0203CE58.location - 1) + switch (gBagPositionStruct.location - 1) { case 0: case 9: if (ItemId_GetBattleUsage(gSpecialVar_ItemId)) { - gUnknown_0203CE54->unk820 = gUnknown_08614042; - gUnknown_0203CE54->unk828 = 2; + gBagMenu->unk820 = gUnknown_08614042; + gBagMenu->unk828 = 2; } else { - gUnknown_0203CE54->unk820 = &gUnknown_08614046; - gUnknown_0203CE54->unk828 = 1; + gBagMenu->unk820 = &gUnknown_08614046; + gBagMenu->unk828 = 1; } break; case 4: - gUnknown_0203CE54->unk820 = gUnknown_08614047; - gUnknown_0203CE54->unk828 = 4; + gBagMenu->unk820 = gUnknown_08614047; + gBagMenu->unk828 = 4; break; case 8: if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY) { - gUnknown_0203CE54->unk820 = gUnknown_0861404B; - gUnknown_0203CE54->unk828 = 2; + gBagMenu->unk820 = gUnknown_0861404B; + gBagMenu->unk828 = 2; } else { - gUnknown_0203CE54->unk820 = &gUnknown_08614046; - gUnknown_0203CE54->unk828 = 1; + gBagMenu->unk820 = &gUnknown_08614046; + gBagMenu->unk828 = 1; } break; case 6: if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY) { - gUnknown_0203CE54->unk820 = gUnknown_0861404D; - gUnknown_0203CE54->unk828 = 2; + gBagMenu->unk820 = gUnknown_0861404D; + gBagMenu->unk828 = 2; } else { - gUnknown_0203CE54->unk820 = &gUnknown_08614046; - gUnknown_0203CE54->unk828 = 1; + gBagMenu->unk820 = &gUnknown_08614046; + gBagMenu->unk828 = 1; } break; case 7: if (!ItemId_GetImportance(gSpecialVar_ItemId) && gSpecialVar_ItemId != ITEM_ENIGMA_BERRY) { - gUnknown_0203CE54->unk820 = gUnknown_0861404F; - gUnknown_0203CE54->unk828 = 2; + gBagMenu->unk820 = gUnknown_0861404F; + gBagMenu->unk828 = 2; } else { - gUnknown_0203CE54->unk820 = &gUnknown_08614046; - gUnknown_0203CE54->unk828 = 1; + gBagMenu->unk820 = &gUnknown_08614046; + gBagMenu->unk828 = 1; } break; case 1: @@ -1444,56 +1444,56 @@ void sub_81AC644(u8 unused) default: if (sub_81221AC() == TRUE || InUnionRoom() == TRUE) { - if (gUnknown_0203CE58.pocket == KEYITEMS_POCKET || !sub_8122148(gSpecialVar_ItemId)) + if (gBagPositionStruct.pocket == KEYITEMS_POCKET || !sub_8122148(gSpecialVar_ItemId)) { - gUnknown_0203CE54->unk820 = &gUnknown_08614046; - gUnknown_0203CE54->unk828 = 1; + gBagMenu->unk820 = &gUnknown_08614046; + gBagMenu->unk828 = 1; } else { - gUnknown_0203CE54->unk820 = gUnknown_08614044; - gUnknown_0203CE54->unk828 = 2; + gBagMenu->unk820 = gUnknown_08614044; + gBagMenu->unk828 = 2; } } else { - switch (gUnknown_0203CE58.pocket) + switch (gBagPositionStruct.pocket) { case ITEMS_POCKET: - gUnknown_0203CE54->unk820 = &gUnknown_0203CE54->unk824; - gUnknown_0203CE54->unk828 = 4; - memcpy(&gUnknown_0203CE54->unk824, &gUnknown_0861402C, 4); + gBagMenu->unk820 = &gBagMenu->unk824; + gBagMenu->unk828 = 4; + memcpy(&gBagMenu->unk824, &gUnknown_0861402C, 4); if (ItemIsMail(gSpecialVar_ItemId) == TRUE) - gUnknown_0203CE54->unk824 = 6; + gBagMenu->unk824 = 6; break; case KEYITEMS_POCKET: - gUnknown_0203CE54->unk820 = &gUnknown_0203CE54->unk824; - gUnknown_0203CE54->unk828 = 4; - memcpy(&gUnknown_0203CE54->unk824, &gUnknown_08614030, 4); + gBagMenu->unk820 = &gBagMenu->unk824; + gBagMenu->unk828 = 4; + memcpy(&gBagMenu->unk824, &gUnknown_08614030, 4); if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId) - gUnknown_0203CE54->unk825 = 8; + gBagMenu->unk825 = 8; if (gSpecialVar_ItemId == ITEM_MACH_BIKE || gSpecialVar_ItemId == ITEM_ACRO_BIKE) { if (TestPlayerAvatarFlags(6)) - gUnknown_0203CE54->unk824 = 7; + gBagMenu->unk824 = 7; } break; case BALLS_POCKET: - gUnknown_0203CE54->unk820 = gUnknown_08614034; - gUnknown_0203CE54->unk828 = 4; + gBagMenu->unk820 = gUnknown_08614034; + gBagMenu->unk828 = 4; break; case TMHM_POCKET: - gUnknown_0203CE54->unk820 = gUnknown_08614038; - gUnknown_0203CE54->unk828 = 4; + gBagMenu->unk820 = gUnknown_08614038; + gBagMenu->unk828 = 4; break; case BERRIES_POCKET: - gUnknown_0203CE54->unk820 = gUnknown_0861403C; - gUnknown_0203CE54->unk828 = 6; + gBagMenu->unk820 = gUnknown_0861403C; + gBagMenu->unk828 = 6; break; } } } - if (gUnknown_0203CE58.pocket == TMHM_POCKET) + if (gBagPositionStruct.pocket == TMHM_POCKET) { ClearWindowTilemap(1); PrintTMHMMoveData(gSpecialVar_ItemId); @@ -1506,34 +1506,34 @@ void sub_81AC644(u8 unused) CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected); FillWindowPixelBuffer(1, PIXEL_FILL(0)); - bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); - } - if (gUnknown_0203CE54->unk828 == 1) - sub_81ACAF8(bag_menu_add_window(0)); - else if (gUnknown_0203CE54->unk828 == 2) - sub_81ACAF8(bag_menu_add_window(1)); - else if (gUnknown_0203CE54->unk828 == 4) - sub_81ACB54(bag_menu_add_window(2), 2, 2); + BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); + } + if (gBagMenu->unk828 == 1) + sub_81ACAF8(BagMenu_AddWindow(0)); + else if (gBagMenu->unk828 == 2) + sub_81ACAF8(BagMenu_AddWindow(1)); + else if (gBagMenu->unk828 == 4) + sub_81ACB54(BagMenu_AddWindow(2), 2, 2); else - sub_81ACB54(bag_menu_add_window(3), 2, 3); + sub_81ACB54(BagMenu_AddWindow(3), 2, 3); } void sub_81ACAF8(u8 a) { - AddItemMenuActionTextPrinters(a, 7, 8, 1, 0, 16, gUnknown_0203CE54->unk828, gUnknown_08613FB4, gUnknown_0203CE54->unk820); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(a, gUnknown_0203CE54->unk828, 0); + AddItemMenuActionTextPrinters(a, 7, 8, 1, 0, 16, gBagMenu->unk828, sItemMenuActions, gBagMenu->unk820); + InitMenuInUpperLeftCornerPlaySoundWhenAPressed(a, gBagMenu->unk828, 0); } void sub_81ACB54(u8 a, u8 b, u8 c) { - sub_8198DBC(a, 7, 8, 1, 0x38, b, c, gUnknown_08613FB4, gUnknown_0203CE54->unk820); + sub_8198DBC(a, 7, 8, 1, 0x38, b, c, sItemMenuActions, gBagMenu->unk820); sub_8199944(a, 0x38, b, c, 0); } void unknown_item_menu_type(u8 taskId) { sub_81AC644(taskId); - if (gUnknown_0203CE54->unk828 <= 2) + if (gBagMenu->unk828 <= 2) gTasks[taskId].func = Task_HandleInBattleItemMenuInput; else gTasks[taskId].func = Task_HandleOutOfBattleItemMenuInput; @@ -1550,11 +1550,11 @@ void Task_HandleInBattleItemMenuInput(u8 taskId) break; case MENU_B_PRESSED: PlaySE(SE_SELECT); - gUnknown_08613FB4[4].func.void_u8(taskId); + sItemMenuActions[4].func.void_u8(taskId); break; default: PlaySE(SE_SELECT); - gUnknown_08613FB4[gUnknown_0203CE54->unk820[r4]].func.void_u8(taskId); + sItemMenuActions[gBagMenu->unk820[r4]].func.void_u8(taskId); break; } } @@ -1575,7 +1575,7 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) } else if (gMain.newKeys & DPAD_DOWN) { - if (cursorPos < (gUnknown_0203CE54->unk828 - 2) && sub_81ACDFC(cursorPos + 2)) + if (cursorPos < (gBagMenu->unk828 - 2) && sub_81ACDFC(cursorPos + 2)) { PlaySE(SE_SELECT); sub_8199134(0, 1); @@ -1600,12 +1600,12 @@ void Task_HandleOutOfBattleItemMenuInput(u8 taskId) else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - gUnknown_08613FB4[gUnknown_0203CE54->unk820[cursorPos]].func.void_u8(taskId); + sItemMenuActions[gBagMenu->unk820[cursorPos]].func.void_u8(taskId); } else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - gUnknown_08613FB4[4].func.void_u8(taskId); + sItemMenuActions[4].func.void_u8(taskId); } } } @@ -1614,41 +1614,41 @@ bool8 sub_81ACDFC(s8 a) { if (a < 0) return FALSE; - if (a > gUnknown_0203CE54->unk828) + if (a > gBagMenu->unk828) return FALSE; - if (gUnknown_0203CE54->unk820[a] == 14) + if (gBagMenu->unk820[a] == 14) return FALSE; return TRUE; } -void bag_menu_remove_some_window(void) +void BagMenu_RemoveSomeWindow(void) { - if (gUnknown_0203CE54->unk828 == 1) - bag_menu_remove_window(0); - else if (gUnknown_0203CE54->unk828 == 2) + if (gBagMenu->unk828 == 1) + BagMenu_RemoveWindow(0); + else if (gBagMenu->unk828 == 2) { - bag_menu_remove_window(1); + BagMenu_RemoveWindow(1); } - else if (gUnknown_0203CE54->unk828 == 4) + else if (gBagMenu->unk828 == 4) { - bag_menu_remove_window(2); + BagMenu_RemoveWindow(2); } else - bag_menu_remove_window(3); + BagMenu_RemoveWindow(3); } void ItemMenu_UseOutOfBattle(u8 taskId) { if (ItemId_GetFieldFunc(gSpecialVar_ItemId)) { - bag_menu_remove_some_window(); + BagMenu_RemoveSomeWindow(); if (CalculatePlayerPartyCount() == 0 && ItemId_GetType(gSpecialVar_ItemId) == 1) - bag_menu_print_there_is_no_pokemon(taskId); + BagMenu_PrintThereIsNoPokemon(taskId); else { FillWindowPixelBuffer(1, PIXEL_FILL(0)); schedule_bg_copy_tilemap_to_vram(0); - if (gUnknown_0203CE58.pocket != BERRIES_POCKET) + if (gBagPositionStruct.pocket != BERRIES_POCKET) ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); else sub_80FDD10(taskId); @@ -1660,24 +1660,24 @@ void ItemMenu_Toss(u8 taskId) { s16* data = gTasks[taskId].data; - bag_menu_remove_some_window(); + BagMenu_RemoveSomeWindow(); data[8] = 1; if (data[2] == 1) { - BagMenuConfirmToss(taskId); + BagMenu_TossItems(taskId); } else { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_TossHowManyVar1s); FillWindowPixelBuffer(1, PIXEL_FILL(0)); - bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); + BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); sub_81ABC3C(7); gTasks[taskId].func = Task_ChooseHowManyToToss; } } -void BagMenuConfirmToss(u8 taskId) +void BagMenu_TossItems(u8 taskId) { s16* data = gTasks[taskId].data; @@ -1685,16 +1685,16 @@ void BagMenuConfirmToss(u8 taskId) ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3); StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems); FillWindowPixelBuffer(1, PIXEL_FILL(0)); - bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); - bag_menu_yes_no(taskId, 5, &gUnknown_08614084); + BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); + BagMenu_YesNo(taskId, 5, &sYesNoTossFunctions); } -void BagMenuCancelToss(u8 taskId) +void BagMenu_CancelToss(u8 taskId) { s16* data = gTasks[taskId].data; - bag_menu_print_description_box_text(data[1]); - bag_menu_print_cursor_(data[0], 0); + BagMenu_PrintDescription(data[1]); + BagMenu_PrintCursor_(data[0], 0); set_callback3_to_bag(taskId); } @@ -1704,23 +1704,23 @@ void Task_ChooseHowManyToToss(u8 taskId) if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { - sub_81ABC54(gUnknown_0203CE54->unk817, data[8]); + PrintItemDepositAmount(gBagMenu->unk817, data[8]); } else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - bag_menu_remove_window(7); - BagMenuConfirmToss(taskId); + BagMenu_RemoveWindow(7); + BagMenu_TossItems(taskId); } else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - bag_menu_remove_window(7); - BagMenuCancelToss(taskId); + BagMenu_RemoveWindow(7); + BagMenu_CancelToss(taskId); } } -void BagMenuActuallyToss(u8 taskId) +void BagMenu_ConfirmToss(u8 taskId) { s16* data = gTasks[taskId].data; @@ -1728,24 +1728,24 @@ void BagMenuActuallyToss(u8 taskId) ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3); StringExpandPlaceholders(gStringVar4, gText_ThrewAwayVar2Var1s); FillWindowPixelBuffer(1, PIXEL_FILL(0)); - bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); + BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); gTasks[taskId].func = Task_ActuallyToss; } void Task_ActuallyToss(u8 taskId) { s16* data = gTasks[taskId].data; - u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]; - u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]; + u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]; + u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); RemoveBagItem(gSpecialVar_ItemId, data[8]); DestroyListMenuTask(data[0], scrollPos, cursorPos); - sub_81AB9A8(gUnknown_0203CE58.pocket); - SetInitialScrollAndCursorPositions(gUnknown_0203CE58.pocket); - load_bag_item_list_buffers(gUnknown_0203CE58.pocket); + sub_81AB9A8(gBagPositionStruct.pocket); + SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket); + LoadBagItemListBuffers(gBagPositionStruct.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); schedule_bg_copy_tilemap_to_vram(0); set_callback3_to_bag(taskId); @@ -1755,15 +1755,15 @@ void Task_ActuallyToss(u8 taskId) void ItemMenu_Register(u8 taskId) { s16* data = gTasks[taskId].data; - u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]; - u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]; + u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]; + u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId) gSaveBlock1Ptr->registeredItem = 0; else gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId; DestroyListMenuTask(data[0], scrollPos, cursorPos); - load_bag_item_list_buffers(gUnknown_0203CE58.pocket); + LoadBagItemListBuffers(gBagPositionStruct.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); schedule_bg_copy_tilemap_to_vram(0); ItemMenu_Cancel(taskId); @@ -1771,7 +1771,7 @@ void ItemMenu_Register(u8 taskId) void ItemMenu_Give(u8 taskId) { - bag_menu_remove_some_window(); + BagMenu_RemoveSomeWindow(); if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId)) { DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350); @@ -1779,25 +1779,25 @@ void ItemMenu_Give(u8 taskId) else if (!ItemId_GetImportance(gSpecialVar_ItemId)) { if (CalculatePlayerPartyCount() == 0) - bag_menu_print_there_is_no_pokemon(taskId); + BagMenu_PrintThereIsNoPokemon(taskId); else { - gUnknown_0203CE54->mainCallback2 = sub_81B7F60; + gBagMenu->mainCallback2 = sub_81B7F60; unknown_ItemMenu_Confirm(taskId); } } else { - bag_menu_print_cant_be_held_msg(taskId); + BagMenu_PrintItemCantBeHeld(taskId); } } -void bag_menu_print_there_is_no_pokemon(u8 taskId) +void BagMenu_PrintThereIsNoPokemon(u8 taskId) { DisplayItemMessage(taskId, 1, gText_NoPokemon, sub_81AD350); } -void bag_menu_print_cant_be_held_msg(u8 taskId) +void BagMenu_PrintItemCantBeHeld(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeld); @@ -1809,13 +1809,13 @@ void sub_81AD350(u8 taskId) if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - bag_menu_inits_lists_menu(taskId); + BagMenu_InitListsMenu(taskId); } } void ItemMenu_CheckTag(u8 taskId) { - gUnknown_0203CE54->mainCallback2 = DoBerryTagScreen; + gBagMenu->mainCallback2 = DoBerryTagScreen; unknown_ItemMenu_Confirm(taskId); } @@ -1823,11 +1823,11 @@ void ItemMenu_Cancel(u8 taskId) { s16* data = gTasks[taskId].data; - bag_menu_remove_some_window(); - bag_menu_print_description_box_text(data[1]); + BagMenu_RemoveSomeWindow(); + BagMenu_PrintDescription(data[1]); schedule_bg_copy_tilemap_to_vram(0); schedule_bg_copy_tilemap_to_vram(1); - bag_menu_print_cursor_(data[0], 0); + BagMenu_PrintCursor_(data[0], 0); set_callback3_to_bag(taskId); } @@ -1835,7 +1835,7 @@ void ItemMenu_UseInBattle(u8 taskId) { if (ItemId_GetBattleFunc(gSpecialVar_ItemId)) { - bag_menu_remove_some_window(); + BagMenu_RemoveSomeWindow(); ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId); } } @@ -1857,13 +1857,13 @@ void item_menu_type_2(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeldHere); DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD350); } - else if (gUnknown_0203CE58.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId)) + else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId)) { unknown_ItemMenu_Confirm(taskId); } else { - bag_menu_print_cant_be_held_msg(taskId); + BagMenu_PrintItemCantBeHeld(taskId); } } @@ -1871,10 +1871,10 @@ void item_menu_type_b(u8 taskId) { if (ItemIsMail(gSpecialVar_ItemId) == TRUE) DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350); - else if (gUnknown_0203CE58.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId)) + else if (gBagPositionStruct.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId)) gTasks[taskId].func = unknown_ItemMenu_Confirm; else - bag_menu_print_cant_be_held_msg(taskId); + BagMenu_PrintItemCantBeHeld(taskId); } bool8 UseRegisteredKeyItemOnField(void) @@ -1905,7 +1905,7 @@ bool8 UseRegisteredKeyItemOnField(void) return TRUE; } -void display_sell_item_ask_str(u8 taskId) +void DisplaySellItemAskString(u8 taskId) { s16* data = gTasks[taskId].data; @@ -1913,7 +1913,7 @@ void display_sell_item_ask_str(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar2); StringExpandPlaceholders(gStringVar4, gText_CantBuyKeyItem); - DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu); + DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu); } else { @@ -1943,23 +1943,23 @@ void sub_81AD680(u8 taskId) void sub_81AD6E4(u8 taskId) { - bag_menu_yes_no(taskId, 6, &gUnknown_0861408C); + BagMenu_YesNo(taskId, 6, &sYesNoSellItemFunctions); } -void sub_81AD6FC(u8 taskId) +void BagMenu_CancelSell(u8 taskId) { s16* data = gTasks[taskId].data; bag_menu_remove_money_window(); bag_menu_RemoveBagItem_message_window(4); - bag_menu_print_cursor_(data[0], 0); + BagMenu_PrintCursor_(data[0], 0); set_callback3_to_bag(taskId); } void sub_81AD730(u8 taskId) { s16* data = gTasks[taskId].data; - u8 windowId = bag_menu_add_window(8); + u8 windowId = BagMenu_AddWindow(8); sub_81ABCC0(windowId, 1, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]); bag_menu_AddMoney_window(); @@ -1972,26 +1972,26 @@ void sub_81AD794(u8 taskId) if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { - sub_81ABCC0(gUnknown_0203CE54->unk818, data[8], (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]); + sub_81ABCC0(gBagMenu->unk818, data[8], (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]); } else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - bag_menu_remove_window(8); + BagMenu_RemoveWindow(8); sub_81AD680(taskId); } else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - bag_menu_print_cursor_(data[0], 0); + BagMenu_PrintCursor_(data[0], 0); bag_menu_remove_money_window(); - bag_menu_remove_window(8); + BagMenu_RemoveWindow(8); bag_menu_RemoveBagItem_message_window(4); set_callback3_to_bag(taskId); } } -void sub_81AD84C(u8 taskId) +void BagMenu_ConfirmSell(u8 taskId) { s16* data = gTasks[taskId].data; @@ -2004,19 +2004,19 @@ void sub_81AD84C(u8 taskId) void sub_81AD8C8(u8 taskId) { s16* data = gTasks[taskId].data; - u16* scrollPos = &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]; - u16* cursorPos = &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]; + u16* scrollPos = &gBagPositionStruct.scrollPosition[gBagPositionStruct.pocket]; + u16* cursorPos = &gBagPositionStruct.cursorPosition[gBagPositionStruct.pocket]; PlaySE(SE_REGI); RemoveBagItem(gSpecialVar_ItemId, data[8]); AddMoney(&gSaveBlock1Ptr->money, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]); DestroyListMenuTask(data[0], scrollPos, cursorPos); - sub_81AB9A8(gUnknown_0203CE58.pocket); - SetInitialScrollAndCursorPositions(gUnknown_0203CE58.pocket); - load_bag_item_list_buffers(gUnknown_0203CE58.pocket); + sub_81AB9A8(gBagPositionStruct.pocket); + SetInitialScrollAndCursorPositions(gBagPositionStruct.pocket); + LoadBagItemListBuffers(gBagPositionStruct.pocket); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos); - bag_menu_print_cursor_(data[0], 2); - PrintMoneyAmountInMoneyBox(gUnknown_0203CE54->unk819, GetMoney(&gSaveBlock1Ptr->money), 0); + BagMenu_PrintCursor_(data[0], 2); + PrintMoneyAmountInMoneyBox(gBagMenu->unk819, GetMoney(&gSaveBlock1Ptr->money), 0); gTasks[taskId].func = sub_81AD9C0; } @@ -2026,11 +2026,11 @@ void sub_81AD9C0(u8 taskId) { PlaySE(SE_SELECT); bag_menu_remove_money_window(); - bag_menu_inits_lists_menu(taskId); + BagMenu_InitListsMenu(taskId); } } -void display_deposit_item_ask_str(u8 taskId) +void DisplayDepositItemAskString(u8 taskId) { s16* data = gTasks[taskId].data; @@ -2044,7 +2044,7 @@ void display_deposit_item_ask_str(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_DepositHowManyVar1); FillWindowPixelBuffer(1, PIXEL_FILL(0)); - bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); + BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); sub_81ABC3C(7); gTasks[taskId].func = sub_81ADA7C; } @@ -2056,20 +2056,20 @@ void sub_81ADA7C(u8 taskId) if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) { - sub_81ABC54(gUnknown_0203CE54->unk817, data[8]); + PrintItemDepositAmount(gBagMenu->unk817, data[8]); } else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - bag_menu_remove_window(7); + BagMenu_RemoveWindow(7); sub_81ADB14(taskId); } else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - bag_menu_print_description_box_text(data[1]); - bag_menu_print_cursor_(data[0], 0); - bag_menu_remove_window(7); + BagMenu_PrintDescription(data[1]); + BagMenu_PrintCursor_(data[0], 0); + BagMenu_RemoveWindow(7); set_callback3_to_bag(taskId); } } @@ -2081,7 +2081,7 @@ void sub_81ADB14(u8 taskId) FillWindowPixelBuffer(1, PIXEL_FILL(0)); if (ItemId_GetImportance(gSpecialVar_ItemId)) { - bag_menu_print(1, 1, gText_CantStoreImportantItems, 3, 1, 0, 0, 0, 0); + BagMenu_Print(1, 1, gText_CantStoreImportantItems, 3, 1, 0, 0, 0, 0); gTasks[taskId].func = sub_81ADC0C; } else if (AddPCItem(gSpecialVar_ItemId, data[8]) == TRUE) @@ -2089,12 +2089,12 @@ void sub_81ADB14(u8 taskId) CopyItemName(gSpecialVar_ItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, data[8], 0, 3); StringExpandPlaceholders(gStringVar4, gText_DepositedVar2Var1s); - bag_menu_print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); + BagMenu_Print(1, 1, gStringVar4, 3, 1, 0, 0, 0, 0); gTasks[taskId].func = Task_ActuallyToss; } else { - bag_menu_print(1, 1, gText_NoRoomForItems, 3, 1, 0, 0, 0, 0); + BagMenu_Print(1, 1, gText_NoRoomForItems, 3, 1, 0, 0, 0, 0); gTasks[taskId].func = sub_81ADC0C; } } @@ -2106,15 +2106,15 @@ void sub_81ADC0C(u8 taskId) if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { PlaySE(SE_SELECT); - bag_menu_print_description_box_text(data[1]); - bag_menu_print_cursor_(data[0], 0); + BagMenu_PrintDescription(data[1]); + BagMenu_PrintCursor_(data[0], 0); set_callback3_to_bag(taskId); } } bool8 IsWallysBag(void) { - if (gUnknown_0203CE58.location == 10) + if (gBagPositionStruct.location == 10) return TRUE; return FALSE; } @@ -2126,11 +2126,11 @@ void PrepareBagForWallyTutorial(void) gUnknown_0203CE80 = AllocZeroed(sizeof(struct TempWallyStruct)); memcpy(gUnknown_0203CE80->bagPocket_Items, gSaveBlock1Ptr->bagPocket_Items, sizeof(gSaveBlock1Ptr->bagPocket_Items)); memcpy(gUnknown_0203CE80->bagPocket_PokeBalls, gSaveBlock1Ptr->bagPocket_PokeBalls, sizeof(gSaveBlock1Ptr->bagPocket_PokeBalls)); - gUnknown_0203CE80->pocket = gUnknown_0203CE58.pocket; + gUnknown_0203CE80->pocket = gBagPositionStruct.pocket; for (i = 0; i <= 4; i++) { - gUnknown_0203CE80->cursorPosition[i] = gUnknown_0203CE58.cursorPosition[i]; - gUnknown_0203CE80->scrollPosition[i] = gUnknown_0203CE58.scrollPosition[i]; + gUnknown_0203CE80->cursorPosition[i] = gBagPositionStruct.cursorPosition[i]; + gUnknown_0203CE80->scrollPosition[i] = gBagPositionStruct.scrollPosition[i]; } ClearItemSlots(gSaveBlock1Ptr->bagPocket_Items, 30); ClearItemSlots(gSaveBlock1Ptr->bagPocket_PokeBalls, 16); @@ -2143,11 +2143,11 @@ void RestoreBagAfterWallyTutorial(void) memcpy(gSaveBlock1Ptr->bagPocket_Items, gUnknown_0203CE80->bagPocket_Items, sizeof(gUnknown_0203CE80->bagPocket_Items)); memcpy(gSaveBlock1Ptr->bagPocket_PokeBalls, gUnknown_0203CE80->bagPocket_PokeBalls, sizeof(gUnknown_0203CE80->bagPocket_PokeBalls)); - gUnknown_0203CE58.pocket = gUnknown_0203CE80->pocket; + gBagPositionStruct.pocket = gUnknown_0203CE80->pocket; for (i = 0; i <= 4; i++) { - gUnknown_0203CE58.cursorPosition[i] = gUnknown_0203CE80->cursorPosition[i]; - gUnknown_0203CE58.scrollPosition[i] = gUnknown_0203CE80->scrollPosition[i]; + gBagPositionStruct.cursorPosition[i] = gUnknown_0203CE80->cursorPosition[i]; + gBagPositionStruct.scrollPosition[i] = gUnknown_0203CE80->scrollPosition[i]; } Free(gUnknown_0203CE80); } @@ -2175,14 +2175,14 @@ void Task_WallyTutorialBagMenu(u8 taskId) break; case 0xCC: PlaySE(SE_SELECT); - bag_menu_print_cursor_(data[0], 2); + BagMenu_PrintCursor_(data[0], 2); gSpecialVar_ItemId = ITEM_POKE_BALL; sub_81AC644(taskId); data[8]++; break; case 0x132: PlaySE(SE_SELECT); - bag_menu_remove_some_window(); + BagMenu_RemoveSomeWindow(); DestroyListMenuTask(data[0], 0, 0); RestoreBagAfterWallyTutorial(); unknown_ItemMenu_Confirm(taskId); @@ -2198,7 +2198,7 @@ void unknown_ItemMenu_Show(u8 taskId) { gSpecialVar_0x8005 = gSpecialVar_ItemId; gSpecialVar_Result = 1; - bag_menu_remove_some_window(); + BagMenu_RemoveSomeWindow(); unknown_ItemMenu_Confirm(taskId); } @@ -2212,7 +2212,7 @@ void unknown_ItemMenu_Give2(u8 taskId) { RemoveBagItem(gSpecialVar_ItemId, 1); gSpecialVar_Result = 1; - bag_menu_remove_some_window(); + BagMenu_RemoveSomeWindow(); unknown_ItemMenu_Confirm(taskId); } @@ -2225,7 +2225,7 @@ void bag_menu_leave_maybe_2(void) void unknown_ItemMenu_Confirm2(u8 taskId) { gSpecialVar_Result = 1; - bag_menu_remove_some_window(); + BagMenu_RemoveSomeWindow(); unknown_ItemMenu_Confirm(taskId); } @@ -2235,7 +2235,7 @@ void bag_menu_leave_maybe(void) SetMainCallback2(CB2_ReturnToField); } -void bag_menu_print_pocket_names(const u8 *pocketName1, const u8 *pocketName2) +void BagMenu_PrintPocketNames(const u8 *pocketName1, const u8 *pocketName2) { struct WindowTemplate window = {0, 0, 0, 0, 0, 0, 0}; u16 windowId; @@ -2246,24 +2246,24 @@ void bag_menu_print_pocket_names(const u8 *pocketName1, const u8 *pocketName2) windowId = AddWindow(&window); FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); offset = GetStringCenterAlignXOffset(1, pocketName1, 0x40); - bag_menu_print(windowId, 1, pocketName1, offset, 1, 0, 0, -1, 1); + BagMenu_Print(windowId, 1, pocketName1, offset, 1, 0, 0, -1, 1); if (pocketName2) { offset = GetStringCenterAlignXOffset(1, pocketName2, 0x40); - bag_menu_print(windowId, 1, pocketName2, offset + 0x40, 1, 0, 0, -1, 1); + BagMenu_Print(windowId, 1, pocketName2, offset + 0x40, 1, 0, 0, -1, 1); } - CpuCopy32((u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA), gUnknown_0203CE54->pocketNameBuffer, 0x400); + CpuCopy32((u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA), gBagMenu->pocketNameBuffer, 0x400); RemoveWindow(windowId); } -void bag_menu_copy_pocket_name_to_window(u32 a) +void BagMenu_CopyPocketNameToWindow(u32 a) { u8 (* r4)[32][32]; u8* windowAttribute; int b; if (a > 8) a = 8; - r4 = &gUnknown_0203CE54->pocketNameBuffer; + r4 = &gBagMenu->pocketNameBuffer; windowAttribute = (u8*)GetWindowAttribute(2, WINDOW_TILE_DATA); CpuCopy32(r4[0][a], windowAttribute, 0x100); b = a + 16; @@ -2271,7 +2271,7 @@ void bag_menu_copy_pocket_name_to_window(u32 a) CopyWindowToVram(2, 2); } -void setup_bag_menu_textboxes(void) +void SetupBagMenu_Textboxes(void) { u8 i; @@ -2290,19 +2290,19 @@ void setup_bag_menu_textboxes(void) schedule_bg_copy_tilemap_to_vram(1); } -void bag_menu_print(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 h) +void BagMenu_Print(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 h) { AddTextPrinterParameterized4(windowId, fontId, left, top, letterSpacing, lineSpacing, sFontColorTable[h], speed, str); } u8 sub_81AE124(u8 a) { - return gUnknown_0203CE54->windowPointers[a]; + return gBagMenu->windowPointers[a]; } -u8 bag_menu_add_window(u8 a) +u8 BagMenu_AddWindow(u8 a) { - u8 *ptr = &gUnknown_0203CE54->windowPointers[a]; + u8 *ptr = &gBagMenu->windowPointers[a]; if (*ptr == 0xFF) { *ptr = AddWindow(&gUnknown_086141AC[a]); @@ -2312,9 +2312,9 @@ u8 bag_menu_add_window(u8 a) return *ptr; } -void bag_menu_remove_window(u8 a) +void BagMenu_RemoveWindow(u8 a) { - u8 *ptr = &gUnknown_0203CE54->windowPointers[a]; + u8 *ptr = &gBagMenu->windowPointers[a]; if (*ptr != 0xFF) { ClearStdWindowAndFrameToTransparent(*ptr, 0); @@ -2327,7 +2327,7 @@ void bag_menu_remove_window(u8 a) u8 AddItemMessageWindow(u8 a) { - u8 *ptr = &gUnknown_0203CE54->windowPointers[a]; + u8 *ptr = &gBagMenu->windowPointers[a]; if (*ptr == 0xFF) *ptr = AddWindow(&gUnknown_086141AC[a]); return *ptr; @@ -2335,7 +2335,7 @@ u8 AddItemMessageWindow(u8 a) void bag_menu_RemoveBagItem_message_window(u8 a) { - u8 *ptr = &gUnknown_0203CE54->windowPointers[a]; + u8 *ptr = &gBagMenu->windowPointers[a]; if (*ptr != 0xFF) { ClearDialogWindowAndFrameToTransparent(*ptr, FALSE); @@ -2347,25 +2347,25 @@ void bag_menu_RemoveBagItem_message_window(u8 a) } } -void bag_menu_yes_no(u8 a, u8 b, const struct YesNoFuncTable *funcTable) +void BagMenu_YesNo(u8 a, u8 b, const struct YesNoFuncTable *funcTable) { CreateYesNoMenuWithCallbacks(a, &gUnknown_086141AC[b], 1, 0, 2, 1, 14, funcTable); } void bag_menu_AddMoney_window(void) { - u8 windowId = bag_menu_add_window(9); + u8 windowId = BagMenu_AddWindow(9); PrintMoneyAmountInMoneyBoxWithBorder(windowId, 1, 14, GetMoney(&gSaveBlock1Ptr->money)); AddMoneyLabelObject(19, 11); } void bag_menu_remove_money_window(void) { - bag_menu_remove_window(9); + BagMenu_RemoveWindow(9); RemoveMoneyLabelObject(); } -void bag_menu_prepare_tmhm_move_window(void) +void BagMenu_PrepareTMHMMoveWindow(void) { FillWindowPixelBuffer(3, PIXEL_FILL(0)); blit_move_info_icon(3, 19, 0, 0); @@ -2385,7 +2385,7 @@ void PrintTMHMMoveData(u16 itemId) if (itemId == ITEM_NONE) { for (i = 0; i < 4; i++) - bag_menu_print(4, 1, gText_ThreeDashes, 7, i * 12, 0, 0, -1, 4); + BagMenu_Print(4, 1, gText_ThreeDashes, 7, i * 12, 0, 0, -1, 4); CopyWindowToVram(4, 2); } else @@ -2401,7 +2401,7 @@ void PrintTMHMMoveData(u16 itemId) ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].power, 1, 3); text = gStringVar1; } - bag_menu_print(4, 1, text, 7, 12, 0, 0, -1, 4); + BagMenu_Print(4, 1, text, 7, 12, 0, 0, -1, 4); if (gBattleMoves[moveId].accuracy == 0) { text = gText_ThreeDashes; @@ -2411,9 +2411,9 @@ void PrintTMHMMoveData(u16 itemId) ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].accuracy, 1, 3); text = gStringVar1; } - bag_menu_print(4, 1, text, 7, 24, 0, 0, -1, 4); + BagMenu_Print(4, 1, text, 7, 24, 0, 0, -1, 4); ConvertIntToDecimalStringN(gStringVar1, gBattleMoves[moveId].pp, 1, 3); - bag_menu_print(4, 1, gStringVar1, 7, 36, 0, 0, -1, 4); + BagMenu_Print(4, 1, gStringVar1, 7, 36, 0, 0, -1, 4); CopyWindowToVram(4, 2); } } diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c index 83ed3abfe..780a50160 100644 --- a/src/item_menu_icons.c +++ b/src/item_menu_icons.c @@ -24,12 +24,12 @@ static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite); static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite); // static const rom data -static const u16 gUnknown_0857F564[] = INCBIN_U16("graphics/interface/bag_spinner.gbapal"); -static const u8 gUnknown_0857F584[] = INCBIN_U8("graphics/interface/bag_spinner.4bpp"); -static const u8 gUnknown_0857F604[] = INCBIN_U8("graphics/unused/cherry.4bpp"); -static const u16 gUnknown_0857FA84[] = INCBIN_U16("graphics/unused/cherry.gbapal"); +static const u16 gRotatingBall_Pal[] = INCBIN_U16("graphics/interface/bag_spinner.gbapal"); +static const u8 gRotatingBall[] = INCBIN_U8("graphics/interface/bag_spinner.4bpp"); +static const u8 gCherryUnused[] = INCBIN_U8("graphics/unused/cherry.4bpp"); +static const u16 gCherryUnused_Pal[] = INCBIN_U16("graphics/unused/cherry.gbapal"); -static const struct OamData sOamData_857FAA4 = +static const struct OamData sBagOamData = { .y = 0, .affineMode = 1, @@ -46,59 +46,59 @@ static const struct OamData sOamData_857FAA4 = .affineParam = 0 }; -static const union AnimCmd sSpriteAnim_857FAAC[] = +static const union AnimCmd sSpriteAnim_Bag_Closed[] = { ANIMCMD_FRAME(0, 4), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_857FAB4[] = +static const union AnimCmd sSpriteAnim_Bag_Items[] = { ANIMCMD_FRAME(64, 4), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_857FABC[] = +static const union AnimCmd sSpriteAnim_Bag_KeyItems[] = { ANIMCMD_FRAME(128, 4), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_857FAC4[] = +static const union AnimCmd sSpriteAnim_Bag_Pokeballs[] = { ANIMCMD_FRAME(192, 4), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_857FACC[] = +static const union AnimCmd sSpriteAnim_Bag_TMsHMs[] = { ANIMCMD_FRAME(256, 4), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_857FAD4[] = +static const union AnimCmd sSpriteAnim_Bag_Berries[] = { ANIMCMD_FRAME(320, 4), ANIMCMD_END }; -static const union AnimCmd *const sSpriteAnimTable_857FADC[] = +static const union AnimCmd *const sBagSpriteAnimTable[] = { - sSpriteAnim_857FAAC, - sSpriteAnim_857FAB4, - sSpriteAnim_857FAC4, - sSpriteAnim_857FACC, - sSpriteAnim_857FAD4, - sSpriteAnim_857FABC + sSpriteAnim_Bag_Closed, + sSpriteAnim_Bag_Items, + sSpriteAnim_Bag_Pokeballs, + sSpriteAnim_Bag_TMsHMs, + sSpriteAnim_Bag_Berries, + sSpriteAnim_Bag_KeyItems }; -static const union AffineAnimCmd sSpriteAffineAnim_857FAF4[] = +static const union AffineAnimCmd sSpriteAffineAnim_BagNormal[] = { AFFINEANIMCMD_FRAME(256, 256, 0, 0), AFFINEANIMCMD_END }; -static const union AffineAnimCmd sSpriteAffineAnim_857FB04[] = +static const union AffineAnimCmd sSpriteAffineAnim_BagShake[] = { AFFINEANIMCMD_FRAME(0, 0, 254, 2), AFFINEANIMCMD_FRAME(0, 0, 2, 4), @@ -107,39 +107,39 @@ static const union AffineAnimCmd sSpriteAffineAnim_857FB04[] = AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB2C[] = +static const union AffineAnimCmd *const sBagAffineAnimCmds[] = { - sSpriteAffineAnim_857FAF4, - sSpriteAffineAnim_857FB04 + sSpriteAffineAnim_BagNormal, + sSpriteAffineAnim_BagShake }; -const struct CompressedSpriteSheet gUnknown_0857FB34 = +const struct CompressedSpriteSheet gBagMaleSpriteSheet = { - gBagMaleTiles, 0x3000, 100 + gBagMaleTiles, 0x3000, TAG_BAG_GFX }; -const struct CompressedSpriteSheet gUnknown_0857FB3C = +const struct CompressedSpriteSheet gBagFemaleSpriteSheet = { - gBagFemaleTiles, 0x3000, 100 + gBagFemaleTiles, 0x3000, TAG_BAG_GFX }; -const struct CompressedSpritePalette gUnknown_0857FB44 = +const struct CompressedSpritePalette gBagPaletteTable = { - gBagPalette, 100 + gBagPalette, TAG_BAG_GFX }; -static const struct SpriteTemplate gUnknown_0857FB4C = +static const struct SpriteTemplate gBagSpriteTemplate = { - .tileTag = 100, - .paletteTag = 100, - .oam = &sOamData_857FAA4, - .anims = sSpriteAnimTable_857FADC, + .tileTag = TAG_BAG_GFX, + .paletteTag = TAG_BAG_GFX, + .oam = &sBagOamData, + .anims = sBagSpriteAnimTable, .images = NULL, - .affineAnims = sSpriteAffineAnimTable_857FB2C, + .affineAnims = sBagAffineAnimCmds, .callback = SpriteCallbackDummy, }; -static const struct OamData sOamData_857FB64 = +static const struct OamData sRotatingBallOamData = { .y = 0, .affineMode = 0, @@ -156,61 +156,61 @@ static const struct OamData sOamData_857FB64 = .affineParam = 0 }; -static const union AnimCmd sSpriteAnim_857FB6C[] = +static const union AnimCmd sSpriteAffineAnim_RotatingBallStationary[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END }; -static const union AnimCmd *const sSpriteAnimTable_857FB74[] = +static const union AnimCmd *const sRotatingBallSpriteAnimTable[] = { - sSpriteAnim_857FB6C + sSpriteAffineAnim_RotatingBallStationary }; -static const union AffineAnimCmd sSpriteAffineAnim_857FB78[] = +static const union AffineAnimCmd sSpriteAffineAnim_RotatingBallRotation1[] = { AFFINEANIMCMD_FRAME(0, 0, 8, 16), AFFINEANIMCMD_END }; -static const union AffineAnimCmd sSpriteAffineAnim_857FB88[] = +static const union AffineAnimCmd sSpriteAffineAnim_RotatingBallRotation2[] = { AFFINEANIMCMD_FRAME(0, 0, 248, 16), AFFINEANIMCMD_END }; -static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB98[] = +static const union AffineAnimCmd *const sRotatingBallAnimCmds[] = { - sSpriteAffineAnim_857FB78, + sSpriteAffineAnim_RotatingBallRotation1, }; -static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB9C[] = +static const union AffineAnimCmd *const sRotatingBallAnimCmds_FullRotation[] = { - sSpriteAffineAnim_857FB88, + sSpriteAffineAnim_RotatingBallRotation2, }; -static const struct SpriteSheet gUnknown_0857FBA0 = +static const struct SpriteSheet gRotatingBallTable = { - gUnknown_0857F584, 0x80, 101 + gRotatingBall, 0x80, TAG_ROTATING_BALL_GFX }; -static const struct SpritePalette gUnknown_0857FBA8 = +static const struct SpritePalette gRotatingBallPaletteTable = { - gUnknown_0857F564, 101 + gRotatingBall_Pal, TAG_ROTATING_BALL_GFX }; -static const struct SpriteTemplate gSpriteTemplate_RotatingBall = +static const struct SpriteTemplate gRotatingBallSpriteTemplate = { - .tileTag = 101, - .paletteTag = 101, - .oam = &sOamData_857FB64, - .anims = sSpriteAnimTable_857FB74, + .tileTag = TAG_ROTATING_BALL_GFX, + .paletteTag = TAG_ROTATING_BALL_GFX, + .oam = &sRotatingBallOamData, + .anims = sRotatingBallSpriteAnimTable, .images = NULL, - .affineAnims = sSpriteAffineAnimTable_857FB98, + .affineAnims = sRotatingBallAnimCmds, .callback = SpriteCB_SwitchPocketRotatingBallInit, }; -static const struct OamData sOamData_857FBC8 = +static const struct OamData sBerryPicOamData = { .y = 0, .affineMode = 0, @@ -227,7 +227,7 @@ static const struct OamData sOamData_857FBC8 = .affineParam = 0 }; -static const struct OamData sOamData_857FBD0 = +static const struct OamData sBerryPicRotatingOamData = { .y = 0, .affineMode = 3, @@ -250,28 +250,28 @@ static const union AnimCmd sSpriteAnim_857FBD8[] = ANIMCMD_END }; -static const union AnimCmd *const sSpriteAnimTable_857FBE0[] = +static const union AnimCmd *const sBerryPicSpriteAnimTable[] = { sSpriteAnim_857FBD8 }; -static const struct SpriteFrameImage sSpriteImageTable_857FBE4[] = +static const struct SpriteFrameImage sBerryPicSpriteImageTable[] = { {&gDecompressionBuffer[0], 0x800}, }; -static const struct SpriteTemplate gUnknown_0857FBEC = +static const struct SpriteTemplate gBerryPicSpriteTemplate = { - .tileTag = 65535, - .paletteTag = 30020, - .oam = &sOamData_857FBC8, - .anims = sSpriteAnimTable_857FBE0, - .images = sSpriteImageTable_857FBE4, + .tileTag = TAG_BERRY_PIC_TILE, + .paletteTag = TAG_BERRY_PIC_PAL, + .oam = &sBerryPicOamData, + .anims = sBerryPicSpriteAnimTable, + .images = sBerryPicSpriteImageTable, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }; -static const union AffineAnimCmd sSpriteAffineAnim_857FC04[] = +static const union AffineAnimCmd sSpriteAffineAnim_BerryPicRotation1[] = { AFFINEANIMCMD_FRAME(-1, -1, 253, 96), AFFINEANIMCMD_FRAME(0, 0, 0, 16), @@ -282,7 +282,7 @@ static const union AffineAnimCmd sSpriteAffineAnim_857FC04[] = AFFINEANIMCMD_JUMP(0) }; -static const union AffineAnimCmd sSpriteAffineAnim_857FC3C[] = +static const union AffineAnimCmd sSpriteAffineAnim_BerryPicRotation2[] = { AFFINEANIMCMD_FRAME(-1, -1, 3, 96), AFFINEANIMCMD_FRAME(0, 0, 0, 16), @@ -293,20 +293,20 @@ static const union AffineAnimCmd sSpriteAffineAnim_857FC3C[] = AFFINEANIMCMD_JUMP(0) }; -static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FC74[] = +static const union AffineAnimCmd *const sBerryPicRotatingAnimCmds[] = { - sSpriteAffineAnim_857FC04, - sSpriteAffineAnim_857FC3C + sSpriteAffineAnim_BerryPicRotation1, + sSpriteAffineAnim_BerryPicRotation2 }; -static const struct SpriteTemplate gUnknown_0857FC7C = +static const struct SpriteTemplate gBerryPicRotatingSpriteTemplate = { - .tileTag = 0xFFFF, - .paletteTag = 0x7544, - .oam = &sOamData_857FBD0, - .anims = sSpriteAnimTable_857FBE0, - .images = sSpriteImageTable_857FBE4, - .affineAnims = sSpriteAffineAnimTable_857FC74, + .tileTag = TAG_BERRY_PIC_TILE, + .paletteTag = TAG_BERRY_PIC_PAL, + .oam = &sBerryPicRotatingOamData, + .anims = sBerryPicSpriteAnimTable, + .images = sBerryPicSpriteImageTable, + .affineAnims = sBerryPicRotatingAnimCmds, .callback = SpriteCallbackDummy, }; @@ -357,17 +357,17 @@ static const struct CompressedTilesPal gBerryPicTable[] = {gBerryPic_Enigma, gBerryPalette_Enigma}, }; -const struct CompressedSpriteSheet gUnknown_0857FDEC = +const struct CompressedSpriteSheet gBerryCheckCircleSpriteSheet = { - gBerryCheckCircle_Gfx, 0x800, 10000 + gBerryCheckCircle_Gfx, 0x800, TAG_BERRY_CHECK_CIRCLE_GFX }; -const struct CompressedSpritePalette gUnknown_0857FDF4 = +const struct CompressedSpritePalette gBerryCheckCirclePaletteTable = { - gUnknown_08D9BEF0, 10000 + gBerryCheck_Pal, TAG_BERRY_CHECK_CIRCLE_GFX }; -static const struct OamData sOamData_857FDFC = +static const struct OamData sBerryCheckCircleOamData = { .y = 0, .affineMode = 0, @@ -384,23 +384,23 @@ static const struct OamData sOamData_857FDFC = .affineParam = 0 }; -static const union AnimCmd sSpriteAnim_857FE04[] = +static const union AnimCmd sSpriteAnim_BerryCheckCircle[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END }; -static const union AnimCmd *const sSpriteAnimTable_857FE0C[] = +static const union AnimCmd *const sBerryCheckCircleSpriteAnimTable[] = { - sSpriteAnim_857FE04 + sSpriteAnim_BerryCheckCircle }; -static const struct SpriteTemplate gUnknown_0857FE10 = +static const struct SpriteTemplate gBerryCheckCircleSpriteTemplate = { - .tileTag = 10000, - .paletteTag = 10000, - .oam = &sOamData_857FDFC, - .anims = sSpriteAnimTable_857FE0C, + .tileTag = TAG_BERRY_CHECK_CIRCLE_GFX, + .paletteTag = TAG_BERRY_CHECK_CIRCLE_GFX, + .oam = &sBerryCheckCircleOamData, + .anims = sBerryCheckCircleSpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, @@ -409,7 +409,7 @@ static const struct SpriteTemplate gUnknown_0857FE10 = // code void RemoveBagSprite(u8 id) { - u8 *spriteId = &gUnknown_0203CE54->spriteId[id]; + u8 *spriteId = &gBagMenu->spriteId[id]; if (*spriteId != 0xFF) { FreeSpriteTilesByTag(id + 100); @@ -422,14 +422,14 @@ void RemoveBagSprite(u8 id) void AddBagVisualSprite(u8 bagPocketId) { - u8 *spriteId = &gUnknown_0203CE54->spriteId[0]; - *spriteId = CreateSprite(&gUnknown_0857FB4C, 68, 66, 0); + u8 *spriteId = &gBagMenu->spriteId[0]; + *spriteId = CreateSprite(&gBagSpriteTemplate, 68, 66, 0); SetBagVisualPocketId(bagPocketId, FALSE); } void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets) { - struct Sprite *sprite = &gSprites[gUnknown_0203CE54->spriteId[0]]; + struct Sprite *sprite = &gSprites[gBagMenu->spriteId[0]]; if (isSwitchingPockets) { sprite->pos2.y = -5; @@ -458,7 +458,7 @@ static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite) void ShakeBagVisual(void) { - struct Sprite *sprite = &gSprites[gUnknown_0203CE54->spriteId[0]]; + struct Sprite *sprite = &gSprites[gBagMenu->spriteId[0]]; if (sprite->affineAnimEnded) { StartSpriteAffineAnim(sprite, 1); @@ -477,14 +477,14 @@ static void SpriteCB_ShakeBagVisual(struct Sprite *sprite) void AddSwitchPocketRotatingBallSprite(s16 rotationDirection) { - u8 *spriteId = &gUnknown_0203CE54->spriteId[1]; - LoadSpriteSheet(&gUnknown_0857FBA0); - LoadSpritePalette(&gUnknown_0857FBA8); - *spriteId = CreateSprite(&gSpriteTemplate_RotatingBall, 16, 16, 0); + u8 *spriteId = &gBagMenu->spriteId[1]; + LoadSpriteSheet(&gRotatingBallTable); + LoadSpritePalette(&gRotatingBallPaletteTable); + *spriteId = CreateSprite(&gRotatingBallSpriteTemplate, 16, 16, 0); gSprites[*spriteId].data[0] = rotationDirection; } -static void update_switch_pocket_rotating_ball_coords(struct Sprite *sprite) +static void UpdateSwitchPocketRotatingBallCoords(struct Sprite *sprite) { sprite->centerToCornerVecX = sprite->data[1] - ((sprite->data[3] + 1) & 1); sprite->centerToCornerVecY = sprite->data[1] - ((sprite->data[3] + 1) & 1); @@ -494,28 +494,28 @@ static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite) { sprite->oam.affineMode = 1; if (sprite->data[0] == -1) - sprite->affineAnims = sSpriteAffineAnimTable_857FB98; + sprite->affineAnims = sRotatingBallAnimCmds; else - sprite->affineAnims = sSpriteAffineAnimTable_857FB9C; + sprite->affineAnims = sRotatingBallAnimCmds_FullRotation; InitSpriteAffineAnim(sprite); sprite->data[1] = sprite->centerToCornerVecX; sprite->data[1] = sprite->centerToCornerVecY; - update_switch_pocket_rotating_ball_coords(sprite); + UpdateSwitchPocketRotatingBallCoords(sprite); sprite->callback = SpriteCB_SwitchPocketRotatingBallContinue; } static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite) { sprite->data[3]++; - update_switch_pocket_rotating_ball_coords(sprite); + UpdateSwitchPocketRotatingBallCoords(sprite); if (sprite->data[3] == 16) RemoveBagSprite(1); } void AddBagItemIconSprite(u16 itemId, u8 id) { - u8 *spriteId = &gUnknown_0203CE54->spriteId[id + 2]; + u8 *spriteId = &gBagMenu->spriteId[id + 2]; if (*spriteId == 0xFF) { u8 iconSpriteId; @@ -539,17 +539,17 @@ void RemoveBagItemIconSprite(u8 id) void sub_80D4FAC(void) { - sub_8122344(&gUnknown_0203CE54->spriteId[4], 8); + sub_8122344(&gBagMenu->spriteId[4], 8); } void sub_80D4FC8(u8 arg0) { - sub_81223FC(&gUnknown_0203CE54->spriteId[4], 8, arg0); + sub_81223FC(&gBagMenu->spriteId[4], 8, arg0); } void sub_80D4FEC(u8 arg0) { - sub_8122448(&gUnknown_0203CE54->spriteId[4], 136, 120, (arg0 + 1) * 16); + sub_8122448(&gBagMenu->spriteId[4], 136, 120, (arg0 + 1) * 16); } static void sub_80D5018(void *mem0, void *mem1) @@ -572,7 +572,7 @@ static void sub_80D5018(void *mem0, void *mem1) } } -static void sub_80D5070(u8 berryId) +static void LoadBerryGfx(u8 berryId) { struct CompressedSpritePalette pal; @@ -582,7 +582,7 @@ static void sub_80D5070(u8 berryId) } pal.data = gBerryPicTable[berryId].pal; - pal.tag = 0x7544; + pal.tag = TAG_BERRY_PIC_PAL; LoadCompressedSpritePalette(&pal); LZDecompressWram(gBerryPicTable[berryId].tiles, &gDecompressionBuffer[0x1000]); sub_80D5018(&gDecompressionBuffer[0x1000], &gDecompressionBuffer[0]); @@ -590,22 +590,22 @@ static void sub_80D5070(u8 berryId) u8 CreateBerryTagSprite(u8 id, s16 x, s16 y) { - sub_80D5070(id); - return CreateSprite(&gUnknown_0857FBEC, x, y, 0); + LoadBerryGfx(id); + return CreateSprite(&gBerryPicSpriteTemplate, x, y, 0); } void FreeBerryTagSpritePalette(void) { - FreeSpritePaletteByTag(0x7544); + FreeSpritePaletteByTag(TAG_BERRY_PIC_PAL); } -u8 sub_80D511C(u8 berryId, u8 x, u8 y, bool8 startAffine) +u8 LoadSpinningBerryPicGfx(u8 berryId, u8 x, u8 y, bool8 startAffine) { u8 spriteId; - FreeSpritePaletteByTag(0x7544); - sub_80D5070(berryId); - spriteId = CreateSprite(&gUnknown_0857FC7C, x, y, 0); + FreeSpritePaletteByTag(TAG_BERRY_PIC_PAL); + LoadBerryGfx(berryId); + spriteId = CreateSprite(&gBerryPicRotatingSpriteTemplate, x, y, 0); if (startAffine == TRUE) StartSpriteAffineAnim(&gSprites[spriteId], 1); @@ -614,5 +614,5 @@ u8 sub_80D511C(u8 berryId, u8 x, u8 y, bool8 startAffine) u8 CreateBerryFlavorCircleSprite(s16 x) { - return CreateSprite(&gUnknown_0857FE10, x, 116, 0); + return CreateSprite(&gBerryCheckCircleSpriteTemplate, x, 116, 0); } diff --git a/src/item_use.c b/src/item_use.c index 97aceb7ad..2f4374423 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -51,7 +51,7 @@ void SetUpItemUseCallback(u8 taskId); void MapPostLoadHook_UseItem(void); void sub_80AF6D4(void); void Task_CallItemUseOnFieldCallback(u8 taskId); -void bag_menu_inits_lists_menu(u8 taskId); +void BagMenu_InitListsMenu(u8 taskId); void ItemUseOnFieldCB_Bike(u8 taskId); void ItemUseOnFieldCB_Rod(u8 taskId); void ItemUseOnFieldCB_Itemfinder(u8 taskId); @@ -101,7 +101,7 @@ static const u8 gUnknown_085920E4[] = {DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST} static const struct YesNoFuncTable gUnknown_085920E8 = { .yesFunc = sub_80FE03C, - .noFunc = bag_menu_inits_lists_menu, + .noFunc = BagMenu_InitListsMenu, }; // .text @@ -115,7 +115,7 @@ void SetUpItemUseCallback(u8 taskId) type = ItemId_GetType(gSpecialVar_ItemId) - 1; if (!InBattlePyramid()) { - gUnknown_0203CE54->mainCallback2 = gUnknown_085920D8[type]; + gBagMenu->mainCallback2 = gUnknown_085920D8[type]; unknown_ItemMenu_Confirm(taskId); } else @@ -154,7 +154,7 @@ void DisplayCannotUseItemMessage(u8 taskId, bool8 isUsingRegisteredKeyItemOnFiel if (!isUsingRegisteredKeyItemOnField) { if (!InBattlePyramid()) - DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu); + DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu); else DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, sub_81C6714); } @@ -199,7 +199,7 @@ void sub_80FD254(void) void ItemUseOutOfBattle_Mail(u8 taskId) { - gUnknown_0203CE54->mainCallback2 = sub_80FD254; + gBagMenu->mainCallback2 = sub_80FD254; unknown_ItemMenu_Confirm(taskId); } @@ -595,7 +595,7 @@ void ItemUseOutOfBattle_PokeblockCase(u8 taskId) } else if (gTasks[taskId].data[3] != TRUE) { - gUnknown_0203CE54->mainCallback2 = sub_80FDBEC; + gBagMenu->mainCallback2 = sub_80FDBEC; unknown_ItemMenu_Confirm(taskId); } else @@ -628,7 +628,7 @@ void ItemUseOutOfBattle_CoinCase(u8 taskId) if (!gTasks[taskId].data[3]) { - DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu); + DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu); } else { @@ -643,7 +643,7 @@ void ItemUseOutOfBattle_PowderJar(u8 taskId) if (!gTasks[taskId].data[3]) { - DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu); + DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu); } else { @@ -657,7 +657,7 @@ void sub_80FDD10(u8 taskId) { gUnknown_0203A0F4 = sub_80FDD74; gFieldCallback = MapPostLoadHook_UseItem; - gUnknown_0203CE54->mainCallback2 = CB2_ReturnToField; + gBagMenu->mainCallback2 = CB2_ReturnToField; unknown_ItemMenu_Confirm(taskId); } else @@ -782,7 +782,7 @@ void task08_0809AD8C(u8 taskId) void sub_80FE024(u8 taskId) { - bag_menu_yes_no(taskId, 6, &gUnknown_085920E8); + BagMenu_YesNo(taskId, 6, &gUnknown_085920E8); } void sub_80FE03C(u8 taskId) @@ -813,7 +813,7 @@ void ItemUseOutOfBattle_Repel(u8 taskId) if (VarGet(VAR_REPEL_STEP_COUNT) == 0) gTasks[taskId].func = sub_80FE124; else if (!InBattlePyramid()) - DisplayItemMessage(taskId, 1, gText_RepelEffectsLingered, bag_menu_inits_lists_menu); + DisplayItemMessage(taskId, 1, gText_RepelEffectsLingered, BagMenu_InitListsMenu); else DisplayItemMessageInBattlePyramid(taskId, gText_RepelEffectsLingered, sub_81C6714); } @@ -837,7 +837,7 @@ void sub_80FE164(u8 taskId) VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId)); sub_80FE058(); if (!InBattlePyramid()) - DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu); + DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu); else DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C6714); } @@ -849,7 +849,7 @@ void sub_80FE1D0(u8 taskId) { PlaySE(SE_BIDORO); if (!InBattlePyramid()) - DisplayItemMessage(taskId, 1, gStringVar4, bag_menu_inits_lists_menu); + DisplayItemMessage(taskId, 1, gStringVar4, BagMenu_InitListsMenu); else DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C6714); } @@ -928,7 +928,7 @@ void ItemUseInBattle_PokeBall(u8 taskId) } else if (!InBattlePyramid()) { - DisplayItemMessage(taskId, 1, gText_BoxFull, bag_menu_inits_lists_menu); + DisplayItemMessage(taskId, 1, gText_BoxFull, BagMenu_InitListsMenu); } else DisplayItemMessageInBattlePyramid(taskId, gText_BoxFull, sub_81C6714); @@ -965,7 +965,7 @@ void ItemUseInBattle_StatIncrease(u8 taskId) if (ExecuteTableBasedItemEffect(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE) { if (!InBattlePyramid()) - DisplayItemMessage(taskId, 1, gText_WontHaveEffect, bag_menu_inits_lists_menu); + DisplayItemMessage(taskId, 1, gText_WontHaveEffect, BagMenu_InitListsMenu); else DisplayItemMessageInBattlePyramid(taskId, gText_WontHaveEffect, sub_81C6714); } @@ -980,7 +980,7 @@ void sub_80FE54C(u8 taskId) { if (!InBattlePyramid()) { - gUnknown_0203CE54->mainCallback2 = sub_81B89F0; + gBagMenu->mainCallback2 = sub_81B89F0; unknown_ItemMenu_Confirm(taskId); } else diff --git a/src/librfu.c b/src/librfu.c new file mode 100644 index 000000000..cdf14b693 --- /dev/null +++ b/src/librfu.c @@ -0,0 +1,9 @@ +#include "global.h" +#include "librfu.h" + +struct RfuUnk1* gUnknown_03007870[4]; +struct RfuUnk2* gUnknown_03007880[4]; +struct RfuUnk5 *gUnknown_03007890; +u32 *gUnknown_03007894; +struct RfuUnk3* gUnknown_03007898; +u8 gUnknown_030078A0[12]; diff --git a/src/librfu_intr.c b/src/librfu_intr.c index bdf8b072a..c6db9a50c 100644 --- a/src/librfu_intr.c +++ b/src/librfu_intr.c @@ -1,4 +1,5 @@ #include "global.h" #include "main.h" +#include "librfu.h" //TODO: decompile asm/librfu_intr.s to here diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c index 556b79bf8..670692118 100644 --- a/src/librfu_stwi.c +++ b/src/librfu_stwi.c @@ -1,6 +1,8 @@ #include "global.h" #include "librfu.h" +struct RfuStruct *gRfuState; + extern IntrFunc IntrSIO32(void); extern void STWI_stop_timer(void); diff --git a/src/link.c b/src/link.c index bcdcb52a4..9928b48da 100644 --- a/src/link.c +++ b/src/link.c @@ -52,22 +52,21 @@ struct LinkTestBGInfo // Static RAM declarations -IWRAM_DATA struct BlockTransfer sBlockSend; -IWRAM_DATA u32 link_c_unused_03000d1c; -IWRAM_DATA struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS]; -IWRAM_DATA u32 sBlockSendDelayCounter; -IWRAM_DATA u32 gUnknown_03000D54; -IWRAM_DATA u8 gUnknown_03000D58; -IWRAM_DATA u32 sPlayerDataExchangeStatus; -IWRAM_DATA u32 gUnknown_03000D60; -IWRAM_DATA u8 sLinkTestLastBlockSendPos; -ALIGNED() IWRAM_DATA u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS]; -IWRAM_DATA u8 sNumVBlanksWithoutSerialIntr; -IWRAM_DATA bool8 sSendBufferEmpty; -IWRAM_DATA u16 sSendNonzeroCheck; -IWRAM_DATA u16 sRecvNonzeroCheck; -IWRAM_DATA u8 sChecksumAvailable; -IWRAM_DATA u8 sHandshakePlayerCount; +static struct BlockTransfer sBlockSend; +static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS]; +static u32 sBlockSendDelayCounter; +static u32 gUnknown_03000D54; +static u8 gUnknown_03000D58; +static u32 sPlayerDataExchangeStatus; +static u32 gUnknown_03000D60; +static u8 sLinkTestLastBlockSendPos; +static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS]; +static u8 sNumVBlanksWithoutSerialIntr; +static bool8 sSendBufferEmpty; +static u16 sSendNonzeroCheck; +static u16 sRecvNonzeroCheck; +static u8 sChecksumAvailable; +static u8 sHandshakePlayerCount; u16 gLinkPartnersHeldKeys[6]; u32 gLinkDebugSeed; diff --git a/src/link_rfu.c b/src/link_rfu.c index 9732e9889..1f3ae4f3c 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -24,10 +24,10 @@ extern u16 gHeldKeyCodeToSend; struct UnkRfuStruct_1 gUnknown_03004140; struct UnkRfuStruct_2 gUnknown_03005000; -IWRAM_DATA u8 gUnknown_03000D74; -ALIGNED(4) IWRAM_DATA u8 gUnknown_03000D78[8]; -IWRAM_DATA u8 gUnknown_03000D80[16]; -IWRAM_DATA u16 gUnknown_03000D90[8]; +BSS_DATA u8 gUnknown_03000D74; +ALIGNED(4) BSS_DATA u8 gUnknown_03000D78[8]; +BSS_DATA u8 gUnknown_03000D80[16]; +BSS_DATA u16 gUnknown_03000D90[8]; EWRAM_DATA u8 gWirelessStatusIndicatorSpriteId = 0; EWRAM_DATA ALIGNED(4) struct UnkLinkRfuStruct_02022B14 gUnknown_02022B14 = {}; @@ -2021,6 +2021,8 @@ void sub_800DBF8(u8 *q1, u8 mode) } } +// File boundary here maybe? + void PkmnStrToASCII(u8 *q1, const u8 *q2) { s32 i; @@ -2413,7 +2415,7 @@ void RecordMixTrainerNames(void) } } } - + // Save the connected trainers first, at the top of the list. nextSpace = 0; for (i = 0; i < GetLinkPlayerCount(); i++) @@ -2444,7 +2446,7 @@ void RecordMixTrainerNames(void) } } } - + // Finalize the new list, and clean up. memcpy(gSaveBlock1Ptr->trainerNameRecords, newRecords, 20 * sizeof(struct TrainerNameRecord)); free(newRecords); @@ -2914,70 +2916,21 @@ void sub_800EF88(u8 a0) } } -#ifdef NONMATCHING -// FIXME: gUnknown_03005000.unk_c87 should be in r5 -// FIXME: gRecvCmds should be in r6 and r7 void sub_800EFB0(void) { s32 i, j; + for (i = 0; i < 5; i++) { + struct UnkRfuStruct_2 *ptr = &gUnknown_03005000; for (j = 0; j < 7; j++) { - gUnknown_03005000.unk_c87[i][j][1] = gRecvCmds[i][j] >> 8; - gUnknown_03005000.unk_c87[i][j][0] = gRecvCmds[i][j]; + ptr->unk_c87[i][j][1] = gRecvCmds[i][j] >> 8; + ptr->unk_c87[i][j][0] = gRecvCmds[i][j]; } } CpuFill16(0, gRecvCmds, sizeof gRecvCmds); } -#else -NAKED void sub_800EFB0(void) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tsub sp, 0x4\n" - "\tmovs r2, 0\n" - "\tldr r7, =gRecvCmds\n" - "\tldr r0, =gUnknown_03005000\n" - "\tadds r6, r7, 0\n" - "\tldr r1, =0x00000c87\n" - "\tadds r5, r0, r1\n" - "_0800EFC0:\n" - "\tmovs r3, 0\n" - "\tlsls r0, r2, 3\n" - "\tlsls r1, r2, 4\n" - "\tadds r4, r2, 0x1\n" - "\tsubs r0, r2\n" - "\tlsls r0, 1\n" - "\tadds r2, r0, r5\n" - "\tadds r1, r6\n" - "_0800EFD0:\n" - "\tldrh r0, [r1]\n" - "\tlsrs r0, 8\n" - "\tstrb r0, [r2, 0x1]\n" - "\tldrh r0, [r1]\n" - "\tstrb r0, [r2]\n" - "\tadds r2, 0x2\n" - "\tadds r1, 0x2\n" - "\tadds r3, 0x1\n" - "\tcmp r3, 0x6\n" - "\tble _0800EFD0\n" - "\tadds r2, r4, 0\n" - "\tcmp r2, 0x4\n" - "\tble _0800EFC0\n" - "\tmovs r0, 0\n" - "\tmov r1, sp\n" - "\tstrh r0, [r1]\n" - "\tldr r2, =0x01000028\n" - "\tmov r0, sp\n" - "\tadds r1, r7, 0\n" - "\tbl CpuSet\n" - "\tadd sp, 0x4\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.pool"); -} -#endif void sub_800F014(void) { @@ -3542,7 +3495,7 @@ void sub_800FD14(u16 command) } } -void sub_800FE50(u16 *a0) +void sub_800FE50(void *a0) { if (gSendCmd[0] == 0 && !sub_8011A80()) { @@ -5191,4 +5144,3 @@ u32 GetRfuRecvQueueLength(void) { return gUnknown_03005000.unk_124.unk_8c2; } - diff --git a/src/load_save.c b/src/load_save.c index 150c557c6..5857f2b46 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -42,10 +42,10 @@ EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0}; EWRAM_DATA u32 gLastEncryptionKey = 0; // IWRAM common -IWRAM_DATA bool32 gFlashMemoryPresent; -IWRAM_DATA struct SaveBlock1 *gSaveBlock1Ptr; -IWRAM_DATA struct SaveBlock2 *gSaveBlock2Ptr; -IWRAM_DATA struct PokemonStorage *gPokemonStoragePtr; +bool32 gFlashMemoryPresent; +struct SaveBlock1 *gSaveBlock1Ptr; +struct SaveBlock2 *gSaveBlock2Ptr; +struct PokemonStorage *gPokemonStoragePtr; // code void CheckForFlashMemory(void) @@ -1,3 +1,4 @@ +#include <string.h> #include "gba/m4a_internal.h" extern const u8 gCgb3Vol[]; diff --git a/src/main.c b/src/main.c index 40381bb68..06425e661 100644 --- a/src/main.c +++ b/src/main.c @@ -85,7 +85,27 @@ void EnableVCountIntrAtLine150(void); void AgbMain() { +#if MODERN + // Modern compilers are liberal with the stack on entry to this function, + // so RegisterRamReset may crash if it resets IWRAM. + RegisterRamReset(RESET_ALL & ~RESET_IWRAM); + asm("mov\tr1, #0xC0\n" + "\tlsl\tr1, r1, #0x12\n" + "\tmov r2, #0xFC\n" + "\tlsl r2, r2, #0x7\n" + "\tadd\tr2, r1, r2\n" + "\tmov\tr0, #0\n" + "\tmov\tr3, r0\n" + "\tmov\tr4, r0\n" + "\tmov\tr5, r0\n" + ".LCU0:\n" + "\tstmia r1!, {r0, r3, r4, r5}\n" + "\tcmp\tr1, r2\n" + "\tbcc\t.LCU0\n" + ); +#else RegisterRamReset(RESET_ALL); +#endif //MODERN *(vu16 *)BG_PLTT = 0x7FFF; InitGpuRegManager(); REG_WAITCNT = WAITCNT_PREFETCH_ENABLE | WAITCNT_WS0_S_1 | WAITCNT_WS0_N_3; diff --git a/src/main_menu.c b/src/main_menu.c index bc509c70d..6a0bd9e2d 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -176,7 +176,7 @@ static EWRAM_DATA u8 gUnknown_02022D04 = 0; static EWRAM_DATA u16 sCurrItemAndOptionMenuCheck = 0; -static IWRAM_DATA u8 sBirchSpeechMainTaskId; +static u8 sBirchSpeechMainTaskId; // Static ROM declarations diff --git a/src/match_call.c b/src/match_call.c index 6221affe1..b02af9977 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -2012,4 +2012,4 @@ void sub_8197184(u32 windowId, u32 destOffset, u32 paletteId) void sub_81971C4(u32 windowId, u32 tileOffset, u32 paletteId) { DrawMatchCallTextBoxBorder(windowId, tileOffset, paletteId); -}
\ No newline at end of file +} diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index 8bb9cb6e4..64f04f3bc 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -33,7 +33,7 @@ static void Task_BardSong(u8 taskId); static void StorytellerSetup(void); static void Storyteller_ResetFlag(void); -IWRAM_DATA u8 sSelectedStory; +static u8 sSelectedStory; struct BardSong gBardSong; diff --git a/src/menu.c b/src/menu.c index 354346d27..8d50d4dcc 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1,6 +1,7 @@ #include "global.h" #include "alloc.h" #include "bg.h" +#include "blit.h" #include "dma3.h" #include "event_data.h" #include "graphics.h" @@ -2013,337 +2014,82 @@ void PrintPlayerNameOnWindow(u8 windowId, const u8 *src, u16 x, u16 y) AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, 0xFF, 0); } -//Screw this function, it's long and unreferenced and ugh +// Unused. Similar to BlitBitmapRect4Bit. +void sub_819A080(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height) +{ + int loopSrcY, loopDstY, loopSrcX, loopDstX, xEnd, yEnd, multiplierSrcY, multiplierDstY; + const u8 *pixelsSrc; + u16 *pixelsDst; + u16 toOrr; -struct UnkStruct_819A080 { - u8 *unk00; - u16 unk04; - u16 unk06; -}; + if (dst->width - dstX < width) + xEnd = dst->width - dstX + srcX; + else + xEnd = width + srcX; + + if (dst->height - dstY < height) + yEnd = srcY + dst->height - dstY; + else + yEnd = srcY + height; -#ifdef NONMATCHING -void sub_819A080(struct UnkStruct_819A080 *a0, struct UnkStruct_819A080 *a1, u16 a2, u16 a3, u16 a4, u16 a5, u16 a6, u16 a7) -{ - // r3 = a3 - // r4 = a5 - // r1 = a6 - // r5 = a7 - // sp+00 = a0 - // sp+04 = a1 - // sp+08 = a2 - // sp+0c = a4 - int sp10 = a1->unk04 - a4 < a6 ? a1->unk04 - a4 + a2 : a6 + a2; - int sp14 = a0->unk06 - a5 < a7 ? a3 + a0->unk06 - a5 : a3 + a7; - int sp18 = (a0->unk04 + (a0->unk04 & 0x7)) / 8; - int sp1c = (a1->unk04 + (a1->unk04 & 0x7)) / 8; - int r12; // sp+20 - int r8; // sp+24 - int r5; - int r6; - u16 r2; - - for (r12 = a3, r8 = a5; r12 < sp14; r12++, r8++) - { - for (r5 = a2, r6 = a4; a5 < sp10; a5++, a6++) + multiplierSrcY = (src->width + (src->width & 7)) >> 3; + multiplierDstY = (dst->width + (dst->width & 7)) >> 3; + + for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++) + { + for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++) { - u8 *r3 = a0->unk00 + ((r5 >> 1) & 0x3) + ((r5 >> 3) << 5) + (((r12 >> 3) * sp18) << 5) + ((r12 & 0x7) << 2); - u8 *r4 = a1->unk00 + ((r6 >> 1) & 0x3) + ((r6 >> 3) << 5) + (((r8 >> 3) * sp1c) << 5) + ((r8 & 0x7) << 2); - if (((uintptr_t)r4) & 0x1) + pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B); + pixelsDst = (void*) dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + ((( loopDstY >> 3) * multiplierDstY) << 5) + ((u32)( loopDstY << 0x1d) >> 0x1B); + + if ((uintptr_t )pixelsDst & 0x1) { - u16 *r4_2 = (u16 *)(r4 - 1); - if (r6 & 0x1) + pixelsDst = (void*)(pixelsDst) - 1; + if (loopDstX & 0x1) { - r2 = *r4_2 & 0x0fff; - if (r5 & 0x1) - *r4_2 = r2 | ((*r3 & 0xf0) << 8); + toOrr = *pixelsDst & 0x0fff; + if (loopSrcX & 0x1) + *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 8); else - *r4_2 = r2 | ((*r3 & 0x0f) << 12); + *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 12); } else { - r2 = *r4_2 * 0xf0ff; - if (r5 & 0x1) - *r4_2 = r2 | ((*r3 & 0xf0) << 4); + toOrr = *pixelsDst & 0xf0ff; + if (loopSrcX & 0x1) + *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 4); else - *r4_2 = r2 | ((*r3 & 0x0f) << 8); + *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 8); } } else { - u16 *r4_2 = (u16 *)r4; - if (r6 & 1) + if (loopDstX & 1) { - r2 = *r4_2 & 0xff0f; - if (r5 & 1) - *r4_2 = r2 | ((*r3 & 0xf0) << 0); + toOrr = *pixelsDst & 0xff0f; + if (loopSrcX & 1) + *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) << 0); else - *r4_2 = r2 | ((*r3 & 0x0f) << 4); + *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) << 4); } else { - r2 = *r4_2 & 0xfff0; - if (r5 & 1) - *r4_2 = r2 | ((*r3 & 0xf0) >> 4); + toOrr = *pixelsDst & 0xfff0; + if (loopSrcX & 1) + *pixelsDst = toOrr | ((*pixelsSrc & 0xf0) >> 4); else - *r4_2 = r2 | ((*r3 & 0x0f) >> 0); + *pixelsDst = toOrr | ((*pixelsSrc & 0x0f) >> 0); } } + + // Needed to match, urgh. + #ifndef NONMATCHING + asm("":::"r4"); + pixelsDst++;pixelsDst--; + #endif // NONMATCHING } } } -#else -NAKED -void sub_819A080(struct UnkStruct_819A080 *a0, struct UnkStruct_819A080 *a1, u16 a2, u16 a3, u16 a4, u16 a5, u16 a6, u16 a7) -{ - asm("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, #0x28\n\ - str r0, [sp]\n\ - str r1, [sp, #0x4]\n\ - ldr r0, [sp, #0x48]\n\ - ldr r4, [sp, #0x4C]\n\ - ldr r1, [sp, #0x50]\n\ - ldr r5, [sp, #0x54]\n\ - lsl r2, #16\n\ - lsr r2, #16\n\ - str r2, [sp, #0x8]\n\ - lsl r3, #16\n\ - lsr r3, #16\n\ - lsl r0, #16\n\ - lsr r0, #16\n\ - str r0, [sp, #0xC]\n\ - lsl r4, #16\n\ - lsr r4, #16\n\ - lsl r1, #16\n\ - lsr r1, #16\n\ - lsl r5, #16\n\ - lsr r5, #16\n\ - ldr r2, [sp, #0x4]\n\ - ldrh r0, [r2, #0x4]\n\ - ldr r2, [sp, #0xC]\n\ - sub r0, r2\n\ - ldr r2, [sp, #0x8]\n\ - add r2, r1, r2\n\ - str r2, [sp, #0x10]\n\ - cmp r0, r1\n\ - bge _0819A0CC\n\ - ldr r1, [sp, #0x8]\n\ - add r0, r1\n\ - str r0, [sp, #0x10]\n\ -_0819A0CC:\n\ - ldr r2, [sp, #0x4]\n\ - ldrh r1, [r2, #0x6]\n\ - sub r0, r1, r4\n\ - cmp r0, r5\n\ - bge _0819A0DE\n\ - add r0, r3, r1\n\ - sub r0, r4\n\ - str r0, [sp, #0x14]\n\ - b _0819A0E2\n\ -_0819A0DE:\n\ - add r5, r3, r5\n\ - str r5, [sp, #0x14]\n\ -_0819A0E2:\n\ - ldr r0, [sp]\n\ - ldrh r1, [r0, #0x4]\n\ - mov r2, #0x7\n\ - add r0, r1, #0\n\ - and r0, r2\n\ - add r1, r0\n\ - asr r1, #3\n\ - str r1, [sp, #0x18]\n\ - ldr r0, [sp, #0x4]\n\ - ldrh r1, [r0, #0x4]\n\ - add r0, r1, #0\n\ - and r0, r2\n\ - add r1, r0\n\ - asr r1, #3\n\ - str r1, [sp, #0x1C]\n\ - mov r12, r3\n\ - mov r8, r4\n\ - ldr r1, [sp, #0x14]\n\ - cmp r12, r1\n\ - blt _0819A10C\n\ - b _0819A24A\n\ -_0819A10C:\n\ - ldr r5, [sp, #0x8]\n\ - ldr r6, [sp, #0xC]\n\ - mov r2, r12\n\ - add r2, #0x1\n\ - str r2, [sp, #0x20]\n\ - mov r0, r8\n\ - add r0, #0x1\n\ - str r0, [sp, #0x24]\n\ - ldr r1, [sp, #0x10]\n\ - cmp r5, r1\n\ - blt _0819A124\n\ - b _0819A23A\n\ -_0819A124:\n\ - mov r7, #0x1\n\ - mov r2, #0xF0\n\ - mov r10, r2\n\ - mov r0, #0xF\n\ - mov r9, r0\n\ -_0819A12E:\n\ - asr r0, r5, #1\n\ - mov r1, #0x3\n\ - and r0, r1\n\ - ldr r2, [sp]\n\ - ldr r1, [r2]\n\ - add r1, r0\n\ - asr r0, r5, #3\n\ - lsl r0, #5\n\ - add r1, r0\n\ - mov r2, r12\n\ - asr r0, r2, #3\n\ - ldr r2, [sp, #0x18]\n\ - mul r0, r2\n\ - lsl r0, #5\n\ - add r1, r0\n\ - mov r2, r12\n\ - lsl r0, r2, #29\n\ - lsr r0, #27\n\ - add r3, r1, r0\n\ - asr r0, r6, #1\n\ - mov r1, #0x3\n\ - and r0, r1\n\ - ldr r2, [sp, #0x4]\n\ - ldr r1, [r2]\n\ - add r1, r0\n\ - asr r0, r6, #3\n\ - lsl r0, #5\n\ - add r1, r0\n\ - mov r2, r8\n\ - asr r0, r2, #3\n\ - ldr r2, [sp, #0x1C]\n\ - mul r0, r2\n\ - lsl r0, #5\n\ - add r1, r0\n\ - mov r2, r8\n\ - lsl r0, r2, #29\n\ - lsr r0, #27\n\ - add r4, r1, r0\n\ - add r0, r4, #0\n\ - and r0, r7\n\ - cmp r0, #0\n\ - beq _0819A1DA\n\ - sub r4, #0x1\n\ - add r0, r6, #0\n\ - and r0, r7\n\ - cmp r0, #0\n\ - beq _0819A1B2\n\ - ldrh r0, [r4]\n\ - ldr r2, =0x00000fff\n\ - and r2, r0\n\ - add r0, r5, #0\n\ - and r0, r7\n\ - cmp r0, #0\n\ - beq _0819A1A8\n\ - ldrb r1, [r3]\n\ - mov r0, r10\n\ - and r0, r1\n\ - lsl r0, #8\n\ - b _0819A22A\n\ - .pool\n\ -_0819A1A8:\n\ - ldrb r1, [r3]\n\ - mov r0, r9\n\ - and r0, r1\n\ - lsl r0, #12\n\ - b _0819A22A\n\ -_0819A1B2:\n\ - ldrh r0, [r4]\n\ - ldr r2, =0x0000f0ff\n\ - and r2, r0\n\ - add r0, r5, #0\n\ - and r0, r7\n\ - cmp r0, #0\n\ - beq _0819A1D0\n\ - ldrb r1, [r3]\n\ - mov r0, r10\n\ - and r0, r1\n\ - lsl r0, #4\n\ - b _0819A22A\n\ - .pool\n\ -_0819A1D0:\n\ - ldrb r1, [r3]\n\ - mov r0, r9\n\ - and r0, r1\n\ - lsl r0, #8\n\ - b _0819A22A\n\ -_0819A1DA:\n\ - add r0, r6, #0\n\ - and r0, r7\n\ - cmp r0, #0\n\ - beq _0819A206\n\ - ldrh r0, [r4]\n\ - ldr r2, =0x0000ff0f\n\ - and r2, r0\n\ - add r0, r5, #0\n\ - and r0, r7\n\ - cmp r0, #0\n\ - beq _0819A1FC\n\ - ldrb r1, [r3]\n\ - mov r0, r10\n\ - b _0819A228\n\ - .pool\n\ -_0819A1FC:\n\ - ldrb r1, [r3]\n\ - mov r0, r9\n\ - and r0, r1\n\ - lsl r0, #4\n\ - b _0819A22A\n\ -_0819A206:\n\ - ldrh r0, [r4]\n\ - ldr r2, =0x0000fff0\n\ - and r2, r0\n\ - add r0, r5, #0\n\ - and r0, r7\n\ - cmp r0, #0\n\ - beq _0819A224\n\ - ldrb r1, [r3]\n\ - mov r0, r10\n\ - and r0, r1\n\ - lsr r0, #4\n\ - b _0819A22A\n\ - .pool\n\ -_0819A224:\n\ - ldrb r1, [r3]\n\ - mov r0, r9\n\ -_0819A228:\n\ - and r0, r1\n\ -_0819A22A:\n\ - orr r2, r0\n\ - strh r2, [r4]\n\ - add r5, #0x1\n\ - add r6, #0x1\n\ - ldr r0, [sp, #0x10]\n\ - cmp r5, r0\n\ - bge _0819A23A\n\ - b _0819A12E\n\ -_0819A23A:\n\ - ldr r1, [sp, #0x20]\n\ - mov r12, r1\n\ - ldr r2, [sp, #0x24]\n\ - mov r8, r2\n\ - ldr r0, [sp, #0x14]\n\ - cmp r12, r0\n\ - bge _0819A24A\n\ - b _0819A10C\n\ -_0819A24A:\n\ - add sp, #0x28\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"); -} -#endif void sub_819A25C(u8 palOffset, u16 speciesId) { diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 801e2546b..cb0d621c6 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -27,7 +27,7 @@ EWRAM_DATA static struct YesNoFuncTable gUnknown_0203A138 = {0}; EWRAM_DATA static u8 gUnknown_0203A140 = 0; // IWRAM bss vars -IWRAM_DATA static TaskFunc gUnknown_0300117C; +static TaskFunc gUnknown_0300117C; // const rom data static const struct OamData sOamData_859F4E8 = diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 34dd1fe2b..1536cf413 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -458,338 +458,106 @@ void sub_81D2230(struct UnknownStruct_81D1ED4 *arg0) arg0->unk354 = 1; } -/* TODO -static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 arg1[66][2], struct UnknownSubStruct_81D1ED4 *arg2, struct UnknownSubStruct_81D1ED4 *arg3, u8 arg4, u16 arg5[66][2]) +static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 *arg1, struct UnknownSubStruct_81D1ED4 *arg2, struct UnknownSubStruct_81D1ED4 *arg3, u8 arg4, u16 *arg5) { - s32 var_2C = 0; - u16 r8; - s32 r10, r4, r2, r0, r1, var_30; + u16 i, r8, r10, r0, var_30; + u16 *ptr; + s32 r4, var_2C; + var_2C = 0; if (arg2->unk2 < arg3->unk2) { - r2 = arg2->unk2; r10 = arg2->unk2; r0 = arg3->unk2; - r1 = arg2->unk0; - r4 = r1 << 10; + r4 = arg2->unk0 << 10; var_30 = arg3->unk0; + r8 = r0 - r10; + if (r8 != 0) + var_2C = ((var_30 - arg2->unk0) << 10) / r8; } else { - r0 = arg2->unk0; + r0 = arg2->unk2; r10 = arg3->unk2; - r1 = arg3->unk0; - r4 = r1 << 10; + r4 = arg3->unk0 << 10; var_30 = arg2->unk0; - r2 = arg3->unk2; + r8 = r0 - r10; + if (r8 != 0) + var_2C = ((var_30 - arg3->unk0) << 10) / r8; } - r8 = r0 - r2; - if (r8 != 0) - var_2C = ((var_30 - r1) << 10) / r8; r8++; if (arg5 == NULL) { + arg1 += (r10 - 56) * 2; + for (i = 0; i < r8; i++) + { + arg1[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; + r4 += var_2C; + arg1 += 2; + } + ptr = arg1 - 2; } -} -*/ -NAKED -static void sub_81D2278(struct UnknownStruct_81D1ED4 *arg0, u16 arg1[66][2], struct UnknownSubStruct_81D1ED4 *arg2, struct UnknownSubStruct_81D1ED4 *arg3, u8 arg4, u16 arg5[66][2]) -{ - asm_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, 0x18\n\ - str r0, [sp]\n\ - adds r6, r1, 0\n\ - adds r5, r2, 0\n\ - str r3, [sp, 0x4]\n\ - ldr r0, [sp, 0x38]\n\ - ldr r7, [sp, 0x3C]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ - movs r0, 0\n\ - str r0, [sp, 0xC]\n\ - ldrh r0, [r5, 0x2]\n\ - ldrh r1, [r3, 0x2]\n\ - cmp r0, r1\n\ - bcs _081D22B2\n\ - adds r2, r0, 0\n\ - mov r10, r2\n\ - ldrh r0, [r3, 0x2]\n\ - ldrh r1, [r5]\n\ - lsls r4, r1, 10\n\ - ldrh r3, [r3]\n\ - str r3, [sp, 0x8]\n\ - b _081D22C6\n\ - _081D22B2:\n\ - ldrh r0, [r5, 0x2]\n\ - ldr r1, [sp, 0x4]\n\ - ldrh r1, [r1, 0x2]\n\ - mov r10, r1\n\ - ldr r2, [sp, 0x4]\n\ - ldrh r1, [r2]\n\ - lsls r4, r1, 10\n\ - ldrh r3, [r5]\n\ - str r3, [sp, 0x8]\n\ - mov r2, r10\n\ - _081D22C6:\n\ - subs r0, r2\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ - cmp r0, 0\n\ - beq _081D22DE\n\ - subs r0, r3, r1\n\ - lsls r0, 10\n\ - mov r1, r8\n\ - bl __divsi3\n\ - str r0, [sp, 0xC]\n\ - _081D22DE:\n\ - mov r0, r8\n\ - adds r0, 0x1\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ - cmp r7, 0\n\ - bne _081D2328\n\ - mov r0, r10\n\ - subs r0, 0x38\n\ - lsls r0, 2\n\ - adds r6, r0\n\ - movs r5, 0\n\ - mov r3, r9\n\ - lsls r3, 1\n\ - mov r12, r3\n\ - ldr r0, [sp, 0x8]\n\ - add r0, r9\n\ - str r0, [sp, 0x10]\n\ - cmp r7, r8\n\ - bcs _081D23B6\n\ - movs r7, 0x1\n\ - _081D2308:\n\ - adds r2, r3, r6\n\ - asrs r1, r4, 10\n\ - asrs r0, r4, 9\n\ - ands r0, r7\n\ - adds r1, r0\n\ - add r1, r9\n\ - strh r1, [r2]\n\ - ldr r1, [sp, 0xC]\n\ - adds r4, r1\n\ - adds r6, 0x4\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, r8\n\ - bcc _081D2308\n\ - b _081D23B6\n\ - _081D2328:\n\ - ldr r2, [sp, 0xC]\n\ - cmp r2, 0\n\ - ble _081D23C0\n\ - mov r0, r10\n\ - subs r0, 0x38\n\ - lsls r0, 2\n\ - adds r7, r0\n\ - movs r5, 0\n\ - mov r3, r9\n\ - lsls r3, 1\n\ - mov r12, r3\n\ - ldr r0, [sp, 0x8]\n\ - add r0, r9\n\ - str r0, [sp, 0x10]\n\ - cmp r5, r8\n\ - bcs _081D237A\n\ - ldr r0, =0x00026bff\n\ - cmp r4, r0\n\ - bgt _081D237A\n\ - mov r1, r12\n\ - str r1, [sp, 0x14]\n\ - _081D2352:\n\ - ldr r3, [sp, 0x14]\n\ - adds r2, r3, r7\n\ - asrs r1, r4, 10\n\ - asrs r0, r4, 9\n\ - movs r3, 0x1\n\ - ands r0, r3\n\ - adds r1, r0\n\ - add r1, r9\n\ - strh r1, [r2]\n\ - ldr r0, [sp, 0xC]\n\ - adds r4, r0\n\ - adds r7, 0x4\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, r8\n\ - bcs _081D237A\n\ - ldr r1, =0x00026bff\n\ - cmp r4, r1\n\ - ble _081D2352\n\ - _081D237A:\n\ - mov r2, r10\n\ - adds r1, r2, r5\n\ - ldr r3, [sp]\n\ - movs r2, 0xD4\n\ - lsls r2, 2\n\ - adds r0, r3, r2\n\ - strh r1, [r0]\n\ - ldrh r0, [r0]\n\ - subs r0, 0x38\n\ - lsls r0, 2\n\ - adds r6, r0\n\ - cmp r5, r8\n\ - bcs _081D23B6\n\ - mov r3, r12\n\ - movs r7, 0x1\n\ - _081D2398:\n\ - adds r2, r3, r6\n\ - asrs r1, r4, 10\n\ - asrs r0, r4, 9\n\ - ands r0, r7\n\ - adds r1, r0\n\ - add r1, r9\n\ - strh r1, [r2]\n\ - ldr r0, [sp, 0xC]\n\ - adds r4, r0\n\ - adds r6, 0x4\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, r8\n\ - bcc _081D2398\n\ - _081D23B6:\n\ - subs r0, r6, 0x4\n\ - b _081D248C\n\ - .pool\n\ - _081D23C0:\n\ - ldr r1, [sp, 0xC]\n\ - cmp r1, 0\n\ - bge _081D2464\n\ - mov r0, r10\n\ - subs r0, 0x38\n\ - lsls r0, 2\n\ - adds r6, r0\n\ - movs r5, 0\n\ - mov r2, r9\n\ - lsls r2, 1\n\ - mov r12, r2\n\ - ldr r3, [sp, 0x8]\n\ - add r3, r9\n\ - str r3, [sp, 0x10]\n\ - cmp r5, r8\n\ - bcs _081D241E\n\ - adds r3, r2, r6\n\ - asrs r1, r4, 10\n\ - asrs r0, r4, 9\n\ - movs r2, 0x1\n\ - ands r0, r2\n\ - adds r1, r0\n\ - add r1, r9\n\ - strh r1, [r3]\n\ - b _081D2414\n\ - _081D23F2:\n\ - ldr r0, [sp, 0xC]\n\ - adds r4, r0\n\ - adds r6, 0x4\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, r8\n\ - bcs _081D241E\n\ - mov r1, r12\n\ - adds r3, r1, r6\n\ - asrs r2, r4, 10\n\ - asrs r0, r4, 9\n\ - movs r1, 0x1\n\ - ands r0, r1\n\ - adds r2, r0\n\ - add r2, r9\n\ - strh r2, [r3]\n\ - _081D2414:\n\ - ldr r0, =0x00026bff\n\ - cmp r4, r0\n\ - bgt _081D23F2\n\ - movs r0, 0x9B\n\ - strh r0, [r3]\n\ - _081D241E:\n\ - mov r2, r10\n\ - adds r1, r2, r5\n\ - ldr r3, [sp]\n\ - movs r2, 0xD4\n\ - lsls r2, 2\n\ - adds r0, r3, r2\n\ - strh r1, [r0]\n\ - ldrh r0, [r0]\n\ - subs r0, 0x38\n\ - lsls r0, 2\n\ - adds r7, r0\n\ - cmp r5, r8\n\ - bcs _081D245A\n\ - mov r3, r12\n\ - movs r6, 0x1\n\ - _081D243C:\n\ - adds r2, r3, r7\n\ - asrs r1, r4, 10\n\ - asrs r0, r4, 9\n\ - ands r0, r6\n\ - adds r1, r0\n\ - add r1, r9\n\ - strh r1, [r2]\n\ - ldr r0, [sp, 0xC]\n\ - adds r4, r0\n\ - adds r7, 0x4\n\ - adds r0, r5, 0x1\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - cmp r5, r8\n\ - bcc _081D243C\n\ - _081D245A:\n\ - subs r0, r7, 0x4\n\ - b _081D248C\n\ - .pool\n\ - _081D2464:\n\ - ldr r1, [sp]\n\ - movs r2, 0xD4\n\ - lsls r2, 2\n\ - adds r0, r1, r2\n\ - mov r3, r10\n\ - strh r3, [r0]\n\ - mov r0, r10\n\ - subs r0, 0x38\n\ - lsls r0, 2\n\ - adds r6, r0\n\ - adds r7, r0\n\ - ldrh r0, [r5]\n\ - adds r0, 0x1\n\ - strh r0, [r6, 0x2]\n\ - ldr r1, [sp, 0x4]\n\ - ldrh r0, [r1]\n\ - strh r0, [r7]\n\ - movs r0, 0x9B\n\ - strh r0, [r7, 0x2]\n\ - b _081D2494\n\ - _081D248C:\n\ - add r0, r12\n\ - mov r2, sp\n\ - ldrh r2, [r2, 0x10]\n\ - strh r2, [r0]\n\ - _081D2494:\n\ - add sp, 0x18\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\ - "); + else if (var_2C > 0) + { + arg5 += (r10 - 56) * 2; + // Less readable than the other loops, but it has to be written this way to match. + for (i = 0; i < r8; arg5[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4, r4 += var_2C, arg5 += 2, i++) + { + if (r4 >= (155 << 10)) + break; + } + + arg0->unk350 = r10 + i; + arg1 += (arg0->unk350 - 56) * 2; + for (; i < r8; i++) + { + arg1[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; + r4 += var_2C; + arg1 += 2; + } + + ptr = arg1 - 2; + } + else if (var_2C < 0) + { + arg1 += (r10 - 56) * 2; + for (i = 0; i < r8; i++) + { + arg1[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; + if (r4 < (155 << 10)) + { + arg1[arg4] = 155; + break; + } + r4 += var_2C; + arg1 += 2; + } + + arg0->unk350 = r10 + i; + arg5 += (arg0->unk350 - 56) * 2; + for (; i < r8; i++) + { + arg5[arg4] = (r4 >> 10) + ((r4 >> 9) & 1) + arg4; + r4 += var_2C; + arg5 += 2; + } + + ptr = arg5 - 2; + } + else + { + arg0->unk350 = r10; + arg1 += (r10 - 56) * 2; + arg5 += (r10 - 56) * 2; + arg1[1] = arg2->unk0 + 1; + arg5[0] = arg3->unk0; + arg5[1] = 155; + return; + } + + ptr[arg4] = arg4 + var_30; } static void sub_81D24A4(struct UnknownStruct_81D1ED4 *arg0) @@ -799,18 +567,18 @@ static void sub_81D24A4(struct UnknownStruct_81D1ED4 *arg0) if (arg0->unk12C[0].unk2 < arg0->unk12C[1].unk2) { r6 = arg0->unk12C[0].unk2; - sub_81D2278(arg0, arg0->unk140, &arg0->unk12C[0], &arg0->unk12C[1], 1, NULL); + sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[0], &arg0->unk12C[1], 1, NULL); } else { r6 = arg0->unk12C[1].unk2; - sub_81D2278(arg0, arg0->unk140, &arg0->unk12C[1], &arg0->unk12C[0], 0, NULL); + sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[1], &arg0->unk12C[0], 0, NULL); } - sub_81D2278(arg0, arg0->unk140, &arg0->unk12C[1], &arg0->unk12C[2], 1, NULL); + sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[1], &arg0->unk12C[2], 1, NULL); i = (arg0->unk12C[2].unk2 <= arg0->unk12C[3].unk2); - sub_81D2278(arg0, arg0->unk140, &arg0->unk12C[2], &arg0->unk12C[3], i, arg0->unk248); + sub_81D2278(arg0, arg0->unk140[0], &arg0->unk12C[2], &arg0->unk12C[3], i, arg0->unk248[0]); for (i = 56; i < r6; i++) { arg0->unk140[i - 56][0] = 0; @@ -841,15 +609,15 @@ static void sub_81D2634(struct UnknownStruct_81D1ED4 *arg0) if (arg0->unk12C[0].unk2 < arg0->unk12C[4].unk2) { r6 = arg0->unk12C[0].unk2; - sub_81D2278(arg0, arg0->unk248, &arg0->unk12C[0], &arg0->unk12C[4], 0, NULL); + sub_81D2278(arg0, arg0->unk248[0], &arg0->unk12C[0], &arg0->unk12C[4], 0, NULL); } else { r6 = arg0->unk12C[4].unk2; - sub_81D2278(arg0, arg0->unk248, &arg0->unk12C[4], &arg0->unk12C[0], 1, NULL); + sub_81D2278(arg0, arg0->unk248[0], &arg0->unk12C[4], &arg0->unk12C[0], 1, NULL); } - sub_81D2278(arg0, arg0->unk248, &arg0->unk12C[4], &arg0->unk12C[3], 0, NULL); + sub_81D2278(arg0, arg0->unk248[0], &arg0->unk12C[4], &arg0->unk12C[3], 0, NULL); for (i = 56; i < r6; i++) { @@ -1290,7 +1058,7 @@ void sub_81D3094(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 arg5, u u32 personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); LoadSpecialPokePic(&gMonFrontPicTable[species], tilesDst, species, personality, TRUE); - LZ77UnCompWram(GetFrontSpritePalFromSpeciesAndPersonality(species, trainerId, personality), palDst); + LZ77UnCompWram(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), palDst); } } diff --git a/src/mirage_tower.c b/src/mirage_tower.c index 898180df4..e398c2334 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -18,6 +18,7 @@ #include "constants/maps.h" #include "constants/rgb.h" #include "constants/songs.h" +#include "constants/metatile_labels.h" struct MirageTowerPulseBlend { u8 taskId; @@ -109,24 +110,24 @@ const struct SpriteSheet gMirageTowerCeilingCrumbleSpriteSheets[] = static const struct MetatileCoords sInvisibleMirageTowerMetatiles[] = { - {18, 53, 0x251}, - {19, 53, 0x251}, - {20, 53, 0x251}, - {18, 54, 0x251}, - {19, 54, 0x251}, - {20, 54, 0x251}, - {18, 55, 0x251}, - {19, 55, 0x251}, - {20, 55, 0x251}, - {18, 56, 0x251}, - {19, 56, 0x251}, - {20, 56, 0x251}, - {18, 57, 0x259}, - {19, 57, 0x259}, - {20, 57, 0x259}, - {18, 58, 0x121}, - {19, 58, 0x121}, - {20, 58, 0x121}, + {18, 53, METATILE_ID(Mauville, DeepSand_Center)}, + {19, 53, METATILE_ID(Mauville, DeepSand_Center)}, + {20, 53, METATILE_ID(Mauville, DeepSand_Center)}, + {18, 54, METATILE_ID(Mauville, DeepSand_Center)}, + {19, 54, METATILE_ID(Mauville, DeepSand_Center)}, + {20, 54, METATILE_ID(Mauville, DeepSand_Center)}, + {18, 55, METATILE_ID(Mauville, DeepSand_Center)}, + {19, 55, METATILE_ID(Mauville, DeepSand_Center)}, + {20, 55, METATILE_ID(Mauville, DeepSand_Center)}, + {18, 56, METATILE_ID(Mauville, DeepSand_Center)}, + {19, 56, METATILE_ID(Mauville, DeepSand_Center)}, + {20, 56, METATILE_ID(Mauville, DeepSand_Center)}, + {18, 57, METATILE_ID(Mauville, DeepSand_BottomMid)}, + {19, 57, METATILE_ID(Mauville, DeepSand_BottomMid)}, + {20, 57, METATILE_ID(Mauville, DeepSand_BottomMid)}, + {18, 58, METATILE_ID(General, SandPit_Center)}, + {19, 58, METATILE_ID(General, SandPit_Center)}, + {20, 58, METATILE_ID(General, SandPit_Center)}, }; static const union AnimCmd gSpriteAnim_8617DEC[] = @@ -257,7 +258,7 @@ EWRAM_DATA static struct Struct203CF10 *sUnknown_0203CF10 = NULL; EWRAM_DATA static struct BgRegOffsets *sBgShakeOffsets = NULL; EWRAM_DATA struct MirageTowerPulseBlend *sMirageTowerPulseBlend = NULL; -IWRAM_DATA static u16 gUnknown_030012A8[8]; +static u16 gUnknown_030012A8[8]; bool8 IsMirageTowerVisible(void) { diff --git a/src/multiboot.c b/src/multiboot.c index da90a55c0..c7e14392e 100644 --- a/src/multiboot.c +++ b/src/multiboot.c @@ -1,7 +1,7 @@ #include "gba/gba.h" #include "multiboot.h" -IWRAM_DATA static u16 MultiBoot_required_data[MULTIBOOT_NCHILD]; +static u16 MultiBoot_required_data[MULTIBOOT_NCHILD]; static int MultiBootSend(struct MultiBootParam *mp, u16 data); static int MultiBootHandShake(struct MultiBootParam *mp); @@ -435,7 +435,7 @@ static int MultiBootHandShake(struct MultiBootParam *mp) #undef must_data } -static void MultiBootWaitCycles(u32 cycles) +static NOINLINE void MultiBootWaitCycles(u32 cycles) { asm("mov r2, pc"); asm("lsr r2, #24"); diff --git a/src/new_game.c b/src/new_game.c index 7a0c668a4..ee67da9be 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -37,6 +37,7 @@ #include "contest.h" #include "item_menu.h" #include "pokemon_storage_system.h" +#include "pokemon_jump.h" #include "decoration_inventory.h" #include "secret_base.h" #include "player_pc.h" @@ -45,8 +46,6 @@ #include "mevent.h" #include "union_room_chat.h" -extern void ResetPokeJumpResults(void); - extern const u8 EventScript_ResetAllMapFlags[]; // this file's functions diff --git a/src/overworld.c b/src/overworld.c index 4356752c1..2097abc53 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -186,15 +186,15 @@ static u8 GetAdjustedInitialDirection(struct InitialPlayerAvatarState *playerStr static u16 GetCenterScreenMetatileBehavior(void); // IWRAM bss vars -IWRAM_DATA static void *sUnusedOverworldCallback; -IWRAM_DATA static u8 sPlayerTradingStates[4]; +static void *sUnusedOverworldCallback; +static u8 sPlayerTradingStates[4]; // This callback is called with a player's key code. It then returns an // adjusted key code, effectively intercepting the input before anything // can process it. -IWRAM_DATA static u16 (*sPlayerKeyInterceptCallback)(u32); -IWRAM_DATA static bool8 sUnknown_03000E18; -IWRAM_DATA static u8 sRfuKeepAliveTimer; -IWRAM_DATA static u32 sUnusedVar; +static u16 (*sPlayerKeyInterceptCallback)(u32); +static bool8 sUnknown_03000E18; +static u8 sRfuKeepAliveTimer; +static u32 sUnusedVar; // IWRAM common u16 *gBGTilemapBuffers1; diff --git a/src/palette.c b/src/palette.c index 5d1d6635c..eb49ce4c6 100644 --- a/src/palette.c +++ b/src/palette.c @@ -54,8 +54,10 @@ static void UpdateBlendRegisters(void); static bool8 IsSoftwarePaletteFadeFinishing(void); static void sub_80A2D54(u8 taskId); -EWRAM_DATA u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE] = {0}; -EWRAM_DATA u16 gPlttBufferFaded[PLTT_BUFFER_SIZE] = {0}; +// palette buffers require alignment with agbcc because +// unaligned word reads are issued in BlendPalette otherwise +ALIGNED(4) EWRAM_DATA u16 gPlttBufferUnfaded[PLTT_BUFFER_SIZE] = {0}; +ALIGNED(4) EWRAM_DATA u16 gPlttBufferFaded[PLTT_BUFFER_SIZE] = {0}; EWRAM_DATA struct PaletteStruct sPaletteStructs[0x10] = {0}; EWRAM_DATA struct PaletteFadeControl gPaletteFade = {0}; static EWRAM_DATA u32 gFiller_2037FE0 = 0; diff --git a/src/party_menu.c b/src/party_menu.c index d13dc1e97..dd0a4dabd 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -97,18 +97,21 @@ struct Unk_Rodata1 struct Struct203CEC4 { - TaskFunc unk0; + TaskFunc task; MainCallback exitCallback; u32 unk8_0:1; u32 unk8_1:3; u32 unk8_2:7; u32 unk9_0:7; - u32 unkA_0:14; - u8 unkC[3]; - u8 unkF[8]; - u8 unk17; - u16 palBuffer[0xB0]; - u8 filler[0xA0]; + u32 messageId:14; + u8 windowId[3]; + u8 actions[8]; + u8 listSize; + // In vanilla Emerald, only the first 0xB0 hwords (0x160 bytes) are actually used. + // However, a full 0x100 hwords (0x200 bytes) are allocated. + // It is likely that the 0x160 value used below is a constant defined by + // bin2c, the utility used to encode the compressed palette data. + u16 palBuffer[BG_PLTT_SIZE / sizeof(u16)]; s16 data[16]; }; @@ -117,10 +120,10 @@ struct Struct203CEDC const struct Unk_Rodata1 *unk0; const u8 *unk4; u8 windowId; - u8 unk9; - u8 unkA; - u8 unkB; - u8 unkC; + u8 monSpriteId; + u8 itemSpriteId; + u8 pokeballSpriteId; + u8 statusSpriteId; }; // EWRAM vars @@ -162,7 +165,7 @@ static void FreePartyPointers(void); static void PartyPaletteBufferCopy(u8); static void sub_81B0CEC(u8); static void UpdateSelectedPartyBox(struct Struct203CEDC *, u8); -static void sub_81B2720(u8); +static void DrawEmptySlot(u8 windowId); static void DisplayPartyPokemonSelectForRelearner(u8); static void DisplayPartyPokemonSelectForContest(u8); static void DisplayPartyPokemonSelectForBattle(u8); @@ -244,7 +247,7 @@ static void sub_81B227C(u8); static bool8 CanLearnTutorMove(u16, u8); static u16 GetTutorMove(u8); static bool8 sub_81B314C(void); -static void sub_81B3414(struct Pokemon*, u8); +static void CreateActionList(struct Pokemon*, u8); static u8 sub_81B8A2C(struct Pokemon*); static u8 sub_81B856C(s8); static void sub_81B469C(u8); @@ -292,7 +295,7 @@ static void UpdatePartyMonIconFrame(struct Sprite*); static void UpdatePartyMonIconFrameAndBounce(struct Sprite*); static void sub_81B5CB0(u16, struct Struct203CEDC*); static void sub_81B5DF0(u8, u8); -static void sub_81B5E74(struct Sprite*); +static void SpriteCB_HeldItem(struct Sprite*); static void party_menu_get_status_condition_and_update_object(struct Pokemon*, struct Struct203CEDC*); static void party_menu_update_status_condition_object(u8, struct Struct203CEDC*); static u8 sub_81B8984(void); @@ -470,7 +473,7 @@ static const u8 gUnknown_08615704[][6][8] = static const u32 gUnknown_086157C4[] = INCBIN_U32("graphics/interface/unknown_6157C4.bin"); static const u32 gUnknown_086157E0[] = INCBIN_U32("graphics/interface/unknown_6157E0.bin"); -static const u8 gUnknown_086157FC[][3] = +static const u8 sFontColorTable[][3] = { {0, 3, 2}, {0, 1, 6}, @@ -921,11 +924,33 @@ static const struct WindowTemplate gUnknown_08615980 = .baseBlock = 0x39D, }; -static const u8 gUnknown_08615988[] = {24, 25, 25, 25, 25, 25, 25, 25, 25, 26, 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, 40, 59, 60, 58, 58, 58, 58, 58, 58, 61, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 46, 47, 47, 47, 47, 47, 47, 47, 47, 48}; -static const u8 gUnknown_086159CE[] = {24, 25, 25, 25, 25, 25, 25, 25, 25, 26, 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, 40, 41, 41, 41, 41, 41, 41, 41, 41, 42, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 46, 47, 47, 47, 47, 47, 47, 47, 47, 48}; -static const u8 gUnknown_08615A14[] = {43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 49, 33, 33, 33, 33, 33, 33, 33, 33, 52, 53, 51, 51, 51, 51, 51, 51, 54, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57}; -static const u8 gUnknown_08615A4A[] = {43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 49, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 50, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57}; -static const u8 gUnknown_08615A80[] = {21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39}; +static const u8 sMainSlotTileNums[] = {24, 25, 25, 25, 25, 25, 25, 25, 25, 26, + 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, + 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, + 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, + 40, 59, 60, 58, 58, 58, 58, 58, 58, 61, + 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, + 46, 47, 47, 47, 47, 47, 47, 47, 47, 48}; + +static const u8 sMainSlotTileNums_Egg[] = {24, 25, 25, 25, 25, 25, 25, 25, 25, 26, + 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, + 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, + 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, + 40, 41, 41, 41, 41, 41, 41, 41, 41, 42, + 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, + 46, 47, 47, 47, 47, 47, 47, 47, 47, 48}; + +static const u8 sOtherSlotsTileNums[] = {43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, + 49, 33, 33, 33, 33, 33, 33, 33, 33, 52, 53, 51, 51, 51, 51, 51, 51, 54, + 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57}; + +static const u8 sOtherSlotsTileNums_Egg[] = {43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, + 49, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 50, + 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57}; + +static const u8 sEmptySlotTileNums[] = {21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, + 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, + 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39}; static const u8 gUnknown_08615AB6[] = {11, 12}; static const u8 gUnknown_08615AB8[] = {9, 10}; static const u8 gUnknown_08615ABA[] = {4, 5, 6}; @@ -950,52 +975,52 @@ static const u8 gUnknown_08615AEB[] = {97, 103, 104}; static const u8 gUnknown_08615AEE[] = {161, 167, 168}; static const u8 gUnknown_08615AF1[] = {17, 27, 28}; -static const u8 *const gUnknown_08615AF4[] = -{ - gUnknown_085E9E43, - gUnknown_085EA010, - gUnknown_085EA02A, - gUnknown_085E9E55, - gUnknown_085E9E64, - gUnknown_085E9E79, - gUnknown_085E9E8F, - gUnknown_085E9EBC, - gUnknown_085E9ED4, - gUnknown_085E9EE9, - gUnknown_085E9FDB, - gUnknown_085EA046, - gUnknown_085EA05B, - gUnknown_085E9F01, - gUnknown_085E9F58, - gUnknown_085E9F6F, - gUnknown_085E9F81, - gUnknown_085E9F90, - gUnknown_085E9FA7, - gUnknown_085E9FC2, +static const u8 *const sActionStringTable[] = +{ + gText_ChoosePokemon, + gText_ChoosePokemonCancel, + gText_ChoosePokemonConfirm, + gText_MoveToWhere, + gText_TeachWhichPokemon, + gText_UseOnWhichPokemon, + gText_GiveToWhichPokemon, + gText_NothingToCut, + gText_CantSurfHere, + gText_AlreadySurfing, + gText_CurrentIsTooFast, + gText_EnjoyCycling, + gText_InUseAlready_PM, + gText_CantUseHere, + gText_NoPokemonForBattle, + gText_ChoosePokemon2, + gText_NotEnoughHp, + gText_PokemonAreNeeded, + gText_PokemonCantBeSame, + gText_NoIdenticalHoldItems, gText_EmptyString2, - gUnknown_085E9EA6, - gUnknown_085E9F16, - gUnknown_085E9F2A, - gUnknown_085E9F42, - gUnknown_085E9FF9, - gUnknown_085EA073, + gText_DoWhatWithPokemon, + gText_RestoreWhichMove, + gText_BoostPp, + gText_DoWhatWithItem, + gText_DoWhatWithMail, + gText_AlreadyHoldingOne, }; -static const u8 *const gUnknown_08615B60[] = -{ - gUnknown_085EA091, - gUnknown_085EA099, - gUnknown_085EA09E, - gUnknown_085EA0A4, - gUnknown_085EA0AB, - gUnknown_085EA0E7, - gUnknown_085EA0B1, - gUnknown_085EA0B6, - gUnknown_085EA0BF, - gUnknown_085EA0C5, - gUnknown_085EA0CF, - gUnknown_085EA0D7, - gUnknown_085EA0DC, +static const u8 *const sSelectionStringTable[] = +{ + gText_NoUse, + gText_Able, + gText_First_PM, + gText_Second_PM, + gText_Third_PM, + gText_Fourth, + gText_Able2, + gText_NotAble, + gText_Able3, + gText_NotAble2, + gText_Learned, + gText_Have, + gText_DontHave, }; // Unknown unused data. Feel free to remove. @@ -1093,21 +1118,21 @@ struct [MENU_FIELD_MOVES + FIELD_MOVE_SWEET_SCENT] = {gMoveNames[MOVE_SWEET_SCENT], CursorCb_FieldMove}, }; -static const u8 gUnknown_08615D10[] = {0, 1, 2}; -static const u8 gUnknown_08615D13[] = {10, 0, 2}; -static const u8 gUnknown_08615D16[] = {11, 0, 2}; -static const u8 gUnknown_08615D19[] = {0, 2}; -static const u8 gUnknown_08615D1B[] = {12, 0, 2}; -static const u8 gUnknown_08615D1E[] = {13, 0, 2}; -static const u8 gUnknown_08615D21[] = {14, 0, 2}; -static const u8 gUnknown_08615D24[] = {4, 5, 9}; -static const u8 gUnknown_08615D27[] = {8, 7, 9}; -static const u8 gUnknown_08615D2A[] = {15, 0, 2}; -static const u8 gUnknown_08615D2D[] = {16, 0, 2}; -static const u8 gUnknown_08615D30[] = {17, 0, 2}; -static const u8 gUnknown_08615D33[] = {5, 18, 2}; - -static const u8 *const gUnknown_08615D38[] = +static const u8 gUnknown_08615D10[] = {MENU_SUMMARY, MENU_SWITCH, MENU_CANCEL1}; +static const u8 gUnknown_08615D13[] = {MENU_SHIFT, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 gUnknown_08615D16[] = {MENU_SEND_OUT, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 gUnknown_08615D19[] = {MENU_SUMMARY, MENU_CANCEL1}; +static const u8 gUnknown_08615D1B[] = {MENU_ENTER, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 gUnknown_08615D1E[] = {MENU_NO_ENTRY, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 gUnknown_08615D21[] = {MENU_STORE, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 gUnknown_08615D24[] = {MENU_GIVE, MENU_TAKE_ITEM, MENU_CANCEL2}; +static const u8 gUnknown_08615D27[] = {MENU_READ, MENU_TAKE_MAIL, MENU_CANCEL2}; +static const u8 gUnknown_08615D2A[] = {MENU_REGISTER, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 gUnknown_08615D2D[] = {MENU_TRADE1, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 gUnknown_08615D30[] = {MENU_TRADE2, MENU_SUMMARY, MENU_CANCEL1}; +static const u8 gUnknown_08615D33[] = {MENU_TAKE_ITEM, MENU_TOSS, MENU_CANCEL1}; + +static const u8 *const sActionTable[] = { NULL, gUnknown_08615D10, @@ -1125,7 +1150,23 @@ static const u8 *const gUnknown_08615D38[] = gUnknown_08615D33, }; -static const u8 gUnknown_08615D70[] = {0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}; +static const u8 sListSizeTable[] = +{ + 0x00, + ARRAY_COUNT(gUnknown_08615D10), + ARRAY_COUNT(gUnknown_08615D13), + ARRAY_COUNT(gUnknown_08615D16), + ARRAY_COUNT(gUnknown_08615D1B), + ARRAY_COUNT(gUnknown_08615D1E), + ARRAY_COUNT(gUnknown_08615D21), + ARRAY_COUNT(gUnknown_08615D19), + ARRAY_COUNT(gUnknown_08615D24), + ARRAY_COUNT(gUnknown_08615D27), + ARRAY_COUNT(gUnknown_08615D2A), + ARRAY_COUNT(gUnknown_08615D2D), + ARRAY_COUNT(gUnknown_08615D30), + ARRAY_COUNT(gUnknown_08615D33) +}; static const u16 sFieldMoves[] = { @@ -1168,10 +1209,10 @@ static const u8 *const gUnknown_08615E0C[] = gText_CantTradeWithTrainer, }; -static const u32 gUnknown_08615E30[] = INCBIN_U32("graphics/interface/hold_icons.4bpp"); -static const u16 gUnknown_08615E70[] = INCBIN_U16("graphics/interface/hold_icons.gbapal"); +static const u32 sHeldItemGfx[] = INCBIN_U32("graphics/interface/hold_icons.4bpp"); +static const u16 sHeldItemPalette[] = INCBIN_U16("graphics/interface/hold_icons.gbapal"); -static const struct OamData gOamData_83765EC = +static const struct OamData sOamData_HeldItem = { .y = 0, .affineMode = 0, @@ -1188,46 +1229,46 @@ static const struct OamData gOamData_83765EC = .affineParam = 0, }; -static const union AnimCmd gSpriteAnim_83765F4[] = +static const union AnimCmd sSpriteAnim_HeldItem[] = { ANIMCMD_FRAME(0, 1), ANIMCMD_END }; -static const union AnimCmd gSpriteAnim_83765FC[] = +static const union AnimCmd sSpriteAnim_HeldMail[] = { ANIMCMD_FRAME(1, 1), ANIMCMD_END }; -static const union AnimCmd *const gSpriteAnimTable_8376604[] = +static const union AnimCmd *const sSpriteAnimTable_HeldItem[] = { - gSpriteAnim_83765F4, - gSpriteAnim_83765FC, + sSpriteAnim_HeldItem, + sSpriteAnim_HeldMail, }; -static const struct SpriteSheet gUnknown_08615EB0 = +static const struct SpriteSheet sSpriteSheet_HeldItem = { - gUnknown_08615E30, sizeof(gUnknown_08615E30), 0xd750 + sHeldItemGfx, sizeof(sHeldItemGfx), 0xd750 }; -static const struct SpritePalette gUnknown_08615EB8 = +static const struct SpritePalette sSpritePalette_HeldItem = { - gUnknown_08615E70, 0xd750 + sHeldItemPalette, 0xd750 }; -static const struct SpriteTemplate gSpriteTemplate_8615EC0 = +static const struct SpriteTemplate sSpriteTemplate_HeldItem = { 0xd750, 0xd750, - &gOamData_83765EC, - gSpriteAnimTable_8376604, + &sOamData_HeldItem, + sSpriteAnimTable_HeldItem, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }; -static const struct OamData sOamData_8615ED8 = +static const struct OamData sOamData_MenuPokeball = { .y = 0, .affineMode = 0, @@ -1244,40 +1285,40 @@ static const struct OamData sOamData_8615ED8 = .affineParam = 0 }; -static const union AnimCmd sSpriteAnim_8615EE0[] = +static const union AnimCmd sPokeballAnim_Closed[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_8615EE8[] = +static const union AnimCmd sPokeballAnim_Open[] = { ANIMCMD_FRAME(16, 0), ANIMCMD_END }; -static const union AnimCmd *const sSpriteAnimTable_8615EF0[] = +static const union AnimCmd *const sSpriteAnimTable_Pokeball[] = { - sSpriteAnim_8615EE0, - sSpriteAnim_8615EE8 + sPokeballAnim_Closed, + sPokeballAnim_Open }; -static const struct CompressedSpriteSheet gUnknown_08615EF8 = +static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeball = { gPartyMenuPokeball_Gfx, 0x400, 0x04b0 }; -static const struct CompressedSpritePalette gUnknown_08615F00 = +static const struct CompressedSpritePalette sSpritePalette_MenuPokeball = { gPartyMenuPokeball_Pal, 0x04b0 }; -static const struct SpriteTemplate gSpriteTemplate_8615F08 = +static const struct SpriteTemplate sSpriteTemplate_MenuPokeball = { .tileTag = 0x04b0, .paletteTag = 0x04b0, - .oam = &sOamData_8615ED8, - .anims = sSpriteAnimTable_8615EF0, + .oam = &sOamData_MenuPokeball, + .anims = sSpriteAnimTable_Pokeball, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, @@ -1346,7 +1387,7 @@ static const union AnimCmd *const sSpriteAnimTable_8615F58[] = sSpriteAnim_8615F50 }; -static const struct CompressedSpriteSheet gUnknown_08615F70 = +static const struct CompressedSpriteSheet sSpriteSheet_MenuPokeballSmall = { gPartyMenuPokeballSmall_Gfx, 0x0300, 0x04b1 }; @@ -1362,7 +1403,7 @@ static const struct SpriteTemplate gSpriteTemplate_8615F78 = .callback = SpriteCallbackDummy, }; -static const struct OamData sOamData_8615F90 = +static const struct OamData sOamData_StatusCondition = { .y = 0, .affineMode = 0, @@ -1379,82 +1420,82 @@ static const struct OamData sOamData_8615F90 = .affineParam = 0 }; -static const union AnimCmd sSpriteAnim_8615F98[] = +static const union AnimCmd sSpriteAnim_StatusPoison[] = { ANIMCMD_FRAME(0, 0), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_8615FA0[] = +static const union AnimCmd sSpriteAnim_StatusParalyzed[] = { ANIMCMD_FRAME(4, 0), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_8615FA8[] = +static const union AnimCmd sSpriteAnim_StatusSleep[] = { ANIMCMD_FRAME(8, 0), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_8615FB0[] = +static const union AnimCmd sSpriteAnim_StatusFrozen[] = { ANIMCMD_FRAME(12, 0), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_8615FB8[] = +static const union AnimCmd sSpriteAnim_StatusBurn[] = { ANIMCMD_FRAME(16, 0), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_8615FC0[] = +static const union AnimCmd sSpriteAnim_StatusPokerus[] = { ANIMCMD_FRAME(20, 0), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_8615FC8[] = +static const union AnimCmd sSpriteAnim_StatusFaint[] = { ANIMCMD_FRAME(24, 0), ANIMCMD_END }; -static const union AnimCmd sSpriteAnim_8615FD0[] = +static const union AnimCmd sSpriteAnim_Blank[] = { ANIMCMD_FRAME(28, 0), ANIMCMD_END }; -static const union AnimCmd *const sSpriteAnimTable_8615FD8[] = +static const union AnimCmd *const sSpriteTemplate_StatusCondition[] = { - sSpriteAnim_8615F98, - sSpriteAnim_8615FA0, - sSpriteAnim_8615FA8, - sSpriteAnim_8615FB0, - sSpriteAnim_8615FB8, - sSpriteAnim_8615FC0, - sSpriteAnim_8615FC8, - sSpriteAnim_8615FD0 + sSpriteAnim_StatusPoison, + sSpriteAnim_StatusParalyzed, + sSpriteAnim_StatusSleep, + sSpriteAnim_StatusFrozen, + sSpriteAnim_StatusBurn, + sSpriteAnim_StatusPokerus, + sSpriteAnim_StatusFaint, + sSpriteAnim_Blank }; -static const struct CompressedSpriteSheet gUnknown_08615FF8 = +static const struct CompressedSpriteSheet sSpriteSheet_StatusIcons = { gStatusGfx_Icons, 0x400, 1202 }; -static const struct CompressedSpritePalette gUnknown_08616000 = +static const struct CompressedSpritePalette sSpritePalette_StatusIcons = { gStatusPal_Icons, 1202 }; -static const struct SpriteTemplate gSpriteTemplate_8616008 = +static const struct SpriteTemplate sSpriteTemplate_StatusIcons = { .tileTag = 1202, .paletteTag = 1202, - .oam = &sOamData_8615F90, - .anims = sSpriteAnimTable_8615FD8, + .oam = &sOamData_StatusCondition, + .anims = sSpriteTemplate_StatusCondition, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, @@ -1536,7 +1577,7 @@ static const u16 gTMHMMoves[] = }; // code -static void InitPartyMenu(u8 a, u8 b, u8 c, u8 d, u8 e, TaskFunc task, MainCallback callback) +static void InitPartyMenu(u8 a, u8 b, u8 c, u8 d, u8 messageId, TaskFunc task, MainCallback callback) { u16 i; @@ -1551,12 +1592,12 @@ static void InitPartyMenu(u8 a, u8 b, u8 c, u8 d, u8 e, TaskFunc task, MainCallb gUnknown_0203CEC8.unk8_0 = a; gUnknown_0203CEC8.exitCallback = callback; gUnknown_0203CEC8.unkB = c; - gUnknown_0203CEC4->unkA_0 = e; - gUnknown_0203CEC4->unk0 = task; + gUnknown_0203CEC4->messageId = messageId; + gUnknown_0203CEC4->task = task; gUnknown_0203CEC4->exitCallback = NULL; gUnknown_0203CEC4->unk8_1 = 0; - gUnknown_0203CEC4->unk8_2 = 0xFF; - gUnknown_0203CEC4->unk9_0 = 0xFF; + gUnknown_0203CEC4->unk8_2 = 0x7F; + gUnknown_0203CEC4->unk9_0 = 0x7F; if (a == 4) gUnknown_0203CEC4->unk8_0 = TRUE; @@ -1568,13 +1609,13 @@ static void InitPartyMenu(u8 a, u8 b, u8 c, u8 d, u8 e, TaskFunc task, MainCallb for (i = 0; i <= 15; i++) gUnknown_0203CEC4->data[i] = 0; - for (i = 0; i < 3; i++) - gUnknown_0203CEC4->unkC[i] = 0xFF; + for (i = 0; i < ARRAY_COUNT(gUnknown_0203CEC4->windowId); i++) + gUnknown_0203CEC4->windowId[i] = 0xFF; if (d == 0) - gUnknown_0203CEC8.unk9 = 0; - else if (gUnknown_0203CEC8.unk9 > 5 || GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES) == SPECIES_NONE) - gUnknown_0203CEC8.unk9 = 0; // wut why is this else if? + gUnknown_0203CEC8.slotId = 0; + else if (gUnknown_0203CEC8.slotId > 5 || GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES) == SPECIES_NONE) + gUnknown_0203CEC8.slotId = 0; // wut why is this else if? gTextFlags.autoScroll = 0; CalculatePlayerPartyCount(); @@ -1710,8 +1751,8 @@ static bool8 PartyMenuSetup(void) gMain.state++; break; case 20: - CreateTask(gUnknown_0203CEC4->unk0, 0); - display_pokemon_menu_message(gUnknown_0203CEC4->unkA_0); + CreateTask(gUnknown_0203CEC4->task, 0); + display_pokemon_menu_message(gUnknown_0203CEC4->messageId); gMain.state++; break; case 21: @@ -1779,7 +1820,7 @@ static bool8 AllocPartyMenuBg(void) static bool8 AllocPartyMiscGfx(void) { - int sizeout; + u32 sizeout; switch (gUnknown_0203CEC4->data[0]) { @@ -1857,10 +1898,10 @@ static void PartyMenuInitHelperStructs(u8 a) gUnknown_0203CEDC[i].unk0 = &gUnknown_086156C4[1]; gUnknown_0203CEDC[i].unk4 = gUnknown_08615704[a][i]; gUnknown_0203CEDC[i].windowId = i; - gUnknown_0203CEDC[i].unk9 = 0xFF; - gUnknown_0203CEDC[i].unkA = 0xFF; - gUnknown_0203CEDC[i].unkB = 0xFF; - gUnknown_0203CEDC[i].unkC = 0xFF; + gUnknown_0203CEDC[i].monSpriteId = 0xFF; + gUnknown_0203CEDC[i].itemSpriteId = 0xFF; + gUnknown_0203CEDC[i].pokeballSpriteId = 0xFF; + gUnknown_0203CEDC[i].statusSpriteId = 0xFF; } gUnknown_0203CEDC[0].unk0 = &gUnknown_086156C4[0]; if (a == 3) @@ -1886,7 +1927,7 @@ static void RenderPartyMenuBox(u8 slot) { if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) == SPECIES_NONE) { - sub_81B2720(gUnknown_0203CEDC[slot].windowId); + DrawEmptySlot(gUnknown_0203CEDC[slot].windowId); UpdateSelectedPartyBox(&gUnknown_0203CEDC[slot], 0x40); CopyWindowToVram(gUnknown_0203CEDC[slot].windowId, 2); } @@ -1907,7 +1948,7 @@ static void RenderPartyMenuBox(u8 slot) if (gUnknown_0203CEC8.unk8_0 == 5) sub_81B0FCC(slot, 0); - else if (gUnknown_0203CEC8.unk9 == slot) + else if (gUnknown_0203CEC8.slotId == slot) sub_81B0FCC(slot, 1); else sub_81B0FCC(slot, 0); @@ -2071,7 +2112,7 @@ static void sub_81B0CEC(u8 slot) if (gUnknown_02022FF8[actualSlot].species == SPECIES_NONE) { - sub_81B2720(structPtr->windowId); + DrawEmptySlot(structPtr->windowId); } else { @@ -2159,7 +2200,7 @@ static void sub_81B0F28(void) { gUnknown_0203CEC4->unk9_0 = sub_81B5F34(0xC6, 0x94); } - sub_81B0FCC(gUnknown_0203CEC8.unk9, 1); + sub_81B0FCC(gUnknown_0203CEC8.slotId, 1); } } @@ -2173,8 +2214,8 @@ void sub_81B0FCC(u8 slot, u8 b) if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE) { UpdateSelectedPartyBox(&gUnknown_0203CEDC[slot], GetPartyBoxPalBitfield(slot, b)); - AnimateSelectedPartyIcon(gUnknown_0203CEDC[slot].unk9, b); - sub_81B5F98(gUnknown_0203CEDC[slot].unkB, b); + AnimateSelectedPartyIcon(gUnknown_0203CEDC[slot].monSpriteId, b); + sub_81B5F98(gUnknown_0203CEDC[slot].pokeballSpriteId, b); } return; case 6: @@ -2221,10 +2262,10 @@ static u8 GetPartyBoxPalBitfield(u8 slot, u8 b) returnVar |= 16; if (gUnknown_0203CEC8.unkB == 8) { - if (slot == gUnknown_0203CEC8.unk9 || slot == gUnknown_0203CEC8.unkA) + if (slot == gUnknown_0203CEC8.slotId || slot == gUnknown_0203CEC8.unkA) returnVar |= 4; } - if (gUnknown_0203CEC8.unkB == 10 && slot == gUnknown_0203CEC8.unk9 ) + if (gUnknown_0203CEC8.unkB == 10 && slot == gUnknown_0203CEC8.slotId ) returnVar |= 32; return returnVar; @@ -2293,7 +2334,7 @@ static void c3_0811FAB4(u8 taskId) u8 GetCursorSelectionMonId(void) { - return gUnknown_0203CEC8.unk9; + return gUnknown_0203CEC8.slotId; } u8 sub_81B1360(void) @@ -2331,7 +2372,7 @@ static s8* sub_81B13EC(void) if (gUnknown_0203CEC8.unkB == 8 || gUnknown_0203CEC8.unkB == 10) return &gUnknown_0203CEC8.unkA; else - return &gUnknown_0203CEC8.unk9; + return &gUnknown_0203CEC8.slotId; } static void sub_81B140C(u8 taskId, s8 *ptr) @@ -2347,7 +2388,7 @@ static void sub_81B140C(u8 taskId, s8 *ptr) case 7: if (sub_81B15A4((u8*)ptr)) { - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); sub_81615A8(taskId); } break; @@ -2357,7 +2398,7 @@ static void sub_81B140C(u8 taskId, s8 *ptr) if (gUnknown_0203CEC8.unk8_0 == 1) gUnknown_0203CEC4->exitCallback = sub_81B9140; - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); gUnknown_03006328(taskId, sub_81B6794); } break; @@ -2365,7 +2406,7 @@ static void sub_81B140C(u8 taskId, s8 *ptr) if (sub_81B15A4((u8*)ptr)) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); sub_81B7E4C(taskId); } break; @@ -2373,7 +2414,7 @@ static void sub_81B140C(u8 taskId, s8 *ptr) if (sub_81B15A4((u8*)ptr)) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); sub_81B8474(taskId); } break; @@ -2382,7 +2423,7 @@ static void sub_81B140C(u8 taskId, s8 *ptr) if (sub_81B15A4((u8*)ptr)) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); sub_81B7FAC(taskId); } break; @@ -2462,7 +2503,7 @@ static bool8 sub_81B1660(u8 taskId) if (stringPtr == NULL) return FALSE; - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); StringExpandPlaceholders(gStringVar4, stringPtr); sub_81B1B5C(gStringVar4, 1); gTasks[taskId].func = sub_81B16D4; @@ -2484,7 +2525,7 @@ static void sub_81B1708(u8 taskId) { case 0: gUnknown_0203CEE8 = 0; - gUnknown_0203CEC8.unk9 = 7; + gUnknown_0203CEC8.slotId = 7; sub_81B8558(); sub_81B12C0(taskId); break; @@ -3132,7 +3173,7 @@ static void sub_81B2428(bool8 a) firstWindowId = AddWindow(&gUnknown_08615918); FillWindowPixelBuffer(firstWindowId, PIXEL_FILL(0)); mainOffset = GetStringCenterAlignXOffset(0, gMenuText_Confirm, 48); - AddTextPrinterParameterized4(firstWindowId, 0, mainOffset, 1, 0, 0, gUnknown_086157FC[0], -1, gMenuText_Confirm); + AddTextPrinterParameterized4(firstWindowId, 0, mainOffset, 1, 0, 0, sFontColorTable[0], -1, gMenuText_Confirm); PutWindowTilemap(firstWindowId); CopyWindowToVram(firstWindowId, 2); windowId = AddWindow(&gUnknown_08615910); @@ -3147,12 +3188,12 @@ static void sub_81B2428(bool8 a) if (gUnknown_0203CEC8.unk8_0 != 10) { mainOffset = GetStringCenterAlignXOffset(0, gText_Cancel, 48); - AddTextPrinterParameterized3(windowId, 0, mainOffset + offset, 1, gUnknown_086157FC[0], -1, gText_Cancel); + AddTextPrinterParameterized3(windowId, 0, mainOffset + offset, 1, sFontColorTable[0], -1, gText_Cancel); } else { mainOffset = GetStringCenterAlignXOffset(0, gText_Cancel2, 48); - AddTextPrinterParameterized3(windowId, 0, mainOffset + offset, 1, gUnknown_086157FC[0], -1, gText_Cancel2); + AddTextPrinterParameterized3(windowId, 0, mainOffset + offset, 1, sFontColorTable[0], -1, gText_Cancel2); } PutWindowTilemap(windowId); CopyWindowToVram(windowId, 2); @@ -3182,35 +3223,35 @@ static void BlitBitmapToPartyWindow(u8 windowId, const u8 *b, u8 c, u8 x, u8 y, } } -static void BlitBitmapToPartyWindow_Default1(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 f) +static void BlitBitmapToPartyWindow_Default1(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg) { if (width == 0 && height == 0) { width = 10; height = 7; } - if (f == 0) - BlitBitmapToPartyWindow(windowId, gUnknown_08615988, 10, x, y, width, height); + if (isEgg == FALSE) + BlitBitmapToPartyWindow(windowId, sMainSlotTileNums, 10, x, y, width, height); else - BlitBitmapToPartyWindow(windowId, gUnknown_086159CE, 10, x, y, width, height); + BlitBitmapToPartyWindow(windowId, sMainSlotTileNums_Egg, 10, x, y, width, height); } -static void BlitBitmapToPartyWindow_Default2(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 f) +static void BlitBitmapToPartyWindow_Default2(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 isEgg) { if (width == 0 && height == 0) { width = 18; height = 3; } - if (f == 0) - BlitBitmapToPartyWindow(windowId, gUnknown_08615A14, 18, x, y, width, height); + if (isEgg == FALSE) + BlitBitmapToPartyWindow(windowId, sOtherSlotsTileNums, 18, x, y, width, height); else - BlitBitmapToPartyWindow(windowId, gUnknown_08615A4A, 18, x, y, width, height); + BlitBitmapToPartyWindow(windowId, sOtherSlotsTileNums_Egg, 18, x, y, width, height); } -static void sub_81B2720(u8 windowId) +static void DrawEmptySlot(u8 windowId) { - BlitBitmapToPartyWindow(windowId, gUnknown_08615A80, 18, 0, 0, 18, 3); + BlitBitmapToPartyWindow(windowId, sEmptySlotTileNums, 18, 0, 0, 18, 3); } static void UpdateSelectedPartyBox(struct Struct203CEDC *ptr, u8 bitfield) @@ -3338,7 +3379,7 @@ static void UpdateSelectedPartyBox(struct Struct203CEDC *ptr, u8 bitfield) static void DisplayPartyPokemonBarDetail(u8 windowId, const u8 *str, u8 color, const u8 *align) { - AddTextPrinterParameterized3(windowId, 0, align[0], align[1], gUnknown_086157FC[color], 0, str); + AddTextPrinterParameterized3(windowId, 0, align[0], align[1], sFontColorTable[color], 0, str); } static void DisplayPartyPokemonNickname(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c) @@ -3499,7 +3540,7 @@ static void DisplayPartyPokemonOtherText(u8 stringID, struct Struct203CEDC *ptr, ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk1C >> 3, ptr->unk0->unk1D >> 3, unk, unk2, 1); } if (c != 2) - AddTextPrinterParameterized3(ptr->windowId, 1, ptr->unk0->unk1C, ptr->unk0->unk1D, gUnknown_086157FC[0], 0, gUnknown_08615B60[stringID]); + AddTextPrinterParameterized3(ptr->windowId, 1, ptr->unk0->unk1C, ptr->unk0->unk1D, sFontColorTable[0], 0, sSelectionStringTable[stringID]); } static void sub_81B302C(u8 *ptr) @@ -3515,7 +3556,7 @@ static void sub_81B302C(u8 *ptr) void display_pokemon_menu_message(u32 stringID) { - u8 *windowPtr = &gUnknown_0203CEC4->unkC[1]; + u8 *windowPtr = &gUnknown_0203CEC4->windowId[1]; if (*windowPtr != 0xFF) sub_81B302C(windowPtr); @@ -3552,7 +3593,7 @@ void display_pokemon_menu_message(u32 stringID) stringID = 1; } DrawStdFrameWithCustomTileAndPalette(*windowPtr, FALSE, 0x4F, 0xD); - StringExpandPlaceholders(gStringVar4, gUnknown_08615AF4[stringID]); + StringExpandPlaceholders(gStringVar4, sActionStringTable[stringID]); AddTextPrinterParameterized(*windowPtr, 1, gStringVar4, 0, 1, 0, 0); schedule_bg_copy_tilemap_to_vram(2); } @@ -3587,7 +3628,7 @@ static u8 sub_81B31B0(u8 a) switch (a) { case 0: - SetWindowTemplateFields(&window, 2, 19, 19 - (gUnknown_0203CEC4->unk17 * 2), 10, gUnknown_0203CEC4->unk17 * 2, 14, 0x2E9); + SetWindowTemplateFields(&window, 2, 19, 19 - (gUnknown_0203CEC4->listSize * 2), 10, gUnknown_0203CEC4->listSize * 2, 14, 0x2E9); break; case 1: window = gUnknown_08615950; @@ -3600,23 +3641,23 @@ static u8 sub_81B31B0(u8 a) break; } - gUnknown_0203CEC4->unkC[0] = AddWindow(&window); - DrawStdFrameWithCustomTileAndPalette(gUnknown_0203CEC4->unkC[0], FALSE, 0x4F, 13); + gUnknown_0203CEC4->windowId[0] = AddWindow(&window); + DrawStdFrameWithCustomTileAndPalette(gUnknown_0203CEC4->windowId[0], FALSE, 0x4F, 13); if (a == 3) - return gUnknown_0203CEC4->unkC[0]; + return gUnknown_0203CEC4->windowId[0]; cursorDimension = GetMenuCursorDimensionByFont(1, 0); fontAttribute = GetFontAttribute(1, 2); - for (i = 0; i < gUnknown_0203CEC4->unk17; i++) + for (i = 0; i < gUnknown_0203CEC4->listSize; i++) { - u8 unk = (gUnknown_0203CEC4->unkF[i] > 18) ? 4 : 3; - AddTextPrinterParameterized4(gUnknown_0203CEC4->unkC[0], 1, cursorDimension, (i * 16) + 1, fontAttribute, 0, gUnknown_086157FC[unk], 0, sCursorOptions[gUnknown_0203CEC4->unkF[i]].text); + u8 unk = (gUnknown_0203CEC4->actions[i] > 18) ? 4 : 3; + AddTextPrinterParameterized4(gUnknown_0203CEC4->windowId[0], 1, cursorDimension, (i * 16) + 1, fontAttribute, 0, sFontColorTable[unk], 0, sCursorOptions[gUnknown_0203CEC4->actions[i]].text); } - InitMenuInUpperLeftCorner(gUnknown_0203CEC4->unkC[0], gUnknown_0203CEC4->unk17, 0, 1); + InitMenuInUpperLeftCorner(gUnknown_0203CEC4->windowId[0], gUnknown_0203CEC4->listSize, 0, 1); schedule_bg_copy_tilemap_to_vram(2); - return gUnknown_0203CEC4->unkC[0]; + return gUnknown_0203CEC4->windowId[0]; } static void sub_81B3300(const u8 *text) @@ -3633,46 +3674,46 @@ static void sub_81B334C(void) static u8 sub_81B3364(void) { - gUnknown_0203CEC4->unkC[0] = AddWindow(&gUnknown_08615970); - DrawStdFrameWithCustomTileAndPalette(gUnknown_0203CEC4->unkC[0], FALSE, 0x4F, 13); - return gUnknown_0203CEC4->unkC[0]; + gUnknown_0203CEC4->windowId[0] = AddWindow(&gUnknown_08615970); + DrawStdFrameWithCustomTileAndPalette(gUnknown_0203CEC4->windowId[0], FALSE, 0x4F, 13); + return gUnknown_0203CEC4->windowId[0]; } static void sub_81B3394(void) { - ClearWindowTilemap(gUnknown_0203CEC4->unkC[0]); - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); + ClearWindowTilemap(gUnknown_0203CEC4->windowId[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); } -static void sub_81B33B4(struct Pokemon *mons, u8 a, u8 b) +static void sub_81B33B4(struct Pokemon *mons, u8 slotId, u8 b) { u8 i; if (b == 0) { - sub_81B3414(mons, a); + CreateActionList(mons, slotId); } else { - gUnknown_0203CEC4->unk17 = gUnknown_08615D70[b]; - for (i = 0; i < gUnknown_0203CEC4->unk17; i++) - gUnknown_0203CEC4->unkF[i] = gUnknown_08615D38[b][i]; + gUnknown_0203CEC4->listSize = sListSizeTable[b]; + for (i = 0; i < gUnknown_0203CEC4->listSize; i++) + gUnknown_0203CEC4->actions[i] = sActionTable[b][i]; } } -static void sub_81B3414(struct Pokemon *mons, u8 a) +static void CreateActionList(struct Pokemon *mons, u8 slotId) { u8 i, j; - gUnknown_0203CEC4->unk17 = 0; - AppendToList(gUnknown_0203CEC4->unkF, &gUnknown_0203CEC4->unk17, 0); + gUnknown_0203CEC4->listSize = 0; + AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_SUMMARY); for (i = 0; i < MAX_MON_MOVES; i++) { for (j = 0; sFieldMoves[j] != FIELD_MOVE_TERMINATOR; j++) { - if (GetMonData(&mons[a], i + MON_DATA_MOVE1) == sFieldMoves[j]) + if (GetMonData(&mons[slotId], i + MON_DATA_MOVE1) == sFieldMoves[j]) { - AppendToList(gUnknown_0203CEC4->unkF, &gUnknown_0203CEC4->unk17, j + 19); + AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, j + MENU_FIELD_MOVES); break; } } @@ -3681,13 +3722,13 @@ static void sub_81B3414(struct Pokemon *mons, u8 a) if (!InBattlePike()) { if (GetMonData(&mons[1], MON_DATA_SPECIES) != SPECIES_NONE) - AppendToList(gUnknown_0203CEC4->unkF, &gUnknown_0203CEC4->unk17, 1); - if (ItemIsMail(GetMonData(&mons[a], MON_DATA_HELD_ITEM))) - AppendToList(gUnknown_0203CEC4->unkF, &gUnknown_0203CEC4->unk17, 6); + AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_SWITCH); + if (ItemIsMail(GetMonData(&mons[slotId], MON_DATA_HELD_ITEM))) + AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_MAIL); else - AppendToList(gUnknown_0203CEC4->unkF, &gUnknown_0203CEC4->unk17, 3); + AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_ITEM); } - AppendToList(gUnknown_0203CEC4->unkF, &gUnknown_0203CEC4->unk17, 2); + AppendToList(gUnknown_0203CEC4->actions, &gUnknown_0203CEC4->listSize, MENU_CANCEL1); } static u8 sub_81B353C(struct Pokemon *mon) @@ -3706,7 +3747,7 @@ static u8 sub_81B353C(struct Pokemon *mon) returnVar = sub_81B8A2C(mon); break; case 4: - switch (sub_81B856C(gUnknown_0203CEC8.unk9)) + switch (sub_81B856C(gUnknown_0203CEC8.slotId)) { default: returnVar = 7; @@ -3743,14 +3784,14 @@ static u8 sub_81B353C(struct Pokemon *mon) static bool8 sub_81B3608(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; u16 item; GetMonNickname(mon, gStringVar1); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); if (gUnknown_0203CEC8.unk8_0 != 12) { - sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.unk9, sub_81B353C(mon)); + sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, sub_81B353C(mon)); sub_81B31B0(0); display_pokemon_menu_message(21); } @@ -3759,7 +3800,7 @@ static bool8 sub_81B3608(u8 taskId) item = GetMonData(mon, MON_DATA_HELD_ITEM); if (item != ITEM_NONE) { - sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.unk9, sub_81B353C(mon)); + sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, sub_81B353C(mon)); sub_81B31B0(1); CopyItemName(item, gStringVar2); display_pokemon_menu_message(26); @@ -3792,7 +3833,7 @@ static void HandleMenuInput(u8 taskId) s8 input; s16 *data = gTasks[taskId].data; - if (gUnknown_0203CEC4->unk17 <= 3) + if (gUnknown_0203CEC4->listSize <= 3) input = Menu_ProcessInputNoWrapAround_other(); else input = ProcessMenuInput_other(); @@ -3804,12 +3845,12 @@ static void HandleMenuInput(u8 taskId) break; case MENU_B_PRESSED: PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->unkC[2]); - sCursorOptions[gUnknown_0203CEC4->unkF[gUnknown_0203CEC4->unk17 - 1]].func(taskId); + sub_81B302C(&gUnknown_0203CEC4->windowId[2]); + sCursorOptions[gUnknown_0203CEC4->actions[gUnknown_0203CEC4->listSize - 1]].func(taskId); break; default: - sub_81B302C(&gUnknown_0203CEC4->unkC[2]); - sCursorOptions[gUnknown_0203CEC4->unkF[input]].func(taskId); + sub_81B302C(&gUnknown_0203CEC4->windowId[2]); + sCursorOptions[gUnknown_0203CEC4->actions[input]].func(taskId); break; } } @@ -3827,18 +3868,18 @@ static void sub_81B3828(void) if (gUnknown_0203CEC8.unk8_0 == 1) { pokemon_change_order(); - ShowPokemonSummaryScreen(PSS_MODE_UNK1, gPlayerParty, gUnknown_0203CEC8.unk9, gPlayerPartyCount - 1, sub_81B3894); + ShowPokemonSummaryScreen(PSS_MODE_UNK1, gPlayerParty, gUnknown_0203CEC8.slotId, gPlayerPartyCount - 1, sub_81B3894); } else { - ShowPokemonSummaryScreen(PSS_MODE_NORMAL, gPlayerParty, gUnknown_0203CEC8.unk9, gPlayerPartyCount - 1, sub_81B3894); + ShowPokemonSummaryScreen(PSS_MODE_NORMAL, gPlayerParty, gUnknown_0203CEC8.slotId, gPlayerPartyCount - 1, sub_81B3894); } } static void sub_81B3894(void) { gPaletteFade.bufferTransferDisabled = TRUE; - gUnknown_0203CEC8.unk9 = gLastViewedMonIndex; + gUnknown_0203CEC8.slotId = gLastViewedMonIndex; InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 21, sub_81B36FC, gUnknown_0203CEC8.exitCallback); } @@ -3846,11 +3887,11 @@ static void CursorCb_Switch(u8 taskId) { PlaySE(SE_SELECT); gUnknown_0203CEC8.unkB = 8; - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); display_pokemon_menu_message(3); - sub_81B0FCC(gUnknown_0203CEC8.unk9, 1); - gUnknown_0203CEC8.unkA = gUnknown_0203CEC8.unk9; + sub_81B0FCC(gUnknown_0203CEC8.slotId, 1); + gUnknown_0203CEC8.unkA = gUnknown_0203CEC8.slotId; gTasks[taskId].func = sub_81B1370; } @@ -3859,13 +3900,13 @@ static void sub_81B3938(u8 taskId) s16 *data = gTasks[taskId].data; u8 windowIds[2]; - if (gUnknown_0203CEC8.unkA == gUnknown_0203CEC8.unk9) + if (gUnknown_0203CEC8.unkA == gUnknown_0203CEC8.slotId) { sub_81B407C(taskId); } else { - windowIds[0] = gUnknown_0203CEDC[gUnknown_0203CEC8.unk9].windowId; + windowIds[0] = gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].windowId; data[0] = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_LEFT); data[1] = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_TOP); data[2] = GetWindowAttribute(windowIds[0], WINDOW_WIDTH); @@ -3892,7 +3933,7 @@ static void sub_81B3938(u8 taskId) ClearWindowTilemap(windowIds[0]); ClearWindowTilemap(windowIds[1]); gUnknown_0203CEC8.unkB = 9; - sub_81B0FCC(gUnknown_0203CEC8.unk9, 1); + sub_81B0FCC(gUnknown_0203CEC8.slotId, 1); sub_81B0FCC(gUnknown_0203CEC8.unkA, 1); sub_81B3CC0(taskId); gTasks[taskId].func = sub_81B3D48; @@ -3939,10 +3980,10 @@ static void sub_81B3B40(const void *rectSrc, s16 a, s16 b, s16 c, s16 d, s16 e) static void sub_81B3C0C(struct Struct203CEDC *ptr, s16 a) { - gSprites[ptr->unkB].pos2.x += a * 8; - gSprites[ptr->unkA].pos2.x += a * 8; - gSprites[ptr->unk9].pos2.x += a * 8; - gSprites[ptr->unkC].pos2.x += a * 8; + gSprites[ptr->pokeballSpriteId].pos2.x += a * 8; + gSprites[ptr->itemSpriteId].pos2.x += a * 8; + gSprites[ptr->monSpriteId].pos2.x += a * 8; + gSprites[ptr->statusSpriteId].pos2.x += a * 8; } static void sub_81B3C60(u8 taskId) @@ -3950,7 +3991,7 @@ static void sub_81B3C60(u8 taskId) s16 *data = gTasks[taskId].data; if (data[10] != 0) - sub_81B3C0C(&gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], data[10]); + sub_81B3C0C(&gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], data[10]); if (data[11] != 0) sub_81B3C0C(&gUnknown_0203CEDC[gUnknown_0203CEC8.unkA], data[11]); } @@ -3982,13 +4023,13 @@ static void sub_81B3D48(u8 taskId) data[10] *= -1; data[11] *= -1; swap_pokemon_and_oams(); - DisplayPartyPokemonData(gUnknown_0203CEC8.unk9); + DisplayPartyPokemonData(gUnknown_0203CEC8.slotId); DisplayPartyPokemonData(gUnknown_0203CEC8.unkA); - PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unk9].windowId); + PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].windowId); PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId); sub_8199CBC(0, gUnknown_0203CEF0, data[0], data[1], data[2], data[3]); sub_8199CBC(0, gUnknown_0203CEF4, data[4], data[5], data[6], data[7]); - ClearWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unk9].windowId); + ClearWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].windowId); ClearWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId); gTasks[taskId].func = sub_81B3E60; } @@ -4002,7 +4043,7 @@ static void sub_81B3E60(u8 taskId) sub_81B3C60(taskId); if (data[10] == 0 && data[11] == 0) { - PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unk9].windowId); + PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].windowId); PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId); schedule_bg_copy_tilemap_to_vram(0); Free(gUnknown_0203CEF0); @@ -4047,27 +4088,27 @@ static void swap_pokemon_and_oams(void) struct Pokemon *mon1, *mon2; struct Pokemon *monBuffer; - structPtrs[0] = &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9]; + structPtrs[0] = &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId]; structPtrs[1] = &gUnknown_0203CEDC[gUnknown_0203CEC8.unkA]; - mon1 = &gPlayerParty[gUnknown_0203CEC8.unk9]; + mon1 = &gPlayerParty[gUnknown_0203CEC8.slotId]; mon2 = &gPlayerParty[gUnknown_0203CEC8.unkA]; monBuffer = Alloc(sizeof(struct Pokemon)); *monBuffer = *mon1; *mon1 = *mon2; *mon2 = *monBuffer; Free(monBuffer); - oamt_swap_pos(&structPtrs[0]->unkB, &structPtrs[1]->unkB); - oamt_swap_pos(&structPtrs[0]->unkA, &structPtrs[1]->unkA); - oamt_swap_pos(&structPtrs[0]->unk9, &structPtrs[1]->unk9); - oamt_swap_pos(&structPtrs[0]->unkC, &structPtrs[1]->unkC); + oamt_swap_pos(&structPtrs[0]->pokeballSpriteId, &structPtrs[1]->pokeballSpriteId); + oamt_swap_pos(&structPtrs[0]->itemSpriteId, &structPtrs[1]->itemSpriteId); + oamt_swap_pos(&structPtrs[0]->monSpriteId, &structPtrs[1]->monSpriteId); + oamt_swap_pos(&structPtrs[0]->statusSpriteId, &structPtrs[1]->statusSpriteId); } static void sub_81B407C(u8 taskId) { - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); gUnknown_0203CEC8.unkB = 0; - sub_81B0FCC(gUnknown_0203CEC8.unk9, 0); - gUnknown_0203CEC8.unk9 = gUnknown_0203CEC8.unkA; + sub_81B0FCC(gUnknown_0203CEC8.slotId, 0); + gUnknown_0203CEC8.slotId = gUnknown_0203CEC8.unkA; sub_81B0FCC(gUnknown_0203CEC8.unkA, 1); display_pokemon_menu_message(0); gTasks[taskId].func = sub_81B1370; @@ -4076,8 +4117,8 @@ static void sub_81B407C(u8 taskId) static void CursorCb_Cancel1(u8 taskId) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); if (gUnknown_0203CEC8.unk8_0 == 6) display_pokemon_menu_message(15); else @@ -4088,9 +4129,9 @@ static void CursorCb_Cancel1(u8 taskId) static void CursorCb_Item(u8 taskId) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); - sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.unk9, 8); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); + sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, 8); sub_81B31B0(1); display_pokemon_menu_message(24); gTasks[taskId].data[0] = 0xFF; @@ -4120,7 +4161,7 @@ static void c2_8123744(void) } else { - gUnknown_0203CEFC = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_HELD_ITEM); + gUnknown_0203CEFC = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_HELD_ITEM); if (gUnknown_0203CEFC != ITEM_NONE) { InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B4350, gUnknown_0203CEC8.exitCallback); @@ -4128,7 +4169,7 @@ static void c2_8123744(void) else if (ItemIsMail(gSpecialVar_ItemId)) { RemoveBagItem(gSpecialVar_ItemId, 1); - sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.unk9], gSpecialVar_ItemId); + sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], gSpecialVar_ItemId); sub_81B452C(); } else @@ -4145,8 +4186,8 @@ static void sub_81B42D0(u8 taskId) if (!gPaletteFade.active) { item = gSpecialVar_ItemId; - sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.unk9], item, 0, 0); - sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.unk9], item); + sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.slotId], item, 0, 0); + sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], item); RemoveBagItem(item, 1); gTasks[taskId].func = sub_81B469C; } @@ -4156,7 +4197,7 @@ static void sub_81B4350(u8 taskId) { if (!gPaletteFade.active) { - sub_81B1D1C(&gPlayerParty[gUnknown_0203CEC8.unk9], gUnknown_0203CEFC, 1); + sub_81B1D1C(&gPlayerParty[gUnknown_0203CEC8.slotId], gUnknown_0203CEFC, 1); gTasks[taskId].func = sub_81B43A8; } } @@ -4185,12 +4226,12 @@ static void sub_81B43DC(u8 taskId) } else if (ItemIsMail(gSpecialVar_ItemId)) { - sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.unk9], gSpecialVar_ItemId); + sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], gSpecialVar_ItemId); gTasks[taskId].func = sub_81B44FC; } else { - sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.unk9], gSpecialVar_ItemId); + sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], gSpecialVar_ItemId); sub_81B1D68(gSpecialVar_ItemId, gUnknown_0203CEFC, 1); gTasks[taskId].func = sub_81B469C; } @@ -4214,7 +4255,7 @@ static void sub_81B44FC(u8 taskId) static void sub_81B452C(void) { - u8 mail = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_MAIL); + u8 mail = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_MAIL); DoEasyChatScreen( EASY_CHAT_TYPE_MAIL, @@ -4225,7 +4266,7 @@ static void sub_81B452C(void) static void sub_81B4578(void) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; u16 item = GetMonData(mon, MON_DATA_HELD_ITEM); if (gSpecialVar_Result == FALSE) @@ -4247,7 +4288,7 @@ static void sub_81B4624(u8 taskId) if (!gPaletteFade.active) { if (gUnknown_0203CEFC == ITEM_NONE) - sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.unk9], gSpecialVar_ItemId, 0, 0); + sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.slotId], gSpecialVar_ItemId, 0, 0); else sub_81B1D68(gSpecialVar_ItemId, gUnknown_0203CEFC, 0); gTasks[taskId].func = sub_81B469C; @@ -4256,17 +4297,17 @@ static void sub_81B4624(u8 taskId) static void sub_81B469C(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; if (sub_81B1BD4() != TRUE) { - sub_81B5C94(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9]); + sub_81B5C94(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId]); if (gUnknown_0203CEC8.unk8_0 == 12) { if (GetMonData(mon, MON_DATA_HELD_ITEM) != ITEM_NONE) - DisplayPartyPokemonOtherText(11, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], 1); + DisplayPartyPokemonOtherText(11, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1); else - DisplayPartyPokemonOtherText(12, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], 1); + DisplayPartyPokemonOtherText(12, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1); } sub_81B1C1C(taskId); } @@ -4274,12 +4315,12 @@ static void sub_81B469C(u8 taskId) static void CursorCb_TakeItem(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; u16 item = GetMonData(mon, MON_DATA_HELD_ITEM); PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); switch (TryTakeMonItem(mon)) { case 0: @@ -4301,12 +4342,12 @@ static void CursorCb_TakeItem(u8 taskId) static void CursorCb_Toss(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; u16 item = GetMonData(mon, MON_DATA_HELD_ITEM); PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); if (item == ITEM_NONE) { GetMonNickname(mon, gStringVar1); @@ -4334,7 +4375,7 @@ static void sub_81B48A8(u8 taskId) static void sub_81B48DC(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; switch (Menu_ProcessInputNoWrapClearOnChoose()) { @@ -4354,15 +4395,15 @@ static void sub_81B48DC(u8 taskId) static void sub_81B4988(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; if (sub_81B1BD4() != TRUE) { u16 item = ITEM_NONE; SetMonData(mon, MON_DATA_HELD_ITEM, &item); - sub_81B5C94(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9]); - DisplayPartyPokemonOtherText(12, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], 1); + sub_81B5C94(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId]); + DisplayPartyPokemonOtherText(12, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1); gTasks[taskId].func = sub_81B1C1C; } } @@ -4370,9 +4411,9 @@ static void sub_81B4988(u8 taskId) static void CursorCb_Mail(u8 taskId) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); - sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.unk9, 9); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); + sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, 9); sub_81B31B0(2); display_pokemon_menu_message(25); gTasks[taskId].data[0] = 0xFF; @@ -4388,7 +4429,7 @@ static void CursorCb_Read(u8 taskId) static void sub_81B4A98(void) { - ReadMail(&gSaveBlock1Ptr->mail[GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_MAIL)], sub_81B4AE0, 1); + ReadMail(&gSaveBlock1Ptr->mail[GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_MAIL)], sub_81B4AE0, 1); } static void sub_81B4AE0(void) @@ -4400,8 +4441,8 @@ static void sub_81B4AE0(void) static void CursorCb_TakeMail(u8 taskId) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); sub_81B1B5C(gText_SendMailToPC, 1); gTasks[taskId].func = sub_81B4B6C; } @@ -4420,7 +4461,7 @@ static void sub_81B4BA0(u8 taskId) switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: - if (TakeMailFromMon2(&gPlayerParty[gUnknown_0203CEC8.unk9]) != 0xFF) + if (TakeMailFromMon2(&gPlayerParty[gUnknown_0203CEC8.slotId]) != 0xFF) { sub_81B1B5C(gText_MailSentToPC, 0); gTasks[taskId].func = sub_81B469C; @@ -4456,10 +4497,10 @@ static void sub_81B4C94(u8 taskId) switch (Menu_ProcessInputNoWrapClearOnChoose()) { case 0: - item = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_HELD_ITEM); + item = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_HELD_ITEM); if (AddBagItem(item, 1) == TRUE) { - TakeMailFromMon(&gPlayerParty[gUnknown_0203CEC8.unk9]); + TakeMailFromMon(&gPlayerParty[gUnknown_0203CEC8.slotId]); sub_81B1B5C(gText_MailTakenFromPkmn, 0); gTasks[taskId].func = sub_81B469C; } @@ -4480,12 +4521,12 @@ static void sub_81B4C94(u8 taskId) static void CursorCb_Cancel2(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); - sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.unk9, sub_81B353C(mon)); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); + sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.slotId, sub_81B353C(mon)); if (gUnknown_0203CEC8.unk8_0 != 12) { sub_81B31B0(0); @@ -4504,14 +4545,14 @@ static void CursorCb_Cancel2(u8 taskId) static void CursorCb_SendMon(u8 taskId) { PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); if (sub_81B8A7C() == TRUE) { sub_81B12C0(taskId); } else { - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); sub_81B1B5C(gStringVar4, 1); gTasks[taskId].func = sub_81B1C1C; } @@ -4522,16 +4563,16 @@ static void CursorCb_Enter(u8 taskId) u8 unk; u8 i; - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); unk = sub_81B8830(); for (i = 0; i < unk; i++) { if (gSelectedOrderFromParty[i] == 0) { PlaySE(SE_SELECT); - gSelectedOrderFromParty[i] = gUnknown_0203CEC8.unk9 + 1; - DisplayPartyPokemonOtherText(i + 2, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], 1); + gSelectedOrderFromParty[i] = gUnknown_0203CEC8.slotId + 1; + DisplayPartyPokemonOtherText(i + 2, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1); if (i == (unk - 1)) sub_81B4F88(); display_pokemon_menu_message(0); @@ -4548,9 +4589,9 @@ static void CursorCb_Enter(u8 taskId) static void sub_81B4F88(void) { - sub_81B0FCC(gUnknown_0203CEC8.unk9, 0); - gUnknown_0203CEC8.unk9 = 6; - sub_81B0FCC(gUnknown_0203CEC8.unk9, 1); + sub_81B0FCC(gUnknown_0203CEC8.slotId, 0); + gUnknown_0203CEC8.slotId = 6; + sub_81B0FCC(gUnknown_0203CEC8.slotId, 1); } static void CursorCb_NoEntry(u8 taskId) @@ -4559,12 +4600,12 @@ static void CursorCb_NoEntry(u8 taskId) u8 i, j; PlaySE(SE_SELECT); - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); unk = sub_81B8830(); for (i = 0; i < unk; i++) { - if (gSelectedOrderFromParty[i] == (gUnknown_0203CEC8.unk9 + 1)) + if (gSelectedOrderFromParty[i] == (gUnknown_0203CEC8.slotId + 1)) { for (j = i; j < (unk - 1); j++) gSelectedOrderFromParty[j] = gSelectedOrderFromParty[j + 1]; @@ -4572,7 +4613,7 @@ static void CursorCb_NoEntry(u8 taskId) break; } } - DisplayPartyPokemonOtherText(1, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], 1); + DisplayPartyPokemonOtherText(1, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1); for (i = 0; i < (unk - 1); i++) { if (gSelectedOrderFromParty[i] != 0) @@ -4590,9 +4631,9 @@ static void CursorCb_Store(u8 taskId) static void CursorCb_Register(u8 taskId) { - u16 species2 = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES2); - u16 species = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES); - u8 obedience = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_OBEDIENCE); + u16 species2 = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES); + u8 obedience = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_OBEDIENCE); switch (sub_807A8D0(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_800F7DC(), species2, species, obedience)) { @@ -4608,8 +4649,8 @@ static void CursorCb_Register(u8 taskId) return; } PlaySE(SE_HAZURE); - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); StringAppend(gStringVar4, gText_PauseUntilPress); sub_81B1B5C(gStringVar4, 1); gTasks[taskId].func = sub_81B1C1C; @@ -4617,17 +4658,17 @@ static void CursorCb_Register(u8 taskId) static void CursorCb_Trade1(u8 taskId) { - u16 species2 = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES2); - u16 species = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES); - u8 obedience = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_OBEDIENCE); + u16 species2 = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES2); + u16 species = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES); + u8 obedience = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_OBEDIENCE); u32 stringId = sub_807A7E0(*(struct UnkLinkRfuStruct_02022B14Substruct *)sub_800F7DC(), gUnknown_02022C38, species2, gUnknown_02022C3C, gUnknown_02022C3E, species, obedience); if (stringId != 0) { StringExpandPlaceholders(gStringVar4, gUnknown_08615E0C[stringId - 1]); PlaySE(SE_HAZURE); - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); StringAppend(gStringVar4, gText_PauseUntilPress); sub_81B1B5C(gStringVar4, 1); gTasks[taskId].func = sub_81B1C1C; @@ -4641,9 +4682,9 @@ static void CursorCb_Trade1(u8 taskId) static void CursorCb_Trade2(u8 taskId) { - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); - switch (sub_807A918(gPlayerParty, gUnknown_0203CEC8.unk9)) + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); + switch (sub_807A918(gPlayerParty, gUnknown_0203CEC8.slotId)) { case 1: StringExpandPlaceholders(gStringVar4, gText_OnlyPkmnForBattle); @@ -4656,7 +4697,7 @@ static void CursorCb_Trade2(u8 taskId) break; default: PlaySE(SE_SELECT); - GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unk9], gStringVar1); + GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1); StringExpandPlaceholders(gStringVar4, gJPText_PutVar1IntoSpinner); sub_81B1B5C(gStringVar4, 1); gTasks[taskId].func = sub_81B53FC; @@ -4694,15 +4735,15 @@ static void sub_81B5430(u8 taskId) static void CursorCb_FieldMove(u8 taskId) { - u8 fieldMove = gUnknown_0203CEC4->unkF[Menu_GetCursorPos()] - MENU_FIELD_MOVES; + u8 fieldMove = gUnknown_0203CEC4->actions[Menu_GetCursorPos()] - MENU_FIELD_MOVES; const struct MapHeader *mapHeader; PlaySE(SE_SELECT); if (sFieldMoveCursorCallbacks[fieldMove].fieldMoveFunc == NULL) return; - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); if (sub_81221AC() == TRUE || InUnionRoom() == TRUE) { if (fieldMove == FIELD_MOVE_MILK_DRINK || fieldMove == FIELD_MOVE_SOFT_BOILED) @@ -4823,7 +4864,7 @@ static void task_launch_hm_phase_2(u8 taskId) static u16 brm_get_selected_species(void) { - return GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES); + return GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_SPECIES); } static void task_brm_cancel_1_on_keypad_a_or_b(u8 taskId) @@ -4925,15 +4966,15 @@ static void party_menu_icon_anim(struct Pokemon *mon, struct Struct203CEDC *ptr, bit = (gUnknown_08616020[a] ^ bit) ? 1 : 0; species2 = GetMonData(mon, MON_DATA_SPECIES2); party_menu_link_mon_icon_anim(species2, GetMonData(mon, MON_DATA_PERSONALITY), ptr, 1, bit); - sub_81B5B38(ptr->unk9, mon); + sub_81B5B38(ptr->monSpriteId, mon); } static void party_menu_link_mon_icon_anim(u16 species, u32 pid, struct Struct203CEDC *ptr, u8 priority, u32 bit) { if (species != SPECIES_NONE) { - ptr->unk9 = CreateMonIcon(species, sub_80D3014, ptr->unk4[0], ptr->unk4[1], 4, pid, bit); - gSprites[ptr->unk9].oam.priority = priority; + ptr->monSpriteId = CreateMonIcon(species, sub_80D3014, ptr->unk4[0], ptr->unk4[1], 4, pid, bit); + gSprites[ptr->monSpriteId].oam.priority = priority; } } @@ -5011,7 +5052,7 @@ static void party_menu_held_item_object(struct Pokemon *mon, struct Struct203CED { if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) { - ptr->unkA = CreateSprite(&gSpriteTemplate_8615EC0, ptr->unk4[2], ptr->unk4[3], 0); + ptr->itemSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, ptr->unk4[2], ptr->unk4[3], 0); sub_81B5C94(mon, ptr); } } @@ -5020,8 +5061,8 @@ static void party_menu_link_mon_held_item_object(u16 species, u16 item, struct S { if (species != SPECIES_NONE) { - ptr->unkA = CreateSprite(&gSpriteTemplate_8615EC0, ptr->unk4[2], ptr->unk4[3], 0); - gSprites[ptr->unkA].oam.priority = 0; + ptr->itemSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, ptr->unk4[2], ptr->unk4[3], 0); + gSprites[ptr->itemSpriteId].oam.priority = 0; sub_81B5CB0(item, ptr); } } @@ -5035,22 +5076,22 @@ static void sub_81B5CB0(u16 item, struct Struct203CEDC *ptr) { if (item == ITEM_NONE) { - gSprites[ptr->unkA].invisible = TRUE; + gSprites[ptr->itemSpriteId].invisible = TRUE; } else { if (ItemIsMail(item)) - StartSpriteAnim(&gSprites[ptr->unkA], 1); + StartSpriteAnim(&gSprites[ptr->itemSpriteId], 1); else - StartSpriteAnim(&gSprites[ptr->unkA], 0); - gSprites[ptr->unkA].invisible = FALSE; + StartSpriteAnim(&gSprites[ptr->itemSpriteId], 0); + gSprites[ptr->itemSpriteId].invisible = FALSE; } } void LoadHeldItemIcons(void) { - LoadSpriteSheet(&gUnknown_08615EB0); - LoadSpritePalette(&gUnknown_08615EB8); + LoadSpriteSheet(&sSpriteSheet_HeldItem); + LoadSpritePalette(&sSpritePalette_HeldItem); } void sub_81B5D4C(u8 *a, u8 *b, u8 c) @@ -5082,17 +5123,17 @@ void sub_81B5D4C(u8 *a, u8 *b, u8 c) static void sub_81B5DF0(u8 spriteId, u8 isMail) { u8 subpriority = gSprites[spriteId].subpriority; - u8 newSpriteId = CreateSprite(&gSpriteTemplate_8615EC0, 250, 170, subpriority - 1); + u8 newSpriteId = CreateSprite(&sSpriteTemplate_HeldItem, 250, 170, subpriority - 1); gSprites[newSpriteId].pos2.x = 4; gSprites[newSpriteId].pos2.y = 10; - gSprites[newSpriteId].callback = sub_81B5E74; + gSprites[newSpriteId].callback = SpriteCB_HeldItem; gSprites[newSpriteId].data[7] = spriteId; StartSpriteAnim(&gSprites[newSpriteId], isMail); gSprites[newSpriteId].callback(&gSprites[newSpriteId]); } -static void sub_81B5E74(struct Sprite *sprite) +static void SpriteCB_HeldItem(struct Sprite *sprite) { u8 otherSpriteId = sprite->data[7]; @@ -5111,21 +5152,21 @@ static void sub_81B5E74(struct Sprite *sprite) static void party_menu_pokeball_object(struct Pokemon *mon, struct Struct203CEDC *ptr) { if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) - ptr->unkB = CreateSprite(&gSpriteTemplate_8615F08, ptr->unk4[6], ptr->unk4[7], 8); + ptr->pokeballSpriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, ptr->unk4[6], ptr->unk4[7], 8); } static void party_menu_link_mon_pokeball_object(u16 species, struct Struct203CEDC *ptr) { if (species != SPECIES_NONE) { - ptr->unkB = CreateSprite(&gSpriteTemplate_8615F08, ptr->unk4[6], ptr->unk4[7], 8); - gSprites[ptr->unkB].oam.priority = 0; + ptr->pokeballSpriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, ptr->unk4[6], ptr->unk4[7], 8); + gSprites[ptr->pokeballSpriteId].oam.priority = 0; } } static u8 sub_81B5F34(u8 x, u8 y) { - u8 spriteId = CreateSprite(&gSpriteTemplate_8615F08, x, y, 8); + u8 spriteId = CreateSprite(&sSpriteTemplate_MenuPokeball, x, y, 8); gSprites[spriteId].oam.priority = 2; return spriteId; @@ -5161,16 +5202,16 @@ static void sub_81B5FBC(u8 spriteId, u8 spriteId2, u8 a) static void LoadPartyMenuPokeballGfx(void) { - LoadCompressedSpriteSheet(&gUnknown_08615EF8); - LoadCompressedSpriteSheet(&gUnknown_08615F70); - LoadCompressedSpritePalette(&gUnknown_08615F00); + LoadCompressedSpriteSheet(&sSpriteSheet_MenuPokeball); + LoadCompressedSpriteSheet(&sSpriteSheet_MenuPokeballSmall); + LoadCompressedSpritePalette(&sSpritePalette_MenuPokeball); } static void party_menu_status_condition_object(struct Pokemon *mon, struct Struct203CEDC *ptr) { if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) { - ptr->unkC = CreateSprite(&gSpriteTemplate_8616008, ptr->unk4[4], ptr->unk4[5], 0); + ptr->statusSpriteId = CreateSprite(&sSpriteTemplate_StatusIcons, ptr->unk4[4], ptr->unk4[5], 0); party_menu_get_status_condition_and_update_object(mon, ptr); } } @@ -5179,9 +5220,9 @@ static void party_menu_link_mon_status_condition_object(u16 species, u8 status, { if (species != SPECIES_NONE) { - ptr->unkC = CreateSprite(&gSpriteTemplate_8616008, ptr->unk4[4], ptr->unk4[5], 0); + ptr->statusSpriteId = CreateSprite(&sSpriteTemplate_StatusIcons, ptr->unk4[4], ptr->unk4[5], 0); party_menu_update_status_condition_object(status, ptr); - gSprites[ptr->unkC].oam.priority = 0; + gSprites[ptr->statusSpriteId].oam.priority = 0; } } @@ -5196,19 +5237,19 @@ static void party_menu_update_status_condition_object(u8 status, struct Struct20 { case AILMENT_NONE: case AILMENT_PKRS: - gSprites[ptr->unkC].invisible = TRUE; + gSprites[ptr->statusSpriteId].invisible = TRUE; break; default: - StartSpriteAnim(&gSprites[ptr->unkC], status - 1); - gSprites[ptr->unkC].invisible = FALSE; + StartSpriteAnim(&gSprites[ptr->statusSpriteId], status - 1); + gSprites[ptr->statusSpriteId].invisible = FALSE; break; } } static void LoadPartyMenuAilmentGfx(void) { - LoadCompressedSpriteSheet(&gUnknown_08615FF8); - LoadCompressedSpritePalette(&gUnknown_08616000); + LoadCompressedSpriteSheet(&sSpriteSheet_StatusIcons); + LoadCompressedSpritePalette(&sSpritePalette_StatusIcons); } void sub_81B617C(void) @@ -5233,12 +5274,12 @@ void sub_81B617C(void) if (GetItemEffectType(gSpecialVar_ItemId) == ITEM_EFFECT_SACRED_ASH) { - gUnknown_0203CEC8.unk9 = 0; + gUnknown_0203CEC8.slotId = 0; for (i = 0; i < PARTY_SIZE; i++) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) { - gUnknown_0203CEC8.unk9 = i; + gUnknown_0203CEC8.slotId = i; break; } } @@ -5381,7 +5422,7 @@ static bool8 ExecuteTableBasedItemEffect__(u8 partyMonIndex, u16 item, u8 monMov void ItemUseCB_Medicine(u8 taskId, TaskFunc task) { u16 hp = 0; - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; u16 item = gSpecialVar_ItemId; bool8 canHeal; @@ -5394,7 +5435,7 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) if (hp == GetMonData(mon, MON_DATA_MAX_HP)) canHeal = FALSE; } - if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.unk9, item, 0)) + if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, item, 0)) { iTriedHonestlyIDid: gUnknown_0203CEE8 = 0; @@ -5420,14 +5461,14 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) { PlaySE(SE_BIDORO); } - party_menu_get_status_condition_and_update_object(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9]); - if (gSprites[gUnknown_0203CEDC[gUnknown_0203CEC8.unk9].unkC].invisible) - DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], 1); + party_menu_get_status_condition_and_update_object(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId]); + if (gSprites[gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].statusSpriteId].invisible) + DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1); if (canHeal == TRUE) { if (hp == 0) - sub_81B0FCC(gUnknown_0203CEC8.unk9, 1); - sub_81B1F18(taskId, gUnknown_0203CEC8.unk9, 1, GetMonData(mon, MON_DATA_HP) - hp, sub_81B672C); + sub_81B0FCC(gUnknown_0203CEC8.slotId, 1); + sub_81B1F18(taskId, gUnknown_0203CEC8.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, sub_81B672C); sub_81B1FA8(taskId, 0, hp); return; } @@ -5443,7 +5484,7 @@ void ItemUseCB_Medicine(u8 taskId, TaskFunc task) static void sub_81B672C(u8 taskId) { - GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unk9], gStringVar1); + GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2); sub_81B1B5C(gStringVar4, 0); schedule_bg_copy_tilemap_to_vram(2); @@ -5463,12 +5504,12 @@ static void sub_81B6794(u8 taskId) void sub_81B67C8(u8 taskId, TaskFunc task) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; u16 item = gSpecialVar_ItemId; u8 effectType = GetItemEffectType(item); u16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP); u16 relevantEV = ItemEffectToMonEv(mon, effectType); - bool8 cannotUseEffect = ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.unk9, item, 0); + bool8 cannotUseEffect = ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, item, 0); u16 newFriendship = GetMonData(mon, MON_DATA_FRIENDSHIP); u16 newRelevantEV = ItemEffectToMonEv(mon, effectType); @@ -5583,7 +5624,7 @@ static void ether_effect_related_3(u8 taskId) } else { - sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B302C(&gUnknown_0203CEC4->windowId[1]); ether_effect_related_2(taskId); } } @@ -5608,14 +5649,14 @@ void dp05_ether(u8 taskId, TaskFunc task) { PlaySE(SE_SELECT); display_pokemon_menu_message(22); - sub_81B6A10(gUnknown_0203CEC8.unk9); + sub_81B6A10(gUnknown_0203CEC8.slotId); gTasks[taskId].func = ether_effect_related_3; } } static void ether_effect_related_2(u8 taskId) { - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); gUnknown_0203CEC8.unkE = Menu_GetCursorPos(); ether_effect_related(taskId); } @@ -5624,7 +5665,7 @@ static void sub_81B6BB4(u8 taskId) { gTasks[taskId].func = sub_81B1370; gUnknown_0203CEC4->exitCallback = NULL; - sub_81B302C(&gUnknown_0203CEC4->unkC[0]); + sub_81B302C(&gUnknown_0203CEC4->windowId[0]); display_pokemon_menu_message(5); } @@ -5636,7 +5677,7 @@ static void ether_effect_related(u8 taskId) struct Struct203CEC8 *ptr = &gUnknown_0203CEC8; struct Pokemon *mon; - if (ExecuteTableBasedItemEffect__(ptr->unk9, item, *moveslot)) + if (ExecuteTableBasedItemEffect__(ptr->slotId, item, *moveslot)) { gUnknown_0203CEE8 = 0; PlaySE(SE_SELECT); @@ -5647,7 +5688,7 @@ static void ether_effect_related(u8 taskId) else { gUnknown_0203CEE8 = 1; - mon = &gPlayerParty[ptr->unk9]; + mon = &gPlayerParty[ptr->slotId]; PlaySE(SE_KAIFUKU); RemoveBagItem(item, 1); move = GetMonData(mon, MON_DATA_MOVE1 + *moveslot); @@ -5663,7 +5704,7 @@ void dp05_pp_up(u8 taskId, TaskFunc task) { PlaySE(SE_SELECT); display_pokemon_menu_message(23); - sub_81B6A10(gUnknown_0203CEC8.unk9); + sub_81B6A10(gUnknown_0203CEC8.slotId); gTasks[taskId].func = ether_effect_related_3; } @@ -5719,7 +5760,7 @@ void sub_81B6DC4(u8 taskId, TaskFunc task) u16 item; PlaySE(SE_SELECT); - mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; move = &gUnknown_0203CEC8.unkE; item = gSpecialVar_ItemId; GetMonNickname(mon, gStringVar1); @@ -5750,7 +5791,7 @@ void sub_81B6DC4(u8 taskId, TaskFunc task) static void sub_81B6EB4(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; s16 *move = &gUnknown_0203CEC8.unkE; u16 item = gSpecialVar_ItemId; @@ -5828,7 +5869,7 @@ static void sub_81B7088(u8 taskId) static void sub_81B70B8(void) { - ShowSelectMovePokemonSummaryScreen(gPlayerParty, gUnknown_0203CEC8.unk9, gPlayerPartyCount - 1, sub_81B70F0, gUnknown_0203CEC8.unkE); + ShowSelectMovePokemonSummaryScreen(gPlayerParty, gUnknown_0203CEC8.slotId, gPlayerPartyCount - 1, sub_81B70F0, gUnknown_0203CEC8.unkE); } static void sub_81B70F0(void) @@ -5849,7 +5890,7 @@ static void sub_81B711C(u8 taskId) static void sub_81B7154(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; u16 move = GetMonData(mon, MON_DATA_MOVE1 + sub_81C1B94()); GetMonNickname(mon, gStringVar1); @@ -5865,7 +5906,7 @@ static void sub_81B71D4(u8 taskId) if (sub_81B1BD4() != TRUE) { - mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; RemoveMonPPBonus(mon, sub_81C1B94()); move = gUnknown_0203CEC8.unkE; SetMonMoveSlot(mon, move, sub_81C1B94()); @@ -5893,7 +5934,7 @@ static void sub_81B7294(u8 taskId) static void sub_81B72C8(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; switch (Menu_ProcessInputNoWrapClearOnChoose()) { @@ -5932,7 +5973,7 @@ static void sub_81B73E4(u8 taskId) void dp05_rare_candy(u8 taskId, TaskFunc task) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; struct Struct203CEC4 *ptr = gUnknown_0203CEC4; s16 *arrayPtr = ptr->data; u16 *itemPtr = &gSpecialVar_ItemId; @@ -5941,7 +5982,7 @@ void dp05_rare_candy(u8 taskId, TaskFunc task) if (GetMonData(mon, MON_DATA_LEVEL) != MAX_LEVEL) { sub_81B79A0(mon, arrayPtr); - cannotUseEffect = ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.unk9, *itemPtr, 0); + cannotUseEffect = ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, *itemPtr, 0); sub_81B79A0(mon, &ptr->data[6]); } else @@ -5960,7 +6001,7 @@ void dp05_rare_candy(u8 taskId, TaskFunc task) { gUnknown_0203CEE8 = 1; PlayFanfareByFanfareNum(0); - sub_81B754C(gUnknown_0203CEC8.unk9, mon); + sub_81B754C(gUnknown_0203CEC8.slotId, mon); RemoveBagItem(gSpecialVar_ItemId, 1); GetMonNickname(mon, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, GetMonData(mon, MON_DATA_LEVEL), 0, 3); @@ -5974,12 +6015,12 @@ void dp05_rare_candy(u8 taskId, TaskFunc task) static void sub_81B754C(u8 slot, struct Pokemon *mon) { party_menu_get_status_condition_and_update_object(mon, &gUnknown_0203CEDC[slot]); - if (gSprites[gUnknown_0203CEDC[slot].unkC].invisible) + if (gSprites[gUnknown_0203CEDC[slot].statusSpriteId].invisible) DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[slot], 1); DisplayPartyPokemonHPCheck(mon, &gUnknown_0203CEDC[slot], 1); DisplayPartyPokemonMaxHPCheck(mon, &gUnknown_0203CEDC[slot], 1); DisplayPartyPokemonHPBarCheck(mon, &gUnknown_0203CEDC[slot]); - sub_81B5B38(gUnknown_0203CEDC[slot].unk9, mon); + sub_81B5B38(gUnknown_0203CEDC[slot].monSpriteId, mon); sub_81B0FCC(slot, 1); schedule_bg_copy_tilemap_to_vram(0); } @@ -6030,7 +6071,7 @@ static void sub_81B7704(u8 taskId) if (WaitFanfare(0) && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))) { sub_81B3394(); - result = MonTryLearningNewMove(&gPlayerParty[gUnknown_0203CEC8.unk9], 1); + result = MonTryLearningNewMove(&gPlayerParty[gUnknown_0203CEC8.slotId], 1); gUnknown_0203CEC8.unk10 = 1; switch (result) { @@ -6052,7 +6093,7 @@ static void sub_81B7704(u8 taskId) static void sub_81B77AC(u8 taskId) { - u16 result = MonTryLearningNewMove(&gPlayerParty[gUnknown_0203CEC8.unk9], 0); + u16 result = MonTryLearningNewMove(&gPlayerParty[gUnknown_0203CEC8.slotId], 0); switch (result) { @@ -6072,14 +6113,14 @@ static void sub_81B77AC(u8 taskId) static void sub_81B7810(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; u16 targetSpecies = GetEvolutionTargetSpecies(mon, 0, 0); if (targetSpecies != SPECIES_NONE) { FreePartyPointers(); gCB2_AfterEvolution = gUnknown_0203CEC8.exitCallback; - BeginEvolutionScene(mon, targetSpecies, 1, gUnknown_0203CEC8.unk9); + BeginEvolutionScene(mon, targetSpecies, 1, gUnknown_0203CEC8.slotId); DestroyTask(taskId); } else @@ -6090,7 +6131,7 @@ static void sub_81B7810(u8 taskId) static void sub_81B787C(u8 taskId) { - GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unk9], gStringVar1); + GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1); StringCopy(gStringVar2, gMoveNames[gMoveToLearn]); StringExpandPlaceholders(gStringVar4, gText_PkmnNeedsToReplaceMove); sub_81B1B5C(gStringVar4, 1); @@ -6101,7 +6142,7 @@ static void sub_81B787C(u8 taskId) static void sub_81B7910(u8 taskId, u16 move) { - GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unk9], gStringVar1); + GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1); StringCopy(gStringVar2, gMoveNames[move]); StringExpandPlaceholders(gStringVar4, gText_PkmnLearnedMove3); sub_81B1B5C(gStringVar4, 1); @@ -6124,13 +6165,13 @@ void sub_81B79E8(u8 taskId, TaskFunc task) { gUnknown_0203CEC4->data[0] = 0; gUnknown_0203CEC4->data[1] = 0; - gUnknown_0203CEC4->data[2] = gUnknown_0203CEC8.unk9; + gUnknown_0203CEC4->data[2] = gUnknown_0203CEC8.slotId; sub_81B7A28(taskId); } static void sub_81B7A28(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; u16 hp; if (GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NONE) @@ -6140,19 +6181,19 @@ static void sub_81B7A28(u8 taskId) } hp = GetMonData(mon, MON_DATA_HP); - if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.unk9, gSpecialVar_ItemId, 0)) + if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, gSpecialVar_ItemId, 0)) { gTasks[taskId].func = task_sacred_ash_party_loop; return; } PlaySE(SE_KAIFUKU); - party_menu_get_status_condition_and_update_object(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9]); - if (gSprites[gUnknown_0203CEDC[gUnknown_0203CEC8.unk9].unkC].invisible) - DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], 1); + party_menu_get_status_condition_and_update_object(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId]); + if (gSprites[gUnknown_0203CEDC[gUnknown_0203CEC8.slotId].statusSpriteId].invisible) + DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.slotId], 1); sub_81B0FCC(gUnknown_0203CEC4->data[2], 0); - sub_81B0FCC(gUnknown_0203CEC8.unk9, 1); - sub_81B1F18(taskId, gUnknown_0203CEC8.unk9, 1, GetMonData(mon, MON_DATA_HP) - hp, sub_81B7C10); + sub_81B0FCC(gUnknown_0203CEC8.slotId, 1); + sub_81B1F18(taskId, gUnknown_0203CEC8.slotId, 1, GetMonData(mon, MON_DATA_HP) - hp, sub_81B7C10); sub_81B1FA8(taskId, 0, hp); gUnknown_0203CEC4->data[0] = 1; gUnknown_0203CEC4->data[1] = 1; @@ -6165,9 +6206,9 @@ static void task_sacred_ash_party_loop(u8 taskId) if (gUnknown_0203CEC4->data[0] == 1) { gUnknown_0203CEC4->data[0] = 0; - gUnknown_0203CEC4->data[2] = gUnknown_0203CEC8.unk9; + gUnknown_0203CEC4->data[2] = gUnknown_0203CEC8.slotId; } - if (++(gUnknown_0203CEC8.unk9) == PARTY_SIZE) + if (++(gUnknown_0203CEC8.slotId) == PARTY_SIZE) { if (gUnknown_0203CEC4->data[1] == 0) { @@ -6181,7 +6222,7 @@ static void task_sacred_ash_party_loop(u8 taskId) RemoveBagItem(gSpecialVar_ItemId, 1); } gTasks[taskId].func = sub_81B6794; - gUnknown_0203CEC8.unk9 = 0; + gUnknown_0203CEC8.slotId = 0; } else { @@ -6192,7 +6233,7 @@ static void task_sacred_ash_party_loop(u8 taskId) static void sub_81B7C10(u8 taskId) { - GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unk9], gStringVar1); + GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.slotId], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2); sub_81B1B5C(gStringVar4, 0); schedule_bg_copy_tilemap_to_vram(2); @@ -6203,7 +6244,7 @@ void sub_81B7C74(u8 taskId, TaskFunc task) { PlaySE(SE_SELECT); gCB2_AfterEvolution = gUnknown_0203CEC8.exitCallback; - if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.unk9, gSpecialVar_ItemId, 0)) + if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.slotId, gSpecialVar_ItemId, 0)) { gUnknown_0203CEE8 = 0; sub_81B1B5C(gText_WontHaveEffect, 1); @@ -6292,7 +6333,7 @@ static void sub_81B7E4C(u8 taskId) if (!gPaletteFade.active) { - mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; move = &gUnknown_0203CEC8.unkE; GetMonNickname(mon, gStringVar1); gUnknown_0203CEC8.unkE = GetTutorMove(gSpecialVar_0x8005); @@ -6333,7 +6374,7 @@ void sub_81B7F60(void) static void sub_81B7FAC(u8 taskId) { - gUnknown_0203CEFC = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_HELD_ITEM); + gUnknown_0203CEFC = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_HELD_ITEM); if (gUnknown_0203CEFC == ITEM_NONE) { sub_81B8044(taskId); @@ -6344,7 +6385,7 @@ static void sub_81B7FAC(u8 taskId) } else { - sub_81B1D1C(&gPlayerParty[gUnknown_0203CEC8.unk9], gUnknown_0203CEFC, 1); + sub_81B1D1C(&gPlayerParty[gUnknown_0203CEC8.slotId], gUnknown_0203CEFC, 1); gTasks[taskId].func = sub_81B82A0; } } @@ -6370,8 +6411,8 @@ static void sub_81B8088(u8 taskId) if (!gPaletteFade.active) { item = gUnknown_0203CEC8.unkC; - sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.unk9], item, 0, 1); - sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.unk9], item); + sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.slotId], item, 0, 1); + sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], item); sub_81B83F0(item); gTasks[taskId].func = sub_81B8104; } @@ -6379,7 +6420,7 @@ static void sub_81B8088(u8 taskId) static void sub_81B8104(u8 taskId) { - s8 slot = gUnknown_0203CEC8.unk9; + s8 slot = gUnknown_0203CEC8.slotId; if (sub_81B1BD4() != TRUE) { @@ -6392,8 +6433,8 @@ static void sub_81B814C(void) { u8 mail; - sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.unk9], gUnknown_0203CEC8.unkC); - mail = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_MAIL); + sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], gUnknown_0203CEC8.unkC); + mail = GetMonData(&gPlayerParty[gUnknown_0203CEC8.slotId], MON_DATA_MAIL); DoEasyChatScreen( EASY_CHAT_TYPE_MAIL, gSaveBlock1Ptr->mail[mail].words, @@ -6403,7 +6444,7 @@ static void sub_81B814C(void) static void sub_81B81A8(void) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; u16 item = GetMonData(mon, MON_DATA_HELD_ITEM); if (gSpecialVar_Result == FALSE) @@ -6427,7 +6468,7 @@ static void sub_81B8230(u8 taskId) if (gUnknown_0203CEFC != ITEM_NONE) sub_81B1D68(gUnknown_0203CEC8.unkC, gUnknown_0203CEFC, 0); else - sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.unk9], gUnknown_0203CEC8.unkC, 0, 1); + sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.slotId], gUnknown_0203CEC8.unkC, 0, 1); gTasks[taskId].func = sub_81B8104; } } @@ -6464,7 +6505,7 @@ static void sub_81B82D4(u8 taskId) } else { - sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.unk9], item); + sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.slotId], item); sub_81B1D68(item, gUnknown_0203CEFC, 1); gTasks[taskId].func = sub_81B8104; } @@ -6507,7 +6548,7 @@ void sub_81B8448(void) static void sub_81B8474(u8 taskId) { - struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9]; + struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.slotId]; struct MailStruct *mail; gUnknown_0203CEE8 = 0; @@ -7107,7 +7148,7 @@ static void sub_81B91B4(u8 taskId) for (i = 3; i < PARTY_SIZE; i++) { if (gUnknown_02022FF8[i - 3].species != SPECIES_NONE) - AnimateSelectedPartyIcon(gUnknown_0203CEDC[i].unk9, 0); + AnimateSelectedPartyIcon(gUnknown_0203CEDC[i].monSpriteId, 0); } PlaySE(SE_W231); // Harden SE? gTasks[taskId].func = sub_81B9240; @@ -7138,10 +7179,10 @@ static void sub_81B9294(u8 taskId) { if (gUnknown_02022FF8[i - 3].species != SPECIES_NONE) { - sub_81B9270(gUnknown_0203CEDC[i].unk9, data[0] - 8); - sub_81B9270(gUnknown_0203CEDC[i].unkA, data[0] - 8); - sub_81B9270(gUnknown_0203CEDC[i].unkB, data[0] - 8); - sub_81B9270(gUnknown_0203CEDC[i].unkC, data[0] - 8); + sub_81B9270(gUnknown_0203CEDC[i].monSpriteId, data[0] - 8); + sub_81B9270(gUnknown_0203CEDC[i].itemSpriteId, data[0] - 8); + sub_81B9270(gUnknown_0203CEDC[i].pokeballSpriteId, data[0] - 8); + sub_81B9270(gUnknown_0203CEDC[i].statusSpriteId, data[0] - 8); } } ChangeBgX(2, 0x800, 1); diff --git a/src/pokedex.c b/src/pokedex.c index 2588e2b73..da3f06bf1 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -3855,7 +3855,7 @@ void blockset_load_palette_to_gpu(u8 taskId) otId = ((u16)gTasks[taskId].data[13] << 16) | (u16)gTasks[taskId].data[12]; personality = ((u16)gTasks[taskId].data[15] << 16) | (u16)gTasks[taskId].data[14]; paletteNum = gSprites[gTasks[taskId].data[3]].oam.paletteNum; - lzPaletteData = GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality); + lzPaletteData = GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality); LoadCompressedPalette(lzPaletteData, 0x100 | paletteNum * 16, 32); DestroyTask(taskId); } diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index 1eb8c0953..dc69b5d54 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -763,11 +763,11 @@ static void sub_813D6B4(void) static void CreateAreaMarkerSprites(void) { u8 spriteId; - static IWRAM_DATA s16 x; - static IWRAM_DATA s16 y; - static IWRAM_DATA s16 i; - static IWRAM_DATA s16 mapSecId; - static IWRAM_DATA s16 numSprites; + static s16 x; + static s16 y; + static s16 i; + static s16 mapSecId; + static s16 numSprites; LoadSpriteSheet(&sAreaMarkerSpriteSheet); LoadSpritePalette(&sAreaMarkerSpritePalette); diff --git a/src/pokemon.c b/src/pokemon.c index fc9a0843f..cb7be1715 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1879,14 +1879,14 @@ static const u16 sDeoxysBaseStats[] = 90, // Sp.Defense }; -const u16 gUnknown_08329D54[] = +const u16 gLinkPlayerFacilityClasses[] = { FACILITY_CLASS_COOLTRAINER_M, FACILITY_CLASS_BLACK_BELT, FACILITY_CLASS_CAMPER, FACILITY_CLASS_YOUNGSTER, FACILITY_CLASS_PSYCHIC_M, FACILITY_CLASS_BUG_CATCHER, - FACILITY_CLASS_PKMN_BREEDER_M, FACILITY_CLASS_GUITARIST, FACILITY_CLASS_COOLTRAINER_F, - FACILITY_CLASS_HEX_MANIAC, FACILITY_CLASS_PICNICKER, FACILITY_CLASS_LASS, - FACILITY_CLASS_PSYCHIC_F, FACILITY_CLASS_BATTLE_GIRL, FACILITY_CLASS_POKEMON_BREEDER_F, - FACILITY_CLASS_BEAUTY + FACILITY_CLASS_PKMN_BREEDER_M, FACILITY_CLASS_GUITARIST, + FACILITY_CLASS_COOLTRAINER_F, FACILITY_CLASS_HEX_MANIAC, FACILITY_CLASS_PICNICKER, + FACILITY_CLASS_LASS, FACILITY_CLASS_PSYCHIC_F, FACILITY_CLASS_BATTLE_GIRL, + FACILITY_CLASS_POKEMON_BREEDER_F, FACILITY_CLASS_BEAUTY }; static const u8 sHoldEffectToType[][2] = @@ -2183,7 +2183,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, { value = Random32(); shinyValue = HIHALF(value) ^ LOHALF(value) ^ HIHALF(personality) ^ LOHALF(personality); - } while (shinyValue < 8); + } while (shinyValue < SHINY_ODDS); } else if (otIdType == OT_ID_PRESET) //Pokemon has a preset OT ID { @@ -2248,10 +2248,10 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, SetBoxMonData(boxMon, MON_DATA_SPDEF_IV, &iv); } - if (gBaseStats[species].ability2) + if (gBaseStats[species].abilities[1]) { value = personality & 1; - SetBoxMonData(boxMon, MON_DATA_ALT_ABILITY, &value); + SetBoxMonData(boxMon, MON_DATA_ABILITY_NUM, &value); } GiveBoxMonInitialMoveset(boxMon); @@ -2402,8 +2402,8 @@ void CreateBattleTowerMon(struct Pokemon *mon, struct BattleTowerPokemon *src) SetMonData(mon, MON_DATA_SPEED_EV, &src->speedEV); SetMonData(mon, MON_DATA_SPATK_EV, &src->spAttackEV); SetMonData(mon, MON_DATA_SPDEF_EV, &src->spDefenseEV); - value = src->altAbility; - SetMonData(mon, MON_DATA_ALT_ABILITY, &value); + value = src->abilityNum; + SetMonData(mon, MON_DATA_ABILITY_NUM, &value); value = src->hpIV; SetMonData(mon, MON_DATA_HP_IV, &value); value = src->attackIV; @@ -2464,8 +2464,8 @@ void CreateBattleTowerMon2(struct Pokemon *mon, struct BattleTowerPokemon *src, SetMonData(mon, MON_DATA_SPEED_EV, &src->speedEV); SetMonData(mon, MON_DATA_SPATK_EV, &src->spAttackEV); SetMonData(mon, MON_DATA_SPDEF_EV, &src->spDefenseEV); - value = src->altAbility; - SetMonData(mon, MON_DATA_ALT_ABILITY, &value); + value = src->abilityNum; + SetMonData(mon, MON_DATA_ABILITY_NUM, &value); value = src->hpIV; SetMonData(mon, MON_DATA_HP_IV, &value); value = src->attackIV; @@ -2580,7 +2580,7 @@ void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest) dest->speedIV = GetMonData(mon, MON_DATA_SPEED_IV, NULL); dest->spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL); dest->spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL); - dest->altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL); + dest->abilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM, NULL); dest->personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); GetMonData(mon, MON_DATA_NICKNAME, dest->nickname); } @@ -2649,25 +2649,20 @@ bool8 sub_80688F8(u8 caseId, u8 battlerId) return TRUE; } -static s32 GetDeoxysStat(struct Pokemon *mon, s32 statId) +static u16 GetDeoxysStat(struct Pokemon *mon, s32 statId) { s32 ivVal, evVal; - s32 statValue; - u8 nature, statId_; + u16 statValue = 0; + u8 nature; - if (gBattleTypeFlags & BATTLE_TYPE_20) - return 0; - if (GetMonData(mon, MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS) + if (gBattleTypeFlags & BATTLE_TYPE_20 || GetMonData(mon, MON_DATA_SPECIES, NULL) != SPECIES_DEOXYS) return 0; ivVal = GetMonData(mon, MON_DATA_HP_IV + statId, NULL); evVal = GetMonData(mon, MON_DATA_HP_EV + statId, NULL); - statValue = (u16)(((sDeoxysBaseStats[statId] * 2 + ivVal + evVal / 4) * mon->level) / 100 + 5); - + statValue = ((sDeoxysBaseStats[statId] * 2 + ivVal + evVal / 4) * mon->level) / 100 + 5; nature = GetNature(mon); - statId_ = statId; // needed to match - statValue = ModifyStatByNature(nature, statValue, statId_); - + statValue = ModifyStatByNature(nature, statValue, (u8)statId); return statValue; } @@ -2711,7 +2706,7 @@ u16 sub_8068B48(void) arrId = gLinkPlayers[linkId].trainerId & 7; arrId |= gLinkPlayers[linkId].gender << 3; - return FacilityClassToPicIndex(gUnknown_08329D54[arrId]); + return FacilityClassToPicIndex(gLinkPlayerFacilityClasses[arrId]); } u16 sub_8068BB0(void) @@ -2726,7 +2721,7 @@ u16 sub_8068BB0(void) arrId = gLinkPlayers[linkId].trainerId & 7; arrId |= gLinkPlayers[linkId].gender << 3; - return gFacilityClassToTrainerClass[gUnknown_08329D54[arrId]]; + return gFacilityClassToTrainerClass[gLinkPlayerFacilityClasses[arrId]]; } void CreateObedientEnemyMon(void) @@ -3584,27 +3579,27 @@ u32 GetMonData(struct Pokemon *mon, s32 field, u8* data) ret = mon->maxHP; break; case MON_DATA_ATK: - ret = (u16)GetDeoxysStat(mon, STAT_ATK); + ret = GetDeoxysStat(mon, STAT_ATK); if (!ret) ret = mon->attack; break; case MON_DATA_DEF: - ret = (u16)GetDeoxysStat(mon, STAT_DEF); + ret = GetDeoxysStat(mon, STAT_DEF); if (!ret) ret = mon->defense; break; case MON_DATA_SPEED: - ret = (u16)GetDeoxysStat(mon, STAT_SPEED); + ret = GetDeoxysStat(mon, STAT_SPEED); if (!ret) ret = mon->speed; break; case MON_DATA_SPATK: - ret = (u16)GetDeoxysStat(mon, STAT_SPATK); + ret = GetDeoxysStat(mon, STAT_SPATK); if (!ret) ret = mon->spAttack; break; case MON_DATA_SPDEF: - ret = (u16)GetDeoxysStat(mon, STAT_SPDEF); + ret = GetDeoxysStat(mon, STAT_SPDEF); if (!ret) ret = mon->spDefense; break; @@ -3642,7 +3637,8 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) struct PokemonSubstruct2 *substruct2 = NULL; struct PokemonSubstruct3 *substruct3 = NULL; - if (field > MON_DATA_10) + // Any field greater than MON_DATA_ENCRYPT_SEPARATOR is encrypted and must be treated as such + if (field > MON_DATA_ENCRYPT_SEPARATOR) { substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0); substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1); @@ -3736,7 +3732,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) case MON_DATA_CHECKSUM: retVal = boxMon->checksum; break; - case MON_DATA_10: + case MON_DATA_ENCRYPT_SEPARATOR: retVal = boxMon->unknown; break; case MON_DATA_SPECIES: @@ -3841,8 +3837,8 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) case MON_DATA_IS_EGG: retVal = substruct3->isEgg; break; - case MON_DATA_ALT_ABILITY: - retVal = substruct3->altAbility; + case MON_DATA_ABILITY_NUM: + retVal = substruct3->abilityNum; break; case MON_DATA_COOL_RIBBON: retVal = substruct3->coolRibbon; @@ -3977,7 +3973,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) break; } - if (field > MON_DATA_10) + if (field > MON_DATA_ENCRYPT_SEPARATOR) EncryptBoxMon(boxMon); return retVal; @@ -4040,7 +4036,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) struct PokemonSubstruct2 *substruct2 = NULL; struct PokemonSubstruct3 *substruct3 = NULL; - if (field > MON_DATA_10) + if (field > MON_DATA_ENCRYPT_SEPARATOR) { substruct0 = &(GetSubstruct(boxMon, boxMon->personality, 0)->type0); substruct1 = &(GetSubstruct(boxMon, boxMon->personality, 1)->type1); @@ -4099,7 +4095,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) case MON_DATA_CHECKSUM: SET16(boxMon->checksum); break; - case MON_DATA_10: + case MON_DATA_ENCRYPT_SEPARATOR: SET16(boxMon->unknown); break; case MON_DATA_SPECIES: @@ -4220,8 +4216,8 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) else boxMon->isEgg = 0; break; - case MON_DATA_ALT_ABILITY: - SET8(substruct3->altAbility); + case MON_DATA_ABILITY_NUM: + SET8(substruct3->abilityNum); break; case MON_DATA_COOL_RIBBON: SET8(substruct3->coolRibbon); @@ -4295,7 +4291,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) break; } - if (field > MON_DATA_10) + if (field > MON_DATA_ENCRYPT_SEPARATOR) { boxMon->checksum = CalculateBoxMonChecksum(boxMon); EncryptBoxMon(boxMon); @@ -4428,12 +4424,12 @@ u8 GetMonsStateToDoubles_2(void) return (aliveCount > 1) ? PLAYER_HAS_TWO_USABLE_MONS : PLAYER_HAS_ONE_USABLE_MON; } -u8 GetAbilityBySpecies(u16 species, bool8 altAbility) +u8 GetAbilityBySpecies(u16 species, bool8 abilityNum) { - if (altAbility) - gLastUsedAbility = gBaseStats[species].ability2; + if (abilityNum) + gLastUsedAbility = gBaseStats[species].abilities[1]; else - gLastUsedAbility = gBaseStats[species].ability1; + gLastUsedAbility = gBaseStats[species].abilities[0]; return gLastUsedAbility; } @@ -4441,8 +4437,8 @@ u8 GetAbilityBySpecies(u16 species, bool8 altAbility) u8 GetMonAbility(struct Pokemon *mon) { u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL); - u8 altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY, NULL); - return GetAbilityBySpecies(species, altAbility); + u8 abilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM, NULL); + return GetAbilityBySpecies(species, abilityNum); } void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord) @@ -4585,11 +4581,11 @@ void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex) gBattleMons[battlerId].spAttack = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPATK, NULL); gBattleMons[battlerId].spDefense = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPDEF, NULL); gBattleMons[battlerId].isEgg = GetMonData(&gPlayerParty[partyIndex], MON_DATA_IS_EGG, NULL); - gBattleMons[battlerId].altAbility = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ALT_ABILITY, NULL); + gBattleMons[battlerId].abilityNum = GetMonData(&gPlayerParty[partyIndex], MON_DATA_ABILITY_NUM, NULL); gBattleMons[battlerId].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID, NULL); gBattleMons[battlerId].type1 = gBaseStats[gBattleMons[battlerId].species].type1; gBattleMons[battlerId].type2 = gBaseStats[gBattleMons[battlerId].species].type2; - gBattleMons[battlerId].ability = GetAbilityBySpecies(gBattleMons[battlerId].species, gBattleMons[battlerId].altAbility); + gBattleMons[battlerId].ability = GetAbilityBySpecies(gBattleMons[battlerId].species, gBattleMons[battlerId].abilityNum); GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, nickname); StringCopy10(gBattleMons[battlerId].nickname, nickname); GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_NAME, gBattleMons[battlerId].otName); @@ -6320,10 +6316,10 @@ const u32 *GetMonFrontSpritePal(struct Pokemon *mon) u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0); u32 otId = GetMonData(mon, MON_DATA_OT_ID, 0); u32 personality = GetMonData(mon, MON_DATA_PERSONALITY, 0); - return GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality); + return GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality); } -const u32 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality) +const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality) { u32 shinyValue; @@ -6331,7 +6327,7 @@ const u32 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 return gMonPaletteTable[0].data; shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); - if (shinyValue < 8) + if (shinyValue < SHINY_ODDS) return gMonShinyPaletteTable[species].data; else return gMonPaletteTable[species].data; @@ -6350,7 +6346,7 @@ const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u u32 shinyValue; shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); - if (shinyValue < 8) + if (shinyValue < SHINY_ODDS) return &gMonShinyPaletteTable[species]; else return &gMonPaletteTable[species]; @@ -6524,7 +6520,7 @@ bool8 IsShinyOtIdPersonality(u32 otId, u32 personality) { bool8 retVal = FALSE; u32 shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); - if (shinyValue < 8) + if (shinyValue < SHINY_ODDS) retVal = TRUE; return retVal; } diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c index 52fa6db51..340327475 100644 --- a/src/pokemon_animation.c +++ b/src/pokemon_animation.c @@ -177,9 +177,9 @@ static void SpriteCB_SetDummyOnAnimEnd(struct Sprite *sprite); #define STRUCT_COUNT 4 // IWRAM bss -static IWRAM_DATA struct UnkAnimStruct sUnknown_03001240[STRUCT_COUNT]; -static IWRAM_DATA u8 sUnknown_03001270; -static IWRAM_DATA bool32 sUnknown_03001274; +static struct UnkAnimStruct sUnknown_03001240[STRUCT_COUNT]; +static u8 sUnknown_03001270; +static bool32 sUnknown_03001274; // const rom data static const u8 sSpeciesToBackAnimSet[] = @@ -861,16 +861,27 @@ u8 GetSpeciesBackAnimSet(u16 species) } #define tState data[0] -#define tPtrLO data[1] -#define tPtrHI data[2] +#define tPtrHi data[1] +#define tPtrLo data[2] #define tAnimId data[3] #define tSaved0 data[4] #define tSaved2 data[5] +// BUG: In vanilla, tPtrLo is read as an s16, so if bit 15 of the +// address were to be set it would cause the pointer to be read +// as 0xFFFFXXXX instead of the desired 0x02YYXXXX. +// By dumb luck, this is not an issue in vanilla. However, +// changing the link order revealed this bug. +#if MODERN +#define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | ((u16)gTasks[taskId].tPtrLo))) +#else +#define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | (gTasks[taskId].tPtrLo))) +#endif //MODERN + static void Task_HandleMonAnimation(u8 taskId) { u32 i; - struct Sprite *sprite = (struct Sprite*)(u32)((gTasks[taskId].tPtrLO << 0x10) | (gTasks[taskId].tPtrHI)); + struct Sprite *sprite = ANIM_SPRITE(taskId); if (gTasks[taskId].tState == 0) { @@ -900,8 +911,8 @@ static void Task_HandleMonAnimation(u8 taskId) void LaunchAnimationTaskForFrontSprite(struct Sprite *sprite, u8 frontAnimId) { u8 taskId = CreateTask(Task_HandleMonAnimation, 128); - gTasks[taskId].tPtrLO = (u32)(sprite) >> 0x10; - gTasks[taskId].tPtrHI = (u32)(sprite); + gTasks[taskId].tPtrHi = (u32)(sprite) >> 0x10; + gTasks[taskId].tPtrLo = (u32)(sprite); gTasks[taskId].tAnimId = frontAnimId; } @@ -916,8 +927,8 @@ void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet) u8 nature, taskId, animId, battlerId; taskId = CreateTask(Task_HandleMonAnimation, 128); - gTasks[taskId].tPtrLO = (u32)(sprite) >> 0x10; - gTasks[taskId].tPtrHI = (u32)(sprite); + gTasks[taskId].tPtrHi = (u32)(sprite) >> 0x10; + gTasks[taskId].tPtrLo = (u32)(sprite); battlerId = sprite->data[0]; nature = GetNature(&gPlayerParty[gBattlerPartyIndexes[battlerId]]); @@ -927,8 +938,8 @@ void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet) } #undef tState -#undef tPtrLO -#undef tPtrHI +#undef tPtrHi +#undef tPtrLo #undef tAnimId #undef tSaved0 #undef tSaved2 diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 6a135875e..ee68de326 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1223,7 +1223,7 @@ u8 GetValidMonIconPalIndex(u16 species) return gMonIconPaletteIndices[species]; } -u8 sub_80D30A0(u16 species) +u8 GetMonIconPaletteIndexFromSpecies(u16 species) { return gMonIconPaletteIndices[species]; } diff --git a/src/pokemon_jump.c b/src/pokemon_jump.c index 4a457adc4..8f16e1ce2 100755 --- a/src/pokemon_jump.c +++ b/src/pokemon_jump.c @@ -1,8 +1,12 @@ #include "global.h" #include "alloc.h" +#include "battle_anim.h" +#include "bg.h" #include "data.h" #include "decompress.h" +#include "dynamic_placeholder_text_util.h" #include "event_data.h" +#include "international_string_util.h" #include "item.h" #include "link.h" #include "link_rfu.h" @@ -10,11 +14,15 @@ #include "menu.h" #include "palette.h" #include "random.h" +#include "rom_8034C54.h" #include "save.h" +#include "script.h" #include "sound.h" #include "sprite.h" #include "string_util.h" +#include "strings.h" #include "task.h" +#include "text_window.h" #include "trig.h" #include "pokemon.h" #include "pokemon_jump.h" @@ -43,6 +51,42 @@ struct PokemonJump1_82E4 u8 unk1C[11]; }; +struct PokemonJump2 +{ + int unk0; + u16 unk4; + u8 unk6; + u8 filler7[0xa - 0x7]; + u8 unkA; + u8 unkB; + u8 unkC; + u8 unkD; + u8 unkE; + u8 unkF; + u16 filler10; + u16 unk12; + u16 unk14; + u32 unk18; + u16 unk1C[5]; + u8 txtBuff[2][0x40]; + u8 strBuff[0x100]; + u16 tilemapBuffer[(0x81a8 - 0x1a6) / 2]; // 0x1A6 + struct Sprite *unk81A8[MAX_RFU_PLAYERS]; + struct Sprite *unk81BC[MAX_RFU_PLAYERS]; + struct Sprite *unk81D0[8]; + u8 filler81F0[0xC]; + u8 unk81FC[MAX_RFU_PLAYERS]; +}; + +struct PokemonJump1Sub +{ + u8 unk0; + u8 unk1; + u16 unk2; + u16 unk4; + u32 unk8; +}; + struct PokemonJump1 { MainCallback returnCallback; @@ -91,19 +135,14 @@ struct PokemonJump1 int unk64; int unk68; int unk6C; - u8 unk70; - u8 unk71; - u16 unk72; - u16 unk74; - u32 unk78; + struct PokemonJump1Sub unk70; u8 unk7C[MAX_RFU_PLAYERS]; u8 unk81[MAX_RFU_PLAYERS]; u8 unk86[MAX_RFU_PLAYERS]; u8 unk8B[MAX_RFU_PLAYERS]; u16 unk90[MAX_RFU_PLAYERS]; u16 unk9A[MAX_RFU_PLAYERS]; - void **unkA4; - u8 fillerA8[0x8200]; + struct PokemonJump2 unkA4; struct PokemonJump1_MonInfo unk82A8[MAX_RFU_PLAYERS]; struct PokemonJump1_82E4 unk82E4[MAX_RFU_PLAYERS]; struct PokemonJump1_82E4 *unk83AC; @@ -115,33 +154,9 @@ struct PokemonJumpMons u16 unk2; }; -struct Unk802B078 -{ - u8 unk0; - u8 unk1; - u16 unk2; - u16 unk4; - u16 unk6; - int unk8; -}; - - -struct PokemonJump2 -{ - u8 filler0[0xE]; - u8 unkE; - u8 unkF; - u8 filler10[0x8198]; - struct Sprite *unk81A8[MAX_RFU_PLAYERS]; - struct Sprite *unk81BC[MAX_RFU_PLAYERS]; - struct Sprite *unk81D0[8]; - u8 filler81F0[0xC]; - u8 unk81FC[MAX_RFU_PLAYERS]; -}; - static void sub_802AA60(struct PokemonJump1 *); -void sub_802AA94(struct PokemonJump1 *); -void sub_802AB20(void); +static void sub_802AA94(struct PokemonJump1 *); +static void sub_802AB20(void); static void sub_802AB98(void); static s16 sub_802AC00(u16 species); static void sub_802AC2C(struct PokemonJump1_MonInfo *monInfo, struct Pokemon *mon); @@ -215,45 +230,85 @@ static void sub_802CB7C(struct Sprite *sprite); static void sub_802CC40(struct Sprite *sprite); static void sub_802CD08(struct Sprite *sprite); static void sub_802CDD4(struct Sprite *sprite); -void sub_802DC9C(u32); -void sub_802D074(void *); -void sub_802D0AC(void); -void sub_802D0C8(int); -int sub_802D0F0(void); -void sub_802D764(void); -bool32 sub_802D788(void); -void sub_802D7E8(u16, u16); -void sub_802D884(u16); -void sub_802D8FC(u16); -bool32 sub_802D974(void); -void sub_802DA14(void); -void sub_802DC80(int, s8); -void sub_802DD88(u8); -bool32 sub_802DA44(void); -void sub_802DD64(int); -s8 sub_802DA8C(void); -int sub_802DCCC(u8); -void sub_802DD74(u16); -void sub_802DDA0(u8); -int sub_802DDB8(int); -void sub_802DDCC(void); -void sub_802DDE0(void); -void sub_802DDF4(int); -int sub_802DE08(void); -void sub_802E0AC(struct PokemonJump1_MonInfo *); -bool32 sub_802E0D0(int, struct PokemonJump1_MonInfo *); -void sub_802E138(struct PokemonJump1_82E4 *, u8 *); -bool32 sub_802E1BC(struct PokemonJump1_82E4 *, struct Unk802B078 *); -void sub_802E234(struct PokemonJump1_82E4 *, u8 , u16); -bool32 sub_802E264(struct PokemonJump1_82E4 *, int, u8 *, u16 *); -bool32 sub_802E2D0(struct PokemonJump1_82E4 *, int); -int sub_802E354(int, u16, u16); -void sub_802E3A8(void); - -extern struct PokemonJump1 *gUnknown_02022CFC; -extern struct PokemonJump2 *gUnknown_02022D00; - -const struct PokemonJumpMons gPkmnJumpSpecies[] = +static void sub_802DC9C(int id); +static void sub_802D074(struct PokemonJump2 *); +static void sub_802D0BC(struct PokemonJump2 *); +static void sub_802D0AC(void); +static void sub_802D0C8(int); +static bool32 sub_802D0F0(void); +static void sub_802D764(void); +static bool32 sub_802D788(void); +static void sub_802D7E8(u16 itemId, u16 quantity); +static void sub_802D884(u16 itemId); +static void sub_802D8FC(u16 itemId); +static bool32 sub_802D974(void); +static void sub_802DA14(void); +static void sub_802DC80(u32 id, s16 y); +static void sub_802DD88(u8 multiplayerId); +static bool32 sub_802DA44(void); +static void sub_802DD64(int); +static s8 sub_802DA8C(void); +static int sub_802DCCC(u8 flags); +static void sub_802DD74(u16); +static void sub_802DDA0(u8 multiplayerId); +static int sub_802DDB8(int multiplayerId); +static void sub_802DDCC(void); +static void sub_802DDE0(void); +static void sub_802DDF4(int); +static int sub_802DE08(void); +static void sub_802E0AC(struct PokemonJump1_MonInfo *arg0); +static bool32 sub_802E0D0(int multiplayerId, struct PokemonJump1_MonInfo *arg0); +static void sub_802E138(struct PokemonJump1_82E4 *arg0, struct PokemonJump1Sub *arg1); +static bool32 sub_802E1BC(struct PokemonJump1_82E4 *arg0, struct PokemonJump1Sub *arg1); +static void sub_802E234(struct PokemonJump1_82E4 *arg0, u8 arg1, u16 arg2); +static bool32 sub_802E264(struct PokemonJump1_82E4 *arg0, int multiplayerId, u8 *arg2, u16 *arg3); +static bool32 sub_802E2D0(struct PokemonJump1_82E4 *arg0, int multiplayerId); +static bool32 sub_802E354(u32 jumpScore, u16 jumpsInRow, u16 excellentsInRow); +static void sub_802E3A8(void); +static void sub_802D12C(u8 taskId); +static void sub_802E00C(u8 arg0); +static void sub_802E090(u8 taskId); +static void sub_802D150(void); +static void sub_802DD08(void); +static void sub_802DB8C(void); +static void sub_802DBF8(void); +static void sub_802DE1C(void); +static void sub_802DFD4(void); +static void sub_802D108(void (*func)(void)); +static void sub_802DF70(bool32 arg0); +static u32 sub_802DA9C(u32 left, u32 top, u32 width, u32 height); +static void sub_802DB18(u16 left, u16 top, u8 cursorPos); +static void sub_802D150(void); +static void sub_802D2E4(void); +static void sub_802D350(void); +static void sub_802D3BC(void); +static void sub_802D448(void); +static void sub_802D4F4(void); +static void sub_802D598(void); +static void sub_802D5E4(void); +static void sub_802D72C(void); +static void sub_802D688(void); +static void sub_802E3E4(u8 taskId); +static void sub_802E6D0(u8 taskId); +static void sub_802EB98(u8 taskId); +static void sub_802E500(u16 windowId, int width); +static void TruncateToFirstWordOnly(u8 *str); +static void sub_802EF50(u16 tileTag, u16 palTag); +static u8 sub_802EFA8(u16 tileTag, u16 palTag, s16 x, s16 y, u8 subpriority); +static void sub_802EFFC(u16 tileTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 *spriteId1, s16 *spriteId2); +static bool32 sub_802EC98(u8 spriteId); +static bool32 sub_802EE30(u8 spriteId); +static void sub_802EDCC(u8 spriteId1, u8 spriteId2, u8 spriteId3); +static void sub_802EE5C(struct Sprite *sprite); +static void sub_802E83C(u8 taskId); +static void sub_802E8C8(u8 taskId); +static void sub_802EA50(u8 taskId); +static void sub_802EAB0(u8 taskId); + +EWRAM_DATA static struct PokemonJump1 *gUnknown_02022CFC = NULL; +EWRAM_DATA static struct PokemonJump2 *gUnknown_02022D00 = NULL; + +static const struct PokemonJumpMons gPkmnJumpSpecies[] = { { .species = SPECIES_BULBASAUR, .unk2 = 2, }, { .species = SPECIES_CHARMANDER, .unk2 = 1, }, @@ -357,47 +412,6 @@ const struct PokemonJumpMons gPkmnJumpSpecies[] = { .species = SPECIES_BAGON, .unk2 = 1, }, }; -bool32 (* const gUnknown_082FB5F4[])(void) = -{ - sub_802B248, - sub_802B2D4, - sub_802B368, - sub_802B3D4, - sub_802B4CC, - sub_802B5C8, - sub_802B664, - sub_802B6B8, - sub_802B720, -}; - -bool32 (* const gUnknown_082FB618[])(void) = -{ - sub_802B29C, - sub_802B31C, - sub_802B3B4, - sub_802B470, - sub_802B568, - sub_802B628, - sub_802B664, - sub_802B704, - sub_802B720, -}; - -extern const u16 gUnknown_082FB63C[]; -extern const u16 gUnknown_082FB64C[4]; -extern const u16 gUnknown_082FB654[]; -extern const s8 gUnknown_082FB65C[][48]; -extern const int gUnknown_082FB6EC[]; -extern const int gUnknown_082FB714[]; -extern const u16 gUnknown_082FB704[8]; -extern const struct CompressedSpriteSheet gUnknown_082FBE08[5]; -extern const struct SpritePalette gUnknown_082FBE30[2]; -extern const struct SpriteTemplate gUnknown_082FBE40; -extern const struct SpriteTemplate gUnknown_082FC00C; -extern const s16 gUnknown_082FBE58[]; -extern const s16 gUnknown_082FBEA8[8]; -extern const struct SpriteTemplate gUnknown_082FBEB8[4]; - void sub_802A9A8(u16 partyIndex, MainCallback callback) { u8 taskId; @@ -433,15 +447,15 @@ static void sub_802AA48(void) static void sub_802AA60(struct PokemonJump1 *arg0) { arg0->unk5 = GetLinkPlayerCount(); - arg0->unk70 = 5; - arg0->unk72 = 0; + arg0->unk70.unk0 = 5; + arg0->unk70.unk2 = 0; sub_802AB20(); sub_802AA94(arg0); if (arg0->unk5 == MAX_RFU_PLAYERS) sub_802E3A8(); } -void sub_802AA94(struct PokemonJump1 *arg0) +static void sub_802AA94(struct PokemonJump1 *arg0) { int i; @@ -462,9 +476,9 @@ void sub_802AA94(struct PokemonJump1 *arg0) arg0->unk46 = 0; arg0->unk49 = 0; arg0->unk48 = 1; - arg0->unk78 = 0; - arg0->unk71 = 0; - arg0->unk74 = 0; + arg0->unk70.unk8 = 0; + arg0->unk70.unk1 = 0; + arg0->unk70.unk4 = 0; arg0->unk60 = 1; arg0->unk4D = 0; arg0->unk68 = 0; @@ -481,7 +495,7 @@ void sub_802AA94(struct PokemonJump1 *arg0) } } -void sub_802AB20(void) +static void sub_802AB20(void) { int i, index; @@ -629,7 +643,7 @@ static void sub_802AE50(u8 arg0) { int i; - gUnknown_02022CFC->unk70 = arg0; + gUnknown_02022CFC->unk70.unk0 = arg0; gUnknown_02022CFC->unk8 = 0; gUnknown_02022CFC->unkA = 0; gUnknown_02022CFC->unk48 = 1; @@ -656,7 +670,7 @@ static void sub_802AEA4(void) gUnknown_02022CFC->unk82E4[i].unk12 = var0; } - if (gUnknown_02022CFC->unk82E4[i].unk18 && gUnknown_02022CFC->unk8B[i] == gUnknown_02022CFC->unk70) + if (gUnknown_02022CFC->unk82E4[i].unk18 && gUnknown_02022CFC->unk8B[i] == gUnknown_02022CFC->unk70.unk0) count++; } @@ -664,6 +678,19 @@ static void sub_802AEA4(void) gUnknown_02022CFC->unk49 = 1; } +static bool32 (* const gUnknown_082FB5F4[])(void) = +{ + sub_802B248, + sub_802B2D4, + sub_802B368, + sub_802B3D4, + sub_802B4CC, + sub_802B5C8, + sub_802B664, + sub_802B6B8, + sub_802B720, +}; + static void sub_802AF80(u8 taskId) { sub_802AEA4(); @@ -676,7 +703,7 @@ static void sub_802AF80(u8 taskId) if (gUnknown_02022CFC->unk48 == 1) { - if (!gUnknown_082FB5F4[gUnknown_02022CFC->unk70]()) + if (!gUnknown_082FB5F4[gUnknown_02022CFC->unk70.unk0]()) { gUnknown_02022CFC->unk48 = 0; gUnknown_02022CFC->unk82E4[gUnknown_02022CFC->unk6].unk18 = 1; @@ -701,7 +728,7 @@ static void sub_802B008(void) static void sub_802B044(u8 arg0) { - gUnknown_02022CFC->unk70 = arg0; + gUnknown_02022CFC->unk70.unk0 = arg0; gUnknown_02022CFC->unk8 = 0; gUnknown_02022CFC->unkA = 0; gUnknown_02022CFC->unk48 = 1; @@ -712,30 +739,30 @@ static void sub_802B078(void) { int i; u16 var0; - struct Unk802B078 sp0; + struct PokemonJump1Sub sp0; var0 = gUnknown_02022CFC->unk82E4[0].unk10; if (sub_802E1BC(gUnknown_02022CFC->unk82E4, &sp0)) { if (gUnknown_02022CFC->unk82E4[gUnknown_02022CFC->unk6].unk18 == 1 - && sp0.unk0 != gUnknown_02022CFC->unk70) + && sp0.unk0 != gUnknown_02022CFC->unk70.unk0) { sub_802B044(sp0.unk0); } - if (gUnknown_02022CFC->unk78 != sp0.unk8) + if (gUnknown_02022CFC->unk70.unk8 != sp0.unk8) { - gUnknown_02022CFC->unk78 = sp0.unk8; + gUnknown_02022CFC->unk70.unk8 = sp0.unk8; gUnknown_02022CFC->unk5C = 1; - gUnknown_02022CFC->unk71 = sp0.unk1; - if (gUnknown_02022CFC->unk71) + gUnknown_02022CFC->unk70.unk1 = sp0.unk1; + if (gUnknown_02022CFC->unk70.unk1) gUnknown_02022CFC->unk4D = 1; else gUnknown_02022CFC->unk4D = 0; } - gUnknown_02022CFC->unk72 = sp0.unk2; - gUnknown_02022CFC->unk74 = sp0.unk4; + gUnknown_02022CFC->unk70.unk2 = sp0.unk2; + gUnknown_02022CFC->unk70.unk4 = sp0.unk4; gUnknown_02022CFC->unk82E4[0].unk12 = var0; } @@ -750,12 +777,25 @@ static void sub_802B078(void) } } +static bool32 (* const gUnknown_082FB618[])(void) = +{ + sub_802B29C, + sub_802B31C, + sub_802B3B4, + sub_802B470, + sub_802B568, + sub_802B628, + sub_802B664, + sub_802B704, + sub_802B720, +}; + static void sub_802B194(u8 taskId) { sub_802B078(); if (gUnknown_02022CFC->unk48) { - if (!gUnknown_082FB618[gUnknown_02022CFC->unk70]()) + if (!gUnknown_082FB618[gUnknown_02022CFC->unk70.unk0]()) { gUnknown_02022CFC->unk48 = 0; gUnknown_02022CFC->unk82E4[gUnknown_02022CFC->unk6].unk18 = 1; @@ -770,7 +810,7 @@ static void sub_802B194(u8 taskId) static void sub_802B1FC(void) { if (!gUnknown_02022CFC->unk2C) - sub_802E234(&gUnknown_02022CFC->unk82E4[gUnknown_02022CFC->unk6], gUnknown_02022CFC->unk70, gUnknown_02022CFC->unk42); + sub_802E234(&gUnknown_02022CFC->unk82E4[gUnknown_02022CFC->unk6], gUnknown_02022CFC->unk70.unk0, gUnknown_02022CFC->unk42); if (gUnknown_02022CFC->unk30 != 0x1111) { @@ -790,7 +830,7 @@ static bool32 sub_802B248(void) case 1: if (!sub_802B7E0()) { - gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unk4A; + gUnknown_02022CFC->unk70.unk2 = gUnknown_02022CFC->unk4A; gUnknown_02022CFC->unk4C = 1; return FALSE; } @@ -806,7 +846,7 @@ static bool32 sub_802B29C(void) { case 0: sub_802AE14(0); - gUnknown_02022CFC->unk24 = gUnknown_02022CFC->unk72; + gUnknown_02022CFC->unk24 = gUnknown_02022CFC->unk70.unk2; gUnknown_02022CFC->unk8++; // fall through case 1: @@ -844,7 +884,7 @@ static bool32 sub_802B31C(void) case 0: sub_802C0E8(); sub_802AE14(0); - gUnknown_02022CFC->unk4A = gUnknown_02022CFC->unk72; + gUnknown_02022CFC->unk4A = gUnknown_02022CFC->unk70.unk2; gUnknown_02022CFC->unk8++; // fall through case 1: @@ -860,7 +900,7 @@ static bool32 sub_802B368(void) { if (!sub_802B8CC()) { - gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unk4A; + gUnknown_02022CFC->unk70.unk2 = gUnknown_02022CFC->unk4A; gUnknown_02022CFC->unk4C = 1; } else if (sub_802C538()) @@ -902,17 +942,17 @@ static bool32 sub_802B3D4(void) { if (sub_802C7BC()) { - gUnknown_02022CFC->unk72 = sub_802C7E0(); + gUnknown_02022CFC->unk70.unk2 = sub_802C7E0(); gUnknown_02022CFC->unk4C = 7; } - else if (gUnknown_02022CFC->unk74 >= 200) + else if (gUnknown_02022CFC->unk70.unk4 >= 200) { - gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unkE; + gUnknown_02022CFC->unk70.unk2 = gUnknown_02022CFC->unkE; gUnknown_02022CFC->unk4C = 8; } else { - gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unkE; + gUnknown_02022CFC->unk70.unk2 = gUnknown_02022CFC->unkE; gUnknown_02022CFC->unk4C = 4; } @@ -962,7 +1002,7 @@ static bool32 sub_802B4CC(void) case 1: if (!sub_802BB84()) { - sub_802E354(gUnknown_02022CFC->unk78, gUnknown_02022CFC->unk74, gUnknown_02022CFC->unk72); + sub_802E354(gUnknown_02022CFC->unk70.unk8, gUnknown_02022CFC->unk70.unk4, gUnknown_02022CFC->unk70.unk2); gUnknown_02022CFC->unk8++; } break; @@ -996,7 +1036,7 @@ static bool32 sub_802B568(void) case 1: if (!sub_802BB84()) { - sub_802E354(gUnknown_02022CFC->unk78, gUnknown_02022CFC->unk74, gUnknown_02022CFC->unk72); + sub_802E354(gUnknown_02022CFC->unk70.unk8, gUnknown_02022CFC->unk70.unk4, gUnknown_02022CFC->unk70.unk2); gUnknown_02022CFC->unk42 = gUnknown_02022CFC->unk45; return FALSE; } @@ -1019,7 +1059,7 @@ static bool32 sub_802B5C8(void) { sub_802AA94(gUnknown_02022CFC); gUnknown_02022CFC->unk24 = Random(); - gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unk24; + gUnknown_02022CFC->unk70.unk2 = gUnknown_02022CFC->unk24; gUnknown_02022CFC->unk4C = 0; return FALSE; } @@ -1082,7 +1122,7 @@ static bool32 sub_802B6B8(void) case 1: if (!sub_802BA58()) { - gUnknown_02022CFC->unk72 = gUnknown_02022CFC->unkE; + gUnknown_02022CFC->unk70.unk2 = gUnknown_02022CFC->unkE; gUnknown_02022CFC->unk4C = 8; return FALSE; } @@ -1106,7 +1146,7 @@ static bool32 sub_802B720(void) switch (gUnknown_02022CFC->unk8) { case 0: - sub_802E354(gUnknown_02022CFC->unk78, gUnknown_02022CFC->unk74, gUnknown_02022CFC->unk72); + sub_802E354(gUnknown_02022CFC->unk70.unk8, gUnknown_02022CFC->unk70.unk4, gUnknown_02022CFC->unk70.unk2); sub_802D0C8(5); gUnknown_02022CFC->unk8++; break; @@ -1145,8 +1185,6 @@ static bool32 sub_802B720(void) static bool32 sub_802B7E0(void) { - int var0; - switch (gUnknown_02022CFC->unkA) { case 0: @@ -1155,8 +1193,7 @@ static bool32 sub_802B7E0(void) gUnknown_02022CFC->unkA++; break; case 1: - var0 = sub_802D0F0(); - if (!var0) + if (!sub_802D0F0()) { sub_802DDF4(gUnknown_02022CFC->unk6); gUnknown_02022CFC->unk3C = 0; @@ -1278,7 +1315,7 @@ static bool32 sub_802B964(void) if (!sub_802D0F0()) { sub_802DDCC(); - gUnknown_02022CFC->unk71 = 0; + gUnknown_02022CFC->unk70.unk1 = 0; sub_802C114(); gUnknown_02022CFC->unkA++; return FALSE; @@ -1296,7 +1333,7 @@ static bool32 sub_802BA58(void) switch (gUnknown_02022CFC->unkA) { case 0: - sub_802C808(gUnknown_02022CFC->unk72, &gUnknown_02022CFC->unk3E, &gUnknown_02022CFC->unk40); + sub_802C808(gUnknown_02022CFC->unk70.unk2, &gUnknown_02022CFC->unk3E, &gUnknown_02022CFC->unk40); sub_802D7E8(gUnknown_02022CFC->unk3E, gUnknown_02022CFC->unk40); gUnknown_02022CFC->unkA++; break; @@ -1576,6 +1613,9 @@ static int sub_802BF48(void) return result; } +static const u16 gUnknown_082FB63C[] = {0x1a, 0x1f, 0x24, 0x29, 0x2e, 0x33, 0x38, 0x3d}; +static const u16 gUnknown_082FB64C[] = {0, 1, 1, 2}; + static void sub_802BF7C(void) { int var0; @@ -1694,21 +1734,23 @@ static void sub_802C1BC(void) gUnknown_02022CFC->unk83AC->unk10 = 0; } +static const u16 gUnknown_082FB654[] = {SE_REGI, SE_REAPOKE, SE_W234, SE_RG_EXCELLENT}; + static void sub_802C1DC(void) { if (gUnknown_02022CFC->unk5C) { - sub_802DD64(gUnknown_02022CFC->unk78); + sub_802DD64(gUnknown_02022CFC->unk70.unk8); gUnknown_02022CFC->unk5C = 0; if (gUnknown_02022CFC->unk4D) { - int index = sub_802DCCC(gUnknown_02022CFC->unk71); + int index = sub_802DCCC(gUnknown_02022CFC->unk70.unk1); PlaySE(gUnknown_082FB654[index - 2]); gUnknown_02022CFC->unk4D = 0; } } - sub_802DD74(gUnknown_02022CFC->unk74); + sub_802DD74(gUnknown_02022CFC->unk70.unk4); sub_802C280(); sub_802C240(); } @@ -1774,6 +1816,19 @@ static void sub_802C280(void) PlaySE(SE_DANSA); } +static const s8 gUnknown_082FB65C[][48] = +{ + {-3, -6, -8, -10, -13, -15, -17, -19, -21, -23, -25, -27, -28, -29, -30, -30, -30, -28, -27, + -26, -25, -23, -22, -20, -18, -17, -15, -13, -11, -8, -6, -4, -1}, + + {-3, -6, -9, -11, -14, -16, -18, -20, -22, -24, -26, -28, -29, -30, -30, -28, -26, -24, -22, + -20, -18, -16, -14, -11, -9, -6, -4, -1}, + + {-3, -6, -9, -11, -13, -15, -17, -19, -21, -23, -25, -27, -28, -29, -30, -30, -30, -30, -29, + -29, -28, -28, -27, -27, -26, -25, -24, -22, -20, -18, -16, -14, + -12, -11, -9, -6, -4, -1}, +}; + static void sub_802C398(int multiplayerId) { int var0; @@ -1813,7 +1868,7 @@ static void sub_802C398(int multiplayerId) sub_802DC80(multiplayerId, var1); if (!var1 && multiplayerId == gUnknown_02022CFC->unk6) sub_802C1BC(); - + player->unk0 = var1; } @@ -1826,7 +1881,7 @@ static void sub_802C43C(void) sub_802C780(); gUnknown_02022CFC->unk54 = 0; gUnknown_02022CFC->unk58 = 1; - gUnknown_02022CFC->unk71 = 0; + gUnknown_02022CFC->unk70.unk1 = 0; } else { @@ -1849,9 +1904,9 @@ static void sub_802C43C(void) sub_802C780(); gUnknown_02022CFC->unk54 = 0; gUnknown_02022CFC->unk58 = 1; - gUnknown_02022CFC->unk71 = 0; - if (gUnknown_02022CFC->unk74 < 9999) - gUnknown_02022CFC->unk74++; + gUnknown_02022CFC->unk70.unk1 = 0; + if (gUnknown_02022CFC->unk70.unk4 < 9999) + gUnknown_02022CFC->unk70.unk4++; sub_802C688(10); sub_802AE14(3); @@ -1955,10 +2010,10 @@ static bool32 sub_802C650(void) static void sub_802C688(int arg0) { - gUnknown_02022CFC->unk78 += arg0; + gUnknown_02022CFC->unk70.unk8 += arg0; gUnknown_02022CFC->unk5C = 1; - if (gUnknown_02022CFC->unk78 >= 99990) - gUnknown_02022CFC->unk78 = 99990; + if (gUnknown_02022CFC->unk70.unk8 >= 99990) + gUnknown_02022CFC->unk70.unk8 = 99990; } static int sub_802C6B0(void) @@ -2003,7 +2058,7 @@ static int sub_802C73C(u8 *arg0) } } - gUnknown_02022CFC->unk71 = flags; + gUnknown_02022CFC->unk70.unk1 = flags; if (flags) gUnknown_02022CFC->unk4D = 1; @@ -2015,6 +2070,8 @@ static void sub_802C780(void) gUnknown_02022CFC->unk44 = 0; } +static const int gUnknown_082FB6EC[] = {0, 0, 0x32, 0x64, 0xc8, 0x1f4}; + static int sub_802C790(int arg0) { return gUnknown_082FB6EC[arg0]; @@ -2026,9 +2083,19 @@ static void sub_802C7A0(u16 arg0) gUnknown_02022CFC->unkE = arg0; } +static const u16 gUnknown_082FB704[] = {0x8a, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93}; +static const u32 gUnknown_082FB714[][2] = +{ + {0x1388, 1}, + {0x1f40, 2}, + {0x2ee0, 3}, + {0x3e80, 4}, + {0x4e20, 5}, +}; + static bool32 sub_802C7BC(void) { - if (gUnknown_02022CFC->unk78 >= gUnknown_082FB714[0]) + if (gUnknown_02022CFC->unk70.unk8 >= gUnknown_082FB714[0][0]) return TRUE; else return FALSE; @@ -2053,6 +2120,22 @@ static u16 sub_802C818(void) return gUnknown_082FB704[index]; } +#ifdef NONMATCHING +// Impossible to match. +static u16 sub_802C838(void) +{ + u32 val, i; + + val = 0; + for (i = 0; i < 5; val = gUnknown_082FB714[i][1], i++) + { + if (gUnknown_02022CFC->unk70.unk8 < gUnknown_082FB714[i][0]) + break; + } + + return val; +} +#else NAKED static u16 sub_802C838(void) { @@ -2091,31 +2174,32 @@ _0802C874:\n\ pop {r1}\n\ bx r1"); } +#endif static u16 sub_802C880(u16 item, u16 quantity) { while (quantity && !CheckBagHasSpace(item, quantity)) quantity--; - + return quantity; } -u16 sub_802C8AC(void) +static u16 sub_802C8AC(void) { return GetLinkPlayerCount(); } -u16 sub_802C8BC(void) +static u16 sub_802C8BC(void) { return gUnknown_02022CFC->unk6; } -struct PokemonJump1_MonInfo *sub_802C8C8(u8 multiplayerId) +static struct PokemonJump1_MonInfo *sub_802C8C8(u8 multiplayerId) { return &gUnknown_02022CFC->unk82A8[multiplayerId]; } -u8 *sub_802C8E8(u8 multiplayerId) +static u8 *sub_802C8E8(u8 multiplayerId) { return gUnknown_02022CFC->unk82E4[multiplayerId].unk1C; } @@ -2145,13 +2229,331 @@ void sub_802C920(void) gSpecialVar_Result = 0; } -void sub_802C974(struct PokemonJump2 *arg0) +// Large group of data. +static const u16 gPkmnJumpPal1[] = INCBIN_U16("graphics/link_games/pkmnjump_pal1.gbapal"); +static const u16 gPkmnJumpPal2[] = INCBIN_U16("graphics/link_games/pkmnjump_pal2.gbapal"); + +static const u32 gPkmnJumpRopeGfx1[] = INCBIN_U32("graphics/link_games/pkmnjump_rope1.4bpp.lz"); +static const u32 gPkmnJumpRopeGfx2[] = INCBIN_U32("graphics/link_games/pkmnjump_rope2.4bpp.lz"); +static const u32 gPkmnJumpRopeGfx3[] = INCBIN_U32("graphics/link_games/pkmnjump_rope3.4bpp.lz"); +static const u32 gPkmnJumpRopeGfx4[] = INCBIN_U32("graphics/link_games/pkmnjump_rope4.4bpp.lz"); + +static const u32 gPkmnJumpStarGfx[] = INCBIN_U32("graphics/link_games/pkmnjump_star.4bpp.lz"); + +static const struct CompressedSpriteSheet gUnknown_082FBE08[] = +{ + {gPkmnJumpRopeGfx1, 0x600, 5}, + {gPkmnJumpRopeGfx2, 0x0c00, 6}, + {gPkmnJumpRopeGfx3, 0x0600, 7}, + {gPkmnJumpRopeGfx4, 0x0600, 8}, + {gPkmnJumpStarGfx, 0x0200, 10}, +}; + +static const struct SpritePalette gUnknown_082FBE30[] = +{ + {gPkmnJumpPal1, 5}, + {gPkmnJumpPal2, 6}, +}; + +// Forward declarations. +static const struct OamData sOamData_82FBEC8; +static const struct SpriteTemplate gUnknown_082FBF78; +static const struct SpriteTemplate gUnknown_082FBF90; +static const struct SpriteTemplate gUnknown_082FBFA8; +static const struct SpriteTemplate gUnknown_082FBFC0; + +static const struct SpriteTemplate gUnknown_082FBE40 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_82FBEC8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const s16 gUnknown_082FBE58[][10] = +{ + {0x60, 0x60, 0x60, 0x72, 0x78, 0x78, 0x78, 0x72, 0x60, 0x60}, + {0x46, 0x50, 0x60, 0x72, 0x78, 0x80, 0x78, 0x72, 0x60, 0x50}, + {0x32, 0x48, 0x60, 0x72, 0x80, 0x88, 0x80, 0x72, 0x60, 0x48}, + {0x2a, 0x48, 0x60, 0x72, 0x80, 0x88, 0x80, 0x72, 0x60, 0x48}, +}; + +static const s16 gUnknown_082FBEA8[] = {0x10, 0x28, 0x48, 0x68, 0x88, 0xa8, 0xc8, 0xe0}; + +static const struct SpriteTemplate *const gUnknown_082FBEB8[] = +{ + &gUnknown_082FBF78, + &gUnknown_082FBF90, + &gUnknown_082FBFA8, + &gUnknown_082FBFC0, +}; + +static const struct OamData sOamData_82FBEC8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData sOamData_82FBED0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData sOamData_82FBED8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData sOamData_82FBEE0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_82FBEE8[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBEF0[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBEF8[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF00[] = +{ + ANIMCMD_FRAME(24, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF08[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF10[] = +{ + ANIMCMD_FRAME(40, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF18[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF20[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF28[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF30[] = +{ + ANIMCMD_FRAME(48, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF38[] = +{ + ANIMCMD_FRAME(64, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBF40[] = +{ + ANIMCMD_FRAME(80, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_82FBF48[] = +{ + sSpriteAnim_82FBEE8, + sSpriteAnim_82FBEF0, + sSpriteAnim_82FBEF8, + sSpriteAnim_82FBF00, + sSpriteAnim_82FBF08, + sSpriteAnim_82FBF10 +}; + +static const union AnimCmd *const sSpriteAnimTable_82FBF60[] = +{ + sSpriteAnim_82FBF18, + sSpriteAnim_82FBF20, + sSpriteAnim_82FBF28, + sSpriteAnim_82FBF30, + sSpriteAnim_82FBF38, + sSpriteAnim_82FBF40 +}; + +static const struct SpriteTemplate gUnknown_082FBF78 = +{ + .tileTag = 5, + .paletteTag = 5, + .oam = &sOamData_82FBED0, + .anims = sSpriteAnimTable_82FBF48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate gUnknown_082FBF90 = +{ + .tileTag = 6, + .paletteTag = 5, + .oam = &sOamData_82FBED8, + .anims = sSpriteAnimTable_82FBF60, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate gUnknown_082FBFA8 = +{ + .tileTag = 7, + .paletteTag = 5, + .oam = &sOamData_82FBEE0, + .anims = sSpriteAnimTable_82FBF48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate gUnknown_082FBFC0 = +{ + .tileTag = 8, + .paletteTag = 5, + .oam = &sOamData_82FBEE0, + .anims = sSpriteAnimTable_82FBF48, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct OamData sOamData_82FBFD8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_82FBFE0[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FBFE8[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(8, 4), + ANIMCMD_FRAME(12, 4), + ANIMCMD_LOOP(1), + ANIMCMD_FRAME(0, 4), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_82FC004[] = +{ + sSpriteAnim_82FBFE0, + sSpriteAnim_82FBFE8 +}; + +static const struct SpriteTemplate gUnknown_082FC00C = +{ + .tileTag = 10, + .paletteTag = 5, + .oam = &sOamData_82FBFD8, + .anims = sSpriteAnimTable_82FC004, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +// Back to code +static void sub_802C974(struct PokemonJump2 *arg0) { int i; for (i = 0; i < ARRAY_COUNT(gUnknown_082FBE08); i++) LoadCompressedSpriteSheet(&gUnknown_082FBE08[i]); - + for (i = 0; i < ARRAY_COUNT(gUnknown_082FBE30); i++) LoadSpritePalette(&gUnknown_082FBE30[i]); @@ -2166,7 +2568,7 @@ static void sub_802C9BC(struct Sprite *sprite) sprite->data[i] = 0; } -void sub_802C9D4(struct PokemonJump2 *arg0, struct PokemonJump1_MonInfo *jumpMon, u16 x, u16 y, u8 multiplayerId) +static void sub_802C9D4(struct PokemonJump2 *arg0, struct PokemonJump1_MonInfo *jumpMon, s16 x, s16 y, u8 multiplayerId) { struct SpriteTemplate spriteTemplate; struct SpriteSheet spriteSheet; @@ -2197,7 +2599,7 @@ void sub_802C9D4(struct PokemonJump2 *arg0, struct PokemonJump1_MonInfo *jumpMon spriteSheet.size = 0x800; LoadSpriteSheet(&spriteSheet); - spritePalette.data = GetFrontSpritePalFromSpeciesAndPersonality(jumpMon->species, jumpMon->otId, jumpMon->personality); + spritePalette.data = GetMonSpritePalFromSpeciesAndPersonality(jumpMon->species, jumpMon->otId, jumpMon->personality); spritePalette.tag = multiplayerId; LoadCompressedSpritePalette(&spritePalette); @@ -2218,7 +2620,7 @@ void sub_802C9D4(struct PokemonJump2 *arg0, struct PokemonJump1_MonInfo *jumpMon arg0->unk81A8[multiplayerId] = NULL; } -void sub_802CB14(struct PokemonJump2 *arg0, int multiplayerId) +static void sub_802CB14(struct PokemonJump2 *arg0, int multiplayerId) { sub_802C9BC(arg0->unk81BC[multiplayerId]); arg0->unk81BC[multiplayerId]->data[7] = arg0->unk81A8[multiplayerId] - gSprites; @@ -2258,14 +2660,14 @@ static void sub_802CB7C(struct Sprite *sprite) } } -void sub_802CBF0(struct PokemonJump2 *arg0, int multiplayerId) +static void sub_802CBF0(struct PokemonJump2 *arg0, int multiplayerId) { arg0->unk81A8[multiplayerId]->callback = sub_802CC40; arg0->unk81A8[multiplayerId]->pos2.y = 0; sub_802C9BC(arg0->unk81A8[multiplayerId]); } -bool32 sub_802CC18(struct PokemonJump2 *arg0, int multiplayerId) +static bool32 sub_802CC18(struct PokemonJump2 *arg0, int multiplayerId) { return arg0->unk81A8[multiplayerId]->callback == sub_802CC40; } @@ -2289,13 +2691,13 @@ static void sub_802CC40(struct Sprite *sprite) } } -void sub_802CC88(struct PokemonJump2 *arg0, int multiplayerId) +static void sub_802CC88(struct PokemonJump2 *arg0, int multiplayerId) { sub_802C9BC(arg0->unk81A8[multiplayerId]); arg0->unk81A8[multiplayerId]->callback = sub_802CD08; } -void sub_802CCB0(struct PokemonJump2 *arg0) +static void sub_802CCB0(struct PokemonJump2 *arg0) { int i; u16 numPlayers = sub_802C8AC(); @@ -2319,7 +2721,7 @@ static void sub_802CD08(struct Sprite *sprite) } } -void sub_802CD3C(struct PokemonJump2 *arg0) +static void sub_802CD3C(struct PokemonJump2 *arg0) { int i; u16 numPlayers = sub_802C8AC(); @@ -2327,13 +2729,13 @@ void sub_802CD3C(struct PokemonJump2 *arg0) arg0->unk81A8[i]->subpriority = arg0->unk81FC[i]; } -void sub_802CD70(struct PokemonJump2 *arg0, int multiplayerId) +static void sub_802CD70(struct PokemonJump2 *arg0, int multiplayerId) { sub_802C9BC(arg0->unk81A8[multiplayerId]); arg0->unk81A8[multiplayerId]->callback = sub_802CDD4; } -bool32 sub_802CD98(struct PokemonJump2 *arg0) +static bool32 sub_802CD98(struct PokemonJump2 *arg0) { int i; u16 numPlayers = sub_802C8AC(); @@ -2372,7 +2774,7 @@ static void sub_802CDD4(struct Sprite *sprite) } } -void sub_802CE48(struct PokemonJump2 *arg0, s16 x, s16 y, u8 multiplayerId) +static void sub_802CE48(struct PokemonJump2 *arg0, s16 x, s16 y, u8 multiplayerId) { u8 spriteId = CreateSprite(&gUnknown_082FC00C, x, y, 1); if (spriteId != MAX_SPRITES) @@ -2382,25 +2784,1853 @@ void sub_802CE48(struct PokemonJump2 *arg0, s16 x, s16 y, u8 multiplayerId) } } -// void sub_802CE9C(struct PokemonJump2 *arg0) -// { -// int i; -// int count; -// u8 spriteId; - -// count = 0; -// for (i = 0; i < 4; i++) -// { -// spriteId = CreateSprite(&gUnknown_082FBEB8[i], gUnknown_082FBEA8[count], gUnknown_082FBE58[i * 10], 2); -// arg0->unk81D0[count] = &gSprites[spriteId]; -// count++; -// } - -// for (i = 0; i < 4; i++) -// { -// spriteId = CreateSprite(&gUnknown_082FBEB8[i], gUnknown_082FBEA8[count], gUnknown_082FBE58[i * 10], 2); -// arg0->unk81D0[count] = &gSprites[spriteId]; -// arg0->unk81D0[count]->hFlip = 1; -// count++; -// } -// } +static void sub_802CE9C(struct PokemonJump2 *arg0) +{ + int i; + int count; + u8 spriteId; + + count = 0; + for (i = 0; i < 4; i++) + { + spriteId = CreateSprite(gUnknown_082FBEB8[i], gUnknown_082FBEA8[count], gUnknown_082FBE58[i][0], 2); + arg0->unk81D0[count] = &gSprites[spriteId]; + count++; + } + + for (i = 3; i >= 0; i--) + { + spriteId = CreateSprite(gUnknown_082FBEB8[i], gUnknown_082FBEA8[count], gUnknown_082FBE58[i][0], 2); + arg0->unk81D0[count] = &gSprites[spriteId]; + arg0->unk81D0[count]->hFlip = 1; + count++; + } +} + +static void sub_802CF50(struct PokemonJump2 *arg0, int arg1) +{ + int i, count, palNum; + int priority; + + if (arg1 > 5) + { + arg1 = 10 - arg1; + priority = 3; + palNum = arg0->unkF; + } + else + { + priority = 2; + palNum = arg0->unkE; + } + + count = 0; + for (i = 0; i < 4; i++) + { + arg0->unk81D0[count]->pos1.y = gUnknown_082FBE58[i][arg1]; + arg0->unk81D0[count]->oam.priority = priority; + arg0->unk81D0[count]->oam.paletteNum = palNum; + StartSpriteAnim(arg0->unk81D0[count], arg1); + count++; + } + + for (i = 3; i >= 0; i--) + { + arg0->unk81D0[count]->pos1.y = gUnknown_082FBE58[i][arg1]; + arg0->unk81D0[count]->oam.priority = priority; + arg0->unk81D0[count]->oam.paletteNum = palNum; + StartSpriteAnim(arg0->unk81D0[count], arg1); + count++; + } +} + +static void sub_802D044(struct PokemonJump2 *arg0) +{ + sub_802EB24(9, 7, 120, 80, 0); + sub_802CD3C(arg0); +} + +static bool32 sub_802D068(void) +{ + return sub_802EB84(); +} + +static void sub_802D074(struct PokemonJump2 *arg0) +{ + u8 taskId; + + gUnknown_02022D00 = arg0; + sub_802D0BC(gUnknown_02022D00); + taskId = CreateTask(sub_802D12C, 3); + gUnknown_02022D00->unk6 = taskId; + SetWordTaskArg(gUnknown_02022D00->unk6, 2, (u32) gUnknown_02022D00); + sub_802D108(sub_802D150); +} + +static void sub_802D0AC(void) +{ + FreeAllWindowBuffers(); + sub_8034CC8(); +} + +static void sub_802D0BC(struct PokemonJump2 *arg0) +{ + arg0->unk4 = 0; + arg0->unk0 = 0; + arg0->unk12 = 0xFF; +} + +// Gfx +static const u16 gPkmnJumpPal3[] = INCBIN_U16("graphics/link_games/pkmnjump_pal3.gbapal"); + +static const u16 gPkmnJumpBgPal[] = INCBIN_U16("graphics/link_games/pkmnjump_bg.gbapal"); +static const u32 gPkmnJumpBgGfx[] = INCBIN_U32("graphics/link_games/pkmnjump_bg.4bpp.lz"); +static const u32 gPkmnJumpBgTilemap[] = INCBIN_U32("graphics/link_games/pkmnjump_bg.bin.lz"); + +static const u16 gPkmnJumpVenusaurPal[] = INCBIN_U16("graphics/link_games/pkmnjump_venusaur.gbapal"); +static const u32 gPkmnJumpVenusaurGfx[] = INCBIN_U32("graphics/link_games/pkmnjump_venusaur.4bpp.lz"); +static const u32 gPkmnJumpVenusaurTilemap[] = INCBIN_U32("graphics/link_games/pkmnjump_venusaur.bin.lz"); + +static const u16 gPkmnJumpResultsPal[] = INCBIN_U16("graphics/link_games/pkmnjump_results.gbapal"); +static const u32 gPkmnJumpResultsGfx[] = INCBIN_U32("graphics/link_games/pkmnjump_results.4bpp.lz"); +static const u32 gPkmnJumpResultsTilemap[] = INCBIN_U32("graphics/link_games/pkmnjump_results.bin.lz"); + +static const struct BgTemplate gUnknown_082FE164[] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 27, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 30, + .screenSize = 2, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 2, + .mapBaseIndex = 12, + .screenSize = 3, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, +}; + +static const struct WindowTemplate gUnknown_082FE174[] = +{ + { + .bg = 0, + .tilemapLeft = 19, + .tilemapTop = 0, + .width = 6, + .height = 2, + .paletteNum = 2, + .baseBlock = 0x13, + }, + { + .bg = 0, + .tilemapLeft = 8, + .tilemapTop = 0, + .width = 6, + .height = 2, + .paletteNum = 2, + .baseBlock = 0x1F, + }, + DUMMY_WIN_TEMPLATE, +}; + +struct +{ + int id; + void (*func)(void); +} static const gUnknown_082FE18C[] = +{ + {0x00, sub_802D150}, + {0x01, sub_802D2E4}, + {0x02, sub_802D350}, + {0x03, sub_802D3BC}, + {0x04, sub_802D448}, + {0x05, sub_802D4F4}, + {0x06, sub_802D598}, + {0x07, sub_802D5E4}, + {0x09, sub_802D72C}, + {0x08, sub_802D688}, +}; + +static void sub_802D0C8(int arg0) +{ + int i; + + for (i = 0; i < ARRAY_COUNT(gUnknown_082FE18C); i++) + { + if (gUnknown_082FE18C[i].id == arg0) + sub_802D108(gUnknown_082FE18C[i].func); + } +} + +static bool32 sub_802D0F0(void) +{ + return (gUnknown_02022D00->unk0 != 1); +} + +static void sub_802D108(void (*func)(void)) +{ + SetWordTaskArg(gUnknown_02022D00->unk6, 0, (u32) func); + gUnknown_02022D00->unk4 = 0; + gUnknown_02022D00->unk0 = 0; +} + +static void sub_802D12C(u8 taskId) +{ + if (!gUnknown_02022D00->unk0) + { + void (*func)(void) = (void *)(GetWordTaskArg(taskId, 0)); + + func(); + } +} + +static void sub_802D150(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_082FE164, ARRAY_COUNT(gUnknown_082FE164)); + InitWindows(gUnknown_082FE174); + reset_temp_tile_data_buffers(); + sub_802C974(gUnknown_02022D00); + sub_802DD08(); + LoadPalette(gPkmnJumpBgPal, 0, 0x20); + decompress_and_copy_tile_data_to_vram(3, gPkmnJumpBgGfx, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(3, gPkmnJumpBgTilemap, 0, 0, 1); + LoadPalette(gPkmnJumpVenusaurPal, 0x30, 0x20); + decompress_and_copy_tile_data_to_vram(2, gPkmnJumpVenusaurGfx, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(2, gPkmnJumpVenusaurTilemap, 0, 0, 1); + LoadPalette(gPkmnJumpResultsPal, 0x10, 0x20); + decompress_and_copy_tile_data_to_vram(1, gPkmnJumpResultsGfx, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(1, gPkmnJumpResultsTilemap, 0, 0, 1); + LoadPalette(gPkmnJumpPal3, 0x20, 0x20); + SetBgTilemapBuffer(0, gUnknown_02022D00->tilemapBuffer); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); + sub_802DB8C(); + sub_802DD64(0); + sub_8098C6C(0, 1, 0xE0); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(1); + ResetBgPositions(); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!free_temp_tile_data_buffers_if_possible()) + { + sub_802DBF8(); + sub_802CE9C(gUnknown_02022D00); + sub_802CF50(gUnknown_02022D00, 6); + ShowBg(3); + ShowBg(0); + ShowBg(2); + HideBg(1); + gUnknown_02022D00->unk4++; + } + break; + case 2: + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D2E4(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + sub_802DE1C(); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_802DF70(FALSE); + gUnknown_02022D00->unk4++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_802DFD4(); + gUnknown_02022D00->unk4++; + } + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D350(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + sub_802DE1C(); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_802DF70(TRUE); + gUnknown_02022D00->unk4++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_802DFD4(); + gUnknown_02022D00->unk4++; + } + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D3BC(void) +{ + int i, numPlayers; + + numPlayers = sub_802C8AC(); + switch (gUnknown_02022D00->unk4) + { + case 0: + for (i = 0; i < numPlayers; i++) + ClearWindowTilemap(gUnknown_02022D00->unk1C[i]); + + CopyBgTilemapBufferToVram(0); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + for (i = 0; i < numPlayers; i++) + RemoveWindow(gUnknown_02022D00->unk1C[i]); + + gUnknown_02022D00->unk0 = 1; + } + break; + } +} + +static void sub_802D448(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + gUnknown_02022D00->unk12 = sub_802DA9C(1, 8, 20, 2); + AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gText_WantToPlayAgain2, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_02022D00->unk12, 2); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022D00->unk12); + DrawTextBorderOuter(gUnknown_02022D00->unk12, 1, 14); + sub_802DB18(23, 7, 0); + CopyBgTilemapBufferToVram(0); + gUnknown_02022D00->unk4++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D4F4(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + gUnknown_02022D00->unk12 = sub_802DA9C(2, 7, 26, 4); + AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gText_SavingDontTurnOffPower, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_02022D00->unk12, 2); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022D00->unk12); + DrawTextBorderOuter(gUnknown_02022D00->unk12, 1, 14); + CopyBgTilemapBufferToVram(0); + gUnknown_02022D00->unk4++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D598(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + sub_802DA14(); + sub_8198C78(); + CopyBgTilemapBufferToVram(0); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!sub_802DA44() && !IsDma3ManagerBusyWithBgCopy()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D5E4(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + gUnknown_02022D00->unk12 = sub_802DA9C(2, 8, 22, 4); + AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gText_SomeoneDroppedOut2, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_02022D00->unk12, 2); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022D00->unk12); + DrawTextBorderOuter(gUnknown_02022D00->unk12, 1, 14); + CopyBgTilemapBufferToVram(0); + gUnknown_02022D00->unk4++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D688(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + gUnknown_02022D00->unk12 = sub_802DA9C(7, 10, 16, 2); + AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gText_CommunicationStandby4, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_02022D00->unk12, 2); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022D00->unk12); + DrawTextBorderOuter(gUnknown_02022D00->unk12, 1, 14); + CopyBgTilemapBufferToVram(0); + gUnknown_02022D00->unk4++; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D72C(void) +{ + switch (gUnknown_02022D00->unk4) + { + case 0: + sub_802D044(gUnknown_02022D00); + gUnknown_02022D00->unk4++; + break; + case 1: + if (!sub_802D068()) + gUnknown_02022D00->unk0 = 1; + break; + } +} + +static void sub_802D764(void) +{ + gUnknown_02022D00->unkA = 0; + gUnknown_02022D00->unkB = 0; + gUnknown_02022D00->unkC = 6; + sub_802DC9C(gUnknown_02022D00->unkC); +} + +static bool32 sub_802D788(void) +{ + switch (gUnknown_02022D00->unkA) + { + case 0: + gUnknown_02022D00->unkB++; + if (gUnknown_02022D00->unkB > 10) + { + gUnknown_02022D00->unkB = 0; + gUnknown_02022D00->unkC++; + if (gUnknown_02022D00->unkC >= 10) + { + gUnknown_02022D00->unkC = 0; + gUnknown_02022D00->unkA++; + } + } + sub_802DC9C(gUnknown_02022D00->unkC); + if (gUnknown_02022D00->unkC != 7) + break; + case 1: + return FALSE; + } + + return TRUE; +} + +static void sub_802D7E8(u16 itemId, u16 quantity) +{ + CopyItemNameHandlePlural(itemId, gUnknown_02022D00->txtBuff[0], quantity); + ConvertIntToDecimalStringN(gUnknown_02022D00->txtBuff[1], quantity, STR_CONV_MODE_LEFT_ALIGN, 1); + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gUnknown_02022D00->txtBuff[0]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_02022D00->txtBuff[1]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_02022D00->strBuff, gText_AwesomeWonF701F700); + gUnknown_02022D00->unk12 = sub_802DA9C(4, 8, 22, 4); + AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gUnknown_02022D00->strBuff, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_02022D00->unk12, 2); + gUnknown_02022D00->unk14 = MUS_FANFA1; + gUnknown_02022D00->unkD = 0; +} + +static void sub_802D884(u16 itemId) +{ + CopyItemName(itemId, gUnknown_02022D00->txtBuff[0]); + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gUnknown_02022D00->txtBuff[0]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_02022D00->strBuff, gText_FilledStorageSpace2); + gUnknown_02022D00->unk12 = sub_802DA9C(4, 8, 22, 4); + AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gUnknown_02022D00->strBuff, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_02022D00->unk12, 2); + gUnknown_02022D00->unk14 = 0; + gUnknown_02022D00->unkD = 0; +} + +static void sub_802D8FC(u16 itemId) +{ + CopyItemName(itemId, gUnknown_02022D00->txtBuff[0]); + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gUnknown_02022D00->txtBuff[0]); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_02022D00->strBuff, gText_CantHoldMore); + gUnknown_02022D00->unk12 = sub_802DA9C(4, 9, 22, 2); + AddTextPrinterParameterized(gUnknown_02022D00->unk12, 1, gUnknown_02022D00->strBuff, 0, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(gUnknown_02022D00->unk12, 2); + gUnknown_02022D00->unk14 = 0; + gUnknown_02022D00->unkD = 0; +} + +static bool32 sub_802D974(void) +{ + switch (gUnknown_02022D00->unkD) + { + case 0: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PutWindowTilemap(gUnknown_02022D00->unk12); + DrawTextBorderOuter(gUnknown_02022D00->unk12, 1, 14); + CopyBgTilemapBufferToVram(0); + gUnknown_02022D00->unkD++; + } + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + break; + if (gUnknown_02022D00->unk14 == 0) + { + gUnknown_02022D00->unkD += 2; + return FALSE; + } + PlayFanfare(gUnknown_02022D00->unk14); + gUnknown_02022D00->unkD++; + case 2: + if (!IsFanfareTaskInactive()) + break; + gUnknown_02022D00->unkD++; + case 3: + return FALSE; + } + + return TRUE; +} + +static void sub_802DA14(void) +{ + if (gUnknown_02022D00->unk12 != 0xFF) + { + rbox_fill_rectangle(gUnknown_02022D00->unk12); + CopyWindowToVram(gUnknown_02022D00->unk12, 1); + gUnknown_02022D00->unkD = 0; + } +} + +// Can't match this without the ugly GOTO, oh well. +static bool32 sub_802DA44(void) +{ + if (gUnknown_02022D00->unk12 == 0xFF) + { + RET_FALSE: + return FALSE; + } + + if (gUnknown_02022D00->unkD == 0) + { + if (!IsDma3ManagerBusyWithBgCopy()) + { + RemoveWindow(gUnknown_02022D00->unk12); + gUnknown_02022D00->unk12 = 0xFF; + gUnknown_02022D00->unkD++; + goto RET_FALSE; + } + } + else if (gUnknown_02022D00->unkD == 1) + goto RET_FALSE; + + return TRUE; +} + +static s8 sub_802DA8C(void) +{ + return Menu_ProcessInputNoWrapClearOnChoose(); +} + +static u32 sub_802DA9C(u32 left, u32 top, u32 width, u32 height) +{ + u32 windowId; + struct WindowTemplate window; + + window.bg = 0; + window.tilemapLeft = left; + window.tilemapTop = top; + window.width = width; + window.height = height; + window.paletteNum = 0xF; + window.baseBlock = 0x43; + + windowId = AddWindow(&window); + FillWindowPixelBuffer(windowId, 0x11); + return windowId; +} + +static void sub_802DB18(u16 left, u16 top, u8 cursorPos) +{ + struct WindowTemplate window; + u8 a = cursorPos; + + window.bg = 0; + window.tilemapLeft = left; + window.tilemapTop = top; + window.width = 6; + window.height = 4; + window.paletteNum = 2; + window.baseBlock = 0x2B; + + CreateYesNoMenu(&window, 1, 0xD, a); +} + +static void sub_802DB8C(void) +{ + u8 color[] = {0, 2, 3}; + + PutWindowTilemap(0); + PutWindowTilemap(1); + FillWindowPixelBuffer(0, 0); + FillWindowPixelBuffer(1, 0); + AddTextPrinterParameterized3(0, 0, 0, 1, color, 0, gText_SpacePoints2); + AddTextPrinterParameterized3(1, 0, 0, 1, color, 0, gText_SpaceTimes3); +} + +static const u8 gUnknown_082FE1DF[] = {2, 2, 0, 0, 1, 1, 1, 0, 0, 2, 0, 0, 0}; + +static const struct CompressedSpriteSheet gUnknown_082FE1EC = {gUnknown_082FF1F8, 0, 0x320}; +static const struct SpritePalette gUnknown_082FE1F4 = {gUnknown_082FF1D8, 0x320}; + +static const u16 gUnknown_082FE1FC[] = {0x06, 0x08, 0x10, 0x08}; +static const u16 gUnknown_082FE204[] = {0x06, 0x08, 0x0b, 0x06, 0x10, 0x08}; +static const u16 gUnknown_082FE210[] = {0x02, 0x06, 0x06, 0x08, 0x10, 0x08, 0x14, 0x06}; +static const u16 gUnknown_082FE220[] = {0x02, 0x06, 0x06, 0x08, 0x0b, 0x06, 0x10, 0x08, 0x14, 0x06}; + +static const u16 *const gUnknown_082FE234[] = +{ + gUnknown_082FE1FC, + gUnknown_082FE204, + gUnknown_082FE210, + gUnknown_082FE220, +}; + +static const s16 gUnknown_082FE244[] = {0x0058, 0x0098}; +static const s16 gUnknown_082FE248[] = {0x0058, 0x0078, 0x0098}; +static const s16 gUnknown_082FE24E[] = {0x0038, 0x0058, 0x0098, 0x00b8}; +static const s16 gUnknown_082FE256[] = {0x0038, 0x0058, 0x0078, 0x0098, 0x00b8}; + +static const s16 *const gUnknown_082FE260[] = +{ + gUnknown_082FE244, + gUnknown_082FE248, + gUnknown_082FE24E, + gUnknown_082FE256, +}; + +static void sub_802DBF8(void) +{ + int i, y, playersCount = sub_802C8AC(); + const s16 *xCoords = gUnknown_082FE260[playersCount - 2]; + + for (i = 0; i < playersCount; i++) + { + struct PokemonJump1_MonInfo *info = sub_802C8C8(i); + + y = gMonFrontPicCoords[info->species].y_offset; + sub_802C9D4(gUnknown_02022D00, info, *xCoords, y + 112, i); + sub_802CE48(gUnknown_02022D00, *xCoords, 112, i); + xCoords++; + } +} + +static void sub_802DC80(u32 id, s16 y) +{ + gUnknown_02022D00->unk81A8[id]->pos2.y = y; +} + +static void sub_802DC9C(int id) +{ + sub_802CF50(gUnknown_02022D00, id); + ChangeBgY(2, (gUnknown_082FE1DF[id] * 5) << 0xD, 0); +} + +static int sub_802DCCC(u8 flags) +{ + int i, count; + + for (i = 0, count = 0; i < 5; i++) + { + if (flags & 1) + { + sub_802CB14(gUnknown_02022D00, i); + count++; + } + flags >>= 1; + } + + sub_802E00C(count - 2); + return count; +} + +static void sub_802DD08(void) +{ + struct UnkStruct3 unkStruct; + struct UnkStruct3 *ptr = &unkStruct; // This temp variable is needed to match, don't ask me why. + + ptr->shape = 0; + ptr->size = 0; + ptr->field_0_0 = 0; + ptr->priority = 1; + ptr->field_1 = 5; + ptr->xDelta = 8; + ptr->x = 108; + ptr->y = 6; + ptr->spriteSheet = (void*) &gUnknown_082FE1EC; + ptr->spritePal = &gUnknown_082FE1F4; + + sub_8034C54(2); + sub_8034D14(0, 0, ptr); + + unkStruct.field_1 = 4; + unkStruct.x = 30; + unkStruct.y = 6; + sub_8034D14(1, 0, &unkStruct); +} + +static void sub_802DD64(int arg0) +{ + sub_8035044(0, arg0); +} + +static void sub_802DD74(u16 arg0) +{ + sub_8035044(1, arg0); +} + +static void sub_802DD88(u8 multiplayerId) +{ + sub_802CBF0(gUnknown_02022D00, multiplayerId); +} + +static void sub_802DDA0(u8 multiplayerId) +{ + sub_802CC88(gUnknown_02022D00, multiplayerId); +} + +static int sub_802DDB8(int multiplayerId) +{ + return sub_802CC18(gUnknown_02022D00, multiplayerId); +} + +static void sub_802DDCC(void) +{ + sub_802CCB0(gUnknown_02022D00); +} + +static void sub_802DDE0(void) +{ + sub_802CD3C(gUnknown_02022D00); +} + +static void sub_802DDF4(int multiplayerId) +{ + sub_802CD70(gUnknown_02022D00, multiplayerId); +} + +static int sub_802DE08(void) +{ + return sub_802CD98(gUnknown_02022D00); +} + +static void sub_802DE1C(void) +{ + struct WindowTemplate window; + int i, playersCount = sub_802C8AC(); + const u16 *winCoords = gUnknown_082FE234[playersCount - 2]; + + window.bg = 0; + window.width = 8; + window.height = 2; + window.paletteNum = 2; + window.baseBlock = 0x2B; + + for (i = 0; i < playersCount; i++) + { + window.tilemapLeft = winCoords[0]; + window.tilemapTop = winCoords[1]; + gUnknown_02022D00->unk1C[i] = AddWindow(&window); + ClearWindowTilemap(gUnknown_02022D00->unk1C[i]); + window.baseBlock += 0x10; + winCoords += 2; + } + + CopyBgTilemapBufferToVram(0); +} + +static void sub_802DED8(int multiplayerId, u8 clr1, u8 clr2, u8 clr3) +{ + u32 x; + u8 colors[3] = {clr1, clr2, clr3}; + + FillWindowPixelBuffer(gUnknown_02022D00->unk1C[multiplayerId], 0); + x = 64 - GetStringWidth(1, sub_802C8E8(multiplayerId), -1); + x /= 2; + AddTextPrinterParameterized3(gUnknown_02022D00->unk1C[multiplayerId], 1, x, 1, colors, -1, sub_802C8E8(multiplayerId)); + CopyWindowToVram(gUnknown_02022D00->unk1C[multiplayerId], 2); +} + +static void sub_802DF70(bool32 arg0) +{ + int i, var, playersCount = sub_802C8AC(); + + if (!arg0) + { + for (i = 0; i < playersCount; i++) + sub_802DED8(i, 0, 2, 3); + } + else + { + var = sub_802C8BC(); + for (i = 0; i < playersCount; i++) + { + if (var != i) + sub_802DED8(i, 0, 2, 3); + else + sub_802DED8(i, 0, 4, 5); + } + } +} + +static void sub_802DFD4(void) +{ + int i, playersCount = sub_802C8AC(); + + for (i = 0; i < playersCount; i++) + PutWindowTilemap(gUnknown_02022D00->unk1C[i]); + CopyBgTilemapBufferToVram(0); +} + +static void sub_802E00C(u8 arg0) +{ + gUnknown_02022D00->unk18 = 0; + ChangeBgX(1, (arg0 / 2) << 16, 0); + ChangeBgY(1, (((arg0 % 2) << 8) - 40) << 8, 0); + ShowBg(1); + CreateTask(sub_802E090, 4); +} + +static bool32 sub_802E058(void) +{ + if (gUnknown_02022D00->unk18 >= 32) + { + return FALSE; + } + else + { + ChangeBgY(1, 128, 1); + if (++gUnknown_02022D00->unk18 >= 32) + HideBg(1); + return TRUE; + } +} + +static void sub_802E090(u8 taskId) +{ + if (!sub_802E058()) + DestroyTask(taskId); +} + +struct MonInfoPacket +{ + u8 id; // packet id + u16 species; + u32 personality; + u32 otId; +}; + +static void sub_802E0AC(struct PokemonJump1_MonInfo *arg0) +{ + struct MonInfoPacket packet; + packet.id = 1, + packet.species = arg0->species, + packet.otId = arg0->otId, + packet.personality = arg0->personality, + sub_800FE50(&packet); +} + +static bool32 sub_802E0D0(int multiplayerId, struct PokemonJump1_MonInfo *arg0) +{ + struct MonInfoPacket packet; + + if ((gRecvCmds[multiplayerId][0] & 0xFF00) != 0x2F00) + return FALSE; + + memcpy(&packet, &gRecvCmds[multiplayerId][1], sizeof(packet)); + if (packet.id == 1) + { + arg0->species = packet.species; + arg0->otId = packet.otId; + arg0->personality = packet.personality; + return TRUE; + } + + return FALSE; +} + +struct UnkPacket2 +{ + u8 id; // packet id + u32 unk4; + u32 unk8; +}; + +static void sub_802E120(u32 arg0) +{ + struct UnkPacket2 packet; + packet.id = 2; + packet.unk4 = arg0; + sub_800FE50(&packet); +} + +struct UnkPacket3 +{ + u8 id; // packet id + u8 unk1; + u8 unk2; + u8 unk3_0:5; + u8 unk3_1:3; + u16 unk4; + u16 unk6; + u32 unk8_0:15; + u32 unk8_1:17; +}; + +static void sub_802E138(struct PokemonJump1_82E4 *arg0, struct PokemonJump1Sub *arg1) +{ + struct UnkPacket3 packet; + packet.id = 3; + packet.unk8_1 = arg1->unk8; + packet.unk3_0 = arg1->unk1; + packet.unk1 = arg1->unk0; + packet.unk6 = arg1->unk2; + packet.unk8_0 = arg1->unk4; + packet.unk2 = arg0->unk10; + packet.unk3_1 = arg0->unk14; + packet.unk4 = arg0->unkE; + sub_800FE50(&packet); +} + +static bool32 sub_802E1BC(struct PokemonJump1_82E4 *arg0, struct PokemonJump1Sub *arg1) +{ + struct UnkPacket3 packet; + + if ((gRecvCmds[0][0] & 0xFF00) != 0x2F00) + return FALSE; + + memcpy(&packet, &gRecvCmds[0][1], sizeof(packet)); + if (packet.id != 3) + return FALSE; + + arg1->unk8 = packet.unk8_1; + arg1->unk1 = packet.unk3_0; + arg1->unk0 = packet.unk1; + arg1->unk2 = packet.unk6; + arg1->unk4 = packet.unk8_0; + arg0->unk10 = packet.unk2; + arg0->unk14 = packet.unk3_1; + arg0->unkE = packet.unk4; + return TRUE; +} + +struct UnkPacket4 +{ + u8 id; // packet id + u8 unk1; + u8 unk2; + u8 unk3; + u16 unk4; + u8 unk6; + u16 unk8; +}; + +static void sub_802E234(struct PokemonJump1_82E4 *arg0, u8 arg1, u16 arg2) +{ + struct UnkPacket4 packet; + packet.id = 4; + packet.unk1 = arg0->unk10; + packet.unk2 = arg0->unk14; + packet.unk3 = arg0->unk18; + packet.unk4 = arg0->unkE; + packet.unk6 = arg1; + packet.unk8 = arg2; + sub_800FE50(&packet); +} + +static bool32 sub_802E264(struct PokemonJump1_82E4 *arg0, int multiplayerId, u8 *arg2, u16 *arg3) +{ + struct UnkPacket4 packet; + + if ((gRecvCmds[multiplayerId][0] & 0xFF00) != 0x2F00) + return FALSE; + + memcpy(&packet, &gRecvCmds[multiplayerId][1], sizeof(packet)); + if (packet.id != 4) + return FALSE; + + arg0->unk10 = packet.unk1; + arg0->unk14 = packet.unk2; + arg0->unk18 = packet.unk3; + arg0->unkE = packet.unk4; + *arg2 = packet.unk6; + *arg3 = packet.unk8; + return TRUE; +} + +static bool32 sub_802E2D0(struct PokemonJump1_82E4 *arg0, int multiplayerId) +{ + struct UnkPacket4 packet; + + if ((gRecvCmds[multiplayerId][0] & 0xFF00) != 0x2F00) + return FALSE; + + memcpy(&packet, &gRecvCmds[multiplayerId][1], sizeof(packet)); + if (packet.id != 4) + return FALSE; + + arg0->unk10 = packet.unk1; + arg0->unk14 = packet.unk2; + arg0->unk18 = packet.unk3; + arg0->unkE = packet.unk4; + return TRUE; +} + +static struct PokemonJumpResults *sub_802E32C(void) +{ + return &gSaveBlock2Ptr->pokeJump; +} + +void ResetPokeJumpResults(void) +{ + struct PokemonJumpResults *pokeJump = sub_802E32C(); + pokeJump->jumpsInRow = 0; + pokeJump->bestJumpScore = 0; + pokeJump->excellentsInRow = 0; + pokeJump->field6 = 0; + pokeJump->field8 = 0; + pokeJump->field2 = 0; +} + +static bool32 sub_802E354(u32 jumpScore, u16 jumpsInRow, u16 excellentsInRow) +{ + struct PokemonJumpResults *pokeJump = sub_802E32C(); + bool32 ret = FALSE; + + if (pokeJump->bestJumpScore < jumpScore && jumpScore <= 99990) + pokeJump->bestJumpScore = jumpScore, ret = TRUE; + if (pokeJump->jumpsInRow < jumpsInRow && jumpsInRow <= 9999) + pokeJump->jumpsInRow = jumpsInRow, ret = TRUE; + if (pokeJump->excellentsInRow < excellentsInRow && excellentsInRow <= 9999) + pokeJump->excellentsInRow = excellentsInRow, ret = TRUE; + + return ret; +} + +static void sub_802E3A8(void) +{ + struct PokemonJumpResults *pokeJump = sub_802E32C(); + if (pokeJump->field6 < 9999) + pokeJump->field6++; +} + +void sub_802E3C4(void) +{ + u8 taskId = CreateTask(sub_802E3E4, 0); + sub_802E3E4(taskId); +} + +static const struct WindowTemplate gUnknown_082FE270 = +{ + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 28, + .height = 9, + .paletteNum = 15, + .baseBlock = 0x1, +}; + +static const u8 *const gUnknown_082FE278[] = {gText_JumpsInARow, gText_BestScore2, gText_ExcellentsInARow}; + +static void sub_802E3E4(u8 taskId) +{ + struct WindowTemplate window; + int i, width, widthCurr; + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + window = gUnknown_082FE270; + width = GetStringWidth(1, gText_PkmnJumpRecords, 0); + for (i = 0; i < ARRAY_COUNT(gUnknown_082FE278); i++) + { + widthCurr = GetStringWidth(1, gUnknown_082FE278[i], 0) + 38; + if (widthCurr > width) + width = widthCurr; + } + width = (width + 7) / 8; + if (width & 1) + width++; + window.tilemapLeft = (30 - width) / 2; + window.width = width; + data[1] = AddWindow(&window); + sub_802E500(data[1], width); + CopyWindowToVram(data[1], 3); + data[0]++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + data[0]++; + break; + case 2: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + rbox_fill_rectangle(data[1]); + CopyWindowToVram(data[1], 1); + data[0]++; + } + break; + case 3: + if (!IsDma3ManagerBusyWithBgCopy()) + { + RemoveWindow(data[1]); + DestroyTask(taskId); + EnableBothScriptContexts(); + } + break; + } +} + +static void sub_802E500(u16 windowId, int width) +{ + int i, x; + int results[3]; + struct PokemonJumpResults *pokeJump = sub_802E32C(); + results[0] = pokeJump->jumpsInRow; + results[1] = pokeJump->bestJumpScore; + results[2] = pokeJump->excellentsInRow; + + LoadUserWindowBorderGfx_(windowId, 0x21D, 0xD0); + DrawTextBorderOuter(windowId, 0x21D, 0xD); + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + AddTextPrinterParameterized(windowId, 1, gText_PkmnJumpRecords, GetStringCenterAlignXOffset(1, gText_PkmnJumpRecords, width * 8), 1, TEXT_SPEED_FF, NULL); + for (i = 0; i < ARRAY_COUNT(gUnknown_082FE278); i++) + { + AddTextPrinterParameterized(windowId, 1, gUnknown_082FE278[i], 0, 25 + (i * 16), TEXT_SPEED_FF, NULL); + ConvertIntToDecimalStringN(gStringVar1, results[i], STR_CONV_MODE_LEFT_ALIGN, 5); + TruncateToFirstWordOnly(gStringVar1); + x = (width * 8) - GetStringWidth(1, gStringVar1, 0); + AddTextPrinterParameterized(windowId, 1, gStringVar1, x, 25 + (i * 16), TEXT_SPEED_FF, NULL); + } + PutWindowTilemap(windowId); +} + +static void TruncateToFirstWordOnly(u8 *str) +{ + for (;*str != EOS; str++) + { + if (*str == CHAR_SPACE) + { + *str = EOS; + break; + } + } +} + +static const u16 gPkmnJump321StartPal1[] = INCBIN_U16("graphics/link_games/pkmnjump_321start1.gbapal"); +static const u32 gPkmnJump321StartGfx1[] = INCBIN_U32("graphics/link_games/pkmnjump_321start1.4bpp.lz"); + +static const struct CompressedSpriteSheet gUnknown_082FE6C8[] = +{ + {gPkmnJump321StartGfx1, 0xC00, 0x2000}, + {}, +}; + +static const struct SpritePalette gUnknown_082FE6D8[] = +{ + {gPkmnJump321StartPal1, 0x2000}, + {}, +}; + +static const union AnimCmd sSpriteAnim_82FE6E8[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FE6F0[] = +{ + ANIMCMD_FRAME(16, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FE6F8[] = +{ + ANIMCMD_FRAME(32, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FE700[] = +{ + ANIMCMD_FRAME(64, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FE708[] = +{ + ANIMCMD_FRAME(48, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FE710[] = +{ + ANIMCMD_FRAME(80, 0), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_82FE718[] = +{ + sSpriteAnim_82FE6E8, + sSpriteAnim_82FE6F0, + sSpriteAnim_82FE6F8, + sSpriteAnim_82FE700, + sSpriteAnim_82FE708, + sSpriteAnim_82FE710 +}; + +static const struct SpriteTemplate gUnknown_082FE730[] = +{ + { + .tileTag = 0x2000, + .paletteTag = 0x2000, + .oam = &gUnknown_08524914, + .anims = sSpriteAnimTable_82FE718, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, +}; + +static const TaskFunc gUnknown_082FE748[][4] = +{ + { + sub_802E83C, + sub_802E8C8, + sub_802EA50, + sub_802EAB0 + }, +}; + +// There's only set of task functions. +static u32 sub_802E63C(u8 funcSetId, u8 taskPriority) +{ + u8 taskId = CreateTask(sub_802E6D0, taskPriority); + struct Task *task = &gTasks[taskId]; + + task->data[0] = 1; + task->data[1] = funcSetId; + gUnknown_082FE748[funcSetId][0](taskId); + return taskId; +} + +static bool32 sub_802E688(void) +{ + u8 taskId = FindTaskIdByFunc(sub_802E6D0); + if (taskId == 0xFF) + return FALSE; + + gTasks[taskId].data[0] = 2; + return TRUE; +} + +static bool32 sub_802E6BC(void) +{ + return FuncIsActiveTask(sub_802E6D0); +} + +static void sub_802E6D0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 2: + gUnknown_082FE748[data[1]][2](taskId); + data[0] = 3; + break; + case 3: + gUnknown_082FE748[data[1]][3](taskId); + break; + case 4: + gUnknown_082FE748[data[1]][1](taskId); + DestroyTask(taskId); + break; + } +} + +static void sub_802E75C(u8 taskId, s16 *data) +{ + u8 i; + struct Sprite *sprite; + + LoadCompressedSpriteSheet(&gUnknown_082FE6C8[data[3]]); + LoadSpritePalette(&gUnknown_082FE6D8[data[4]]); + for (i = 0; i < data[8]; i++) + data[13 + i] = CreateSprite(&gUnknown_082FE730[data[2]], data[9], data[10], data[7]); + for (i = 0; i < data[8]; i++) + { + sprite = &gSprites[data[13 + i]]; + sprite->oam.priority = data[6]; + sprite->invisible = TRUE; + sprite->data[1] = data[5]; + sprite->data[3] = taskId; + sprite->data[4] = i; + sprite->data[5] = data[13]; + } +} + +static void sub_802E83C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + data[2] = 0; + data[3] = 0; + data[4] = 0; + data[5] = 60; + data[6] = 0; + data[7] = 0; + data[8] = 3; + data[9] = 120; + data[10] = 88; + sub_802E75C(taskId, data); + + StartSpriteAnim(&gSprites[data[14]], 4); + gSprites[data[14]].pos2.x = -32; + + StartSpriteAnim(&gSprites[data[15]], 5); + gSprites[data[15]].pos2.x = 32; +} + +static void sub_802E8C8(u8 taskId) +{ + u8 i = 0; + s16 *data = gTasks[taskId].data; + + for (i = 0; i < data[8]; i++) + DestroySprite(&gSprites[data[13 + i]]); + FreeSpriteTilesByTag(gUnknown_082FE6C8[data[3]].tag); + FreeSpritePaletteByTag(gUnknown_082FE6D8[data[4]].tag); +} + +static void sub_802E938(struct Sprite *sprite) +{ + s16 *data = gTasks[sprite->data[3]].data; + + if (data[11] % data[5] != 0) + return; + if (data[11] == data[10]) + return; + + data[10] = data[11]; + switch (sprite->data[2]) + { + case 0: + sprite->invisible = FALSE; + case 1: + case 2: + PlaySE(SE_KON); + StartSpriteAnim(sprite, sprite->data[2]); + break; + case 3: + PlaySE(SE_PIN); + StartSpriteAnim(sprite, sprite->data[2]); + gSprites[data[14]].invisible = FALSE; + gSprites[data[15]].invisible = FALSE; + break; + case 4: + sprite->invisible = TRUE; + gSprites[data[14]].invisible = TRUE; + gSprites[data[15]].invisible = TRUE; + data[0] = 4; + return; + } + sprite->data[2]++; +} + +static void sub_802EA50(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + PlaySE(SE_KON); + gSprites[data[13]].callback = sub_802E938; + gSprites[data[13]].invisible = FALSE; + gTasks[taskId].data[0] = 3; +} + +static void sub_802EAB0(u8 taskId) +{ + u16 packet[6]; + s16 *data = gTasks[taskId].data; + + if (gReceivedRemoteLinkPlayers != 0) + { + if (gRecvCmds[0][1] == 0x7FFF) + data[11] = gRecvCmds[0][2]; + if (GetMultiplayerId() == 0) + { + data[12]++; + memset(packet, 0, sizeof(packet)); + packet[0] = 0x7FFF; + packet[1] = data[12]; + sub_800FE50(packet); + } + } + else + { + data[11]++; + } +} + +void sub_802EB24(s16 tileTag, s16 palTag, s16 x, s16 y, u8 subpriority) +{ + u8 taskId = CreateTask(sub_802EB98, 0x50); + gTasks[taskId].data[2] = tileTag; + gTasks[taskId].data[3] = palTag; + gTasks[taskId].data[4] = x; + gTasks[taskId].data[5] = y; + gTasks[taskId].data[6] = subpriority; +} + +bool32 sub_802EB84(void) +{ + return FuncIsActiveTask(sub_802EB98); +} + +static void sub_802EB98(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + sub_802EF50(data[2], data[3]); + data[7] = sub_802EFA8(data[2], data[3], data[4], data[5], data[6]); + sub_802EFFC(data[2], data[3], data[4], data[5], data[6], &data[8], &data[9]); + data[0]++; + break; + case 1: + if (!sub_802EC98(data[7])) + { + sub_802EDCC(data[7], data[8], data[9]); + FreeSpriteOamMatrix(&gSprites[data[7]]); + DestroySprite(&gSprites[data[7]]); + data[0]++; + } + break; + case 2: + if (!sub_802EE30(data[8])) + { + DestroySprite(&gSprites[data[8]]); + DestroySprite(&gSprites[data[9]]); + FreeSpriteTilesByTag(data[2]); + FreeSpritePaletteByTag(data[3]); + DestroyTask(taskId); + } + break; + } +} + +static bool32 sub_802EC98(u8 spriteId) +{ + struct Sprite *sprite = &gSprites[spriteId]; + + switch (sprite->data[0]) + { + case 0: + sub_8007E18(sprite, 0x800, 0x1A); + sprite->data[0]++; + case 1: + if (sprite->data[2] == 0) + PlaySE(SE_KON2); + if (++sprite->data[2] >= 20) + { + sprite->data[2] = 0; + StartSpriteAffineAnim(sprite, 1); + sprite->data[0]++; + } + break; + case 2: + if (sprite->affineAnimEnded) + sprite->data[0]++; + break; + case 3: + if (++sprite->data[2] >= 4) + { + sprite->data[2] = 0; + sprite->data[0]++; + StartSpriteAffineAnim(sprite, 2); + } + break; + case 4: + sprite->pos1.y -= 4; + if (++sprite->data[2] >= 8) + { + if (sprite->data[4] <= 1) + { + StartSpriteAnim(sprite, sprite->data[4] + 1); + sprite->data[2] = 0; + sprite->data[0]++; + } + else + { + sprite->data[0] = 7; + return FALSE; + } + } + break; + case 5: + sprite->pos1.y += 4; + if (++sprite->data[2] >= 8) + { + sprite->data[2] = 0; + StartSpriteAffineAnim(sprite, 3); + sprite->data[0]++; + } + break; + case 6: + if (sprite->affineAnimEnded) + { + sprite->data[4]++; + sprite->data[0] = 1; + } + break; + case 7: + return FALSE; + } + + return TRUE; +} + +// First argument is unused. +static void sub_802EDCC(u8 spriteId1, u8 spriteId2, u8 spriteId3) +{ + gSprites[spriteId2].pos2.y = -40; + gSprites[spriteId3].pos2.y = -40; + gSprites[spriteId2].invisible = FALSE; + gSprites[spriteId3].invisible = FALSE; + gSprites[spriteId2].callback = sub_802EE5C; + gSprites[spriteId3].callback = sub_802EE5C; +} + +static bool32 sub_802EE30(u8 spriteId) +{ + return (gSprites[spriteId].callback == sub_802EE5C); +} + +static void sub_802EE5C(struct Sprite *sprite) +{ + int y; + s16 *data = sprite->data; + + switch (data[0]) + { + case 0: + data[4] = 64; + data[5] = sprite->pos2.y << 4; + data[0]++; + case 1: + data[5] += data[4]; + data[4]++; + sprite->pos2.y = data[5] >> 4; + if (sprite->pos2.y >= 0) + { + PlaySE(SE_KON2); + sprite->pos2.y = 0; + data[0]++; + } + break; + case 2: + data[1] += 12; + if (data[1] >= 128) + { + PlaySE(SE_KON2); + data[1] = 0; + data[0]++; + } + y = gSineTable[data[1]]; + sprite->pos2.y = -(y >> 4); + break; + case 3: + data[1] += 16; + if (data[1] >= 128) + { + PlaySE(SE_KON2); + data[1] = 0; + data[0]++; + } + sprite->pos2.y = -(gSineTable[data[1]] >> 5); + break; + case 4: + if (++data[1] > 40) + sprite->callback = SpriteCallbackDummy; + break; + } +} + +static const u16 gPkmnJump321StartPal2[] = INCBIN_U16("graphics/link_games/pkmnjump_321start2.gbapal"); +static const u32 gPkmnJump321StartGfx2[] = INCBIN_U32("graphics/link_games/pkmnjump_321start2.4bpp.lz"); + +static void sub_802EF50(u16 tileTag, u16 palTag) +{ + struct CompressedSpriteSheet sprSheet = {gPkmnJump321StartGfx2, 0xE00, 0}; + struct SpritePalette sprPal = {gPkmnJump321StartPal2, 0}; + + sprSheet.tag = tileTag; + sprPal.tag = palTag; + + LoadCompressedSpriteSheet(&sprSheet); + LoadSpritePalette(&sprPal); +} + +static const struct OamData sOamData_82FEBDC = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct OamData sOamData_82FEBE4 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_82FEBEC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FEBF4[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FEBFC[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_82FEC04[] = +{ + sSpriteAnim_82FEBEC, + sSpriteAnim_82FEBF4, + sSpriteAnim_82FEBFC +}; + +static const union AnimCmd sSpriteAnim_82FEC10[] = +{ + ANIMCMD_FRAME(48, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_82FEC18[] = +{ + ANIMCMD_FRAME(80, 1), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_82FEC20[] = +{ + sSpriteAnim_82FEC10, + sSpriteAnim_82FEC18 +}; + +static const union AffineAnimCmd sSpriteAffineAnim_82FEC28[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sSpriteAffineAnim_82FEC38[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_FRAME(16, -16, 0, 8), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sSpriteAffineAnim_82FEC50[] = +{ + AFFINEANIMCMD_FRAME(-18, 18, 0, 8), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sSpriteAffineAnim_82FEC60[] = +{ + AFFINEANIMCMD_FRAME(6, -6, 0, 8), + AFFINEANIMCMD_FRAME(-4, 4, 0, 8), + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_82FEC80[] = +{ + sSpriteAffineAnim_82FEC28, + sSpriteAffineAnim_82FEC38, + sSpriteAffineAnim_82FEC50, + sSpriteAffineAnim_82FEC60 +}; + +static u8 sub_802EFA8(u16 tileTag, u16 palTag, s16 x, s16 y, u8 subpriority) +{ + u8 spriteId; + struct SpriteTemplate sprTemplate = + { + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_82FEBDC, + .anims = sSpriteAnimTable_82FEC04, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_82FEC80, + .callback = SpriteCallbackDummy, + }; + + sprTemplate.tileTag = tileTag; + sprTemplate.paletteTag = palTag; + spriteId = CreateSprite(&sprTemplate, x, y, subpriority); + return spriteId; +} + +static void sub_802EFFC(u16 tileTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 *spriteId1, s16 *spriteId2) +{ + struct SpriteTemplate sprTemplate = + { + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_82FEBE4, + .anims = sSpriteAnimTable_82FEC20, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + + sprTemplate.tileTag = tileTag; + sprTemplate.paletteTag = palTag; + *spriteId1 = CreateSprite(&sprTemplate, x - 32, y, subpriority); + *spriteId2 = CreateSprite(&sprTemplate, x + 32, y, subpriority); + + gSprites[*spriteId1].invisible = TRUE; + gSprites[*spriteId2].invisible = TRUE; + StartSpriteAnim(&gSprites[*spriteId2], 1); +} diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 148be7c5c..59ec8f4f1 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -443,7 +443,7 @@ enum #define TAG_TILE_1 0x1 // IWRAM bss -IWRAM_DATA static u32 gUnknown_03000F78[98]; +static u32 gUnknown_03000F78[98]; // EWRAM DATA EWRAM_DATA static u8 sPreviousBoxOption = 0; @@ -464,6 +464,9 @@ EWRAM_DATA static u8 sMovingMonOrigBoxPos = 0; EWRAM_DATA static bool8 sCanOnlyMove = 0; // This file's functions. +#if !defined(NONMATCHING) && MODERN +#define static +#endif static void CreatePCMenu(u8 whichMenu, s16 *windowIdPtr); static void Cb2_EnterPSS(u8 boxOption); static u8 GetCurrentBoxOption(void); @@ -6824,7 +6827,7 @@ static void SetCursorMonData(void *pokemon, u8 mode) sPSSData->cursorMonLevel = GetLevelFromBoxMonExp(boxMon); sPSSData->cursorMonMarkings = GetBoxMonData(boxMon, MON_DATA_MARKINGS); sPSSData->cursorMonPersonality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY); - sPSSData->cursorMonPalette = GetFrontSpritePalFromSpeciesAndPersonality(sPSSData->cursorMonSpecies, otId, sPSSData->cursorMonPersonality); + sPSSData->cursorMonPalette = GetMonSpritePalFromSpeciesAndPersonality(sPSSData->cursorMonSpecies, otId, sPSSData->cursorMonPersonality); gender = GetGenderFromSpeciesAndPersonality(sPSSData->cursorMonSpecies, sPSSData->cursorMonPersonality); sPSSData->cursorMonItem = GetBoxMonData(boxMon, MON_DATA_HELD_ITEM); } @@ -6936,10 +6939,24 @@ static u8 InBoxInput_Normal(void) sPSSData->field_CD2 = 0; sPSSData->field_CD3 = 0; sPSSData->field_CD7 = 0; - retVal = 0; - if (!(gMain.newAndRepeatedKeys & DPAD_UP)) + + do { - if (gMain.newAndRepeatedKeys & DPAD_DOWN) + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + retVal = TRUE; + if (sBoxCursorPosition >= IN_BOX_ROWS) + { + cursorPosition -= IN_BOX_ROWS; + } + else + { + cursorArea = CURSOR_AREA_BOX; + cursorPosition = 0; + } + break; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { retVal = TRUE; cursorPosition += IN_BOX_ROWS; @@ -6951,6 +6968,7 @@ static u8 InBoxInput_Normal(void) sPSSData->field_CD2 = 1; sPSSData->field_CD7 = 1; } + break; } else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { @@ -6964,6 +6982,7 @@ static u8 InBoxInput_Normal(void) sPSSData->field_CD3 = -1; cursorPosition += (IN_BOX_ROWS - 1); } + break; } else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { @@ -6977,81 +6996,70 @@ static u8 InBoxInput_Normal(void) sPSSData->field_CD3 = 1; cursorPosition -= (IN_BOX_ROWS - 1); } + break; } else if (gMain.newKeys & START_BUTTON) { retVal = TRUE; cursorArea = CURSOR_AREA_BOX; cursorPosition = 0; + break; } - else + + if ((gMain.newKeys & A_BUTTON) && sub_80CFA5C()) { - if ((gMain.newKeys & A_BUTTON) && sub_80CFA5C()) - { - if (!sCanOnlyMove) - return 8; + if (!sCanOnlyMove) + return 8; - if (sPSSData->boxOption == BOX_OPTION_MOVE_MONS || sIsMonBeingMoved == TRUE) - { - switch (sub_80CFF98(0)) - { - case 1: - return 11; - case 2: - return 12; - case 3: - return 13; - case 4: - return 14; - case 5: - return 15; - case 12: - return 16; - case 13: - return 17; - case 15: - return 18; - } - } - else + if (sPSSData->boxOption != BOX_OPTION_MOVE_MONS || sIsMonBeingMoved == TRUE) + { + switch (sub_80CFF98(0)) { - sPSSData->inBoxMovingMode = 1; - return 20; + case 1: + return 11; + case 2: + return 12; + case 3: + return 13; + case 4: + return 14; + case 5: + return 15; + case 12: + return 16; + case 13: + return 17; + case 15: + return 18; } } - - if (gMain.newKeys & B_BUTTON) - return 19; - - if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) - { - if (gMain.heldKeys & L_BUTTON) - return 10; - if (gMain.heldKeys & R_BUTTON) - return 9; - } - - if (gMain.newKeys & SELECT_BUTTON) + else { - sub_80CFDC4(); - return 0; + sPSSData->inBoxMovingMode = 1; + return 20; } - retVal = FALSE; } - } - else - { - retVal = TRUE; - if (sBoxCursorPosition >= IN_BOX_ROWS) + + if (gMain.newKeys & B_BUTTON) + return 19; + + if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { - cursorPosition -= IN_BOX_ROWS; + if (gMain.heldKeys & L_BUTTON) + return 10; + if (gMain.heldKeys & R_BUTTON) + return 9; } - else + + if (gMain.newKeys & SELECT_BUTTON) { - cursorArea = CURSOR_AREA_BOX; - cursorPosition = 0; + sub_80CFDC4(); + return 0; } - } + + retVal = 0; + + } while (0); if (retVal) sub_80CD894(cursorArea, cursorPosition); @@ -7533,20 +7541,30 @@ static u8 HandleInput_InParty(void) gotoBox = FALSE; retVal = 0; - if (!(gMain.newAndRepeatedKeys & DPAD_UP)) + do { - if (gMain.newAndRepeatedKeys & DPAD_DOWN) + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (--cursorPosition < 0) + cursorPosition = PARTY_SIZE; + if (cursorPosition != sBoxCursorPosition) + retVal = 1; + break; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { if (++cursorPosition > PARTY_SIZE) cursorPosition = 0; if (cursorPosition != sBoxCursorPosition) retVal = 1; + break; } - else if ((gMain.newAndRepeatedKeys & DPAD_LEFT) && sBoxCursorPosition != 0) + else if (gMain.newAndRepeatedKeys & DPAD_LEFT && sBoxCursorPosition != 0) { retVal = 1; sPSSData->field_CD6 = sBoxCursorPosition; cursorPosition = 0; + break; } else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { @@ -7561,73 +7579,67 @@ static u8 HandleInput_InParty(void) cursorArea = CURSOR_AREA_IN_BOX; cursorPosition = 0; } + break; } - else + + if (gMain.newKeys & A_BUTTON) { - if (gMain.newKeys & A_BUTTON) + if (sBoxCursorPosition == PARTY_SIZE) { - if (sBoxCursorPosition == PARTY_SIZE) - { - if (sPSSData->boxOption == BOX_OPTION_DEPOSIT) - return 4; + if (sPSSData->boxOption == BOX_OPTION_DEPOSIT) + return 4; - gotoBox = TRUE; - } - else if (sub_80CFA5C()) + gotoBox = TRUE; + } + else if (sub_80CFA5C()) + { + if (!sCanOnlyMove) + return 8; + + switch (sub_80CFF98(0)) { - if (!sCanOnlyMove) - return 8; - - switch (sub_80CFF98(0)) - { - case 1: - return 11; - case 2: - return 12; - case 3: - return 13; - case 4: - return 14; - case 5: - return 15; - case 12: - return 16; - case 13: - return 17; - case 15: - return 18; - } + case 1: + return 11; + case 2: + return 12; + case 3: + return 13; + case 4: + return 14; + case 5: + return 15; + case 12: + return 16; + case 13: + return 17; + case 15: + return 18; } } + } - if (gMain.newKeys & B_BUTTON) - { - if (sPSSData->boxOption == BOX_OPTION_DEPOSIT) - return 19; + if (gMain.newKeys & B_BUTTON) + { + if (sPSSData->boxOption == BOX_OPTION_DEPOSIT) + return 19; - gotoBox = TRUE; - } + gotoBox = TRUE; + } - if (gotoBox) - { - retVal = 6; - cursorArea = CURSOR_AREA_IN_BOX; - cursorPosition = 0; - } - else if (gMain.newKeys & SELECT_BUTTON) - { - sub_80CFDC4(); - return 0; - } + if (gotoBox) + { + retVal = 6; + cursorArea = CURSOR_AREA_IN_BOX; + cursorPosition = 0; } - } - else - { - if (--cursorPosition < 0) - cursorPosition = PARTY_SIZE; - if (cursorPosition != sBoxCursorPosition) - retVal = 1; - } + else if (gMain.newKeys & SELECT_BUTTON) + { + sub_80CFDC4(); + return 0; + } + + } while (0); + if (retVal != 0) { if (retVal != 6) @@ -7911,63 +7923,63 @@ _080CF7D8:\n\ static u8 HandleInput_OnBox(void) { u8 retVal; - s8 cursorArea = sBoxCursorArea; - s8 cursorPosition = sBoxCursorPosition; + s8 cursorArea; + s8 cursorPosition; sPSSData->field_CD3 = 0; sPSSData->field_CD2 = 0; sPSSData->field_CD7 = 0; - retVal = 0; - if (!(gMain.newAndRepeatedKeys & DPAD_UP)) + do { - if (gMain.newAndRepeatedKeys & DPAD_DOWN) + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + retVal = 1; + cursorArea = CURSOR_AREA_BUTTONS; + cursorPosition = 0; + sPSSData->field_CD7 = 1; + break; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { retVal = 1; cursorArea = CURSOR_AREA_IN_BOX; cursorPosition = 2; + break; } - else + + if (gMain.heldKeys & DPAD_LEFT) + return 10; + if (gMain.heldKeys & DPAD_RIGHT) + return 9; + + if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) { - if (gMain.heldKeys & DPAD_LEFT) + if (gMain.heldKeys & L_BUTTON) return 10; - if (gMain.heldKeys & DPAD_RIGHT) + if (gMain.heldKeys & R_BUTTON) return 9; + } - if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR) - { - if (gMain.heldKeys & L_BUTTON) - return 10; - if (gMain.heldKeys & R_BUTTON) - return 9; - } + if (gMain.newKeys & A_BUTTON) + { + sub_80CD1A8(FALSE); + AddBoxMenu(); + return 7; + } - if (gMain.newKeys & A_BUTTON) - { - sub_80CD1A8(FALSE); - AddBoxMenu(); - return 7; - } + if (gMain.newKeys & B_BUTTON) + return 19; - if (gMain.newKeys & B_BUTTON) - return 19; + if (gMain.newKeys & SELECT_BUTTON) + { + sub_80CFDC4(); + return 0; + } - if (gMain.newKeys & SELECT_BUTTON) - { - sub_80CFDC4(); - return 0; - } + retVal = 0; - retVal = 0; - } - } - else - { - retVal = 1; - cursorArea = CURSOR_AREA_BUTTONS; - cursorPosition = 0; - sPSSData->field_CD7 = 1; - } + } while (0); if (retVal) { @@ -8116,62 +8128,57 @@ static u8 HandleInput_OnButtons(void) sPSSData->field_CD2 = 0; sPSSData->field_CD7 = 0; - if (!(gMain.newAndRepeatedKeys & DPAD_UP)) + do { - if (gMain.newAndRepeatedKeys & (DPAD_DOWN | START_BUTTON)) + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + retVal = 1; + cursorArea = CURSOR_AREA_IN_BOX; + sPSSData->field_CD2 = -1; + cursorPosition = (sBoxCursorPosition == 0) ? IN_BOX_COUNT - 1 - 5 : IN_BOX_COUNT - 1; + sPSSData->field_CD7 = 1; + break; + } + else if (gMain.newAndRepeatedKeys & (DPAD_DOWN | START_BUTTON)) { retVal = 1; cursorArea = CURSOR_AREA_BOX; cursorPosition = 0; sPSSData->field_CD7 = 1; + break; } - else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + + if (gMain.newAndRepeatedKeys & DPAD_LEFT) { retVal = 1; if (--cursorPosition < 0) - { cursorPosition = 1; - } + break; } else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { retVal = 1; if (++cursorPosition > 1) - { cursorPosition = 0; - } + break; } - else if (gMain.newKeys & A_BUTTON) - { + + if (gMain.newKeys & A_BUTTON) return (cursorPosition == 0) ? 5 : 4; - } - else if (gMain.newKeys & B_BUTTON) - { + if (gMain.newKeys & B_BUTTON) return 19; - } - else if (gMain.newKeys & SELECT_BUTTON) + + if (gMain.newKeys & SELECT_BUTTON) { sub_80CFDC4(); return 0; } - else - { - retVal = 0; - } - } - else - { - retVal = 1; - cursorArea = CURSOR_AREA_IN_BOX; - sPSSData->field_CD2 = -1; - cursorPosition = (sBoxCursorPosition == 0) ? IN_BOX_COUNT - 1 - 5 : IN_BOX_COUNT - 1; - sPSSData->field_CD7 = 1; - } + + retVal = 0; + } while (0); if (retVal != 0) - { sub_80CD894(cursorArea, cursorPosition); - } return retVal; } @@ -8750,9 +8757,14 @@ static s16 sub_80D00AC(void) { s32 textId = -2; - if (!(gMain.newKeys & A_BUTTON)) + do { - if (gMain.newKeys & B_BUTTON) + if (gMain.newKeys & A_BUTTON) + { + textId = Menu_GetCursorPos(); + break; + } + else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); textId = -1; @@ -8768,11 +8780,7 @@ static s16 sub_80D00AC(void) PlaySE(SE_SELECT); Menu_MoveCursor(1); } - } - else - { - textId = Menu_GetCursorPos(); - } + } while (0); if (textId != -2) sub_80D013C(); @@ -8780,9 +8788,6 @@ static s16 sub_80D00AC(void) if (textId >= 0) textId = sPSSData->menuItems[textId].textId; - #ifndef NONMATCHING - asm("":::"r4"); - #endif // NONMATCHING return textId; } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 2ec088628..79aac4b5e 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -115,7 +115,7 @@ static EWRAM_DATA struct PokemonSummaryScreenData u8 level; // 0x5 u8 ribbonCount; // 0x6 u8 ailment; // 0x7 - u8 altAbility; // 0x8 + u8 abilityNum; // 0x8 u8 metLocation; // 0x9 u8 metLevel; // 0xA u8 metGame; // 0xB @@ -1356,7 +1356,7 @@ static bool8 ExtractMonDataToSummaryStruct(struct Pokemon *mon) sum->species2 = GetMonData(mon, MON_DATA_SPECIES2); sum->exp = GetMonData(mon, MON_DATA_EXP); sum->level = GetMonData(mon, MON_DATA_LEVEL); - sum->altAbility = GetMonData(mon, MON_DATA_ALT_ABILITY); + sum->abilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM); sum->item = GetMonData(mon, MON_DATA_HELD_ITEM); sum->pid = GetMonData(mon, MON_DATA_PERSONALITY); sum->sanity = GetMonData(mon, MON_DATA_SANITY_IS_BAD_EGG); @@ -3062,13 +3062,13 @@ static void PrintMonOTID(void) static void PrintMonAbilityName(void) { - u8 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.altAbility); + u8 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum); SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ABILITY), gAbilityNames[ability], 0, 1, 0, 1); } static void PrintMonAbilityDescription(void) { - u8 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.altAbility); + u8 ability = GetAbilityBySpecies(sMonSummaryScreen->summary.species, sMonSummaryScreen->summary.abilityNum); SummaryScreen_PrintTextOnWindow(AddWindowFromTemplateList(sPageInfoTemplate, PSS_DATA_WINDOW_INFO_ABILITY), gAbilityDescriptionPointers[ability], 0, 17, 0, 0); } diff --git a/src/pokenav.c b/src/pokenav.c index be3826bed..132e4123b 100644 --- a/src/pokenav.c +++ b/src/pokenav.c @@ -318,7 +318,7 @@ void Task_RunLoopedTask_LinkMode(u8 taskId) if (sub_8087598()) return; - + task = (LoopedTask)GetWordTaskArg(taskId, 1); state = &gTasks[taskId].data[0]; action = task(*state); @@ -605,7 +605,7 @@ void sub_81C7694(u32 a0) gPokenavResources->fieldA = value; } -u16 sub_81C76AC(void) +u32 sub_81C76AC(void) { return gPokenavResources->fieldA; } diff --git a/src/pokenav_main_menu.c b/src/pokenav_main_menu.c index 94dab60bb..4422a70e3 100644 --- a/src/pokenav_main_menu.c +++ b/src/pokenav_main_menu.c @@ -64,16 +64,16 @@ static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide); static void HideLeftHeaderSprites(bool32 isOnRightSide); static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide); static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide); -static void MoveLeftHeader(struct Sprite *sprite, int startX, int endX, int duration); +static void MoveLeftHeader(struct Sprite *sprite, s32 startX, s32 endX, s32 duration); static void SpriteCB_MoveLeftHeader(struct Sprite *sprite); static void InitPokenavMainMenuResources(void); static void InitHoennMapHeaderSprites(void); static void sub_81C7B74(void); -static u32 LoopedTask_ScrollMenuHeaderDown(int a0); -static u32 LoopedTask_ScrollMenuHeaderUp(int a0); +static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0); +static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0); static void sub_81C7BF8(u32 a0); static void SpriteCB_SpinningPokenav(struct Sprite* sprite); -static u32 LoopedTask_InitPokenavMenu(int a0); +static u32 LoopedTask_InitPokenavMenu(s32 a0); const u16 gSpinningPokenavPaletteData[] = INCBIN_U16("graphics/pokenav/icon2.gbapal"); const u32 gSpinningPokenavGfx[] = INCBIN_U32("graphics/pokenav/icon2.4bpp.lz"); @@ -360,7 +360,7 @@ bool32 WaitForPokenavShutdownFade(void) return TRUE; } -static u32 LoopedTask_InitPokenavMenu(int a0) +static u32 LoopedTask_InitPokenavMenu(s32 a0) { struct PokenavMainMenuResources *structPtr; @@ -440,7 +440,7 @@ bool32 MainMenuLoopedTaskIsBusy(void) return IsLoopedTaskActive(structPtr->currentTaskId); } -static u32 LoopedTask_ScrollMenuHeaderDown(int a0) +static u32 LoopedTask_ScrollMenuHeaderDown(s32 a0) { switch (a0) { @@ -461,7 +461,7 @@ static u32 LoopedTask_ScrollMenuHeaderDown(int a0) } } -static u32 LoopedTask_ScrollMenuHeaderUp(int a0) +static u32 LoopedTask_ScrollMenuHeaderUp(s32 a0) { if (ChangeBgY(0, 384, 2) <= 0) { @@ -637,7 +637,7 @@ _081C7AAE:\n\ .syntax divided"); } -void sub_81C7AC0(int a0) +void sub_81C7AC0(s32 a0) { struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); @@ -708,7 +708,7 @@ static void sub_81C7BF8(u32 windowId) static void InitPokenavMainMenuResources(void) { - int i; + s32 i; u8 spriteId; struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); @@ -758,13 +758,13 @@ void ResumeSpinningPokenavSprite(void) static void InitHoennMapHeaderSprites(void) { - int i, spriteId; + s32 i, spriteId; struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); LoadCompressedSpriteSheet(&sPokenavHoennMapLeftHeaderSpriteSheet); AllocSpritePalette(1); AllocSpritePalette(2); - for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) { spriteId = CreateSprite(&sPokenavLeftHeaderHoennMapSpriteTemplate, 0, 0, 1); structPtr->leftHeaderSprites[i] = &gSprites[spriteId]; @@ -859,10 +859,10 @@ void sub_81C7FC4(u32 arg0, bool32 arg1) void sub_81C7FDC(void) { - int i; + s32 i; struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); - for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) { structPtr->leftHeaderSprites[i]->invisible = TRUE; structPtr->submenuLeftHeaderSprites[i]->invisible = TRUE; @@ -881,7 +881,7 @@ bool32 sub_81C8010(void) static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) { - int start, end, i; + s32 start, end, i; struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); if (!isOnRightSide) @@ -889,7 +889,7 @@ static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) else start = 256, end = 160; - for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) { structPtr->leftHeaderSprites[i]->pos1.y = startY; MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12); @@ -898,7 +898,7 @@ static void ShowLeftHeaderSprites(u32 startY, bool32 isOnRightSide) static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) { - int start, end, i; + s32 start, end, i; struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); if (!isOnRightSide) @@ -906,7 +906,7 @@ static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) else start = 256, end = 192; - for (i = 0; i < (int)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) { structPtr->submenuLeftHeaderSprites[i]->pos1.y = startY; MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12); @@ -915,7 +915,7 @@ static void ShowLeftHeaderSubmenuSprites(u32 startY, bool32 isOnRightSide) static void HideLeftHeaderSprites(bool32 isOnRightSide) { - int start, end, i; + s32 start, end, i; struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); if (!isOnRightSide) @@ -923,7 +923,7 @@ static void HideLeftHeaderSprites(bool32 isOnRightSide) else start = 192, end = 256; - for (i = 0; i < (int)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(structPtr->leftHeaderSprites); i++) { MoveLeftHeader(structPtr->leftHeaderSprites[i], start, end, 12); } @@ -931,7 +931,7 @@ static void HideLeftHeaderSprites(bool32 isOnRightSide) static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide) { - int start, end, i; + s32 start, end, i; struct PokenavMainMenuResources *structPtr = GetSubstructPtr(0); if (!isOnRightSide) @@ -939,13 +939,13 @@ static void HideLeftHeaderSubmenuSprites(bool32 isOnRightSide) else start = 192, end = 256; - for (i = 0; i < (int)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) + for (i = 0; i < (s32)ARRAY_COUNT(structPtr->submenuLeftHeaderSprites); i++) { MoveLeftHeader(structPtr->submenuLeftHeaderSprites[i], start, end, 12); } } -static void MoveLeftHeader(struct Sprite *sprite, int startX, int endX, int duration) +static void MoveLeftHeader(struct Sprite *sprite, s32 startX, s32 endX, s32 duration) { sprite->pos1.x = startX; sprite->data[0] = startX * 16; diff --git a/src/pokenav_match_call_data.c b/src/pokenav_match_call_data.c index 70fa42541..d2d89babf 100644 --- a/src/pokenav_match_call_data.c +++ b/src/pokenav_match_call_data.c @@ -6,6 +6,7 @@ #include "battle.h" #include "gym_leader_rematch.h" #include "match_call.h" +#include "constants/region_map_sections.h" // Static type declarations @@ -17,13 +18,13 @@ typedef struct MatchCallTextDataStruct { struct MatchCallStructCommon { u8 type; - u8 v1; + u8 mapSec; u16 flag; }; struct MatchCallStruct0 { u8 type; - u8 v1; + u8 mapSec; u16 flag; const u8 *desc; const u8 *name; @@ -32,7 +33,7 @@ struct MatchCallStruct0 { struct MatchCallStruct1 { u8 type; - u8 v1; + u8 mapSec; u16 flag; u16 rematchTableIdx; const u8 *desc; @@ -42,12 +43,12 @@ struct MatchCallStruct1 { struct MatchCallSubstruct2 { u16 flag; - u8 v2; + u8 mapSec; }; struct MatchCallStruct2 { u8 type; - u8 v1; + u8 mapSec; u16 flag; u16 rematchTableIdx; const u8 *desc; @@ -57,7 +58,7 @@ struct MatchCallStruct2 { struct MatchCallStruct3 { u8 type; - u8 v1; + u8 mapSec; u16 flag; const u8 *desc; const u8 *name; @@ -75,7 +76,7 @@ struct MatchCallStruct4 { // Note: Type1 and Type5 have identical struct layouts. struct MatchCallStruct5 { u8 type; - u8 v1; + u8 mapSec; u16 flag; u16 rematchTableIdx; const u8 *desc; @@ -96,7 +97,7 @@ typedef union { struct UnkStruct_08625388 { u16 idx; u16 v2; - u16 v4; + u32 v4; const u8 *v8[4]; }; @@ -110,11 +111,11 @@ static bool32 MatchCallGetFlag_Type2(match_call_t); static bool32 MatchCallGetFlag_Type3(match_call_t); static bool32 MatchCallGetFlag_Type4(match_call_t); -static u8 sub_81D1714(match_call_t); -static u8 sub_81D1718(match_call_t); -static u8 sub_81D171C(match_call_t); -static u8 sub_81D1750(match_call_t); -static u8 sub_81D1754(match_call_t); +static u8 MatchCallGetMapSec_Type0(match_call_t); +static u8 MatchCallGetMapSec_Type1(match_call_t); +static u8 MatchCallGetMapSec_Type2(match_call_t); +static u8 MatchCallGetMapSec_Type3(match_call_t); +static u8 MatchCallGetMapSec_Type4(match_call_t); static bool32 MatchCall_IsRematchable_Type0(match_call_t); static bool32 MatchCall_IsRematchable_Type1(match_call_t); @@ -325,7 +326,7 @@ static const match_call_text_data_t sMrStoneTextScripts[] = { static const struct MatchCallStruct0 sMrStoneMatchCallHeader = { .type = 0, - .v1 = 10, + .mapSec = MAPSEC_RUSTBORO_CITY, .flag = 0xFFFF, .desc = gMrStoneMatchCallDesc, .name = gMrStoneMatchCallName, @@ -348,7 +349,7 @@ static const match_call_text_data_t sNormanTextScripts[] = { static const struct MatchCallStruct5 sNormanMatchCallHeader = { .type = 5, - .v1 = 7, + .mapSec = MAPSEC_PETALBURG_CITY, .flag = FLAG_ENABLE_NORMAN_MATCH_CALL, .rematchTableIdx = REMATCH_NORMAN, .desc = gNormanMatchCallDesc, @@ -359,7 +360,7 @@ static const struct MatchCallStruct5 sNormanMatchCallHeader = static const struct MatchCallStruct3 sProfBirchMatchCallHeader = { .type = 3, - .v1 = 0, + .mapSec = 0, .flag = FLAG_ENABLE_PROF_BIRCH_MATCH_CALL, .desc = gProfBirchMatchCallDesc, .name = gProfBirchMatchCallName @@ -375,7 +376,7 @@ static const match_call_text_data_t sMomTextScripts[] = { static const struct MatchCallStruct0 sMomMatchCallHeader = { .type = 0, - .v1 = 0, + .mapSec = MAPSEC_LITTLEROOT_TOWN, .flag = FLAG_ENABLE_MOM_MATCH_CALL, .desc = gMomMatchCallDesc, .name = gMomMatchCallName, @@ -396,7 +397,7 @@ static const match_call_text_data_t sStevenTextScripts[] = { static const struct MatchCallStruct0 sStevenMatchCallHeader = { .type = 0, - .v1 = 0xD5, + .mapSec = MAPSEC_NONE, .flag = FLAG_REGISTERED_STEVEN_POKENAV, .desc = gStevenMatchCallDesc, .name = gStevenMatchCallName, @@ -473,16 +474,16 @@ static const match_call_text_data_t sWallyTextScripts[] = { }; const struct MatchCallSubstruct2 sWallyAdditionalData[] = { - { FLAG_HIDE_MAUVILLE_CITY_WALLY, 0x05 }, - { FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, 0xD5 }, - { FLAG_HIDE_VICTORY_ROAD_ENTRANCE_WALLY, 0x46 }, - { 0xFFFF, 0xD5 } + { FLAG_HIDE_MAUVILLE_CITY_WALLY, MAPSEC_VERDANTURF_TOWN }, + { FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT, MAPSEC_NONE }, + { FLAG_HIDE_VICTORY_ROAD_ENTRANCE_WALLY, MAPSEC_VICTORY_ROAD }, + { 0xFFFF, MAPSEC_NONE } }; static const struct MatchCallStruct2 sWallyMatchCallHeader = { .type = 2, - .v1 = 0, + .mapSec = 0, .flag = FLAG_ENABLE_WALLY_MATCH_CALL, .rematchTableIdx = REMATCH_WALLY_3, .desc = gWallyMatchCallDesc, @@ -505,7 +506,7 @@ static const match_call_text_data_t sScottTextScripts[] = { static const struct MatchCallStruct0 sScottMatchCallHeader = { .type = 0, - .v1 = 0xD5, + .mapSec = MAPSEC_NONE, .flag = FLAG_ENABLE_SCOTT_MATCH_CALL, .desc = gScottMatchCallDesc, .name = gScottMatchCallName, @@ -523,7 +524,7 @@ static const match_call_text_data_t sRoxanneTextScripts[] = { static const struct MatchCallStruct5 sRoxanneMatchCallHeader = { .type = 5, - .v1 = 10, + .mapSec = MAPSEC_RUSTBORO_CITY, .flag = FLAG_ENABLE_ROXANNE_MATCH_CALL, .rematchTableIdx = REMATCH_ROXANNE, .desc = gRoxanneMatchCallDesc, @@ -542,7 +543,7 @@ static const match_call_text_data_t sBrawlyTextScripts[] = { static const struct MatchCallStruct5 sBrawlyMatchCallHeader = { .type = 5, - .v1 = 2, + .mapSec = MAPSEC_DEWFORD_TOWN, .flag = FLAG_ENABLE_BRAWLY_MATCH_CALL, .rematchTableIdx = REMATCH_BRAWLY, .desc = gBrawlyMatchCallDesc, @@ -561,7 +562,7 @@ static const match_call_text_data_t sWattsonTextScripts[] = { static const struct MatchCallStruct5 sWattsonMatchCallHeader = { .type = 5, - .v1 = 9, + .mapSec = MAPSEC_MAUVILLE_CITY, .flag = FLAG_ENABLE_WATTSON_MATCH_CALL, .rematchTableIdx = REMATCH_WATTSON, .desc = gWattsonMatchCallDesc, @@ -580,7 +581,7 @@ static const match_call_text_data_t sFlanneryTextScripts[] = { static const struct MatchCallStruct5 sFlanneryMatchCallHeader = { .type = 5, - .v1 = 3, + .mapSec = MAPSEC_LAVARIDGE_TOWN, .flag = FLAG_ENABLE_FLANNERY_MATCH_CALL, .rematchTableIdx = REMATCH_FLANNERY, .desc = gFlanneryMatchCallDesc, @@ -599,7 +600,7 @@ static const match_call_text_data_t sWinonaTextScripts[] = { static const struct MatchCallStruct5 sWinonaMatchCallHeader = { .type = 5, - .v1 = 11, + .mapSec = MAPSEC_FORTREE_CITY, .flag = FLAG_ENABLE_WINONA_MATCH_CALL, .rematchTableIdx = REMATCH_WINONA, .desc = gWinonaMatchCallDesc, @@ -618,7 +619,7 @@ static const match_call_text_data_t sTateLizaTextScripts[] = { static const struct MatchCallStruct5 sTateLizaMatchCallHeader = { .type = 5, - .v1 = 13, + .mapSec = MAPSEC_MOSSDEEP_CITY, .flag = FLAG_ENABLE_TATE_AND_LIZA_MATCH_CALL, .rematchTableIdx = REMATCH_TATE_AND_LIZA, .desc = gTateLizaMatchCallDesc, @@ -637,7 +638,7 @@ static const match_call_text_data_t sJuanTextScripts[] = { static const struct MatchCallStruct5 sJuanMatchCallHeader = { .type = 5, - .v1 = 14, + .mapSec = MAPSEC_SOOTOPOLIS_CITY, .flag = FLAG_ENABLE_JUAN_MATCH_CALL, .rematchTableIdx = REMATCH_JUAN, .desc = gJuanMatchCallDesc, @@ -653,7 +654,7 @@ static const match_call_text_data_t sSidneyTextScripts[] = { static const struct MatchCallStruct5 sSidneyMatchCallHeader = { .type = 5, - .v1 = 15, + .mapSec = MAPSEC_EVER_GRANDE_CITY, .flag = FLAG_REMATCH_SIDNEY, .rematchTableIdx = REMATCH_SIDNEY, .desc = gEliteFourMatchCallDesc, @@ -669,7 +670,7 @@ static const match_call_text_data_t sPhoebeTextScripts[] = { static const struct MatchCallStruct5 sPhoebeMatchCallHeader = { .type = 5, - .v1 = 15, + .mapSec = MAPSEC_EVER_GRANDE_CITY, .flag = FLAG_REMATCH_PHOEBE, .rematchTableIdx = REMATCH_PHOEBE, .desc = gEliteFourMatchCallDesc, @@ -685,7 +686,7 @@ static const match_call_text_data_t sGlaciaTextScripts[] = { static const struct MatchCallStruct5 sGlaciaMatchCallHeader = { .type = 5, - .v1 = 15, + .mapSec = MAPSEC_EVER_GRANDE_CITY, .flag = FLAG_REMATCH_GLACIA, .rematchTableIdx = REMATCH_GLACIA, .desc = gEliteFourMatchCallDesc, @@ -701,7 +702,7 @@ static const match_call_text_data_t sDrakeTextScripts[] = { static const struct MatchCallStruct5 sDrakeMatchCallHeader = { .type = 5, - .v1 = 15, + .mapSec = MAPSEC_EVER_GRANDE_CITY, .flag = FLAG_REMATCH_DRAKE, .rematchTableIdx = REMATCH_DRAKE, .desc = gEliteFourMatchCallDesc, @@ -717,7 +718,7 @@ static const match_call_text_data_t sWallaceTextScripts[] = { static const struct MatchCallStruct5 sWallaceMatchCallHeader = { .type = 5, - .v1 = 15, + .mapSec = MAPSEC_EVER_GRANDE_CITY, .flag = FLAG_REMATCH_WALLACE, .rematchTableIdx = REMATCH_WALLACE, .desc = gChampionMatchCallDesc, @@ -753,24 +754,24 @@ static bool32 (*const sMatchCallGetFlagFuncs[])(match_call_t) = { MatchCallGetFlag_Type0, MatchCallGetFlag_Type1, MatchCallGetFlag_Type2, - MatchCallGetFlag_Type3, - MatchCallGetFlag_Type4 + MatchCallGetFlag_Type4, + MatchCallGetFlag_Type3 }; -static u8 (*const gUnknown_08625310[])(match_call_t) = { - sub_81D1714, - sub_81D1718, - sub_81D171C, - sub_81D1750, - sub_81D1754 +static u8 (*const sMatchCallGetMapSecFuncs[])(match_call_t) = { + MatchCallGetMapSec_Type0, + MatchCallGetMapSec_Type1, + MatchCallGetMapSec_Type2, + MatchCallGetMapSec_Type4, + MatchCallGetMapSec_Type3 }; static bool32 (*const sMatchCall_IsRematchableFunctions[])(match_call_t) = { MatchCall_IsRematchable_Type0, MatchCall_IsRematchable_Type1, MatchCall_IsRematchable_Type2, - MatchCall_IsRematchable_Type3, - MatchCall_IsRematchable_Type4 + MatchCall_IsRematchable_Type4, + MatchCall_IsRematchable_Type3 }; static bool32 (*const gUnknown_08625338[])(match_call_t) = { @@ -785,24 +786,24 @@ static u32 (*const sMatchCall_GetRematchTableIdxFunctions[])(match_call_t) = { MatchCall_GetRematchTableIdx_Type0, MatchCall_GetRematchTableIdx_Type1, MatchCall_GetRematchTableIdx_Type2, - MatchCall_GetRematchTableIdx_Type3, - MatchCall_GetRematchTableIdx_Type4 + MatchCall_GetRematchTableIdx_Type4, + MatchCall_GetRematchTableIdx_Type3 }; static void (*const sMatchCall_GetMessageFunctions[])(match_call_t, u8 *) = { MatchCall_GetMessage_Type0, MatchCall_GetMessage_Type1, MatchCall_GetMessage_Type2, - MatchCall_GetMessage_Type3, - MatchCall_GetMessage_Type4 + MatchCall_GetMessage_Type4, + MatchCall_GetMessage_Type3 }; static void (*const sMatchCall_GetNameAndDescFunctions[])(match_call_t, const u8 **, const u8 **) = { MatchCall_GetNameAndDesc_Type0, MatchCall_GetNameAndDesc_Type1, MatchCall_GetNameAndDesc_Type2, - MatchCall_GetNameAndDesc_Type3, - MatchCall_GetNameAndDesc_Type4 + MatchCall_GetNameAndDesc_Type4, + MatchCall_GetNameAndDesc_Type3 }; static const struct UnkStruct_08625388 sMatchCallCheckPageOverrides[] = { @@ -883,7 +884,7 @@ static bool32 MatchCallGetFlag_Type2(match_call_t matchCall) return FlagGet(matchCall.type2->flag); } -static bool32 MatchCallGetFlag_Type3(match_call_t matchCall) +static bool32 MatchCallGetFlag_Type4(match_call_t matchCall) { if (matchCall.type4->gender != gSaveBlock2Ptr->playerGender) return FALSE; @@ -892,12 +893,12 @@ static bool32 MatchCallGetFlag_Type3(match_call_t matchCall) return FlagGet(matchCall.type4->flag); } -static bool32 MatchCallGetFlag_Type4(match_call_t matchCall) +static bool32 MatchCallGetFlag_Type3(match_call_t matchCall) { return FlagGet(matchCall.type3->flag); } -u8 sub_81D16DC(u32 idx) +u8 MatchCallMapSecGetByIndex(u32 idx) { match_call_t matchCall; u32 i; @@ -906,20 +907,20 @@ u8 sub_81D16DC(u32 idx) return 0; matchCall = sMatchCallHeaders[idx]; i = MatchCallGetFunctionIndex(matchCall); - return gUnknown_08625310[i](matchCall); + return sMatchCallGetMapSecFuncs[i](matchCall); } -static u8 sub_81D1714(match_call_t matchCall) +static u8 MatchCallGetMapSec_Type0(match_call_t matchCall) { - return matchCall.type0->v1; + return matchCall.type0->mapSec; } -static u8 sub_81D1718(match_call_t matchCall) +static u8 MatchCallGetMapSec_Type1(match_call_t matchCall) { - return matchCall.type1->v1; + return matchCall.type1->mapSec; } -static u8 sub_81D171C(match_call_t matchCall) +static u8 MatchCallGetMapSec_Type2(match_call_t matchCall) { s32 i; @@ -928,17 +929,17 @@ static u8 sub_81D171C(match_call_t matchCall) if (!FlagGet(matchCall.type2->v10[i].flag)) break; } - return matchCall.type2->v10[i].v2; + return matchCall.type2->v10[i].mapSec; } -static u8 sub_81D1750(match_call_t matchCall) +static u8 MatchCallGetMapSec_Type4(match_call_t matchCall) { - return 0xd5; + return MAPSEC_NONE; } -static u8 sub_81D1754(match_call_t matchCall) +static u8 MatchCallGetMapSec_Type3(match_call_t matchCall) { - return 0xd5; + return MAPSEC_NONE; } bool32 MatchCall_IsRematchable(u32 idx) @@ -970,12 +971,12 @@ static bool32 MatchCall_IsRematchable_Type2(match_call_t matchCall) return gSaveBlock1Ptr->trainerRematches[matchCall.type2->rematchTableIdx] ? TRUE : FALSE; } -static bool32 MatchCall_IsRematchable_Type3(match_call_t matchCall) +static bool32 MatchCall_IsRematchable_Type4(match_call_t matchCall) { return FALSE; } -static bool32 MatchCall_IsRematchable_Type4(match_call_t matchCall) +static bool32 MatchCall_IsRematchable_Type3(match_call_t matchCall) { return FALSE; } @@ -1051,12 +1052,12 @@ static u32 MatchCall_GetRematchTableIdx_Type2(match_call_t matchCall) return matchCall.type2->rematchTableIdx; } -static u32 MatchCall_GetRematchTableIdx_Type3(match_call_t matchCall) +static u32 MatchCall_GetRematchTableIdx_Type4(match_call_t matchCall) { return REMATCH_TABLE_ENTRIES; } -static u32 MatchCall_GetRematchTableIdx_Type4(match_call_t matchCall) +static u32 MatchCall_GetRematchTableIdx_Type3(match_call_t matchCall) { return REMATCH_TABLE_ENTRIES; } @@ -1091,12 +1092,12 @@ static void MatchCall_GetMessage_Type2(match_call_t matchCall, u8 *dest) sub_81D1920(matchCall.type2->textData, dest); } -static void MatchCall_GetMessage_Type3(match_call_t matchCall, u8 *dest) +static void MatchCall_GetMessage_Type4(match_call_t matchCall, u8 *dest) { sub_81D1920(matchCall.type4->textData, dest); } -static void MatchCall_GetMessage_Type4(match_call_t matchCall, u8 *dest) +static void MatchCall_GetMessage_Type3(match_call_t matchCall, u8 *dest) { sub_8197080(dest); } @@ -1190,13 +1191,13 @@ static void MatchCall_GetNameAndDesc_Type2(match_call_t matchCall, const u8 **de *desc = matchCall.type2->desc; } -static void MatchCall_GetNameAndDesc_Type3(match_call_t matchCall, const u8 **desc, const u8 **name) +static void MatchCall_GetNameAndDesc_Type4(match_call_t matchCall, const u8 **desc, const u8 **name) { *desc = matchCall.type4->desc; *name = matchCall.type4->name; } -static void MatchCall_GetNameAndDesc_Type4(match_call_t matchCall, const u8 **desc, const u8 **name) +static void MatchCall_GetNameAndDesc_Type3(match_call_t matchCall, const u8 **desc, const u8 **name) { *desc = matchCall.type3->desc; *name = matchCall.type3->name; @@ -1209,7 +1210,6 @@ static void MatchCall_GetNameAndDescByRematchIdx(u32 idx, const u8 **desc, const *name = trainer->trainerName; } -#ifdef NONMATCHING const u8 *sub_81D1B40(u32 idx, u32 offset) { u32 i; @@ -1218,95 +1218,21 @@ const u8 *sub_81D1B40(u32 idx, u32 offset) { if (sMatchCallCheckPageOverrides[i].idx == idx) { - for (; i + 1 < ARRAY_COUNT(sMatchCallCheckPageOverrides) && sMatchCallCheckPageOverrides[i + 1].idx == idx; i++) + while (1) { + if (i + 1 >= ARRAY_COUNT(sMatchCallCheckPageOverrides)) + break; + if (sMatchCallCheckPageOverrides[i + 1].idx != idx) + break; if (!FlagGet(sMatchCallCheckPageOverrides[i + 1].v4)) break; + i++; } return sMatchCallCheckPageOverrides[i].v8[offset]; } } return NULL; } -#else -NAKED const u8 *sub_81D1B40(u32 idx, u32 offset) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r9\n" - "\tmov r6, r8\n" - "\tpush {r6,r7}\n" - "\tadds r6, r0, 0\n" - "\tmovs r5, 0\n" - "\tldr r2, =sMatchCallCheckPageOverrides\n" - "\tmovs r0, 0x8\n" - "\tadds r0, r2\n" - "\tmov r9, r0\n" - "_081D1B54:\n" - "\tlsls r0, r5, 1\n" - "\tadds r0, r5\n" - "\tlsls r0, 3\n" - "\tadds r0, r2\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, r6\n" - "\tbne _081D1BBC\n" - "\tadds r4, r5, 0x1\n" - "\tlsls r1, 2\n" - "\tmov r8, r1\n" - "\tcmp r4, 0x3\n" - "\tbhi _081D1BA8\n" - "\tlsls r0, r4, 1\n" - "\tadds r0, r4\n" - "\tlsls r0, 3\n" - "\tadds r0, r2\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, r6\n" - "\tbne _081D1BA8\n" - "\tldr r7, =sMatchCallCheckPageOverrides\n" - "_081D1B7C:\n" - "\tlsls r0, r4, 1\n" - "\tadds r0, r4\n" - "\tlsls r0, 3\n" - "\tadds r1, r7, 0x4\n" - "\tadds r0, r1\n" - "\tldrh r0, [r0]\n" - "\tbl FlagGet\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _081D1BA8\n" - "\tadds r5, r4, 0\n" - "\tadds r4, r5, 0x1\n" - "\tcmp r4, 0x3\n" - "\tbhi _081D1BA8\n" - "\tlsls r0, r4, 1\n" - "\tadds r0, r4\n" - "\tlsls r0, 3\n" - "\tadds r0, r7\n" - "\tldrh r0, [r0]\n" - "\tcmp r0, r6\n" - "\tbeq _081D1B7C\n" - "_081D1BA8:\n" - "\tlsls r0, r5, 1\n" - "\tadds r0, r5\n" - "\tlsls r0, 3\n" - "\tadd r0, r8\n" - "\tadd r0, r9\n" - "\tldr r0, [r0]\n" - "\tb _081D1BC4\n" - "\t.pool\n" - "_081D1BBC:\n" - "\tadds r5, 0x1\n" - "\tcmp r5, 0x3\n" - "\tbls _081D1B54\n" - "\tmovs r0, 0\n" - "_081D1BC4:\n" - "\tpop {r3,r4}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1"); -} -#endif int sub_81D1BD0(u32 idx) { diff --git a/src/pokenav_match_call_ui.c b/src/pokenav_match_call_ui.c index 795b4d599..bae3a8d7a 100644 --- a/src/pokenav_match_call_ui.c +++ b/src/pokenav_match_call_ui.c @@ -1164,4 +1164,4 @@ u32 sub_81C91AC(struct UnknownInnerStruct_81C81D4 *a0, const struct BgTemplate * a0->downArrow = NULL; return 1; } -}
\ No newline at end of file +} diff --git a/src/pokenav_unk_10.c b/src/pokenav_unk_10.c new file mode 100644 index 000000000..51dcd3687 --- /dev/null +++ b/src/pokenav_unk_10.c @@ -0,0 +1,1163 @@ +#include "global.h" +#include "decompress.h" +#include "dynamic_placeholder_text_util.h" +#include "graphics.h" +#include "international_string_util.h" +#include "pokenav.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" +#include "trainer_pokemon_sprites.h" +#include "window.h" +#include "constants/songs.h" + +struct PokenavSub13 +{ + u8 filler0[0x8]; + struct PokenavSub18 *field_8; + u16 field_C; + u16 field_E; + u16 field_10; + u16 field_12; + u32 field_14[25]; + u32 field_78[8]; + u32 (*field_98)(struct PokenavSub13 *structPtr); +}; + +struct PokenavSub14 +{ + u32 (*field_0)(void); + u32 loopedTaskId; + u16 field_8; + u16 field_A; + u16 field_C; + u16 field_E; + u16 field_10; + struct Sprite *field_14; + u32 filler; + u8 tilemapBuffers[2][BG_SCREEN_SIZE]; +}; + +static u32 gUnknown_030012C0; +static u32 gUnknown_030012C4; + +void sub_81D0E84(struct PokenavSub14 *structPtr); +void sub_81D0FF0(struct PokenavSub14 *structPtr); +void sub_81D10D0(struct PokenavSub14 *structPtr); +void sub_81D1500(struct PokenavSub14 *structPtr); +void sub_81D0EFC(struct PokenavSub14 *structPtr); +void sub_81D1148(struct PokenavSub14 *structPtr); +void sub_81D10A4(struct PokenavSub14 *structPtr); +void sub_81D1178(struct PokenavSub14 *structPtr); +void sub_81D11D8(struct PokenavSub14 *structPtr); +void sub_81D11FC(struct PokenavSub14 *structPtr); +void sub_81D0E60(struct PokenavSub14 *structPtr); +void sub_81D1448(struct PokenavSub14 *structPtr); +void sub_81D13FC(struct PokenavSub14 *structPtr); +void sub_81D0FCC(struct PokenavSub14 *structPtr); +void sub_81D12D8(struct PokenavSub14 *structPtr); +bool32 sub_81D1524(struct PokenavSub14 *structPtr); +bool32 sub_81D1234(struct PokenavSub14 *structPtr); +void sub_81D0814(struct PokenavSub13 *structPtr); +u32 sub_81D0548(struct PokenavSub13 *structPtr); +u32 sub_81D04C4(struct PokenavSub13 *structPtr); +u32 sub_81D05D4(struct PokenavSub13 *structPtr); +bool32 sub_81D05DC(struct PokenavSub13 *structPtr); +bool32 sub_81D0688(struct PokenavSub13 *structPtr); +bool32 sub_81D0664(struct PokenavSub13 *structPtr); +bool32 sub_81D061C(struct PokenavSub13 *structPtr); +bool32 sub_81D0688(struct PokenavSub13 *structPtr); +bool32 sub_81D0A58(void); +u32 sub_81D06C4(void); +u32 sub_81D06D4(void); +u16 sub_81D1184(s32 unused0, s32 unused1); +void sub_81D1258(struct Sprite *sprite, s32 arg1, s32 arg2, s32 arg3); +void sub_81D1284(struct Sprite *sprite); +void sub_81D1350(void); +void sub_81D13BC(u16 *dst, u32 id); +void sub_81D1370(u32 arg0, u32 id); +void sub_81D1538(struct Sprite *sprite); +u32 sub_81D0A6C(s32 state); +u32 sub_81D0C84(s32 state); +u32 sub_81D0D2C(s32 state); +u32 sub_81D0D8C(s32 state); +u32 sub_81D0E00(s32 state); +u32 sub_81D0C54(s32 state); + +struct +{ + u8 unk0; + u8 unk1; + u8 unk2; + u8 unk3; +} static const gUnknown_086237F8[] = +{ + {1, 1, 0, 0}, + {3, 4, 1, 0}, + {3, 4, 5, 0}, + {3, 4, 9, 0}, + {3, 4, 13, 0}, + {3, 4, 17, 0}, + {1, 1, 21, 0}, + {1, 1, 22, 0}, + {1, 1, 23, 0}, + {1, 1, 24, 0}, + {1, 1, 25, 1}, + {1, 1, 26, 1}, + {1, 1, 27, 1}, + {1, 1, 28, 1}, + {1, 1, 29, 1}, + {1, 1, 30, 1}, + {1, 1, 31, 1} +}; + +#include "data/text/ribbon_descriptions.h" +#include "data/text/gift_ribbon_descriptions.h" + +static const u16 gUnknown_08623FF8[] = INCBIN_U16("graphics/pokenav/ribbons_icon1.gbapal"); +static const u16 gUnknown_08624018[] = INCBIN_U16("graphics/pokenav/ribbons_icon2.gbapal"); +static const u16 gUnknown_08624038[] = INCBIN_U16("graphics/pokenav/ribbons_icon3.gbapal"); +static const u16 gUnknown_08624058[] = INCBIN_U16("graphics/pokenav/ribbons_icon4.gbapal"); +static const u16 gUnknown_08624078[] = INCBIN_U16("graphics/pokenav/ribbons_icon5.gbapal"); +static const u16 gUnknown_08624098[] = INCBIN_U16("graphics/pokenav/8624098.gbapal"); +static const u32 gUnknown_086240B8[] = INCBIN_U32("graphics/pokenav/ribbons_icon.4bpp.lz"); +static const u32 gUnknown_08624280[] = INCBIN_U32("graphics/pokenav/ribbons_icon_big.4bpp.lz"); + +static const struct BgTemplate gUnknown_08624B98[] = +{ + { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 0x07, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 0x06, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + } +}; + +static const LoopedTask gUnknown_08624BA0[] = +{ + NULL, + sub_81D0C84, + sub_81D0D2C, + sub_81D0D8C, + sub_81D0E00, + sub_81D0C54 +}; + +// code +bool32 sub_81D0450(void) +{ + struct PokenavSub13 *structPtr = AllocSubstruct(13, sizeof(struct PokenavSub13)); + if (structPtr == NULL) + return FALSE; + + structPtr->field_8 = GetSubstructPtr(18); + if (structPtr->field_8 == NULL) + return FALSE; + + sub_81D0814(structPtr); + structPtr->field_98 = sub_81D04C4; + gKeyRepeatContinueDelay = 3; + gKeyRepeatStartDelay = 10; + return TRUE; +} + +u32 sub_81D04A0(void) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + return structPtr->field_98(structPtr); +} + +void sub_81D04B8(void) +{ + FreePokenavSubstruct(13); +} + +u32 sub_81D04C4(struct PokenavSub13 *structPtr) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP && structPtr->field_8->unk2 != 0) + { + structPtr->field_8->unk2--; + structPtr->field_C = 0; + sub_81D0814(structPtr); + return 1; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN && structPtr->field_8->unk2 < structPtr->field_8->unk0 - 1) + { + structPtr->field_8->unk2++; + structPtr->field_C = 0; + sub_81D0814(structPtr); + return 1; + } + else if (gMain.newKeys & A_BUTTON) + { + structPtr->field_98 = sub_81D0548; + return 2; + } + else if (gMain.newKeys & B_BUTTON) + { + structPtr->field_98 = sub_81D05D4; + return 5; + } + return 0; +} + +u32 sub_81D0548(struct PokenavSub13 *structPtr) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP && sub_81D05DC(structPtr)) + return 3; + else if (gMain.newAndRepeatedKeys & DPAD_DOWN && sub_81D061C(structPtr)) + return 3; + else if (gMain.newAndRepeatedKeys & DPAD_LEFT && sub_81D0664(structPtr)) + return 3; + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT && sub_81D0688(structPtr)) + return 3; + else if (gMain.newKeys & B_BUTTON) + { + structPtr->field_98 = sub_81D04C4; + return 4; + } + return 0; +} + +u32 sub_81D05D4(struct PokenavSub13 *structPtr) +{ + return 0x186ae; +} + +bool32 sub_81D05DC(struct PokenavSub13 *structPtr) +{ + if (structPtr->field_C < 25) + { + if (structPtr->field_C <= 8) + return FALSE; + + structPtr->field_C -= 9; + return TRUE; + } + if (structPtr->field_10 != 0) + { + u32 var = structPtr->field_C - 27; + structPtr->field_C = var + structPtr->field_E; + if (structPtr->field_C >= structPtr->field_10) + structPtr->field_C = structPtr->field_10 - 1; + return TRUE; + } + return FALSE; +} + +bool32 sub_81D061C(struct PokenavSub13 *structPtr) +{ + if (structPtr->field_C >= 25) + return FALSE; + if (structPtr->field_C < structPtr->field_E) + { + structPtr->field_C += 9; + if (structPtr->field_C >= structPtr->field_10) + structPtr->field_C = structPtr->field_10 - 1; + return TRUE; + } + if (structPtr->field_12 != 0) + { + int var = structPtr->field_C - structPtr->field_E; + if (var >= structPtr->field_12) + var = structPtr->field_12 - 1; + + structPtr->field_C = var + 27; + return TRUE; + } + return FALSE; +} + +bool32 sub_81D0664(struct PokenavSub13 *structPtr) +{ + u16 var = structPtr->field_C % 9; + if (var != 0) + { + structPtr->field_C--; + return TRUE; + } + + return FALSE; +} + +bool32 sub_81D0688(struct PokenavSub13 *structPtr) +{ + int r1 = structPtr->field_C % 9; + + if (r1 >= 8) + return FALSE; + + if (structPtr->field_C <= 26) + { + if (structPtr->field_C < structPtr->field_10 - 1) + { + structPtr->field_C++; + return TRUE; + } + } + else + { + if (r1 < structPtr->field_12 - 1) + { + structPtr->field_C++; + return TRUE; + } + } + return FALSE; +} + +u32 sub_81D06C4(void) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + return structPtr->field_8->unk2; +} + +u32 sub_81D06D4(void) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + return structPtr->field_8->unk0; +} + +static void GetCurrMonInfo1(u8 *nick, u8 *level, u8 *gender) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + struct PokenavSub18 *mons = structPtr->field_8; + struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + + if (monInfo->boxId == TOTAL_BOXES_COUNT) + { + struct Pokemon *mon = &gPlayerParty[monInfo->monId]; + GetMonData(mon, MON_DATA_NICKNAME, nick); + *level = GetLevelFromMonExp(mon); + *gender = GetMonGender(mon); + } + else + { + struct BoxPokemon *boxMon = GetBoxedMonPtr(monInfo->boxId, monInfo->monId); + *gender = GetBoxMonGender(boxMon); + *level = GetLevelFromBoxMonExp(boxMon); + GetBoxMonData(boxMon, MON_DATA_NICKNAME, nick); + } + StringGetEnd10(nick); +} + +static void GetCurrMonInfo2(u16 *species, u32 *personality, u32 *otId) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + struct PokenavSub18 *mons = structPtr->field_8; + struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + + if (monInfo->boxId == TOTAL_BOXES_COUNT) + { + struct Pokemon *mon = &gPlayerParty[monInfo->monId]; + *species = GetMonData(mon, MON_DATA_SPECIES); + *personality = GetMonData(mon, MON_DATA_PERSONALITY); + *otId = GetMonData(mon, MON_DATA_OT_ID); + } + else + { + struct BoxPokemon *boxMon = GetBoxedMonPtr(monInfo->boxId, monInfo->monId); + *species = GetBoxMonData(boxMon, MON_DATA_SPECIES); + *personality = GetBoxMonData(boxMon, MON_DATA_PERSONALITY); + *otId = GetBoxMonData(boxMon, MON_DATA_OT_ID); + } +} + +static u32 GetCurrMonRibbonCount(void) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + struct PokenavSub18 *mons = structPtr->field_8; + struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + + if (monInfo->boxId == TOTAL_BOXES_COUNT) + return GetMonData(&gPlayerParty[monInfo->monId], MON_DATA_RIBBON_COUNT); + else + return GetBoxMonDataAt(monInfo->boxId, monInfo->monId, MON_DATA_RIBBON_COUNT); +} + +void sub_81D0814(struct PokenavSub13 *structPtr) +{ + u32 ribbons; + s32 i, j; + struct PokenavSub18 *mons = structPtr->field_8; + struct PokenavMonList *monInfo = &mons->unk4[mons->unk2]; + + if (monInfo->boxId == TOTAL_BOXES_COUNT) + ribbons = GetMonData(&gPlayerParty[monInfo->monId], MON_DATA_RIBBONS); + else + ribbons = GetBoxMonDataAt(monInfo->boxId, monInfo->monId, MON_DATA_RIBBONS); + + structPtr->field_10 = 0; + structPtr->field_12 = 0; + for (i = 0; i < ARRAY_COUNT(gUnknown_086237F8); i++) + { + s32 r4 = ((1 << gUnknown_086237F8[i].unk0) - 1) & ribbons; + if (gUnknown_086237F8[i].unk3 == 0) + { + for (j = 0; j < r4; j++) + structPtr->field_14[structPtr->field_10++] = gUnknown_086237F8[i].unk2 + j; + } + else + { + for (j = 0; j < r4; j++) + structPtr->field_78[structPtr->field_12++] = gUnknown_086237F8[i].unk2 + j; + } + ribbons >>= gUnknown_086237F8[i].unk0; + } + + if (structPtr->field_10 != 0) + { + structPtr->field_E = ((structPtr->field_10 - 1) / 9) * 9; + structPtr->field_C = 0; + } + else + { + structPtr->field_E = 0; + structPtr->field_C = 27; + } +} + +u32 *sub_81D0914(u32 *arg0) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + *arg0 = structPtr->field_10; + return structPtr->field_14; +} + +u32 *sub_81D092C(u32 *arg0) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + *arg0 = structPtr->field_12; + return structPtr->field_78; +} + +u16 sub_81D0944(void) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + return structPtr->field_C; +} + +u32 sub_81D0954(void) +{ + struct PokenavSub13 *structPtr = GetSubstructPtr(13); + int var = structPtr->field_C; + if (var <= 24) + return structPtr->field_14[var]; + else + return structPtr->field_78[var - 27]; +} + +bool32 sub_81D0978(void) +{ + struct PokenavSub14 *structPtr = AllocSubstruct(14, sizeof(struct PokenavSub14)); + if (structPtr == NULL) + return FALSE; + + structPtr->loopedTaskId = CreateLoopedTask(sub_81D0A6C, 1); + structPtr->field_0 = sub_81D0A58; + return TRUE; +} + +void sub_81D09B0(int id) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + structPtr->loopedTaskId = CreateLoopedTask(gUnknown_08624BA0[id], 1); + structPtr->field_0 = sub_81D0A58; +} + +u32 sub_81D09E0(void) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + return structPtr->field_0(); +} + +void sub_81D09F4(void) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + RemoveWindow(structPtr->field_A); + RemoveWindow(structPtr->field_8); + RemoveWindow(structPtr->field_C); + RemoveWindow(structPtr->field_E); + sub_81D1178(structPtr); + FreeSpriteTilesByTag(9); + FreeSpritePaletteByTag(0xF); + FreeSpritePaletteByTag(0x10); + FreeSpritePaletteByTag(0x11); + FreeSpritePaletteByTag(0x12); + FreeSpritePaletteByTag(0x13); + FreeSpriteOamMatrix(structPtr->field_14); + DestroySprite(structPtr->field_14); + FreePokenavSubstruct(14); +} + +bool32 sub_81D0A58(void) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + return IsLoopedTaskActive(structPtr->loopedTaskId); +} + +u32 sub_81D0A6C(s32 state) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + switch (state) + { + case 0: + InitBgTemplates(gUnknown_08624B98, ARRAY_COUNT(gUnknown_08624B98)); + decompress_and_copy_tile_data_to_vram(2, gUnknown_08DDE030, 0, 0, 0); + SetBgTilemapBuffer(2, structPtr->tilemapBuffers[0]); + CopyToBgTilemapBuffer(2, gUnknown_08DDE12C, 0, 0); + CopyPaletteIntoBufferUnfaded(gUnknown_08DDE010, 0x10, 0x20); + CopyBgTilemapBufferToVram(2); + return LT_INC_AND_PAUSE; + case 1: + if (!free_temp_tile_data_buffers_if_possible()) + { + sub_8199DF0(1, 0, 0, 1); + decompress_and_copy_tile_data_to_vram(1, gUnknown_086240B8, 0, 1, 0); + SetBgTilemapBuffer(1, structPtr->tilemapBuffers[1]); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20); + CopyPaletteIntoBufferUnfaded(gUnknown_08623FF8, 0x20, 0xA0); + CopyPaletteIntoBufferUnfaded(gUnknown_08624098, 0xA0, 0x20); + CopyBgTilemapBufferToVram(1); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 2: + if (!free_temp_tile_data_buffers_if_possible()) + { + sub_81D0E60(structPtr); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 3: + if (!free_temp_tile_data_buffers_if_possible()) + { + sub_81D0FCC(structPtr); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 4: + if (!free_temp_tile_data_buffers_if_possible()) + { + sub_81D10A4(structPtr); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 5: + if (!IsDma3ManagerBusyWithBgCopy()) + { + CopyBgTilemapBufferToVram(2); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 6: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_81D1148(structPtr); + return LT_INC_AND_CONTINUE; + } + return LT_PAUSE; + case 7: + sub_81D12D8(structPtr); + sub_81C7BA4(10); + return LT_INC_AND_PAUSE; + case 8: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_81D13FC(structPtr); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ShowBg(1); + ShowBg(2); + HideBg(3); + sub_81C7AC0(1); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 9: + if (IsPaletteFadeActive()) + return LT_PAUSE; + return LT_FINISH; + } + return LT_FINISH; +} + +u32 sub_81D0C54(s32 state) +{ + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81C7AC0(0); + return LT_INC_AND_PAUSE; + case 1: + if (IsPaletteFadeActive()) + return LT_PAUSE; + return LT_FINISH; + } + return LT_FINISH; +} + +u32 sub_81D0C84(s32 state) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81D11D8(structPtr); + return LT_INC_AND_PAUSE; + case 1: + if (!sub_81D1234(structPtr)) + { + sub_81D0FF0(structPtr); + return LT_INC_AND_CONTINUE; + } + return LT_PAUSE; + case 2: + sub_81D12D8(structPtr); + return LT_INC_AND_CONTINUE; + case 3: + sub_81D10D0(structPtr); + return LT_INC_AND_CONTINUE; + case 4: + sub_81D0E84(structPtr); + return LT_INC_AND_CONTINUE; + case 5: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_81D11FC(structPtr); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 6: + if (sub_81D1234(structPtr)) + return LT_PAUSE; + return LT_FINISH; + } + return LT_FINISH; +} + +u32 sub_81D0D2C(s32 state) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81D1448(structPtr); + return LT_INC_AND_PAUSE; + case 1: + if (!sub_81D1524(structPtr)) + { + sub_81D0EFC(structPtr); + sub_81C7BA4(11); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 2: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + } + return LT_FINISH; +} + +u32 sub_81D0D8C(s32 state) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81D1500(structPtr); + return LT_INC_AND_PAUSE; + case 1: + if (!sub_81D1524(structPtr)) + { + sub_81D1448(structPtr); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 2: + if (!sub_81D1524(structPtr)) + { + sub_81D0EFC(structPtr); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + } + return LT_FINISH; +} + +u32 sub_81D0E00(s32 state) +{ + struct PokenavSub14 *structPtr = GetSubstructPtr(14); + switch (state) + { + case 0: + PlaySE(SE_SELECT); + sub_81D1500(structPtr); + return LT_INC_AND_PAUSE; + case 1: + if (!sub_81D1524(structPtr)) + { + sub_81D0E84(structPtr); + sub_81C7BA4(10); + return LT_INC_AND_PAUSE; + } + return LT_PAUSE; + case 2: + if (IsDma3ManagerBusyWithBgCopy()) + return LT_PAUSE; + } + return LT_FINISH; +} + +static const struct WindowTemplate gUnknown_08624BB8 = +{ + .bg = 2, + .tilemapLeft = 12, + .tilemapTop = 13, + .width = 16, + .height = 4, + .paletteNum = 1, + .baseBlock = 0x14, +}; + +void sub_81D0E60(struct PokenavSub14 *structPtr) +{ + structPtr->field_A = AddWindow(&gUnknown_08624BB8); + PutWindowTilemap(structPtr->field_A); + sub_81D0E84(structPtr); +} + +void sub_81D0E84(struct PokenavSub14 *structPtr) +{ + u8 color[] = {4, 2, 3}; + + ConvertIntToDecimalStringN(gStringVar1, GetCurrMonRibbonCount(), STR_CONV_MODE_LEFT_ALIGN, 2); + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); + DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, gText_RibbonsF700); + FillWindowPixelBuffer(structPtr->field_A, PIXEL_FILL(4)); + AddTextPrinterParameterized3(structPtr->field_A, 1, 0, 1, color, -1, gStringVar4); + CopyWindowToVram(structPtr->field_A, 2); +} + +void sub_81D0EFC(struct PokenavSub14 *structPtr) +{ + s32 i; + u32 ribbonId = sub_81D0954(); + u8 color[] = {4, 2, 3}; + + FillWindowPixelBuffer(structPtr->field_A, PIXEL_FILL(4)); + if (ribbonId < 25) + { + for (i = 0; i < 2; i++) + AddTextPrinterParameterized3(structPtr->field_A, 1, 0, (i * 16) + 1, color, -1, gRibbonDescriptionPointers[ribbonId][i]); + } + else + { + ribbonId = gSaveBlock1Ptr->giftRibbons[ribbonId - 25]; + if (ribbonId == 0) + return; + + ribbonId--; + for (i = 0; i < 2; i++) + AddTextPrinterParameterized3(structPtr->field_A, 1, 0, (i * 16) + 1, color, -1, gGiftRibbonDescriptionPointers[ribbonId][i]); + } + + CopyWindowToVram(structPtr->field_A, 2); +} + +static const struct WindowTemplate gUnknown_08624BC4 = +{ + .bg = 2, + .tilemapLeft = 14, + .tilemapTop = 1, + .width = 13, + .height = 2, + .paletteNum = 10, + .baseBlock = 0x54, +}; + +void sub_81D0FCC(struct PokenavSub14 *structPtr) +{ + structPtr->field_8 = AddWindow(&gUnknown_08624BC4); + PutWindowTilemap(structPtr->field_8); + sub_81D0FF0(structPtr); +} + +static const u8 sMaleIconString[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); +static const u8 sFemaleIconString[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); +static const u8 sGenderlessIconString[] = _("{UNK_SPACER}"); + +void sub_81D0FF0(struct PokenavSub14 *structPtr) +{ + const u8 *genderTxt; + u8 *txtPtr; + u8 level, gender; + u16 windowId = structPtr->field_8; + + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + GetCurrMonInfo1(gStringVar3, &level, &gender); + AddTextPrinterParameterized(windowId, 1, gStringVar3, 0, 1, TEXT_SPEED_FF, NULL); + switch (gender) + { + case MON_MALE: + genderTxt = sMaleIconString; + break; + case MON_FEMALE: + genderTxt = sFemaleIconString; + break; + default: + genderTxt = sGenderlessIconString; + break; + } + + txtPtr = StringCopy(gStringVar1, genderTxt); + *(txtPtr++) = CHAR_SLASH; + *(txtPtr++) = CHAR_SPECIAL_F9; + *(txtPtr++) = 5; + ConvertIntToDecimalStringN(txtPtr, level, STR_CONV_MODE_LEFT_ALIGN, 3); + AddTextPrinterParameterized(windowId, 1, gStringVar1, 60, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(windowId, 2); +} + +static const struct WindowTemplate gUnknown_08624BE8[] = +{ + { + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 5, + .width = 7, + .height = 2, + .paletteNum = 1, + .baseBlock = 0x6E, + }, + {}, +}; + +void sub_81D10A4(struct PokenavSub14 *structPtr) +{ + structPtr->field_C = AddWindow(gUnknown_08624BE8); + FillWindowPixelBuffer(structPtr->field_C, PIXEL_FILL(1)); + PutWindowTilemap(structPtr->field_C); + sub_81D10D0(structPtr); +} + +void sub_81D10D0(struct PokenavSub14 *structPtr) +{ + s32 x; + u8 *txtPtr; + u32 id = sub_81D06C4() + 1; + u32 count = sub_81D06D4(); + + txtPtr = ConvertIntToDecimalStringN(gStringVar1, id, STR_CONV_MODE_RIGHT_ALIGN, 3); + *(txtPtr++) = CHAR_SLASH; + ConvertIntToDecimalStringN(txtPtr, count, STR_CONV_MODE_RIGHT_ALIGN, 3); + x = GetStringCenterAlignXOffset(1, gStringVar1, 56); + AddTextPrinterParameterized(structPtr->field_C, 1, gStringVar1, x, 1, TEXT_SPEED_FF, NULL); + CopyWindowToVram(structPtr->field_C, 2); +} + +void sub_81D1148(struct PokenavSub14 *structPtr) +{ + u16 species; + u32 personality, otId; + + GetCurrMonInfo2(&species, &personality, &otId); + ResetAllPicSprites(); + structPtr->field_10 = sub_81D1184(40, 104); + sub_81C7990(15, 0); +} + +void sub_81D1178(struct PokenavSub14 *structPtr) +{ + FreeAndDestroyMonPicSprite(structPtr->field_10); +} + +u16 sub_81D1184(s32 unused0, s32 unused1) +{ + u16 species, spriteId; + u32 personality, otId; + + GetCurrMonInfo2(&species, &personality, &otId); + spriteId = CreateMonPicSprite_HandleDeoxys(species, otId, personality, TRUE, 40, 104, 15, 0xFFFF); + gSprites[spriteId].oam.priority = 0; + return spriteId; +} + +void sub_81D11D8(struct PokenavSub14 *structPtr) +{ + sub_81D1258(&gSprites[structPtr->field_10], 40, -32, 6); +} + +void sub_81D11FC(struct PokenavSub14 *structPtr) +{ + FreeAndDestroyMonPicSprite(structPtr->field_10); + structPtr->field_10 = sub_81D1184(-32, 104); + sub_81D1258(&gSprites[structPtr->field_10], -32, 40, 6); +} + +bool32 sub_81D1234(struct PokenavSub14 *structPtr) +{ + return (gSprites[structPtr->field_10].callback != SpriteCallbackDummy); +} + +void sub_81D1258(struct Sprite *sprite, s32 arg1, s32 arg2, s32 arg3) +{ + u32 var = arg2 - arg1; + + sprite->pos1.x = arg1; + sprite->data[0] = arg1 << 4; + sprite->data[1] = (var << 4) / arg3; + sprite->data[2] = arg3; + sprite->data[3] = arg2; + + sprite->callback = sub_81D1284; +} + +void sub_81D1284(struct Sprite *sprite) +{ + if (sprite->data[2] != 0) + { + sprite->data[2]--; + sprite->data[0] += sprite->data[1]; + sprite->pos1.x = sprite->data[0] >> 4; + if (sprite->pos1.x <= -32) + sprite->invisible = TRUE; + else + sprite->invisible = FALSE; + } + else + { + sprite->pos1.x = sprite->data[3]; + sprite->callback = SpriteCallbackDummy; + } +} + +void sub_81D12D8(struct PokenavSub14 *structPtr) +{ + u32 *ptr; + + sub_81D1350(); + + ptr = sub_81D0914(&gUnknown_030012C0); + for (gUnknown_030012C4 = 0; gUnknown_030012C4 < gUnknown_030012C0; gUnknown_030012C4++) + sub_81D1370(gUnknown_030012C4, *(ptr++)); + + ptr = sub_81D092C(&gUnknown_030012C0); + for (gUnknown_030012C4 = 0; gUnknown_030012C4 < gUnknown_030012C0; gUnknown_030012C4++) + sub_81D1370(gUnknown_030012C4 + 27, *(ptr++)); + + CopyBgTilemapBufferToVram(1); +} + +void sub_81D1350(void) +{ + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 20); +} + +void sub_81D1370(u32 arg0, u32 id) +{ + u16 bgData[4]; + u32 destX = (arg0 % 9) * 2 + 11; + u32 destY = (arg0 / 9) * 2 + 4; + + sub_81D13BC(bgData, id); + CopyToBgTilemapBufferRect(1, bgData, destX, destY, 2, 2); +} + +struct +{ + u16 var0; + u16 var2; +} static const gUnknown_08624BF8[] = +{ + {0, 0}, + {1, 0}, + {2, 0}, + {3, 0}, + {4, 0}, + {1, 1}, + {2, 1}, + {3, 1}, + {4, 1}, + {1, 2}, + {2, 2}, + {3, 2}, + {4, 2}, + {1, 3}, + {2, 3}, + {3, 3}, + {4, 3}, + {1, 4}, + {2, 4}, + {3, 4}, + {4, 4}, + {5, 0}, + {6, 0}, + {7, 1}, + {8, 2}, + {9, 1}, + {9, 3}, + {9, 4}, + {10, 3}, + {10, 4}, + {11, 0}, + {11, 1}, +}; + +void sub_81D13BC(u16 *dst, u32 id) +{ + u16 r3 = gUnknown_08624BF8[id].var2 + 2; + u16 r1 = (gUnknown_08624BF8[id].var0 * 2) + 1; + + dst[0] = r1 | (r3 << 12); + dst[1] = r1 | (r3 << 12) |0x400; + dst[2] = (r1 + 1) | (r3 << 12); + dst[3] = (r1 + 1) | (r3 << 12) | 0x400; +} + +static const struct CompressedSpriteSheet gUnknown_08624C78 = +{ + gUnknown_08624280, 0x1800, 9 +}; + +static const struct SpritePalette gUnknown_08624C80[] = +{ + {gUnknown_08623FF8, 15}, + {gUnknown_08624018, 16}, + {gUnknown_08624038, 17}, + {gUnknown_08624058, 18}, + {gUnknown_08624078, 19}, + {}, +}; + +static const struct OamData sOamData_8624CB0 = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(32x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x32), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AffineAnimCmd sSpriteAffineAnim_8624CB8[] = +{ + AFFINEANIMCMD_FRAME(128, 128, 0, 0), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sSpriteAffineAnim_8624CC8[] = +{ + AFFINEANIMCMD_FRAME(128, 128, 0, 0), + AFFINEANIMCMD_FRAME(32, 32, 0, 4), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd sSpriteAffineAnim_8624CE0[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_FRAME(-32, -32, 0, 4), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_8624CF8[] = +{ + sSpriteAffineAnim_8624CB8, + sSpriteAffineAnim_8624CC8, + sSpriteAffineAnim_8624CE0 +}; + +static const struct SpriteTemplate gUnknown_08624D04 = +{ + .tileTag = 9, + .paletteTag = 15, + .oam = &sOamData_8624CB0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_8624CF8, + .callback = SpriteCallbackDummy, +}; + +void sub_81D13FC(struct PokenavSub14 *structPtr) +{ + u8 spriteId; + + LoadCompressedSpriteSheet(&gUnknown_08624C78); + Pokenav_AllocAndLoadPalettes(gUnknown_08624C80); + + spriteId = CreateSprite(&gUnknown_08624D04, 0, 0, 0); + structPtr->field_14 = &gSprites[spriteId]; + structPtr->field_14->invisible = TRUE; +} + +void sub_81D1448(struct PokenavSub14 *structPtr) +{ + u32 ribbonId; + s32 r4 = sub_81D0944(); + s32 r5 = (r4 % 9) * 16 + 96; + s32 r0 = (r4 / 9) * 16 + 40; + + structPtr->field_14->pos1.x = r5; + structPtr->field_14->pos1.y = r0; + + ribbonId = sub_81D0954(); + structPtr->field_14->oam.tileNum = (gUnknown_08624BF8[ribbonId].var0 * 16) + GetSpriteTileStartByTag(9); + structPtr->field_14->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_08624BF8[ribbonId].var2 + 15); + + StartSpriteAffineAnim(structPtr->field_14, 1); + structPtr->field_14->invisible = FALSE; + structPtr->field_14->data[0] = 0; + structPtr->field_14->callback = sub_81D1538; +} + +void sub_81D1500(struct PokenavSub14 *structPtr) +{ + structPtr->field_14->data[0] = 1; + StartSpriteAffineAnim(structPtr->field_14, 2); + structPtr->field_14->callback = sub_81D1538; +} + +bool32 sub_81D1524(struct PokenavSub14 *structPtr) +{ + return (structPtr->field_14->callback != SpriteCallbackDummy); +} + +void sub_81D1538(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + sprite->invisible = sprite->data[0]; + sprite->callback = SpriteCallbackDummy; + } +} diff --git a/src/pokenav_unk_2.c b/src/pokenav_unk_2.c index a6713554f..ae15eabfb 100644 --- a/src/pokenav_unk_2.c +++ b/src/pokenav_unk_2.c @@ -7,6 +7,10 @@ #include "pokenav.h" #include "graphics.h" #include "sound.h" +#include "gym_leader_rematch.h" +#include "window.h" +#include "strings.h" +#include "scanline_effect.h" #include "constants/songs.h" // Match Call @@ -29,15 +33,15 @@ struct Pokenav2Struct struct Pokenav2Struct * sub_81C9958(void); bool32 sub_81C99FC(void); -u32 sub_81C9A10(int state); -u32 sub_81C9C6C(int state); -u32 sub_81C9CA8(int state); -u32 sub_81C9D44(int state); -u32 sub_81C9DD8(int state); -u32 sub_81C9E58(int state); -u32 sub_81C9EC8(int state); -u32 sub_81C9EF8(int state); -u32 sub_81C9F28(int state); +u32 sub_81C9A10(s32 state); +u32 sub_81C9C6C(s32 state); +u32 sub_81C9CA8(s32 state); +u32 sub_81C9D44(s32 state); +u32 sub_81C9DD8(s32 state); +u32 sub_81C9E58(s32 state); +u32 sub_81C9EC8(s32 state); +u32 sub_81C9EF8(s32 state); +u32 sub_81C9F28(s32 state); void sub_81C9FC4(void); void sub_81C9FEC(void); void sub_81CA02C(void); @@ -70,6 +74,9 @@ void sub_81CA9C8(void); void sub_81CA9D8(void); void sub_81CAA3C(void); +extern const u32 gPokenavOptions_Gfx[]; +extern const u16 gPokenavOptions_Pal[]; + const u16 gUnknown_0861FC78[] = INCBIN_U16("graphics/pokenav/bg.gbapal"); const u32 gUnknown_0861FC98[] = INCBIN_U32("graphics/pokenav/bg.4bpp.lz"); const u32 gUnknown_0861FCAC[] = INCBIN_U32("graphics/pokenav/bg.bin.lz"); @@ -119,41 +126,200 @@ const LoopedTask gUnknown_086201A0[] = { sub_81C9F28 }; -const struct CompressedSpriteSheet gUnknown_086201C4[] = { - {gPokenavOptions_Gfx, 0x3400, 0x0003}, - {gUnknown_08620124, 0x0100, 0x0001} +const struct CompressedSpriteSheet gUnknown_086201C4[] = +{ + { + .data = gPokenavOptions_Gfx, + .size = 0x3400, + .tag = 0x0003 + }, + { + .data = gUnknown_08620124, + .size = 0x0100, + .tag = 0x0001 + } }; -const struct SpritePalette gUnknown_086201D4[] = { +const struct SpritePalette gUnknown_086201D4[] = +{ {gPokenavOptions_Pal + 0x00, 4}, {gPokenavOptions_Pal + 0x10, 5}, {gPokenavOptions_Pal + 0x20, 6}, {gPokenavOptions_Pal + 0x30, 7}, {gPokenavOptions_Pal + 0x40, 8}, {gUnknown_08620104, 3}, - {NULL, 0} + {} }; +const u16 gUnknown_0862020C[] = {0, 0}; +const u16 gUnknown_08620210[] = {0x20, 1}; +const u16 gUnknown_08620214[] = {0x40, 4}; +const u16 gUnknown_08620218[] = {0x60, 2}; +const u16 gUnknown_0862021C[] = {0x80, 3}; +const u16 gUnknown_08620220[] = {0xA0, 1}; +const u16 gUnknown_08620224[] = {0xC0, 1}; +const u16 gUnknown_08620228[] = {0xE0, 4}; +const u16 gUnknown_0862022C[] = {0x100, 1}; +const u16 gUnknown_08620230[] = {0x120, 2}; +const u16 gUnknown_08620234[] = {0x140, 0}; +const u16 gUnknown_08620238[] = {0x160, 0}; +const u16 gUnknown_0862023C[] = {0x180, 3}; + struct UnkStruct_08620240 { - u16 field_0; - u16 field_2; - const u16 *field_4[6]; + u16 unk0; + u16 unk2; + const u16 *unk4[6]; }; -extern const struct UnkStruct_08620240 gUnknown_08620240[]; +const struct UnkStruct_08620240 gUnknown_08620240[5] = +{ + { + 0x2A, + 0x14, + {gUnknown_0862020C, gUnknown_08620210, gUnknown_0862021C, NULL, NULL, NULL} + }, + { + 0x2A, + 0x14, + {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_0862021C, NULL, NULL} + }, + { + 0x2A, + 0x14, + {gUnknown_0862020C, gUnknown_08620210, gUnknown_08620214, gUnknown_08620218, gUnknown_0862021C, NULL} + }, + { + 0x38, + 0x14, + {gUnknown_08620220, gUnknown_08620224, gUnknown_0862023C, NULL, NULL, NULL} + }, + { + 0x28, + 0x10, + {gUnknown_08620228, gUnknown_0862022C, gUnknown_08620230, gUnknown_08620234, gUnknown_08620238, gUnknown_0862023C} + }, +}; + +const struct WindowTemplate gUnknown_086202CC = +{ + .bg = 1, + .tilemapLeft = 3, + .tilemapTop = 17, + .width = 0x18, + .height = 0x2, + .paletteNum = 1, + .baseBlock = 8 +}; + +const u8 *const gUnknown_086202D4[] = +{ + gUnknown_085EBCC5, + gUnknown_085EBCE8, + gUnknown_085EBD01, + gUnknown_085EBD1C, + gUnknown_085EBD34, + gUnknown_085EBD83, + gUnknown_085EBDA2, + gUnknown_085EBDBF, + gUnknown_085EBDDB, + gUnknown_085EBDEE, + gUnknown_085EBE06, + gUnknown_085EBE19, + gUnknown_085EBE2D, + gUnknown_085EBE41 +}; + +const u8 gUnknown_0862030C[] = {6, 8, 7}; -extern const struct SpriteTemplate gUnknown_0862034C; +const u8 gUnknown_0862030F[] = {6, 8, 7, 0, 0}; + +const struct OamData gUnknown_08620314 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const union AffineAnimCmd gUnknown_0862031C[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd gUnknown_0862032C[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0x12), + AFFINEANIMCMD_END, +}; + +const union AffineAnimCmd *const gUnknown_08620344[] = +{ + gUnknown_0862031C, + gUnknown_0862032C +}; + +const struct SpriteTemplate gUnknown_0862034C = +{ + .tileTag = 3, + .paletteTag = 4, + .oam = &gUnknown_08620314, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gUnknown_08620344, + .callback = SpriteCallbackDummy, +}; + +const struct OamData gUnknown_08620364 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, +}; + +const struct SpriteTemplate gUnknown_0862036C = +{ + .tileTag = 1, + .paletteTag = 3, + .oam = &gUnknown_08620364, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct ScanlineEffectParams gUnknown_08620384 = +{ + (void *)REG_ADDR_WIN0H, + ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1, + 1, + 0 +}; bool32 sub_81C98D4(void) { s32 i; - for (i = 0; i < 78; i++) + for (i = 0; i < REMATCH_TABLE_ENTRIES; i++) { if (sub_81CB0C8(i) == gMapHeader.regionMapSectionId - && sub_81CAE08(i) - && gSaveBlock1Ptr->trainerRematches[i]) + && sub_81CAE08(i) + && gSaveBlock1Ptr->trainerRematches[i]) return TRUE; } @@ -230,7 +396,7 @@ bool32 sub_81C99FC(void) return IsLoopedTaskActive(unk->loopedTaskId); } -u32 sub_81C9A10(int state) +u32 sub_81C9A10(s32 state) { struct Pokenav2Struct * unk = GetSubstructPtr(2); @@ -337,7 +503,7 @@ u32 sub_81C9A10(int state) return 4; } -u32 sub_81C9C6C(int state) +u32 sub_81C9C6C(s32 state) { switch (state) { @@ -357,7 +523,7 @@ u32 sub_81C9C6C(int state) return 4; } -u32 sub_81C9CA8(int state) +u32 sub_81C9CA8(s32 state) { switch (state) { @@ -396,7 +562,7 @@ u32 sub_81C9CA8(int state) return 4; } -u32 sub_81C9D44(int state) +u32 sub_81C9D44(s32 state) { switch (state) { @@ -434,7 +600,7 @@ u32 sub_81C9D44(int state) return 4; } -u32 sub_81C9DD8(int state) +u32 sub_81C9DD8(s32 state) { switch (state) { @@ -467,7 +633,7 @@ u32 sub_81C9DD8(int state) return 4; } -u32 sub_81C9E58(int state) +u32 sub_81C9E58(s32 state) { switch (state) { @@ -498,7 +664,7 @@ u32 sub_81C9E58(int state) return 4; } -u32 sub_81C9EC8(int state) +u32 sub_81C9EC8(s32 state) { switch (state) { @@ -514,7 +680,7 @@ u32 sub_81C9EC8(int state) return 4; } -u32 sub_81C9EF8(int state) +u32 sub_81C9EF8(s32 state) { switch (state) { @@ -530,7 +696,7 @@ u32 sub_81C9EF8(int state) return 4; } -u32 sub_81C9F28(int state) +u32 sub_81C9F28(s32 state) { switch (state) { @@ -629,7 +795,7 @@ void sub_81CA094(void) void sub_81CA0C8(void) { s32 r0 = sub_81C9894(); - sub_81CA0EC(gUnknown_08620240[r0].field_4, gUnknown_08620240[r0].field_0, gUnknown_08620240[r0].field_2); + sub_81CA0EC(gUnknown_08620240[r0].unk4, gUnknown_08620240[r0].unk0, gUnknown_08620240[r0].unk2); } void sub_81CA0EC(const u16 *const *a0, s32 a1, s32 a2) @@ -752,6 +918,7 @@ bool32 sub_81CA324(void) return FALSE; } +#ifdef NONMATCHING void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3) { s32 i; @@ -766,3 +933,51 @@ void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3) sprites[i]->callback = sub_81CA474; } } +#else +NAKED +void sub_81CA35C(struct Sprite ** sprites, s32 a1, s32 a2, s32 a3) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r9\n" + "\tmov r6, r8\n" + "\tpush {r6,r7}\n" + "\tadds r4, r0, 0\n" + "\tadds r5, r1, 0\n" + "\tmov r9, r2\n" + "\tadds r6, r3, 0\n" + "\tldr r0, =sub_81CA474\n" + "\tmov r8, r0\n" + "\tsubs r0, r2, r5\n" + "\tlsls r0, 4\n" + "\tadds r1, r6, 0\n" + "\tbl __divsi3\n" + "\tadds r3, r0, 0\n" + "\tmovs r1, 0x3\n" + "\tlsls r2, r5, 4\n" + "_081CA380:\n" + "\tldr r0, [r4]\n" + "\tstrh r5, [r0, 0x20]\n" + "\tldr r0, [r4]\n" + "\tstrh r6, [r0, 0x2E]\n" + "\tldr r0, [r4]\n" + "\tstrh r3, [r0, 0x30]\n" + "\tldr r0, [r4]\n" + "\tstrh r2, [r0, 0x32]\n" + "\tldr r0, [r4]\n" + "\tmov r7, r9\n" + "\tstrh r7, [r0, 0x3C]\n" + "\tldm r4!, {r0}\n" + "\tmov r7, r8\n" + "\tstr r7, [r0, 0x1C]\n" + "\tsubs r1, 0x1\n" + "\tcmp r1, 0\n" + "\tbge _081CA380\n" + "\tpop {r3,r4}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.pool"); +} +#endif //NONMATCHING diff --git a/src/pokenav_unk_3.c b/src/pokenav_unk_3.c index dfef062df..9b62bea78 100755 --- a/src/pokenav_unk_3.c +++ b/src/pokenav_unk_3.c @@ -34,12 +34,13 @@ static u32 sub_81CABFC(struct Pokenav3Struct *); static u32 sub_81CAC04(struct Pokenav3Struct *); static u32 sub_81CACB8(struct Pokenav3Struct *); static u32 sub_81CACF8(struct Pokenav3Struct *); -static u32 sub_81CAD20(int); +static u32 sub_81CAD20(s32); static bool32 sub_81CB1D0(void); -extern const u8 gUnknown_08622508[]; -extern const u8 gUnknown_0862250A[]; -extern const u8 *const gUnknown_08622028[][4]; +#include "data/text/match_call_messages.h" + +const u8 gUnknown_08622508[] = {0, 2}; +const u8 gUnknown_0862250A[] = {0, 1, 2}; bool32 sub_81CAAE8(void) { @@ -190,7 +191,7 @@ static u32 sub_81CACF8(struct Pokenav3Struct *state) return 0; } -static u32 sub_81CAD20(int taskState) +static u32 sub_81CAD20(s32 taskState) { int i, j; struct Pokenav3Struct *state = GetSubstructPtr(5); @@ -207,7 +208,7 @@ static u32 sub_81CAD20(int taskState) { state->unk1C[state->unkA].unk2 = j; state->unk1C[state->unkA].unk0 = 1; - state->unk1C[state->unkA].unk1 = sub_81D16DC(j); + state->unk1C[state->unkA].unk1 = MatchCallMapSecGetByIndex(j); state->unkA++; } @@ -282,7 +283,7 @@ int unref_sub_81CAE6C(int arg0) arg0 += state->unkC; if (arg0 >= state->unkA) return REMATCH_TABLE_ENTRIES; - + return state->unk1C[arg0].unk2; } @@ -321,7 +322,7 @@ int sub_81CAF04(int index) index = GetTrainerIdxByRematchIdx(state->unk1C[index].unk2); return gTrainers[index].trainerPic; } - + var0 = state->unk1C[index].unk2; index = MatchCall_GetRematchTableIdx(var0); if (index != REMATCH_TABLE_ENTRIES) @@ -364,7 +365,7 @@ const u8 *sub_81CAFD8(int index, int textType) var0 = state->unk1C[index].unk2; } - return gUnknown_08622028[var0][textType]; + return gMatchCallMessages[var0][textType]; } u16 sub_81CB01C(void) diff --git a/src/pokenav_unk_4.c b/src/pokenav_unk_4.c index 6fa76daf2..93dab4491 100755 --- a/src/pokenav_unk_4.c +++ b/src/pokenav_unk_4.c @@ -50,7 +50,7 @@ struct Pokenav4Struct }; static bool32 sub_81CB310(void); -static u32 sub_81CB324(int); +static u32 sub_81CB324(s32); static void sub_81CBBB8(void); static void sub_81CBC1C(void); static void sub_81CC2B4(void); @@ -93,27 +93,191 @@ static void sub_81CC330(struct Pokenav4Struct *); static struct Sprite *sub_81CC370(void); static void sub_81CC440(struct Sprite *sprite); static void sub_81CC4A4(struct Sprite *sprite); +void sub_81CC34C(struct Sprite *sprite); +u32 sub_81CB510(s32); +u32 sub_81CB588(s32); +u32 sub_81CB600(s32); +u32 sub_81CB678(s32); +u32 sub_81CB6F0(s32); +u32 sub_81CB734(s32); +u32 sub_81CB75C(s32); +u32 sub_81CB7A0(s32); +u32 sub_81CB824(s32); +u32 sub_81CB888(s32); +u32 sub_81CB93C(s32); +u32 sub_81CBAD4(s32); +u32 sub_81CB9C8(s32); +u32 sub_81CBA68(s32); +u32 sub_81CBB74(s32); -extern const LoopedTask gUnknown_08622798[]; -extern const struct BgTemplate gUnknown_0862278C[3]; -extern const u16 gUnknown_08622510[]; -extern const u32 gUnknown_08622530[]; -extern const u32 gUnknown_08622760[]; -extern const u16 gUnknown_08622700[]; -extern const u16 gUnknown_08622720[]; -extern const u8 gUnknown_086225D4[]; -extern const u16 gUnknown_086226E0[]; -extern const struct BgTemplate gUnknown_08622794; -extern const struct WindowTemplate gUnknown_086227D8; -extern const struct WindowTemplate gUnknown_086227E0; -extern const u8 *const gUnknown_086227E8[]; extern const struct WindowTemplate gUnknown_08622808; -extern const u8 gUnknown_086227F4[]; -extern const struct CompressedSpriteSheet gUnknown_08622810[1]; -extern const struct SpritePalette gUnknown_08622818[]; extern const struct SpriteTemplate gUnknown_08622830; extern const struct SpriteTemplate gUnknown_08622850; +const u16 gUnknown_08622510[] = INCBIN_U16("graphics/pokenav/ui_matchcall.gbapal"); +const u32 gUnknown_08622530[] = INCBIN_U32("graphics/pokenav/ui_matchcall.4bpp.lz"); +const u32 gUnknown_086225D4[] = INCBIN_U32("graphics/pokenav/ui_matchcall.bin.lz"); +const u16 gUnknown_08622698[] = INCBIN_U16("graphics/pokenav/arrow2.gbapal"); +const u32 gUnknown_086226B8[] = INCBIN_U32("graphics/pokenav/arrow2.4bpp.lz"); +const u16 gUnknown_086226E0[] = INCBIN_U16("graphics/pokenav/86226E0.gbapal"); +const u16 gUnknown_08622700[] = INCBIN_U16("graphics/pokenav/8622700.gbapal"); +const u16 gUnknown_08622720[] = INCBIN_U16("graphics/pokenav/pokeball_matchcall.gbapal"); +const u32 gUnknown_08622760[] = INCBIN_U32("graphics/pokenav/pokeball_matchcall.4bpp.lz"); + +const struct BgTemplate gUnknown_0862278C[3] = +{ + { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 0x1F, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 0x06, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x80 + }, + { + .bg = 3, + .charBaseIndex = 1, + .mapBaseIndex = 0x07, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + } +}; + +const LoopedTask gUnknown_08622798[] = +{ + NULL, + sub_81CB510, + sub_81CB588, + sub_81CB600, + sub_81CB678, + sub_81CB6F0, + sub_81CB734, + sub_81CB75C, + sub_81CB7A0, + sub_81CB824, + sub_81CB888, + sub_81CB93C, + sub_81CBAD4, + sub_81CB9C8, + sub_81CBA68, + sub_81CBB74 +}; + +const struct WindowTemplate gUnknown_086227D8 = +{ + .bg = 2, + .tilemapLeft = 0, + .tilemapTop = 5, + .width = 11, + .height = 2, + .paletteNum = 2, + .baseBlock = 16 +}; + +const struct WindowTemplate gUnknown_086227E0 = +{ + .bg = 2, + .tilemapLeft = 0, + .tilemapTop = 9, + .width = 11, + .height = 8, + .paletteNum = 2, + .baseBlock = 38 +}; + +const u8 *const gUnknown_086227E8[] = +{ + gUnknown_085EC017, + gUnknown_085EC01C, + gUnknown_085EC022 +}; + +const u8 gUnknown_086227F4[] = _("·{PAUSE 0x04}·{PAUSE 0x04}·{PAUSE 0x04}·{PAUSE 0x04}·\p"); + +const struct WindowTemplate gUnknown_08622808 = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 12, + .width = 0x1C, + .height = 0x04, + .paletteNum = 1, + .baseBlock = 10 +}; + +const struct CompressedSpriteSheet gUnknown_08622810[1] = +{ + {gUnknown_086226B8, 0x40, 7} +}; + +const struct SpritePalette gUnknown_08622818[] = +{ + {gUnknown_08622698, 12}, + {} +}; + +const struct OamData gUnknown_08622828 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(8x16), + .x = 0, + .size = SPRITE_SIZE(8x16), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +const struct SpriteTemplate gUnknown_08622830 = +{ + .tileTag = 7, + .paletteTag = 12, + .oam = &gUnknown_08622828, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81CC34C, +}; + +const struct OamData gUnknown_08622848 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +const struct SpriteTemplate gUnknown_08622850 = +{ + .tileTag = 8, + .paletteTag = 13, + .oam = &gUnknown_08622848, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + bool32 sub_81CB260(void) { struct Pokenav4Struct *state = AllocSubstruct(6, sizeof(struct Pokenav4Struct)); @@ -156,7 +320,7 @@ static bool32 sub_81CB310(void) return IsLoopedTaskActive(state->unk4); } -static u32 sub_81CB324(int taskState) +static u32 sub_81CB324(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -229,7 +393,7 @@ static u32 sub_81CB324(int taskState) } } -u32 sub_81CB510(int taskState) +u32 sub_81CB510(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -266,7 +430,7 @@ u32 sub_81CB510(int taskState) return 4; } -u32 sub_81CB588(int taskState) +u32 sub_81CB588(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -303,7 +467,7 @@ u32 sub_81CB588(int taskState) return 4; } -u32 sub_81CB600(int taskState) +u32 sub_81CB600(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -340,7 +504,7 @@ u32 sub_81CB600(int taskState) return 4; } -u32 sub_81CB678(int taskState) +u32 sub_81CB678(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -377,7 +541,7 @@ u32 sub_81CB678(int taskState) return 4; } -u32 sub_81CB6F0(int taskState) +u32 sub_81CB6F0(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -396,7 +560,7 @@ u32 sub_81CB6F0(int taskState) return 4; } -u32 sub_81CB734(int taskState) +u32 sub_81CB734(s32 taskState) { struct Pokenav4Struct *state; u16 var0; @@ -408,7 +572,7 @@ u32 sub_81CB734(int taskState) return 4; } -u32 sub_81CB75C(int taskState) +u32 sub_81CB75C(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -427,7 +591,7 @@ u32 sub_81CB75C(int taskState) return 4; } -u32 sub_81CB7A0(int taskState) +u32 sub_81CB7A0(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -459,7 +623,7 @@ u32 sub_81CB7A0(int taskState) return 4; } -u32 sub_81CB824(int taskState) +u32 sub_81CB824(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -485,7 +649,7 @@ u32 sub_81CB824(int taskState) return 4; } -u32 sub_81CB888(int taskState) +u32 sub_81CB888(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); u32 result = 0; @@ -549,7 +713,7 @@ u32 sub_81CB888(int taskState) return result; } -u32 sub_81CB93C(int taskState) +u32 sub_81CB93C(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -578,7 +742,7 @@ u32 sub_81CB93C(int taskState) return 4; } -u32 sub_81CB9C8(int taskState) +u32 sub_81CB9C8(s32 taskState) { int index; int var0; @@ -617,7 +781,7 @@ u32 sub_81CB9C8(int taskState) return 4; } -u32 sub_81CBA68(int taskState) +u32 sub_81CBA68(s32 taskState) { struct Pokenav4Struct *state = GetSubstructPtr(6); switch (taskState) @@ -643,7 +807,7 @@ u32 sub_81CBA68(int taskState) return 4; } -u32 sub_81CBAD4(int taskState) +u32 sub_81CBAD4(s32 taskState) { int index; int var0; @@ -682,7 +846,7 @@ u32 sub_81CBAD4(int taskState) return 4; } -u32 sub_81CBB74(int taskState) +u32 sub_81CBB74(s32 taskState) { switch (taskState) { @@ -718,7 +882,7 @@ static void sub_81CBBB8(void) template.unkE = 7; template.unk10 = sub_81CB050; template.unk14 = sub_81CBCEC; - sub_81C81D4(&gUnknown_08622794, &template, 2); + sub_81C81D4(&gUnknown_0862278C[2], &template, 2); CreateTask(sub_81CBC64, 7); } diff --git a/src/pokenav_unk_5.c b/src/pokenav_unk_5.c index eccc200d5..ccab58078 100755 --- a/src/pokenav_unk_5.c +++ b/src/pokenav_unk_5.c @@ -32,18 +32,18 @@ struct Pokenav5Struct_2 u8 cityZoomPics[22][0xC8]; }; -struct CityZoomPic +struct CityMapEntry { u16 mapSecId; - u16 unk2; - const u32 *data; + u16 index; + const u32 *tilemap; }; static u32 sub_81CC568(struct Pokenav5Struct *); static u32 sub_81CC5B4(struct Pokenav5Struct *); static u32 sub_81CC5DC(struct Pokenav5Struct *); -static u32 sub_81CC6F4(int); -static u32 sub_81CCD34(int); +static u32 sub_81CC6F4(s32); +static u32 sub_81CCD34(s32); static bool32 sub_81CC6BC(void); static void sub_81CC9EC(void); static void sub_81CC9C0(void); @@ -61,17 +61,110 @@ static void sub_81CCDE8(struct Pokenav5Struct_2 *, int, int); static void sub_81CCFA4(int); static void sub_81CCC9C(u8 taskId); static void sub_81CCF78(void); +void sub_81CCEF4(struct Sprite *sprite); +u32 sub_81CC848(s32); +u32 sub_81CC878(s32); +u32 sub_81CC8D8(s32); +u32 sub_81CC95C(s32); -extern const LoopedTask gUnknown_086230E4[]; -extern const struct BgTemplate gUnknown_086230D8[2]; -extern const struct CompressedSpriteSheet gUnknown_086230F8[1]; -extern const struct SpritePalette gUnknown_08623100[]; -extern const struct WindowTemplate gUnknown_08623110; -extern const u32 gUnknown_08622888[]; -extern const u16 gUnknown_08622868[]; extern const u16 gHoennMapZoomIcons_Pal[]; -extern const struct CityZoomPic gUnknown_08623118[22]; extern const struct SpriteTemplate gUnknown_086231D0; +extern const u32 gHoennMapZoomIcons_Gfx[]; + +const u16 gUnknown_08622868[] = INCBIN_U16("graphics/pokenav/8622868.gbapal"); +const u32 gUnknown_08622888[] = INCBIN_U32("graphics/pokenav/zoom_tiles.4bpp.lz"); + +#include "data/region_map/city_map_tilemaps.h" + + +const struct BgTemplate gUnknown_086230D8[3] = +{ + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 0x1F, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 0x06, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 0x00, + .screenSize = 2, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, +}; + +const LoopedTask gUnknown_086230E4[] = +{ + NULL, + sub_81CC848, + sub_81CC878, + sub_81CC8D8, + sub_81CC95C +}; + +const struct CompressedSpriteSheet gUnknown_086230F8[1] = +{ + {gHoennMapZoomIcons_Gfx, 0x800, 6} +}; + +const struct SpritePalette gUnknown_08623100[] = +{ + {gHoennMapZoomIcons_Pal, 11}, + {} +}; + +const struct WindowTemplate gUnknown_08623110 = +{ + .bg = 1, + .tilemapLeft = 17, + .tilemapTop = 4, + .width = 12, + .height = 13, + .paletteNum = 1, + .baseBlock = 0x4C +}; + +#include "data/region_map/city_map_entries.h" + +const struct OamData gUnknown_086231C8 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(32x8), + .x = 0, + .size = SPRITE_SIZE(32x8), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +const struct SpriteTemplate gUnknown_086231D0 = +{ + .tileTag = 6, + .paletteTag = 11, + .oam = &gUnknown_086231C8, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_81CCEF4, +}; u32 sub_81CC4D4(void) { @@ -202,7 +295,7 @@ static bool8 sub_81CC6D0(void) return gSaveBlock2Ptr->regionMapZoom == 1; } -static u32 sub_81CC6F4(int taskState) +static u32 sub_81CC6F4(s32 taskState) { int var0; struct RegionMap *regionMap; @@ -215,7 +308,7 @@ static u32 sub_81CC6F4(int taskState) HideBg(2); HideBg(3); SetBgMode(1); - InitBgTemplates(gUnknown_086230D8, ARRAY_COUNT(gUnknown_086230D8)); + InitBgTemplates(gUnknown_086230D8, ARRAY_COUNT(gUnknown_086230D8) - 1); regionMap = GetSubstructPtr(16); sub_8122CF8(regionMap, &gUnknown_086230D8[1], sub_81CC6D0()); sub_81CC9C0(); @@ -278,7 +371,7 @@ static u32 sub_81CC6F4(int taskState) } } -u32 sub_81CC848(int taskState) +u32 sub_81CC848(s32 taskState) { struct Pokenav5Struct_2 *state = GetSubstructPtr(4); switch (taskState) @@ -295,7 +388,7 @@ u32 sub_81CC848(int taskState) return 4; } -u32 sub_81CC878(int taskState) +u32 sub_81CC878(s32 taskState) { switch (taskState) { @@ -321,7 +414,7 @@ u32 sub_81CC878(int taskState) return 4; } -u32 sub_81CC8D8(int taskState) +u32 sub_81CC8D8(s32 taskState) { struct Pokenav5Struct_2 *state = GetSubstructPtr(4); switch (taskState) @@ -354,7 +447,7 @@ u32 sub_81CC8D8(int taskState) return 4; } -u32 sub_81CC95C(int taskState) +u32 sub_81CC95C(s32 taskState) { switch (taskState) { @@ -518,12 +611,12 @@ static bool32 sub_81CCD24(void) return FuncIsActiveLoopedTask(sub_81CCD34); } -static u32 sub_81CCD34(int taskState) +static u32 sub_81CCD34(s32 taskState) { struct Pokenav5Struct_2 *state = GetSubstructPtr(4); - if (taskState < (int)ARRAY_COUNT(gUnknown_08623118)) + if (taskState < (int)ARRAY_COUNT(gPokenavCityMaps)) { - LZ77UnCompWram(gUnknown_08623118[taskState].data, state->cityZoomPics[taskState]); + LZ77UnCompWram(gPokenavCityMaps[taskState].tilemap, state->cityZoomPics[taskState]); return 1; } @@ -533,10 +626,10 @@ static u32 sub_81CCD34(int taskState) static void sub_81CCD70(struct Pokenav5Struct_2 *state, int mapSecId, int pos) { int i; - for (i = 0; i < (int)ARRAY_COUNT(gUnknown_08623118) && (gUnknown_08623118[i].mapSecId != mapSecId || gUnknown_08623118[i].unk2 != pos); i++) + for (i = 0; i < (int)ARRAY_COUNT(gPokenavCityMaps) && (gPokenavCityMaps[i].mapSecId != mapSecId || gPokenavCityMaps[i].index != pos); i++) ; - if (i == ARRAY_COUNT(gUnknown_08623118)) + if (i == ARRAY_COUNT(gPokenavCityMaps)) return; FillBgTilemapBufferRect_Palette0(1, 0x1041, 17, 6, 12, 11); diff --git a/src/pokenav_unk_6.c b/src/pokenav_unk_6.c new file mode 100644 index 000000000..638884d3f --- /dev/null +++ b/src/pokenav_unk_6.c @@ -0,0 +1,625 @@ +#include "global.h" +#include "data.h" +#include "decompress.h" +#include "main.h" +#include "menu_specialized.h" +#include "mon_markings.h" +#include "pokenav.h" +#include "pokemon.h" +#include "pokemon_storage_system.h" +#include "sound.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" +#include "constants/songs.h" +#include "constants/species.h" + +struct PokenavSub11 +{ + u32 monPal[3][0x20]; + u8 fill[0x180]; + u32 monPicGfx[3][0x800]; + u8 unk6300; + s16 unk6302; + u32 (*unk6304)(struct PokenavSub11 *); + u8 fill2[0x6320 - 0x6308]; + u8 unk6320[3][24]; + u8 unk6368[3][64]; + struct UnknownStruct_81D1ED4 unk6428; + u8 unk6780[3]; + u8 unk6783[3]; + s8 unk6786; + s8 unk6787; + s8 unk6788; + s8 unk6789; + u8 unk678A; +}; + +void sub_81CD970(void); +void sub_81CD9F8(void); +u32 sub_81CD08C(struct PokenavSub11 *structPtr); +u32 sub_81CD19C(struct PokenavSub11 *structPtr); +u32 sub_81CD110(struct PokenavSub11 *structPtr); +u8 sub_81CD1E4(struct PokenavSub11 *structPtr); +u8 sub_81CD258(u8 arg0); +void sub_81CD824(s16 arg0, u8 arg1); +void sub_81CDA1C(s16 arg0, u8 arg1); +void sub_81CDB98(s16 arg0, u8 arg1); + +// code +bool32 sub_81CCFD8(void) +{ + struct PokenavSub11 *structPtr = AllocSubstruct(11, sizeof(struct PokenavSub11)); + + if (structPtr == NULL) + return FALSE; + + sub_81D1ED4(&structPtr->unk6428); + sub_81CD970(); + gKeyRepeatStartDelay = 20; + structPtr->unk6304 = sub_81CD08C; + return TRUE; +} + +bool32 sub_81CD024(void) +{ + struct PokenavSub11 *structPtr = AllocSubstruct(11, sizeof(struct PokenavSub11)); + + if (structPtr == NULL) + return FALSE; + + sub_81D1ED4(&structPtr->unk6428); + sub_81CD9F8(); + gKeyRepeatStartDelay = 20; + structPtr->unk6304 = sub_81CD08C; + return TRUE; +} + +u32 sub_81CD070(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + + return structPtr->unk6304(structPtr); +} + +u32 sub_81CD08C(struct PokenavSub11 *structPtr) +{ + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + u32 ret = sub_81CD1E4(structPtr); + + if (ret == 0) + { + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + structPtr->unk6304 = sub_81CD19C; + ret = 2; + } + else if (gMain.newKeys & A_BUTTON) + { + if (structPtr->unk6300 == 0) + { + if (unkPtr->unk2 == unkPtr->unk0 - 1) + { + PlaySE(SE_SELECT); + structPtr->unk6304 = sub_81CD19C; + ret = 2; + } + } + else + { + PlaySE(SE_SELECT); + ret = 5; + structPtr->unk6304 = sub_81CD110; + } + } + } + + return ret; +} + +u32 sub_81CD110(struct PokenavSub11 *structPtr) +{ + struct PokenavSub18 *unkPtr; + u8 markings; + u32 ret = 0, boxId, monId; + + if (!sub_811FBA4()) + { + structPtr->unk6783[structPtr->unk6786] = sub_81CEF14(); + unkPtr = GetSubstructPtr(18); + boxId = unkPtr->unk4[unkPtr->unk2].boxId; + monId = unkPtr->unk4[unkPtr->unk2].monId; + markings = structPtr->unk6783[structPtr->unk6786]; + + if (boxId == TOTAL_BOXES_COUNT) + SetMonData(&gPlayerParty[monId], MON_DATA_MARKINGS, &markings); + else + SetBoxMonDataAt(boxId, monId, MON_DATA_MARKINGS, &markings); + + structPtr->unk6304 = sub_81CD08C; + ret = 6; + } + + return ret; +} + +u32 sub_81CD19C(struct PokenavSub11 *structPtr) +{ + if (structPtr->unk6300 == 0) + return 0x186A2; + else + return 0x186AA; +} + +void sub_81CD1C0(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + if (structPtr->unk6300 == 0) + FreePokenavSubstruct(18); + + FreePokenavSubstruct(11); +} + +u8 sub_81CD1E4(struct PokenavSub11 *structPtr) +{ + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + u8 ret = 0; + + if (gMain.heldKeys & DPAD_UP) + { + if (structPtr->unk6300 == 0 || unkPtr->unk2 != 0) + { + PlaySE(SE_SELECT); + ret = sub_81CD258(1); + } + } + else if (gMain.heldKeys & DPAD_DOWN) + { + if (structPtr->unk6300 == 0 || unkPtr->unk2 < unkPtr->unk0 - 1) + { + PlaySE(SE_SELECT); + ret = sub_81CD258(0); + } + } + + return ret; +} + +u8 sub_81CD258(u8 arg0) +{ + u16 r7; + bool8 r6, r0; + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + + r7 = (arg0) ? structPtr->unk6788 : structPtr->unk6787; + sub_81D1F84(&structPtr->unk6428, structPtr->unk6428.unk14[structPtr->unk6786], structPtr->unk6428.unk14[r7]); + r6 = (unkPtr->unk2 != ((sub_81CDD5C() != 0) ? unkPtr->unk0 : unkPtr->unk0 - 1)); + if (arg0) + { + structPtr->unk6788 = structPtr->unk6787; + structPtr->unk6787 = structPtr->unk6786; + structPtr->unk6786 = r7; + structPtr->unk6789 = structPtr->unk6788; + + unkPtr->unk2 = (unkPtr->unk2 == 0) ? unkPtr->unk0 - 1 : unkPtr->unk2 - 1; + structPtr->unk6302 = (unkPtr->unk2 != 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1; + } + else + { + structPtr->unk6787 = structPtr->unk6788; + structPtr->unk6788 = structPtr->unk6786; + structPtr->unk6786 = r7; + structPtr->unk6789 = structPtr->unk6787; + + unkPtr->unk2 = (unkPtr->unk2 < unkPtr->unk0 - 1) ? unkPtr->unk2 + 1 : 0; + structPtr->unk6302 = (unkPtr->unk2 < unkPtr->unk0 - 1) ? unkPtr->unk2 + 1 : 0; + } + + r0 = (unkPtr->unk2 != ((sub_81CDD5C() != 0) ? unkPtr->unk0 : unkPtr->unk0 - 1)); + + if (!r6) + return 3; + else if (!r0) + return 4; + else + return 1; +} + +bool32 sub_81CD3C4(void) +{ + s32 var; + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + + switch (structPtr->unk678A) + { + case 0: + sub_81CD824(unkPtr->unk2, 0); + break; + case 1: + sub_81CDA1C(unkPtr->unk2, 0); + break; + case 2: + sub_81CDB98(unkPtr->unk2, 0); + break; + case 3: + if (unkPtr->unk0 == 1) + { + structPtr->unk6786 = 0; + structPtr->unk6787 = 0; + structPtr->unk6788 = 0; + structPtr->unk678A = 0; + return TRUE; + } + else + { + structPtr->unk6786 = 0; + structPtr->unk6787 = 1; + structPtr->unk6788 = 2; + } + break; + // These were probably ternaries just like cases 7-9, but couldn't match it any other way. + case 4: + var = unkPtr->unk2 + 1; + if (var >= unkPtr->unk0) + var = 0; + sub_81CD824(var, 1); + break; + case 5: + var = unkPtr->unk2 + 1; + if (var >= unkPtr->unk0) + var = 0; + sub_81CDA1C(var, 1); + break; + case 6: + var = unkPtr->unk2 + 1; + if (var >= unkPtr->unk0) + var = 0; + sub_81CDB98(var, 1); + break; + case 7: + sub_81CD824((unkPtr->unk2 - 1 >= 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1, 2); + break; + case 8: + sub_81CDA1C((unkPtr->unk2 - 1 >= 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1, 2); + break; + case 9: + sub_81CDB98((unkPtr->unk2 - 1 >= 0) ? unkPtr->unk2 - 1 : unkPtr->unk0 - 1, 2); + structPtr->unk678A = 0; + return TRUE; + } + + structPtr->unk678A++; + return FALSE; +} + +bool32 sub_81CD548(u8 arg0) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + + switch (arg0) + { + case 0: + sub_81CD824(structPtr->unk6302, structPtr->unk6789); + break; + case 1: + sub_81CDA1C(structPtr->unk6302, structPtr->unk6789); + break; + case 2: + sub_81CDB98(structPtr->unk6302, structPtr->unk6789); + return TRUE; + } + + return FALSE; +} + +u8 *sub_81CD5CC(u8 *dst, const u8 *src, s16 n) +{ + while (*src != EOS) + *dst++ = *src++, n--; + + while (n-- > 0) + *dst++ = CHAR_SPACE; + + *dst = EOS; + return dst; +} + +u8 *sub_81CD624(u8 *str, u16 id, bool8 arg3) +{ + u16 boxId, monId, gender, species, level, lvlDigits; + struct BoxPokemon *boxMon; + u8 *txtPtr, *str_; + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + + boxId = unkPtr->unk4[id].boxId; + monId = unkPtr->unk4[id].monId; + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = 4; + *(str++) = 8; + *(str++) = 0; + *(str++) = 9; + + if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) + return StringCopyPadded(str, gText_EggNickname, CHAR_SPACE, 12); + + GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, str); + StringGetEnd10(str); + species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL); + if (boxId == TOTAL_BOXES_COUNT) + { + level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + gender = GetMonGender(&gPlayerParty[monId]); + } + else + { + boxMon = GetBoxedMonPtr(boxId, monId); + gender = GetBoxMonGender(boxMon); + level = GetLevelFromBoxMonExp(boxMon); + } + + if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(str, gSpeciesNames[species])) + gender = MON_GENDERLESS; + + str_ = str; // For some reason, a variable is needed to match. + while (*str_ != EOS) + *(str_++); + + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = 0x12; + *(str_++) = 0x3C; + switch (gender) + { + default: + *(str_++) = 0x77; + break; + case MON_MALE: + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_COLOR; + *(str_++) = 4; + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = 3; + *(str_++) = 5; + *(str_++) = CHAR_MALE; + break; + case MON_FEMALE: + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = EXT_CTRL_CODE_COLOR; + *(str_++) = 6; + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = 3; + *(str_++) = 7; + *(str_++) = CHAR_FEMALE; + break; + } + + *(str_++) = EXT_CTRL_CODE_BEGIN; + *(str_++) = 4; + *(str_++) = 8; + *(str_++) = 0; + *(str_++) = 9; + *(str_++) = CHAR_SLASH; + *(str_++) = CHAR_SPECIAL_F9; + *(str_++) = 5; + txtPtr = str_; + str_ = ConvertIntToDecimalStringN(str_, level, STR_CONV_MODE_LEFT_ALIGN, 3); + lvlDigits = str_ - txtPtr; + *(str_++) = CHAR_SPACE; + if (!arg3) + { + lvlDigits = 3 - lvlDigits; + while (lvlDigits-- != 0) + *(str_++) = CHAR_SPACE; + } + + *str_ = EOS; + return str_; +} + +void sub_81CD824(s16 arg0, u8 arg1) +{ + u16 boxId, i; + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + + if (arg0 != (sub_81CDD5C() != 0 ? unkPtr->unk0 : unkPtr->unk0 - 1)) + { + sub_81CD624(structPtr->unk6368[arg1], arg0, FALSE); + boxId = unkPtr->unk4[arg0].boxId; + structPtr->unk6320[arg1][0] = EXT_CTRL_CODE_BEGIN; + structPtr->unk6320[arg1][1] = 4; + structPtr->unk6320[arg1][2] = 8; + structPtr->unk6320[arg1][3] = 0; + structPtr->unk6320[arg1][4] = 9; + if (boxId == TOTAL_BOXES_COUNT) + sub_81CD5CC(&structPtr->unk6320[arg1][5], gText_InParty, 8); + else + sub_81CD5CC(&structPtr->unk6320[arg1][5], GetBoxNamePtr(boxId), 8); + } + else + { + for (i = 0; i < 12; i++) + structPtr->unk6368[arg1][i] = CHAR_SPACE; + structPtr->unk6368[arg1][i] = EOS; + + for (i = 0; i < 8; i++) + structPtr->unk6320[arg1][i] = CHAR_SPACE; + structPtr->unk6320[arg1][i] = EOS; + } +} + +void sub_81CD970(void) +{ + u16 i, count; + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub18 *unkPtr = AllocSubstruct(18, sizeof(struct PokenavSub18)); + + structPtr->unk6300 = 0; + for (i = 0, count = 0; i < CalculatePlayerPartyCount(); i++) + { + if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) + { + unkPtr->unk4[count].boxId = TOTAL_BOXES_COUNT; + unkPtr->unk4[count].monId = i; + unkPtr->unk4[count].unk6 = 0; + count++; + } + } + + unkPtr->unk4[count].boxId = 0; + unkPtr->unk4[count].monId = 0; + unkPtr->unk4[count].unk6 = 0; + unkPtr->unk2 = 0; + unkPtr->unk0 = count + 1; + structPtr->unk678A = 0; +} + +void sub_81CD9F8(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + structPtr->unk6300 = 1; + structPtr->unk678A = 0; +} + +void sub_81CDA1C(s16 arg0, u8 arg1) +{ + u16 boxId, monId, i; + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + + if (arg0 != (sub_81CDD5C() != 0 ? unkPtr->unk0 : unkPtr->unk0 - 1)) + { + boxId = unkPtr->unk4[arg0].boxId; + monId = unkPtr->unk4[arg0].monId; + structPtr->unk6428.unk0[arg1][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); + structPtr->unk6428.unk0[arg1][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); + structPtr->unk6428.unk0[arg1][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); + structPtr->unk6428.unk0[arg1][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); + structPtr->unk6428.unk0[arg1][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); + structPtr->unk6780[arg1] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 255) + ? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u + : 9; + structPtr->unk6783[arg1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_MARKINGS, NULL); + sub_81D2754(structPtr->unk6428.unk0[arg1], structPtr->unk6428.unk14[arg1]); + } + else + { + for (i = 0; i < 5; i++) + { + structPtr->unk6428.unk0[arg1][i] = 0; + structPtr->unk6428.unk14[arg1][i].unk0 = 155; + structPtr->unk6428.unk14[arg1][i].unk2 = 91; + } + } +} + +void sub_81CDB98(s16 arg0, u8 arg1) +{ + u16 boxId, monId, species; + u32 personality, tid; + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + + if (arg0 == (sub_81CDD5C() != 0 ? unkPtr->unk0 : unkPtr->unk0 - 1)) + return; + + boxId = unkPtr->unk4[arg0].boxId; + monId = unkPtr->unk4[arg0].monId; + species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL); + tid = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); + personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); + LoadSpecialPokePic(&gMonFrontPicTable[species], structPtr->monPicGfx[arg1], species, personality, TRUE); + LZ77UnCompWram(GetMonSpritePalFromSpeciesAndPersonality(species, tid, personality), structPtr->monPal[arg1]); +} + +u16 sub_81CDC50(void) +{ + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + return unkPtr->unk0; +} + +u16 sub_81CDC60(void) +{ + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + return unkPtr->unk2; +} + +struct UnknownStruct_81D1ED4 *sub_81CDC70(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return &structPtr->unk6428; +} + +u8 sub_81CDC84(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->unk6786; +} + +u8 sub_81CDC9C(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->unk6302; +} + +void *sub_81CDCB4(u8 id) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->monPicGfx[id]; +} + +void *sub_81CDCD4(u8 id) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->monPal[id]; +} + +u8 sub_81CDCEC(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->unk6789; +} + +u8 *sub_81CDD04(u8 id) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->unk6368[id]; +} + +u8 *sub_81CDD24(u8 id) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->unk6320[id]; +} + +u16 sub_81CDD48(void) +{ + struct PokenavSub18 *unkPtr = GetSubstructPtr(18); + return unkPtr->unk4[unkPtr->unk2].unk6; +} + +bool32 sub_81CDD5C(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + if (structPtr->unk6300 == 1) + return TRUE; + else + return FALSE; +} + +u8 sub_81CDD7C(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + if (structPtr->unk6300 == 1) + return structPtr->unk6783[structPtr->unk6786]; + else + return 0; +} + +u8 sub_81CDDB0(void) +{ + struct PokenavSub11 *structPtr = GetSubstructPtr(11); + return structPtr->unk6780[structPtr->unk6786]; +} diff --git a/src/pokenav_unk_7.c b/src/pokenav_unk_7.c new file mode 100644 index 000000000..90b677fa7 --- /dev/null +++ b/src/pokenav_unk_7.c @@ -0,0 +1,884 @@ +#include "global.h" +#include "bg.h" +#include "window.h" +#include "pokenav.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "menu.h" +#include "menu_specialized.h" +#include "mon_markings.h" +#include "palette.h" +#include "pokenav.h" +#include "scanline_effect.h" +#include "string_util.h" +#include "strings.h" +#include "text.h" + +u32 sub_81CE37C(s32); +u32 sub_81CE2D0(s32); +u32 sub_81CE4D8(s32); +u32 sub_81CE5E4(s32); +u32 sub_81CE6BC(s32); +u32 sub_81CE700(s32); + +BSS_DATA u8 gUnknown_030012BC; + +const u16 gUnknown_086231E8[] = INCBIN_U16("graphics/pokenav/86231E8.gbapal"); +const u16 gUnknown_08623208[] = INCBIN_U16("graphics/pokenav/8623208.gbapal"); +const u32 gUnknown_08623228[] = INCBIN_U32("graphics/pokenav/8623228.4bpp.lz"); +const u32 gUnknown_0862323C[] = INCBIN_U32("graphics/pokenav/862323C.bin.lz"); +const u16 gUnknown_08623338[] = INCBIN_U16("graphics/pokenav/8623338.gbapal"); + +const struct BgTemplate gUnknown_08623358[3] = +{ + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 0x1F, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 3, + .mapBaseIndex = 0x1D, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 2, + .mapBaseIndex = 0x1E, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + } +}; + +const struct WindowTemplate gUnknown_08623364 = +{ + .bg = 1, + .tilemapLeft = 13, + .tilemapTop = 1, + .width = 13, + .height = 4, + .paletteNum = 15, + .baseBlock = 2 +}; + +const struct WindowTemplate gUnknown_0862336C = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 6, + .width = 7, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x36 +}; + +const struct WindowTemplate gUnknown_08623374 = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 0x1C, + .width = 5, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x44 +}; + +const struct WindowTemplate gUnknown_0862337C = +{ + .bg = 1, + .tilemapLeft = 13, + .tilemapTop = 0x1C, + .width = 3, + .height = 2, + .paletteNum = 15, + .baseBlock = 0x44 +}; + +const LoopedTask gUnknown_08623384[] = +{ + NULL, + sub_81CE37C, + sub_81CE2D0, + sub_81CE4D8, + sub_81CE5E4, + sub_81CE6BC, + sub_81CE700 +}; + +struct Pokenav7Struct +{ + u32 loopedTaskId; + u8 tilemapBuffers[3][BG_SCREEN_SIZE]; + u8 filler[2]; + u8 unk1806[10]; + u32 (*unk1810)(void); + s16 unk1814; + u8 unk1816; + u16 unk1818; + u16 unk181A; + void *unk181C; + u8 unk1820; + u8 unk1821; + u8 unk1822; + u8 unk1823; + struct PokemonMarkMenu monMarks; + struct Sprite *unk28dc; + struct Sprite *unk28e0[10]; + u8 unk2908; + u8 filler2[0x38ac - 0x2909]; +}; + +extern s8 sub_81CDC84(void); // This function's declaration here is different than its definition in pokenav_unk_6. u8/s8 + +u32 sub_81CDE94(s32 state); +u32 sub_81CDE80(void); +void sub_81CED30(u8 var); +void sub_81CE9E4(void); +void sub_81CE934(void); +bool32 sub_81CE754(u8 a0, u16 a1, bool8 a2); +void sub_81CEE44(void); +void sub_81CEE90(void); +void sub_81CEEC8(void); +void sub_81CEE68(void); +void sub_81CEE74(bool8 showBg); + +// code +bool32 sub_81CDDD4(void) +{ + struct Pokenav7Struct *structPtr = AllocSubstruct(0xC, sizeof(struct Pokenav7Struct)); + + if (structPtr == NULL) + return FALSE; + + structPtr->unk1816 = 0xFF; + structPtr->loopedTaskId = CreateLoopedTask(sub_81CDE94, 1); + structPtr->unk1810 = sub_81CDE80; + structPtr->unk2908 = 0; + return TRUE; +} + +void sub_81CDE2C(int id) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + structPtr->loopedTaskId = CreateLoopedTask(gUnknown_08623384[id], 1); + structPtr->unk1810 = sub_81CDE80; +} + +u32 sub_81CDE64(void) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + return structPtr->unk1810(); +} + +u32 sub_81CDE80(void) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + return IsLoopedTaskActive(structPtr->loopedTaskId); +} + +u32 sub_81CDE94(s32 state) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + switch (state) + { + case 0: + if (sub_81CD3C4() != TRUE) + return 2; + return 0; + case 1: + InitBgTemplates(gUnknown_08623358, ARRAY_COUNT(gUnknown_08623358)); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); + decompress_and_copy_tile_data_to_vram(3, gPokenavCondition_Gfx, 0, 0, 0); + return 0; + case 2: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + decompress_and_copy_tile_data_to_vram(2, gUnknown_08623228, 0, 0, 0); + return 0; + case 3: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + + LZ77UnCompVram(gPokenavCondition_Tilemap, structPtr->tilemapBuffers[0]); + SetBgTilemapBuffer(3, structPtr->tilemapBuffers[0]); + if (sub_81CDD5C() == TRUE) + CopyToBgTilemapBufferRect(3, gPokenavOptions_Tilemap, 0, 5, 9, 4); + + CopyBgTilemapBufferToVram(3); + CopyPaletteIntoBufferUnfaded(gPokenavCondition_Pal, 0x10, 0x20); + CopyPaletteIntoBufferUnfaded(gUnknown_08623208, 0xF0, 0x20); + structPtr->unk1814 = -80; + return 0; + case 4: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + + LZ77UnCompVram(gUnknown_0862323C, structPtr->tilemapBuffers[2]); + SetBgTilemapBuffer(2, structPtr->tilemapBuffers[2]); + CopyBgTilemapBufferToVram(2); + CopyPaletteIntoBufferUnfaded(gUnknown_086231E8, 0x30, 0x20); + sub_81D21DC(2); + return 0; + case 5: + sub_8199DF0(1, 0, 0, 1); + sub_8199DF0(1, 17, 1, 1); + CpuFill32(0, structPtr->tilemapBuffers[1], BG_SCREEN_SIZE); + SetBgTilemapBuffer(1, structPtr->tilemapBuffers[1]); + return 0; + case 6: + if (free_temp_tile_data_buffers_if_possible()) + return 2; + + structPtr->unk1820 = AddWindow(&gUnknown_08623364); + if (sub_81CDD5C() == TRUE) + { + structPtr->unk1821 = AddWindow(&gUnknown_0862336C); + structPtr->unk1822 = AddWindow(&gUnknown_08623374); + structPtr->unk1823 = AddWindow(&gUnknown_0862337C); + } + DeactivateAllTextPrinters(); + return 0; + case 7: + sub_81CED30(0); + return 0; + case 8: + sub_81CE9E4(); + return 0; + case 9: + if (sub_81CDD5C() == TRUE) + sub_81CE934(); + return 0; + case 10: + sub_81CE754(0, sub_81CDC84(), TRUE); + return 0; + case 11: + sub_81CE754(1, sub_81CDC84(), TRUE); + return 0; + case 12: + sub_81CE754(2, sub_81CDC84(), TRUE); + return 0; + case 13: + if (sub_81CE754(3, sub_81CDC84(), TRUE) != TRUE) + return 2; + PutWindowTilemap(structPtr->unk1820); + if (sub_81CDD5C() == TRUE) + { + PutWindowTilemap(structPtr->unk1821); + PutWindowTilemap(structPtr->unk1822); + PutWindowTilemap(structPtr->unk1823); + } + return 0; + case 14: + ShowBg(1); + HideBg(2); + ShowBg(3); + if (sub_81CDD5C() == TRUE) + sub_81C7BA4(4); + return 0; + case 15: + sub_81C7AC0(1); + if (!sub_81CDD5C()) + { + LoadLeftHeaderGfxForIndex(6); + sub_81C7FA0(1, TRUE, 0); + sub_81C7FA0(6, TRUE, 0); + } + return 0; + case 16: + if (IsPaletteFadeActive()) + return 2; + if (!sub_81CDD5C() && sub_81C8010()) + return 2; + SetVBlankCallback_(sub_81CEE44); + return 0; + case 17: + sub_81CEE90(); + sub_81D20AC(sub_81CDC70()); + return 0; + case 18: + if (sub_81D20BC(sub_81CDC70())) + return 2; + return 0; + case 19: + sub_81CEE74(TRUE); + return 0; + case 20: + if (!sub_81D3178(sub_81CDC70(), &structPtr->unk1814)) + { + sub_81D3464(structPtr->unk28e0); + if (sub_81CDD5C() == TRUE || sub_81CDC60() != sub_81CDC50()) + sub_81D3480(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); + + return 4; + } + return 2; + } + + return 4; +} + +u32 sub_81CE2D0(s32 state) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + switch (state) + { + case 0: + sub_81CEEC8(); + sub_81D3520(structPtr->unk28e0); + return 1; + case 1: + if (sub_81D31A4(sub_81CDC70(), &structPtr->unk1814)) + return 2; + sub_81CEE74(FALSE); + return 1; + case 2: + sub_81C7AC0(0); + if (!sub_81CDD5C()) + sub_81C78A0(); + return 0; + case 3: + if (IsPaletteFadeActive() || MainMenuLoopedTaskIsBusy()) + return 2; + sub_81D354C(structPtr->unk28e0); + HideBg(1); + HideBg(2); + HideBg(3); + return 1; + } + + return 4; +} + +u32 sub_81CE37C(s32 state) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + struct UnknownStruct_81D1ED4 *unkPtr = sub_81CDC70(); + + switch (state) + { + case 0: + sub_81CD548(0); + return 1; + case 1: + sub_81CD548(1); + return 1; + case 2: + sub_81CD548(2); + sub_81D3520(structPtr->unk28e0); + return 1; + case 3: + sub_81D2074(unkPtr); + return 1; + case 4: + if (!sub_81D3150(&structPtr->unk1814)) + { + sub_81CED30(sub_81CDC84()); + return 1; + } + return 2; + case 5: + sub_81CE754(0, sub_81CDC84(), FALSE); + return 1; + case 6: + sub_81CE754(1, sub_81CDC84(), FALSE); + return 1; + case 7: + sub_81CE754(2, sub_81CDC84(), FALSE); + return 1; + case 8: + if (sub_81CE754(3, sub_81CDC84(), FALSE) == TRUE) + return 1; + return 2; + case 9: + unkPtr = sub_81CDC70(); + if (!sub_81D3178(unkPtr, &structPtr->unk1814)) + { + sub_81D3464(structPtr->unk28e0); + if (sub_81CDD5C() != TRUE && sub_81CDC60() == sub_81CDC50()) + return 1; + + sub_81D3480(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); + return 1; + } + return 2; + } + + return 4; +} + +u32 sub_81CE4D8(s32 state) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + switch (state) + { + case 0: + sub_81CD548(0); + return 1; + case 1: + sub_81CD548(1); + return 1; + case 2: + sub_81CD548(2); + return 1; + case 3: + sub_81CED30(sub_81CDC84()); + return 1; + case 4: + sub_81CE754(0, sub_81CDC84(), FALSE); + return 1; + case 5: + sub_81CE754(1, sub_81CDC84(), FALSE); + return 1; + case 6: + sub_81CE754(2, sub_81CDC84(), FALSE); + return 1; + case 7: + if (sub_81CE754(3, sub_81CDC84(), FALSE) == TRUE) + return 1; + return 2; + case 8: + if (!sub_81D3178(sub_81CDC70(), &structPtr->unk1814)) + { + sub_81D3464(structPtr->unk28e0); + sub_81D3480(structPtr->unk28e0, structPtr->unk1816, sub_81CDDB0()); + return 1; + } + return 2; + } + + return 4; +} + +u32 sub_81CE5E4(s32 state) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + switch (state) + { + case 0: + sub_81CD548(0); + return 1; + case 1: + sub_81CD548(1); + return 1; + case 2: + sub_81CD548(2); + sub_81D3520(structPtr->unk28e0); + return 1; + case 3: + if (!sub_81D31A4(sub_81CDC70(), &structPtr->unk1814)) + return 1; + return 2; + case 4: + sub_81CE754(0, sub_81CDC84(), FALSE); + return 1; + case 5: + sub_81CE754(1, sub_81CDC84(), FALSE); + return 1; + case 6: + sub_81CE754(2, sub_81CDC84(), FALSE); + return 1; + case 7: + if (sub_81CE754(3, sub_81CDC84(), FALSE) == TRUE) + return 1; + return 2; + } + + return 4; +} + +u32 sub_81CE6BC(s32 state) +{ + switch (state) + { + case 0: + sub_811FAA4(sub_81CDD7C(), 0xb0, 0x20); + return 1; + case 1: + sub_81C7BA4(5); + return 1; + case 2: + if (IsDma3ManagerBusyWithBgCopy_() == TRUE) + return 2; + return 1; + } + + return 4; +} + +u32 sub_81CE700(s32 state) +{ + switch (state) + { + case 0: + sub_811FAF8(); + return 1; + case 1: + sub_81C7BA4(4); + return 1; + case 2: + if (IsDma3ManagerBusyWithBgCopy_() == TRUE) + return 2; + return 1; + } + + return 4; +} + +u8 *sub_81CE738(u8 *dst, u16 num) +{ + u8 *txtPtr = ConvertIntToDecimalStringN(dst, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + txtPtr = StringCopy(txtPtr, gText_Number2); + + return txtPtr; +} + +bool32 sub_81CE754(u8 a0, u16 a1, bool8 a2) +{ + u8 text[32]; + const u8 *str; + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + switch (a0) + { + case 0: + FillWindowPixelBuffer(structPtr->unk1820, 0); + if (sub_81CDD5C() == TRUE) + FillWindowPixelBuffer(structPtr->unk1821, 0); + break; + case 1: + if (sub_81CDC60() != sub_81CDC50() - 1 || sub_81CDD5C() == TRUE) + { + str = sub_81CDD04(a1); + AddTextPrinterParameterized(structPtr->unk1820, 1, str, 0, 1, 0, NULL); + } + break; + case 2: + if (sub_81CDD5C() == TRUE) + { + str = sub_81CDD24(a1); + AddTextPrinterParameterized(structPtr->unk1820, 1, str, 0, 17, 0, NULL); + text[0] = EXT_CTRL_CODE_BEGIN; + text[1] = 4; + text[2] = 8; + text[3] = 0; + text[4] = 9; + StringCopy(text + 5, gText_Number2); + AddTextPrinterParameterized(structPtr->unk1821, 1, text, 4, 1, 0, NULL); + ConvertIntToDecimalStringN(text + 5, sub_81CDD48(), STR_CONV_MODE_RIGHT_ALIGN, 4); + AddTextPrinterParameterized(structPtr->unk1821, 1, text, 28, 1, 0, NULL); + } + break; + case 3: + switch (structPtr->unk2908) + { + case 0: + if (a2) + CopyWindowToVram(structPtr->unk1820, 3); + else + CopyWindowToVram(structPtr->unk1820, 2); + + if (sub_81CDD5C() == TRUE) + { + structPtr->unk2908++; + return FALSE; + } + else + { + structPtr->unk2908 = 0; + return TRUE; + } + case 1: + if (a2) + CopyWindowToVram(structPtr->unk1821, 3); + else + CopyWindowToVram(structPtr->unk1821, 2); + + structPtr->unk2908 = 0; + return TRUE; + } + } + + return FALSE; +} + +void sub_81CE934(void) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + CopyWindowToVram(structPtr->unk1822, 3); + CopyWindowToVram(structPtr->unk1823, 3); +} + +void sub_81CE964(struct Sprite *sprite) +{ + if (sprite->data[0] == sub_81CDC60()) + StartSpriteAnim(sprite, 0); + else + StartSpriteAnim(sprite, 1); +} + +void sub_81CE990(struct Sprite *sprite) +{ + if (sub_81CDC60() == sub_81CDC50() - 1) + sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x65); + else + sprite->oam.paletteNum = IndexOfSpritePaletteTag(0x66); +} + +void sub_81CE9C8(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, sub_81CDD7C()); +} + +void sub_81CE9E4(void) +{ + struct SpriteSheet sprSheets[4]; + struct SpriteTemplate sprTemplate; + struct SpritePalette sprPals[3]; + struct SpriteSheet sprSheet; + struct Sprite *sprite; + u16 i, spriteId; + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + sub_81D321C(sprSheets, &sprTemplate, sprPals); + if (sub_81CDD5C() == TRUE) + { + structPtr->monMarks.baseTileTag = 0x6A; + structPtr->monMarks.basePaletteTag = 0x6A; + sub_811F90C(&structPtr->monMarks); + sub_811FA90(); + sprite = sub_811FF94(0x69, 0x69, gUnknown_08623338); + sprite->oam.priority = 3; + sprite->pos1.x = 192; + sprite->pos1.y = 32; + sprite->callback = sub_81CE9C8; + structPtr->unk28dc = sprite; + sub_81C7990(IndexOfSpritePaletteTag(0x69), 0); + } + else + { + LoadSpriteSheets(sprSheets); + Pokenav_AllocAndLoadPalettes(sprPals); + for (i = 0; i < sub_81CDC50() - 1; i++) + { + spriteId = CreateSprite(&sprTemplate, 226, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + structPtr->unk1806[i] = spriteId; + gSprites[spriteId].data[0] = i; + gSprites[spriteId].callback = sub_81CE964; + } + else + { + structPtr->unk1806[i] = 0xFF; + } + } + + sprTemplate.tileTag = 0x67; + sprTemplate.callback = SpriteCallbackDummy; + for (; i < 6; i++) + { + spriteId = CreateSprite(&sprTemplate, 230, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + structPtr->unk1806[i] = spriteId; + gSprites[spriteId].oam.size = 0; + } + else + { + structPtr->unk1806[i] = 0xFF; + } + } + + sprTemplate.tileTag = 0x66; + sprTemplate.callback = sub_81CE990; + spriteId = CreateSprite(&sprTemplate, 222, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) + { + structPtr->unk1806[i] = spriteId; + gSprites[spriteId].oam.shape = 1; + gSprites[spriteId].oam.size = 2; + } + else + { + structPtr->unk1806[i] = 0xFF; + } + } + + sub_81D32B0(&sprSheet, &sprPals[0]); + LoadSpriteSheet(&sprSheet); + sprPals[1].data = NULL; + Pokenav_AllocAndLoadPalettes(sprPals); +} + +void sub_81CEBF4(struct Pokenav7Struct *structPtr) +{ + u8 i; + + if (sub_81CDD5C() == TRUE) + { + DestroySprite(structPtr->unk28dc); + FreeSpriteTilesByTag(0x6A); + FreeSpriteTilesByTag(0x69); + FreeSpritePaletteByTag(0x6A); + FreeSpritePaletteByTag(0x69); + } + else + { + for (i = 0; i < 7; i++) + DestroySprite(&gSprites[structPtr->unk1806[i]]); + + FreeSpriteTilesByTag(0x65); + FreeSpriteTilesByTag(0x66); + FreeSpriteTilesByTag(0x67); + FreeSpritePaletteByTag(0x65); + FreeSpritePaletteByTag(0x66); + } + + if (structPtr->unk1816 != 0xFF) + { + DestroySprite(&gSprites[structPtr->unk1816]); + FreeSpriteTilesByTag(0x64); + FreeSpritePaletteByTag(0x64); + } +} + +void sub_81CECA0(void) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + RemoveWindow(structPtr->unk1820); + if (sub_81CDD5C() == TRUE) + { + RemoveWindow(structPtr->unk1821); + RemoveWindow(structPtr->unk1822); + RemoveWindow(structPtr->unk1823); + } + else + { + sub_81C7FDC(); + } + + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_OBJ_1D_MAP); + sub_81CEBF4(structPtr); + sub_81CEE68(); + FreePokenavSubstruct(0xC); +} + +void sub_81CED10(struct Sprite *sprite) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + sprite->pos1.x = structPtr->unk1814 + 38; +} + +void sub_81CED30(u8 var) +{ + struct SpriteTemplate sprTemplate; + struct SpriteSheet sprSheet; + struct SpritePalette sprPal; + u8 spriteId; + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + if (structPtr->unk1816 == 0xFF) + { + sub_81D31D0(&sprSheet, &sprTemplate, &sprPal); + sprSheet.data = sub_81CDCB4(var); + sprPal.data = sub_81CDCD4(var); + structPtr->unk1818 = LoadSpritePalette(&sprPal); + structPtr->unk181A = LoadSpriteSheet(&sprSheet); + spriteId = CreateSprite(&sprTemplate, 38, 104, 0); + structPtr->unk1816 = spriteId; + if (spriteId == MAX_SPRITES) + { + FreeSpriteTilesByTag(0x64); + FreeSpritePaletteByTag(0x64); + structPtr->unk1816 = 0xFF; + } + else + { + structPtr->unk1816 = spriteId; + gSprites[structPtr->unk1816].callback = sub_81CED10; + structPtr->unk181C = (void*)(VRAM) + 0x10000 + (structPtr->unk181A * 32); + structPtr->unk1818 = (structPtr->unk1818 * 16) + 0x100; + } + } + else + { + DmaCopy16Defvars(3, sub_81CDCB4(var), structPtr->unk181C, 0x800); + LoadPalette(sub_81CDCD4(var), structPtr->unk1818, 0x20); + } +} + +void sub_81CEE44(void) +{ + struct UnknownStruct_81D1ED4 *unk = sub_81CDC70(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_81D2108(unk); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +void sub_81CEE68(void) +{ + SetPokenavVBlankCallback(); +} + +void sub_81CEE74(bool8 showBg) +{ + if (showBg) + ShowBg(2); + else + HideBg(2); +} + +void sub_81CEE90(void) +{ + struct UnknownStruct_81D1ED4 *unk = sub_81CDC70(); + u8 id = sub_81CDC84(); + + gUnknown_030012BC = id; + sub_81D1F84(unk, unk->unk14[3], unk->unk14[id]); + sub_81D2074(unk); +} + +void sub_81CEEC8(void) +{ + struct UnknownStruct_81D1ED4 *unk = sub_81CDC70(); + + if (sub_81CDD5C() || sub_81CDC60() != sub_81CDC50() - 1) + sub_81D1F84(unk, unk->unk14[sub_81CDC84()], unk->unk14[3]); +} + +u8 sub_81CEF14(void) +{ + struct Pokenav7Struct *structPtr = GetSubstructPtr(0xC); + + if (sub_81CDD5C() == 1) + return structPtr->monMarks.markings; + else + return 0; +} diff --git a/src/pokenav_unk_8.c b/src/pokenav_unk_8.c new file mode 100644 index 000000000..bcafc14d0 --- /dev/null +++ b/src/pokenav_unk_8.c @@ -0,0 +1,189 @@ +#include "global.h" +#include "pokenav.h" +#include "bg.h" +#include "window.h" + +u32 sub_81CF134(void); +u32 sub_81CF1C4(void); +u32 sub_81CF1D8(void); +u32 sub_81CF278(void); +u32 sub_81CF578(s32); +u32 sub_81CF5F0(s32); +u32 sub_81CF668(s32); +u32 sub_81CF6E0(s32); +u32 sub_81CF758(s32); +u32 sub_81CF798(s32); + +const u32 gUnknown_086233A0[] = {0x16, 0x17, 0x18, 0x21, 0x2F}; + +u32 (*const gUnknown_086233B4[])(void) = +{ + sub_81CF134, + sub_81CF1C4, + sub_81CF1D8, + sub_81CF278 +}; + +const u16 gUnknown_086233C4[] = INCBIN_U16("graphics/pokenav/condition_search2.gbapal"); +const u32 gUnknown_086233E4[] = INCBIN_U32("graphics/pokenav/condition_search2.4bpp.lz"); +const u32 gUnknown_086234AC[] = INCBIN_U32("graphics/pokenav/condition_search2.bin.lz"); +const u16 gUnknown_08623570[] = INCBIN_U16("graphics/pokenav/8623570.gbapal"); + +const struct BgTemplate gUnknown_08623590 = +{ + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 0x06, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 +}; + +const struct BgTemplate gUnknown_08623594 = +{ + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 0x07, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 +}; + +const LoopedTask gUnknown_08623598[] = +{ + NULL, + sub_81CF578, + sub_81CF5F0, + sub_81CF668, + sub_81CF6E0, + sub_81CF758, + sub_81CF798 +}; + +const struct WindowTemplate gUnknown_086235B4 = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 6, + .width = 7, + .height = 2, + .paletteNum = 1, + .baseBlock = 20 +}; + +const u8 gUnknown_086235BC[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); +const u8 gUnknown_086235C8[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); +const u8 gUnknown_086235D4[] = _("{UNK_SPACER}"); + +struct PokenavSub7 +{ + u32 (*unk0)(struct PokenavSub7 *); + u32 loopedTaskId; + u8 fill1[12]; + u32 unk14; + u32 unk18; + u32 unk1C; + struct PokenavSub18 *unkPtr; +}; + +u32 sub_81CF010(struct PokenavSub7 *structPtr); +u32 sub_81CF030(struct PokenavSub7 *structPtr); +u32 sub_81CF0B8(struct PokenavSub7 *structPtr); +u32 sub_81CF0B0(struct PokenavSub7 *structPtr); +u32 sub_81CF11C(s32 state); + +bool32 sub_81CEF3C(void) +{ + struct PokenavSub7 *structPtr = AllocSubstruct(7, sizeof(struct PokenavSub7)); + if (structPtr == NULL) + return FALSE; + + structPtr->unkPtr = AllocSubstruct(18, sizeof(struct PokenavSub18)); + if (structPtr->unkPtr == NULL) + return FALSE; + + structPtr->unk0 = sub_81CF010; + structPtr->loopedTaskId = CreateLoopedTask(sub_81CF11C, 1); + structPtr->unk18 = 0; + structPtr->unk14 = gUnknown_086233A0[sub_81C76AC()]; + return TRUE; +} + +bool32 sub_81CEF98(void) +{ + struct PokenavSub7 *structPtr = AllocSubstruct(7, sizeof(struct PokenavSub7)); + if (structPtr == NULL) + return FALSE; + + structPtr->unkPtr = GetSubstructPtr(18); + structPtr->unk0 = sub_81CF030; + structPtr->unk18 = 1; + structPtr->unk14 = gUnknown_086233A0[sub_81C76AC()]; + return TRUE; +} + +u32 sub_81CEFDC(void) +{ + struct PokenavSub7 *structPtr = GetSubstructPtr(7); + return structPtr->unk0(structPtr); +} + +void sub_81CEFF0(void) +{ + struct PokenavSub7 *structPtr = GetSubstructPtr(7); + if (structPtr->unk1C == 0) + FreePokenavSubstruct(18); + FreePokenavSubstruct(7); +} + +bool32 sub_81CF010(struct PokenavSub7 *structPtr) +{ + if (!IsLoopedTaskActive(structPtr->loopedTaskId)) + structPtr->unk0 = sub_81CF030; + return FALSE; +} + +u32 sub_81CF030(struct PokenavSub7 *structPtr) +{ + if (gMain.newAndRepeatedKeys & DPAD_UP) + return 1; + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + return 2; + else if (gMain.newKeys & DPAD_LEFT) + return 3; + else if (gMain.newKeys & DPAD_RIGHT) + return 4; + else if (gMain.newKeys & B_BUTTON) + { + structPtr->unk1C = 0; + structPtr->unk0 = sub_81CF0B0; + return 5; + } + else if (gMain.newKeys & A_BUTTON) + { + structPtr->unkPtr->unk2 = GetSelectedMatchCall(); + structPtr->unk1C = 1; + structPtr->unk0 = sub_81CF0B8; + return 6; + } + else + return 0; +} + +u32 sub_81CF0B0(struct PokenavSub7 *structPtr) +{ + return 0x186A3; +} + +u32 sub_81CF0B8(struct PokenavSub7 *structPtr) +{ + return 0x186A9; +} + +u32 sub_81CF0C0(void) +{ + struct PokenavSub7 *structPtr = GetSubstructPtr(7); + return structPtr->unk18; +} diff --git a/src/pokenav_unk_9.c b/src/pokenav_unk_9.c new file mode 100644 index 000000000..2927d7211 --- /dev/null +++ b/src/pokenav_unk_9.c @@ -0,0 +1,74 @@ +#include "global.h" +#include "pokenav.h" +#include "bg.h" +#include "window.h" + +u32 sub_81CFB8C(void); +u32 sub_81CFC2C(void); +u32 sub_81CFC40(void); +u32 sub_81CFFFC(s32); +u32 sub_81D0074(s32); +u32 sub_81D00EC(s32); +u32 sub_81D0164(s32); +u32 sub_81D01DC(s32); +u32 sub_81D021C(s32); + +u32 (*const gUnknown_086235D8[])(void) = +{ + sub_81CFB8C, + sub_81CFC2C, + sub_81CFC40 +}; + +const u16 gUnknown_086235E4[] = INCBIN_U16("graphics/pokenav/ui_ribbons.gbapal"); +const u32 gUnknown_08623604[] = INCBIN_U32("graphics/pokenav/ui_ribbons.4bpp.lz"); +const u32 gUnknown_086236CC[] = INCBIN_U32("graphics/pokenav/ui_ribbons.bin.lz"); +const u16 gUnknown_08623790[] = INCBIN_U16("graphics/pokenav/8623790.gbapal"); + +const struct BgTemplate gUnknown_086237B0 = +{ + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 0x06, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 +}; + +const struct BgTemplate gUnknown_086237B4 = +{ + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 0x07, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 +}; + +const LoopedTask gUnknown_086237B8[] = +{ + NULL, + sub_81CFFFC, + sub_81D0074, + sub_81D00EC, + sub_81D0164, + sub_81D01DC, + sub_81D021C +}; + +const struct WindowTemplate gUnknown_086237D4 = +{ + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 6, + .width = 7, + .height = 2, + .paletteNum = 1, + .baseBlock = 20 +}; + +const u8 gUnknown_086237DC[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_RED}{WHITE}{GREEN}♂{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); +const u8 gUnknown_086237E8[] = _("{COLOR_HIGHLIGHT_SHADOW}{LIGHT_GREEN}{WHITE}{BLUE}♀{COLOR_HIGHLIGHT_SHADOW}{DARK_GREY}{WHITE}{LIGHT_GREY}"); +const u8 gUnknown_086237F4[] = _("{UNK_SPACER}"); diff --git a/src/random.c b/src/random.c index f0b2d9e5f..b570a7bc3 100644 --- a/src/random.c +++ b/src/random.c @@ -8,8 +8,8 @@ EWRAM_DATA static u8 sUnknown = 0; EWRAM_DATA static u32 sRandCount = 0; // IWRAM common -IWRAM_DATA u32 gRngValue; -IWRAM_DATA u32 gRng2Value; +u32 gRngValue; +u32 gRng2Value; u16 Random(void) { diff --git a/src/record_mixing.c b/src/record_mixing.c index 85b52e478..6cb145c80 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -82,21 +82,21 @@ union PlayerRecords // Static RAM declarations -static IWRAM_DATA bool8 gUnknown_03001130; -static IWRAM_DATA struct SecretBase *sSecretBasesSave; -static IWRAM_DATA TVShow *sTvShowsSave; -static IWRAM_DATA PokeNews *sPokeNewsSave; -static IWRAM_DATA OldMan *sOldManSave; -static IWRAM_DATA struct EasyChatPair *sEasyChatPairsSave; -static IWRAM_DATA struct RecordMixingDayCareMail *gUnknown_03001148; -static IWRAM_DATA void *sBattleTowerSave; -static IWRAM_DATA LilycoveLady *sLilycoveLadySave; -static IWRAM_DATA void *sApprenticesSave; -static IWRAM_DATA void *sBattleTowerSave_Duplicate; -static IWRAM_DATA u32 sRecordStructSize; -static IWRAM_DATA u8 gUnknown_03001160; -static IWRAM_DATA u32 filler_03001164; -static IWRAM_DATA struct PlayerHallRecords *gUnknown_03001168[3]; +static bool8 gUnknown_03001130; +static struct SecretBase *sSecretBasesSave; +static TVShow *sTvShowsSave; +static PokeNews *sPokeNewsSave; +static OldMan *sOldManSave; +static struct EasyChatPair *sEasyChatPairsSave; +static struct RecordMixingDayCareMail *gUnknown_03001148; +static void *sBattleTowerSave; +static LilycoveLady *sLilycoveLadySave; +static void *sApprenticesSave; +static void *sBattleTowerSave_Duplicate; +static u32 sRecordStructSize; +static u8 gUnknown_03001160; +static u32 filler_03001164; +static struct PlayerHallRecords *gUnknown_03001168[3]; static EWRAM_DATA struct RecordMixingDayCareMail gUnknown_02039F9C = {0}; static EWRAM_DATA union PlayerRecords *sReceivedRecords = NULL; diff --git a/src/recorded_battle.c b/src/recorded_battle.c index ac97dfcd6..9e03d57f6 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -100,8 +100,8 @@ EWRAM_DATA static u8 sApprenticeId = 0; EWRAM_DATA static u16 sEasyChatSpeech[6] = {0}; EWRAM_DATA static u8 sBattleOutcome = 0; -IWRAM_DATA static u8 sRecordMixFriendLanguage; -IWRAM_DATA static u8 sApprenticeLanguage; +static u8 sRecordMixFriendLanguage; +static u8 sApprenticeLanguage; // this file's functions static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2); diff --git a/src/reset_rtc_screen.c b/src/reset_rtc_screen.c index d675c49d1..1fe9f2279 100644 --- a/src/reset_rtc_screen.c +++ b/src/reset_rtc_screen.c @@ -142,7 +142,7 @@ static const union AnimCmd sSpriteAnim_85104CC[] = static const union AnimCmd sSpriteAnim_85104D4[] = { - ANIMCMD_FRAME(0, 158, .vFlip = TRUE), + ANIMCMD_FRAME(0, 30, .vFlip = TRUE), ANIMCMD_JUMP(0), }; diff --git a/src/reset_save_heap.c b/src/reset_save_heap.c index 95d63a323..beba742f5 100644 --- a/src/reset_save_heap.c +++ b/src/reset_save_heap.c @@ -14,7 +14,7 @@ void sub_81700F8(void) imeBackup = REG_IME; REG_IME = 0; - RegisterRamReset(0x00000001); + RegisterRamReset(RESET_EWRAM); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_FORCED_BLANK); REG_IME = imeBackup; gMain.inBattle = FALSE; diff --git a/src/rom_8034C54.c b/src/rom_8034C54.c index a3707017e..42817fc2b 100644 --- a/src/rom_8034C54.c +++ b/src/rom_8034C54.c @@ -43,9 +43,9 @@ static bool32 SharesPalWithAnyActive(u32 id); static void sub_8035648(void); // iwram -static IWRAM_DATA s32 gUnknown_03000DD4; -static IWRAM_DATA s32 gUnknown_03000DD8; -static IWRAM_DATA s32 gUnknown_03000DDC; +static s32 gUnknown_03000DD4; +static s32 gUnknown_03000DD8; +static s32 gUnknown_03000DDC; // ewram static EWRAM_DATA struct UnkStruct1 *gUnknown_02022E10 = {0}; diff --git a/src/roulette.c b/src/roulette.c index 25c079cda..662522aae 100644 --- a/src/roulette.c +++ b/src/roulette.c @@ -3994,8 +3994,8 @@ static void sub_8144514(struct Sprite *sprite) if (gUnknown_0203AB88->var94 > 40.f) return; - gUnknown_0203AB88->var98 = -(4.0f / (float)gUnknown_0203AB88->var86); - gUnknown_0203AB88->var90 = -(gUnknown_0203AB88->var8C / (float)gUnknown_0203AB88->var86); + gUnknown_0203AB88->var98 = -(4.0f / (float)(gUnknown_0203AB88->var86)); + gUnknown_0203AB88->var90 = -(gUnknown_0203AB88->var8C / (float)(gUnknown_0203AB88->var86)); sprite->animNum = 2; sprite->animBeginning = TRUE; sprite->animEnded = FALSE; @@ -4010,8 +4010,8 @@ static void sub_81445D8(struct Sprite *sprite) return; m4aSongNumStartOrChange(SE_TAMAKORO_E); - gUnknown_0203AB88->var98 = -(20.0f / (float)gUnknown_0203AB88->var84); - gUnknown_0203AB88->var90 = ((1.0f - gUnknown_0203AB88->var8C) / (float)gUnknown_0203AB88->var84); + gUnknown_0203AB88->var98 = -(20.0f / (float)(gUnknown_0203AB88->var84)); + gUnknown_0203AB88->var90 = ((1.0f - gUnknown_0203AB88->var8C) / (float)(gUnknown_0203AB88->var84)); sprite->animNum = 1; sprite->animBeginning = TRUE; sprite->animEnded = FALSE; diff --git a/src/roulette_util.c b/src/roulette_util.c index 9531302d9..f1f04a73a 100755 --- a/src/roulette_util.c +++ b/src/roulette_util.c @@ -408,7 +408,8 @@ void UpdatePulseBlend(struct PulseBlend *pulseBlend) } } break; - case 2: // Flip back and forth + case (MODERN ? -2 : 2): // Flip back and forth + // This code is never reached in vanilla if (pulseBlendPalette->fadeDirection) pulseBlendPalette->blendCoeff = 0; else @@ -4,10 +4,10 @@ #include "text.h" // iwram bss -IWRAM_DATA static u16 sErrorStatus; -IWRAM_DATA static struct SiiRtcInfo sRtc; -IWRAM_DATA static u8 sProbeResult; -IWRAM_DATA static u16 sSavedIme; +static u16 sErrorStatus; +static struct SiiRtcInfo sRtc; +static u8 sProbeResult; +static u16 sSavedIme; // iwram common struct Time gLocalTime; diff --git a/src/save.c b/src/save.c index 45a75b5dc..cdfd2ae1d 100644 --- a/src/save.c +++ b/src/save.c @@ -626,7 +626,10 @@ static u16 CalculateChecksum(void *data, u16 size) u32 checksum = 0; for (i = 0; i < (size / 4); i++) - checksum += *((u32 *)data)++; + { + checksum += *((u32 *)data); + data += sizeof(u32); + } return ((checksum >> 16) + checksum); } diff --git a/src/scrcmd.c b/src/scrcmd.c index 8d597b887..57cd3edbe 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -62,7 +62,7 @@ static EWRAM_DATA u16 sMovingNpcMapBank = 0; static EWRAM_DATA u16 sMovingNpcMapId = 0; static EWRAM_DATA u16 sFieldEffectScriptId = 0; -IWRAM_DATA u8 gUnknown_03000F30; +static u8 gUnknown_03000F30; extern const SpecialFunc gSpecials[]; extern const u8 *gStdScripts[]; diff --git a/src/script.c b/src/script.c index 27476dba3..34484561c 100644 --- a/src/script.c +++ b/src/script.c @@ -10,12 +10,12 @@ extern const u8* gUnknown_020375C0; // ewram bss -IWRAM_DATA static u8 sScriptContext1Status; -IWRAM_DATA static u32 sUnusedVariable1; -IWRAM_DATA static struct ScriptContext sScriptContext1; -IWRAM_DATA static u32 sUnusedVariable2; -IWRAM_DATA static struct ScriptContext sScriptContext2; -IWRAM_DATA static bool8 sScriptContext2Enabled; +static u8 sScriptContext1Status; +static u32 sUnusedVariable1; +static struct ScriptContext sScriptContext1; +static u32 sUnusedVariable2; +static struct ScriptContext sScriptContext2; +static bool8 sScriptContext2Enabled; extern ScrCmdFunc gScriptCmdTable[]; extern ScrCmdFunc gScriptCmdTableEnd[]; diff --git a/src/script_menu.c b/src/script_menu.c index 082253e35..b17d3df38 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -1017,8 +1017,8 @@ const u8 *const gUnknown_0858BBEC[] = EWRAM_DATA u8 gUnknown_02039F90 = 0; -IWRAM_DATA u8 gUnknown_03001124[7]; -IWRAM_DATA u32 filler_0300112c; +static u8 gUnknown_03001124[7]; +static u32 filler_0300112c; static void Task_HandleMultichoiceInput(u8); static void Task_HandleYesNoInput(u8); diff --git a/src/secret_base.c b/src/secret_base.c index ac35a090a..12cb8cd61 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -71,7 +71,7 @@ static EWRAM_DATA struct SecretBaseRegistryMenu *sRegistryMenu = NULL; static void Task_ShowSecretBaseRegistryMenu(u8 taskId); static void BuildRegistryMenuItems(u8 taskId); -static void RegistryMenu_OnCursorMove(int unused, bool8 flag, struct ListMenu *menu); +static void RegistryMenu_OnCursorMove(s32 unused, bool8 flag, struct ListMenu *menu); static void FinalizeRegistryMenu(u8 taskId); static void AddRegistryMenuScrollArrows(u8 taskId); static void HandleRegistryMenuInput(u8 taskId); @@ -932,7 +932,7 @@ static void BuildRegistryMenuItems(u8 taskId) gMultiuseListMenuTemplate.maxShowed = data[3]; } -static void RegistryMenu_OnCursorMove(int unused, bool8 flag, struct ListMenu *menu) +static void RegistryMenu_OnCursorMove(s32 unused, bool8 flag, struct ListMenu *menu) { if (flag != TRUE) PlaySE(SE_SELECT); diff --git a/src/shop.c b/src/shop.c index 1c6d7cf2e..bf15568fb 100755 --- a/src/shop.c +++ b/src/shop.c @@ -87,8 +87,8 @@ static void Task_ReturnToItemListAfterItemPurchase(u8 taskId); static void Task_ReturnToItemListAfterDecorationPurchase(u8 taskId); static void Task_HandleShopMenuBuy(u8 taskId); static void Task_HandleShopMenuSell(u8 taskId); -static void BuyMenuPrintItemDescriptionAndShowItemIcon(int item, bool8 onInit, struct ListMenu *list); -static void BuyMenuPrintPriceInList(u8 windowId, int item, u8 y); +static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list); +static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y); static const struct YesNoFuncTable sShopPurchaseYesNoFuncs = { @@ -521,7 +521,7 @@ static void BuyMenuSetListEntry(struct ListMenuItem *menuItem, u16 item, u8 *nam menuItem->id = item; } -static void BuyMenuPrintItemDescriptionAndShowItemIcon(int item, bool8 onInit, struct ListMenu *list) +static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list) { const u8 *description; if (onInit != TRUE) @@ -550,7 +550,7 @@ static void BuyMenuPrintItemDescriptionAndShowItemIcon(int item, bool8 onInit, s BuyMenuPrint(2, description, 3, 1, 0, 0); } -static void BuyMenuPrintPriceInList(u8 windowId, int item, u8 y) +static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y) { u8 x; @@ -1230,4 +1230,4 @@ void CreateDecorationShop2Menu(const u16 *itemsForSale) CreateShopMenu(MART_TYPE_DECOR2); SetShopItemsForSale(itemsForSale); SetShopMenuCallback(EnableBothScriptContexts); -}
\ No newline at end of file +} diff --git a/src/slot_machine.c b/src/slot_machine.c index b853daa39..003ac3327 100644 --- a/src/slot_machine.c +++ b/src/slot_machine.c @@ -350,7 +350,7 @@ static EWRAM_DATA struct SpriteSheet *sUnknown_0203AB30 = NULL; static EWRAM_DATA struct SlotMachineEwramStruct *sSlotMachine = NULL; // IWRAM bss -static IWRAM_DATA struct SpriteFrameImage *gUnknown_03001188[26]; +static struct SpriteFrameImage *gUnknown_03001188[26]; // Const rom data. extern const struct UnkStruct1 *const gUnknown_083ED048[]; diff --git a/src/sound.c b/src/sound.c index 16f024858..dba4354df 100644 --- a/src/sound.c +++ b/src/sound.c @@ -19,11 +19,11 @@ EWRAM_DATA struct MusicPlayerInfo* gMPlay_PokemonCry = NULL; EWRAM_DATA u8 gPokemonCryBGMDuckingCounter = 0; // iwram bss -IWRAM_DATA static u16 sCurrentMapMusic; -IWRAM_DATA static u16 sNextMapMusic; -IWRAM_DATA static u8 sMapMusicState; -IWRAM_DATA static u8 sMapMusicFadeInSpeed; -IWRAM_DATA static u16 sFanfareCounter; +static u16 sCurrentMapMusic; +static u16 sNextMapMusic; +static u8 sMapMusicState; +static u8 sMapMusicFadeInSpeed; +static u16 sFanfareCounter; // iwram common bool8 gDisableMusic; diff --git a/src/sprite.c b/src/sprite.c index d2ea7889c..e25eac62e 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -285,10 +285,10 @@ static const struct OamDimensions sOamDimensions[3][4] = }; // iwram bss -IWRAM_DATA static u16 sSpriteTileRangeTags[MAX_SPRITES]; -IWRAM_DATA static u16 sSpriteTileRanges[MAX_SPRITES * 2]; -IWRAM_DATA static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT]; -IWRAM_DATA static u16 sSpritePaletteTags[16]; +static u16 sSpriteTileRangeTags[MAX_SPRITES]; +static u16 sSpriteTileRanges[MAX_SPRITES * 2]; +static struct AffineAnimState sAffineAnimStates[OAM_MATRIX_COUNT]; +static u16 sSpritePaletteTags[16]; // iwram common u32 gOamMatrixAllocBitmap; diff --git a/src/starter_choose.c b/src/starter_choose.c index 886daa45a..5524d407b 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -51,7 +51,7 @@ void sub_81346DC(struct Sprite *sprite); void sub_813473C(struct Sprite *sprite); void StarterPokemonSpriteCallback(struct Sprite *sprite); -static IWRAM_DATA u16 sStarterChooseWindowId; +static u16 sStarterChooseWindowId; // .rodata const u16 gBirchBagGrassPal[][16] = diff --git a/src/strings.c b/src/strings.c index 793256edb..8463cfacb 100644 --- a/src/strings.c +++ b/src/strings.c @@ -424,45 +424,45 @@ const u8 gText_PkmnGotOverInfatuation[] = _("{STR_VAR_1} got over its\ninfatuati const u8 gText_ThrowAwayItem[] = _("Throw away this\n{STR_VAR_1}?"); const u8 gText_ItemThrownAway[] = _("The {STR_VAR_1}\nwas thrown away.{PAUSE_UNTIL_PRESS}"); const u8 gUnknown_085E9E2E[] = _("Teach which POKéMON?"); -const u8 gUnknown_085E9E43[] = _("Choose a POKéMON."); -const u8 gUnknown_085E9E55[] = _("Move to where?"); -const u8 gUnknown_085E9E64[] = _("Teach which POKéMON?"); -const u8 gUnknown_085E9E79[] = _("Use on which POKéMON?"); -const u8 gUnknown_085E9E8F[] = _("Give to which POKéMON?"); -const u8 gUnknown_085E9EA6[] = _("Do what with this {PKMN}?"); -const u8 gUnknown_085E9EBC[] = _("There's nothing to CUT."); -const u8 gUnknown_085E9ED4[] = _("You can't SURF here."); -const u8 gUnknown_085E9EE9[] = _("You're already SURFING."); -const u8 gUnknown_085E9F01[] = _("Can't use that here."); -const u8 gUnknown_085E9F16[] = _("Restore which move?"); -const u8 gUnknown_085E9F2A[] = _("Boost PP of which move?"); -const u8 gUnknown_085E9F42[] = _("Do what with an item?"); -const u8 gUnknown_085E9F58[] = _("No POKéMON for battle!"); -const u8 gUnknown_085E9F6F[] = _("Choose a POKéMON."); -const u8 gUnknown_085E9F81[] = _("Not enough HP…"); -const u8 gUnknown_085E9F90[] = _("{STR_VAR_1} POKéMON are needed."); -const u8 gUnknown_085E9FA7[] = _("POKéMON can't be the same."); -const u8 gUnknown_085E9FC2[] = _("No identical hold items."); -const u8 gUnknown_085E9FDB[] = _("The current is much too fast!"); -const u8 gUnknown_085E9FF9[] = _("Do what with the MAIL?"); -const u8 gUnknown_085EA010[] = _("Choose POKéMON or CANCEL."); -const u8 gUnknown_085EA02A[] = _("Choose POKéMON and confirm."); -const u8 gUnknown_085EA046[] = _("Let's enjoy cycling!"); -const u8 gUnknown_085EA05B[] = _("This is in use already."); -const u8 gUnknown_085EA073[] = _("{STR_VAR_1} is already holding\none {STR_VAR_2}."); -const u8 gUnknown_085EA091[] = _("No use."); -const u8 gUnknown_085EA099[] = _("ABLE"); -const u8 gUnknown_085EA09E[] = _("FIRST"); -const u8 gUnknown_085EA0A4[] = _("SECOND"); -const u8 gUnknown_085EA0AB[] = _("THIRD"); -const u8 gUnknown_085EA0B1[] = _("ABLE"); -const u8 gUnknown_085EA0B6[] = _("NOT ABLE"); -const u8 gUnknown_085EA0BF[] = _("ABLE!"); -const u8 gUnknown_085EA0C5[] = _("NOT ABLE!"); -const u8 gUnknown_085EA0CF[] = _("LEARNED"); -const u8 gUnknown_085EA0D7[] = _("HAVE"); -const u8 gUnknown_085EA0DC[] = _("DON'T HAVE"); -const u8 gUnknown_085EA0E7[] = _("FOURTH"); +const u8 gText_ChoosePokemon[] = _("Choose a POKéMON."); +const u8 gText_MoveToWhere[] = _("Move to where?"); +const u8 gText_TeachWhichPokemon[] = _("Teach which POKéMON?"); +const u8 gText_UseOnWhichPokemon[] = _("Use on which POKéMON?"); +const u8 gText_GiveToWhichPokemon[] = _("Give to which POKéMON?"); +const u8 gText_DoWhatWithPokemon[] = _("Do what with this {PKMN}?"); +const u8 gText_NothingToCut[] = _("There's nothing to CUT."); +const u8 gText_CantSurfHere[] = _("You can't SURF here."); +const u8 gText_AlreadySurfing[] = _("You're already SURFING."); +const u8 gText_CantUseHere[] = _("Can't use that here."); +const u8 gText_RestoreWhichMove[] = _("Restore which move?"); +const u8 gText_BoostPp[] = _("Boost PP of which move?"); +const u8 gText_DoWhatWithItem[] = _("Do what with an item?"); +const u8 gText_NoPokemonForBattle[] = _("No POKéMON for battle!"); +const u8 gText_ChoosePokemon2[] = _("Choose a POKéMON."); +const u8 gText_NotEnoughHp[] = _("Not enough HP…"); +const u8 gText_PokemonAreNeeded[] = _("{STR_VAR_1} POKéMON are needed."); +const u8 gText_PokemonCantBeSame[] = _("POKéMON can't be the same."); +const u8 gText_NoIdenticalHoldItems[] = _("No identical hold items."); +const u8 gText_CurrentIsTooFast[] = _("The current is much too fast!"); +const u8 gText_DoWhatWithMail[] = _("Do what with the MAIL?"); +const u8 gText_ChoosePokemonCancel[] = _("Choose POKéMON or CANCEL."); +const u8 gText_ChoosePokemonConfirm[] = _("Choose POKéMON and confirm."); +const u8 gText_EnjoyCycling[] = _("Let's enjoy cycling!"); +const u8 gText_InUseAlready_PM[] = _("This is in use already."); +const u8 gText_AlreadyHoldingOne[] = _("{STR_VAR_1} is already holding\none {STR_VAR_2}."); +const u8 gText_NoUse[] = _("No use."); +const u8 gText_Able[] = _("ABLE"); +const u8 gText_First_PM[] = _("FIRST"); +const u8 gText_Second_PM[] = _("SECOND"); +const u8 gText_Third_PM[] = _("THIRD"); +const u8 gText_Able2[] = _("ABLE"); +const u8 gText_NotAble[] = _("NOT ABLE"); +const u8 gText_Able3[] = _("ABLE!"); +const u8 gText_NotAble2[] = _("NOT ABLE!"); +const u8 gText_Learned[] = _("LEARNED"); +const u8 gText_Have[] = _("HAVE"); +const u8 gText_DontHave[] = _("DON'T HAVE"); +const u8 gText_Fourth[] = _("FOURTH"); const u8 gText_PkmnCantParticipate[] = _("That POKéMON can't participate.{PAUSE_UNTIL_PRESS}"); const u8 gText_CancelParticipation[] = _("Cancel participation?"); const u8 gText_CancelBattle[] = _("Cancel the battle?"); diff --git a/src/text.c b/src/text.c index 43834eab4..7e4fa7104 100644 --- a/src/text.c +++ b/src/text.c @@ -197,7 +197,7 @@ bool16 AddTextPrinter(struct TextPrinterTemplate *printerTemplate, u8 speed, voi gTempTextPrinter.textSpeed = 0; for (j = 0; j < 0x400; ++j) { - if ((u32)RenderFont(&gTempTextPrinter) == 1) + if (RenderFont(&gTempTextPrinter) == 1) break; } @@ -462,6 +462,108 @@ u8 GetLastTextColor(u8 colorType) } } +#ifdef NONMATCHING + +#define GLYPH_COPY(fromY_, toY_, fromX_, toX_, unk) \ +{ \ + u32 i, j, *ptr, toY, fromX, toX, r5, toOrr, bits; \ + u8 *dst; \ + \ + j = fromX_; \ + i = fromY_; \ + ptr = unk; \ + toX = toX_; \ + toY = toY_; \ + fromX = fromX_; \ + \ + for (; i < toY; i++) \ + { \ + r5 = *(ptr++); \ + for (j = fromX; j < toX; j++) \ + { \ + toOrr = r5 & 0xF; \ + if (toOrr) \ + { \ + dst = windowTiles + ((j / 8) * 32) + ((j & 7) / 2) + ((i / 8) * widthOffset) + ((i & 7) * 4); \ + bits = ((j & 1) << 2); \ + *dst = ((toOrr << bits) | (*dst & (0xF0 >> bits))); \ + } \ + r5 >>= 4; \ + } \ + } \ +} + +void CopyGlyphToWindow(struct TextPrinter *textPrinter) +{ + struct Window *win; + struct WindowTemplate *winTempl; + struct Struct_03002F90 *unkStruct; + u32 currX, widthOffset, currY; + s32 r4, r0; + u8 *windowTiles; + + win = &gWindows[textPrinter->printerTemplate.windowId]; + winTempl = &win->window; + + r4 = (winTempl->width * 8) - textPrinter->printerTemplate.currentX; + if (r4 > gUnknown_03002F90.unk80) + r4 = gUnknown_03002F90.unk80; + + r0 = (winTempl->height * 8) - textPrinter->printerTemplate.currentY; + if (r0 > gUnknown_03002F90.unk81) + r0 = gUnknown_03002F90.unk81; + + currX = textPrinter->printerTemplate.currentX; + currY = textPrinter->printerTemplate.currentY; + unkStruct = &gUnknown_03002F90; + windowTiles = win->tileData; + widthOffset = winTempl->width * 32; + + if (r4 <= 8) + { + if (r0 <= 8) + { + GLYPH_COPY(currY, currY + r0, currX, currX + r4, unkStruct->unk0); + } + else + { + u32 temp; + GLYPH_COPY(currY, currY + 8, currX, currX + r4, unkStruct->unk0); + + temp = currY + 8; + GLYPH_COPY(temp, (temp - 8) + r0, currX, currX + r4, unkStruct->unk40); + } + } + else + { + if (r0 <= 8) + { + u32 temp; + GLYPH_COPY(currY, currY + r0, currX, currX + 8, unkStruct->unk0); + + temp = currX + 8; + GLYPH_COPY(currY, currY + r0, temp, (temp - 8) + r4, unkStruct->unk20); + } + else + { + u32 temp; + GLYPH_COPY(currY, currY + 8, currX, currX + 8, unkStruct->unk0); + + temp = currX + 8; + GLYPH_COPY(currY, currY + 8, temp, temp - 8 + r4, unkStruct->unk20); + + temp = currY + 8; + GLYPH_COPY(temp, temp - 8 + r0, currX, currX + 8, unkStruct->unk40); + { + u32 tempX, tempY; + tempX = currX + 8; + tempY = currY + 8; + GLYPH_COPY(tempY, tempY - 8 + r0, tempX, tempX - 8 + r4, unkStruct->unk60); + } + } + } +} +#else NAKED void CopyGlyphToWindow(struct TextPrinter *x) { @@ -1164,6 +1266,7 @@ _080052AA:\n\ bx r0\n\ .pool"); } +#endif // NONMATCHING void ClearTextSpan(struct TextPrinter *textPrinter, u32 width) { diff --git a/src/trade.c b/src/trade.c index d97325174..94accc43c 100644 --- a/src/trade.c +++ b/src/trade.c @@ -158,6 +158,9 @@ static EWRAM_DATA struct { /*0xFE*/ u8 unk_FE; } *gUnknown_020322A0 = {NULL}; +#if !defined(NONMATCHING) && MODERN +#define static +#endif static bool32 sub_8077260(void); static void sub_80773D0(void); static void sub_807811C(void); @@ -2779,7 +2782,7 @@ static void sub_8079398(void) } } -static void DisplayMessageAndContinueTask(void) +static void Wait2SecondsAndCreateYesNoMenu(void) { gUnknown_0203229C->unk_A8++; @@ -2918,7 +2921,7 @@ static void sub_80795AC(void) sub_80781C8(); break; case 14: - DisplayMessageAndContinueTask(); + Wait2SecondsAndCreateYesNoMenu(); break; case 15: sub_8079034(); @@ -5840,7 +5843,7 @@ static void _CreateInGameTradePokemon(u8 whichPlayerMon, u8 whichInGameTrade) SetMonData(pokemon, MON_DATA_NICKNAME, inGameTrade->name); SetMonData(pokemon, MON_DATA_OT_NAME, inGameTrade->otName); SetMonData(pokemon, MON_DATA_OT_GENDER, &inGameTrade->otGender); - SetMonData(pokemon, MON_DATA_ALT_ABILITY, &inGameTrade->secondAbility); + SetMonData(pokemon, MON_DATA_ABILITY_NUM, &inGameTrade->secondAbility); SetMonData(pokemon, MON_DATA_BEAUTY, &inGameTrade->stats[1]); SetMonData(pokemon, MON_DATA_CUTE, &inGameTrade->stats[2]); SetMonData(pokemon, MON_DATA_COOL, &inGameTrade->stats[0]); diff --git a/src/trainer_card.c b/src/trainer_card.c index 52a060ae9..9c4816c42 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -106,7 +106,7 @@ static void sub_80C438C(u8); static void sub_80C4FF0(void); static void sub_80C4550(u16*); static void sub_80C45C0(u16*); -static void sub_80C4630(void); +static void TrainerCard_PrintStarsAndBadgesOnCard(void); static void PrintTimeOnCard(void); static void sub_80C4918(void); static bool8 sub_80C4940(void); @@ -117,7 +117,7 @@ static bool8 HasAllFrontierSymbols(void); static u8 GetRubyTrainerStars(struct TrainerCard*); static u16 GetCaughtMonsCount(void); static void SetPlayerCardData(struct TrainerCard*, u8); -static void sub_80C3020(struct TrainerCard*); +static void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard*); static u8 VersionToCardType(u8); static void SetDataFromTrainerCard(void); static void HandleGpuRegs(void); @@ -141,7 +141,7 @@ static void PrintBerryCrushStringOnCard(void); static void PrintPokeblockStringOnCard(void); static void PrintUnionStringOnCard(void); static void PrintContestStringOnCard(void); -static void sub_80C4140(void); +static void TrainerCard_PrintPokemonIconsOnCard(void); static void PrintBattleFacilityStringOnCard(void); static void sub_80C42A4(void); static void PrintAllVariableNumsOnCardPage2(void); @@ -179,17 +179,17 @@ static const u16 gEmeraldTrainerCard3Star_Pal[] = INCBIN_U16("graphics/trainer_c static const u16 gFireRedTrainerCard3Star_Pal[] = INCBIN_U16("graphics/trainer_card/three_stars_fr.gbapal"); static const u16 gEmeraldTrainerCard4Star_Pal[] = INCBIN_U16("graphics/trainer_card/four_stars.gbapal"); static const u16 gFireRedTrainerCard4Star_Pal[] = INCBIN_U16("graphics/trainer_card/four_stars_fr.gbapal"); -static const u16 gUnknown_0856F4AC[] = INCBIN_U16("graphics/trainer_card/female_bg.gbapal"); -static const u16 gUnknown_0856F4CC[] = INCBIN_U16("graphics/trainer_card/female_bg_fr.gbapal"); -static const u16 gUnknown_0856F4EC[] = INCBIN_U16("graphics/trainer_card/badges.gbapal"); -static const u16 gUnknown_0856F50C[] = INCBIN_U16("graphics/trainer_card/badges_fr.gbapal"); +static const u16 sEmeraldTrainerCardFemaleBackground_Pal[] = INCBIN_U16("graphics/trainer_card/female_bg.gbapal"); +static const u16 sFireRedTrainerCardFemaleBackground_Pal[] = INCBIN_U16("graphics/trainer_card/female_bg_fr.gbapal"); +static const u16 sEmeraldTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/badges.gbapal"); +static const u16 sFireRedTrainerCardBadges_Pal[] = INCBIN_U16("graphics/trainer_card/badges_fr.gbapal"); static const u16 gUnknown_0856F52C[] = INCBIN_U16("graphics/trainer_card/gold.gbapal"); static const u16 gUnknown_0856F54C[] = INCBIN_U16("graphics/trainer_card/stickers_fr1.gbapal"); static const u16 gUnknown_0856F56C[] = INCBIN_U16("graphics/trainer_card/stickers_fr2.gbapal"); static const u16 gUnknown_0856F58C[] = INCBIN_U16("graphics/trainer_card/stickers_fr3.gbapal"); static const u16 gUnknown_0856F5AC[] = INCBIN_U16("graphics/trainer_card/stickers_fr4.gbapal"); -static const u32 gUnknown_0856F5CC[] = INCBIN_U32("graphics/trainer_card/badges.4bpp.lz"); -static const u32 gUnknown_0856F814[] = INCBIN_U32("graphics/trainer_card/badges_fr.4bpp.lz"); +static const u32 sEmeraldTrainerCardBadges_Tile[] = INCBIN_U32("graphics/trainer_card/badges.4bpp.lz"); +static const u32 sFireRedTrainerCardBadges_Tile[] = INCBIN_U32("graphics/trainer_card/badges_fr.4bpp.lz"); static const struct BgTemplate gUnknown_0856FAB4[4] = { @@ -376,7 +376,7 @@ static void sub_80C2760(u8 taskId) sData->var_0++; break; case 6: - sub_80C4630(); + TrainerCard_PrintStarsAndBadgesOnCard(); sData->var_0++; break; case 7: @@ -528,9 +528,9 @@ static bool8 LoadCardGfx(void) break; case 3: if (sData->cardType != CARD_TYPE_FRLG) - LZ77UnCompWram(gUnknown_0856F5CC, sData->var_13A8); + LZ77UnCompWram(sEmeraldTrainerCardBadges_Tile, sData->var_13A8); else - LZ77UnCompWram(gUnknown_0856F814, sData->var_13A8); + LZ77UnCompWram(sFireRedTrainerCardBadges_Tile, sData->var_13A8); break; case 4: if (sData->cardType != CARD_TYPE_FRLG) @@ -722,7 +722,7 @@ static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType) } } -static void sub_80C3020(struct TrainerCard *trainerCard) +static void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCard) { memset(trainerCard, 0, sizeof(struct TrainerCard)); trainerCard->version = GAME_VERSION; @@ -733,9 +733,9 @@ static void sub_80C3020(struct TrainerCard *trainerCard) trainerCard->stars++; if (trainerCard->gender == FEMALE) - trainerCard->var_4F = gUnknown_08329D54[(trainerCard->trainerId % 8) + 8]; + trainerCard->var_4F = gLinkPlayerFacilityClasses[(trainerCard->trainerId % 8) + 8]; else - trainerCard->var_4F = gUnknown_08329D54[trainerCard->trainerId % 8]; + trainerCard->var_4F = gLinkPlayerFacilityClasses[trainerCard->trainerId % 8]; } void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) @@ -749,9 +749,9 @@ void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) trainerCard->stars++; if (trainerCard->gender == FEMALE) - trainerCard->var_4F = gUnknown_08329D54[(trainerCard->trainerId % 8) + 8]; + trainerCard->var_4F = gLinkPlayerFacilityClasses[(trainerCard->trainerId % 8) + 8]; else - trainerCard->var_4F = gUnknown_08329D54[trainerCard->trainerId % 8]; + trainerCard->var_4F = gLinkPlayerFacilityClasses[trainerCard->trainerId % 8]; } void CopyTrainerCardData(struct TrainerCard *dst, u16 *src, u8 gameVersion) @@ -938,7 +938,7 @@ static bool8 PrintStringsOnCardPage2(void) PrintContestStringOnCard(); break; case 6: - sub_80C4140(); + TrainerCard_PrintPokemonIconsOnCard(); PrintBattleFacilityStringOnCard(); break; case 7: @@ -1300,7 +1300,7 @@ static void PrintBattleFacilityStringOnCard(void) } } -static void sub_80C4140(void) +static void TrainerCard_PrintPokemonIconsOnCard(void) { u8 i; u8 buffer[] = {0x05, 0x06, 0x07, 0x08, 0x09, 0x0a}; @@ -1312,7 +1312,7 @@ static void sub_80C4140(void) { if (sData->trainerCard.monSpecies[i]) { - u8 monSpecies = sub_80D30A0(sData->trainerCard.monSpecies[i]); + u8 monSpecies = GetMonIconPaletteIndexFromSpecies(sData->trainerCard.monSpecies[i]); WriteSequenceToBgTilemapBuffer(3, 16 * i + 224, buffer2[i] + 3, 15, 4, 4, buffer[monSpecies], 1); } } @@ -1392,16 +1392,16 @@ static u8 SetCardBgsAndPals(void) if (sData->cardType != CARD_TYPE_FRLG) { LoadPalette(gEmeraldTrainerCardStarPals[sData->trainerCard.stars], 0, 96); - LoadPalette(gUnknown_0856F4EC, 48, 32); + LoadPalette(sEmeraldTrainerCardBadges_Pal, 48, 32); if (sData->trainerCard.gender) - LoadPalette(gUnknown_0856F4AC, 16, 32); + LoadPalette(sEmeraldTrainerCardFemaleBackground_Pal, 16, 32); } else { LoadPalette(gFireRedTrainerCardStarPals[sData->trainerCard.stars], 0, 96); - LoadPalette(gUnknown_0856F50C, 48, 32); + LoadPalette(sFireRedTrainerCardBadges_Pal, 48, 32); if (sData->trainerCard.gender) - LoadPalette(gUnknown_0856F4CC, 16, 32); + LoadPalette(sFireRedTrainerCardFemaleBackground_Pal, 16, 32); } LoadPalette(gUnknown_0856F52C, 64, 32); break; @@ -1458,7 +1458,7 @@ static void sub_80C45C0(u16* ptr) static const u8 gUnknown_0856FB78[] = {7, 7}; -static void sub_80C4630(void) +static void TrainerCard_PrintStarsAndBadgesOnCard(void) { s16 i, x; u16 tileNum = 192; @@ -1684,7 +1684,7 @@ static bool8 sub_80C4C1C(struct Task* task) sub_80C438C(2); sub_80C4550(sData->var_EF8); sub_80C45C0(sData->var_598); - sub_80C4630(); + TrainerCard_PrintStarsAndBadgesOnCard(); } sub_80C438C(1); sData->var_8 ^= 1; @@ -1764,7 +1764,7 @@ void ShowPlayerTrainerCard(void (*callback)(void)) sData->isLink = FALSE; sData->language = GAME_LANGUAGE; - sub_80C3020(&sData->trainerCard); + TrainerCard_GenerateCardForLinkPlayer(&sData->trainerCard); SetMainCallback2(CB2_InitTrainerCard); } diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 650a748cb..77c8fcb53 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -915,7 +915,7 @@ void SetHillTrainerFlag(void) } } -const u8 *sub_81D62AC(void) +const u8 *GetTrainerHillTrainerScript(void) { return EventScript_2C83F0; } diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index 6824e8747..047783a85 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -104,7 +104,7 @@ static void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 if (paletteTag == 0xFFFF) { sCreatingSpriteTemplate.paletteTag = 0xFFFF; - LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20); } else { @@ -130,7 +130,7 @@ static void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 static void LoadPicPaletteBySlot(u16 species, u32 otId, u32 personality, u8 paletteSlot, bool8 isTrainer) { if (!isTrainer) - LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), paletteSlot * 0x10, 0x20); + LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, otId, personality), paletteSlot * 0x10, 0x20); else LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, paletteSlot * 0x10, 0x20); } diff --git a/src/trainer_see.c b/src/trainer_see.c index 9925aa6bc..22b256a99 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -235,7 +235,7 @@ static u8 CheckTrainer(u8 eventObjectId) u8 approachDistance; if (InTrainerHill() == TRUE) - scriptPtr = sub_81D62AC(); + scriptPtr = GetTrainerHillTrainerScript(); else scriptPtr = GetEventObjectScriptPointerByEventObjectId(eventObjectId); @@ -56,9 +56,9 @@ struct { u16 move; } sTV_SecretBaseVisitMonsTemp[10]; -IWRAM_DATA u8 sTVShowMixingNumPlayers; -IWRAM_DATA u8 sTVShowNewsMixingNumPlayers; -IWRAM_DATA s8 sTVShowMixingCurSlot; +static u8 sTVShowMixingNumPlayers; +static u8 sTVShowNewsMixingNumPlayers; +static s8 sTVShowMixingCurSlot; EWRAM_DATA u16 sPokemonAnglerSpecies = 0; EWRAM_DATA u16 sPokemonAnglerAttemptCounters = 0; @@ -69,10 +69,9 @@ EWRAM_DATA ALIGNED(4) u8 sTVShowState = 0; EWRAM_DATA u8 sTVSecretBaseSecretsRandomValues[3] = {}; // Static ROM declarations - -extern const u8 *const sTVBravoTrainerTextGroup[]; -extern const u8 *const sTVBravoTrainerBattleTowerTextGroup[]; - +#if !defined(NONMATCHING) && MODERN +#define static +#endif void ClearPokemonNews(void); u8 GetTVChannelByShowType(u8 kind); u8 FindFirstActiveTVShowThatIsNotAMassOutbreak(void); @@ -3434,7 +3433,7 @@ bool8 TV_IsScriptShowKindAlreadyInQueue(void) return FALSE; } -bool8 TV_PutNameRaterShowOnTheAirIfNicnkameChanged(void) +bool8 TV_PutNameRaterShowOnTheAirIfNicknameChanged(void) { GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar1); if (!StringCompare(gStringVar3, gStringVar1)) diff --git a/src/union_room.c b/src/union_room.c index 6e7c0965d..01288c8cc 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1,53 +1,54 @@ #include "global.h" -#include "window.h" +#include "alloc.h" +#include "battle.h" +#include "berry_crush.h" #include "bg.h" -#include "random.h" -#include "string_util.h" -#include "task.h" +#include "cable_club.h" +#include "data.h" +#include "decompress.h" +#include "dodrio_berry_picking.h" +#include "dynamic_placeholder_text_util.h" +#include "easy_chat.h" #include "event_data.h" +#include "event_obj_lock.h" +#include "field_control_avatar.h" +#include "field_player_avatar.h" +#include "field_screen_effect.h" +#include "field_weather.h" +#include "international_string_util.h" +#include "librfu.h" #include "link.h" #include "link_rfu.h" -#include "librfu.h" -#include "alloc.h" -#include "menu.h" #include "list_menu.h" +#include "load_save.h" +#include "menu.h" #include "menu_helpers.h" -#include "script.h" -#include "sound.h" -#include "constants/songs.h" -#include "constants/game_stat.h" -#include "constants/maps.h" -#include "constants/species.h" -#include "constants/rgb.h" -#include "constants/battle_frontier.h" -#include "trade.h" -#include "trainer_card.h" +#include "mevent.h" +#include "mystery_gift.h" #include "overworld.h" -#include "battle.h" -#include "load_save.h" -#include "cable_club.h" -#include "field_control_avatar.h" -#include "party_menu.h" -#include "field_weather.h" #include "palette.h" -#include "decompress.h" -#include "start_menu.h" -#include "data.h" -#include "field_screen_effect.h" +#include "party_menu.h" +#include "pokemon_jump.h" +#include "random.h" +#include "script.h" #include "script_pokemon_util_80F87D8.h" -#include "international_string_util.h" -#include "field_player_avatar.h" +#include "sound.h" +#include "start_menu.h" +#include "string_util.h" #include "strings.h" -#include "mevent.h" -#include "dynamic_placeholder_text_util.h" +#include "task.h" +#include "trade.h" +#include "trainer_card.h" #include "union_room.h" -#include "easy_chat.h" -#include "event_obj_lock.h" #include "union_room_chat.h" -#include "berry_crush.h" -#include "mystery_gift.h" #include "union_room_player_avatar.h" -#include "pokemon_jump.h" +#include "window.h" +#include "constants/battle_frontier.h" +#include "constants/game_stat.h" +#include "constants/maps.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/species.h" EWRAM_DATA u8 gUnknown_02022C20[12] = {}; EWRAM_DATA u8 gUnknown_02022C2C = 0; @@ -60,9 +61,9 @@ EWRAM_DATA u8 gUnknown_02022C3E = 0; EWRAM_DATA struct TradeUnkStruct gUnknown_02022C40 = {}; // IWRAM vars -IWRAM_DATA struct UnkStruct_Leader *gUnknown_03000DA0; -IWRAM_DATA struct UnkStruct_Group *gUnknown_03000DA4; -IWRAM_DATA struct UnkStruct_URoom *gUnknown_03000DA8; +static struct UnkStruct_Leader *gUnknown_03000DA0; +static struct UnkStruct_Group *gUnknown_03000DA4; +static struct UnkStruct_URoom *gUnknown_03000DA8; // this file's functions void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5); @@ -98,7 +99,6 @@ bool32 sub_8017678(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1) u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId); void sub_801807C(struct TradeUnkStruct *arg0); void sub_801AC54(void); -void sub_802493C(u8 monId, MainCallback callback); void sub_80149D8(void); void MG_DrawTextBorder(u8 windowId); s8 mevent_message_print_and_prompt_yes_no(u8 *textState, u8 *arg1, u8 arg2, const u8 *str); diff --git a/src/union_room_battle.c b/src/union_room_battle.c index 9d9f9dcf3..79d12291d 100644 --- a/src/union_room_battle.c +++ b/src/union_room_battle.c @@ -40,8 +40,7 @@ struct UnkStruct_2022C6C s16 a0; }; -IWRAM_DATA struct UnkStruct_3000DAC * gUnknown_03000DAC; -IWRAM_DATA bool32 gUnknown_03000DB0; +static struct UnkStruct_3000DAC * gUnknown_03000DAC; EWRAM_DATA struct UnkStruct_2022C6C * gUnknown_02022C6C = NULL; diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c index 4c302c5eb..0b7324366 100644 --- a/src/union_room_player_avatar.c +++ b/src/union_room_player_avatar.c @@ -1,13 +1,14 @@ #include "global.h" -#include "constants/flags.h" -#include "constants/event_object_movement_constants.h" #include "event_data.h" #include "event_object_movement.h" -#include "script.h" #include "field_player_avatar.h" #include "fieldmap.h" -#include "union_room.h" +#include "script.h" #include "task.h" +#include "union_room.h" +#include "constants/event_objects.h" +#include "constants/event_object_movement_constants.h" +#include "constants/flags.h" EWRAM_DATA struct UnkStruct_8019BA8 * gUnknown_02022C64 = NULL; EWRAM_DATA u32 gUnknown_02022C68 = 0; @@ -390,7 +391,7 @@ void sub_8019E70(u8 * sp8, s32 r9) for (r7 = 0; r7 < 5; r7++) { s32 r5 = 5 * r9 + r7; - sp8[r5] = sprite_new(0x41, r5 - 0x38, gUnknown_082F0740[r9][0] + gUnknown_082F0760[r7][0], gUnknown_082F0740[r9][1] + gUnknown_082F0760[r7][1], 3, 1); + sp8[r5] = sprite_new(EVENT_OBJ_GFX_MAN_4, r5 - 0x38, gUnknown_082F0740[r9][0] + gUnknown_082F0760[r7][0], gUnknown_082F0740[r9][1] + gUnknown_082F0760[r7][1], 3, 1); sub_8097C44(r5 - 0x38, TRUE); } } diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index f28b651cc..655f38def 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -85,6 +85,10 @@ struct UsePokeblockStruct /*0x7FD0*/ struct UsePokeblockSubStruct info; }; +#define TAG_TILE_CONDITION_UP_DOWN 0 +#define TAG_PAL_CONDITION_UP_DOWN 0 +#define TAG_PAL_POKEBLOCK_CONDITION 1 + extern void sub_81D21DC(u8); // this file's functions @@ -130,26 +134,12 @@ static u8 sub_8168048(void); void sub_8168180(struct Sprite *sprite); void sub_81681B4(struct Sprite *sprite); void sub_8168168(struct Sprite *sprite); +void sub_8168374(struct Sprite *sprite); -extern const struct BgTemplate gUnknown_085DFCCC[4]; -extern const struct WindowTemplate gUnknown_085DFCDC[]; -extern const struct WindowTemplate sUsePokeblockYesNoWinTemplate[]; -extern const u8* sContestStatNames[]; -extern const u32 gUnknown_085DFCB0[]; -extern const u8 gUnknown_085DFCC4[]; -extern const struct SpriteSheet gSpriteSheet_ConditionUpDown; -extern const struct SpritePalette gSpritePalette_ConditionUpDown; -extern const struct SpriteTemplate gSpriteTemplate_085DFD5C; -extern const s16 gUnknown_085DFD28[][2]; -extern const u32 gUnknown_085DFB60[]; -extern const u32 gUnknown_085DFA80[]; -extern const u32 gUnknown_085DFA60[]; -extern const u32 gUnknown_085DFC0C[]; extern const u16 gUnknown_086231E8[]; extern const u16 gUnknown_08623208[]; -extern const u8 gUnknown_085DFCC9[]; -extern const struct SpritePalette gUnknown_085DFDB8; -extern const struct SpriteTemplate gUnknown_085DFDA0; +extern const struct SpritePalette gSpritePalette_085DFDB8; +extern const struct SpriteTemplate gSpriteTemplate_085DFDA0; // ram variables EWRAM_DATA struct UsePokeblockSubStruct *gUnknown_0203BC90 = NULL; @@ -165,6 +155,245 @@ EWRAM_DATA struct UsePokeblockStruct *gUnknown_0203BCAC = NULL; // const rom data // todo: make it static once the file is decompiled +const u32 gUnknown_085DFA60[] = INCBIN_U32("graphics/interface/85DFA60.bin"); +const u32 gUnknown_085DFA80[] = INCBIN_U32("graphics/interface/85DFA80.4bpp"); +const u32 gUnknown_085DFB60[] = INCBIN_U32("graphics/interface/85DFB60.bin"); +const u32 gUnknown_085DFC0C[] = INCBIN_U32("graphics/interface/85DFC0C.bin"); + +const u32 gUnknown_085DFCB0[] = +{ + MON_DATA_COOL, + MON_DATA_TOUGH, + MON_DATA_SMART, + MON_DATA_CUTE, + MON_DATA_BEAUTY +}; + +const u8 gUnknown_085DFCC4[] = +{ + 0, // Spicy/Cool + 4, // Dry/Beauty + 3, // Sweet/Cute + 2, // Bitter/Smart + 1 // Sour/Tough +}; + +const u8 gUnknown_085DFCC9[] = +{ + 0, + 8, + 1 +}; + +const struct BgTemplate gUnknown_085DFCCC[4] = +{ + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 0x1F, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 0x1E, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 3, + .mapBaseIndex = 0x1D, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x100 + }, + { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 0x17, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + } +}; + +const struct WindowTemplate gUnknown_085DFCDC[] = +{ + { + .bg = 0, + .tilemapLeft = 0xD, + .tilemapTop = 1, + .width = 0xD, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 1 + }, + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0xE, + .width = 0xB, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x35 + }, + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 0x11, + .width = 0x1C, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x4B + }, + DUMMY_WIN_TEMPLATE +}; + +const struct WindowTemplate sUsePokeblockYesNoWinTemplate = +{ + .bg = 0, + .tilemapLeft = 0x18, + .tilemapTop = 0xB, + .width = 5, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 0x83 +}; + +const u8 *const sContestStatNames[] = +{ + gText_Coolness, + gText_Toughness, + gText_Smartness, + gText_Cuteness, + gText_Beauty3 +}; + +const struct SpriteSheet gSpriteSheet_ConditionUpDown = +{ + gUsePokeblockUpDown_Gfx, 0x200, TAG_TILE_CONDITION_UP_DOWN +}; + +const struct SpritePalette gSpritePalette_ConditionUpDown = +{ + gUsePokeblockUpDown_Pal, TAG_PAL_CONDITION_UP_DOWN +}; + +const s16 gUnknown_085DFD28[][2] = +{ + {0x9C, 0x24}, + {0x75, 0x3B}, + {0x75, 0x76}, + {0xC5, 0x76}, + {0xC5, 0x3B} +}; + +const struct OamData gOamData_085DFD3C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +const union AnimCmd gSpriteAnim_085DFD44[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_085DFD4C[] = +{ + ANIMCMD_FRAME(8, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_085DFD54[] = +{ + gSpriteAnim_085DFD44, + gSpriteAnim_085DFD4C +}; + +const struct SpriteTemplate gSpriteTemplate_085DFD5C = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gOamData_085DFD3C, + .anims = gSpriteAnimTable_085DFD54, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +const struct OamData gOamData_085DFD74 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(64x32), + .x = 0, + .size = SPRITE_SIZE(64x32), + .tileNum = 0, + .priority = 1, + .paletteNum = 0, +}; + +const union AnimCmd gSpriteAnim_085DFD7C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_085DFD84[] = +{ + ANIMCMD_FRAME(32, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_085DFD8C[] = +{ + ANIMCMD_FRAME(64, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_085DFD94[] = +{ + gSpriteAnim_085DFD7C, + gSpriteAnim_085DFD84, + gSpriteAnim_085DFD8C +}; + +const struct SpriteTemplate gSpriteTemplate_085DFDA0 = +{ + .tileTag = 1, + .paletteTag = 1, + .oam = &gOamData_085DFD74, + .anims = gSpriteAnimTable_085DFD94, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8168374, +}; + +const struct SpritePalette gSpritePalette_085DFDB8 = +{ + gUsePokeblockCondition_Pal, TAG_PAL_POKEBLOCK_CONDITION +}; + // code void ChooseMonToGivePokeblock(struct Pokeblock *pokeblock, void (*callback)(void)) { @@ -618,7 +847,7 @@ void sub_8166D44(void) AddTextPrinterParameterized(2, 1, gStringVar4, 0, 1, 0, NULL); PutWindowTilemap(2); CopyWindowToVram(2, 3); - CreateYesNoMenu(sUsePokeblockYesNoWinTemplate, 151, 14, 0); + CreateYesNoMenu(&sUsePokeblockYesNoWinTemplate, 151, 14, 0); } s8 sub_8166DE4(void) @@ -1373,7 +1602,7 @@ static void sub_8168248(void) struct CompressedSpriteSheet spriteSheet; struct SpritePalette spritePalette; - spritePalette = gUnknown_085DFDB8; + spritePalette = gSpritePalette_085DFDB8; spriteSheet.data = gUsePokeblockCondition_Gfx; spriteSheet.size = 0x800; spriteSheet.tag = 1; @@ -1388,7 +1617,7 @@ static void sub_8168294(void) int yStart = 17; int var = 8; struct Sprite **sprites = gUnknown_0203BCAC->field_7B44; - const struct SpriteTemplate *template = &gUnknown_085DFDA0; + const struct SpriteTemplate *template = &gSpriteTemplate_085DFDA0; for (i = 0, xDiff = 64, xStart = -96; i < 2; i++) { diff --git a/src/wild_encounter.c b/src/wild_encounter.c index e42bf8a23..84275526e 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -42,6 +42,16 @@ EWRAM_DATA static u32 sFeebasRngValue = 0; #include "data/wild_encounters.h" +//Special Feebas-related data. +const struct WildPokemon gWildFeebasRoute119Data = {20, 25, SPECIES_FEEBAS}; + +const u16 gRoute119WaterTileData[] = +{ + 0, 0x2D, 0, + 0x2E, 0x5B, 0x83, + 0x5C, 0x8B, 0x12A, +}; + // code void DisableWildEncounters(bool8 disabled) { |