diff options
author | DizzyEggg <jajkodizzy@wp.pl> | 2018-08-25 19:59:47 +0200 |
---|---|---|
committer | DizzyEggg <jajkodizzy@wp.pl> | 2018-08-25 19:59:47 +0200 |
commit | edcf04b665a9fa13d086dd486c4fe7b1649a7bbf (patch) | |
tree | 6db4c00f307e8b083535c4f6ad3bdb4406576165 /src/battle_frontier_1.c | |
parent | 62a645abafdd17b737562b4ab6b40739d13722c2 (diff) |
Document battle dome.
Diffstat (limited to 'src/battle_frontier_1.c')
-rw-r--r-- | src/battle_frontier_1.c | 4623 |
1 files changed, 0 insertions, 4623 deletions
diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c deleted file mode 100644 index 1ac84962f..000000000 --- a/src/battle_frontier_1.c +++ /dev/null @@ -1,4623 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_setup.h" -#include "battle_frontier_1.h" -#include "battle_tower.h" -#include "battle_message.h" -#include "event_data.h" -#include "overworld.h" -#include "util.h" -#include "malloc.h" -#include "string_util.h" -#include "random.h" -#include "task.h" -#include "main.h" -#include "gpu_regs.h" -#include "text.h" -#include "bg.h" -#include "window.h" -#include "palette.h" -#include "decompress.h" -#include "menu.h" -#include "sound.h" -#include "pokemon_icon.h" -#include "data2.h" -#include "international_string_util.h" -#include "trainer_pokemon_sprites.h" -#include "scanline_effect.h" -#include "constants/species.h" -#include "constants/moves.h" -#include "constants/trainers.h" -#include "constants/abilities.h" -#include "constants/songs.h" - -#define DOME_ROUND1 0 -#define DOME_ROUND2 1 -#define DOME_QUARTERFINAL 1 // Different name for the same round. -#define DOME_SEMIFINAL 2 -#define DOME_FINAL 3 -#define DOME_ROUNDS_COUNT 4 - -struct FacilityMon -{ - u16 species; - u16 moves[4]; - u8 itemTableId; - u8 evSpread; - u8 nature; -}; - -struct Unknown_0203CD78_Struct -{ - u8 arr[16]; - u8 unk_10; - u8 unk_11[3]; -}; - -extern void sub_81B8558(void); -extern u32 sub_81A39C4(void); -extern u16 sub_8162548(u8, u8); -extern u16 RandomizeFacilityTrainerMonId(u16); -extern u8 GetFrontierEnemyMonLevel(void); -extern void CopyDomeTrainerName(u8 *dst, u16 trainerId); -extern u16 sub_81A5060(u8 monId, u8 moveSlotId); -extern u8 sub_81A50F0(u8, u8); -extern u8 sub_81A50B0(u8); -extern void sub_8162614(u16, u8); -extern void sub_81A4C30(void); -extern bool8 sub_81A3610(void); -extern u16 sub_81A4FF0(u8); -extern u8 GetFrontierTrainerFrontSpriteId(u16); -extern u8 GetFrontierOpponentClass(u16); -extern void sub_80F94E8(void); - -extern u8 gUnknown_0203CEF8[]; -extern u32 gUnknown_0203CD70; -extern u32 gUnknown_0203CD74; -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG3_X; -extern u16 gBattle_BG3_Y; -extern const struct FacilityMon *gFacilityTrainerMons; -extern struct Unknown_0203CD78_Struct *gUnknown_0203CD78; -extern u8 *gUnknown_0203CD7C; - -extern void (* const gUnknown_0860D090[])(void); -extern const u32 gUnknown_0860D0EC[][2]; -extern const u32 gUnknown_0860D0FC[][2]; -extern const u16 gBattleFrontierHeldItems[]; -extern const u8 gUnknown_0860D10C[][4]; -extern const u8 gUnknown_0860D14C[]; -extern const struct BgTemplate gUnknown_0860CE84[4]; -extern const struct WindowTemplate gUnknown_0860CEB4[]; -extern const struct CompressedSpriteSheet gUnknown_0860CF50[]; -extern const struct SpriteTemplate gUnknown_0860D068; -extern const struct SpriteTemplate gUnknown_0860D050; -extern const u8 gUnknown_0860D080[]; -extern const u8 gUnknown_0860D15C[]; -extern const u8 gUnknown_0860D1A0[][4]; -extern const u8 gUnknown_0860D19C[]; -extern const u8 gUnknown_0860D349[]; -extern const u8 gUnknown_0860D1C0[]; -extern const u8 gUnknown_0860D343[]; -extern const u8 gUnknown_0860D340[]; -extern const u8 gUnknown_0860D346[]; -extern const u8 gUnknown_0860C988[31][16]; -extern const u8 gUnknown_0860D3F1[][2]; -extern const u8 gUnknown_0860D3C4[][3]; -extern const u8 gUnknown_0860D3B4[]; -extern const u8 gUnknown_0860D3A8[]; -extern const u8 gUnknown_0860D3AB[]; -extern const u8 gUnknown_0860D3AE[]; -extern const u8 gUnknown_0860D3B1[]; -extern const u8 gUnknown_0860D080[]; -extern const u8 gUnknown_08D83900[]; -extern const u8 gUnknown_0860CBF1[][5][4]; -extern const u8 *const gBattleDomePotentialPointers[]; -extern const u8 *const gBattleDomeOpponentStylePointers[]; -extern const u8 *const gBattleDomeOpponentStatsPointers[]; -extern const u8 *const gBattleDomeWinStringsPointers[]; -extern const u8 *const gBattleDomeMatchNumberPointers[]; -extern const struct FacilityMon gBattleFrontierMons[]; -extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; - -// gfx -extern const u8 gUnknown_08D83D50[]; -extern const u8 gUnknown_08D84970[]; -extern const u8 gUnknown_08D84F00[]; -extern const u8 gUnknown_08D85444[]; -extern const u8 gUnknown_08D85358[]; -extern const u8 gUnknown_08D85600[]; -extern const u8 gUnknown_08D854C8[]; -extern const u8 gUnknown_08D82F10[]; -extern const u8 gUnknown_08D834FC[]; -extern const u8 gUnknown_08D83B2C[]; -extern const u8 gUnknown_08D83C3C[]; - -// text -extern const u8 gTrainerClassNames[][0xD]; - -// This file's functions. -u8 GetDomeTrainerMonIvs(u16 trainerId); -void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray); -void CalcDomeMonStats(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats); -void CreateDomeTrainerMons(u16 tournamentTrainerId); -static s32 TrainerIdToTournamentId(u16 trainerId); -s32 GetTrainerMonCountInBits(u16 tournamentTrainerId); -s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1); -s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1); -s32 sub_818FFC0(s32 move, s32 species, s32 arg2); -s32 sub_818FEB4(s32 *arr, bool8 arg1); -u16 TrainerIdOfPlayerOpponent(void); -void sub_8190400(u8 taskId); -void sub_8190CD4(u8 taskId); -void sub_8194220(u8 taskId); -void sub_8194950(u8 taskId); -static void CB2_BattleDome(void); -static void VblankCb0_BattleDome(void); -static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo); -static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId); -u8 sub_819221C(u8 taskId); -s32 sub_8192F08(u8, u8*); -u8 GetDomeBrainTrainerPicId(void); -u8 GetDomeBrainTrainerClass(void); -void CopyDomeBrainTrainerName(u8 *dst); -void CopyDomeTrainerName(u8 *dst, u16 trainerId); -void sub_8194D48(void); -void sub_8194BEC(void); -static void VblankCb1_BattleDome(void); -u8 sub_8193BDC(u8 taskId); -void DecideRoundWinners(u8 roundId); -u8 sub_81953E8(u8 tournamentId, u8); -void sub_81948EC(u8, u8); - -// const rom data -ALIGNED(4) -static const u8 sMovePoints[MOVES_COUNT][DOME_TOURNAMENT_TRAINERS_COUNT] = -{ - [MOVE_NONE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_POUND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_KARATE_CHOP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_DOUBLE_SLAP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_COMET_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_MEGA_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_PAY_DAY] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_FIRE_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_ICE_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_THUNDER_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SCRATCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_VICE_GRIP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_GUILLOTINE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_RAZOR_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SWORDS_DANCE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, - [MOVE_CUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_GUST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_WING_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_WHIRLWIND] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FLY] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BIND] = {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SLAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_VINE_WHIP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_STOMP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_DOUBLE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_MEGA_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_JUMP_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ROLLING_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SAND_ATTACK] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_HEADBUTT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_HORN_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FURY_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_HORN_DRILL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_TACKLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BODY_SLAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_WRAP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_TAKE_DOWN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_THRASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_DOUBLE_EDGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_TAIL_WHIP] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_POISON_STING] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_TWINEEDLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_PIN_MISSILE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_LEER] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_BITE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_GROWL] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ROAR] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SING] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SUPERSONIC] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SONIC_BOOM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_DISABLE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ACID] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_EMBER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_FLAMETHROWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, - [MOVE_MIST] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_WATER_GUN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_HYDRO_PUMP] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0}, - [MOVE_SURF] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0}, - [MOVE_ICE_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, - [MOVE_BLIZZARD] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1}, - [MOVE_PSYBEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_BUBBLE_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_AURORA_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_HYPER_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0}, - [MOVE_PECK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_DRILL_PECK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SUBMISSION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_LOW_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_COUNTER] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0}, - [MOVE_SEISMIC_TOSS] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_STRENGTH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ABSORB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_MEGA_DRAIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_LEECH_SEED] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_GROWTH] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_RAZOR_LEAF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SOLAR_BEAM] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0}, - [MOVE_POISON_POWDER] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_STUN_SPORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SLEEP_POWDER] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_PETAL_DANCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_STRING_SHOT] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_DRAGON_RAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FIRE_SPIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_THUNDER_SHOCK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_THUNDERBOLT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, - [MOVE_THUNDER_WAVE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_THUNDER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1}, - [MOVE_ROCK_THROW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_EARTHQUAKE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0}, - [MOVE_FISSURE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0}, - [MOVE_DIG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_TOXIC] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_CONFUSION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_PSYCHIC] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, - [MOVE_HYPNOSIS] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_MEDITATE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_AGILITY] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_QUICK_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_RAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_TELEPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_NIGHT_SHADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_MIMIC] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SCREECH] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_DOUBLE_TEAM] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_RECOVER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_HARDEN] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_MINIMIZE] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SMOKESCREEN] = {0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_CONFUSE_RAY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_WITHDRAW] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_DEFENSE_CURL] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BARRIER] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_LIGHT_SCREEN] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_HAZE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_REFLECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_FOCUS_ENERGY] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BIDE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_METRONOME] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, - [MOVE_MIRROR_MOVE] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, - [MOVE_SELF_DESTRUCT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0}, - [MOVE_EGG_BOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0}, - [MOVE_LICK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SMOG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SLUDGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_BONE_CLUB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_FIRE_BLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1}, - [MOVE_WATERFALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_CLAMP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SWIFT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SKULL_BASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, - [MOVE_SPIKE_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_CONSTRICT] = {0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_AMNESIA] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_KINESIS] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SOFT_BOILED] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_HI_JUMP_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_GLARE] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_DREAM_EATER] = {1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}, - [MOVE_POISON_GAS] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BARRAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_LEECH_LIFE] = {0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_LOVELY_KISS] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SKY_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1}, - [MOVE_TRANSFORM] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BUBBLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_DIZZY_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SPORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FLASH] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_PSYWAVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SPLASH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ACID_ARMOR] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_CRABHAMMER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, - [MOVE_EXPLOSION] = {0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0}, - [MOVE_FURY_SWIPES] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BONEMERANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_REST] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ROCK_SLIDE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_HYPER_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SHARPEN] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_CONVERSION] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_TRI_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SUPER_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SLASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SUBSTITUTE] = {0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_STRUGGLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_SKETCH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0}, - [MOVE_TRIPLE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_THIEF] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SPIDER_WEB] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_MIND_READER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_NIGHTMARE] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FLAME_WHEEL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SNORE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_CURSE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_FLAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_CONVERSION_2] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_AEROBLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, - [MOVE_COTTON_SPORE] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_REVERSAL] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SPITE] = {0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_POWDER_SNOW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_PROTECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0}, - [MOVE_MACH_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SCARY_FACE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_FAINT_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SWEET_KISS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BELLY_DRUM] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SLUDGE_BOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1}, - [MOVE_MUD_SLAP] = {0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_OCTAZOOKA] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SPIKES] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ZAP_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1}, - [MOVE_FORESIGHT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_DESTINY_BOND] = {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_PERISH_SONG] = {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_ICY_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_DETECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_BONE_RUSH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_LOCK_ON] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_OUTRAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1}, - [MOVE_SANDSTORM] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_GIGA_DRAIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_ENDURE] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_CHARM] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ROLLOUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_FALSE_SWIPE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SWAGGER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_MILK_DRINK] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SPARK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_FURY_CUTTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_STEEL_WING] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_MEAN_LOOK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_ATTRACT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SLEEP_TALK] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, - [MOVE_HEAL_BELL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_RETURN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_PRESENT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0}, - [MOVE_FRUSTRATION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SAFEGUARD] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_PAIN_SPLIT] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SACRED_FIRE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1}, - [MOVE_MAGNITUDE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_DYNAMIC_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1}, - [MOVE_MEGAHORN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, - [MOVE_DRAGON_BREATH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_BATON_PASS] = {1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ENCORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_PURSUIT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_RAPID_SPIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SWEET_SCENT] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_IRON_TAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1}, - [MOVE_METAL_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_VITAL_THROW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_MORNING_SUN] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_SYNTHESIS] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_MOONLIGHT] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_HIDDEN_POWER] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_CROSS_CHOP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0}, - [MOVE_TWISTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_RAIN_DANCE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_SUNNY_DAY] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_CRUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_MIRROR_COAT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_PSYCH_UP] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_EXTREME_SPEED] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_ANCIENT_POWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1}, - [MOVE_SHADOW_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_FUTURE_SIGHT] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ROCK_SMASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_WHIRLPOOL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_BEAT_UP] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FAKE_OUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_UPROAR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_STOCKPILE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SPIT_UP] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, - [MOVE_SWALLOW] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_HEAT_WAVE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1}, - [MOVE_HAIL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_TORMENT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FLATTER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_WILL_O_WISP] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_MEMENTO] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FACADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FOCUS_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, - [MOVE_SMELLING_SALT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FOLLOW_ME] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_NATURE_POWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_CHARGE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_TAUNT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_HELPING_HAND] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_TRICK] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ROLE_PLAY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_WISH] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ASSIST] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}, - [MOVE_INGRAIN] = {1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SUPERPOWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0}, - [MOVE_MAGIC_COAT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0}, - [MOVE_RECYCLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_REVENGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0}, - [MOVE_BRICK_BREAK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_YAWN] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_KNOCK_OFF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_ENDEAVOR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_ERUPTION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0}, - [MOVE_SKILL_SWAP] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_IMPRISON] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}, - [MOVE_REFRESH] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_GRUDGE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_SNATCH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}, - [MOVE_SECRET_POWER] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_DIVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ARM_THRUST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_CAMOUFLAGE] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_TAIL_GLOW] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_LUSTER_PURGE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1}, - [MOVE_MIST_BALL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1}, - [MOVE_FEATHER_DANCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_TEETER_DANCE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_BLAZE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_MUD_SPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ICE_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_NEEDLE_ARM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SLACK_OFF] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_HYPER_VOICE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, - [MOVE_POISON_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_CRUSH_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_BLAST_BURN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, - [MOVE_HYDRO_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, - [MOVE_METEOR_MASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1}, - [MOVE_ASTONISH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_WEATHER_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_AROMATHERAPY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_FAKE_TEARS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_AIR_CUTTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_OVERHEAT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1}, - [MOVE_ODOR_SLEUTH] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ROCK_TOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SILVER_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1}, - [MOVE_METAL_SOUND] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_GRASS_WHISTLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_TICKLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_COSMIC_POWER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_WATER_SPOUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0}, - [MOVE_SIGNAL_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SHADOW_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_EXTRASENSORY] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SKY_UPPERCUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SAND_TOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SHEER_COLD] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0}, - [MOVE_MUDDY_WATER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1}, - [MOVE_BULLET_SEED] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_AERIAL_ACE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ICICLE_SPEAR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_IRON_DEFENSE] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BLOCK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_HOWL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_DRAGON_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FRENZY_PLANT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, - [MOVE_BULK_UP] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BOUNCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1}, - [MOVE_MUD_SHOT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_POISON_TAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_COVET] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_VOLT_TACKLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0}, - [MOVE_MAGICAL_LEAF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_WATER_SPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_CALM_MIND] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_LEAF_BLADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_DRAGON_DANCE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ROCK_BLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SHOCK_WAVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_WATER_PULSE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_DOOM_DESIRE] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, - [MOVE_PSYCHO_BOOST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1}, -}; - -// code -void sub_818E9AC(void) -{ - gUnknown_0860D090[gSpecialVar_0x8004](); -} - -void sub_818E9CC(void) -{ - u32 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; - u32 battleMode = VarGet(VAR_0x40CE); - - gSaveBlock2Ptr->frontier.field_CA8 = 0; - gSaveBlock2Ptr->frontier.field_CB2 = 0; - gSaveBlock2Ptr->frontier.field_CA9_a = 0; - gSaveBlock2Ptr->frontier.field_CA9_b = 0; - if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode])) - gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] = 0; - - saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); - gTrainerBattleOpponent_A = 0; -} - -void sub_818EA84(void) -{ - u32 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; - u32 battleMode = VarGet(VAR_0x40CE); - - switch (gSpecialVar_0x8005) - { - case 0: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]; - break; - case 1: - gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode]) != 0); - break; - case 2: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_0; - break; - case 3: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_1; - break; - case 4: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_2; - break; - case 5: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_3; - break; - case 6: - if (VarGet(VAR_0x40CE) == 1) - { - if (lvlMode) - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_5; - else - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_4; - } - else - { - if (lvlMode) - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_1; - else - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_0; - } - break; - case 7: - if (VarGet(VAR_0x40CE) == 1) - { - if (lvlMode) - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_7; - else - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_6; - } - else - { - if (lvlMode) - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_3; - else - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_2; - } - break; - case 8: - sub_81B8558(); - gUnknown_0203CEF8[0] = gSaveBlock2Ptr->frontier.field_CB0; - gUnknown_0203CEF8[1] = gSaveBlock2Ptr->frontier.field_CB0 >> 8; - break; - case 9: - gSpecialVar_Result = (gSaveBlock2Ptr->frontier.field_D0A * 2) - 3 + gSaveBlock2Ptr->frontier.field_D0B; - break; - } -} - -void sub_818ED28(void) -{ - u32 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; - u32 battleMode = VarGet(VAR_0x40CE); - - switch (gSpecialVar_0x8005) - { - case 0: - gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] = gSpecialVar_0x8006; - break; - case 1: - if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860D0EC[battleMode][lvlMode]; - else - gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860D0FC[battleMode][lvlMode]; - break; - case 2: - gSaveBlock2Ptr->frontier.field_D08_0 = gSpecialVar_0x8006; - break; - case 3: - gSaveBlock2Ptr->frontier.field_D08_1 = gSpecialVar_0x8006; - break; - case 4: - gSaveBlock2Ptr->frontier.field_D08_2 = gSpecialVar_0x8006; - break; - case 5: - gSaveBlock2Ptr->frontier.field_D08_3 = gSpecialVar_0x8006; - break; - case 6: - if (VarGet(VAR_0x40CE) == 1) - { - if (lvlMode) - gSaveBlock2Ptr->frontier.field_D08_5 = gSpecialVar_0x8006; - else - gSaveBlock2Ptr->frontier.field_D08_4 = gSpecialVar_0x8006; - } - else - { - if (lvlMode) - gSaveBlock2Ptr->frontier.field_D08_1 = gSpecialVar_0x8006; - else - gSaveBlock2Ptr->frontier.field_D08_0 = gSpecialVar_0x8006; - } - break; - case 7: - if (VarGet(VAR_0x40CE) == 1) - { - if (lvlMode) - gSaveBlock2Ptr->frontier.field_D08_7 = gSpecialVar_0x8006; - else - gSaveBlock2Ptr->frontier.field_D08_6 = gSpecialVar_0x8006; - } - else - { - if (lvlMode) - gSaveBlock2Ptr->frontier.field_D08_3 = gSpecialVar_0x8006; - else - gSaveBlock2Ptr->frontier.field_D08_2 = gSpecialVar_0x8006; - } - break; - case 8: - gSaveBlock2Ptr->frontier.field_CB0 = T1_READ_16(gUnknown_0203CEF8); - break; - } -} - -void InitDomeTrainers(void) -{ - s32 i, j, k; - s32 monLevel; - s32 species[3]; - s32 monTypesBits, monTypesCount; - s32 trainerId; - s32 monTournamentId; - u16 *statSums; - s32 *statValues; - u8 ivs = 0; - - species[0] = 0; - species[1] = 0; - species[2] = 0; - statSums = AllocZeroed(sizeof(u16) * DOME_TOURNAMENT_TRAINERS_COUNT); - statValues = AllocZeroed(sizeof(s32) * 6); - - gSaveBlock2Ptr->frontier.field_D0A = gSaveBlock2Ptr->frontier.chosenLvl + 1; - gSaveBlock2Ptr->frontier.field_D0B = VarGet(VAR_0x40CE) + 1; - gSaveBlock2Ptr->frontier.domeTrainers[0].trainerId = TRAINER_PLAYER; - gSaveBlock2Ptr->frontier.domeTrainers[0].isEliminated = 0; - gSaveBlock2Ptr->frontier.domeTrainers[0].eliminatedAt = 0; - gSaveBlock2Ptr->frontier.domeTrainers[0].unk3 = 0; - - for (i = 0; i < 3; i++) - { - gSaveBlock2Ptr->frontier.domeMonId[0][i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_SPECIES, NULL); - for (j = 0; j < 4; j++) - gSaveBlock2Ptr->frontier.field_EFC[i].moves[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_MOVE1 + j, NULL); - for (j = 0; j < 6; j++) - gSaveBlock2Ptr->frontier.field_EFC[i].evs[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_HP_EV + j, NULL); - - gSaveBlock2Ptr->frontier.field_EFC[i].nature = GetNature(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1]); - } - - for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i > 5) - { - do - { - trainerId = sub_8162548(sub_81A39C4(), 0); - for (j = 1; j < i; j++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId) - break; - } - } while (j != i); - gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId; - } - else - { - do - { - trainerId = sub_8162548(sub_81A39C4() + 1, 0); - for (j = 1; j < i; j++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId) - break; - } - } while (j != i); - gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId; - } - - for (j = 0; j < 3; j++) - { - // Make sure the mon is valid. - do - { - monTournamentId = RandomizeFacilityTrainerMonId(trainerId); - for (k = 0; k < j; k++) - { - s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonId[i][k]; - if (checkingMonId == monTournamentId - || species[0] == gFacilityTrainerMons[monTournamentId].species - || species[1] == gFacilityTrainerMons[monTournamentId].species - || gFacilityTrainerMons[checkingMonId].itemTableId == gFacilityTrainerMons[monTournamentId].itemTableId) - break; - } - } while (k != j); - - gSaveBlock2Ptr->frontier.domeMonId[i][j] = monTournamentId; - species[j] = gFacilityTrainerMons[monTournamentId].species; - } - - gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated = 0; - gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt = 0; - gSaveBlock2Ptr->frontier.domeTrainers[i].unk3 = 0; - } - - monTypesBits = 0; - statSums[0] = 0; - for (i = 0; i < 3; i++) - { - trainerId = gSaveBlock2Ptr->frontier.field_CAA[i] - 1; // Great variable choice, gamefreak. - statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_ATK, NULL); - statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_DEF, NULL); - statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPATK, NULL); - statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPDEF, NULL); - statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPEED, NULL); - statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_MAX_HP, NULL); - monTypesBits |= gBitTable[gBaseStats[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type1]; - monTypesBits |= gBitTable[gBaseStats[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type2]; - } - - for (monTypesCount = 0, j = 0; j < 32; j++) - { - if (monTypesBits & 1) - monTypesCount++; - monTypesBits >>= 1; - } - - monLevel = GetFrontierEnemyMonLevel(); - statSums[0] += (monTypesCount * monLevel) / 20; - - for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - monTypesBits = 0; - statSums[i] = 0; - ivs = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); - for (j = 0; j < 3; j++) - { - CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species, - monLevel, ivs, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].evSpread, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].nature, - statValues); - - statSums[i] += statValues[STAT_ATK]; - statSums[i] += statValues[STAT_DEF]; - statSums[i] += statValues[STAT_SPATK]; - statSums[i] += statValues[STAT_SPDEF]; - statSums[i] += statValues[STAT_SPEED]; - statSums[i] += statValues[STAT_HP]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type1]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type2]; - } - - for (monTypesCount = 0, j = 0; j < 32; j++) - { - if (monTypesBits & 1) - monTypesCount++; - monTypesBits >>= 1; - } - statSums[i] += (monTypesCount * monLevel) / 20; - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT - 1; i++) - { - for (j = i + 1; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++) - { - if (statSums[i] < statSums[j]) - { - SwapDomeTrainers(i, j, statSums); - } - else - { - if (statSums[i] == statSums[j]) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == TRAINER_PLAYER) - SwapDomeTrainers(i, j, statSums); - else if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId > gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId) - SwapDomeTrainers(i, j, statSums); - } - } - } - } - - if (sub_81A3610()) - { - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) - break; - } - - if (gUnknown_0860D3F1[i][0] != 0) - { - j = 0; - gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId = TRAINER_FRONTIER_BRAIN; - } - else - { - j = 1; - gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId = TRAINER_FRONTIER_BRAIN; - } - - for (i = 0; i < 3; i++) - gSaveBlock2Ptr->frontier.domeMonId[j][i] = sub_81A4FF0(i); - } - - Free(statSums); - Free(statValues); -} - -#define CALC_STAT(base, statIndex) \ -{ \ - u8 baseStat = gBaseStats[species].base; \ - stats[statIndex] = (((2 * baseStat + ivs + evs[statIndex] / 4) * level) / 100) + 5; \ - stats[statIndex] = (u8) ModifyStatByNature(nature, stats[statIndex], statIndex); \ -} - -void CalcDomeMonStats(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats) -{ - s32 i, count; - u8 bits; - u16 resultingEvs; - s32 evs[6]; - - count = 0, bits = evBits; - for (i = 0; i < 6; bits >>= 1, i++) - { - if (bits & 1) - count++; - } - - resultingEvs = 510 / count; - for (i = 0; i < 6; bits <<= 1, i++) - { - evs[i] = 0; - if (evBits & bits) - evs[i] = resultingEvs; - } - - if (species == SPECIES_SHEDINJA) - { - stats[STAT_HP] = 1; - } - else - { - s32 n = 2 * gBaseStats[species].baseHP; - stats[STAT_HP] = (((n + ivs + evs[STAT_HP] / 4) * level) / 100) + level + 10; - } - - CALC_STAT(baseAttack, STAT_ATK); - CALC_STAT(baseDefense, STAT_DEF); - CALC_STAT(baseSpeed, STAT_SPEED); - CALC_STAT(baseSpAttack, STAT_SPATK); - CALC_STAT(baseSpDefense, STAT_SPDEF); -} - -#define SWAP_16(x, y) \ -{ \ - temp = x; \ - x = y; \ - y = temp; \ -} - -void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray) -{ - s32 i; - u16 temp; - - SWAP_16(statsArray[id1], statsArray[id2]); - SWAP_16(gSaveBlock2Ptr->frontier.domeTrainers[id1].trainerId, gSaveBlock2Ptr->frontier.domeTrainers[id2].trainerId); - - for (i = 0; i < 3; i++) - SWAP_16(gSaveBlock2Ptr->frontier.domeMonId[id1][i], gSaveBlock2Ptr->frontier.domeMonId[id2][i]); -} - -void sub_818F9B0(void) -{ - StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.field_CB2]); -} - -void sub_818F9E0(void) -{ - StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.field_CB2]); - CopyDomeTrainerName(gStringVar2, gTrainerBattleOpponent_A); -} - -void sub_818FA20(void) -{ - gUnknown_0203CD70 = 0; - gUnknown_0203CD74 = GetMonData(&gPlayerParty[0], MON_DATA_MAX_HP, NULL); - gUnknown_0203CD74 += GetMonData(&gPlayerParty[1], MON_DATA_MAX_HP, NULL); - CalculatePlayerPartyCount(); - CreateDomeTrainerMons(TrainerIdToTournamentId(gTrainerBattleOpponent_A)); -} - -void CreateDomeMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentMonId, u32 otId) -{ - s32 i; - u8 happiness = 0xFF; - u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3. - u8 level = GetFrontierEnemyMonLevel(); - CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[monPartyId], - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].species, - level, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].nature, - fixedIv, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].evSpread, otId); - - happiness = 0xFF; - for (i = 0; i < 4; i++) - { - SetMonMoveSlot(&gEnemyParty[monPartyId], - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].moves[i], i); - if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].moves[i] == MOVE_FRUSTRATION) - happiness = 0; - } - - SetMonData(&gEnemyParty[monPartyId], MON_DATA_FRIENDSHIP, &happiness); - SetMonData(&gEnemyParty[monPartyId], MON_DATA_HELD_ITEM, - &gBattleFrontierHeldItems[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].itemTableId]); -} - -void CreateDomeTrainerMons(u16 tournamentTrainerId) -{ - u8 monsCount = 0; - u32 otId = 0; - s32 i, bits; - - ZeroEnemyPartyMons(); - bits = GetTrainerMonCountInBits(tournamentTrainerId); - otId = Random32(); - if (Random() % 10 > 5) - { - for (i = 0; i < 3; i++) - { - if (bits & 1) - { - CreateDomeMon(monsCount, tournamentTrainerId, i, otId); - monsCount++; - } - bits >>= 1; - } - } - else - { - for (i = 2; i >= 0; i--) - { - if (bits & 4) - { - CreateDomeMon(monsCount, tournamentTrainerId, i, otId); - monsCount++; - } - bits <<= 1; - } - } -} - -s32 GetTrainerMonCountInBits(u16 tournamentTrainerId) -{ - s32 bits; - if (Random() & 1) - { - bits = sub_818FCBC(tournamentTrainerId, FALSE); - if (bits == 0) - bits = sub_818FDB8(tournamentTrainerId, TRUE); - } - else - { - bits = sub_818FDB8(tournamentTrainerId, FALSE); - if (bits == 0) - bits = sub_818FCBC(tournamentTrainerId, TRUE); - } - - return bits; -} - -s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1) -{ - s32 i, moveId, playerMonId; - s32 array[3]; - - for (i = 0; i < 3; i++) - { - array[i] = 0; - for (moveId = 0; moveId < 4; moveId++) - { - for (playerMonId = 0; playerMonId < 3; playerMonId++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) - { - array[i] += sub_818FFC0(sub_81A5060(i, moveId), - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0); - } - else - { - array[i] += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId], - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0); - } - } - } - } - return sub_818FEB4(array, arg1); -} - -s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1) -{ - s32 i, moveId, playerMonId; - s32 array[3]; - - for (i = 0; i < 3; i++) - { - array[i] = 0; - for (moveId = 0; moveId < 4; moveId++) - { - for (playerMonId = 0; playerMonId < 3; playerMonId++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) - { - array[i] += sub_818FFC0(sub_81A5060(i, moveId), - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1); - } - else - { - array[i] += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId], - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1); - } - } - } - } - return sub_818FEB4(array, arg1); -} - -s32 sub_818FEB4(s32 *arr, bool8 arg1) -{ - s32 i, j; - s32 bits = 0; - s32 array[3]; - - for (i = 0; i < 3; i++) - array[i] = i; - - if (arr[0] == arr[1] && arr[0] == arr[2]) - { - if (arg1) - { - i = 0; - while (i != 2) - { - u32 rand = Random() & 3; - if (rand != 3 && !(bits & gBitTable[rand])) - { - bits |= gBitTable[rand]; - i++; - } - } - } - } - else - { - for (i = 0; i < 2; i++) - { - for (j = i + 1; j < 3; j++) - { - s32 temp; - - if (arr[i] < arr[j]) - { - temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; - - temp = array[i]; - array[i] = array[j]; - array[j] = temp; - } - - if (arr[i] == arr[j] && (Random() & 1)) - { - temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; - - temp = array[i]; - array[i] = array[j]; - array[j] = temp; - } - } - } - - for (i = 0; i < 2; i++) - { - bits |= gBitTable[array[i]]; - } - } - - return bits; -} - -// Functionally equivalent, while loop is impossible to match. -#ifdef NONMATCHING -s32 sub_818FFC0(s32 move, s32 species, s32 arg2) -{ - s32 type1, type2, ability, moveType; - s32 i = 0; - s32 typePower = 20; - - if (move == MOVE_NONE || move == 0xFFFF || gBattleMoves[move].power == 0) - return 0; - - type1 = gBaseStats[species].type1; - type2 = gBaseStats[species].type2; - ability = gBaseStats[species].ability1; - moveType = gBattleMoves[move].type; - - if (ability == ABILITY_LEVITATE && moveType == TYPE_GROUND) - { - if (arg2 == 1) - typePower = 8; - } - else - { - while (gTypeEffectiveness[i + 0] != TYPE_ENDTABLE) - { - if (gTypeEffectiveness[i + 0] == TYPE_FORESIGHT) - { - i += 3; - } - else - { - u8 val = gTypeEffectiveness[i + 0]; - if (val == moveType) - { - // BUG: * 2 is not necessary and makes the condition always false if the ability is wonder guard. - if (gTypeEffectiveness[i + 1] == type1 && (ability != ABILITY_WONDER_GUARD || gTypeEffectiveness[i + 2] == TYPE_MUL_SUPER_EFFECTIVE * 2)) - typePower = (gTypeEffectiveness[i + 2] * typePower) / 10; - if (gTypeEffectiveness[i + 1] == type2 && type1 != type2 && (ability != ABILITY_WONDER_GUARD || gTypeEffectiveness[i + 2] == TYPE_MUL_SUPER_EFFECTIVE * 2)) - typePower = (gTypeEffectiveness[i + 2] * typePower) / 10; - } - i += 3; - } - } - } - - switch (arg2) - { - case 0: - switch (typePower) - { - case 10: - case 5: - case 0: - default: - typePower = 0; - break; - case 20: - typePower = 2; - break; - case 40: - typePower = 4; - break; - case 80: - typePower = 8; - break; - } - break; - case 1: - switch (typePower) - { - default: - case 20: - typePower = 0; - break; - case 5: - typePower = 4; - break; - case 0: - typePower = 8; - break; - case 10: - typePower = 2; - break; - case 40: - typePower = -2; - break; - case 80: - typePower = -4; - break; - } - break; - case 2: - switch (typePower) - { - case 0: - typePower = -16; - break; - case 5: - typePower = -8; - break; - case 10: - default: - typePower = 0; - break; - case 20: - typePower = 4; - break; - case 40: - typePower = 12; - break; - case 80: - typePower = 20; - break; - } - break; - } - - return typePower; -} -#else -NAKED -s32 sub_818FFC0(s32 move, s32 species, s32 arg2) -{ - 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, 0x8\n\ - adds r3, r0, 0\n\ - adds r4, r1, 0\n\ - str r2, [sp]\n\ - movs r6, 0\n\ - movs r2, 0x14\n\ - cmp r3, 0\n\ - beq _0818FFF0\n\ - ldr r0, =0x0000ffff\n\ - cmp r3, r0\n\ - beq _0818FFF0\n\ - ldr r0, =gBattleMoves\n\ - lsls r1, r3, 1\n\ - adds r1, r3\n\ - lsls r1, 2\n\ - adds r3, r1, r0\n\ - ldrb r0, [r3, 0x1]\n\ - cmp r0, 0\n\ - bne _0818FFFC\n\ -_0818FFF0:\n\ - movs r0, 0\n\ - b _08190156\n\ - .pool\n\ -_0818FFFC:\n\ - ldr r1, =gBaseStats\n\ - lsls r0, r4, 3\n\ - subs r0, r4\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x6]\n\ - mov r10, r1\n\ - ldrb r1, [r0, 0x7]\n\ - mov r9, r1\n\ - ldrb r0, [r0, 0x16]\n\ - mov r8, r0\n\ - ldrb r3, [r3, 0x2]\n\ - str r3, [sp, 0x4]\n\ - cmp r0, 0x1A\n\ - bne _0819002C\n\ - cmp r3, 0x4\n\ - bne _0819002C\n\ - ldr r0, [sp]\n\ - cmp r0, 0x1\n\ - bne _081900AA\n\ - movs r2, 0x8\n\ - b _081900A4\n\ - .pool\n\ -_0819002C:\n\ - ldr r0, =gTypeEffectiveness\n\ - adds r1, r6, r0\n\ - ldrb r0, [r1]\n\ - ldr r7, =gTypeEffectiveness\n\ - cmp r0, 0xFF\n\ - beq _081900A4\n\ - adds r4, r1, 0\n\ -_0819003A:\n\ - ldrb r0, [r4]\n\ - cmp r0, 0xFE\n\ - beq _08190096\n\ - ldrb r0, [r4]\n\ - ldr r1, [sp, 0x4]\n\ - cmp r0, r1\n\ - bne _08190096\n\ - ldrb r0, [r4, 0x1]\n\ - adds r5, r6, 0x1\n\ - cmp r0, r10\n\ - bne _0819006C\n\ - adds r1, r6, 0x2\n\ - mov r0, r8\n\ - cmp r0, 0x19\n\ - bne _0819005E\n\ - ldrb r0, [r4, 0x2]\n\ - cmp r0, 0x28\n\ - bne _0819006C\n\ -_0819005E:\n\ - adds r0, r1, r7\n\ - ldrb r0, [r0]\n\ - muls r0, r2\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - adds r2, r0, 0\n\ -_0819006C:\n\ - adds r0, r5, r7\n\ - ldrb r0, [r0]\n\ - cmp r0, r9\n\ - bne _08190096\n\ - cmp r10, r9\n\ - beq _08190096\n\ - adds r1, r6, 0x2\n\ - mov r0, r8\n\ - cmp r0, 0x19\n\ - bne _08190088\n\ - adds r0, r1, r7\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x28\n\ - bne _08190096\n\ -_08190088:\n\ - adds r0, r1, r7\n\ - ldrb r0, [r0]\n\ - muls r0, r2\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - adds r2, r0, 0\n\ -_08190096:\n\ - adds r4, 0x3\n\ - adds r6, 0x3\n\ - ldr r1, =gTypeEffectiveness\n\ - adds r0, r6, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xFF\n\ - bne _0819003A\n\ -_081900A4:\n\ - ldr r0, [sp]\n\ - cmp r0, 0x1\n\ - beq _081900E0\n\ -_081900AA:\n\ - ldr r1, [sp]\n\ - cmp r1, 0x1\n\ - bgt _081900BC\n\ - cmp r1, 0\n\ - beq _081900C4\n\ - b _08190154\n\ - .pool\n\ -_081900BC:\n\ - ldr r0, [sp]\n\ - cmp r0, 0x2\n\ - beq _08190114\n\ - b _08190154\n\ -_081900C4:\n\ - cmp r2, 0xA\n\ - beq _08190146\n\ - cmp r2, 0xA\n\ - ble _08190146\n\ - cmp r2, 0x28\n\ - beq _0819014A\n\ - cmp r2, 0x28\n\ - bgt _081900DA\n\ - cmp r2, 0x14\n\ - beq _08190104\n\ - b _08190146\n\ -_081900DA:\n\ - cmp r2, 0x50\n\ - bne _08190146\n\ - b _08190100\n\ -_081900E0:\n\ - cmp r2, 0xA\n\ - beq _08190104\n\ - cmp r2, 0xA\n\ - bgt _081900F2\n\ - cmp r2, 0\n\ - beq _08190100\n\ - cmp r2, 0x5\n\ - beq _0819014A\n\ - b _08190146\n\ -_081900F2:\n\ - cmp r2, 0x28\n\ - beq _08190108\n\ - cmp r2, 0x28\n\ - ble _08190146\n\ - cmp r2, 0x50\n\ - beq _0819010E\n\ - b _08190146\n\ -_08190100:\n\ - movs r2, 0x8\n\ - b _08190154\n\ -_08190104:\n\ - movs r2, 0x2\n\ - b _08190154\n\ -_08190108:\n\ - movs r2, 0x2\n\ - negs r2, r2\n\ - b _08190154\n\ -_0819010E:\n\ - movs r2, 0x4\n\ - negs r2, r2\n\ - b _08190154\n\ -_08190114:\n\ - cmp r2, 0xA\n\ - beq _08190146\n\ - cmp r2, 0xA\n\ - bgt _08190126\n\ - cmp r2, 0\n\ - beq _0819013A\n\ - cmp r2, 0x5\n\ - beq _08190140\n\ - b _08190146\n\ -_08190126:\n\ - cmp r2, 0x28\n\ - beq _0819014E\n\ - cmp r2, 0x28\n\ - bgt _08190134\n\ - cmp r2, 0x14\n\ - beq _0819014A\n\ - b _08190146\n\ -_08190134:\n\ - cmp r2, 0x50\n\ - beq _08190152\n\ - b _08190146\n\ -_0819013A:\n\ - movs r2, 0x10\n\ - negs r2, r2\n\ - b _08190154\n\ -_08190140:\n\ - movs r2, 0x8\n\ - negs r2, r2\n\ - b _08190154\n\ -_08190146:\n\ - movs r2, 0\n\ - b _08190154\n\ -_0819014A:\n\ - movs r2, 0x4\n\ - b _08190154\n\ -_0819014E:\n\ - movs r2, 0xC\n\ - b _08190154\n\ -_08190152:\n\ - movs r2, 0x14\n\ -_08190154:\n\ - adds r0, r2, 0\n\ -_08190156:\n\ - add sp, 0x8\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - "); -} -#endif // NONMATCHING - -u8 GetDomeTrainerMonIvs(u16 trainerId) -{ - u8 fixedIv; - if (trainerId <= 99) - fixedIv = 3; - else if (trainerId <= 119) - fixedIv = 6; - else if (trainerId <= 139) - fixedIv = 9; - else if (trainerId <= 159) - fixedIv = 12; - else if (trainerId <= 179) - fixedIv = 15; - else if (trainerId <= 199) - fixedIv = 18; - else if (trainerId <= 219) - fixedIv = 21; - else - fixedIv = 31; - - return fixedIv; -} - -s32 TournamentIdOfOpponent(s32 roundId, s32 trainerId) -{ - s32 i, j, val; - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId) - break; - } - - if (roundId != DOME_ROUND1) - { - if (roundId == DOME_FINAL) - val = gUnknown_0860D10C[i][roundId] + 8; - else - val = gUnknown_0860D10C[i][roundId] + 4; - - for (j = gUnknown_0860D10C[i][roundId]; j < val; j++) - { - if (gUnknown_0860D14C[j] != i && !gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D14C[j]].isEliminated) - break; - } - - if (j != val) - return gUnknown_0860D14C[j]; - else - return 0xFF; - } - else - { - if (!gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D10C[i][roundId]].isEliminated) - return gUnknown_0860D10C[i][roundId]; - else - return 0xFF; - } -} - -void sub_8190298(void) -{ - gTrainerBattleOpponent_A = TrainerIdOfPlayerOpponent(); -} - -u16 TrainerIdOfPlayerOpponent(void) -{ - return gSaveBlock2Ptr->frontier.domeTrainers[TournamentIdOfOpponent(gSaveBlock2Ptr->frontier.field_CB2, TRAINER_PLAYER)].trainerId; -} - -void sub_81902E4(void) -{ - sub_8162614(gTrainerBattleOpponent_A, 0); -} - -void sub_81902F8(void) -{ - gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); - gSaveBlock2Ptr->frontier.field_CA9_a = 1; - sub_81A4C30(); -} - -void sub_819033C(void) -{ - u8 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; - u8 battleMode = VarGet(VAR_0x40CE); - - if (gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] < 999) - gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]++; - if (gSaveBlock2Ptr->frontier.field_D1C[battleMode][lvlMode] < 999) - gSaveBlock2Ptr->frontier.field_D1C[battleMode][lvlMode]++; - - if (gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.field_D14[battleMode][lvlMode]) - gSaveBlock2Ptr->frontier.field_D14[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]; -} - -void ShowDomeOpponentInfo(void) -{ - u8 taskId = CreateTask(sub_8190400, 0); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = TrainerIdToTournamentId(TrainerIdOfPlayerOpponent()); - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - - SetMainCallback2(CB2_BattleDome); -} - -void sub_8190400(u8 taskId) -{ - s32 i; - s32 r5 = gTasks[taskId].data[1]; - s32 r9 = gTasks[taskId].data[2]; - s32 r7 = gTasks[taskId].data[3]; - - switch (gTasks[taskId].data[0]) - { - case 0: - SetHBlankCallback(NULL); - SetVBlankCallback(NULL); - EnableInterrupts(INTR_FLAG_VBLANK); - CpuFill32(0, (void *)VRAM, VRAM_SIZE); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_0860CE84, ARRAY_COUNT(gUnknown_0860CE84)); - InitWindows(gUnknown_0860CEB4); - DeactivateAllTextPrinters(); - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - gBattle_BG3_X = 0; - gBattle_BG3_Y = 0; - if (r9 == 2) - gBattle_BG2_X = 0, gBattle_BG2_Y = 0; - else - gBattle_BG2_X = 0, gBattle_BG2_Y = 160; - - gTasks[taskId].data[0]++; - break; - case 1: - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, 0); - SetGpuReg(REG_OFFSET_BLDY, 0); - SetGpuReg(REG_OFFSET_MOSAIC, 0); - SetGpuReg(REG_OFFSET_WIN0H, 0); - SetGpuReg(REG_OFFSET_WIN0V, 0); - SetGpuReg(REG_OFFSET_WIN1H, 0); - SetGpuReg(REG_OFFSET_WIN1V, 0); - SetGpuReg(REG_OFFSET_WININ, 0); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); - ResetPaletteFade(); - ResetSpriteData(); - FreeAllSpritePalettes(); - gReservedSpritePaletteCount = 4; - gTasks[taskId].data[0]++; - break; - case 2: - DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D83D50, 0x2000, 0, 0); - DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D84970, 0x2000, 0, 1); - DecompressAndLoadBgGfxUsingHeap(3, gUnknown_08D84F00, 0x800, 0, 1); - LoadCompressedObjectPic(gUnknown_0860CF50); - LoadCompressedPalette(gUnknown_08D85358, 0, 0x200); - LoadCompressedPalette(gUnknown_08D85444, 0x100, 0x200); - LoadCompressedPalette(gUnknown_08D85600, 0xF0, 0x20); - if (r9 == 2) - LoadCompressedPalette(gUnknown_08D854C8, 0x50, 0x20); - CpuFill32(0, gPlttBufferFaded, 0x400); - ShowBg(0); - ShowBg(1); - ShowBg(2); - ShowBg(3); - gTasks[taskId].data[0]++; - break; - case 3: - SetVBlankCallback(VblankCb0_BattleDome); - gUnknown_0203CD78 = AllocZeroed(sizeof(*gUnknown_0203CD78)); - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - gUnknown_0203CD78->arr[i] |= 0xFF; - LoadMonIconPalettes(); - i = CreateTask(sub_8190CD4, 0); - gTasks[i].data[0] = 0; - gTasks[i].data[2] = 0; - gTasks[i].data[3] = r9; - gTasks[i].data[4] = r7; - if (r9 == 2) - { - DisplayMatchInfoOnCard(0, r5); - gUnknown_0203CD78->unk_10 = 1; - } - else - { - DisplayTrainerInfoOnCard(0, r5); - } - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP); - if (r9 != 0) - { - r7 = CreateSprite(&gUnknown_0860D068, 120, 4, 0); - StartSpriteAnim(&gSprites[r7], 0); - gSprites[r7].data[0] = i; - - r7 = CreateSprite(&gUnknown_0860D068, 120, 156, 0); - StartSpriteAnim(&gSprites[r7], 1); - gSprites[r7].data[0] = i; - - r7 = CreateSprite(&gUnknown_0860D050, 6, 80, 0); - StartSpriteAnim(&gSprites[r7], 0); - gSprites[r7].data[0] = i; - gSprites[r7].data[1] = 0; - if (r9 == 1) - gSprites[r7].invisible = 1; - - r7 = CreateSprite(&gUnknown_0860D050, 234, 80, 0); - StartSpriteAnim(&gSprites[r7], 1); - gSprites[r7].data[0] = i; - gSprites[r7].data[1] = 1; - } - DestroyTask(taskId); - break; - } -} - -// Note: Card scrolling up means the current card goes down and another one appears from top. -// The same is true for scrolling left. -// That means that the sprite needs to move with the moving card in the opposite scrolling direction. - -static void SpriteCb_TrainerIconCardScrollUp(struct Sprite *sprite) -{ - sprite->pos1.y += 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.y >= -32) - sprite->invisible = 0; - if (++sprite->data[1] == 40) - sprite->callback = SpriteCallbackDummy; - } - else - { - if (sprite->pos1.y >= 192) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - FreeAndDestroyTrainerPicSprite(sprite->data[3]); - } - } -} - -static void SpriteCb_TrainerIconCardScrollDown(struct Sprite *sprite) -{ - sprite->pos1.y -= 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.y <= 192) - sprite->invisible = 0; - if (++sprite->data[1] == 40) - sprite->callback = SpriteCallbackDummy; - } - else - { - if (sprite->pos1.y <= -32) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - FreeAndDestroyTrainerPicSprite(sprite->data[3]); - } - } -} - -static void SpriteCb_TrainerIconCardScrollLeft(struct Sprite *sprite) -{ - sprite->pos1.x += 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.x >= -32) - sprite->invisible = 0; - if (++sprite->data[1] == 64) - sprite->callback = SpriteCallbackDummy; - } - else - { - if (sprite->pos1.x >= 272) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - FreeAndDestroyTrainerPicSprite(sprite->data[3]); - } - } -} - -static void SpriteCb_TrainerIconCardScrollRight(struct Sprite *sprite) -{ - sprite->pos1.x -= 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.x <= 272) - sprite->invisible = 0; - if (++sprite->data[1] == 64) - sprite->callback = SpriteCallbackDummy; - } - else - { - if (sprite->pos1.x <= -32) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - FreeAndDestroyTrainerPicSprite(sprite->data[3]); - } - } -} - -#define sMonIconStill data[3] - -static void SpriteCb_MonIcon(struct Sprite *sprite) -{ - if (!sprite->sMonIconStill) - UpdateMonIconFrame(sprite); -} - -static void SpriteCb_MonIconCardScrollUp(struct Sprite *sprite) -{ - if (!sprite->sMonIconStill) - UpdateMonIconFrame(sprite); - sprite->pos1.y += 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.y >= -16) - sprite->invisible = 0; - if (++sprite->data[1] == 40) - sprite->callback = SpriteCb_MonIcon; - } - else - { - if (sprite->pos1.y >= 176) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - sub_80D2EF8(sprite); - } - } -} - -static void SpriteCb_MonIconCardScrollDown(struct Sprite *sprite) -{ - if (!sprite->sMonIconStill) - UpdateMonIconFrame(sprite); - sprite->pos1.y -= 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.y <= 176) - sprite->invisible = 0; - if (++sprite->data[1] == 40) - sprite->callback = SpriteCb_MonIcon; - } - else - { - if (sprite->pos1.y <= -16) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - sub_80D2EF8(sprite); - } - } -} - -static void SpriteCb_MonIconCardScrollLeft(struct Sprite *sprite) -{ - if (!sprite->sMonIconStill) - UpdateMonIconFrame(sprite); - sprite->pos1.x += 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.x >= -16) - sprite->invisible = 0; - if (++sprite->data[1] == 64) - sprite->callback = SpriteCb_MonIcon; - } - else - { - if (sprite->pos1.x >= 256) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - sub_80D2EF8(sprite); - } - } -} - -static void SpriteCb_MonIconCardScrollRight(struct Sprite *sprite) -{ - if (!sprite->sMonIconStill) - UpdateMonIconFrame(sprite); - sprite->pos1.x -= 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.x <= 256) - sprite->invisible = 0; - if (++sprite->data[1] == 64) - sprite->callback = SpriteCb_MonIcon; - } - else - { - if (sprite->pos1.x <= -16) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - sub_80D2EF8(sprite); - } - } -} - -void sub_8190B40(struct Sprite *sprite) -{ - s32 taskId1 = sprite->data[0]; - s32 arrId = gTasks[gTasks[taskId1].data[4]].data[1]; - s32 tournmanetTrainerId = gUnknown_0860D080[arrId]; - s32 r12 = gSaveBlock2Ptr->frontier.field_CB2; - - if (gTasks[taskId1].data[3] == 1) - { - if (sprite->data[1]) - { - if ((gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].isEliminated - && gUnknown_0203CD78->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].eliminatedAt)) - { - sprite->invisible = 0; - } - else if (!gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].isEliminated - && gUnknown_0203CD78->unk_10 - 1 < r12) - { - sprite->invisible = 0; - } - else - { - if (gTasks[taskId1].data[0] == 2) - sprite->invisible = 1; - } - } - else - { - if (gUnknown_0203CD78->unk_10 != 0) - { - sprite->invisible = 0; - } - else - { - if (gTasks[taskId1].data[0] == 2) - sprite->invisible = 1; - } - } - } - else - { - if (sprite->data[1]) - { - if (gUnknown_0203CD78->unk_10 > 1) - { - if (gTasks[taskId1].data[0] == 2) - sprite->invisible = 1; - } - else - { - sprite->invisible = 0; - } - } - else - { - if (gUnknown_0203CD78->unk_10 != 0) - { - sprite->invisible = 0; - } - else - { - if (gTasks[taskId1].data[0] == 2) - sprite->invisible = 1; - } - } - } -} - -void sub_8190C6C(struct Sprite *sprite) -{ - s32 taskId1 = sprite->data[0]; - - if (gTasks[taskId1].data[3] == 1) - { - if (gUnknown_0203CD78->unk_10 != 0) - { - if (gTasks[taskId1].data[0] == 2) - sprite->invisible = 1; - } - else - { - sprite->invisible = 0; - } - } - else - { - if (gUnknown_0203CD78->unk_10 != 1) - { - if (gTasks[taskId1].data[0] == 2) - sprite->invisible = 1; - } - else - { - sprite->invisible = 0; - } - } -} - -void sub_8190CD4(u8 taskId) -{ - s32 i; - s32 windowId = 0; - s32 r9 = gTasks[taskId].data[3]; - s32 taskId2 = gTasks[taskId].data[4]; - s32 trainerTournamentId = 0; - s32 matchNo = 0; - - switch (gTasks[taskId].data[0]) - { - case 0: - if (!gPaletteFade.active) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); - gTasks[taskId].data[0] = 1; - } - break; - case 1: - if (!gPaletteFade.active) - gTasks[taskId].data[0] = 2; - break; - case 2: - i = sub_819221C(taskId); - switch (i) - { - case 9: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gTasks[taskId].data[0] = 8; - break; - case 1 ... 8: - gTasks[taskId].data[5] = i; - if (gTasks[taskId].data[2] != 0) - windowId = 9; - else - windowId = 0; - - for (i = windowId; i < windowId + 9; i++) - { - CopyWindowToVram(i, 2); - FillWindowPixelBuffer(i, 0); - } - gTasks[taskId].data[0] = 3; - break; - case 0: - break; - } - break; - case 3: - i = gTasks[taskId].data[5]; - switch (i) - { - case 1: - case 5: - if (gTasks[taskId].data[2]) - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 160; - } - else - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = 160; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - } - - if (i == 1) - { - if (gUnknown_0203CD78->unk_10 == 0) - { - gBattle_BG2_X = 0; - gBattle_BG2_Y = 320; - trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); - } - else - { - gBattle_BG2_X = 256; - gBattle_BG2_Y = 0; - trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); - gUnknown_0203CD78->unk_10 = 0; - } - } - else - { - if (gUnknown_0203CD78->unk_10 == 0) - { - matchNo = gTasks[taskId2].data[1] - 16; - sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); - gBattle_BG2_X = 0; - gBattle_BG2_Y = 320; - trainerTournamentId = gUnknown_0203CD78->unk_11[0]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); - } - else if (gUnknown_0203CD78->unk_10 == 2) - { - matchNo = gTasks[taskId2].data[1] - 16; - sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); - gBattle_BG2_X = 0; - gBattle_BG2_Y = 320; - trainerTournamentId = gUnknown_0203CD78->unk_11[1]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); - } - else - { - gBattle_BG2_X = 256; - gBattle_BG2_Y = 160; - matchNo = gTasks[taskId2].data[1] - 16; - DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 0x10, matchNo); - } - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) - { - if (i < 2) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollUp; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollUp; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i < 10) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollUp; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollUp; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - - gTasks[taskId].data[0] = 4; - gTasks[taskId].data[5] = 0; - break; - case 2: - case 6: - if (gTasks[taskId].data[2]) - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = -160; - } - else - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = -160; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - } - - if (i == 2) - { - if (gUnknown_0203CD78->unk_10 == 0) - { - gBattle_BG2_X = 0; - gBattle_BG2_Y = 160; - trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); - } - else - { - gBattle_BG2_X = 0; - gBattle_BG2_Y = 0; - trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); - gUnknown_0203CD78->unk_10 = 0; - } - } - else - { - if (gUnknown_0203CD78->unk_10 == 0) - { - matchNo = gTasks[taskId2].data[1] - 16; - sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); - gBattle_BG2_X = 0; - gBattle_BG2_Y = 160; - trainerTournamentId = gUnknown_0203CD78->unk_11[0]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); - } - else if (gUnknown_0203CD78->unk_10 == 2) - { - matchNo = gTasks[taskId2].data[1] - 16; - sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); - gBattle_BG2_X = 0; - gBattle_BG2_Y = 160; - trainerTournamentId = gUnknown_0203CD78->unk_11[1]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); - } - else - { - gBattle_BG2_X = 256; - gBattle_BG2_Y = 0; - matchNo = gTasks[taskId2].data[1] - 16; - DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 4, matchNo); - } - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) - { - if (i < 2) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollDown; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollDown; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i < 10) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollDown; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollDown; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - - gTasks[taskId].data[0] = 5; - gTasks[taskId].data[5] = 0; - break; - case 3: - if (gTasks[taskId].data[2]) - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 256; - gBattle_BG1_Y = 0; - } - else - { - gBattle_BG0_X = 256; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - } - - if (gUnknown_0203CD78->unk_10 == 0) - { - gBattle_BG2_X = 256; - gBattle_BG2_Y = 160; - trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 8, trainerTournamentId); - } - else - { - gBattle_BG2_X = 256; - gBattle_BG2_Y = 0; - matchNo = gUnknown_0860D15C[(gTasks[taskId2].data[1] * 4) + (gUnknown_0203CD78->unk_10 - 1)]; - DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo); - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) - { - if (i < 2) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i < 10) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - - gTasks[taskId].data[0] = 6; - gTasks[taskId].data[5] = 0; - break; - case 7: - if (gTasks[taskId].data[2]) - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 256; - gBattle_BG1_Y = 0; - } - else - { - gBattle_BG0_X = 256; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - } - - if (gUnknown_0203CD78->unk_10 == 0) - { - gBattle_BG2_X = 256; - gBattle_BG2_Y = 160; - trainerTournamentId = gUnknown_0203CD78->unk_11[0]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 8, trainerTournamentId); - } - else - { - gBattle_BG2_X = 0; - gBattle_BG2_Y = 160; - matchNo = gTasks[taskId2].data[1] - 16; - DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo); - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) - { - if (i < 2) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i < 10) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - - gTasks[taskId].data[0] = 6; - gTasks[taskId].data[5] = 0; - break; - case 4: - if (gTasks[taskId].data[2]) - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = -256; - gBattle_BG1_Y = 0; - } - else - { - gBattle_BG0_X = -256; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - } - - if (gUnknown_0203CD78->unk_10 == 1) - { - gBattle_BG2_X = 0; - gBattle_BG2_Y = 160; - } - else - { - gBattle_BG2_X = 0; - gBattle_BG2_Y = 0; - } - matchNo = gUnknown_0860D15C[(gUnknown_0203CD78->unk_10 - 1) + (gTasks[taskId2].data[1] * 4)]; - DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo); - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) - { - if (i < 2) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i < 10) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - - gTasks[taskId].data[0] = 7; - gTasks[taskId].data[5] = 0; - break; - case 8: - if (gTasks[taskId].data[2]) - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = -256; - gBattle_BG1_Y = 0; - } - else - { - gBattle_BG0_X = -256; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - } - - if (gUnknown_0203CD78->unk_10 == 2) - { - gBattle_BG2_X = 256; - gBattle_BG2_Y = 160; - trainerTournamentId = gUnknown_0203CD78->unk_11[1]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 2, trainerTournamentId); - } - else - { - gBattle_BG2_X = 0; - gBattle_BG2_Y = 160; - matchNo = gTasks[taskId2].data[1] - 16; - DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo); - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) - { - if (i < 2) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i < 10) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - - gTasks[taskId].data[0] = 7; - gTasks[taskId].data[5] = 0; - break; - } - break; - case 4: - if (++gTasks[taskId].data[5] != 41) - { - gBattle_BG0_Y -= 4; - gBattle_BG1_Y -= 4; - gBattle_BG2_Y -= 4; - } - else - { - gTasks[taskId].data[0] = 2; - } - break; - case 5: - if (++gTasks[taskId].data[5] != 41) - { - gBattle_BG0_Y += 4; - gBattle_BG1_Y += 4; - gBattle_BG2_Y += 4; - } - else - { - gTasks[taskId].data[0] = 2; - } - break; - case 6: - if (++gTasks[taskId].data[5] != 65) - { - gBattle_BG0_X -= 4; - gBattle_BG1_X -= 4; - gBattle_BG2_X -= 4; - } - else - { - gTasks[taskId].data[0] = 2; - } - break; - case 7: - if (++gTasks[taskId].data[5] != 65) - { - gBattle_BG0_X += 4; - gBattle_BG1_X += 4; - gBattle_BG2_X += 4; - } - else - { - gTasks[taskId].data[0] = 2; - } - break; - case 8: - if (!gPaletteFade.active) - { - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) - { - if (i < 2) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - FreeAndDestroyTrainerPicSprite(gUnknown_0203CD78->arr[i]); - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - sub_80D2EF8(&gSprites[gUnknown_0203CD78->arr[i]]); - } - } - for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i < 10) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - FreeAndDestroyTrainerPicSprite(gUnknown_0203CD78->arr[i]); - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - sub_80D2EF8(&gSprites[gUnknown_0203CD78->arr[i]]); - } - } - - FreeMonIconPalettes(); - FREE_AND_SET_NULL(gUnknown_0203CD78); - FreeAllWindowBuffers(); - if (r9 == 0) - { - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); - } - else - { - i = CreateTask(sub_8194220, 0); - gTasks[i].data[0] = 0; - gTasks[i].data[1] = 0; - gTasks[i].data[2] = 3; - gTasks[i].data[3] = gTasks[taskId].data[4]; - gTasks[i].data[4] = gTasks[taskId2].data[6]; - } - DestroyTask(taskId); - } - break; - } -} - -u8 sub_819221C(u8 taskId) -{ - u8 retVal = 0; - s32 taskId2 = gTasks[taskId].data[4]; - s32 r5 = gTasks[taskId2].data[1]; - u8 r10 = gUnknown_0860D080[r5]; - u16 roundId = gSaveBlock2Ptr->frontier.field_CB2; - - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - retVal = 9; - - if (gTasks[taskId].data[3] == 0) - return retVal; - - if (gTasks[taskId].data[3] == 1) - { - if (gMain.newKeys & DPAD_UP && gUnknown_0203CD78->unk_10 == 0) - { - if (r5 == 0) - r5 = 15; - else - r5--; - retVal = 1; - } - else if (gMain.newKeys & DPAD_DOWN && gUnknown_0203CD78->unk_10 == 0) - { - if (r5 == 15) - r5 = 0; - else - r5++; - retVal = 2; - } - else if (gMain.newKeys & DPAD_LEFT && gUnknown_0203CD78->unk_10 != 0) - { - gUnknown_0203CD78->unk_10--; - retVal = 3; - } - else if (gMain.newKeys & DPAD_RIGHT) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[r10].isEliminated && gUnknown_0203CD78->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[r10].eliminatedAt) - { - gUnknown_0203CD78->unk_10++; - retVal = 4; - } - if (!gSaveBlock2Ptr->frontier.domeTrainers[r10].isEliminated && gUnknown_0203CD78->unk_10 - 1 < roundId) - { - gUnknown_0203CD78->unk_10++; - retVal = 4; - } - } - - if (retVal == 9) - { - if (gUnknown_0203CD78->unk_10 != 0) - gTasks[taskId2].data[1] = gUnknown_0860D1A0[r5 / 2][gUnknown_0203CD78->unk_10 - 1]; - else - gTasks[taskId2].data[1] = r5; - } - } - else - { - if (gMain.newKeys & DPAD_UP && gUnknown_0203CD78->unk_10 == 1) - { - if (r5 == 16) - r5 = gUnknown_0860D19C[roundId]; - else - r5--; - retVal = 5; - } - else if (gMain.newKeys & DPAD_DOWN && gUnknown_0203CD78->unk_10 == 1) - { - if (r5 == gUnknown_0860D19C[roundId]) - r5 = 16; - else - r5++; - retVal = 6; - } - else if (gMain.newKeys & DPAD_LEFT && gUnknown_0203CD78->unk_10 != 0) - { - retVal = 7; - gUnknown_0203CD78->unk_10--; - } - else if (gMain.newKeys & DPAD_RIGHT && (gUnknown_0203CD78->unk_10 == 0 || gUnknown_0203CD78->unk_10 == 1)) - { - retVal = 8; - gUnknown_0203CD78->unk_10++; - } - - if (retVal == 9) - { - if (gUnknown_0203CD78->unk_10 == 0) - gTasks[taskId2].data[1] = gUnknown_0860D1C0[gUnknown_0203CD78->unk_11[0]]; - else if (gUnknown_0203CD78->unk_10 == 2) - gTasks[taskId2].data[1] = gUnknown_0860D1C0[gUnknown_0203CD78->unk_11[1]]; - else - gTasks[taskId2].data[1] = r5; - } - } - - if (retVal != 0 && retVal != 9) - { - PlaySE(SE_SELECT); - gTasks[taskId2].data[1] = r5; - gTasks[taskId].data[2] ^= 1; - } - - return retVal; -} - -static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) -{ - struct TextSubPrinter textPrinter; - s32 i, j, k; - s32 trainerId = 0; - u8 nature = 0; - s32 arrId = 0; - s32 windowId = 0; - s32 x = 0, y = 0; - u8 palSlot = 0; - s16 *allocatedArray = AllocZeroed(sizeof(s16) * 18); - trainerId = gSaveBlock2Ptr->frontier.domeTrainers[trainerTournamentId].trainerId; - - if (flags & 1) - arrId = 8, windowId = 9, palSlot = 2; - if (flags & 2) - x = 256; - if (flags & 4) - y = 160; - if (flags & 8) - x = -256; - if (flags & 0x10) - y = -160; - - if (trainerId == TRAINER_PLAYER) - gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); - else if (trainerId == TRAINER_FRONTIER_BRAIN) - gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); - else - gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerId), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); - - if (flags & 0x1E) - gSprites[gUnknown_0203CD78->arr[arrId]].invisible = 1; - - for (i = 0; i < 3; i++) - { - if (trainerId == TRAINER_PLAYER) - { - gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], - SpriteCb_MonIcon, - x | gUnknown_0860D340[i], - y + gUnknown_0860D343[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; - } - else if (trainerId == TRAINER_FRONTIER_BRAIN) - { - gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], - SpriteCb_MonIcon, - x | gUnknown_0860D340[i], - y + gUnknown_0860D343[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; - } - else - { - gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species, - SpriteCb_MonIcon, - x | gUnknown_0860D340[i], - y + gUnknown_0860D343[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; - } - - if (flags & 0x1E) - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].invisible = 1; - } - textPrinter.fontId = 2; - textPrinter.x = 0; - textPrinter.y = 0; - textPrinter.currentX = textPrinter.x; - textPrinter.currentY = textPrinter.y; - textPrinter.letterSpacing = 2; - textPrinter.lineSpacing = 0; - textPrinter.fontColor_l = 0; - textPrinter.fgColor = 14; - textPrinter.bgColor = 0; - textPrinter.shadowColor = 13; - - i = 0; - if (trainerId == TRAINER_PLAYER) - j = gFacilityClassToTrainerClass[FACILITY_CLASS_PKMN_TRAINER_BRENDAN]; - else if (trainerId == TRAINER_FRONTIER_BRAIN) - j = GetDomeBrainTrainerClass(); - else - j = GetFrontierOpponentClass(trainerId); - - for (;gTrainerClassNames[j][i] != EOS; i++) - gStringVar1[i] = gTrainerClassNames[j][i]; - gStringVar1[i] = CHAR_SPACE; - gStringVar1[i + 1] = EOS; - - if (trainerId == TRAINER_PLAYER) - { - StringAppend(gStringVar1, gSaveBlock2Ptr->playerName); - } - else if (trainerId == TRAINER_FRONTIER_BRAIN) - { - CopyDomeBrainTrainerName(gStringVar2); - StringAppend(gStringVar1, gStringVar2); - } - else - { - CopyDomeTrainerName(gStringVar2, trainerId); - StringAppend(gStringVar1, gStringVar2); - } - - textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, gStringVar1, 0xD0, textPrinter.letterSpacing); - textPrinter.current_text_offset = gStringVar1; - textPrinter.windowId = windowId; - PutWindowTilemap(windowId); - CopyWindowToVram(windowId, 3); - AddTextPrinter(&textPrinter, 0, NULL); - textPrinter.letterSpacing = 0; - - for (i = 0; i < 3; i++) - { - textPrinter.currentY = gUnknown_0860D346[i]; - if (trainerId == TRAINER_PLAYER) - textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]]; - else if (trainerId == TRAINER_FRONTIER_BRAIN) - textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]]; - else - textPrinter.current_text_offset = gSpeciesNames[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species]; - - textPrinter.windowId = 1 + i + windowId; - if (i == 1) - textPrinter.currentX = 7; - else - textPrinter.currentX = 0; - - PutWindowTilemap(1 + i + windowId); - CopyWindowToVram(1 + i + windowId, 3); - AddTextPrinter(&textPrinter, 0, NULL); - } - - PutWindowTilemap(windowId + 4); - CopyWindowToVram(windowId + 4, 3); - if (trainerId == TRAINER_FRONTIER_BRAIN) - textPrinter.current_text_offset = gBattleDomePotentialPointers[16]; - else - textPrinter.current_text_offset = gBattleDomePotentialPointers[trainerTournamentId]; - - textPrinter.fontId = 1; - textPrinter.windowId = windowId + 4; - textPrinter.currentX = 0; - textPrinter.y = 4; - textPrinter.currentY = 4; - AddTextPrinter(&textPrinter, 0, NULL); - - for (i = 0; i < 3; i++) - { - for (j = 0; j < 4; j++) - { - for (k = 0; k < DOME_TOURNAMENT_TRAINERS_COUNT; k++) - { - if (trainerId == TRAINER_FRONTIER_BRAIN) - allocatedArray[k] += sMovePoints[sub_81A5060(i, j)][k]; - else if (trainerId == TRAINER_PLAYER) - allocatedArray[k] += sMovePoints[gSaveBlock2Ptr->frontier.field_EFC[i].moves[j]][k]; - else - allocatedArray[k] += sMovePoints[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].moves[j]][k]; - } - } - } - - for (i = 0; i < ARRAY_COUNT(gUnknown_0860C988); i++) - { - s32 r4 = 0; - - for (k = 0, j = 0; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++) - { - if (gUnknown_0860C988[i][j] != 0) - { - r4++; - if (allocatedArray[j] != 0 && allocatedArray[j] >= gUnknown_0860C988[i][j]) - k++; - } - } - if (r4 == k) - break; - } - - textPrinter.current_text_offset = gBattleDomeOpponentStylePointers[i]; - textPrinter.y = 20; - textPrinter.currentY = 20; - AddTextPrinter(&textPrinter, 0, NULL); - - for (i = 0; i < 18; i++) - allocatedArray[i] = 0; - - if (trainerId == TRAINER_FRONTIER_BRAIN || trainerId == TRAINER_PLAYER) - { - for (i = 0; i < 3; i++) - { - for (j = 0; j < 6; j++) - { - if (trainerId == TRAINER_FRONTIER_BRAIN) - allocatedArray[j] = sub_81A50F0(i, j); - else - allocatedArray[j] = gSaveBlock2Ptr->frontier.field_EFC[i].evs[j]; - } - allocatedArray[6] += allocatedArray[0]; - for (j = 0; j < 5; j++) - { - if (trainerId == TRAINER_FRONTIER_BRAIN) - nature = sub_81A50B0(i); - else - nature = gSaveBlock2Ptr->frontier.field_EFC[i].nature; - - if (gNatureStatTable[nature][j] > 0) - { - allocatedArray[j + 7] += (allocatedArray[j + 1] * 110) / 100; - } - else if (gNatureStatTable[nature][j] < 0) - { - allocatedArray[j + 7] += (allocatedArray[j + 1] * 90) / 100; - allocatedArray[j + 13]++; - } - else - { - allocatedArray[j + 7] += allocatedArray[j + 1]; - } - } - } - for (j = 0, i = 0; i < 6; i++) - j += allocatedArray[6 + i]; - for (i = 0; i < 6; i++) - allocatedArray[i] = (allocatedArray[6 + i] * 100) / j; - } - else - { - for (i = 0; i < 3; i++) - { - s32 evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].evSpread; - for (k = 0, j = 0; j < 6; j++) - { - allocatedArray[j] = 0; - if (evBits & 1) - k++; - evBits >>= 1; - } - k = 510 / k; - evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].evSpread; - for (j = 0; j < 6; j++) - { - if (evBits & 1) - allocatedArray[j] = k; - evBits >>= 1; - } - - allocatedArray[6] += allocatedArray[0]; - for (j = 0; j < 5; j++) - { - nature = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].nature; - if (gNatureStatTable[nature][j] > 0) - { - allocatedArray[j + 7] += (allocatedArray[j + 1] * 110) / 100; - } - else if (gNatureStatTable[nature][j] < 0) - { - allocatedArray[j + 7] += (allocatedArray[j + 1] * 90) / 100; - allocatedArray[j + 13]++; - } - else - { - allocatedArray[j + 7] += allocatedArray[j + 1]; - } - } - } - for (j = 0, i = 0; i < 6; i++) - j += allocatedArray[i + 6]; - for (i = 0; i < 6; i++) - allocatedArray[i] = (allocatedArray[6 + i] * 100) / j; - } - - for (i = 0, j = 0, k = 0; k < 6; k++) - { - if (allocatedArray[k] > 29) - { - if (i == 2) - { - if (allocatedArray[6] < allocatedArray[k]) - { - if (allocatedArray[7] < allocatedArray[k]) - { - if (allocatedArray[6] < allocatedArray[7]) - { - allocatedArray[6] = allocatedArray[7]; - allocatedArray[7] = k; - } - else - { - allocatedArray[7] = k; - } - } - else - { - allocatedArray[6] = allocatedArray[7]; - allocatedArray[7] = k; - } - } - else - { - if (allocatedArray[7] < allocatedArray[k]) - allocatedArray[7] = k; - } - } - else - { - allocatedArray[i + 6] = k; - i++; - } - } - if (allocatedArray[k] == 0) - { - if (j == 2) - { - if (allocatedArray[k + 12] >= 2 - || ((allocatedArray[k + 12] == 1 && allocatedArray[12 + allocatedArray[8]] == 0 && allocatedArray[12 + allocatedArray[9]] == 0) - ) - ) - { - allocatedArray[8] = allocatedArray[9]; - allocatedArray[9] = k; - } - else if (allocatedArray[k + 12] == 1 && allocatedArray[12 + allocatedArray[8]] == 0) - { - allocatedArray[8] = allocatedArray[9]; - allocatedArray[9] = k; - } - else if (allocatedArray[k + 12] == 1 && allocatedArray[12 + allocatedArray[9]] == 0) - { - allocatedArray[9] = k; - } - } - else - { - allocatedArray[j + 8] = k; - j++; - } - } - } - - if (i == 2) - i = gUnknown_0860D349[allocatedArray[6]] + (allocatedArray[7] - (allocatedArray[6] + 1)); - else if (i == 1) - i = allocatedArray[6] + 15; - else if (j == 2) - i = gUnknown_0860D349[allocatedArray[8]] + (allocatedArray[9] - (allocatedArray[8] + 1)) + 21; - else if (j == 1) - i = allocatedArray[8] + 36; - else - i = 42; - - textPrinter.current_text_offset = gBattleDomeOpponentStatsPointers[i]; - textPrinter.y = 36; - textPrinter.currentY = 36; - AddTextPrinter(&textPrinter, 0, NULL); - Free(allocatedArray); -} - -s32 sub_8192F08(u8 arg0, u8 *arg1) -{ - s32 i; - u8 tournamentId; - s32 retVal = 0; - s32 count = 0; - - for (i = gUnknown_0860D3C4[arg0][0]; i < gUnknown_0860D3C4[arg0][0] + gUnknown_0860D3C4[arg0][1]; i++) - { - tournamentId = gUnknown_0860D3B4[i]; - if (!gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].isEliminated) - { - arg1[count] = tournamentId; - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_PLAYER) - StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); - else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_FRONTIER_BRAIN) - CopyDomeBrainTrainerName(gStringVar1); - else - CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId); - count++; - } - } - - if (count == 2) - return 0; - - for (i = gUnknown_0860D3C4[arg0][0]; i < gUnknown_0860D3C4[arg0][0] + gUnknown_0860D3C4[arg0][1]; i++) - { - tournamentId = gUnknown_0860D3B4[i]; - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].isEliminated - && gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].eliminatedAt >= gUnknown_0860D3C4[arg0][2]) - { - arg1[count] = tournamentId; - count++; - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].eliminatedAt == gUnknown_0860D3C4[arg0][2]) - { - StringCopy(gStringVar2, gMoveNames[gSaveBlock2Ptr->frontier.field_EC0[tournamentId]]); - retVal = gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk3 * 2; - if (gSaveBlock2Ptr->frontier.field_EC0[tournamentId] == 0 && gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk3 == 0) - retVal = 4; - } - else - { - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_PLAYER) - StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); - else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_FRONTIER_BRAIN) - CopyDomeBrainTrainerName(gStringVar1); - else - CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId); - } - } - - if (count == 2) - break; - } - - if (arg0 == 14) - return retVal + 2; - else - return retVal + 1; -} - -static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) -{ - struct TextSubPrinter textPrinter; - s32 tournamentIds[2]; - s32 trainerIds[2]; - bool32 lost[2]; - s32 i; - s32 winStringId = 0; - s32 arrId = 0; - s32 windowId = 0; - s32 x = 0, y = 0; - u8 palSlot = 0; - - if (flags & 1) - arrId = 8, windowId = 9, palSlot = 2; - if (flags & 2) - x = 256; - if (flags & 4) - y = 160; - if (flags & 8) - x = -256; - if (flags & 0x10) - y = -160; - - // Copy trainers information to handy arrays. - winStringId = sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); - for (i = 0; i < 2; i++) - { - tournamentIds[i] = gUnknown_0203CD78->unk_11[i]; - trainerIds[i] = gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].trainerId; - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].eliminatedAt <= gUnknown_0860D3C4[matchNo][2] - && gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].isEliminated) - lost[i] = TRUE; - else - lost[i] = FALSE; - } - - // Draw first trainer sprite. - if (trainerIds[0] == TRAINER_PLAYER) - gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); - else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) - gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); - else - gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[0]), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); - - if (flags & 0x1E) - gSprites[gUnknown_0203CD78->arr[arrId]].invisible = 1; - if (lost[0]) - gSprites[gUnknown_0203CD78->arr[arrId]].oam.paletteNum = 3; - - // Draw second trainer sprite. - if (trainerIds[1] == TRAINER_PLAYER) - gUnknown_0203CD78->arr[1 + arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); - else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) - gUnknown_0203CD78->arr[1 + arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); - else - gUnknown_0203CD78->arr[1 + arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[1]), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); - - if (flags & 0x1E) - gSprites[gUnknown_0203CD78->arr[1 + arrId]].invisible = 1; - if (lost[1]) - gSprites[gUnknown_0203CD78->arr[1 + arrId]].oam.paletteNum = 3; - - // Draw first trainer's pokemon icons. - for (i = 0; i < 3; i++) - { - if (trainerIds[0] == TRAINER_PLAYER) - { - gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i], - SpriteCb_MonIcon, - x | gUnknown_0860D3A8[i], - y + gUnknown_0860D3AB[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; - } - else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) - { - gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i], - SpriteCb_MonIcon, - x | gUnknown_0860D3A8[i], - y + gUnknown_0860D3AB[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; - } - else - { - gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i]].species, - SpriteCb_MonIcon, - x | gUnknown_0860D3A8[i], - y + gUnknown_0860D3AB[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; - } - - if (flags & 0x1E) - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].invisible = 1; - if (lost[0]) - { - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.paletteNum = 3; - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].sMonIconStill = TRUE; - } - } - - // Draw second trainer's pokemon icons. - for (i = 0; i < 3; i++) - { - if (trainerIds[1] == TRAINER_PLAYER) - { - gUnknown_0203CD78->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i], - SpriteCb_MonIcon, - x | gUnknown_0860D3AE[i], - y + gUnknown_0860D3B1[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].oam.priority = 0; - } - else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) - { - gUnknown_0203CD78->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i], - SpriteCb_MonIcon, - x | gUnknown_0860D3AE[i], - y + gUnknown_0860D3B1[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].oam.priority = 0; - } - else - { - gUnknown_0203CD78->arr[5 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i]].species, - SpriteCb_MonIcon, - x | gUnknown_0860D3AE[i], - y + gUnknown_0860D3B1[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].oam.priority = 0; - } - - if (flags & 0x1E) - gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].invisible = 1; - if (lost[1]) - { - gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].oam.paletteNum = 3; - gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].sMonIconStill = TRUE; - } - } - - // Print the win string (or 'Let the battle begin!' one). - textPrinter.x = 0; - textPrinter.y = 2; - textPrinter.currentX = textPrinter.x; - textPrinter.currentY = textPrinter.y; - textPrinter.letterSpacing = 0; - textPrinter.lineSpacing = 0; - textPrinter.fontColor_l = 0; - textPrinter.fgColor = 14; - textPrinter.bgColor = 0; - textPrinter.shadowColor = 13; - StringExpandPlaceholders(gStringVar4, gBattleDomeWinStringsPointers[winStringId]); - textPrinter.current_text_offset = gStringVar4; - textPrinter.windowId = windowId + 8; - textPrinter.fontId = 1; - PutWindowTilemap(windowId + 8); - CopyWindowToVram(windowId + 8, 3); - textPrinter.currentX = 0; - textPrinter.currentY = textPrinter.y = 0; - AddTextPrinter(&textPrinter, 0, NULL); - - // Print first trainer's name. - if (trainerIds[0] == TRAINER_PLAYER) - StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); - else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) - CopyDomeBrainTrainerName(gStringVar1); - else - CopyDomeTrainerName(gStringVar1, trainerIds[0]); - - textPrinter.fontId = 2; - textPrinter.letterSpacing = 2; - textPrinter.current_text_offset = gStringVar1; - textPrinter.windowId = windowId + 6; - textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0x40, textPrinter.letterSpacing); - textPrinter.currentY = textPrinter.y = 2; - PutWindowTilemap(windowId + 6); - CopyWindowToVram(windowId + 6, 3); - AddTextPrinter(&textPrinter, 0, NULL); - - // Print second trainer's name. - if (trainerIds[1] == TRAINER_PLAYER) - StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); - else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) - CopyDomeBrainTrainerName(gStringVar1); - else - CopyDomeTrainerName(gStringVar1, trainerIds[1]); - - textPrinter.current_text_offset = gStringVar1; - textPrinter.windowId = windowId + 7; - textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0x40, textPrinter.letterSpacing); - textPrinter.currentY = textPrinter.y = 2; - PutWindowTilemap(windowId + 7); - CopyWindowToVram(windowId + 7, 3); - AddTextPrinter(&textPrinter, 0, NULL); - - // Print match number. - textPrinter.letterSpacing = 0; - textPrinter.current_text_offset = gBattleDomeMatchNumberPointers[matchNo]; - textPrinter.windowId = windowId + 5; - textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0xA0, textPrinter.letterSpacing); - textPrinter.currentY = textPrinter.y = 2; - PutWindowTilemap(windowId + 5); - CopyWindowToVram(windowId + 5, 3); - AddTextPrinter(&textPrinter, 0, NULL); -} - -void sub_81938A4(void) -{ - u8 taskId = CreateTask(sub_8194220, 0); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 2; - gTasks[taskId].data[4] = 0; - SetMainCallback2(CB2_BattleDome); -} - -void sub_81938E0(void) -{ - u8 taskId; - - sub_8194D48(); - gSaveBlock2Ptr->frontier.chosenLvl = gSaveBlock2Ptr->frontier.field_D0A - 1; - gSaveBlock2Ptr->frontier.field_CB2 = 3; - taskId = CreateTask(sub_8194220, 0); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 2; - gTasks[taskId].data[4] = 1; - SetMainCallback2(CB2_BattleDome); -} - -void sub_819395C(u8 taskId) -{ - u8 newTaskId = 0; - s32 spriteId = gTasks[taskId].data[1]; - - switch (gTasks[taskId].data[0]) - { - case 0: - if (!gPaletteFade.active) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); - gTasks[taskId].data[0] = 1; - StartSpriteAnim(&gSprites[spriteId], 1); - } - break; - case 1: - if (!gPaletteFade.active) - gTasks[taskId].data[0] = 2; - break; - case 2: - switch (sub_8193BDC(taskId)) - { - case 0: - default: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gTasks[taskId].data[0] = 7; - break; - case 1: - break; - case 2: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gTasks[taskId].data[0] = 3; - break; - case 3: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gTasks[taskId].data[0] = 5; - break; - } - break; - case 3: - if (!gPaletteFade.active) - { - FreeAllWindowBuffers(); - ScanlineEffect_Stop(); - FREE_AND_SET_NULL(gUnknown_0203CD7C); - newTaskId = CreateTask(sub_8190400, 0); - gTasks[newTaskId].data[0] = 0; - gTasks[newTaskId].data[1] = gUnknown_0860D080[spriteId]; - gTasks[newTaskId].data[2] = 1; - gTasks[newTaskId].data[3] = taskId; - - gTasks[taskId].data[0] = 4; - gUnknown_0203CD78->unk_10 = 0; - } - break; - case 4: - break; - case 5: - if (!gPaletteFade.active) - { - FreeAllWindowBuffers(); - ScanlineEffect_Stop(); - FREE_AND_SET_NULL(gUnknown_0203CD7C); - newTaskId = CreateTask(sub_8190400, 0); - gTasks[newTaskId].data[0] = 0; - gTasks[newTaskId].data[1] = spriteId - 16; - gTasks[newTaskId].data[2] = 2; - gTasks[newTaskId].data[3] = taskId; - - gTasks[taskId].data[0] = 6; - } - break; - case 6: - break; - case 7: - if (!gPaletteFade.active) - { - FreeAllWindowBuffers(); - ScanlineEffect_Stop(); - FREE_AND_SET_NULL(gUnknown_0203CD7C); - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); - DestroyTask(gTasks[taskId].data[7]); - DestroyTask(taskId); - } - break; - } -} - -u8 sub_8193BDC(u8 taskId) -{ - u8 retVal = 1; - s32 arrId = 4; - s32 spriteId = gTasks[taskId].data[1]; - s32 roundId = gSaveBlock2Ptr->frontier.field_CB2; - - if (gMain.newKeys == B_BUTTON || (gMain.newKeys & A_BUTTON && spriteId == 31)) - { - PlaySE(SE_SELECT); - retVal = 0; - } - else if (gMain.newKeys & A_BUTTON) - { - if (spriteId < 16) - { - PlaySE(SE_SELECT); - retVal = 2; - } - else - { - PlaySE(SE_SELECT); - retVal = 3; - } - } - else - { - if (gMain.newKeys == DPAD_UP && gUnknown_0860CBF1[spriteId][roundId][0] != 0xFF) - arrId = 0; - else if (gMain.newKeys == DPAD_DOWN && gUnknown_0860CBF1[spriteId][roundId][1] != 0xFF) - arrId = 1; - else if (gMain.newKeys == DPAD_LEFT && gUnknown_0860CBF1[spriteId][roundId][2] != 0xFF) - arrId = 2; - else if (gMain.newKeys == DPAD_RIGHT && gUnknown_0860CBF1[spriteId][roundId][3] != 0xFF) - arrId = 3; - } - - if (arrId != 4) - { - PlaySE(SE_SELECT); - StartSpriteAnim(&gSprites[spriteId], 0); - spriteId = gUnknown_0860CBF1[spriteId][roundId][arrId]; - StartSpriteAnim(&gSprites[spriteId], 1); - gTasks[taskId].data[1] = spriteId; - } - - return retVal; -} - -void sub_8193D40(void) -{ - u8 taskId = CreateTask(sub_8194220, 0); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 1; - gTasks[taskId].data[2] = 2; - gTasks[taskId].data[4] = 0; - SetMainCallback2(CB2_BattleDome); -} - -void sub_8193D7C(void) -{ - s32 i; - - if (gSpecialVar_0x8005 == 1) - { - gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].eliminatedAt = gSaveBlock2Ptr->frontier.field_CB2; - gSaveBlock2Ptr->frontier.field_EC0[TrainerIdToTournamentId(gTrainerBattleOpponent_A)] = gBattleResults.lastUsedMovePlayer; - if (gSaveBlock2Ptr->frontier.field_CB2 < DOME_FINAL) - DecideRoundWinners(gSaveBlock2Ptr->frontier.field_CB2); - } - else - { - gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].eliminatedAt = gSaveBlock2Ptr->frontier.field_CB2; - gSaveBlock2Ptr->frontier.field_EC0[TrainerIdToTournamentId(TRAINER_PLAYER)] = gBattleResults.lastUsedMoveOpponent; - if (gBattleOutcome == B_OUTCOME_FORFEITED || gSpecialVar_0x8005 == 9) - gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].unk3 = 1; - for (i = gSaveBlock2Ptr->frontier.field_CB2; i < DOME_ROUNDS_COUNT; i++) - DecideRoundWinners(i); - } -} - -u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roundId) -{ - s32 i, j, k; - s32 moveScores[4 * 3]; - u16 moveIds[4 * 3]; - u16 bestScore = 0; - u16 bestId = 0; - s32 movePower = 0; - GetFrontierEnemyMonLevel(); // Unused return variable. - - // Calc move points of all 4 moves for all 3 pokemon hitting all 3 target mons. - for (i = 0; i < 3; i++) - { - for (j = 0; j < 4; j++) - { - moveScores[i * 4 + j] = 0; - if (gSaveBlock2Ptr->frontier.domeTrainers[winnerTournamentId].trainerId == TRAINER_FRONTIER_BRAIN) - moveIds[i * 4 + j] = sub_81A5060(i, j); - else - moveIds[i * 4 + j] = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[winnerTournamentId][i]].moves[j]; - - movePower = gBattleMoves[moveIds[i * 4 + j]].power; - if (movePower == 0) - movePower = 40; - else if (movePower == 1) - movePower = 60; - else if (moveIds[i * 4 + j] == MOVE_SELF_DESTRUCT || moveIds[i * 4 + j] == MOVE_EXPLOSION) - movePower /= 2; - - for (k = 0; k < 3; k++) - { - u32 var = 0; - u32 targetSpecies = 0; - u32 targetAbility = 0; - do - { - var = Random32(); - } while (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[loserTournamentId][k]].nature != GetNatureFromPersonality(var)); - - targetSpecies = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[loserTournamentId][k]].species; - if (var & 1) - targetAbility = gBaseStats[targetSpecies].ability2; - else - targetAbility = gBaseStats[targetSpecies].ability1; - - var = AI_TypeCalc(moveIds[i * 4 + j], targetSpecies, targetAbility); - if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE && var & MOVE_RESULT_SUPER_EFFECTIVE) - moveScores[i * 4 + j] += movePower; - else if (var & MOVE_RESULT_NO_EFFECT) - moveScores[i * 4 + j] += 0; - else if (var & MOVE_RESULT_SUPER_EFFECTIVE) - moveScores[i * 4 + j] += movePower * 2; - else if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE) - moveScores[i * 4 + j] += movePower / 2; - else - moveScores[i * 4 + j] += movePower; - } - - if (bestScore < moveScores[i * 4 + j]) - { - bestId = i * 4 + j; - bestScore = moveScores[i * 4 + j]; - } - else if (bestScore == moveScores[i * 4 + j]) - { - if (moveIds[bestId] < moveIds[i * 4 + j]) // Why not use (Random() & 1) instead of promoting moves with a higher id? - bestId = i * 4 + j; - } - } - } - - j = bestId; - goto LABEL; - while (j != 0) - { - for (j = 0, k = 0; k < 4 * 3; k++) - { - if (bestScore < moveScores[k]) - { - j = k; - bestScore = moveScores[k]; - } - else if (bestScore == moveScores[k] && moveIds[j] < moveIds[k]) - { - j = k; - } - } - if (i == roundId - 1) - break; - LABEL: - { - for (i = 0; i < roundId - 1; i++) - { - if (gSaveBlock2Ptr->frontier.field_EC0[sub_81953E8(winnerTournamentId, i)] == moveIds[j]) - break; - } - if (i == roundId - 1) - break; - - moveScores[j] = 0; - bestScore = 0; - j = 0; - for (k = 0; k < 4 * 3; k++) - j += moveScores[k]; - } - } - - if (moveScores[j] == 0) - j = bestId; - - return moveIds[j]; -} - -extern const struct BgTemplate gUnknown_0860CE74[4]; -extern const struct WindowTemplate gUnknown_0860CE94[]; -extern const u8 gUnknown_0860D411[][2]; -extern const struct SpriteTemplate gUnknown_0860CFA8; -extern const struct SpriteTemplate gUnknown_0860D008; -extern const struct SpriteTemplate gUnknown_0860CFD8; -extern const struct ScanlineEffectParams gUnknown_0860CF44; - -void sub_8194220(u8 taskId) -{ - s32 i; - struct TextSubPrinter textPrinter; - s32 r10 = gTasks[taskId].data[1]; - s32 r4 = gTasks[taskId].data[2]; - - switch (gTasks[taskId].data[0]) - { - case 0: - SetHBlankCallback(NULL); - SetVBlankCallback(NULL); - EnableInterrupts(INTR_FLAG_HBLANK | INTR_FLAG_VBLANK); - CpuFill32(0, (void *)VRAM, VRAM_SIZE); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_0860CE74, ARRAY_COUNT(gUnknown_0860CE74)); - InitWindows(gUnknown_0860CE94); - DeactivateAllTextPrinters(); - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0xB00, 0); - gTasks[taskId].data[0]++; - break; - case 1: - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, 0); - SetGpuReg(REG_OFFSET_BLDY, 0); - SetGpuReg(REG_OFFSET_MOSAIC, 0); - SetGpuReg(REG_OFFSET_WIN0H, 0x5860); - SetGpuReg(REG_OFFSET_WIN0V, 0x9F); - SetGpuReg(REG_OFFSET_WIN1H, 0x9098); - SetGpuReg(REG_OFFSET_WIN1V, 0x9F); - SetGpuReg(REG_OFFSET_WININ, 0); - SetGpuReg(REG_OFFSET_WINOUT, 0x3F); - ResetPaletteFade(); - ResetSpriteData(); - FreeAllSpritePalettes(); - gTasks[taskId].data[0]++; - break; - case 2: - gUnknown_0203CD7C = AllocZeroed(0x800); - LZDecompressWram(gUnknown_08D83900, gUnknown_0203CD7C); - SetBgTilemapBuffer(1, gUnknown_0203CD7C); - CopyBgTilemapBufferToVram(1); - DecompressAndLoadBgGfxUsingHeap(1, gUnknown_08D82F10, 0x2000, 0, 0); - DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D834FC, 0x2000, 0, 0); - DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D83B2C, 0x2000, 0, 1); - DecompressAndLoadBgGfxUsingHeap(3, gUnknown_08D83C3C, 0x2000, 0, 1); - LoadCompressedPalette(gUnknown_08D85358, 0, 0x200); - LoadCompressedPalette(gUnknown_08D85444, 0x100, 0x200); - LoadCompressedPalette(gUnknown_08D85600, 0xF0, 0x20); - CpuFill32(0, gPlttBufferFaded, 0x400); - ShowBg(0); - ShowBg(1); - ShowBg(2); - ShowBg(3); - gTasks[taskId].data[0]++; - break; - case 3: - LoadCompressedObjectPic(gUnknown_0860CF50); - if (r10 == 0) - { - for (i = 0; i < (unsigned) 31; i++) - CreateSprite(&gUnknown_0860CFA8, gUnknown_0860D411[i][0], gUnknown_0860D411[i][1], 0); - if (gTasks[taskId].data[4]) - CreateSprite(&gUnknown_0860D008, 218, 12, 0); - else - CreateSprite(&gUnknown_0860CFD8, 218, 12, 0); - } - - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJ_1D_MAP); - gTasks[taskId].data[0]++; - break; - case 4: - textPrinter.fontId = 2; - textPrinter.current_text_offset = gText_BattleTourney; - textPrinter.windowId = 2; - textPrinter.x = 0; - textPrinter.y = 0; - textPrinter.letterSpacing = 2; - textPrinter.lineSpacing = 0; - textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0x70, textPrinter.letterSpacing); - textPrinter.currentY = 1; - textPrinter.fontColor_l = 0; - textPrinter.fgColor = 14; - textPrinter.bgColor = 0; - textPrinter.shadowColor = 13; - AddTextPrinter(&textPrinter, 0, NULL); - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - s32 var, var2; - - CopyDomeTrainerName(gDisplayedStringBattle, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); - if (r10 == 1) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt != 0) - { - var2 = gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt - 1; - sub_81948EC(i, var2); - } - } - else if (gSaveBlock2Ptr->frontier.field_CB2 != DOME_ROUND2) - { - sub_81948EC(i, gSaveBlock2Ptr->frontier.field_CB2 - 2); - } - } - else if (r10 == 0) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt != 0) - { - var2 = gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt - 1; - sub_81948EC(i, var2); - } - } - else if (gSaveBlock2Ptr->frontier.field_CB2 != DOME_ROUND1) - { - if (gTasks[taskId].data[4]) - var2 = gSaveBlock2Ptr->frontier.field_CB2; - else - var2 = gSaveBlock2Ptr->frontier.field_CB2 - 1; - sub_81948EC(i, var2); - } - } - - if (gTasks[taskId].data[4]) - var = gSaveBlock2Ptr->frontier.field_CB2; - else - var = gSaveBlock2Ptr->frontier.field_CB2 - 1; - - if ( ((r10 == 1 && gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt < gSaveBlock2Ptr->frontier.field_CB2 - 1) - || (r10 == 0 && gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt <= var)) - && gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) - { - textPrinter.fgColor = 3; - textPrinter.shadowColor = 4; - } - else - { - textPrinter.fgColor = 11; - textPrinter.shadowColor = 13; - } - } - else - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) - { - textPrinter.fgColor = 3; - textPrinter.shadowColor = 4; - } - else - { - textPrinter.fgColor = 14; - textPrinter.shadowColor = 13; - } - } - - if (gUnknown_0860D3F1[i][0] == 0) - textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing); - else - textPrinter.currentX = 3; - textPrinter.current_text_offset = gDisplayedStringBattle; - textPrinter.windowId = gUnknown_0860D3F1[i][0]; - textPrinter.currentY = gUnknown_0860D3F1[i][1]; - AddTextPrinter(&textPrinter, 0, NULL); - } - gTasks[taskId].data[0]++; - break; - case 5: - PutWindowTilemap(0); - PutWindowTilemap(1); - PutWindowTilemap(2); - CopyWindowToVram(0, 3); - CopyWindowToVram(1, 3); - CopyWindowToVram(2, 3); - SetHBlankCallback(sub_8194BEC); - SetVBlankCallback(VblankCb1_BattleDome); - if (r4 == 2) - { - if (r10 == 0) - { - i = CreateTask(sub_819395C, 0); - gTasks[i].data[0] = r10; - gTasks[i].data[1] = r10; - gTasks[i].data[6] = gTasks[taskId].data[4]; - } - else - { - i = CreateTask(sub_8194950, 0); - gTasks[i].data[0] = 0; - } - } - else - { - i = gTasks[taskId].data[3]; - gTasks[i].data[0] = 0; - } - ScanlineEffect_Clear(); - for (i = 0; i < 91; i++) - { - gScanlineEffectRegBuffers[0][i] = 0x1F0A; - gScanlineEffectRegBuffers[1][i] = 0x1F0A; - } - for (i = 91; i < 160; i++) - { - asm(""::"r"(i)); - gScanlineEffectRegBuffers[0][i] = 0x1F09; - gScanlineEffectRegBuffers[1][i] = 0x1F09; - } - ScanlineEffect_SetParams(gUnknown_0860CF44); - DestroyTask(taskId); - break; - } -} - -struct UnkStruct_860DD10 -{ - u8 x; - u8 y; - u16 src; -}; - -extern struct UnkStruct_860DD10 *gUnknown_0860DD10[][4]; -extern const u8 gUnknown_0860DE10[][4]; - -void sub_81948EC(u8 tournamentId, u8 arg1) -{ - s32 i; - struct UnkStruct_860DD10 *structPtr = gUnknown_0860DD10[tournamentId][arg1]; - - for (i = 0; i < gUnknown_0860DE10[tournamentId][arg1]; i++) - CopyToBgTilemapBufferRect_ChangePalette(1, &structPtr[i].src, structPtr[i].x, structPtr[i].y, 1, 1, 0x11); - - CopyBgTilemapBufferToVram(1); -} - -void sub_8194950(u8 taskId) -{ - s32 i; - struct TextSubPrinter textPrinter; - - switch (gTasks[taskId].data[0]) - { - case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); - gTasks[taskId].data[0] = 1; - break; - case 1: - if (!gPaletteFade.active) - { - gTasks[taskId].data[0] = 2; - gTasks[taskId].data[3] = 64; - textPrinter.fontId = 2; - textPrinter.x = 0; - textPrinter.y = 0; - textPrinter.letterSpacing = 2; - textPrinter.lineSpacing = 0; - textPrinter.fontColor_l = 0; - textPrinter.fgColor = 11; - textPrinter.bgColor = 0; - textPrinter.shadowColor = 13; - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - CopyDomeTrainerName(gDisplayedStringBattle, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); - if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt == gSaveBlock2Ptr->frontier.field_CB2 - 1 - && gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) - { - if (gUnknown_0860D3F1[i][0] == 0) - textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing); - else - textPrinter.currentX = 3; - - textPrinter.current_text_offset = gDisplayedStringBattle; - textPrinter.windowId = gUnknown_0860D3F1[i][0]; - textPrinter.currentY = gUnknown_0860D3F1[i][1]; - AddTextPrinter(&textPrinter, 0, NULL); - } - if (!gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) - { - s32 var = gSaveBlock2Ptr->frontier.field_CB2 - 1; - sub_81948EC(i, var); - } - } - } - break; - case 2: - if (--gTasks[taskId].data[3] == 0) - gTasks[taskId].data[0] = 3; - break; - case 3: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gTasks[taskId].data[0] = 4; - } - break; - case 4: - if (!gPaletteFade.active) - { - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); - DestroyTask(taskId); - } - break; - } -} - -static void CB2_BattleDome(void) -{ - AnimateSprites(); - BuildOamBuffer(); - RunTextPrinters(); - UpdatePaletteFade(); - RunTasks(); -} - -static void VblankCb0_BattleDome(void) -{ - ChangeBgX(3, 0x80, 1); - ChangeBgY(3, 0x80, 2); - SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X); - SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y); - SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); - SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); - SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X); - SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y); - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -#define SET_WIN0H_WIN1H(win0H, win1H) \ -{ \ - *(vu32*)(REG_ADDR_WIN0H) = ((win0H << 16) | (win1H)); \ -} - -void sub_8194BEC(void) -{ - register u32 vCount asm("r0") = REG_VCOUNT; - register u32 vCount_ asm("r1") = vCount; - if (vCount > 41) - { - if (vCount < 50) - { - REG_WININ = 0x3B3B; - SET_WIN0H_WIN1H(0x989B, 0x5558); - return; - } - else if (vCount > 57) - { - if (vCount < 75) - { - REG_WININ = 0x3B3B; - SET_WIN0H_WIN1H(0x9098, 0x5860); - return; - } - else if (vCount < 82) - { - REG_WININ = 0x3B3B; - SET_WIN0H_WIN1H(0x989B, 0x5558); - return; - } - else if (vCount > 94) - { - if (vCount < 103) - { - REG_WININ = 0x3737; - SET_WIN0H_WIN1H(0x989B, 0x5558); - return; - } - else if (vCount < 119) - { - REG_WININ = 0x3737; - SET_WIN0H_WIN1H(0x9098, 0x5860); - return; - } - else if (vCount > 126) - { - if (vCount_ < 135) - { - REG_WININ = 0x3737; - SET_WIN0H_WIN1H(0x989B, 0x5558); - return; - } - } - } - } - } - - REG_WININ = 0x3F3F; - SET_WIN0H_WIN1H(0, 0); -} - -static void VblankCb1_BattleDome(void) -{ - SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X); - SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y); - SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); - SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); - ChangeBgY(2, 0x80, 2); - ChangeBgY(3, 0x80, 1); - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - ScanlineEffect_InitHBlankDmaTransfer(); -} - -void sub_8194D48(void) -{ - gFacilityTrainerMons = gBattleFrontierMons; - gFacilityTrainers = gBattleFrontierTrainers; -} - -void sub_8194D68(void) -{ - s32 i, moveSlot; - - for (i = 0; i < 2; i++) - { - s32 playerMonId = gSaveBlock2Ptr->frontier.field_CAA[gUnknown_0203CEF8[i] - 1] - 1; - s32 count; - - for (moveSlot = 0; moveSlot < 4; moveSlot++) - { - count = 0; - while (count < 4) - { - if (GetMonData(&gSaveBlock1Ptr->playerParty[playerMonId], MON_DATA_MOVE1 + count, NULL) == GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + moveSlot, NULL)) - break; - count++; - } - if (count == 4) - SetMonMoveSlot(&gPlayerParty[i], MOVE_SKETCH, moveSlot); - } - - gSaveBlock1Ptr->playerParty[playerMonId] = gPlayerParty[i]; - } -} - -void sub_8194E44(void) -{ - s32 i; - - for (i = 0; i < 2; i++) - { - s32 playerMonId = gSaveBlock2Ptr->frontier.field_CAA[gUnknown_0203CEF8[i] - 1] - 1; - u16 item = GetMonData(&gSaveBlock1Ptr->playerParty[playerMonId], MON_DATA_HELD_ITEM, NULL); - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &item); - } -} - -void sub_8194EB4(void) -{ - sub_80F94E8(); -} - -void sub_8194EC0(void) -{ - if (TrainerIdToTournamentId(gTrainerBattleOpponent_A) > TrainerIdToTournamentId(TRAINER_PLAYER)) - gSpecialVar_Result = 1; - else - gSpecialVar_Result = 2; -} - -void sub_8194EF8(void) -{ - s32 i; - - sub_8194D48(); - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (!gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) - break; - } - CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); -} - -void sub_8194F58(void) -{ - s32 i, j, k; - s32 monLevel; - s32 species[3]; - s32 monTypesBits; - s32 trainerId; - s32 monTournamentId; - u8 lvlMode; - u16 *statSums; - s32 *statValues; - u8 ivs = 0; - - species[0] = 0; - species[1] = 0; - species[2] = 0; - if ((gSaveBlock2Ptr->frontier.field_D0A != -gSaveBlock2Ptr->frontier.field_D0B) && gSaveBlock2Ptr->frontier.field_CA8 != 1) - return; - - statSums = AllocZeroed(sizeof(u16) * DOME_TOURNAMENT_TRAINERS_COUNT); - statValues = AllocZeroed(sizeof(s32) * 6); - lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; - gSaveBlock2Ptr->frontier.chosenLvl = 0; - // This one, I'd like to call a 'C fakematching'. - { - u8 one; - gSaveBlock2Ptr->frontier.field_D0A = (one = 1); - gSaveBlock2Ptr->frontier.field_D0B = one; - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - do - { - if (i < 5) - trainerId = Random() % 10; - else if (i < 15) - trainerId = Random() % 20 + 10; - else - trainerId = Random() % 10 + 30; - - for (j = 0; j < i; j++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId) - break; - } - } while (j != i); - - gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId; - for (j = 0; j < 3; j++) - { - // Make sure the mon is valid. - do - { - monTournamentId = RandomizeFacilityTrainerMonId(trainerId); - for (k = 0; k < j; k++) - { - s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonId[i][k]; - if (checkingMonId == monTournamentId - || species[0] == gFacilityTrainerMons[monTournamentId].species - || species[1] == gFacilityTrainerMons[monTournamentId].species - || gFacilityTrainerMons[checkingMonId].itemTableId == gFacilityTrainerMons[monTournamentId].itemTableId) - break; - } - } while (k != j); - - gSaveBlock2Ptr->frontier.domeMonId[i][j] = monTournamentId; - species[j] = gFacilityTrainerMons[monTournamentId].species; - } - gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated = 0; - gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt = 0; - gSaveBlock2Ptr->frontier.domeTrainers[i].unk3 = 0; - } - - monLevel = 50; - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - monTypesBits = 0; - statSums[i] = 0; - ivs = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); - for (j = 0; j < 3; j++) - { - CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species, - monLevel, ivs, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].evSpread, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].nature, - statValues); - - statSums[i] += statValues[STAT_ATK]; - statSums[i] += statValues[STAT_DEF]; - statSums[i] += statValues[STAT_SPATK]; - statSums[i] += statValues[STAT_SPDEF]; - statSums[i] += statValues[STAT_SPEED]; - statSums[i] += statValues[STAT_HP]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type1]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type2]; - } - - // Because GF hates temporary vars, trainerId acts like monTypesCount here. - for (trainerId = 0, j = 0; j < 32; j++) - { - if (monTypesBits & 1) - trainerId++; - monTypesBits >>= 1; - } - statSums[i] += (trainerId * monLevel) / 20; - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT - 1; i++) - { - for (j = i + 1; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++) - { - if (statSums[i] < statSums[j]) - { - SwapDomeTrainers(i, j, statSums); - } - else if (statSums[i] == statSums[j]) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId > gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId) - SwapDomeTrainers(i, j, statSums); - } - } - } - - Free(statSums); - Free(statValues); - - for (i = 0; i < 4; i++) - DecideRoundWinners(i); - - gSaveBlock2Ptr->frontier.chosenLvl = lvlMode; -} - -static s32 TrainerIdToTournamentId(u16 trainerId) -{ - s32 i; - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId) - break; - } - - return i; -} - -// The same as the above one, but has global scope. -s32 TrainerIdToDomeTournamentId(u16 trainerId) -{ - s32 i; - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId) - break; - } - - return i; -} - -u8 sub_81953E8(u8 tournamentId, u8 arg1) -{ - u8 arr[2]; - sub_8192F08(gUnknown_0860D1A0[gUnknown_0860D1C0[tournamentId] / 2][arg1] - 16, arr); - if (tournamentId == arr[0]) - return arr[1]; - else - return arr[0]; -} - -void DecideRoundWinners(u8 roundId) -{ - s32 i; - s32 moveSlot, monId1, monId2; - s32 tournamentId1, tournamentId2; - s32 species; - s32 points1 = 0, points2 = 0; - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated || gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) - continue; - - tournamentId1 = i; - tournamentId2 = TournamentIdOfOpponent(roundId, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].trainerId); - // Frontier Brain always wins, check tournamentId1. - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].trainerId == TRAINER_FRONTIER_BRAIN && tournamentId2 != 0xFF) - { - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId; - gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId); - } - // Frontier Brain always wins, check tournamentId2. - else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].trainerId == TRAINER_FRONTIER_BRAIN && tournamentId1 != 0xFF) - { - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId; - gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId); - } - // Decide which one of two trainers wins! - else if (tournamentId2 != 0xFF) - { - // BUG: points1 and points2 are not cleared at the beginning of the loop resulting in not fair results. - - // Calculate points for both trainers. - for (monId1 = 0; monId1 < 3; monId1++) - { - for (moveSlot = 0; moveSlot < 4; moveSlot++) - { - for (monId2 = 0; monId2 < 3; monId2++) - { - points1 += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId1]].moves[moveSlot], - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId2]].species, 2); - } - } - species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId1]].species; - points1 += ( gBaseStats[species].baseHP - + gBaseStats[species].baseAttack - + gBaseStats[species].baseDefense - + gBaseStats[species].baseSpeed - + gBaseStats[species].baseSpAttack - + gBaseStats[species].baseSpDefense) / 10; - } - // Random part of the formula. - points1 += (Random() & 0x1F); - // Favor trainers with higher id; - points1 += tournamentId1; - - for (monId1 = 0; monId1 < 3; monId1++) - { - for (moveSlot = 0; moveSlot < 4; moveSlot++) - { - for (monId2 = 0; monId2 < 3; monId2++) - { - points2 += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId1]].moves[moveSlot], - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId2]].species, 2); - } - } - species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId1]].species; - points2 += ( gBaseStats[species].baseHP - + gBaseStats[species].baseAttack - + gBaseStats[species].baseDefense - + gBaseStats[species].baseSpeed - + gBaseStats[species].baseSpAttack - + gBaseStats[species].baseSpDefense) / 10; - } - // Random part of the formula. - points2 += (Random() & 0x1F); - // Favor trainers with higher id; - points2 += tournamentId2; - - if (points1 > points2) - { - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId; - gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId); - } - else if (points1 < points2) - { - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId; - gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId); - } - // Points are the same, so we favor the one with the higher id. - else if (tournamentId1 > tournamentId2) - { - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId; - gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId); - } - else - { - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId; - gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId); - } - } - } -} - -void CopyDomeTrainerName(u8 *dst, u16 trainerId) -{ - s32 i = 0; - GetFrontierEnemyMonLevel(); // Unused return value. - - if (trainerId == TRAINER_FRONTIER_BRAIN) - { - CopyDomeBrainTrainerName(dst); - } - else - { - if (trainerId == TRAINER_PLAYER) - { - for (i = 0; i < OT_NAME_LENGTH; i++) - dst[i] = gSaveBlock2Ptr->playerName[i]; - } - else if (trainerId < 300) - { - for (i = 0; i < 7; i++) - dst[i] = gFacilityTrainers[trainerId].trainerName[i]; - } - dst[i] = EOS; - } -} - -u8 GetDomeBrainTrainerPicId(void) -{ - return gTrainers[TRAINER_TUCKER].trainerPic; -} - -u8 GetDomeBrainTrainerClass(void) -{ - return gTrainers[TRAINER_TUCKER].trainerClass; -} - -void CopyDomeBrainTrainerName(u8 *dst) -{ - s32 i; - - for (i = 0; i < 7; i++) - dst[i] = gTrainers[TRAINER_TUCKER].trainerName[i]; - dst[i] = EOS; -} |