From 8a5fce7837b7314adb9bf6996ef06c009e853c29 Mon Sep 17 00:00:00 2001 From: shinny456 Date: Tue, 8 Jan 2019 21:51:19 -0500 Subject: start decompiling trainer_card.s --- src/trainer_card.c | 311 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 311 insertions(+) create mode 100755 src/trainer_card.c (limited to 'src') diff --git a/src/trainer_card.c b/src/trainer_card.c new file mode 100755 index 000000000..d23413a26 --- /dev/null +++ b/src/trainer_card.c @@ -0,0 +1,311 @@ +#include "global.h" +#include "scanline_effect.h" +#include "palette.h" +#include "task.h" +#include "main.h" +#include "window.h" +#include "alloc.h" +#include "link.h" +#include "bg.h" +#include "sound.h" +#include "constants/songs.h" +#include "overworld.h" +#include "menu.h" +#include "text.h" + +extern const u8 gText_WaitingTrainerFinishReading[]; +extern const u32 gUnknown_08DD2AE0[]; +extern const u32 gUnknown_08DD21B0[]; +extern const u32 gUnknown_08DD2D30[]; +extern const u32 gUnknown_08DD2010[]; +extern const u32 gUnknown_08DD2B78[]; +extern const u32 gUnknown_08DD228C[]; +extern const u32 gUnknown_08DD2E5C[]; +extern const u32 gUnknown_0856F5CC[]; +extern const u32 gUnknown_0856F814[]; +extern const u32 gEmeraldTrainerCard_Gfx[]; +extern const u32 gFireRedTrainerCard_Gfx[]; +extern const u32 gUnknown_0856F018[]; +extern const u32 gUnknown_08DD1F78[]; + +/*static*/ void sub_80C2690(void); +/*static*/ void sub_80C26D4(void); +/*static*/ void sub_80C48C8(void); +/*static*/ void sub_80C2710(void); +/*static*/ void sub_80C2728(u8 task); +/*static*/ bool8 sub_80C3438(void); +/*static*/ void sub_80C438C(u8); +/*static*/ void sub_80C4FF0(void); +/*static*/ void sub_80C4550(u8*); +/*static*/ void sub_80C45C0(u8*); +/*static*/ void sub_80C4630(void); +/*static*/ void sub_80C3880(void); +/*static*/ void sub_80C4918(void); +/*static*/ bool8 sub_80C4940(void); +/*static*/ bool8 sub_80C2AD8(void); +/*static*/ void sub_80C2C80(void); + +extern struct UnknownStruct{ + u8 var_0; + u8 var_1; + u8 var_2; + u8 filler3[2]; + u8 var_5; + u8 filler6[3]; + u8 var_9; + u8 fillerA[0x51F]; + u8 var_529; + u8 var_52A; + u8 var_52B; + u16 var_52C; + void (*callback2)(void); + u8 filler531[0x64]; + u8 var_598[0x4B0]; + u8 var_A48[0x4B0]; + u8 var_EF8[0x4B0]; + u8 var_13A8[0x400]; + u8 var_17A8[0x200]; + u8 var_19A8[0x200]; +}* gUnknown_02039CE8; + +void sub_80C2690(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + sub_80C48C8(); + if(gUnknown_02039CE8->var_9) + DmaCopy16(3, &gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 0x140); +} + +void sub_80C26D4(void) +{ + u16 backup; + u16 bgVOffset; + + backup = REG_IME; + REG_IME = 0; + bgVOffset = gScanlineEffectRegBuffers[1][REG_VCOUNT & 0xFF]; + REG_BG0VOFS = bgVOffset; + REG_IME = backup; +} + +void sub_80C2710(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_80C2728(u8 taskId) +{ + SetMainCallback2(gUnknown_02039CE8->callback2); + FreeAllWindowBuffers(); + Free(gUnknown_02039CE8); + gUnknown_02039CE8 = NULL; + DestroyTask(taskId); +} + +void sub_80C2760(u8 taskId) +{ + switch(gUnknown_02039CE8->var_0) + { + case 0: + if(!IsDma3ManagerBusyWithBgCopy()) + { + FillWindowPixelBuffer(1, 0); + gUnknown_02039CE8->var_0++; + } + break; + case 1: + if(sub_80C3438()) + gUnknown_02039CE8->var_0++; + break; + case 2: + sub_80C438C(1); + gUnknown_02039CE8->var_0++; + break; + case 3: + FillWindowPixelBuffer(2, 0); + sub_80C4FF0(); + sub_80C438C(2); + gUnknown_02039CE8->var_0++; + break; + case 4: + sub_80C4550(gUnknown_02039CE8->var_EF8); + gUnknown_02039CE8->var_0++; + break; + case 5: + sub_80C45C0(gUnknown_02039CE8->var_598); + gUnknown_02039CE8->var_0++; + break; + case 6: + sub_80C4630(); + gUnknown_02039CE8->var_0++; + break; + case 7: + if(gWirelessCommType == TRUE && gReceivedRemoteLinkPlayers == TRUE) + { + sub_800E0E8(); + CreateWirelessStatusIndicatorSprite(230, 150); + } + BlendPalettes(-1, 16, gUnknown_02039CE8->var_52C); + BeginNormalPaletteFade(- 1, 0, 16, 0, gUnknown_02039CE8->var_52C); + SetVBlankCallback(sub_80C2690); + gUnknown_02039CE8->var_0++; + break; + case 8: + if(!UpdatePaletteFade() && !IsDma3ManagerBusyWithBgCopy()) + { + PlaySE(SE_RG_CARD3); + gUnknown_02039CE8->var_0 = 10; + } + break; + case 9: + if(!IsSEPlaying()) + gUnknown_02039CE8->var_0++; + break; + case 10: + if(!gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_529) + { + sub_80C3880(); + sub_80C438C(1); + gUnknown_02039CE8->var_529 = 0; + } + if(gMain.newKeys & A_BUTTON) + { + sub_80C4918(); + PlaySE(SE_RG_CARD1); + gUnknown_02039CE8->var_0 = 12; + } + else if(gMain.newKeys & B_BUTTON) + { + if(gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE) + gUnknown_02039CE8->var_0 = 15; + else + { + BeginNormalPaletteFade(-1, 0, 0, 16, gUnknown_02039CE8->var_52C); + gUnknown_02039CE8->var_0 = 14; + } + } + break; + case 12: + if(sub_80C4940() && sub_8087598() != TRUE) + { + PlaySE(SE_RG_CARD3); + gUnknown_02039CE8->var_0 = 11; + } + break; + case 11: + if(gMain.newKeys & B_BUTTON) + { + if(gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE) + gUnknown_02039CE8->var_0 = 15; + else if(gReceivedRemoteLinkPlayers) + { + BeginNormalPaletteFade(-1, 0, 0, 16, gUnknown_02039CE8->var_52C); + gUnknown_02039CE8->var_0 = 14; + } + else + { + sub_80C4918(); + gUnknown_02039CE8->var_0 = 13; + PlaySE(SE_RG_CARD1); + } + } + else if(gMain.newKeys & A_BUTTON) + { + if(gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE) + gUnknown_02039CE8->var_0 = 15; + else + { + BeginNormalPaletteFade(-1, 0, 0, 16, gUnknown_02039CE8->var_52C); + gUnknown_02039CE8->var_0 = 14; + } + } + break; + case 15: + sub_800AC34(); + NewMenuHelpers_DrawDialogueFrame(0, 1); + AddTextPrinterParameterized(0, 1, gText_WaitingTrainerFinishReading, 0, 1, 255, 0); + CopyWindowToVram(0, 3); + gUnknown_02039CE8->var_0 = 16; + break; + case 16: + if(!gReceivedRemoteLinkPlayers) + { + BeginNormalPaletteFade(-1, 0, 0, 16, gUnknown_02039CE8->var_52C); + gUnknown_02039CE8->var_0 = 14; + } + break; + case 14: + if(!UpdatePaletteFade()) + sub_80C2728(taskId); + break; + case 13: + if(sub_80C4940() && sub_8087598() != TRUE) + { + gUnknown_02039CE8->var_0 = 10; + PlaySE(SE_RG_CARD3); + } + break; + } +} + +bool8 sub_80C2AD8(void) +{ + switch(gUnknown_02039CE8->var_2) + { + case 0: + if(gUnknown_02039CE8->var_52A) + LZ77UnCompWram(gUnknown_08DD1F78, gUnknown_02039CE8->var_EF8); + else + LZ77UnCompWram(gUnknown_08DD2AE0, gUnknown_02039CE8->var_EF8); + break; + case 1: + if(gUnknown_02039CE8->var_52A) + LZ77UnCompWram(gUnknown_08DD21B0, gUnknown_02039CE8->var_A48); + else + LZ77UnCompWram(gUnknown_08DD2D30, gUnknown_02039CE8->var_A48); + break; + case 2: + if(!gUnknown_02039CE8->var_5) + { + if(gUnknown_02039CE8->var_52A) + LZ77UnCompWram(gUnknown_08DD2010, gUnknown_02039CE8->var_598); + else + LZ77UnCompWram(gUnknown_08DD2B78, gUnknown_02039CE8->var_598); + } + else + { + if(gUnknown_02039CE8->var_52A) + LZ77UnCompWram(gUnknown_08DD228C, gUnknown_02039CE8->var_598); + else + LZ77UnCompWram(gUnknown_08DD2E5C, gUnknown_02039CE8->var_598); + } + break; + case 3: + if(gUnknown_02039CE8->var_52A) + LZ77UnCompWram(gUnknown_0856F5CC, gUnknown_02039CE8->var_13A8); + else + LZ77UnCompWram(gUnknown_0856F814, gUnknown_02039CE8->var_13A8); + break; + case 4: + if(gUnknown_02039CE8->var_52A) + LZ77UnCompWram(gEmeraldTrainerCard_Gfx, gUnknown_02039CE8->var_19A8); + else + LZ77UnCompWram(gFireRedTrainerCard_Gfx, gUnknown_02039CE8->var_19A8); + break; + case 5: + if(!gUnknown_02039CE8->var_52A) + LZ77UnCompWram(gUnknown_0856F018, gUnknown_02039CE8->var_17A8); + break; + default: + gUnknown_02039CE8->var_2 = 0; + return 1; + } + gUnknown_02039CE8->var_2++; + return 0; +} + -- cgit v1.2.3 From f84b22fca4a10af909e5212dec2a6029afd0548e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 19 Jan 2019 12:57:18 +0100 Subject: Dump trainer hill trainers --- src/data/battle_frontier/trainer_hill.h | 4857 +++++++++++++++++++++++++++++++ src/trainer_hill.c | 16 +- 2 files changed, 4864 insertions(+), 9 deletions(-) create mode 100644 src/data/battle_frontier/trainer_hill.h (limited to 'src') diff --git a/src/data/battle_frontier/trainer_hill.h b/src/data/battle_frontier/trainer_hill.h new file mode 100644 index 000000000..eb988b721 --- /dev/null +++ b/src/data/battle_frontier/trainer_hill.h @@ -0,0 +1,4857 @@ +#define TRAINER_HILL_OTID 0x10000000 + +static const struct TrHillTag sDataTagNormal = +{ + .unkField_0 = 8, + .unused1 = 2, + .unkField_2 = 4, + .unused3 = 0, + .unused4 = 5, + .unused5 = 30, + .unused6 = 5, + .floors = + { + [0] = + { + .unk0 = 0x11, + .unk1 = 0x12, + .trainers = + { + [0] = + { + .name = _("ALAINA"), + .facilityClass = FACILITY_CLASS_HEX_MANIAC, + .unused = 0, + .speechBefore = {0xA02, 0x1016, 0x161A, 0x1022, 0x102F, 0x1627}, + .speechWin = {0x1020, 0x2207, 0x1431, 0x61E, 0x1404, 0x161B}, + .speechLose = {0x1E0F, 0xE20, 0x1020, 0x24AB, 0xC00, 0xFFFF}, + .speechAfter = {0xA01, 0x1000, 0x162F, 0x1037, 0xE0D, 0x400}, + .mons = + { + [0] = + { + .species = SPECIES_MISDREAVUS, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .attackEV = 155, + .speedEV = 255, + .spAttackEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .altAbility = 0, + .personality = 0x0, + .nickname = _("MISDREAVUS"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_SOLROCK, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_PSYCHIC, MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE, MOVE_CALM_MIND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 200, + .defenseEV = 100, + .spAttackEV = 110, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .altAbility = 0, + .personality = 0xF, + .nickname = _("SOLROCK"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_CLAYDOL, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ICE_BEAM}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .defenseEV = 135, + .spDefenseEV = 120, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .altAbility = 0, + .personality = 0xC, + .nickname = _("CLAYDOL"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_WEEZING, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .attackEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .altAbility = 0, + .personality = 0x80, + .nickname = _("WEEZING"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_LUNATONE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_CALM_MIND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 200, + .defenseEV = 100, + .spAttackEV = 110, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .altAbility = 0, + .personality = 0xF, + .nickname = _("LUNATONE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_FLYGON, + .heldItem = ITEM_CHOICE_BAND, + .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_FLAMETHROWER}, + .level = 0, + .ppBonuses = 0, + .attackEV = 155, + .speedEV = 255, + .spAttackEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .altAbility = 0, + .personality = 0x83, + .nickname = _("FLYGON"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("ALFONSO"), + .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, + .unused = 0, + .speechBefore = {0xA01, 0x121E, 0x1647, 0x1020, 0x180F, 0xFFFF}, + .speechWin = {0xA29, 0xE09, 0x2630, 0x102C, 0xA28, 0x1A15}, + .speechLose = {0xA28, 0x1A15, 0xC00, 0xA07, 0x201F, 0x1029}, + .speechAfter = {0x1020, 0x1A15, 0x1028, 0xE39, 0x180F, 0xC00}, + .mons = + { + [0] = + { + .species = SPECIES_SEALEO, + .heldItem = ITEM_NEVER_MELT_ICE, + .moves = {MOVE_BLIZZARD, MOVE_ICE_BALL, MOVE_ENCORE, MOVE_HAIL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("SEALEO"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_AMPHAROS, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_COTTON_SPORE, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("AMPHAROS"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_MACHOKE, + .heldItem = ITEM_BLACK_BELT, + .moves = {MOVE_DYNAMIC_PUNCH, MOVE_MUD_SLAP, MOVE_COUNTER, MOVE_SCARY_FACE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x4E, + .nickname = _("MACHOKE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_FLAREON, + .heldItem = ITEM_CHARCOAL, + .moves = {MOVE_FIRE_BLAST, MOVE_BITE, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x28, + .nickname = _("FLAREON"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_MAGNETON, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_ZAP_CANNON, MOVE_THUNDER_WAVE, MOVE_SCREECH, MOVE_METAL_SOUND}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x0, + .nickname = _("MAGNETON"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_PINSIR, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_GUILLOTINE, MOVE_BRICK_BREAK, MOVE_SWAGGER, MOVE_FAINT_ATTACK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 200, + .defenseEV = 155, + .spDefenseEV = 155, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x85, + .nickname = _("PINSIR"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x35, 0x35, 0x26, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x26, 0x3A, 0x3B, 0x35, 0x3B, 0x8, 0x31, 0x3B, 0x2C, 0x2C, 0x2C, 0x2B, 0x24, 0x24, 0x24, 0x24, 0x2C, 0x3B, 0x3B, 0x2C, 0x3B, 0x8, 0x2D, 0x3B, 0x3B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x3B, 0x3B, 0x35, 0x3B, 0x35, 0x35, 0x3B, 0x8, 0x33, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x3B, 0x2C, 0x2B, 0x3B, 0x8, 0x33, 0x35, 0x3B, 0x3B, 0x3B, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x8, 0x34, 0x2C, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x32, 0x30, 0x3B, 0x2B, 0x32, 0x30, 0x2C, 0x3B, 0x8, 0x31, 0x35, 0x3B, 0x3B, 0x35, 0x3B, 0x2C, 0x3B, 0x3B, 0x35, 0x2C, 0x3B, 0x3B, 0x35, 0x35, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x35, 0x3B, 0x2B, 0x32, 0x21, 0x30, 0x2C, 0x2C, 0x8, 0x31, 0x35, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x2C, 0x3B, 0x35, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x2B, 0x3B, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x3B, 0x8, 0x31, 0x35, 0x35, 0x35, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x35, 0x2B, 0x3B, 0x35, 0x35, 0x8, 0x31, 0x2B, 0x2C, 0x2C, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x2C, 0x2C, 0x3B, 0x2C, 0x2C, 0x8, 0x31, 0x2B, 0x3B, 0x3B, 0x35, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x3B, 0x3B, 0x2C, 0x32, 0x30, 0x2C, 0x32, 0x30, 0x3B, 0x35, 0x8, 0x31, 0x3B, 0x3B, 0x3B, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x3FE5, 0x401, 0xBDED, 0x8425, 0xDFBD, 0x221, 0x7E7F, 0x941, 0x7F7D, 0x911, 0x7FF7, 0x4101, 0x79F9, 0x803, 0xFFFF}, + .coords = {27, 45}, + .direction = 0x21, + .range = 0x21, + }, + [1] = + { + .unk0 = 0x13, + .unk1 = 0x14, + .trainers = + { + [0] = + { + .name = _("THEODORE"), + .facilityClass = FACILITY_CLASS_BLACK_BELT, + .unused = 0, + .speechBefore = {0xA28, 0x61E, 0x1000, 0x2617, 0xA02, 0xC00}, + .speechWin = {0xC0A, 0xC28, 0xC00, 0xC0A, 0xC28, 0xC01}, + .speechLose = {0xA01, 0x160A, 0x1036, 0x1029, 0x1039, 0x122F}, + .speechAfter = {0x2801, 0xA02, 0x1A35, 0x1232, 0xE15, 0x614}, + .mons = + { + [0] = + { + .species = SPECIES_MEDITITE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .altAbility = 0, + .personality = 0x80, + .nickname = _("MEDITITE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_HERACROSS, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .altAbility = 1, + .personality = 0x80, + .nickname = _("HERACROSS"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_HITMONTOP, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .altAbility = 0, + .personality = 0x3, + .nickname = _("HITMONTOP"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_MACHOP, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .altAbility = 0, + .personality = 0x4E, + .nickname = _("MACHOP"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_PINSIR, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .altAbility = 0, + .personality = 0x80, + .nickname = _("PINSIR"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_HITMONCHAN, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .altAbility = 0, + .personality = 0x3, + .nickname = _("HITMONCHAN"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("JAYDEN"), + .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, + .unused = 0, + .speechBefore = {0xA4A, 0x1E04, 0xA02, 0x1015, 0x1018, 0x1437}, + .speechWin = {0xA02, 0x606, 0x102E, 0x1020, 0x1809, 0xFFFF}, + .speechLose = {0xA3D, 0x162D, 0x606, 0x140B, 0xC03, 0xFFFF}, + .speechAfter = {0x1026, 0xA01, 0x140F, 0x1020, 0xA0C, 0xA33}, + .mons = + { + [0] = + { + .species = SPECIES_VULPIX, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_TAIL_WHIP, MOVE_OVERHEAT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("VULPIX"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MINUN, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_THUNDER_WAVE, MOVE_CHARM, MOVE_ENCORE, MOVE_SPARK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8C, + .nickname = _("MINUN"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_ROSELIA, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_TOXIC, MOVE_LEECH_SEED, MOVE_SWEET_SCENT, MOVE_GIGA_DRAIN}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0xF, + .nickname = _("ROSELIA"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_MR_MIME, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_SAFEGUARD, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_PSYCHIC}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x82, + .nickname = _("MR. MIME"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_PLUSLE, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_RAIN_DANCE, MOVE_LIGHT_SCREEN, MOVE_HELPING_HAND, MOVE_THUNDER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x5, + .nickname = _("PLUSLE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_TOGEPI, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOLLOW_ME, MOVE_METRONOME}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x37, + .nickname = _("TOGEPI"), + .friendship = 255, + }, + }, + }, + }, + .data = {0xD1, 0xD5, 0xD5, 0xD5, 0xD9, 0xD9, 0x1B, 0x1C, 0x1D, 0xC5, 0xC6, 0xCE, 0xD5, 0xDB, 0xD5, 0x8, 0xD1, 0xCB, 0xC4, 0xC4, 0xDB, 0xDB, 0xC4, 0xC4, 0xC4, 0xCC, 0xCC, 0xCC, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xDB, 0x17, 0x17, 0x17, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xD5, 0x17, 0x17, 0x17, 0xD5, 0xD5, 0xD5, 0xD5, 0xDF, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0x17, 0x17, 0x1F, 0xCB, 0xCB, 0xC4, 0xC4, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xC4, 0xCB, 0xCB, 0xDF, 0xD5, 0xD5, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xDB, 0xC4, 0xC4, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xD5, 0xD5, 0xDF, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xC4, 0xC4, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xDF, 0xD5, 0xD5, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xC4, 0xC4, 0xDB, 0xC4, 0xC4, 0xC4, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0xDB, 0xD5, 0xD5, 0xD5, 0xCB, 0x8, 0xD1, 0xC4, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0x8, 0xD1, 0xDB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0x8, 0xD1, 0xDB, 0xDB, 0xC4, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xC4, 0xC4, 0xC4, 0xC4, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x73FB, 0x400B, 0x400B, 0x51EB, 0x538B, 0x51BB, 0x518B, 0x51EB, 0x518B, 0x51BB, 0x5003, 0x501F, 0x101F, 0x101F, 0xFFFF}, + .coords = {180, 233}, + .direction = 0x3, + .range = 0x35, + }, + [2] = + { + .unk0 = 0x15, + .unk1 = 0x16, + .trainers = + { + [0] = + { + .name = _("SALVADORE"), + .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M, + .unused = 0, + .speechBefore = {0x100D, 0x2623, 0x1E04, 0x1E1B, 0x1E0A, 0x81A}, + .speechWin = {0x100A, 0xA02, 0x103A, 0x102F, 0x120B, 0xC03}, + .speechLose = {0xA01, 0x1000, 0x161E, 0xA02, 0x80B, 0xA33}, + .speechAfter = {0x101F, 0xA02, 0x123C, 0xE11, 0xC03, 0xFFFF}, + .mons = + { + [0] = + { + .species = SPECIES_VAPOREON, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_HAZE, MOVE_HELPING_HAND, MOVE_TICKLE, MOVE_WATER_PULSE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x37, + .nickname = _("VAPOREON"), + .friendship = 0, + }, + [1] = + { + .species = SPECIES_DODRIO, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_HAZE, MOVE_TRI_ATTACK, MOVE_TAUNT, MOVE_TORMENT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x8A, + .nickname = _("DODRIO"), + .friendship = 0, + }, + [2] = + { + .species = SPECIES_OMASTAR, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_HAZE, MOVE_HYDRO_PUMP, MOVE_TICKLE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x14, + .nickname = _("OMASTAR"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_LICKITUNG, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8, + .nickname = _("LICKITUNG"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_SLOWBRO, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_BELLY_DRUM, MOVE_MUD_SLAP, MOVE_SWAGGER, MOVE_AMNESIA}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x94, + .nickname = _("SLOWBRO"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_LINOONE, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8, + .nickname = _("LINOONE"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("VERONICA"), + .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, + .unused = 0, + .speechBefore = {0xA29, 0xE0D, 0x620, 0x40C, 0xE17, 0x1E0A}, + .speechWin = {0xA29, 0x620, 0xE1D, 0x1E25, 0xC00, 0xFFFF}, + .speechLose = {0xA29, 0x142A, 0x1C0D, 0xE1D, 0x1E25, 0xC00}, + .speechAfter = {0x1E25, 0x801, 0xA29, 0x1217, 0x811, 0xC00}, + .mons = + { + [0] = + { + .species = SPECIES_SKITTY, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_PSYCH_UP, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_IRON_TAIL}, + .level = 0, + .ppBonuses = 0, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xCB, + .nickname = _("SKITTY"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MEDICHAM, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_PSYCH_UP, MOVE_HI_JUMP_KICK, MOVE_MEGA_KICK, MOVE_ROCK_SLIDE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xD, + .nickname = _("MEDICHAM"), + .friendship = 0, + }, + [2] = + { + .species = SPECIES_STANTLER, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_PSYCH_UP, MOVE_RETURN, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .speedEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("STANTLER"), + .friendship = 0, + }, + [3] = + { + .species = SPECIES_NIDOQUEEN, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_SUPERPOWER, MOVE_BITE, MOVE_CHARM, MOVE_FLATTER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 20, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("NIDOQUEEN"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_NINETALES, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_OVERHEAT, MOVE_QUICK_ATTACK, MOVE_SPITE, MOVE_TAIL_WHIP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xD7, + .nickname = _("NINETALES"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_CHARIZARD, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_OVERHEAT, MOVE_BEAT_UP, MOVE_SCARY_FACE, MOVE_GROWL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x28, + .nickname = _("CHARIZARD"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x35, 0x35, 0x35, 0x26, 0x26, 0x13, 0x14, 0x15, 0x38, 0x26, 0x2E, 0x35, 0x35, 0x3B, 0x8, 0x69, 0x63, 0x64, 0x64, 0x64, 0x64, 0x71, 0x71, 0x71, 0x72, 0x64, 0x64, 0x64, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x43, 0x41, 0x40, 0x41, 0x42, 0x41, 0x41, 0x4A, 0x42, 0x41, 0x41, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x43, 0x4B, 0x43, 0x43, 0x41, 0x42, 0x42, 0x40, 0x41, 0x40, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x40, 0x42, 0x42, 0x41, 0x41, 0x42, 0x4A, 0x42, 0x41, 0x42, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x42, 0x41, 0x43, 0x4B, 0x41, 0x41, 0x41, 0x40, 0x43, 0x41, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x40, 0x43, 0x41, 0x42, 0x42, 0x41, 0x4A, 0x42, 0x41, 0x42, 0x63, 0x73, 0x8, 0x69, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x64, 0x73, 0x8, 0x69, 0x43, 0x43, 0x41, 0x42, 0x42, 0x41, 0x43, 0x41, 0x41, 0x40, 0x42, 0x41, 0x42, 0x73, 0x8, 0x69, 0x42, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x42, 0x73, 0x8}, + .unk3A0 = {0x381, 0x7C3D, 0x4005, 0x4005, 0x4005, 0x4045, 0x4005, 0x4805, 0x4005, 0x4045, 0x4005, 0x4205, 0x4005, 0x4045, 0x1, 0x1}, + .coords = {37, 41}, + .direction = 0x23, + .range = 0x33, + }, + [3] = + { + .unk0 = 0x17, + .unk1 = 0x18, + .trainers = + { + [0] = + { + .name = _("KEENAN"), + .facilityClass = FACILITY_CLASS_PSYCHIC_M, + .unused = 0, + .speechBefore = {0xA02, 0x1A35, 0x1025, 0x1202, 0xFFFF, 0xFFFF}, + .speechWin = {0x1039, 0x122E, 0xFFFF, 0x1C13, 0x100B, 0x1E1B}, + .speechLose = {0x1019, 0xE0D, 0x1C13, 0x1632, 0xA02, 0xC03}, + .speechAfter = {0xA02, 0x1017, 0x101E, 0x1C13, 0x102F, 0x1A05}, + .mons = + { + [0] = + { + .species = SPECIES_ALAKAZAM, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_SKILL_SWAP, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_REFLECT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x41, + .nickname = _("ALAKAZAM"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_BLISSEY, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_SKILL_SWAP, MOVE_EGG_BOMB, MOVE_THUNDERBOLT, MOVE_SING}, + .level = 0, + .ppBonuses = 0, + .defenseEV = 255, + .spAttackEV = 155, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 1, + .personality = 0xF, + .nickname = _("BLISSEY"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_GRUMPIG, + .heldItem = ITEM_TWISTED_SPOON, + .moves = {MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_REST}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spAttackEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x8C, + .nickname = _("GRUMPIG"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_GARDEVOIR, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_SKILL_SWAP, MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 1, + .personality = 0xF, + .nickname = _("GARDEVOIR"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_VENOMOTH, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SKILL_SWAP, MOVE_SIGNAL_BEAM, MOVE_SLEEP_POWDER, MOVE_TOXIC}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x80, + .nickname = _("VENOMOTH"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ESPEON, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_SKILL_SWAP, MOVE_PSYBEAM, MOVE_SWIFT, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xF, + .nickname = _("ESPEON"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("KRISTINA"), + .facilityClass = FACILITY_CLASS_AROMA_LADY, + .unused = 0, + .speechBefore = {0xA31, 0x1400, 0xC04, 0x1E22, 0x1020, 0x401}, + .speechWin = {0xA01, 0xE2C, 0x103A, 0x1021, 0x61A, 0x401}, + .speechLose = {0xA01, 0x2757, 0xE39, 0x620, 0x401, 0xFFFF}, + .speechAfter = {0xA28, 0x61B, 0x1034, 0x823, 0x1013, 0x445}, + .mons = + { + [0] = + { + .species = SPECIES_WEEZING, + .heldItem = ITEM_POISON_BARB, + .moves = {MOVE_TOXIC, MOVE_SLUDGE_BOMB, MOVE_SMOKESCREEN, MOVE_HAZE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("WEEZING"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_GLOOM, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_PETAL_DANCE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8C, + .nickname = _("GLOOM"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_MUK, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SCREECH, MOVE_DISABLE, MOVE_SLUDGE_BOMB, MOVE_ACID_ARMOR}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("MUK"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_TROPIUS, + .heldItem = ITEM_WHITE_HERB, + .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_SWEET_SCENT, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .attackEV = 120, + .speedEV = 255, + .spAttackEV = 135, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x83, + .nickname = _("TROPIUS"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_BELLOSSOM, + .heldItem = ITEM_MENTAL_HERB, + .moves = {MOVE_SWEET_SCENT, MOVE_PETAL_DANCE, MOVE_STUN_SPORE, MOVE_SLUDGE_BOMB}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x6, + .nickname = _("BELLOSSOM"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_MEGANIUM, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_RAZOR_LEAF, MOVE_BODY_SLAM, MOVE_LEECH_SEED, MOVE_SYNTHESIS}, + .level = 0, + .ppBonuses = 0, + .attackEV = 200, + .speedEV = 110, + .spAttackEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x1F, + .nickname = _("MEGANIUM"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x1F, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x24, 0x24, 0x24, 0x2B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x35, 0x35, 0x3B, 0x35, 0x35, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x2C, 0x2C, 0x3B, 0x2C, 0x2C, 0x8, 0x33, 0x17, 0x1F, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x34, 0x17, 0x2C, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2C, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x1F, 0x17, 0x17, 0x17, 0x17, 0x1F, 0x17, 0x3B, 0x3B, 0x3B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x35, 0x1F, 0x17, 0x17, 0x1F, 0x17, 0x8, 0x34, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x2C, 0x3B, 0x3B, 0x2B, 0x17, 0x8, 0x17, 0x17, 0x17, 0x1F, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x17, 0x17, 0x2C, 0x17, 0x8, 0x1F, 0x17, 0x17, 0x2C, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x3B, 0x1F, 0x3B, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x3B, 0x2B, 0x3B, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x35, 0x35, 0x35, 0x2B, 0x17, 0x3B, 0x2C, 0x3B, 0x17, 0x8, 0x34, 0x17, 0x17, 0x17, 0x17, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x7C1, 0x8441, 0x8477, 0x8441, 0xA441, 0x401, 0x1, 0x8401, 0x8465, 0x445, 0x1441, 0x8449, 0x8449, 0x87C1, 0xFFFF}, + .coords = {71, 167}, + .direction = 0x1, + .range = 0x33, + }, + }, +}; +static const struct TrHillTag sDataTagVariety = +{ + .unkField_0 = 8, + .unused1 = 1, + .unkField_2 = 4, + .unused3 = 0, + .unused4 = 21, + .unused5 = 76, + .unused6 = 5, + .floors = + { + [0] = + { + .unk0 = 0x29, + .unk1 = 0x2A, + .trainers = + { + [0] = + { + .name = _("TERRANCE"), + .facilityClass = FACILITY_CLASS_GENTLEMAN, + .unused = 0, + .speechBefore = {0x1405, 0xA22, 0x1000, 0x20F, 0x1020, 0x26D9}, + .speechWin = {0x811, 0xA28, 0x619, 0x100B, 0xA05, 0x26D9}, + .speechLose = {0x1E19, 0xA28, 0x26D9, 0x102F, 0xA02, 0xFFFF}, + .speechAfter = {0x817, 0x809, 0xA28, 0xA33, 0xFFFF, 0xFFFF}, + .mons = + { + [0] = + { + .species = SPECIES_DELIBIRD, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_SPLASH, MOVE_HAIL, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x8A, + .nickname = _("DELIBIRD"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_CLEFAIRY, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_COSMIC_POWER, MOVE_LIGHT_SCREEN, MOVE_MOONLIGHT}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xD, + .nickname = _("CLEFAIRY"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_PIKACHU, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_AGILITY}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xD, + .nickname = _("PIKACHU"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_MARILL, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_ENDURE}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x8A, + .nickname = _("MARILL"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_JIGGLYPUFF, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_SING, MOVE_DISABLE, MOVE_REST}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xD, + .nickname = _("JIGGLYPUFF"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_TOGETIC, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_CHARM, MOVE_SWEET_KISS, MOVE_WISH}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x26, + .nickname = _("TOGETIC"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("ELIZABETH"), + .facilityClass = FACILITY_CLASS_LADY, + .unused = 0, + .speechBefore = {0x1016, 0xA02, 0x61B, 0xA14, 0x2474, 0xC03}, + .speechWin = {0xE1D, 0x1027, 0x1E29, 0xA01, 0x100A, 0x1212}, + .speechLose = {0x1E04, 0x1017, 0x1C06, 0x180D, 0x1038, 0xFFFF}, + .speechAfter = {0xA29, 0xE09, 0x121A, 0xE15, 0x120E, 0x1C1A}, + .mons = + { + [0] = + { + .species = SPECIES_WIGGLYTUFF, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_SING, MOVE_DREAM_EATER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xC1, + .nickname = _("WIGGLYTUFF"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_SABLEYE, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_ASTONISH, MOVE_FAINT_ATTACK, MOVE_DETECT, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x87, + .nickname = _("SABLEYE"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_GRUMPIG, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_PSYBEAM, MOVE_MAGIC_COAT, MOVE_BOUNCE, MOVE_FUTURE_SIGHT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xA, + .nickname = _("GRUMPIG"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_CORSOLA, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_BUBBLE_BEAM, MOVE_ROCK_BLAST, MOVE_REFLECT, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x12, + .nickname = _("CORSOLA"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_CLAMPERL, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_WHIRLPOOL, MOVE_IRON_DEFENSE, MOVE_ENDURE, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xA, + .nickname = _("CLAMPERL"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_STARMIE, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_DIVE, MOVE_ICY_WIND, MOVE_SWIFT, MOVE_SKILL_SWAP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xA, + .nickname = _("STARMIE"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x40, 0x41, 0x41, 0x8, 0x40, 0xFB, 0x43, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x42, 0x42, 0x42, 0xFB, 0x41, 0x8, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x43, 0x43, 0xFB, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0xFB, 0x43, 0x41, 0x42, 0x40, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x40, 0x43, 0x43, 0x43, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x42, 0x41, 0xFE, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x42, 0x41, 0x43, 0x43, 0x43, 0x41, 0x40, 0x42, 0x42, 0x42, 0x42, 0x41, 0x40, 0x41, 0x8, 0x40, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xFB, 0x41, 0x40, 0x41, 0x8, 0x40, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0xFB, 0x40, 0x41, 0x8, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x8, 0x40, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x8}, + .unk3A0 = {0x381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}, + .coords = {133, 137}, + .direction = 0x23, + .range = 0x33, + }, + [1] = + { + .unk0 = 0x2B, + .unk1 = 0x2C, + .trainers = + { + [0] = + { + .name = _("ANNABELL"), + .facilityClass = FACILITY_CLASS_PARASOL_LADY, + .unused = 0, + .speechBefore = {0x81E, 0x100F, 0xA02, 0xE09, 0x2813, 0xC03}, + .speechWin = {0xA1F, 0xA02, 0xE09, 0x1440, 0xC03, 0xFFFF}, + .speechLose = {0xA01, 0x1016, 0x1239, 0xA06, 0xE09, 0x1240}, + .speechAfter = {0xA05, 0x20E, 0x1A35, 0xE25, 0x102F, 0x449}, + .mons = + { + [0] = + { + .species = SPECIES_JIGGLYPUFF, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SING, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x0, + .nickname = _("JIGGLYPUFF"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_JYNX, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_PERISH_SONG, MOVE_FAKE_TEARS, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x0, + .nickname = _("JYNX"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_EXPLOUD, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_HOWL, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x96, + .nickname = _("EXPLOUD"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_ABSOL, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SWORDS_DANCE, MOVE_SLASH, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x96, + .nickname = _("ABSOL"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_PIDGEOTTO, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_FEATHER_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x96, + .nickname = _("PIDGEOTTO"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ALTARIA, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x0, + .nickname = _("ALTARIA"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("COLEMAN"), + .facilityClass = FACILITY_CLASS_COLLECTOR, + .unused = 0, + .speechBefore = {0xA01, 0x1645, 0xA2C, 0x102E, 0xA28, 0x1A00}, + .speechWin = {0x103B, 0xA28, 0x1A00, 0x1239, 0x1E14, 0xC03}, + .speechLose = {0xA06, 0x103A, 0x1020, 0x24D7, 0xA27, 0xC00}, + .speechAfter = {0xA2A, 0x60E, 0x200, 0x102E, 0xA28, 0x1A00}, + .mons = + { + [0] = + { + .species = SPECIES_CHIMECHO, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xD, + .nickname = _("CHIMECHO"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_WHISMUR, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xD, + .nickname = _("WHISMUR"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_YANMA, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x8A, + .nickname = _("YANMA"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_ILLUMISE, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xA, + .nickname = _("ILLUMISE"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_SPHEAL, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xA, + .nickname = _("SPHEAL"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_VIGOROTH, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x87, + .nickname = _("VIGOROTH"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x9B, 0x9C, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x8, 0x9C, 0x9B, 0x96, 0x40, 0xDB, 0xDB, 0x40, 0x96, 0x40, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x8, 0x91, 0x96, 0x40, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9C, 0x8, 0x91, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x9B, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x8, 0x91, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x8, 0x91, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9C, 0x8, 0x9C, 0x9B, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x8, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9C, 0x96, 0x8, 0xD6, 0x96, 0x9C, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x9C, 0xD6, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0xD6, 0x9C, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF}, + .coords = {131, 139}, + .direction = 0x23, + .range = 0x77, + }, + [2] = + { + .unk0 = 0x2D, + .unk1 = 0x2E, + .trainers = + { + [0] = + { + .name = _("ENRIQUE"), + .facilityClass = FACILITY_CLASS_RICH_BOY, + .unused = 0, + .speechBefore = {0x20F, 0xE25, 0x102B, 0x1021, 0x2017, 0x1C13}, + .speechWin = {0x822, 0x822, 0xC00, 0x81B, 0xFFFF, 0xFFFF}, + .speechLose = {0xC3B, 0x162D, 0xA02, 0x604, 0xC03, 0xFFFF}, + .speechAfter = {0x103B, 0xA02, 0x1239, 0xA28, 0x142B, 0xC03}, + .mons = + { + [0] = + { + .species = SPECIES_WOOPER, + .heldItem = ITEM_FIGY_BERRY, + .moves = {MOVE_RAIN_DANCE, MOVE_YAWN, MOVE_SURF, MOVE_HAZE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 6, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8C, + .nickname = _("WOOPER"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_POLIWAG, + .heldItem = ITEM_WIKI_BERRY, + .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_MIST, MOVE_HYPNOSIS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 6, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x3, + .nickname = _("POLIWAG"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_PSYDUCK, + .heldItem = ITEM_AGUAV_BERRY, + .moves = {MOVE_HYPNOSIS, MOVE_SURF, MOVE_DISABLE, MOVE_SEISMIC_TOSS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("PSYDUCK"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_RHYDON, + .heldItem = ITEM_SOFT_SAND, + .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .speedEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x96, + .nickname = _("RHYDON"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_RHYHORN, + .heldItem = ITEM_SOFT_SAND, + .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("RHYHORN"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_CUBONE, + .heldItem = ITEM_SOFT_SAND, + .moves = {MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x80, + .nickname = _("CUBONE"), + .friendship = 0, + }, + }, + }, + [1] = + { + .name = _("COLLEEN"), + .facilityClass = FACILITY_CLASS_LADY, + .unused = 0, + .speechBefore = {0xA01, 0x100A, 0x103A, 0x102F, 0x40A, 0x1038}, + .speechWin = {0xA01, 0x103A, 0x1E0F, 0x40A, 0x1E05, 0xC00}, + .speechLose = {0x818, 0xE15, 0x2216, 0xA28, 0x1827, 0xC04}, + .speechAfter = {0xA01, 0x1236, 0x102F, 0x601, 0xE1C, 0x1C05}, + .mons = + { + [0] = + { + .species = SPECIES_MAGNEMITE, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_THUNDER, MOVE_ZAP_CANNON, MOVE_SPARK, MOVE_THUNDER_SHOCK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8C, + .nickname = _("MAGNEMITE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_ELECTABUZZ, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_SHOCK_WAVE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x41, + .nickname = _("ELECTABUZZ"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_FLAAFFY, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_SHOCK_WAVE, MOVE_THUNDER_SHOCK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .spAttackEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x0, + .nickname = _("FLAAFFY"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_BALTOY, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("BALTOY"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_PINECO, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .speedEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("PINECO"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_VOLTORB, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x80, + .nickname = _("VOLTORB"), + .friendship = 0, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x1C, 0x1D, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x84, 0x84, 0x84, 0x9A, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x17, 0xBB, 0xBB, 0x8}, + .unk3A0 = {0x381, 0x381, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1}, + .coords = {25, 30}, + .direction = 0x23, + .range = 0x44, + }, + [3] = + { + .unk0 = 0x2F, + .unk1 = 0x30, + .trainers = + { + [0] = + { + .name = _("KIMBERLY"), + .facilityClass = FACILITY_CLASS_POKEFAN_F, + .unused = 0, + .speechBefore = {0xA01, 0x103A, 0x163A, 0x1036, 0xA28, 0x45D}, + .speechWin = {0xA29, 0x1022, 0x122E, 0xA02, 0x1212, 0xC03}, + .speechLose = {0xA06, 0x1020, 0xE02, 0xA21, 0x1029, 0x1443}, + .speechAfter = {0xA28, 0x45D, 0x100B, 0x1E29, 0x102B, 0xA14}, + .mons = + { + [0] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 30, + .attackIV = 31, + .defenseIV = 30, + .speedIV = 31, + .spAttackIV = 30, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x202, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_MYSTIC_WATER, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 30, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 30, + .spAttackIV = 30, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x10001, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_BLACK_BELT, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 30, + .attackIV = 30, + .defenseIV = 30, + .speedIV = 30, + .spAttackIV = 30, + .spDefenseIV = 30, + .altAbility = 0, + .personality = 0x102, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_SPINDA, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x88FE980F, + .nickname = _("SPINDA"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_PLUSLE, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("PLUSLE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_VOLBEAT, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_HELPING_HAND, MOVE_SIGNAL_BEAM, MOVE_SOLAR_BEAM, MOVE_MOONLIGHT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0xF, + .nickname = _("VOLBEAT"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("FRANCISCO"), + .facilityClass = FACILITY_CLASS_POKEFAN_M, + .unused = 0, + .speechBefore = {0xA01, 0x1822, 0x1E10, 0x1C04, 0x1039, 0xFFFF}, + .speechWin = {0x1025, 0xE1D, 0xE0F, 0xA02, 0x631, 0xFFFF}, + .speechLose = {0x81D, 0x1004, 0xA01, 0x162D, 0x123F, 0xA02}, + .speechAfter = {0x801, 0xC04, 0xFFFF, 0x811, 0xFFFF, 0xFFFF}, + .mons = + { + [0] = + { + .species = SPECIES_SPINDA, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xE2880098, + .nickname = _("SPINDA"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MINUN, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8C, + .nickname = _("MINUN"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_ILLUMISE, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_HELPING_HAND, MOVE_WISH, MOVE_THUNDERBOLT, MOVE_MOONLIGHT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("ILLUMISE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_CHARCOAL, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 30, + .attackIV = 31, + .defenseIV = 30, + .speedIV = 30, + .spAttackIV = 30, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x302, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_SOFT_SAND, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 30, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 30, + .spDefenseIV = 30, + .altAbility = 0, + .personality = 0x203, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_TWISTED_SPOON, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 30, + .speedIV = 30, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x301, + .nickname = _("UNOWN"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x5E, 0x41, 0x71, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x65, 0x40, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x42, 0x73, 0x41, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x43, 0x73, 0x43, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x8, 0x65, 0x42, 0x73, 0x42, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x8, 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x43, 0x6D, 0x41, 0x73, 0x43, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x8, 0x65, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x40, 0x73, 0x8, 0x6C, 0x73, 0x40, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x8, 0x69, 0x40, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x1, 0x2201, 0x1, 0x8881, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0xFFFF}, + .coords = {42, 46}, + .direction = 0x23, + .range = 0x33, + }, + }, +}; +static const struct TrHillTag sDataTagUnique = +{ + .unkField_0 = 8, + .unused1 = 3, + .unkField_2 = 4, + .unused3 = 0, + .unused4 = 243, + .unused5 = 82, + .unused6 = 6, + .floors = + { + [0] = + { + .unk0 = 0x31, + .unk1 = 0x32, + .trainers = + { + [0] = + { + .name = _("MEREDITH"), + .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, + .unused = 0, + .speechBefore = {0x1E02, 0xC04, 0xFFFF, 0xA01, 0xC04, 0xFFFF}, + .speechWin = {0xC1D, 0xC00, 0xFFFF, 0x1E02, 0xC04, 0xC3A}, + .speechLose = {0x1E02, 0xC04, 0xFFFF, 0xC0A, 0xC04, 0xFFFF}, + .speechAfter = {0x1E02, 0xC04, 0xFFFF, 0xA29, 0x120E, 0xC04}, + .mons = + { + [0] = + { + .species = SPECIES_SUNFLORA, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_PETAL_DANCE, MOVE_GRASS_WHISTLE, MOVE_LIGHT_SCREEN, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .defenseEV = 155, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x0, + .nickname = _("SUNFLORA"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_TANGELA, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_GIGA_DRAIN, MOVE_SLEEP_POWDER, MOVE_AMNESIA, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spDefenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x91, + .nickname = _("TANGELA"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_VENUSAUR, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 100, + .attackEV = 110, + .defenseEV = 100, + .spAttackEV = 100, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x1F, + .nickname = _("VENUSAUR"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_LANTURN, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_SPARK, MOVE_WATER_PULSE, MOVE_CONFUSE_RAY, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("LANTURN"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_MANECTRIC, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_THUNDERBOLT, MOVE_HEADBUTT, MOVE_BITE, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0xF, + .nickname = _("MANECTRIC"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_RAIKOU, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_THUNDER, MOVE_CRUNCH, MOVE_ROAR, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("RAIKOU"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("BERNARD"), + .facilityClass = FACILITY_CLASS_KINDLER, + .unused = 0, + .speechBefore = {0xA01, 0x1015, 0x631, 0x1E0F, 0x1400, 0x628}, + .speechWin = {0x103B, 0xA01, 0x415, 0xA02, 0x1E13, 0xC03}, + .speechLose = {0xC29, 0xC00, 0xA06, 0x1020, 0x1230, 0xA35}, + .speechAfter = {0xA05, 0x281D, 0xE20, 0x420, 0x141E, 0xC04}, + .mons = + { + [0] = + { + .species = SPECIES_RELICANTH, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_ANCIENT_POWER, MOVE_WATER_PULSE, MOVE_MUD_SPORT, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 155, + .defenseEV = 100, + .spDefenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x2F, + .nickname = _("RELICANTH"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_GOLDUCK, + .heldItem = ITEM_LAX_INCENSE, + .moves = {MOVE_SURF, MOVE_PSYBEAM, MOVE_BRICK_BREAK, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("GOLDUCK"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_BLASTOISE, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_HYDRO_PUMP, MOVE_BITE, MOVE_MIRROR_COAT, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x28, + .nickname = _("BLASTOISE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_MAGCARGO, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_HEAT_WAVE, MOVE_ROCK_SLIDE, MOVE_PROTECT, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spDefenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x93, + .nickname = _("MAGCARGO"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_RAPIDASH, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_FIRE_BLAST, MOVE_BOUNCE, MOVE_QUICK_ATTACK, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0xF, + .nickname = _("RAPIDASH"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_MOLTRES, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SKY_ATTACK, MOVE_AERIAL_ACE, MOVE_ROAR, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("MOLTRES"), + .friendship = 255, + }, + }, + }, + }, + .data = {0xF1, 0xF5, 0xFB, 0xF5, 0xE6, 0xE6, 0x1B, 0x14, 0x15, 0xF8, 0xF9, 0xFA, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xF9, 0xE6, 0xEE, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0x9B, 0x9B, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0x9B, 0xDB, 0xDB, 0x9B, 0xEC, 0xFB, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xF5, 0x95, 0x95, 0xF5, 0xF5, 0xF5, 0xEB, 0xEC, 0xEB, 0xFB, 0xEB, 0x8, 0xED, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x8, 0xF4, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xF5, 0xFB, 0x8, 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x5E01, 0x50FF, 0x5083, 0x503B, 0x5FEB, 0xC02B, 0x5FEB, 0x5009, 0x57FD, 0x1005, 0x7FF5, 0x15, 0x7FF5, 0x1, 0xFFFF}, + .coords = {52, 55}, + .direction = 0x23, + .range = 0x22, + }, + [1] = + { + .unk0 = 0x33, + .unk1 = 0x34, + .trainers = + { + [0] = + { + .name = _("ABRAHAM"), + .facilityClass = FACILITY_CLASS_RUIN_MANIAC, + .unused = 0, + .speechBefore = {0xA01, 0x103A, 0x1E0F, 0x20E, 0xE0D, 0x143C}, + .speechWin = {0x1E22, 0x1020, 0x1240, 0x20E, 0x1029, 0x100B}, + .speechLose = {0xA01, 0x1E26, 0x1020, 0x63E, 0x1030, 0x1C12}, + .speechAfter = {0xA01, 0x1236, 0x1020, 0x24A6, 0x1034, 0xA02}, + .mons = + { + [0] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8A, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_REST, MOVE_THUNDER_WAVE, MOVE_FLAMETHROWER, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x87, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_EXPLOSION}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xD, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xA, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_TOXIC, MOVE_PROTECT, MOVE_WILL_O_WISP, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xA, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8A, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("LUC"), + .facilityClass = FACILITY_CLASS_TUBER_M, + .unused = 0, + .speechBefore = {0xA01, 0x101E, 0x1020, 0x415, 0x123A, 0x63E}, + .speechWin = {0xA28, 0x123A, 0x63E, 0x100B, 0x415, 0x100C}, + .speechLose = {0x103C, 0xA02, 0x1239, 0xA28, 0x63E, 0xC03}, + .speechAfter = {0xA29, 0x412, 0xE0A, 0xE29, 0x639, 0xC04}, + .mons = + { + [0] = + { + .species = SPECIES_STARYU, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_CAMOUFLAGE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 1, + .personality = 0xA, + .nickname = _("STARYU"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MEOWTH, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_PAY_DAY, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xD, + .nickname = _("MEOWTH"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_BLAZIKEN, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_BLAZE_KICK, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x28, + .nickname = _("BLAZIKEN"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_CUBONE, + .heldItem = ITEM_THICK_CLUB, + .moves = {MOVE_BONEMERANG, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 1, + .personality = 0x16, + .nickname = _("CUBONE"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_BEEDRILL, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_TWINEEDLE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x8A, + .nickname = _("BEEDRILL"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_RATICATE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_SUPER_FANG, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 1, + .personality = 0xD, + .nickname = _("RATICATE"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x2D, 0x3B, 0x3B, 0x3B, 0x35, 0x2C, 0x23, 0x24, 0x23, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x94, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x8, 0x8D, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8C, 0x8, 0x94, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x9B, 0x9B, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x9B, 0x95, 0x8F, 0x9B, 0x8, 0x91, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x95, 0x97, 0x95, 0x97, 0x8C, 0x9B, 0x8C, 0x97, 0x95, 0x8, 0x91, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x87, 0x95, 0x87, 0x8C, 0x8, 0x8D, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8, 0x94, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x8, 0x91, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x95, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x95, 0x8F, 0x8B, 0x8F, 0x8C, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8, 0x91, 0x97, 0x8C, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8B, 0x97, 0x9B, 0x8, 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8C, 0x9B, 0x9B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x7C1, 0x8AA1, 0x209, 0x5557, 0xA281, 0x81, 0x5D6D, 0x2283, 0x89, 0xDD55, 0x20A1, 0xA81, 0x7D5D, 0x9, 0xFFFF}, + .coords = {105, 109}, + .direction = 0x23, + .range = 0x33, + }, + [2] = + { + .unk0 = 0x35, + .unk1 = 0x36, + .trainers = + { + [0] = + { + .name = _("BREYDEN"), + .facilityClass = FACILITY_CLASS_YOUNGSTER, + .unused = 0, + .speechBefore = {0xA01, 0x1225, 0x102B, 0xA28, 0x20E, 0xE12}, + .speechWin = {0xA28, 0x20E, 0x1016, 0x1018, 0x1029, 0x102A}, + .speechLose = {0xA31, 0x1022, 0x103A, 0xA3D, 0x1C06, 0x606}, + .speechAfter = {0xA01, 0x103A, 0xE0D, 0x1C21, 0x20E, 0x143C}, + .mons = + { + [0] = + { + .species = SPECIES_CHARMELEON, + .heldItem = ITEM_CHARCOAL, + .moves = {MOVE_FIRE_SPIN, MOVE_DRAGON_RAGE, MOVE_FLAMETHROWER, MOVE_SLASH}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .altAbility = 0, + .personality = 0x32, + .nickname = _("CHARMELEON"), + .friendship = 100, + }, + [1] = + { + .species = SPECIES_WARTORTLE, + .heldItem = ITEM_MYSTIC_WATER, + .moves = {MOVE_HYDRO_PUMP, MOVE_SKULL_BASH, MOVE_RAIN_DANCE, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .altAbility = 0, + .personality = 0x0, + .nickname = _("WARTORTLE"), + .friendship = 100, + }, + [2] = + { + .species = SPECIES_IVYSAUR, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_SOLAR_BEAM, MOVE_SYNTHESIS, MOVE_GROWTH, MOVE_SWEET_SCENT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 6, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .altAbility = 0, + .personality = 0x0, + .nickname = _("IVYSAUR"), + .friendship = 100, + }, + [3] = + { + .species = SPECIES_BAYLEEF, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_SOLAR_BEAM, MOVE_SAFEGUARD, MOVE_LIGHT_SCREEN, MOVE_BODY_SLAM}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .attackEV = 130, + .spAttackEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .altAbility = 0, + .personality = 0x32, + .nickname = _("BAYLEEF"), + .friendship = 100, + }, + [4] = + { + .species = SPECIES_CROCONAW, + .heldItem = ITEM_MYSTIC_WATER, + .moves = {MOVE_SCARY_FACE, MOVE_SLASH, MOVE_HYDRO_PUMP, MOVE_SCREECH}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .speedEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .altAbility = 0, + .personality = 0x3, + .nickname = _("CROCONAW"), + .friendship = 100, + }, + [5] = + { + .species = SPECIES_QUILAVA, + .heldItem = ITEM_CHARCOAL, + .moves = {MOVE_QUICK_ATTACK, MOVE_FLAMETHROWER, MOVE_FLAME_WHEEL, MOVE_SWIFT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x28, + .nickname = _("QUILAVA"), + .friendship = 100, + }, + }, + }, + [1] = + { + .name = _("ANIYA"), + .facilityClass = FACILITY_CLASS_TUBER_F, + .unused = 0, + .speechBefore = {0xA2C, 0x120A, 0xA14, 0xE13, 0x20E, 0x208}, + .speechWin = {0xA29, 0x1022, 0x280A, 0x1036, 0x1E0F, 0xC00}, + .speechLose = {0xC1D, 0xE0A, 0xC04, 0x1E25, 0x1E25, 0xC02}, + .speechAfter = {0xA06, 0x140A, 0xC03, 0x1017, 0x62D, 0xC00}, + .mons = + { + [0] = + { + .species = SPECIES_SMOOCHUM, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_ICE_BEAM, MOVE_PSYCHIC, MOVE_SWEET_KISS, MOVE_FAKE_TEARS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x32, + .nickname = _("SMOOCHUM"), + .friendship = 50, + }, + [1] = + { + .species = SPECIES_AZURILL, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_SURF, MOVE_SING, MOVE_RAIN_DANCE, MOVE_BLIZZARD}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xC8, + .nickname = _("AZURILL"), + .friendship = 50, + }, + [2] = + { + .species = SPECIES_ELEKID, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_FIRE_PUNCH, MOVE_THUNDER, MOVE_ICE_PUNCH, MOVE_THUNDER_WAVE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x0, + .nickname = _("ELEKID"), + .friendship = 50, + }, + [3] = + { + .species = SPECIES_CLEFFA, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_MEGA_KICK, MOVE_SWEET_KISS, MOVE_SING, MOVE_METRONOME}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x0, + .nickname = _("CLEFFA"), + .friendship = 50, + }, + [4] = + { + .species = SPECIES_WYNAUT, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_ENCORE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x84, + .nickname = _("WYNAUT"), + .friendship = 50, + }, + [5] = + { + .species = SPECIES_MAGBY, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_FIRE_BLAST, MOVE_CONFUSE_RAY, MOVE_THUNDER_PUNCH, MOVE_BARRIER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xF, + .nickname = _("MAGBY"), + .friendship = 50, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x8, 0x69, 0x46, 0x7A, 0x73, 0x73, 0x73, 0x79, 0x73, 0x73, 0x73, 0x7D, 0x73, 0x73, 0x73, 0x46, 0x8, 0x69, 0x46, 0x73, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x69, 0x46, 0x73, 0x73, 0x7B, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x7A, 0x73, 0x73, 0x73, 0x46, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7A, 0x46, 0x8, 0x69, 0x46, 0x73, 0x73, 0x73, 0x73, 0x73, 0x7D, 0x7C, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x46, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0xF1, 0x46, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7A, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7C, 0x8, 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xFB, 0x8, 0x7C, 0xFB, 0x7B, 0xFB, 0x7A, 0xFB, 0x79, 0xFB, 0xB3, 0xFB, 0x7D, 0xFB, 0x7E, 0xFB, 0x7D, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x7FFB, 0x4003, 0x5FFF, 0x4003, 0x7FFB, 0x4003, 0x7EFF, 0x4443, 0x4443, 0x4443, 0x7EFF, 0x4001, 0x7FFD, 0x1, 0xFFFF}, + .coords = {150, 152}, + .direction = 0x23, + .range = 0x11, + }, + [3] = + { + .unk0 = 0x38, + .unk1 = 0x37, + .trainers = + { + [0] = + { + .name = _("DANE"), + .facilityClass = FACILITY_CLASS_BIRD_KEEPER, + .unused = 0, + .speechBefore = {0xA01, 0x120A, 0xA28, 0x20E, 0x102C, 0x1A34}, + .speechWin = {0xA31, 0x1240, 0x102F, 0x1A1C, 0xE15, 0x628}, + .speechLose = {0xC0A, 0xC00, 0xA28, 0x123A, 0x20E, 0xC00}, + .speechAfter = {0x102D, 0x102C, 0x1C12, 0x1A34, 0xA01, 0x601}, + .mons = + { + [0] = + { + .species = SPECIES_SUDOWOODO, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_ROCK_SLIDE, MOVE_BLOCK, MOVE_TOXIC, MOVE_EXPLOSION}, + .level = 0, + .ppBonuses = 0, + .hpEV = 100, + .attackEV = 255, + .spDefenseEV = 155, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x80, + .nickname = _("SUDOWOODO"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_SLOWKING, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_BLIZZARD, MOVE_DISABLE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .defenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x8C, + .nickname = _("SLOWKING"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_ENTEI, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_FLAMETHROWER, MOVE_CALM_MIND, MOVE_FIRE_SPIN, MOVE_ROAR}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("ENTEI"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_HITMONCHAN, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_MEGA_PUNCH, MOVE_DETECT, MOVE_COUNTER, MOVE_SKY_UPPERCUT}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("HITMONCHAN"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_MANTINE, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_ATTRACT, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .defenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x6, + .nickname = _("MANTINE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ZAPDOS, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_AGILITY}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x18, + .nickname = _("ZAPDOS"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("STEPHANIE"), + .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, + .unused = 0, + .speechBefore = {0x1E0F, 0x100B, 0xE0F, 0xA02, 0x606, 0xC00}, + .speechWin = {0x1018, 0xA02, 0x1243, 0xE0F, 0x1C1A, 0xC03}, + .speechLose = {0x801, 0xE1D, 0xE0F, 0xA02, 0x1018, 0x1029}, + .speechAfter = {0xA02, 0x123F, 0xA14, 0x1405, 0x102B, 0xA02}, + .mons = + { + [0] = + { + .species = SPECIES_HITMONLEE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_MEGA_KICK, MOVE_MIND_READER, MOVE_FOCUS_ENERGY, MOVE_HI_JUMP_KICK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("HITMONLEE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_PORYGON2, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_LOCK_ON, MOVE_BLIZZARD, MOVE_CONVERSION_2, MOVE_PSYCHIC}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("PORYGON2"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_SUICUNE, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_SURF, MOVE_CALM_MIND, MOVE_MIRROR_COAT, MOVE_MIST}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("SUICUNE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_HOUNDOOM, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_ROAR, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0xF, + .nickname = _("HOUNDOOM"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_STANTLER, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_CONFUSE_RAY, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_TAKE_DOWN}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("STANTLER"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ARTICUNO, + .heldItem = ITEM_NEVER_MELT_ICE, + .moves = {MOVE_BLIZZARD, MOVE_SHEER_COLD, MOVE_MIST, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("ARTICUNO"), + .friendship = 255, + }, + }, + }, + }, + .data = {0xF1, 0xFB, 0xFB, 0xFB, 0xF9, 0xF9, 0x1B, 0x1C, 0x1D, 0xE5, 0xE6, 0xEE, 0xF5, 0xFB, 0xFB, 0x8, 0xED, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x8, 0xF4, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xF5, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0x8, 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x3F9, 0xF041, 0x41, 0x7F5F, 0x4401, 0x4541, 0x5579, 0x5541, 0x555F, 0x5541, 0x5541, 0x557D, 0x1101, 0x1101, 0xFFFF}, + .coords = {40, 91}, + .direction = 0x21, + .range = 0x33, + }, + }, +}; +static const struct TrHillTag sDataTagExpert = +{ + .unkField_0 = 8, + .unused1 = 1, + .unkField_2 = 4, + .unused3 = 0, + .unused4 = 63, + .unused5 = 31, + .unused6 = 6, + .floors = + { + [0] = + { + .unk0 = 0x39, + .unk1 = 0x3A, + .trainers = + { + [0] = + { + .name = _("ALFRED"), + .facilityClass = FACILITY_CLASS_COOLTRAINER_M, + .unused = 0, + .speechBefore = {0xA3D, 0x1016, 0x1647, 0x102C, 0xE39, 0x432}, + .speechWin = {0xA3D, 0x103B, 0x1031, 0x1042, 0xC38, 0xC00}, + .speechLose = {0xA40, 0x616, 0x1013, 0xE39, 0x1405, 0xC04}, + .speechAfter = {0xA3D, 0x140F, 0x102F, 0x180F, 0xE12, 0xE36}, + .mons = + { + [0] = + { + .species = SPECIES_SNORLAX, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_EARTHQUAKE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .defenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x35, + .nickname = _("SNORLAX"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MILTANK, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_MILK_DRINK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("MILTANK"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_URSARING, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x7F, + .nickname = _("URSARING"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_SLAKING, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_HYPER_BEAM, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_REST}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x80, + .nickname = _("SLAKING"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_KANGASKHAN, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_FAKE_OUT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("KANGASKHAN"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ZANGOOSE, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_ROAR}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x80, + .nickname = _("ZANGOOSE"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("EDIE"), + .facilityClass = FACILITY_CLASS_PSYCHIC_F, + .unused = 0, + .speechBefore = {0xA3D, 0x1001, 0x102B, 0xE39, 0x20B, 0x61F}, + .speechWin = {0xA28, 0x616, 0x1639, 0x102F, 0x1419, 0xC00}, + .speechLose = {0x81D, 0x81D, 0xC04, 0x1E14, 0x1014, 0x1018}, + .speechAfter = {0x1023, 0x1231, 0x1006, 0x1020, 0x20B, 0x1806}, + .mons = + { + [0] = + { + .species = SPECIES_SLOWKING, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_SKILL_SWAP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 200, + .defenseEV = 110, + .spAttackEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 1, + .personality = 0xF, + .nickname = _("SLOWKING"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_ESPEON, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_CALM_MIND, MOVE_REFLECT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x28, + .nickname = _("ESPEON"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_STARMIE, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_ICE_BEAM}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 1, + .personality = 0xF, + .nickname = _("STARMIE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_GENGAR, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xF, + .nickname = _("GENGAR"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_GARDEVOIR, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_MAGICAL_LEAF, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xF, + .nickname = _("GARDEVOIR"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ALAKAZAM, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_RECOVER, MOVE_THUNDER_WAVE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xF, + .nickname = _("ALAKAZAM"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x3B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x3B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x3B, 0x3B, 0x8, 0x69, 0x73, 0x8, 0x4D, 0x4D, 0x4D, 0x4D, 0xD1, 0x4D, 0x4D, 0x4D, 0x4D, 0x8, 0x69, 0x73, 0x8, 0x40, 0x3B, 0x8, 0x55, 0x55, 0x55, 0x55, 0xD1, 0x55, 0x55, 0x55, 0x55, 0x8, 0x31, 0x41, 0x8, 0x69, 0x41, 0x8, 0xC5, 0xD9, 0xD9, 0xD9, 0x9A, 0xD9, 0xD9, 0xD9, 0xC6, 0x8, 0x41, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x8, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xCD, 0x9B, 0x73, 0x73, 0x44, 0x73, 0x73, 0x9B, 0xD5, 0x8, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x8, 0x31, 0x73, 0x8, 0x69, 0x41, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xDB, 0xDB, 0xDB, 0x8, 0x41, 0x73, 0x8, 0x40, 0x3B, 0x8, 0x8, 0xC7, 0xC7, 0xDB, 0xDB, 0xDB, 0xC7, 0xC7, 0x8, 0x8, 0x31, 0x41, 0x8, 0x69, 0x3B, 0x4D, 0x4D, 0x67, 0x67, 0xDB, 0xDB, 0xDB, 0x67, 0x67, 0x4D, 0x4D, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x55, 0x55, 0xD7, 0xD7, 0xD1, 0xDB, 0xDB, 0xD7, 0xD7, 0x55, 0x55, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x73, 0x8, 0x69, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x201, 0x3EF9, 0x3EF9, 0x3EF9, 0x2009, 0x3019, 0x2009, 0x3019, 0x2009, 0x3019, 0x3019, 0x3C79, 0x1, 0x1, 0xFFFF}, + .coords = {116, 122}, + .direction = 0x23, + .range = 0x55, + }, + [1] = + { + .unk0 = 0x3B, + .unk1 = 0x3C, + .trainers = + { + [0] = + { + .name = _("RODERICK"), + .facilityClass = FACILITY_CLASS_COOLTRAINER_M, + .unused = 0, + .speechBefore = {0xA01, 0x1016, 0x606, 0x103E, 0x1020, 0x270E}, + .speechWin = {0xA31, 0xE16, 0x1431, 0x1E14, 0xA01, 0x606}, + .speechLose = {0x280E, 0x1404, 0xA14, 0xE09, 0x1428, 0xC04}, + .speechAfter = {0xA02, 0x101E, 0x1020, 0x1405, 0x1814, 0xC03}, + .mons = + { + [0] = + { + .species = SPECIES_SWELLOW, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_AERIAL_ACE, MOVE_AGILITY, MOVE_FACADE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("SWELLOW"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MACHAMP, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_LOW_KICK, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("MACHAMP"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_URSARING, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_PROTECT, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("URSARING"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_KINGLER, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_RETURN, MOVE_PROTECT, MOVE_CRABHAMMER, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x80, + .nickname = _("KINGLER"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_TYRANITAR, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .defenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x80, + .nickname = _("TYRANITAR"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_DRAGONITE, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_BODY_SLAM, MOVE_THUNDER_WAVE, MOVE_EARTHQUAKE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x80, + .nickname = _("DRAGONITE"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("ALICIA"), + .facilityClass = FACILITY_CLASS_COOLTRAINER_F, + .unused = 0, + .speechBefore = {0xA01, 0x1017, 0x140F, 0x1020, 0x270E, 0xC00}, + .speechWin = {0x80B, 0xC00, 0x1039, 0x122E, 0x102B, 0xA02}, + .speechLose = {0x1E22, 0x1021, 0xC15, 0x26A5, 0x1E19, 0xC00}, + .speechAfter = {0xA01, 0x1016, 0x1006, 0xA05, 0x20E, 0x1814}, + .mons = + { + [0] = + { + .species = SPECIES_JOLTEON, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xA, + .nickname = _("JOLTEON"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_ALAKAZAM, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_ATTRACT, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xA, + .nickname = _("ALAKAZAM"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_STARMIE, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 1, + .personality = 0xA, + .nickname = _("STARMIE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_DUSCLOPS, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_PURSUIT, MOVE_PROTECT, MOVE_ATTRACT, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x82, + .nickname = _("DUSCLOPS"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_NINETALES, + .heldItem = ITEM_WHITE_HERB, + .moves = {MOVE_OVERHEAT, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xD2, + .nickname = _("NINETALES"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_BANETTE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_SHADOW_BALL, MOVE_FAINT_ATTACK, MOVE_ATTRACT, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x85, + .nickname = _("BANETTE"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x8, 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x8, 0x91, 0x46, 0x7D, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0xB3, 0x9B, 0x9B, 0x9B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x9B, 0x8, 0x91, 0x46, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x8, 0x91, 0x46, 0x9B, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xB3, 0x8, 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x8, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0x8, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF}, + .coords = {167, 231}, + .direction = 0x1, + .range = 0x33, + }, + [2] = + { + .unk0 = 0x3D, + .unk1 = 0x3E, + .trainers = + { + [0] = + { + .name = _("TERRENCE"), + .facilityClass = FACILITY_CLASS_EXPERT_M, + .unused = 0, + .speechBefore = {0xC33, 0x1E0F, 0x618, 0x100B, 0x102B, 0xA02}, + .speechWin = {0xC33, 0x103B, 0xA02, 0x1239, 0x1E14, 0xC03}, + .speechLose = {0xC33, 0xA29, 0x1025, 0x80B, 0xFFFF, 0xFFFF}, + .speechAfter = {0x100B, 0xA05, 0xA10, 0x620, 0xC03, 0xFFFF}, + .mons = + { + [0] = + { + .species = SPECIES_WOBBUFFET, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_MIRROR_COAT, MOVE_COUNTER, MOVE_SAFEGUARD, MOVE_ENCORE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x94, + .nickname = _("WOBBUFFET"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_EXPLOUD, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_HYPER_VOICE, MOVE_COUNTER, MOVE_REST, MOVE_ROCK_SLIDE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x85, + .nickname = _("EXPLOUD"), + .friendship = 0, + }, + [2] = + { + .species = SPECIES_CROBAT, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE, MOVE_TOXIC}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x0, + .nickname = _("CROBAT"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_DUGTRIO, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_DOUBLE_TEAM, MOVE_PROTECT, MOVE_RETURN, MOVE_SLUDGE_BOMB}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 1, + .personality = 0xD, + .nickname = _("DUGTRIO"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_ELECTRODE, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_TORMENT, MOVE_MIRROR_COAT, MOVE_THUNDERBOLT, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x5, + .nickname = _("ELECTRODE"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_GENGAR, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_CONFUSE_RAY, MOVE_MEAN_LOOK, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x14, + .nickname = _("GENGAR"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("CARLOTTA"), + .facilityClass = FACILITY_CLASS_EXPERT_F, + .unused = 0, + .speechBefore = {0xC33, 0xA01, 0x1000, 0x606, 0x102B, 0xA02}, + .speechWin = {0xC33, 0xA3D, 0x101E, 0x1020, 0x1821, 0x1C10}, + .speechLose = {0xC33, 0xA29, 0x80B, 0x102F, 0x121B, 0xA02}, + .speechAfter = {0x100B, 0xA05, 0xA09, 0x415, 0xC03, 0xFFFF}, + .mons = + { + [0] = + { + .species = SPECIES_LAPRAS, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_PERISH_SONG, MOVE_SING}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x82, + .nickname = _("LAPRAS"), + .friendship = 0, + }, + [1] = + { + .species = SPECIES_ABSOL, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_PERISH_SONG, MOVE_DOUBLE_EDGE, MOVE_PROTECT, MOVE_TORMENT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x8A, + .nickname = _("ABSOL"), + .friendship = 0, + }, + [2] = + { + .species = SPECIES_ALTARIA, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_PERISH_SONG, MOVE_PROTECT, MOVE_DRAGON_CLAW, MOVE_FIRE_BLAST}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .spAttackEV = 6, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x0, + .nickname = _("ALTARIA"), + .friendship = 0, + }, + [3] = + { + .species = SPECIES_DEWGONG, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_ICE_BEAM, MOVE_SIGNAL_BEAM, MOVE_REST, MOVE_PERISH_SONG}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x14, + .nickname = _("DEWGONG"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_POLITOED, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_HYDRO_PUMP, MOVE_BLIZZARD, MOVE_MIND_READER, MOVE_PERISH_SONG}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .spAttackEV = 6, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 1, + .personality = 0x14, + .nickname = _("POLITOED"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_MAROWAK, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_PERISH_SONG, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 6, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 1, + .personality = 0x17, + .nickname = _("MAROWAK"), + .friendship = 0, + }, + }, + }, + }, + .data = {0xD1, 0xDB, 0xDB, 0xDB, 0xD9, 0xD9, 0x1B, 0x14, 0x15, 0x98, 0x99, 0x9A, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xD5, 0xD5, 0xC3, 0xF9, 0x86, 0x8E, 0x95, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x8, 0xD1, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x8, 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xCC, 0xCC, 0xFB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCC, 0xCC, 0xCC, 0xCC, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xD5, 0xD5, 0xD5, 0xD5, 0xFB, 0xEC, 0xFB, 0xEC, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xF5, 0xF5, 0xFB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x8, 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xCC, 0xCC, 0xCB, 0xFB, 0x8C, 0x8C, 0x8C, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCC, 0xFB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8}, + .unk3A0 = {0x381, 0x201, 0xEE1, 0x1EF1, 0x3EF9, 0x3EF9, 0x7E7D, 0x783D, 0x2BD, 0x783D, 0x7E7D, 0x3E79, 0x3EF9, 0x1EF1, 0xEE1, 0x201}, + .coords = {103, 167}, + .direction = 0x1, + .range = 0x33, + }, + [3] = + { + .unk0 = 0x3F, + .unk1 = 0x40, + .trainers = + { + [0] = + { + .name = _("NORA"), + .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, + .unused = 0, + .speechBefore = {0xC0A, 0x1E0F, 0x100B, 0x1025, 0x200F, 0xC00}, + .speechWin = {0xC0A, 0xA29, 0x1025, 0x1205, 0xA01, 0x607}, + .speechLose = {0xC0A, 0xA29, 0x1025, 0x120E, 0xA01, 0x630}, + .speechAfter = {0xC0A, 0xC00, 0xFFFF, 0x601, 0x1E1E, 0xC00}, + .mons = + { + [0] = + { + .species = SPECIES_FORRETRESS, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_SPIKES}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .attackEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("FORRETRESS"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_ELECTRODE, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_SWIFT, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 1, + .personality = 0xC, + .nickname = _("ELECTRODE"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_EXEGGUTOR, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_EXPLOSION, MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_SOLAR_BEAM}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x7F, + .nickname = _("EXEGGUTOR"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_DUSCLOPS, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x93, + .nickname = _("DUSCLOPS"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_NINETALES, + .heldItem = ITEM_WHITE_HERB, + .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_OVERHEAT, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xF, + .nickname = _("NINETALES"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_BANETTE, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_THUNDERBOLT, MOVE_THUNDER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x96, + .nickname = _("BANETTE"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("GAV"), + .facilityClass = FACILITY_CLASS_PKMN_RANGER_M, + .unused = 0, + .speechBefore = {0xC3E, 0xA02, 0x1015, 0x1C19, 0xA14, 0xC00}, + .speechWin = {0xC3C, 0xC00, 0xFFFF, 0xA29, 0x2017, 0x415}, + .speechLose = {0xA29, 0x1022, 0x415, 0x1036, 0x102A, 0xC00}, + .speechAfter = {0xC2F, 0x1E19, 0x1021, 0x2017, 0x628, 0xC00}, + .mons = + { + [0] = + { + .species = SPECIES_SALAMENCE, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_ROCK_SLIDE, MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x95, + .nickname = _("SALAMENCE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_GENGAR, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x8C, + .nickname = _("GENGAR"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_GYARADOS, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_DRAGON_DANCE, MOVE_HYPER_BEAM, MOVE_BITE, MOVE_EARTHQUAKE}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("GYARADOS"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_GENGAR, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_EXPLOSION, MOVE_MEAN_LOOK, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("GENGAR"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_DUSCLOPS, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_SHADOW_BALL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x14, + .nickname = _("DUSCLOPS"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_MISDREAVUS, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_PERISH_SONG, MOVE_SHADOW_BALL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 180, + .defenseEV = 180, + .spDefenseEV = 150, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x85, + .nickname = _("MISDREAVUS"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x8, 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x8, 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x8, 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x8, 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x8, 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x8, 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x8, 0x96, 0x9B, 0x9B, 0x9B, 0x9B, 0xD6, 0xD6, 0x96, 0xD6, 0xD6, 0xDB, 0x9B, 0x9B, 0x9B, 0x96, 0x8, 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x8, 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x8, 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x8, 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x8, 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x8, 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x8, 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x8}, + .unk3A0 = {0x381, 0x101, 0x101, 0x6C1, 0x821, 0x16D1, 0x2829, 0x2009, 0x1, 0x2009, 0x2829, 0x16D1, 0x821, 0x6C1, 0x101, 0x101}, + .coords = {103, 167}, + .direction = 0x1, + .range = 0x33, + }, + }, +}; diff --git a/src/trainer_hill.c b/src/trainer_hill.c index 7ec6865fd..a5b5486be 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -24,7 +24,9 @@ #include "constants/event_object_movement_constants.h" #include "constants/event_objects.h" #include "constants/items.h" +#include "constants/moves.h" #include "constants/maps.h" +#include "constants/species.h" #include "constants/trainers.h" extern bool32 sub_81D3B34(void); @@ -118,11 +120,7 @@ static void sub_81D642C(struct Pokemon *mon, u8 level); static u16 sub_81D6640(void); // const data -// I will decompile these soon, no worries :) -extern const struct TrHillTag gUnknown_08626814; -extern const struct TrHillTag gUnknown_086276FC; -extern const struct TrHillTag gUnknown_086285E4; -extern const struct TrHillTag gUnknown_086294CC; +#include "data/battle_frontier/trainer_hill.h" struct { @@ -246,10 +244,10 @@ static const u8 sRecordWinColors[] = {0, 2, 3}; static const struct TrHillTag *const sDataPerTag[] = { - &gUnknown_08626814, - &gUnknown_086276FC, - &gUnknown_086285E4, - &gUnknown_086294CC, + &sDataTagNormal, + &sDataTagVariety, + &sDataTagUnique, + &sDataTagExpert, }; // Unused. -- cgit v1.2.3 From f06c0749bcebc10fe146ca038a6a8597952a0f21 Mon Sep 17 00:00:00 2001 From: shinny456 Date: Sat, 19 Jan 2019 12:14:59 -0500 Subject: trainer_card up to sub_80C4998 --- src/pokedex.c | 2 +- src/trainer_card.c | 1626 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 1609 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/pokedex.c b/src/pokedex.c index 8c6ed3159..3d294e9e9 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -4381,7 +4381,7 @@ u16 sub_80C089C(u8 caseID) return count; } -bool8 sub_80C08E4(void) +bool16 sub_80C08E4(void) { u16 i; diff --git a/src/trainer_card.c b/src/trainer_card.c index d23413a26..51ef20ddc 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -12,8 +12,26 @@ #include "overworld.h" #include "menu.h" #include "text.h" +#include "constants/flags.h" +#include "event_data.h" +#include "constants/game_stat.h" +#include "money.h" +#include "string_util.h" +#include "trainer_card.h" +#include "gpu_regs.h" +#include "international_string_util.h" +#include "pokedex.h" +#include "graphics.h" +#include "pokemon_icon.h" -extern const u8 gText_WaitingTrainerFinishReading[]; +//external functions +extern u8 sub_80F8940(void); +extern bool16 sub_80C08E4(void); +extern u8 sub_80D30A0(u16); +extern void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 bTone); +extern void TintPalette_SepiaTone(u16 *palette, u16 count); + +//gfx extern const u32 gUnknown_08DD2AE0[]; extern const u32 gUnknown_08DD21B0[]; extern const u32 gUnknown_08DD2D30[]; @@ -28,6 +46,60 @@ extern const u32 gFireRedTrainerCard_Gfx[]; extern const u32 gUnknown_0856F018[]; extern const u32 gUnknown_08DD1F78[]; +//strings +extern const u8 gText_WaitingTrainerFinishReading[]; +extern const u8 gText_TrainerCardName[]; +extern const u8 gText_TrainerCardIDNo[]; +extern const u8 gText_TrainerCardMoney[]; +extern const u8 gText_PokedollarVar1[]; +extern const u8 gText_EmptyString6[]; +extern const u8 gText_TrainerCardPokedex[]; +extern const u8 gText_TrainerCardTime[]; +extern const u8 gText_Colon2[]; +extern const u8 gText_Var1sTrainerCard[]; +extern const u8 gText_HallOfFameDebut[]; +extern const u8 gText_WinsLosses[]; +extern const u8 gText_PokemonTrades[]; +extern const u8 gText_BerryCrush[]; +extern const u8 gText_UnionTradesAndBattles[]; +extern const u8 gText_Var1DarkGreyShadowLightGrey[]; +extern const u8 gText_PokeblocksWithFriends[]; +extern const u8 gText_WonContestsWFriends[]; +extern const u8 gText_WSlashStraightSlash[]; +extern const u8 gText_Var1DarkLightGreyBP[]; +extern const u8 gText_BattleTower[]; +extern const u8 gText_BattlePtsWon[]; + +//const rom data to be moved from data/trainer_card.s to this file +extern const struct BgTemplate gUnknown_0856FAB4[4]; +extern const struct WindowTemplate gUnknown_0856FAC4[]; +extern const u8 gUnknown_0856FB0C[]; +extern const u8* gUnknown_0856FB40[]; +extern const u8 gUnknown_0856FB48[]; +extern const u8 gUnknown_0856FB4A[]; +extern const u8 gUnknown_0856FB4C[]; +extern const u8 gUnknown_0856FB55[]; +extern const u8 gUnknown_0856FB57[]; +extern const u8 gUnknown_0856FB0F[]; +extern const u8* gUnknown_0856FB5C[]; +extern const u8 gUnknown_0856FB68[6]; +extern const u8 gUnknown_0856FB6E[6]; +extern const u8 gUnknown_0856FB74[4]; +extern const u8 gUnknown_0856F54C[]; +extern const u8 gUnknown_0856F56C[]; +extern const u8 gUnknown_0856F58C[]; +extern const u8 gUnknown_0856F5AC[]; +extern const u8 gUnknown_0856F4EC[]; +extern const u8 gUnknown_0856F4AC[]; +extern const u8 gUnknown_0856F50C[]; +extern const u8 gUnknown_0856F4CC[]; +extern const u8 gUnknown_0856F52C[]; +extern const u8* gEmeraldTrainerCardStarPals[]; +extern const u8* gFireRedTrainerCardStarPals[]; +extern const u8 gUnknown_0856FB78[]; +extern bool8 (*const gUnknown_0856FB28[])(struct Task *); + +//this file's functions /*static*/ void sub_80C2690(void); /*static*/ void sub_80C26D4(void); /*static*/ void sub_80C48C8(void); @@ -44,28 +116,109 @@ extern const u32 gUnknown_08DD1F78[]; /*static*/ bool8 sub_80C4940(void); /*static*/ bool8 sub_80C2AD8(void); /*static*/ void sub_80C2C80(void); +/*static*/ u32 sav12_xor_get_clamped_above(u8 stat, u32 max); +/*static*/ bool8 sub_80C2DFC(void); +/*static*/ u32 sub_80C2E40(void); +/*static*/ u8 TrainerCard_GetStarCount(struct TrainerCard*); +/*static*/ u16 sub_80C376C(void); +/*static*/ void sub_80C2EC4(struct TrainerCard*, u8); +/*static*/ void sub_80C3020(struct TrainerCard*); +/*static*/ u8 sub_80C4FCC(u8); +/*static*/ void sub_80C3190(void); +/*static*/ void sub_80C3278(void); +/*static*/ void sub_80C334C(void); +/*static*/ void sub_80C3388(void); +/*static*/ void sub_80C3404(void); +/*static*/ void sub_80C3414(void); +/*static*/ void sub_80C4EE4(void); +/*static*/ void sub_80C3574(void); +/*static*/ void sub_80C3608(void); +/*static*/ void sub_80C3684(void); +/*static*/ void sub_80C378C(void); +/*static*/ void sub_80C3A18(void); +/*static*/ bool8 sub_80C34B0(void); +/*static*/ void sub_80C3B50(void); +/*static*/ void sub_80C3CCC(void); +/*static*/ void sub_80C3D60(void); +/*static*/ void sub_80C3DF0(void); +/*static*/ void sub_80C3E58(void); +/*static*/ void sub_80C3F64(void); +/*static*/ void sub_80C3ED4(void); +/*static*/ void sub_80C3FE0(void); +/*static*/ void sub_80C4140(void); +/*static*/ void sub_80C40CC(void); +/*static*/ void sub_80C42A4(void); +/*static*/ void sub_80C3548(void); +/*static*/ void sub_80C3AF0(void); +/*static*/ void sub_80C3BC4(void); +/*static*/ void sub_80C3CF4(void); +/*static*/ void sub_80C3DC0(void); +/*static*/ void sub_80C3E20(void); +/*static*/ void sub_80C3E98(void); +/*static*/ void sub_80C3F14(void); +/*static*/ void sub_80C3FA4(void); +/*static*/ void sub_80C4020(void); +/*static*/ void sub_80C3C34(u8 top, const u8* str1, u8* str2, const u8* color); +/*static*/ void sub_80C4330(void); +/*static*/ u8 sub_80C43A8(void); +/*static*/ void sub_80C474C(void); +/*static*/ void sub_80C4960(u8); +/*static*/ bool8 sub_80C4998(struct Task* task); +/*static*/ bool8 sub_80C49D8(struct Task* task); +/*static*/ void sub_80C32EC(u16); extern struct UnknownStruct{ u8 var_0; u8 var_1; u8 var_2; - u8 filler3[2]; + u8 var_3; + u8 var_4; u8 var_5; - u8 filler6[3]; + u8 var_6; + u8 var_7; + u8 var_8; u8 var_9; - u8 fillerA[0x51F]; + u8 var_A; + u8 var_B; + u8 var_C; + u8 var_D; + u8 var_E; + u8 var_F; + u8 var_10; + u8 badgeCount[8]; + u8 var_19[0xD]; + u8 var_26[0xD]; + u8 var_33[0xD]; + u8 var_40[0xD]; + u8 var_4D[0x46]; + u8 var_93[0x46]; + u8 var_D9[0x8C]; + u8 var_165[0x46]; + u8 var_1AB[0x8C]; + u8 var_237[0x8C]; + u8 var_2C3[0x8C]; + u8 var_34F[0x46]; + u8 var_395[0x46]; + u8 var_3DB[0x46]; + u8 var_421[0x47]; + u16 var_468[0x60]; + s8 var_528; u8 var_529; u8 var_52A; u8 var_52B; u16 var_52C; void (*callback2)(void); - u8 filler531[0x64]; + struct TrainerCard var_534; u8 var_598[0x4B0]; u8 var_A48[0x4B0]; u8 var_EF8[0x4B0]; u8 var_13A8[0x400]; u8 var_17A8[0x200]; - u8 var_19A8[0x200]; + u8 var_19A8[0x2300]; + u8 var_3CA8[0x2000]; + u8 var_5CA8[0x2000]; + u16 var_7CA8; + u8 var_7CAA; }* gUnknown_02039CE8; void sub_80C2690(void) @@ -93,9 +246,9 @@ void sub_80C26D4(void) void sub_80C2710(void) { RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); } void sub_80C2728(u8 taskId) @@ -145,13 +298,13 @@ void sub_80C2760(u8 taskId) gUnknown_02039CE8->var_0++; break; case 7: - if(gWirelessCommType == TRUE && gReceivedRemoteLinkPlayers == TRUE) + if(gWirelessCommType == 1 && gReceivedRemoteLinkPlayers == TRUE) { sub_800E0E8(); CreateWirelessStatusIndicatorSprite(230, 150); } - BlendPalettes(-1, 16, gUnknown_02039CE8->var_52C); - BeginNormalPaletteFade(- 1, 0, 16, 0, gUnknown_02039CE8->var_52C); + BlendPalettes(0xFFFFFFFF, 16, gUnknown_02039CE8->var_52C); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, gUnknown_02039CE8->var_52C); SetVBlankCallback(sub_80C2690); gUnknown_02039CE8->var_0++; break; @@ -185,7 +338,7 @@ void sub_80C2760(u8 taskId) gUnknown_02039CE8->var_0 = 15; else { - BeginNormalPaletteFade(-1, 0, 0, 16, gUnknown_02039CE8->var_52C); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, gUnknown_02039CE8->var_52C); gUnknown_02039CE8->var_0 = 14; } } @@ -204,7 +357,7 @@ void sub_80C2760(u8 taskId) gUnknown_02039CE8->var_0 = 15; else if(gReceivedRemoteLinkPlayers) { - BeginNormalPaletteFade(-1, 0, 0, 16, gUnknown_02039CE8->var_52C); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, gUnknown_02039CE8->var_52C); gUnknown_02039CE8->var_0 = 14; } else @@ -220,7 +373,7 @@ void sub_80C2760(u8 taskId) gUnknown_02039CE8->var_0 = 15; else { - BeginNormalPaletteFade(-1, 0, 0, 16, gUnknown_02039CE8->var_52C); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, gUnknown_02039CE8->var_52C); gUnknown_02039CE8->var_0 = 14; } } @@ -235,7 +388,7 @@ void sub_80C2760(u8 taskId) case 16: if(!gReceivedRemoteLinkPlayers) { - BeginNormalPaletteFade(-1, 0, 0, 16, gUnknown_02039CE8->var_52C); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, gUnknown_02039CE8->var_52C); gUnknown_02039CE8->var_0 = 14; } break; @@ -249,7 +402,6 @@ void sub_80C2760(u8 taskId) gUnknown_02039CE8->var_0 = 10; PlaySE(SE_RG_CARD3); } - break; } } @@ -303,9 +455,1447 @@ bool8 sub_80C2AD8(void) break; default: gUnknown_02039CE8->var_2 = 0; - return 1; + return TRUE; } gUnknown_02039CE8->var_2++; + return FALSE; +} + +NAKED +void sub_80C2C80(void) //not really a nonmatching, skipped it because of DMA macros +{ + asm("\n\ + .syntax unified\n\ + push {lr}\n\ + sub sp, 0x8\n\ + ldr r1, =gMain\n\ + movs r2, 0x87\n\ + lsls r2, 3\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + adds r3, r1, 0\n\ + cmp r0, 0xA\n\ + bls _080C2C96\n\ + b _080C2DD8\n\ +_080C2C96:\n\ + lsls r0, 2\n\ + ldr r1, =_080C2CA8\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .pool\n\ + .align 2, 0\n\ +_080C2CA8:\n\ + .4byte _080C2CD4\n\ + .4byte _080C2CEC\n\ + .4byte _080C2D14\n\ + .4byte _080C2D50\n\ + .4byte _080C2D6A\n\ + .4byte _080C2D74\n\ + .4byte _080C2D88\n\ + .4byte _080C2D8E\n\ + .4byte _080C2DA0\n\ + .4byte _080C2DA6\n\ + .4byte _080C2DB8\n\ +_080C2CD4:\n\ + bl sub_80C334C\n\ + bl sub_80C3414\n\ + ldr r1, =gMain\n\ + movs r0, 0x87\n\ + lsls r0, 3\n\ + adds r1, r0\n\ + b _080C2DCC\n\ + .pool\n\ +_080C2CEC:\n\ + movs r1, 0xE0\n\ + lsls r1, 19\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + ldr r0, =0x040000d4\n\ + mov r2, sp\n\ + str r2, [r0]\n\ + str r1, [r0, 0x4]\n\ + ldr r1, =0x85000100\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ + movs r0, 0x87\n\ + lsls r0, 3\n\ + adds r1, r3, r0\n\ + b _080C2DCC\n\ + .pool\n\ +_080C2D14:\n\ + ldr r0, =gUnknown_02039CE8\n\ + ldr r0, [r0]\n\ + ldr r1, =0x0000052c\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + bne _080C2D36\n\ + movs r2, 0xA0\n\ + lsls r2, 19\n\ + add r1, sp, 0x4\n\ + strh r0, [r1]\n\ + ldr r0, =0x040000d4\n\ + str r1, [r0]\n\ + str r2, [r0, 0x4]\n\ + ldr r1, =0x81000200\n\ + str r1, [r0, 0x8]\n\ + ldr r0, [r0, 0x8]\n\ +_080C2D36:\n\ + movs r2, 0x87\n\ + lsls r2, 3\n\ + adds r1, r3, r2\n\ + b _080C2DCC\n\ + .pool\n\ +_080C2D50:\n\ + bl ResetSpriteData\n\ + bl FreeAllSpritePalettes\n\ + bl ResetPaletteFade\n\ + ldr r1, =gMain\n\ + movs r0, 0x87\n\ + lsls r0, 3\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ +_080C2D6A:\n\ + bl sub_80C3388\n\ + b _080C2DC4\n\ + .pool\n\ +_080C2D74:\n\ + bl sub_80C41D8\n\ + ldr r1, =gMain\n\ + movs r0, 0x87\n\ + lsls r0, 3\n\ + adds r1, r0\n\ + b _080C2DCC\n\ + .pool\n\ +_080C2D88:\n\ + bl sub_80C2AD8\n\ + b _080C2DBC\n\ +_080C2D8E:\n\ + bl sub_80C4330\n\ + ldr r1, =gMain\n\ + movs r0, 0x87\n\ + lsls r0, 3\n\ + adds r1, r0\n\ + b _080C2DCC\n\ + .pool\n\ +_080C2DA0:\n\ + bl sub_80C3278\n\ + b _080C2DC4\n\ +_080C2DA6:\n\ + bl sub_80C3548\n\ + ldr r1, =gMain\n\ + movs r0, 0x87\n\ + lsls r0, 3\n\ + adds r1, r0\n\ + b _080C2DCC\n\ + .pool\n\ +_080C2DB8:\n\ + bl sub_80C43A8\n\ +_080C2DBC:\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bne _080C2DDC\n\ +_080C2DC4:\n\ + ldr r1, =gMain\n\ + movs r2, 0x87\n\ + lsls r2, 3\n\ + adds r1, r2\n\ +_080C2DCC:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + b _080C2DDC\n\ + .pool\n\ +_080C2DD8:\n\ + bl sub_80C3404\n\ +_080C2DDC:\n\ + add sp, 0x8\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); +} + +u32 sav12_xor_get_clamped_above(u8 stat, u32 max) +{ + u32 retStat = GetGameStat(stat); + return (retStat > max) ? max : retStat; +} + +bool8 sub_80C2DFC(void) +{ + u8 i; + for(i = 0; i <= 6; i++) + { + if(!FlagGet(FLAG_SYS_TOWER_SILVER + 2 * i) || !FlagGet(FLAG_SYS_TOWER_GOLD + 2 * i)) + return FALSE; + } + return TRUE; +} + +u32 sub_80C2E40(void) +{ + u32 stat = GetGameStat(GAME_STAT_ENTERED_HOF); + u8 r4 = (stat | -stat) >> 31; + + if(sub_80C08E4()) + r4++; + if(sub_80F8940() > 4) + r4++; + if(sub_80C2DFC()) + r4++; + return r4; +} + +u8 TrainerCard_GetStarCount(struct TrainerCard *trainerCard) +{ + u8 value = 0; + + if (trainerCard->firstHallOfFameA || trainerCard->firstHallOfFameB || trainerCard->firstHallOfFameC) + value++; + if (trainerCard->var_3) + value++; + if (trainerCard->battleTowerLosses > 49) + value++; + if (trainerCard->var_4) + value++; + + return value; +} + +void sub_80C2EC4(struct TrainerCard *trainerCard, u8 arg1) +{ + u32 playTime; + bool32 enteredHallOfFame; + u8 i; + + trainerCard->gender = gSaveBlock2Ptr->playerGender; + trainerCard->playTimeHours = gSaveBlock2Ptr->playTimeHours; + trainerCard->playTimeMinutes = gSaveBlock2Ptr->playTimeMinutes; + + playTime = GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME); + enteredHallOfFame = GetGameStat(GAME_STAT_ENTERED_HOF); + if (!enteredHallOfFame) + playTime = 0; + + trainerCard->firstHallOfFameA = playTime >> 16; + trainerCard->firstHallOfFameB = (playTime >> 8) & 0xFF; + trainerCard->firstHallOfFameC = playTime & 0xFF; + if((playTime >> 16) > 999) + { + trainerCard->firstHallOfFameA = 999; + trainerCard->firstHallOfFameB = 59; + trainerCard->firstHallOfFameC = 59; + } + + trainerCard->hasPokedex = FlagGet(FLAG_SYS_POKEDEX_GET); + trainerCard->var_3 = sub_80C08E4(); + trainerCard->pokedexCaught = sub_80C376C(); + + trainerCard->trainerId = (gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0]; + + trainerCard->linkBattleWins = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_WINS, 9999); + trainerCard->linkBattleLosses = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_LOSSES, 9999); + + trainerCard->pokemonTrades = sav12_xor_get_clamped_above(GAME_STAT_POKEMON_TRADES, 0xFFFF); + + trainerCard->money = GetMoney(&gSaveBlock1Ptr->money); + + for (i = 0; i < 4; i++) + trainerCard->var_28[i] = gSaveBlock1Ptr->unk2BB0[i]; + + StringCopy(trainerCard->playerName, gSaveBlock2Ptr->playerName); + + switch(arg1) + { + case 2: + trainerCard->battleTowerWins = 0; + trainerCard->battleTowerLosses = 0; + case 0: + trainerCard->contestsWithFriends = sav12_xor_get_clamped_above(GAME_STAT_WON_LINK_CONTEST, 999); + trainerCard->pokeblocksWithFriends = sav12_xor_get_clamped_above(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF); + if(sub_80F8940() > 4) + trainerCard->var_4 = TRUE; + trainerCard->stars = TrainerCard_GetStarCount(trainerCard); + break; + case 1: + trainerCard->battleTowerWins = 0; + trainerCard->battleTowerLosses = 0; + trainerCard->contestsWithFriends = 0; + trainerCard->pokeblocksWithFriends = 0; + trainerCard->var_4 = 0; + trainerCard->stars = 0; + } +} + +#ifdef NONMATCHING //r0 and r1 swapped +void sub_80C3020(struct TrainerCard *trainerCard) +{ + memset(trainerCard, 0, sizeof(struct TrainerCard)); + trainerCard->var_38 = 3; + sub_80C2EC4(trainerCard, 2); + trainerCard->var_60 = sub_80C2DFC(); + trainerCard->var_62 = gSaveBlock2Ptr->frontier.field_EBA; + if(trainerCard->var_60) + trainerCard->stars++; + if(trainerCard->gender == FEMALE) + trainerCard->var_4F = gUnknown_08329D54[(trainerCard->trainerId & 7) + 8]; + else + trainerCard->var_4F = gUnknown_08329D54[trainerCard->trainerId & 7]; +} +#else +NAKED +void sub_80C3020(struct TrainerCard *trainerCard) +{ + asm("\n\ + .syntax unified\n\ + push {r4,lr}\n\ + adds r4, r0, 0\n\ + movs r1, 0\n\ + movs r2, 0x64\n\ + bl memset\n\ + adds r1, r4, 0\n\ + adds r1, 0x38\n\ + movs r0, 0x3\n\ + strb r0, [r1]\n\ + adds r0, r4, 0\n\ + movs r1, 0x2\n\ + bl sub_80C2EC4\n\ + bl sub_80C2DFC\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r1, r4, 0\n\ + adds r1, 0x60\n\ + strh r0, [r1]\n\ + ldr r0, =gSaveBlock2Ptr\n\ + ldr r0, [r0]\n\ + ldr r2, =0x00000eba\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + adds r2, r4, 0\n\ + adds r2, 0x62\n\ + strh r0, [r2]\n\ + ldrh r0, [r1]\n\ + cmp r0, 0\n\ + beq _080C3066\n\ + ldrb r0, [r4, 0x1]\n\ + adds r0, 0x1\n\ + strb r0, [r4, 0x1]\n\ +_080C3066:\n\ + ldrb r0, [r4]\n\ + cmp r0, 0x1\n\ + bne _080C3084\n\ + ldr r2, =gUnknown_08329D54\n\ + ldrh r0, [r4, 0xE]\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ + adds r0, 0x8\n\ + b _080C308C\n\ + .pool\n\ +_080C3084:\n\ + ldr r2, =gUnknown_08329D54\n\ + ldrh r0, [r4, 0xE]\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ +_080C308C:\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldrh r1, [r0]\n\ + adds r0, r4, 0\n\ + adds r0, 0x4F\n\ + strb r1, [r0]\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + .syntax divided"); +} +#endif // NONMATCHING + +#ifdef NONMATCHING //r0 and r1 swapped +void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) +{ + u8 temp; + memset(trainerCard, 0, 0x60); + trainerCard->var_38 = 3; + sub_80C2EC4(trainerCard, 2); + temp = sub_80C2DFC(); + trainerCard->var_3A = temp; + *((u16*)&trainerCard->var_3C) = gSaveBlock2Ptr->frontier.field_EBA; + if(temp) + trainerCard->stars++; + if(trainerCard->gender == FEMALE) + trainerCard->var_4F = gUnknown_08329D54[(trainerCard->trainerId & 7) + 8]; + else + trainerCard->var_4F = gUnknown_08329D54[trainerCard->trainerId & 7]; +} +#else +NAKED +void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) +{ + asm("\n\ + .syntax unified\n\ + push {r4,lr}\n\ + adds r4, r0, 0\n\ + movs r1, 0\n\ + movs r2, 0x60\n\ + bl memset\n\ + adds r1, r4, 0\n\ + adds r1, 0x38\n\ + movs r0, 0x3\n\ + strb r0, [r1]\n\ + adds r0, r4, 0\n\ + movs r1, 0x2\n\ + bl sub_80C2EC4\n\ + bl sub_80C2DFC\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r4, 0x3A]\n\ + ldr r1, =gSaveBlock2Ptr\n\ + ldr r1, [r1]\n\ + ldr r2, =0x00000eba\n\ + adds r1, r2\n\ + ldrh r1, [r1]\n\ + strh r1, [r4, 0x3C]\n\ + cmp r0, 0\n\ + beq _080C30E0\n\ + ldrb r0, [r4, 0x1]\n\ + adds r0, 0x1\n\ + strb r0, [r4, 0x1]\n\ +_080C30E0:\n\ + ldrb r0, [r4]\n\ + cmp r0, 0x1\n\ + bne _080C3100\n\ + ldr r2, =gUnknown_08329D54\n\ + ldrh r0, [r4, 0xE]\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ + adds r0, 0x8\n\ + b _080C3108\n\ + .pool\n\ +_080C3100:\n\ + ldr r2, =gUnknown_08329D54\n\ + ldrh r0, [r4, 0xE]\n\ + movs r1, 0x7\n\ + ands r0, r1\n\ +_080C3108:\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldrh r1, [r0]\n\ + adds r0, r4, 0\n\ + adds r0, 0x4F\n\ + strb r1, [r0]\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + .syntax divided"); +} +#endif // NONMATCHING + +void sub_80C3120(struct TrainerCard *trainerCard, u16 *src, u8 gameVersion) +{ + memset(trainerCard, 0, sizeof(struct TrainerCard)); + trainerCard->var_38 = gameVersion; + switch(sub_80C4FCC(gameVersion)) + { + case 0: + memcpy(trainerCard, src, 0x60); + break; + case 1: + memcpy(trainerCard, src, 0x38); + break; + case 2: + memcpy(trainerCard, src, 0x60); + trainerCard->var_3C = 0; + trainerCard->var_60 = src[29]; + trainerCard->var_62 = src[30]; + } +} + +void sub_80C3190(void) +{ + u8 i; + u32 badgeFlag; + + gUnknown_02039CE8->var_A = 0; + gUnknown_02039CE8->var_B = 0; + gUnknown_02039CE8->var_C = 0; + gUnknown_02039CE8->var_D = 0; + gUnknown_02039CE8->var_E = 0; + gUnknown_02039CE8->var_F = 0; + gUnknown_02039CE8->var_10 = 0; + memset(gUnknown_02039CE8->badgeCount, 0, 8); + if(gUnknown_02039CE8->var_534.hasPokedex) + gUnknown_02039CE8->var_A++; + + if(gUnknown_02039CE8->var_534.firstHallOfFameA + ||gUnknown_02039CE8->var_534.firstHallOfFameB + ||gUnknown_02039CE8->var_534.firstHallOfFameC) + gUnknown_02039CE8->var_B++; + + if(gUnknown_02039CE8->var_534.linkBattleWins || gUnknown_02039CE8->var_534.linkBattleLosses) + gUnknown_02039CE8->var_C++; + if(gUnknown_02039CE8->var_534.pokemonTrades) + gUnknown_02039CE8->var_10++; + if(gUnknown_02039CE8->var_534.battleTowerWins || gUnknown_02039CE8->var_534.battleTowerLosses) + gUnknown_02039CE8->var_D++; + + i = 0; + badgeFlag = FLAG_BADGE01_GET; + while (1) + { + if(FlagGet(badgeFlag)) + gUnknown_02039CE8->badgeCount[i]++; + badgeFlag++; + i++; + if (badgeFlag > FLAG_BADGE08_GET) + break; + } +} + +void sub_80C3278(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_DARKEN); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ); + SetGpuReg(REG_OFFSET_WIN0V, 160); + SetGpuReg(REG_OFFSET_WIN0H, 240); + if(gReceivedRemoteLinkPlayers) + EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); + else + EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); +} + +void sub_80C32EC(u16 arg0) +{ + u8 quotient = (arg0 + 40) / 10; + + if((s8)quotient <= 4) + quotient = 0; + gUnknown_02039CE8->var_528 = quotient; + SetGpuReg(REG_OFFSET_BLDY, gUnknown_02039CE8->var_528); + SetGpuReg(REG_OFFSET_WIN0V, (gUnknown_02039CE8->var_7CA8 * 256) | (160 - gUnknown_02039CE8->var_7CA8)); +} + +void sub_80C334C(void) +{ + SetVBlankCallback(NULL); + SetHBlankCallback(NULL); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + SetGpuReg(REG_OFFSET_BG0CNT, 0); + SetGpuReg(REG_OFFSET_BG1CNT, 0); + SetGpuReg(REG_OFFSET_BG2CNT, 0); + SetGpuReg(REG_OFFSET_BG3CNT, 0); +} + +void sub_80C3388(void) +{ + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_0856FAB4, ARRAY_COUNT(gUnknown_0856FAB4)); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + InitWindows(gUnknown_0856FAC4); + DeactivateAllTextPrinters(); + sub_81973A4(); +} + +void sub_80C3404(void) +{ + SetMainCallback2(sub_80C2710); +} + +void sub_80C3414(void) +{ + ResetTasks(); + ScanlineEffect_Stop(); + CreateTask(sub_80C2760, 0); + sub_80C4EE4(); + sub_80C3190(); +} + +bool8 sub_80C3438(void) +{ + switch(gUnknown_02039CE8->var_1) + { + case 0: + sub_80C3574(); + break; + case 1: + sub_80C3608(); + break; + case 2: + sub_80C3684(); + break; + case 3: + sub_80C378C(); + break; + case 4: + sub_80C3880(); + break; + case 5: + sub_80C3A18(); + break; + default: + gUnknown_02039CE8->var_1 = 0; + return TRUE; + } + gUnknown_02039CE8->var_1++; + return FALSE; +} + +bool8 sub_80C34B0(void) +{ + switch(gUnknown_02039CE8->var_1) + { + case 0: + sub_80C3B50(); + break; + case 1: + sub_80C3CCC(); + break; + case 2: + sub_80C3D60(); + break; + case 3: + sub_80C3DF0(); + break; + case 4: + sub_80C3E58(); + sub_80C3F64(); + break; + case 5: + sub_80C3ED4(); + sub_80C3FE0(); + break; + case 6: + sub_80C4140(); + sub_80C40CC(); + break; + case 7: + sub_80C42A4(); + break; + default: + gUnknown_02039CE8->var_1 = 0; + return TRUE; + } + gUnknown_02039CE8->var_1++; + return FALSE; +} + +void sub_80C3548(void) +{ + sub_80C3AF0(); + sub_80C3BC4(); + sub_80C3CF4(); + sub_80C3DC0(); + sub_80C3E20(); + sub_80C3E98(); + sub_80C3F14(); + sub_80C3FA4(); + sub_80C4020(); +} + +void sub_80C3574(void) +{ + u8 buffer[32]; + u8* txtPtr; + txtPtr = StringCopy(buffer, gText_TrainerCardName); + StringCopy(txtPtr, gUnknown_02039CE8->var_534.playerName); + ConvertInternationalString(txtPtr, gUnknown_02039CE8->var_7CAA); + if(!gUnknown_02039CE8->var_52A) + AddTextPrinterParameterized3(1, 1, 20, 28, gUnknown_0856FB0C, -1, buffer); + else + AddTextPrinterParameterized3(1, 1, 16, 33, gUnknown_0856FB0C, -1, buffer); +} + +void sub_80C3608(void) +{ + u8 buffer[32]; + u8* txtPtr; + s32 xPos; + u32 top; + txtPtr = StringCopy(buffer, gText_TrainerCardIDNo); + ConvertIntToDecimalStringN(txtPtr, gUnknown_02039CE8->var_534.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); + if(!gUnknown_02039CE8->var_52A) + { + xPos = GetStringCenterAlignXOffset(1, buffer, 80) + 132; + top = 9; + } + else + { + xPos = GetStringCenterAlignXOffset(1, buffer, 96) + 120; + top = 9; + } + + AddTextPrinterParameterized3(1, 1, xPos, top, gUnknown_0856FB0C, -1, buffer); +} + +void sub_80C3684(void) +{ + s32 xOffset; + u8 top; + if(!gUnknown_02039CE8->var_52B) + AddTextPrinterParameterized3(1, 1, 20, 56, gUnknown_0856FB0C, -1, gText_TrainerCardMoney); + else + AddTextPrinterParameterized3(1, 1, 16, 57, gUnknown_0856FB0C, -1, gText_TrainerCardMoney); + ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.money, 0, 6); + StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); + if(!gUnknown_02039CE8->var_52B) + { + xOffset = GetStringRightAlignXOffset(1, gStringVar4, 144); + top = 56; + } + else + { + xOffset = GetStringRightAlignXOffset(1, gStringVar4, 128); + top = 57; + } + AddTextPrinterParameterized3(1, 1, xOffset, top, gUnknown_0856FB0C, -1, gStringVar4); +} + +u16 sub_80C376C(void) +{ + if(IsNationalPokedexEnabled()) + return GetNationalPokedexCount(FLAG_GET_CAUGHT); + + return GetHoennPokedexCount(FLAG_GET_CAUGHT); +} + +void sub_80C378C(void) +{ + s32 xOffset; + u8 top; + if(FlagGet(FLAG_SYS_POKEDEX_GET)) + { + if(!gUnknown_02039CE8->var_52B) + AddTextPrinterParameterized3(1, 1, 20, 72, gUnknown_0856FB0C, -1, gText_TrainerCardPokedex); + else + AddTextPrinterParameterized3(1, 1, 16, 73, gUnknown_0856FB0C, -1,gText_TrainerCardPokedex); + StringCopy(ConvertIntToDecimalStringN(gStringVar4, gUnknown_02039CE8->var_534.pokedexCaught, 0, 3), gText_EmptyString6); + if(!gUnknown_02039CE8->var_52B) + { + xOffset = GetStringRightAlignXOffset(1, gStringVar4, 144); + top = 72; + } + else + { + xOffset = GetStringRightAlignXOffset(1, gStringVar4, 128); + top = 73; + } + AddTextPrinterParameterized3(1, 1, xOffset, top, gUnknown_0856FB0C, -1, gStringVar4); + } +} + +void sub_80C3880(void) +{ + u16 hours; + u16 minutes; + s32 width; + u32 r7, r4, r10; + if(!gUnknown_02039CE8->var_52B) + AddTextPrinterParameterized3(1, 1, 20, 88, gUnknown_0856FB0C, -1, gText_TrainerCardTime); + else + AddTextPrinterParameterized3(1, 1, 16, 89, gUnknown_0856FB0C, -1, gText_TrainerCardTime); + if(gUnknown_02039CE8->var_5) + { + hours = gUnknown_02039CE8->var_534.playTimeHours; + minutes = gUnknown_02039CE8->var_534.playTimeMinutes; + } + else + { + hours = gSaveBlock2Ptr->playTimeHours; + minutes = gSaveBlock2Ptr->playTimeMinutes; + } + if(hours > 999) + hours = 999; + if(minutes > 59) + minutes = 59; + width = GetStringWidth(1, gText_Colon2, 0); + + if(!gUnknown_02039CE8->var_52B) + { + r7 = 144; + r4 = 88; + } + else + { + r7 = 128; + r4 = 89; + } + r10 = width + 30; + r7 -= r10; + + FillWindowPixelRect(1, 0, r7, r4, r10, 15); + ConvertIntToDecimalStringN(gStringVar4, hours, 1, 3); + AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, -1, gStringVar4); + r7 += 18; + AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB40[gUnknown_02039CE8->var_7], -1, gText_Colon2); + r7 += width; + ConvertIntToDecimalStringN(gStringVar4, minutes, 2, 2); + AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, -1, gStringVar4); +} + +void sub_80C3A18(void) +{ + if(gUnknown_02039CE8->var_5) + { + AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB48[gUnknown_02039CE8->var_52B], gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_19); + AddTextPrinterParameterized3(1, 1, GetStringWidth(1, gUnknown_02039CE8->var_19, 0) + 14, gUnknown_0856FB48[gUnknown_02039CE8->var_52B], gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_26); + AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB4A[gUnknown_02039CE8->var_52B], gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_33); + AddTextPrinterParameterized3(1, 1, GetStringWidth(1, gUnknown_02039CE8->var_33, 0) + 14, gUnknown_0856FB4A[gUnknown_02039CE8->var_52B], gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_40); + } +} + +void sub_80C3AF0(void) +{ + StringCopy(gUnknown_02039CE8->var_4D, gUnknown_02039CE8->var_534.playerName); + ConvertInternationalString(gUnknown_02039CE8->var_4D, gUnknown_02039CE8->var_7CAA); + if(gUnknown_02039CE8->var_52A) + { + StringCopy(gStringVar1, gUnknown_02039CE8->var_4D); + StringExpandPlaceholders(gUnknown_02039CE8->var_4D, gText_Var1sTrainerCard); + } +} + +void sub_80C3B50(void) +{ + if(!gUnknown_02039CE8->var_52B) + AddTextPrinterParameterized3(1, 1, 136, 9, gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_4D); + else + AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, gUnknown_02039CE8->var_4D, 216), 9, gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_4D); +} + +void sub_80C3BC4(void) +{ + if(gUnknown_02039CE8->var_B) + { + ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.firstHallOfFameA, 1, 3); + ConvertIntToDecimalStringN(gStringVar2, gUnknown_02039CE8->var_534.firstHallOfFameB, 2, 2); + ConvertIntToDecimalStringN(gStringVar3, gUnknown_02039CE8->var_534.firstHallOfFameC, 2, 2); + StringExpandPlaceholders(gUnknown_02039CE8->var_93, gUnknown_0856FB4C); + } +} + +void sub_80C3C34(u8 top, const u8* str1, u8* str2, const u8* color) +{ + AddTextPrinterParameterized3(1, 1, gUnknown_0856FB55[gUnknown_02039CE8->var_52B], top * 16 + 33, gUnknown_0856FB0C, -1, str1); + AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, str2, gUnknown_0856FB57[gUnknown_02039CE8->var_52B]), top * 16 + 33, color, -1, str2); +} + +void sub_80C3CCC(void) +{ + if(gUnknown_02039CE8->var_B) + sub_80C3C34(0, gText_HallOfFameDebut, gUnknown_02039CE8->var_93, gUnknown_0856FB0F); +} + +void sub_80C3CF4(void) +{ + if(gUnknown_02039CE8->var_C) + { + StringCopy(gUnknown_02039CE8->var_D9, gUnknown_0856FB5C[gUnknown_02039CE8->var_52A]); + ConvertIntToDecimalStringN(gUnknown_02039CE8->var_165, gUnknown_02039CE8->var_534.linkBattleWins, 0, 4); + ConvertIntToDecimalStringN(gUnknown_02039CE8->var_1AB, gUnknown_02039CE8->var_534.linkBattleLosses, 0, 4); + } +} + +void sub_80C3D60(void) +{ + if(gUnknown_02039CE8->var_C) + { + StringCopy(gStringVar1, gUnknown_02039CE8->var_165); + StringCopy(gStringVar2, gUnknown_02039CE8->var_1AB); + StringExpandPlaceholders(gStringVar4, gText_WinsLosses); + sub_80C3C34(1, gUnknown_02039CE8->var_D9, gStringVar4, gUnknown_0856FB0C); + } +} + +void sub_80C3DC0(void) +{ + if(gUnknown_02039CE8->var_10) + ConvertIntToDecimalStringN(gUnknown_02039CE8->var_237, gUnknown_02039CE8->var_534.pokemonTrades, 1, 5); +} + +void sub_80C3DF0(void) +{ + if(gUnknown_02039CE8->var_10) + sub_80C3C34(2, gText_PokemonTrades, gUnknown_02039CE8->var_237, gUnknown_0856FB0F); +} + +void sub_80C3E20(void) +{ + if(!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_3C) + ConvertIntToDecimalStringN(gUnknown_02039CE8->var_2C3, gUnknown_02039CE8->var_534.var_3C, 1, 5); +} + +void sub_80C3E58(void) +{ + if(!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_3C) + sub_80C3C34(4, gText_BerryCrush, gUnknown_02039CE8->var_2C3, gUnknown_0856FB0F); +} + +void sub_80C3E98(void) +{ + if(!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_40) + ConvertIntToDecimalStringN(gUnknown_02039CE8->var_34F, gUnknown_02039CE8->var_534.var_40, 1, 5); +} + +void sub_80C3ED4(void) +{ + if(!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_40) + sub_80C3C34(3, gText_UnionTradesAndBattles, gUnknown_02039CE8->var_34F, gUnknown_0856FB0F); +} + +void sub_80C3F14(void) +{ + if(gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.pokeblocksWithFriends) + { + ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.pokeblocksWithFriends, 1, 5); + StringExpandPlaceholders(gUnknown_02039CE8->var_395, gText_Var1DarkGreyShadowLightGrey); + } +} + +void sub_80C3F64(void) +{ + if(gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.pokeblocksWithFriends) + sub_80C3C34(3, gText_PokeblocksWithFriends, gUnknown_02039CE8->var_395, gUnknown_0856FB0F); +} + +void sub_80C3FA4(void) +{ + if(gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.contestsWithFriends) + ConvertIntToDecimalStringN(gUnknown_02039CE8->var_3DB, gUnknown_02039CE8->var_534.contestsWithFriends, 1, 5); +} + +void sub_80C3FE0(void) +{ + if(gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.contestsWithFriends) + sub_80C3C34(4, gText_WonContestsWFriends, gUnknown_02039CE8->var_3DB, gUnknown_0856FB0F); +} + +void sub_80C4020(void) +{ + switch(gUnknown_02039CE8->var_52A) + { + case 1: + if(gUnknown_02039CE8->var_D) + { + ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.battleTowerWins, 1, 4); + ConvertIntToDecimalStringN(gStringVar2, gUnknown_02039CE8->var_534.battleTowerLosses, 1, 4); + StringExpandPlaceholders(gUnknown_02039CE8->var_421, gText_WSlashStraightSlash); + } + break; + + case 2: + if(gUnknown_02039CE8->var_534.var_62) + { + ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.var_62, 1, 5); + StringExpandPlaceholders(gUnknown_02039CE8->var_421, gText_Var1DarkLightGreyBP); + } + case 0: + } +} + +void sub_80C40CC(void) +{ + switch(gUnknown_02039CE8->var_52A) + { + case 1: + if(gUnknown_02039CE8->var_D) + sub_80C3C34(5, gText_BattleTower, gUnknown_02039CE8->var_421, gUnknown_0856FB0C); + break; + case 2: + if(gUnknown_02039CE8->var_534.var_62) + sub_80C3C34(5, gText_BattlePtsWon, gUnknown_02039CE8->var_421, gUnknown_0856FB0F); + case 0: + } +} + +void sub_80C4140(void) +{ + u8 i; + u8 buffer[8]; + u8 buffer2[8]; + memcpy(buffer, gUnknown_0856FB68, sizeof(gUnknown_0856FB68)); + memcpy(buffer2, gUnknown_0856FB6E, sizeof(gUnknown_0856FB6E)); + + if(!gUnknown_02039CE8->var_52A) + { + for(i = 0; i < 6; i++) + { + if(gUnknown_02039CE8->var_534.monSpecies[i]) + { + u8 monSpecies = sub_80D30A0(gUnknown_02039CE8->var_534.monSpecies[i]); + WriteSequenceToBgTilemapBuffer(3, 16 * i + 224, buffer2[i] + 3, 15, 4, 4, buffer[monSpecies], 1); + } + } + } +} + +void sub_80C41D8(void) +{ + u8 i; + CpuSet(gMonIconPalettes, gUnknown_02039CE8->var_468, 0x60); + switch(gUnknown_02039CE8->var_534.var_4E) + { + case 1: + TintPalette_CustomTone(gUnknown_02039CE8->var_468, 96, 0, 0, 0); + break; + case 2: + TintPalette_CustomTone(gUnknown_02039CE8->var_468, 96, 500, 330, 310); + break; + case 3: + TintPalette_SepiaTone(gUnknown_02039CE8->var_468, 96); + case 0: + } + LoadPalette(gUnknown_02039CE8->var_468, 80, 192); + + for(i = 0; i < 6; i++) + { + if(gUnknown_02039CE8->var_534.monSpecies[i]) + LoadBgTiles(3, GetMonIconTiles(gUnknown_02039CE8->var_534.monSpecies[i], 0), 512, 16 * i + 32); + } +} + +void sub_80C42A4(void) +{ + u8 i; + u8 buffer[4]; + memcpy(buffer, gUnknown_0856FB74, sizeof(gUnknown_0856FB74)); + if(!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_4C == 1) + { + for(i = 0; i < 3; i++) + { + u8 var_50 = gUnknown_02039CE8->var_534.var_50[i]; + if(gUnknown_02039CE8->var_534.var_50[i]) + WriteSequenceToBgTilemapBuffer(3, i * 4 + 320, i * 3 + 2, 2, 2, 2, buffer[var_50 - 1], 1); + } + } +} + +void sub_80C4330(void) +{ + LoadPalette(gUnknown_0856F54C, 176, 32); + LoadPalette(gUnknown_0856F56C, 192, 32); + LoadPalette(gUnknown_0856F58C, 208, 32); + LoadPalette(gUnknown_0856F5AC, 224, 32); + LoadBgTiles(3, gUnknown_02039CE8->var_17A8, 1024, 128); +} + +void sub_80C438C(u8 windowId) +{ + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 3); +} + +u8 sub_80C43A8(void) +{ + switch(gUnknown_02039CE8->var_3) + { + case 0: + LoadBgTiles(3, gUnknown_02039CE8->var_13A8, 1024, 0); + break; + case 1: + LoadBgTiles(0, gUnknown_02039CE8->var_19A8, 6144, 0); + break; + case 2: + if(gUnknown_02039CE8->var_52A) + { + LoadPalette(gEmeraldTrainerCardStarPals[gUnknown_02039CE8->var_534.stars], 0, 96); + LoadPalette(gUnknown_0856F4EC, 48, 32); + if(gUnknown_02039CE8->var_534.gender) + LoadPalette(gUnknown_0856F4AC, 16, 32); + } + else + { + LoadPalette(gFireRedTrainerCardStarPals[gUnknown_02039CE8->var_534.stars], 0, 96); + LoadPalette(gUnknown_0856F50C, 48, 32); + if(gUnknown_02039CE8->var_534.gender) + LoadPalette(gUnknown_0856F4CC, 16, 32); + } + LoadPalette(gUnknown_0856F52C, 64, 32); + break; + case 3: + SetBgTilemapBuffer(0, gUnknown_02039CE8->var_3CA8); + SetBgTilemapBuffer(2, gUnknown_02039CE8->var_5CA8); + break; + case 4: + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); + FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 32, 32); + FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 32, 32); + default: + return 1; + } + gUnknown_02039CE8->var_3++; return 0; } +NAKED +void sub_80C4550(u8* ptr) //nested loop +{ + asm("\n\ + .syntax unified\n\ + push {r4-r7,lr}\n\ + adds r7, r0, 0\n\ + ldr r0, =gUnknown_02039CE8\n\ + ldr r0, [r0]\n\ + ldr r1, =0x00005ca8\n\ + adds r6, r0, r1\n\ + movs r1, 0\n\ +_080C455E:\n\ + movs r2, 0\n\ + lsls r5, r1, 16\n\ + asrs r1, r5, 16\n\ + lsls r3, r1, 5\n\ + lsls r0, r1, 4\n\ + subs r0, r1\n\ + lsls r4, r0, 1\n\ +_080C456C:\n\ + lsls r0, r2, 16\n\ + asrs r1, r0, 16\n\ + adds r2, r0, 0\n\ + cmp r1, 0x1D\n\ + bgt _080C4590\n\ + adds r0, r3, r1\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + adds r1, r4, r1\n\ + lsls r1, 1\n\ + adds r1, r7\n\ + ldrh r1, [r1]\n\ + b _080C4598\n\ + .pool\n\ +_080C4590:\n\ + adds r0, r3, r1\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + ldrh r1, [r7]\n\ +_080C4598:\n\ + strh r1, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 9\n\ + adds r0, r2, r1\n\ + lsrs r2, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x1F\n\ + ble _080C456C\n\ + adds r0, r5, r1\n\ + lsrs r1, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x13\n\ + ble _080C455E\n\ + movs r0, 0x2\n\ + bl CopyBgTilemapBufferToVram\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); +} + +NAKED +void sub_80C45C0(u8* ptr) //nested loop +{ + asm("\n\ + .syntax unified\n\ + push {r4-r7,lr}\n\ + adds r7, r0, 0\n\ + ldr r0, =gUnknown_02039CE8\n\ + ldr r0, [r0]\n\ + ldr r1, =0x00003ca8\n\ + adds r6, r0, r1\n\ + movs r1, 0\n\ +_080C45CE:\n\ + movs r2, 0\n\ + lsls r5, r1, 16\n\ + asrs r1, r5, 16\n\ + lsls r3, r1, 5\n\ + lsls r0, r1, 4\n\ + subs r0, r1\n\ + lsls r4, r0, 1\n\ +_080C45DC:\n\ + lsls r0, r2, 16\n\ + asrs r1, r0, 16\n\ + adds r2, r0, 0\n\ + cmp r1, 0x1D\n\ + bgt _080C4600\n\ + adds r0, r3, r1\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + adds r1, r4, r1\n\ + lsls r1, 1\n\ + adds r1, r7\n\ + ldrh r1, [r1]\n\ + b _080C4608\n\ + .pool\n\ +_080C4600:\n\ + adds r0, r3, r1\n\ + lsls r0, 1\n\ + adds r0, r6\n\ + ldrh r1, [r7]\n\ +_080C4608:\n\ + strh r1, [r0]\n\ + movs r1, 0x80\n\ + lsls r1, 9\n\ + adds r0, r2, r1\n\ + lsrs r2, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x1F\n\ + ble _080C45DC\n\ + adds r0, r5, r1\n\ + lsrs r1, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x13\n\ + ble _080C45CE\n\ + movs r0, 0\n\ + bl CopyBgTilemapBufferToVram\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided"); +} + +NAKED +void sub_80C4630(void) +{ + asm("\n\ + .syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0xC\n\ + movs r0, 0xC0\n\ + mov r8, r0\n\ + movs r2, 0x3\n\ + mov r10, r2\n\ + ldr r2, =gUnknown_0856FB78\n\ + ldr r4, =gUnknown_02039CE8\n\ + ldr r1, [r4]\n\ + ldr r3, =0x0000052b\n\ + adds r0, r1, r3\n\ + ldrb r0, [r0]\n\ + adds r0, r2\n\ + ldrb r3, [r0]\n\ + ldr r0, =0x00000535\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + str r0, [sp]\n\ + movs r0, 0x1\n\ + str r0, [sp, 0x4]\n\ + movs r0, 0x4\n\ + str r0, [sp, 0x8]\n\ + movs r0, 0x3\n\ + movs r1, 0x8F\n\ + movs r2, 0xF\n\ + bl FillBgTilemapBufferRect\n\ + ldr r0, [r4]\n\ + ldrb r0, [r0, 0x5]\n\ + cmp r0, 0\n\ + bne _080C4724\n\ + movs r2, 0x4\n\ + mov r9, r2\n\ + movs r2, 0\n\ + movs r6, 0x1\n\ +_080C467E:\n\ + ldr r0, =gUnknown_02039CE8\n\ + ldr r1, [r0]\n\ + lsls r0, r2, 16\n\ + asrs r7, r0, 16\n\ + adds r1, 0x11\n\ + adds r1, r7\n\ + ldrb r0, [r1]\n\ + cmp r0, 0\n\ + beq _080C4700\n\ + mov r3, r9\n\ + lsls r5, r3, 24\n\ + lsrs r5, 24\n\ + str r6, [sp]\n\ + str r6, [sp, 0x4]\n\ + mov r0, r10\n\ + str r0, [sp, 0x8]\n\ + movs r0, 0x3\n\ + mov r1, r8\n\ + adds r2, r5, 0\n\ + movs r3, 0xF\n\ + bl FillBgTilemapBufferRect\n\ + mov r1, r8\n\ + adds r1, 0x1\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + mov r4, r9\n\ + adds r4, 0x1\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + str r6, [sp]\n\ + str r6, [sp, 0x4]\n\ + mov r2, r10\n\ + str r2, [sp, 0x8]\n\ + movs r0, 0x3\n\ + adds r2, r4, 0\n\ + movs r3, 0xF\n\ + bl FillBgTilemapBufferRect\n\ + mov r1, r8\n\ + adds r1, 0x10\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + str r6, [sp]\n\ + str r6, [sp, 0x4]\n\ + mov r3, r10\n\ + str r3, [sp, 0x8]\n\ + movs r0, 0x3\n\ + adds r2, r5, 0\n\ + movs r3, 0x10\n\ + bl FillBgTilemapBufferRect\n\ + mov r1, r8\n\ + adds r1, 0x11\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + str r6, [sp]\n\ + str r6, [sp, 0x4]\n\ + mov r0, r10\n\ + str r0, [sp, 0x8]\n\ + movs r0, 0x3\n\ + adds r2, r4, 0\n\ + movs r3, 0x10\n\ + bl FillBgTilemapBufferRect\n\ +_080C4700:\n\ + adds r0, r7, 0x1\n\ + lsls r0, 16\n\ + mov r1, r8\n\ + adds r1, 0x2\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + mov r8, r1\n\ + mov r2, r9\n\ + lsls r1, r2, 16\n\ + movs r3, 0xC0\n\ + lsls r3, 10\n\ + adds r1, r3\n\ + lsrs r1, 16\n\ + mov r9, r1\n\ + lsrs r2, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x7\n\ + ble _080C467E\n\ +_080C4724:\n\ + movs r0, 0x3\n\ + bl CopyBgTilemapBufferToVram\n\ + add sp, 0xC\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + .syntax divided"); +} + +void sub_80C474C(void) +{ + if(!gUnknown_02039CE8->var_52A) + { + if(gUnknown_02039CE8->var_10) + { + FillBgTilemapBufferRect(3, 141, 27, 9, 1, 1, 1); + FillBgTilemapBufferRect(3, 157, 27, 10, 1, 1, 1); + } + if(gUnknown_02039CE8->var_534.var_3C) + { + FillBgTilemapBufferRect(3, 141, 21, 13, 1, 1, 1); + FillBgTilemapBufferRect(3, 157, 21, 14, 1, 1, 1); + } + if(gUnknown_02039CE8->var_534.var_40) + { + FillBgTilemapBufferRect(3, 141, 27, 11, 1, 1, 1); + FillBgTilemapBufferRect(3, 157, 27, 12, 1, 1, 1); + } + } + else + { + if(gUnknown_02039CE8->var_10) + { + FillBgTilemapBufferRect(3, 141, 27, 9, 1, 1, 0); + FillBgTilemapBufferRect(3, 157, 27, 10, 1, 1, 0); + } + if(gUnknown_02039CE8->var_534.contestsWithFriends) + { + FillBgTilemapBufferRect(3, 141, 27, 13, 1, 1, 0); + FillBgTilemapBufferRect(3, 157, 27, 14, 1, 1, 0); + } + if(gUnknown_02039CE8->var_D) + { + FillBgTilemapBufferRect(3, 141, 17, 15, 1, 1, 0); + FillBgTilemapBufferRect(3, 157, 17, 16, 1, 1, 0); + FillBgTilemapBufferRect(3, 140, 27, 15, 1, 1, 0); + FillBgTilemapBufferRect(3, 156, 27, 16, 1, 1, 0); + } + } + CopyBgTilemapBufferToVram(3); +} + +void sub_80C48C8(void) +{ + if(++gUnknown_02039CE8->var_6 > 60) + { + gUnknown_02039CE8->var_6 = 0; + gUnknown_02039CE8->var_7 ^= 1; + gUnknown_02039CE8->var_529 = 1; + } +} + +u8 sub_80C4904(u8 cardId) +{ + struct TrainerCard* trainerCards = gTrainerCards; + return trainerCards[cardId].stars; +} + +void sub_80C4918(void) +{ + u8 taskId = CreateTask(sub_80C4960, 0); + sub_80C4960(taskId); + SetHBlankCallback(sub_80C26D4); +} + +bool8 sub_80C4940(void) +{ + if(FindTaskIdByFunc(sub_80C4960) == 0xFF) + return TRUE; + return FALSE; +} + +void sub_80C4960(u8 taskId) +{ + while(gUnknown_0856FB28[gTasks[taskId].data[0]](&gTasks[taskId])) + ; +} + +bool8 sub_80C4998(struct Task* task) +{ + u32 i; + HideBg(1); + HideBg(3); + ScanlineEffect_Stop(); + ScanlineEffect_Clear(); + for(i = 0; i < 160; i++) + gScanlineEffectRegBuffers[1][i] = 0; + task->data[0]++; + return FALSE; +} -- cgit v1.2.3 From 576d1b3474e9ebec6a16d3ca68378d0f92fb4026 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 19 Jan 2019 23:04:33 +0100 Subject: Document and match somne trainer card --- src/pokedex.c | 106 +-- src/script_pokemon_util_80F87D8.c | 8 +- src/start_menu.c | 9 +- src/trainer_card.c | 1307 +++++++++++++------------------------ 4 files changed, 511 insertions(+), 919 deletions(-) (limited to 'src') diff --git a/src/pokedex.c b/src/pokedex.c index 3d294e9e9..f99a8226a 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -4271,46 +4271,46 @@ s8 GetSetPokedexFlag(u16 nationalDexNo, u8 caseID) retVal = 0; switch (caseID) { - case FLAG_GET_SEEN: - if (gSaveBlock2Ptr->pokedex.seen[index] & mask) + case FLAG_GET_SEEN: + if (gSaveBlock2Ptr->pokedex.seen[index] & mask) + { + if ((gSaveBlock2Ptr->pokedex.seen[index] & mask) == (gSaveBlock1Ptr->seen1[index] & mask) + && (gSaveBlock2Ptr->pokedex.seen[index] & mask) == (gSaveBlock1Ptr->seen2[index] & mask)) + retVal = 1; + else { - if ((gSaveBlock2Ptr->pokedex.seen[index] & mask) == (gSaveBlock1Ptr->seen1[index] & mask) - && (gSaveBlock2Ptr->pokedex.seen[index] & mask) == (gSaveBlock1Ptr->seen2[index] & mask)) - retVal = 1; - else - { - gSaveBlock2Ptr->pokedex.seen[index] &= ~mask; - gSaveBlock1Ptr->seen1[index] &= ~mask; - gSaveBlock1Ptr->seen2[index] &= ~mask; - retVal = 0; - } + gSaveBlock2Ptr->pokedex.seen[index] &= ~mask; + gSaveBlock1Ptr->seen1[index] &= ~mask; + gSaveBlock1Ptr->seen2[index] &= ~mask; + retVal = 0; } - break; - case FLAG_GET_CAUGHT: - if (gSaveBlock2Ptr->pokedex.owned[index] & mask) + } + break; + case FLAG_GET_CAUGHT: + if (gSaveBlock2Ptr->pokedex.owned[index] & mask) + { + if ((gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock2Ptr->pokedex.seen[index] & mask) + && (gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock1Ptr->seen1[index] & mask) + && (gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock1Ptr->seen2[index] & mask)) + retVal = 1; + else { - if ((gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock2Ptr->pokedex.seen[index] & mask) - && (gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock1Ptr->seen1[index] & mask) - && (gSaveBlock2Ptr->pokedex.owned[index] & mask) == (gSaveBlock1Ptr->seen2[index] & mask)) - retVal = 1; - else - { - gSaveBlock2Ptr->pokedex.owned[index] &= ~mask; - gSaveBlock2Ptr->pokedex.seen[index] &= ~mask; - gSaveBlock1Ptr->seen1[index] &= ~mask; - gSaveBlock1Ptr->seen2[index] &= ~mask; - retVal = 0; - } + gSaveBlock2Ptr->pokedex.owned[index] &= ~mask; + gSaveBlock2Ptr->pokedex.seen[index] &= ~mask; + gSaveBlock1Ptr->seen1[index] &= ~mask; + gSaveBlock1Ptr->seen2[index] &= ~mask; + retVal = 0; } - break; - case FLAG_SET_SEEN: - gSaveBlock2Ptr->pokedex.seen[index] |= mask; - gSaveBlock1Ptr->seen1[index] |= mask; - gSaveBlock1Ptr->seen2[index] |= mask; - break; - case FLAG_SET_CAUGHT: - gSaveBlock2Ptr->pokedex.owned[index] |= mask; - break; + } + break; + case FLAG_SET_SEEN: + gSaveBlock2Ptr->pokedex.seen[index] |= mask; + gSaveBlock1Ptr->seen1[index] |= mask; + gSaveBlock1Ptr->seen2[index] |= mask; + break; + case FLAG_SET_CAUGHT: + gSaveBlock2Ptr->pokedex.owned[index] |= mask; + break; } return retVal; } @@ -4324,14 +4324,14 @@ u16 GetNationalPokedexCount(u8 caseID) { switch (caseID) { - case FLAG_GET_SEEN: - if (GetSetPokedexFlag(i + 1, FLAG_GET_SEEN)) - count++; - break; - case FLAG_GET_CAUGHT: - if (GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT)) - count++; - break; + case FLAG_GET_SEEN: + if (GetSetPokedexFlag(i + 1, FLAG_GET_SEEN)) + count++; + break; + case FLAG_GET_CAUGHT: + if (GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT)) + count++; + break; } } return count; @@ -4346,14 +4346,14 @@ u16 GetHoennPokedexCount(u8 caseID) { switch (caseID) { - case FLAG_GET_SEEN: - if (GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_SEEN)) - count++; - break; - case FLAG_GET_CAUGHT: - if (GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_CAUGHT)) - count++; - break; + case FLAG_GET_SEEN: + if (GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_SEEN)) + count++; + break; + case FLAG_GET_CAUGHT: + if (GetSetPokedexFlag(HoennToNationalOrder(i + 1), FLAG_GET_CAUGHT)) + count++; + break; } } return count; @@ -4381,7 +4381,7 @@ u16 sub_80C089C(u8 caseID) return count; } -bool16 sub_80C08E4(void) +bool16 HasAllHoennMons(void) { u16 i; diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c index f3eaa7161..cade00b50 100755 --- a/src/script_pokemon_util_80F87D8.c +++ b/src/script_pokemon_util_80F87D8.c @@ -128,18 +128,18 @@ void sub_80F88E8(void) } } -u8 sub_80F8940(void) +u8 CountPlayerContestPaintings(void) { int i; - u8 var0 = 0; + u8 count = 0; for (i = 0; i < 5; i++) { if (gSaveBlock1Ptr->contestWinners[8 + i].species) - var0++; + count++; } - return var0; + return count; } void sub_80F8970(void) diff --git a/src/start_menu.c b/src/start_menu.c index 0f608b1d2..34d37e995 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -422,16 +422,19 @@ static bool32 PrintStartMenuActions(s8 *pIndex, u32 count) do { - if (sStartMenuItems[sCurrentStartMenuActions[index]].func.u8_void == StartMenuPlayerNameCallback) { + if (sStartMenuItems[sCurrentStartMenuActions[index]].func.u8_void == StartMenuPlayerNameCallback) + { PrintPlayerNameOnWindow(GetStartMenuWindowId(), sStartMenuItems[sCurrentStartMenuActions[index]].text, 8, (index << 4) + 9); } - else { + else + { StringExpandPlaceholders(gStringVar4, sStartMenuItems[sCurrentStartMenuActions[index]].text); AddTextPrinterParameterized(GetStartMenuWindowId(), 1, gStringVar4, 8, (index << 4) + 9, 0xFF, NULL); } index++; - if (index >= sNumStartMenuActions) { + if (index >= sNumStartMenuActions) + { *pIndex = index; return TRUE; } diff --git a/src/trainer_card.c b/src/trainer_card.c index 51ef20ddc..26a78ca08 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -15,6 +15,7 @@ #include "constants/flags.h" #include "event_data.h" #include "constants/game_stat.h" +#include "constants/battle_frontier.h" #include "money.h" #include "string_util.h" #include "trainer_card.h" @@ -23,10 +24,9 @@ #include "pokedex.h" #include "graphics.h" #include "pokemon_icon.h" +#include "script_pokemon_util_80F87D8.h" //external functions -extern u8 sub_80F8940(void); -extern bool16 sub_80C08E4(void); extern u8 sub_80D30A0(u16); extern void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 bTone); extern void TintPalette_SepiaTone(u16 *palette, u16 count); @@ -105,23 +105,23 @@ extern bool8 (*const gUnknown_0856FB28[])(struct Task *); /*static*/ void sub_80C48C8(void); /*static*/ void sub_80C2710(void); /*static*/ void sub_80C2728(u8 task); -/*static*/ bool8 sub_80C3438(void); +/*static*/ bool8 PrintAllOnCardPage1(void); /*static*/ void sub_80C438C(u8); /*static*/ void sub_80C4FF0(void); -/*static*/ void sub_80C4550(u8*); -/*static*/ void sub_80C45C0(u8*); +/*static*/ void sub_80C4550(u16*); +/*static*/ void sub_80C45C0(u16*); /*static*/ void sub_80C4630(void); -/*static*/ void sub_80C3880(void); +/*static*/ void PrintTimeOnCard(void); /*static*/ void sub_80C4918(void); /*static*/ bool8 sub_80C4940(void); /*static*/ bool8 sub_80C2AD8(void); /*static*/ void sub_80C2C80(void); -/*static*/ u32 sav12_xor_get_clamped_above(u8 stat, u32 max); -/*static*/ bool8 sub_80C2DFC(void); +/*static*/ u32 GetCappedGameStat(u8 statId, u32 maxValue); +/*static*/ bool8 HasAllFrontierSymbols(void); /*static*/ u32 sub_80C2E40(void); -/*static*/ u8 TrainerCard_GetStarCount(struct TrainerCard*); -/*static*/ u16 sub_80C376C(void); -/*static*/ void sub_80C2EC4(struct TrainerCard*, u8); +/*static*/ u8 sub_80C2E84(struct TrainerCard*); +/*static*/ u16 GetCaughtMonsCount(void); +/*static*/ void SetPlayerCardData(struct TrainerCard*, u8); /*static*/ void sub_80C3020(struct TrainerCard*); /*static*/ u8 sub_80C4FCC(u8); /*static*/ void sub_80C3190(void); @@ -131,33 +131,33 @@ extern bool8 (*const gUnknown_0856FB28[])(struct Task *); /*static*/ void sub_80C3404(void); /*static*/ void sub_80C3414(void); /*static*/ void sub_80C4EE4(void); -/*static*/ void sub_80C3574(void); -/*static*/ void sub_80C3608(void); -/*static*/ void sub_80C3684(void); -/*static*/ void sub_80C378C(void); -/*static*/ void sub_80C3A18(void); -/*static*/ bool8 sub_80C34B0(void); +/*static*/ void PrintNameOnCard(void); +/*static*/ void PrintIdOnCard(void); +/*static*/ void PrintMoneyOnCard(void); +/*static*/ void PrintPokedexOnCard(void); +/*static*/ void PrintProfilePhraseOnCard(void); +/*static*/ bool8 PrintStringsOnCardPage2(void); /*static*/ void sub_80C3B50(void); -/*static*/ void sub_80C3CCC(void); -/*static*/ void sub_80C3D60(void); -/*static*/ void sub_80C3DF0(void); -/*static*/ void sub_80C3E58(void); -/*static*/ void sub_80C3F64(void); -/*static*/ void sub_80C3ED4(void); -/*static*/ void sub_80C3FE0(void); +/*static*/ void PrintHofDebutStringOnCard(void); +/*static*/ void PrintWinsLossesStringOnCard(void); +/*static*/ void PrintTradesStringOnCard(void); +/*static*/ void PrintBerryCrushStringOnCard(void); +/*static*/ void PrintPokeblockStringOnCard(void); +/*static*/ void PrintUnionStringOnCard(void); +/*static*/ void PrintContestStringOnCard(void); /*static*/ void sub_80C4140(void); -/*static*/ void sub_80C40CC(void); +/*static*/ void PrintBattleFacilityStringOnCard(void); /*static*/ void sub_80C42A4(void); -/*static*/ void sub_80C3548(void); -/*static*/ void sub_80C3AF0(void); -/*static*/ void sub_80C3BC4(void); -/*static*/ void sub_80C3CF4(void); -/*static*/ void sub_80C3DC0(void); -/*static*/ void sub_80C3E20(void); -/*static*/ void sub_80C3E98(void); -/*static*/ void sub_80C3F14(void); -/*static*/ void sub_80C3FA4(void); -/*static*/ void sub_80C4020(void); +/*static*/ void PrintAllVariableNumsOnCardPage2(void); +/*static*/ void PrintNameOnCard2(void); +/*static*/ void PrintHofTimeOnCard(void); +/*static*/ void PrintLinkResultsNumsOnCard(void); +/*static*/ void PrintTradesNumOnCard(void); +/*static*/ void PrintBerryCrushNumOnCard(void); +/*static*/ void PrintUnionNumOnCard(void); +/*static*/ void PrintPokeblocksNumOnCard(void); +/*static*/ void PrintContestNumOnCard(void); +/*static*/ void PrintBattleFacilityNumsOnCard(void); /*static*/ void sub_80C3C34(u8 top, const u8* str1, u8* str2, const u8* color); /*static*/ void sub_80C4330(void); /*static*/ u8 sub_80C43A8(void); @@ -166,8 +166,10 @@ extern bool8 (*const gUnknown_0856FB28[])(struct Task *); /*static*/ bool8 sub_80C4998(struct Task* task); /*static*/ bool8 sub_80C49D8(struct Task* task); /*static*/ void sub_80C32EC(u16); +void sub_80C41D8(void); -extern struct UnknownStruct{ +extern struct UnknownStruct +{ u8 var_0; u8 var_1; u8 var_2; @@ -209,14 +211,14 @@ extern struct UnknownStruct{ u16 var_52C; void (*callback2)(void); struct TrainerCard var_534; - u8 var_598[0x4B0]; + u16 var_598[0x4B0 / 2]; u8 var_A48[0x4B0]; - u8 var_EF8[0x4B0]; + u16 var_EF8[0x4B0 / 2]; u8 var_13A8[0x400]; u8 var_17A8[0x200]; u8 var_19A8[0x2300]; - u8 var_3CA8[0x2000]; - u8 var_5CA8[0x2000]; + u16 var_3CA8[0x2000 / 2]; + u16 var_5CA8[0x2000 / 2]; u16 var_7CA8; u8 var_7CAA; }* gUnknown_02039CE8; @@ -227,7 +229,7 @@ void sub_80C2690(void) ProcessSpriteCopyRequests(); TransferPlttBuffer(); sub_80C48C8(); - if(gUnknown_02039CE8->var_9) + if (gUnknown_02039CE8->var_9) DmaCopy16(3, &gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 0x140); } @@ -235,7 +237,7 @@ void sub_80C26D4(void) { u16 backup; u16 bgVOffset; - + backup = REG_IME; REG_IME = 0; bgVOffset = gScanlineEffectRegBuffers[1][REG_VCOUNT & 0xFF]; @@ -258,21 +260,21 @@ void sub_80C2728(u8 taskId) Free(gUnknown_02039CE8); gUnknown_02039CE8 = NULL; DestroyTask(taskId); -} +} void sub_80C2760(u8 taskId) { - switch(gUnknown_02039CE8->var_0) + switch (gUnknown_02039CE8->var_0) { - case 0: - if(!IsDma3ManagerBusyWithBgCopy()) + case 0: + if (!IsDma3ManagerBusyWithBgCopy()) { FillWindowPixelBuffer(1, 0); gUnknown_02039CE8->var_0++; } break; case 1: - if(sub_80C3438()) + if (PrintAllOnCardPage1()) gUnknown_02039CE8->var_0++; break; case 2: @@ -298,7 +300,7 @@ void sub_80C2760(u8 taskId) gUnknown_02039CE8->var_0++; break; case 7: - if(gWirelessCommType == 1 && gReceivedRemoteLinkPlayers == TRUE) + if (gWirelessCommType == 1 && gReceivedRemoteLinkPlayers == TRUE) { sub_800E0E8(); CreateWirelessStatusIndicatorSprite(230, 150); @@ -309,53 +311,57 @@ void sub_80C2760(u8 taskId) gUnknown_02039CE8->var_0++; break; case 8: - if(!UpdatePaletteFade() && !IsDma3ManagerBusyWithBgCopy()) + if (!UpdatePaletteFade() && !IsDma3ManagerBusyWithBgCopy()) { PlaySE(SE_RG_CARD3); gUnknown_02039CE8->var_0 = 10; } break; case 9: - if(!IsSEPlaying()) + if (!IsSEPlaying()) gUnknown_02039CE8->var_0++; break; case 10: - if(!gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_529) + if (!gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_529) { - sub_80C3880(); + PrintTimeOnCard(); sub_80C438C(1); gUnknown_02039CE8->var_529 = 0; - } - if(gMain.newKeys & A_BUTTON) + } + if (gMain.newKeys & A_BUTTON) { sub_80C4918(); PlaySE(SE_RG_CARD1); gUnknown_02039CE8->var_0 = 12; } - else if(gMain.newKeys & B_BUTTON) + else if (gMain.newKeys & B_BUTTON) { - if(gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE) + if (gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE) + { gUnknown_02039CE8->var_0 = 15; + } else { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, gUnknown_02039CE8->var_52C); gUnknown_02039CE8->var_0 = 14; } - } + } break; case 12: - if(sub_80C4940() && sub_8087598() != TRUE) + if (sub_80C4940() && sub_8087598() != TRUE) { PlaySE(SE_RG_CARD3); gUnknown_02039CE8->var_0 = 11; - } - break; + } + break; case 11: - if(gMain.newKeys & B_BUTTON) + if (gMain.newKeys & B_BUTTON) { - if(gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE) + if (gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE) + { gUnknown_02039CE8->var_0 = 15; - else if(gReceivedRemoteLinkPlayers) + } + else if (gReceivedRemoteLinkPlayers) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, gUnknown_02039CE8->var_52C); gUnknown_02039CE8->var_0 = 14; @@ -364,20 +370,22 @@ void sub_80C2760(u8 taskId) { sub_80C4918(); gUnknown_02039CE8->var_0 = 13; - PlaySE(SE_RG_CARD1); + PlaySE(SE_RG_CARD1); } - } - else if(gMain.newKeys & A_BUTTON) + } + else if (gMain.newKeys & A_BUTTON) { - if(gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE) + if (gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE) + { gUnknown_02039CE8->var_0 = 15; + } else { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, gUnknown_02039CE8->var_52C); gUnknown_02039CE8->var_0 = 14; } } - break; + break; case 15: sub_800AC34(); NewMenuHelpers_DrawDialogueFrame(0, 1); @@ -386,71 +394,72 @@ void sub_80C2760(u8 taskId) gUnknown_02039CE8->var_0 = 16; break; case 16: - if(!gReceivedRemoteLinkPlayers) + if (!gReceivedRemoteLinkPlayers) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, gUnknown_02039CE8->var_52C); gUnknown_02039CE8->var_0 = 14; } break; - case 14: - if(!UpdatePaletteFade()) + case 14: + if (!UpdatePaletteFade()) sub_80C2728(taskId); break; case 13: - if(sub_80C4940() && sub_8087598() != TRUE) + if (sub_80C4940() && sub_8087598() != TRUE) { gUnknown_02039CE8->var_0 = 10; PlaySE(SE_RG_CARD3); } + break; } } bool8 sub_80C2AD8(void) { - switch(gUnknown_02039CE8->var_2) + switch (gUnknown_02039CE8->var_2) { case 0: - if(gUnknown_02039CE8->var_52A) + if (gUnknown_02039CE8->var_52A) LZ77UnCompWram(gUnknown_08DD1F78, gUnknown_02039CE8->var_EF8); else LZ77UnCompWram(gUnknown_08DD2AE0, gUnknown_02039CE8->var_EF8); break; case 1: - if(gUnknown_02039CE8->var_52A) + if (gUnknown_02039CE8->var_52A) LZ77UnCompWram(gUnknown_08DD21B0, gUnknown_02039CE8->var_A48); else LZ77UnCompWram(gUnknown_08DD2D30, gUnknown_02039CE8->var_A48); break; case 2: - if(!gUnknown_02039CE8->var_5) + if (!gUnknown_02039CE8->var_5) { - if(gUnknown_02039CE8->var_52A) + if (gUnknown_02039CE8->var_52A) LZ77UnCompWram(gUnknown_08DD2010, gUnknown_02039CE8->var_598); else LZ77UnCompWram(gUnknown_08DD2B78, gUnknown_02039CE8->var_598); } else { - if(gUnknown_02039CE8->var_52A) + if (gUnknown_02039CE8->var_52A) LZ77UnCompWram(gUnknown_08DD228C, gUnknown_02039CE8->var_598); else LZ77UnCompWram(gUnknown_08DD2E5C, gUnknown_02039CE8->var_598); } break; case 3: - if(gUnknown_02039CE8->var_52A) + if (gUnknown_02039CE8->var_52A) LZ77UnCompWram(gUnknown_0856F5CC, gUnknown_02039CE8->var_13A8); else LZ77UnCompWram(gUnknown_0856F814, gUnknown_02039CE8->var_13A8); break; case 4: - if(gUnknown_02039CE8->var_52A) + if (gUnknown_02039CE8->var_52A) LZ77UnCompWram(gEmeraldTrainerCard_Gfx, gUnknown_02039CE8->var_19A8); else LZ77UnCompWram(gFireRedTrainerCard_Gfx, gUnknown_02039CE8->var_19A8); break; case 5: - if(!gUnknown_02039CE8->var_52A) + if (!gUnknown_02039CE8->var_52A) LZ77UnCompWram(gUnknown_0856F018, gUnknown_02039CE8->var_17A8); break; default: @@ -461,215 +470,116 @@ bool8 sub_80C2AD8(void) return FALSE; } -NAKED -void sub_80C2C80(void) //not really a nonmatching, skipped it because of DMA macros -{ - asm("\n\ - .syntax unified\n\ - push {lr}\n\ - sub sp, 0x8\n\ - ldr r1, =gMain\n\ - movs r2, 0x87\n\ - lsls r2, 3\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - adds r3, r1, 0\n\ - cmp r0, 0xA\n\ - bls _080C2C96\n\ - b _080C2DD8\n\ -_080C2C96:\n\ - lsls r0, 2\n\ - ldr r1, =_080C2CA8\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .pool\n\ - .align 2, 0\n\ -_080C2CA8:\n\ - .4byte _080C2CD4\n\ - .4byte _080C2CEC\n\ - .4byte _080C2D14\n\ - .4byte _080C2D50\n\ - .4byte _080C2D6A\n\ - .4byte _080C2D74\n\ - .4byte _080C2D88\n\ - .4byte _080C2D8E\n\ - .4byte _080C2DA0\n\ - .4byte _080C2DA6\n\ - .4byte _080C2DB8\n\ -_080C2CD4:\n\ - bl sub_80C334C\n\ - bl sub_80C3414\n\ - ldr r1, =gMain\n\ - movs r0, 0x87\n\ - lsls r0, 3\n\ - adds r1, r0\n\ - b _080C2DCC\n\ - .pool\n\ -_080C2CEC:\n\ - movs r1, 0xE0\n\ - lsls r1, 19\n\ - movs r0, 0\n\ - str r0, [sp]\n\ - ldr r0, =0x040000d4\n\ - mov r2, sp\n\ - str r2, [r0]\n\ - str r1, [r0, 0x4]\n\ - ldr r1, =0x85000100\n\ - str r1, [r0, 0x8]\n\ - ldr r0, [r0, 0x8]\n\ - movs r0, 0x87\n\ - lsls r0, 3\n\ - adds r1, r3, r0\n\ - b _080C2DCC\n\ - .pool\n\ -_080C2D14:\n\ - ldr r0, =gUnknown_02039CE8\n\ - ldr r0, [r0]\n\ - ldr r1, =0x0000052c\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - bne _080C2D36\n\ - movs r2, 0xA0\n\ - lsls r2, 19\n\ - add r1, sp, 0x4\n\ - strh r0, [r1]\n\ - ldr r0, =0x040000d4\n\ - str r1, [r0]\n\ - str r2, [r0, 0x4]\n\ - ldr r1, =0x81000200\n\ - str r1, [r0, 0x8]\n\ - ldr r0, [r0, 0x8]\n\ -_080C2D36:\n\ - movs r2, 0x87\n\ - lsls r2, 3\n\ - adds r1, r3, r2\n\ - b _080C2DCC\n\ - .pool\n\ -_080C2D50:\n\ - bl ResetSpriteData\n\ - bl FreeAllSpritePalettes\n\ - bl ResetPaletteFade\n\ - ldr r1, =gMain\n\ - movs r0, 0x87\n\ - lsls r0, 3\n\ - adds r1, r0\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ -_080C2D6A:\n\ - bl sub_80C3388\n\ - b _080C2DC4\n\ - .pool\n\ -_080C2D74:\n\ - bl sub_80C41D8\n\ - ldr r1, =gMain\n\ - movs r0, 0x87\n\ - lsls r0, 3\n\ - adds r1, r0\n\ - b _080C2DCC\n\ - .pool\n\ -_080C2D88:\n\ - bl sub_80C2AD8\n\ - b _080C2DBC\n\ -_080C2D8E:\n\ - bl sub_80C4330\n\ - ldr r1, =gMain\n\ - movs r0, 0x87\n\ - lsls r0, 3\n\ - adds r1, r0\n\ - b _080C2DCC\n\ - .pool\n\ -_080C2DA0:\n\ - bl sub_80C3278\n\ - b _080C2DC4\n\ -_080C2DA6:\n\ - bl sub_80C3548\n\ - ldr r1, =gMain\n\ - movs r0, 0x87\n\ - lsls r0, 3\n\ - adds r1, r0\n\ - b _080C2DCC\n\ - .pool\n\ -_080C2DB8:\n\ - bl sub_80C43A8\n\ -_080C2DBC:\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _080C2DDC\n\ -_080C2DC4:\n\ - ldr r1, =gMain\n\ - movs r2, 0x87\n\ - lsls r2, 3\n\ - adds r1, r2\n\ -_080C2DCC:\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - b _080C2DDC\n\ - .pool\n\ -_080C2DD8:\n\ - bl sub_80C3404\n\ -_080C2DDC:\n\ - add sp, 0x8\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided"); -} - -u32 sav12_xor_get_clamped_above(u8 stat, u32 max) -{ - u32 retStat = GetGameStat(stat); - return (retStat > max) ? max : retStat; -} - -bool8 sub_80C2DFC(void) +void sub_80C2C80(void) +{ + switch (gMain.state) + { + case 0: + sub_80C334C(); + sub_80C3414(); + gMain.state++; + break; + case 1: + DmaClear32(3, (void *)OAM, OAM_SIZE); + gMain.state++; + break; + case 2: + if (!gUnknown_02039CE8->var_52C) + DmaClear16(3, (void *)PLTT, PLTT_SIZE); + gMain.state++; + break; + case 3: + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + gMain.state++; + case 4: + sub_80C3388(); + gMain.state++; + break; + case 5: + sub_80C41D8(); + gMain.state++; + break; + case 6: + if (sub_80C2AD8() == TRUE) + gMain.state++; + break; + case 7: + sub_80C4330(); + gMain.state++; + break; + case 8: + sub_80C3278(); + gMain.state++; + break; + case 9: + PrintAllVariableNumsOnCardPage2(); + gMain.state++; + break; + case 10: + if (sub_80C43A8() == TRUE) + gMain.state++; + break; + default: + sub_80C3404(); + break; + } +} + +u32 GetCappedGameStat(u8 statId, u32 maxValue) +{ + u32 statValue = GetGameStat(statId); + + return min(maxValue, statValue); +} + +bool8 HasAllFrontierSymbols(void) { u8 i; - for(i = 0; i <= 6; i++) + for (i = 0; i < NUM_FRONTIER_FACILITIES; i++) { - if(!FlagGet(FLAG_SYS_TOWER_SILVER + 2 * i) || !FlagGet(FLAG_SYS_TOWER_GOLD + 2 * i)) + if (!FlagGet(FLAG_SYS_TOWER_SILVER + 2 * i) || !FlagGet(FLAG_SYS_TOWER_GOLD + 2 * i)) return FALSE; } - return TRUE; + return TRUE; } u32 sub_80C2E40(void) { - u32 stat = GetGameStat(GAME_STAT_ENTERED_HOF); - u8 r4 = (stat | -stat) >> 31; - - if(sub_80C08E4()) - r4++; - if(sub_80F8940() > 4) - r4++; - if(sub_80C2DFC()) - r4++; - return r4; + u8 stars = 0; + + if (GetGameStat(GAME_STAT_ENTERED_HOF)) + stars++; + if (HasAllHoennMons()) + stars++; + if (CountPlayerContestPaintings() > 4) + stars++; + if (HasAllFrontierSymbols()) + stars++; + + return stars; } -u8 TrainerCard_GetStarCount(struct TrainerCard *trainerCard) +u8 sub_80C2E84(struct TrainerCard *trainerCard) { - u8 value = 0; + u8 stars = 0; - if (trainerCard->firstHallOfFameA || trainerCard->firstHallOfFameB || trainerCard->firstHallOfFameC) - value++; - if (trainerCard->var_3) - value++; + if (trainerCard->hofDebutHours || trainerCard->hofDebutMinutes || trainerCard->hofDebutSeconds) + stars++; + if (trainerCard->caughtAllHoenn) + stars++; if (trainerCard->battleTowerLosses > 49) - value++; - if (trainerCard->var_4) - value++; - - return value; + stars++; + if (trainerCard->hasAllPaintings) + stars++; + + return stars; } -void sub_80C2EC4(struct TrainerCard *trainerCard, u8 arg1) +void SetPlayerCardData(struct TrainerCard *trainerCard, u8 arg1) { u32 playTime; - bool32 enteredHallOfFame; u8 i; trainerCard->gender = gSaveBlock2Ptr->playerGender; @@ -677,233 +587,101 @@ void sub_80C2EC4(struct TrainerCard *trainerCard, u8 arg1) trainerCard->playTimeMinutes = gSaveBlock2Ptr->playTimeMinutes; playTime = GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME); - enteredHallOfFame = GetGameStat(GAME_STAT_ENTERED_HOF); - if (!enteredHallOfFame) + if (!GetGameStat(GAME_STAT_ENTERED_HOF)) playTime = 0; - - trainerCard->firstHallOfFameA = playTime >> 16; - trainerCard->firstHallOfFameB = (playTime >> 8) & 0xFF; - trainerCard->firstHallOfFameC = playTime & 0xFF; - if((playTime >> 16) > 999) + + trainerCard->hofDebutHours = playTime >> 16; + trainerCard->hofDebutMinutes = (playTime >> 8) & 0xFF; + trainerCard->hofDebutSeconds = playTime & 0xFF; + if ((playTime >> 16) > 999) { - trainerCard->firstHallOfFameA = 999; - trainerCard->firstHallOfFameB = 59; - trainerCard->firstHallOfFameC = 59; + trainerCard->hofDebutHours = 999; + trainerCard->hofDebutMinutes = 59; + trainerCard->hofDebutSeconds = 59; } - + trainerCard->hasPokedex = FlagGet(FLAG_SYS_POKEDEX_GET); - trainerCard->var_3 = sub_80C08E4(); - trainerCard->pokedexCaught = sub_80C376C(); + trainerCard->caughtAllHoenn = HasAllHoennMons(); + trainerCard->caughtMonsCount = GetCaughtMonsCount(); trainerCard->trainerId = (gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0]; - trainerCard->linkBattleWins = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_WINS, 9999); - trainerCard->linkBattleLosses = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_LOSSES, 9999); - - trainerCard->pokemonTrades = sav12_xor_get_clamped_above(GAME_STAT_POKEMON_TRADES, 0xFFFF); - + trainerCard->linkBattleWins = GetCappedGameStat(GAME_STAT_LINK_BATTLE_WINS, 9999); + trainerCard->linkBattleLosses = GetCappedGameStat(GAME_STAT_LINK_BATTLE_LOSSES, 9999); + + trainerCard->pokemonTrades = GetCappedGameStat(GAME_STAT_POKEMON_TRADES, 0xFFFF); + trainerCard->money = GetMoney(&gSaveBlock1Ptr->money); for (i = 0; i < 4; i++) trainerCard->var_28[i] = gSaveBlock1Ptr->unk2BB0[i]; - + StringCopy(trainerCard->playerName, gSaveBlock2Ptr->playerName); - - switch(arg1) + + switch (arg1) { case 2: trainerCard->battleTowerWins = 0; trainerCard->battleTowerLosses = 0; case 0: - trainerCard->contestsWithFriends = sav12_xor_get_clamped_above(GAME_STAT_WON_LINK_CONTEST, 999); - trainerCard->pokeblocksWithFriends = sav12_xor_get_clamped_above(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF); - if(sub_80F8940() > 4) - trainerCard->var_4 = TRUE; - trainerCard->stars = TrainerCard_GetStarCount(trainerCard); + trainerCard->contestsWithFriends = GetCappedGameStat(GAME_STAT_WON_LINK_CONTEST, 999); + trainerCard->pokeblocksWithFriends = GetCappedGameStat(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF); + if (CountPlayerContestPaintings() > 4) + trainerCard->hasAllPaintings = TRUE; + trainerCard->stars = sub_80C2E84(trainerCard); break; case 1: trainerCard->battleTowerWins = 0; trainerCard->battleTowerLosses = 0; trainerCard->contestsWithFriends = 0; trainerCard->pokeblocksWithFriends = 0; - trainerCard->var_4 = 0; + trainerCard->hasAllPaintings = 0; trainerCard->stars = 0; + break; } } -#ifdef NONMATCHING //r0 and r1 swapped void sub_80C3020(struct TrainerCard *trainerCard) { memset(trainerCard, 0, sizeof(struct TrainerCard)); trainerCard->var_38 = 3; - sub_80C2EC4(trainerCard, 2); - trainerCard->var_60 = sub_80C2DFC(); + SetPlayerCardData(trainerCard, 2); + trainerCard->var_60 = HasAllFrontierSymbols(); trainerCard->var_62 = gSaveBlock2Ptr->frontier.field_EBA; - if(trainerCard->var_60) + if (trainerCard->var_60) trainerCard->stars++; - if(trainerCard->gender == FEMALE) - trainerCard->var_4F = gUnknown_08329D54[(trainerCard->trainerId & 7) + 8]; + + if (trainerCard->gender == FEMALE) + trainerCard->var_4F = gUnknown_08329D54[(trainerCard->trainerId % 8) + 8]; else - trainerCard->var_4F = gUnknown_08329D54[trainerCard->trainerId & 7]; + trainerCard->var_4F = gUnknown_08329D54[trainerCard->trainerId % 8]; } -#else -NAKED -void sub_80C3020(struct TrainerCard *trainerCard) -{ - asm("\n\ - .syntax unified\n\ - push {r4,lr}\n\ - adds r4, r0, 0\n\ - movs r1, 0\n\ - movs r2, 0x64\n\ - bl memset\n\ - adds r1, r4, 0\n\ - adds r1, 0x38\n\ - movs r0, 0x3\n\ - strb r0, [r1]\n\ - adds r0, r4, 0\n\ - movs r1, 0x2\n\ - bl sub_80C2EC4\n\ - bl sub_80C2DFC\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - adds r1, r4, 0\n\ - adds r1, 0x60\n\ - strh r0, [r1]\n\ - ldr r0, =gSaveBlock2Ptr\n\ - ldr r0, [r0]\n\ - ldr r2, =0x00000eba\n\ - adds r0, r2\n\ - ldrh r0, [r0]\n\ - adds r2, r4, 0\n\ - adds r2, 0x62\n\ - strh r0, [r2]\n\ - ldrh r0, [r1]\n\ - cmp r0, 0\n\ - beq _080C3066\n\ - ldrb r0, [r4, 0x1]\n\ - adds r0, 0x1\n\ - strb r0, [r4, 0x1]\n\ -_080C3066:\n\ - ldrb r0, [r4]\n\ - cmp r0, 0x1\n\ - bne _080C3084\n\ - ldr r2, =gUnknown_08329D54\n\ - ldrh r0, [r4, 0xE]\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - adds r0, 0x8\n\ - b _080C308C\n\ - .pool\n\ -_080C3084:\n\ - ldr r2, =gUnknown_08329D54\n\ - ldrh r0, [r4, 0xE]\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ -_080C308C:\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - ldrh r1, [r0]\n\ - adds r0, r4, 0\n\ - adds r0, 0x4F\n\ - strb r1, [r0]\n\ - pop {r4}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided"); -} -#endif // NONMATCHING - -#ifdef NONMATCHING //r0 and r1 swapped + void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) { - u8 temp; memset(trainerCard, 0, 0x60); trainerCard->var_38 = 3; - sub_80C2EC4(trainerCard, 2); - temp = sub_80C2DFC(); - trainerCard->var_3A = temp; + SetPlayerCardData(trainerCard, 2); + trainerCard->var_3A = HasAllFrontierSymbols(); *((u16*)&trainerCard->var_3C) = gSaveBlock2Ptr->frontier.field_EBA; - if(temp) + if (trainerCard->var_3A) trainerCard->stars++; - if(trainerCard->gender == FEMALE) - trainerCard->var_4F = gUnknown_08329D54[(trainerCard->trainerId & 7) + 8]; + + if (trainerCard->gender == FEMALE) + trainerCard->var_4F = gUnknown_08329D54[(trainerCard->trainerId % 8) + 8]; else - trainerCard->var_4F = gUnknown_08329D54[trainerCard->trainerId & 7]; + trainerCard->var_4F = gUnknown_08329D54[trainerCard->trainerId % 8]; } -#else -NAKED -void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) -{ - asm("\n\ - .syntax unified\n\ - push {r4,lr}\n\ - adds r4, r0, 0\n\ - movs r1, 0\n\ - movs r2, 0x60\n\ - bl memset\n\ - adds r1, r4, 0\n\ - adds r1, 0x38\n\ - movs r0, 0x3\n\ - strb r0, [r1]\n\ - adds r0, r4, 0\n\ - movs r1, 0x2\n\ - bl sub_80C2EC4\n\ - bl sub_80C2DFC\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - strh r0, [r4, 0x3A]\n\ - ldr r1, =gSaveBlock2Ptr\n\ - ldr r1, [r1]\n\ - ldr r2, =0x00000eba\n\ - adds r1, r2\n\ - ldrh r1, [r1]\n\ - strh r1, [r4, 0x3C]\n\ - cmp r0, 0\n\ - beq _080C30E0\n\ - ldrb r0, [r4, 0x1]\n\ - adds r0, 0x1\n\ - strb r0, [r4, 0x1]\n\ -_080C30E0:\n\ - ldrb r0, [r4]\n\ - cmp r0, 0x1\n\ - bne _080C3100\n\ - ldr r2, =gUnknown_08329D54\n\ - ldrh r0, [r4, 0xE]\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - adds r0, 0x8\n\ - b _080C3108\n\ - .pool\n\ -_080C3100:\n\ - ldr r2, =gUnknown_08329D54\n\ - ldrh r0, [r4, 0xE]\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ -_080C3108:\n\ - lsls r0, 1\n\ - adds r0, r2\n\ - ldrh r1, [r0]\n\ - adds r0, r4, 0\n\ - adds r0, 0x4F\n\ - strb r1, [r0]\n\ - pop {r4}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided"); -} -#endif // NONMATCHING void sub_80C3120(struct TrainerCard *trainerCard, u16 *src, u8 gameVersion) { memset(trainerCard, 0, sizeof(struct TrainerCard)); trainerCard->var_38 = gameVersion; - switch(sub_80C4FCC(gameVersion)) + + switch (sub_80C4FCC(gameVersion)) { case 0: - memcpy(trainerCard, src, 0x60); + memcpy(trainerCard, src, 0x60); break; case 1: memcpy(trainerCard, src, 0x38); @@ -913,6 +691,7 @@ void sub_80C3120(struct TrainerCard *trainerCard, u16 *src, u8 gameVersion) trainerCard->var_3C = 0; trainerCard->var_60 = src[29]; trainerCard->var_62 = src[30]; + break; } } @@ -920,7 +699,7 @@ void sub_80C3190(void) { u8 i; u32 badgeFlag; - + gUnknown_02039CE8->var_A = 0; gUnknown_02039CE8->var_B = 0; gUnknown_02039CE8->var_C = 0; @@ -928,27 +707,27 @@ void sub_80C3190(void) gUnknown_02039CE8->var_E = 0; gUnknown_02039CE8->var_F = 0; gUnknown_02039CE8->var_10 = 0; - memset(gUnknown_02039CE8->badgeCount, 0, 8); - if(gUnknown_02039CE8->var_534.hasPokedex) + memset(gUnknown_02039CE8->badgeCount, 0, sizeof(gUnknown_02039CE8->badgeCount)); + if (gUnknown_02039CE8->var_534.hasPokedex) gUnknown_02039CE8->var_A++; - - if(gUnknown_02039CE8->var_534.firstHallOfFameA - ||gUnknown_02039CE8->var_534.firstHallOfFameB - ||gUnknown_02039CE8->var_534.firstHallOfFameC) + + if (gUnknown_02039CE8->var_534.hofDebutHours + || gUnknown_02039CE8->var_534.hofDebutMinutes + || gUnknown_02039CE8->var_534.hofDebutSeconds) gUnknown_02039CE8->var_B++; - - if(gUnknown_02039CE8->var_534.linkBattleWins || gUnknown_02039CE8->var_534.linkBattleLosses) + + if (gUnknown_02039CE8->var_534.linkBattleWins || gUnknown_02039CE8->var_534.linkBattleLosses) gUnknown_02039CE8->var_C++; - if(gUnknown_02039CE8->var_534.pokemonTrades) + if (gUnknown_02039CE8->var_534.pokemonTrades) gUnknown_02039CE8->var_10++; - if(gUnknown_02039CE8->var_534.battleTowerWins || gUnknown_02039CE8->var_534.battleTowerLosses) + if (gUnknown_02039CE8->var_534.battleTowerWins || gUnknown_02039CE8->var_534.battleTowerLosses) gUnknown_02039CE8->var_D++; - + i = 0; badgeFlag = FLAG_BADGE01_GET; while (1) { - if(FlagGet(badgeFlag)) + if (FlagGet(badgeFlag)) gUnknown_02039CE8->badgeCount[i]++; badgeFlag++; i++; @@ -970,7 +749,7 @@ void sub_80C3278(void) SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ); SetGpuReg(REG_OFFSET_WIN0V, 160); SetGpuReg(REG_OFFSET_WIN0H, 240); - if(gReceivedRemoteLinkPlayers) + if (gReceivedRemoteLinkPlayers) EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); else EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); @@ -978,9 +757,9 @@ void sub_80C3278(void) void sub_80C32EC(u16 arg0) { - u8 quotient = (arg0 + 40) / 10; - - if((s8)quotient <= 4) + s8 quotient = (arg0 + 40) / 10; + + if (quotient <= 4) quotient = 0; gUnknown_02039CE8->var_528 = quotient; SetGpuReg(REG_OFFSET_BLDY, gUnknown_02039CE8->var_528); @@ -1029,27 +808,27 @@ void sub_80C3414(void) sub_80C3190(); } -bool8 sub_80C3438(void) +bool8 PrintAllOnCardPage1(void) { - switch(gUnknown_02039CE8->var_1) + switch (gUnknown_02039CE8->var_1) { case 0: - sub_80C3574(); + PrintNameOnCard(); break; case 1: - sub_80C3608(); + PrintIdOnCard(); break; case 2: - sub_80C3684(); + PrintMoneyOnCard(); break; case 3: - sub_80C378C(); + PrintPokedexOnCard(); break; case 4: - sub_80C3880(); + PrintTimeOnCard(); break; case 5: - sub_80C3A18(); + PrintProfilePhraseOnCard(); break; default: gUnknown_02039CE8->var_1 = 0; @@ -1059,33 +838,33 @@ bool8 sub_80C3438(void) return FALSE; } -bool8 sub_80C34B0(void) +bool8 PrintStringsOnCardPage2(void) { - switch(gUnknown_02039CE8->var_1) + switch (gUnknown_02039CE8->var_1) { case 0: sub_80C3B50(); break; case 1: - sub_80C3CCC(); + PrintHofDebutStringOnCard(); break; case 2: - sub_80C3D60(); + PrintWinsLossesStringOnCard(); break; case 3: - sub_80C3DF0(); + PrintTradesStringOnCard(); break; case 4: - sub_80C3E58(); - sub_80C3F64(); + PrintBerryCrushStringOnCard(); + PrintPokeblockStringOnCard(); break; case 5: - sub_80C3ED4(); - sub_80C3FE0(); + PrintUnionStringOnCard(); + PrintContestStringOnCard(); break; case 6: sub_80C4140(); - sub_80C40CC(); + PrintBattleFacilityStringOnCard(); break; case 7: sub_80C42A4(); @@ -1098,33 +877,33 @@ bool8 sub_80C34B0(void) return FALSE; } -void sub_80C3548(void) +void PrintAllVariableNumsOnCardPage2(void) { - sub_80C3AF0(); - sub_80C3BC4(); - sub_80C3CF4(); - sub_80C3DC0(); - sub_80C3E20(); - sub_80C3E98(); - sub_80C3F14(); - sub_80C3FA4(); - sub_80C4020(); + PrintNameOnCard2(); + PrintHofTimeOnCard(); + PrintLinkResultsNumsOnCard(); + PrintTradesNumOnCard(); + PrintBerryCrushNumOnCard(); + PrintUnionNumOnCard(); + PrintPokeblocksNumOnCard(); + PrintContestNumOnCard(); + PrintBattleFacilityNumsOnCard(); } -void sub_80C3574(void) +void PrintNameOnCard(void) { u8 buffer[32]; u8* txtPtr; txtPtr = StringCopy(buffer, gText_TrainerCardName); StringCopy(txtPtr, gUnknown_02039CE8->var_534.playerName); ConvertInternationalString(txtPtr, gUnknown_02039CE8->var_7CAA); - if(!gUnknown_02039CE8->var_52A) + if (!gUnknown_02039CE8->var_52A) AddTextPrinterParameterized3(1, 1, 20, 28, gUnknown_0856FB0C, -1, buffer); else AddTextPrinterParameterized3(1, 1, 16, 33, gUnknown_0856FB0C, -1, buffer); } -void sub_80C3608(void) +void PrintIdOnCard(void) { u8 buffer[32]; u8* txtPtr; @@ -1132,9 +911,9 @@ void sub_80C3608(void) u32 top; txtPtr = StringCopy(buffer, gText_TrainerCardIDNo); ConvertIntToDecimalStringN(txtPtr, gUnknown_02039CE8->var_534.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); - if(!gUnknown_02039CE8->var_52A) + if (!gUnknown_02039CE8->var_52A) { - xPos = GetStringCenterAlignXOffset(1, buffer, 80) + 132; + xPos = GetStringCenterAlignXOffset(1, buffer, 80) + 132; top = 9; } else @@ -1142,21 +921,23 @@ void sub_80C3608(void) xPos = GetStringCenterAlignXOffset(1, buffer, 96) + 120; top = 9; } - + AddTextPrinterParameterized3(1, 1, xPos, top, gUnknown_0856FB0C, -1, buffer); } -void sub_80C3684(void) +void PrintMoneyOnCard(void) { s32 xOffset; u8 top; - if(!gUnknown_02039CE8->var_52B) + + if (!gUnknown_02039CE8->var_52B) AddTextPrinterParameterized3(1, 1, 20, 56, gUnknown_0856FB0C, -1, gText_TrainerCardMoney); else AddTextPrinterParameterized3(1, 1, 16, 57, gUnknown_0856FB0C, -1, gText_TrainerCardMoney); + ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.money, 0, 6); StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); - if(!gUnknown_02039CE8->var_52B) + if (!gUnknown_02039CE8->var_52B) { xOffset = GetStringRightAlignXOffset(1, gStringVar4, 144); top = 56; @@ -1165,30 +946,30 @@ void sub_80C3684(void) { xOffset = GetStringRightAlignXOffset(1, gStringVar4, 128); top = 57; - } + } AddTextPrinterParameterized3(1, 1, xOffset, top, gUnknown_0856FB0C, -1, gStringVar4); } -u16 sub_80C376C(void) +u16 GetCaughtMonsCount(void) { - if(IsNationalPokedexEnabled()) + if (IsNationalPokedexEnabled()) return GetNationalPokedexCount(FLAG_GET_CAUGHT); - - return GetHoennPokedexCount(FLAG_GET_CAUGHT); + else + return GetHoennPokedexCount(FLAG_GET_CAUGHT); } -void sub_80C378C(void) +void PrintPokedexOnCard(void) { s32 xOffset; u8 top; - if(FlagGet(FLAG_SYS_POKEDEX_GET)) + if (FlagGet(FLAG_SYS_POKEDEX_GET)) { - if(!gUnknown_02039CE8->var_52B) + if (!gUnknown_02039CE8->var_52B) AddTextPrinterParameterized3(1, 1, 20, 72, gUnknown_0856FB0C, -1, gText_TrainerCardPokedex); else AddTextPrinterParameterized3(1, 1, 16, 73, gUnknown_0856FB0C, -1,gText_TrainerCardPokedex); - StringCopy(ConvertIntToDecimalStringN(gStringVar4, gUnknown_02039CE8->var_534.pokedexCaught, 0, 3), gText_EmptyString6); - if(!gUnknown_02039CE8->var_52B) + StringCopy(ConvertIntToDecimalStringN(gStringVar4, gUnknown_02039CE8->var_534.caughtMonsCount, 0, 3), gText_EmptyString6); + if (!gUnknown_02039CE8->var_52B) { xOffset = GetStringRightAlignXOffset(1, gStringVar4, 144); top = 72; @@ -1197,42 +978,45 @@ void sub_80C378C(void) { xOffset = GetStringRightAlignXOffset(1, gStringVar4, 128); top = 73; - } + } AddTextPrinterParameterized3(1, 1, xOffset, top, gUnknown_0856FB0C, -1, gStringVar4); } } -void sub_80C3880(void) +void PrintTimeOnCard(void) { u16 hours; u16 minutes; s32 width; u32 r7, r4, r10; - if(!gUnknown_02039CE8->var_52B) + + if (!gUnknown_02039CE8->var_52B) AddTextPrinterParameterized3(1, 1, 20, 88, gUnknown_0856FB0C, -1, gText_TrainerCardTime); else AddTextPrinterParameterized3(1, 1, 16, 89, gUnknown_0856FB0C, -1, gText_TrainerCardTime); - if(gUnknown_02039CE8->var_5) + + if (gUnknown_02039CE8->var_5) { hours = gUnknown_02039CE8->var_534.playTimeHours; - minutes = gUnknown_02039CE8->var_534.playTimeMinutes; + minutes = gUnknown_02039CE8->var_534.playTimeMinutes; } else { hours = gSaveBlock2Ptr->playTimeHours; minutes = gSaveBlock2Ptr->playTimeMinutes; } - if(hours > 999) + + if (hours > 999) hours = 999; - if(minutes > 59) + if (minutes > 59) minutes = 59; width = GetStringWidth(1, gText_Colon2, 0); - - if(!gUnknown_02039CE8->var_52B) + + if (!gUnknown_02039CE8->var_52B) { r7 = 144; r4 = 88; - } + } else { r7 = 128; @@ -1240,7 +1024,7 @@ void sub_80C3880(void) } r10 = width + 30; r7 -= r10; - + FillWindowPixelRect(1, 0, r7, r4, r10, 15); ConvertIntToDecimalStringN(gStringVar4, hours, 1, 3); AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, -1, gStringVar4); @@ -1251,9 +1035,9 @@ void sub_80C3880(void) AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, -1, gStringVar4); } -void sub_80C3A18(void) +void PrintProfilePhraseOnCard(void) { - if(gUnknown_02039CE8->var_5) + if (gUnknown_02039CE8->var_5) { AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB48[gUnknown_02039CE8->var_52B], gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_19); AddTextPrinterParameterized3(1, 1, GetStringWidth(1, gUnknown_02039CE8->var_19, 0) + 14, gUnknown_0856FB48[gUnknown_02039CE8->var_52B], gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_26); @@ -1262,11 +1046,11 @@ void sub_80C3A18(void) } } -void sub_80C3AF0(void) +void PrintNameOnCard2(void) { StringCopy(gUnknown_02039CE8->var_4D, gUnknown_02039CE8->var_534.playerName); ConvertInternationalString(gUnknown_02039CE8->var_4D, gUnknown_02039CE8->var_7CAA); - if(gUnknown_02039CE8->var_52A) + if (gUnknown_02039CE8->var_52A) { StringCopy(gStringVar1, gUnknown_02039CE8->var_4D); StringExpandPlaceholders(gUnknown_02039CE8->var_4D, gText_Var1sTrainerCard); @@ -1275,19 +1059,19 @@ void sub_80C3AF0(void) void sub_80C3B50(void) { - if(!gUnknown_02039CE8->var_52B) + if (!gUnknown_02039CE8->var_52B) AddTextPrinterParameterized3(1, 1, 136, 9, gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_4D); else AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, gUnknown_02039CE8->var_4D, 216), 9, gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_4D); } -void sub_80C3BC4(void) +void PrintHofTimeOnCard(void) { - if(gUnknown_02039CE8->var_B) + if (gUnknown_02039CE8->var_B) { - ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.firstHallOfFameA, 1, 3); - ConvertIntToDecimalStringN(gStringVar2, gUnknown_02039CE8->var_534.firstHallOfFameB, 2, 2); - ConvertIntToDecimalStringN(gStringVar3, gUnknown_02039CE8->var_534.firstHallOfFameC, 2, 2); + ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.hofDebutHours, 1, 3); + ConvertIntToDecimalStringN(gStringVar2, gUnknown_02039CE8->var_534.hofDebutMinutes, 2, 2); + ConvertIntToDecimalStringN(gStringVar3, gUnknown_02039CE8->var_534.hofDebutSeconds, 2, 2); StringExpandPlaceholders(gUnknown_02039CE8->var_93, gUnknown_0856FB4C); } } @@ -1298,15 +1082,15 @@ void sub_80C3C34(u8 top, const u8* str1, u8* str2, const u8* color) AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, str2, gUnknown_0856FB57[gUnknown_02039CE8->var_52B]), top * 16 + 33, color, -1, str2); } -void sub_80C3CCC(void) +void PrintHofDebutStringOnCard(void) { - if(gUnknown_02039CE8->var_B) - sub_80C3C34(0, gText_HallOfFameDebut, gUnknown_02039CE8->var_93, gUnknown_0856FB0F); + if (gUnknown_02039CE8->var_B) + sub_80C3C34(0, gText_HallOfFameDebut, gUnknown_02039CE8->var_93, gUnknown_0856FB0F); } -void sub_80C3CF4(void) +void PrintLinkResultsNumsOnCard(void) { - if(gUnknown_02039CE8->var_C) + if (gUnknown_02039CE8->var_C) { StringCopy(gUnknown_02039CE8->var_D9, gUnknown_0856FB5C[gUnknown_02039CE8->var_52A]); ConvertIntToDecimalStringN(gUnknown_02039CE8->var_165, gUnknown_02039CE8->var_534.linkBattleWins, 0, 4); @@ -1314,9 +1098,9 @@ void sub_80C3CF4(void) } } -void sub_80C3D60(void) +void PrintWinsLossesStringOnCard(void) { - if(gUnknown_02039CE8->var_C) + if (gUnknown_02039CE8->var_C) { StringCopy(gStringVar1, gUnknown_02039CE8->var_165); StringCopy(gStringVar2, gUnknown_02039CE8->var_1AB); @@ -1325,105 +1109,108 @@ void sub_80C3D60(void) } } -void sub_80C3DC0(void) +void PrintTradesNumOnCard(void) { - if(gUnknown_02039CE8->var_10) + if (gUnknown_02039CE8->var_10) ConvertIntToDecimalStringN(gUnknown_02039CE8->var_237, gUnknown_02039CE8->var_534.pokemonTrades, 1, 5); } -void sub_80C3DF0(void) +void PrintTradesStringOnCard(void) { - if(gUnknown_02039CE8->var_10) + if (gUnknown_02039CE8->var_10) sub_80C3C34(2, gText_PokemonTrades, gUnknown_02039CE8->var_237, gUnknown_0856FB0F); } -void sub_80C3E20(void) +void PrintBerryCrushNumOnCard(void) { - if(!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_3C) + if (!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_3C) ConvertIntToDecimalStringN(gUnknown_02039CE8->var_2C3, gUnknown_02039CE8->var_534.var_3C, 1, 5); } -void sub_80C3E58(void) +void PrintBerryCrushStringOnCard(void) { - if(!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_3C) + if (!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_3C) sub_80C3C34(4, gText_BerryCrush, gUnknown_02039CE8->var_2C3, gUnknown_0856FB0F); } -void sub_80C3E98(void) +void PrintUnionNumOnCard(void) { - if(!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_40) + if (!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_40) ConvertIntToDecimalStringN(gUnknown_02039CE8->var_34F, gUnknown_02039CE8->var_534.var_40, 1, 5); } -void sub_80C3ED4(void) +void PrintUnionStringOnCard(void) { - if(!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_40) + if (!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_40) sub_80C3C34(3, gText_UnionTradesAndBattles, gUnknown_02039CE8->var_34F, gUnknown_0856FB0F); } -void sub_80C3F14(void) +void PrintPokeblocksNumOnCard(void) { - if(gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.pokeblocksWithFriends) + if (gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.pokeblocksWithFriends) { ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.pokeblocksWithFriends, 1, 5); StringExpandPlaceholders(gUnknown_02039CE8->var_395, gText_Var1DarkGreyShadowLightGrey); } } -void sub_80C3F64(void) +void PrintPokeblockStringOnCard(void) { - if(gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.pokeblocksWithFriends) + if (gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.pokeblocksWithFriends) sub_80C3C34(3, gText_PokeblocksWithFriends, gUnknown_02039CE8->var_395, gUnknown_0856FB0F); } -void sub_80C3FA4(void) +void PrintContestNumOnCard(void) { - if(gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.contestsWithFriends) + if (gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.contestsWithFriends) ConvertIntToDecimalStringN(gUnknown_02039CE8->var_3DB, gUnknown_02039CE8->var_534.contestsWithFriends, 1, 5); } -void sub_80C3FE0(void) +void PrintContestStringOnCard(void) { - if(gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.contestsWithFriends) + if (gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.contestsWithFriends) sub_80C3C34(4, gText_WonContestsWFriends, gUnknown_02039CE8->var_3DB, gUnknown_0856FB0F); } -void sub_80C4020(void) +void PrintBattleFacilityNumsOnCard(void) { - switch(gUnknown_02039CE8->var_52A) + switch (gUnknown_02039CE8->var_52A) { case 1: - if(gUnknown_02039CE8->var_D) + if (gUnknown_02039CE8->var_D) { ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.battleTowerWins, 1, 4); ConvertIntToDecimalStringN(gStringVar2, gUnknown_02039CE8->var_534.battleTowerLosses, 1, 4); StringExpandPlaceholders(gUnknown_02039CE8->var_421, gText_WSlashStraightSlash); } break; - case 2: - if(gUnknown_02039CE8->var_534.var_62) + if (gUnknown_02039CE8->var_534.var_62) { ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.var_62, 1, 5); StringExpandPlaceholders(gUnknown_02039CE8->var_421, gText_Var1DarkLightGreyBP); } + break; case 0: + break; } } -void sub_80C40CC(void) +void PrintBattleFacilityStringOnCard(void) { - switch(gUnknown_02039CE8->var_52A) + switch (gUnknown_02039CE8->var_52A) { case 1: - if(gUnknown_02039CE8->var_D) + if (gUnknown_02039CE8->var_D) sub_80C3C34(5, gText_BattleTower, gUnknown_02039CE8->var_421, gUnknown_0856FB0C); break; case 2: - if(gUnknown_02039CE8->var_534.var_62) + if (gUnknown_02039CE8->var_534.var_62) sub_80C3C34(5, gText_BattlePtsWon, gUnknown_02039CE8->var_421, gUnknown_0856FB0F); + break; case 0: - } + break; + } } void sub_80C4140(void) @@ -1433,26 +1220,29 @@ void sub_80C4140(void) u8 buffer2[8]; memcpy(buffer, gUnknown_0856FB68, sizeof(gUnknown_0856FB68)); memcpy(buffer2, gUnknown_0856FB6E, sizeof(gUnknown_0856FB6E)); - - if(!gUnknown_02039CE8->var_52A) + + if (!gUnknown_02039CE8->var_52A) { - for(i = 0; i < 6; i++) + for (i = 0; i < 6; i++) { - if(gUnknown_02039CE8->var_534.monSpecies[i]) + if (gUnknown_02039CE8->var_534.monSpecies[i]) { u8 monSpecies = sub_80D30A0(gUnknown_02039CE8->var_534.monSpecies[i]); WriteSequenceToBgTilemapBuffer(3, 16 * i + 224, buffer2[i] + 3, 15, 4, 4, buffer[monSpecies], 1); } } - } + } } void sub_80C41D8(void) { u8 i; + CpuSet(gMonIconPalettes, gUnknown_02039CE8->var_468, 0x60); - switch(gUnknown_02039CE8->var_534.var_4E) + switch (gUnknown_02039CE8->var_534.var_4E) { + case 0: + break; case 1: TintPalette_CustomTone(gUnknown_02039CE8->var_468, 96, 0, 0, 0); break; @@ -1461,15 +1251,15 @@ void sub_80C41D8(void) break; case 3: TintPalette_SepiaTone(gUnknown_02039CE8->var_468, 96); - case 0: + break; } LoadPalette(gUnknown_02039CE8->var_468, 80, 192); - - for(i = 0; i < 6; i++) + + for (i = 0; i < 6; i++) { - if(gUnknown_02039CE8->var_534.monSpecies[i]) + if (gUnknown_02039CE8->var_534.monSpecies[i]) LoadBgTiles(3, GetMonIconTiles(gUnknown_02039CE8->var_534.monSpecies[i], 0), 512, 16 * i + 32); - } + } } void sub_80C42A4(void) @@ -1477,12 +1267,12 @@ void sub_80C42A4(void) u8 i; u8 buffer[4]; memcpy(buffer, gUnknown_0856FB74, sizeof(gUnknown_0856FB74)); - if(!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_4C == 1) + if (!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_4C == 1) { - for(i = 0; i < 3; i++) + for (i = 0; i < 3; i++) { u8 var_50 = gUnknown_02039CE8->var_534.var_50[i]; - if(gUnknown_02039CE8->var_534.var_50[i]) + if (gUnknown_02039CE8->var_534.var_50[i]) WriteSequenceToBgTilemapBuffer(3, i * 4 + 320, i * 3 + 2, 2, 2, 2, buffer[var_50 - 1], 1); } } @@ -1505,7 +1295,7 @@ void sub_80C438C(u8 windowId) u8 sub_80C43A8(void) { - switch(gUnknown_02039CE8->var_3) + switch (gUnknown_02039CE8->var_3) { case 0: LoadBgTiles(3, gUnknown_02039CE8->var_13A8, 1024, 0); @@ -1514,18 +1304,18 @@ u8 sub_80C43A8(void) LoadBgTiles(0, gUnknown_02039CE8->var_19A8, 6144, 0); break; case 2: - if(gUnknown_02039CE8->var_52A) + if (gUnknown_02039CE8->var_52A) { LoadPalette(gEmeraldTrainerCardStarPals[gUnknown_02039CE8->var_534.stars], 0, 96); LoadPalette(gUnknown_0856F4EC, 48, 32); - if(gUnknown_02039CE8->var_534.gender) + if (gUnknown_02039CE8->var_534.gender) LoadPalette(gUnknown_0856F4AC, 16, 32); } else { LoadPalette(gFireRedTrainerCardStarPals[gUnknown_02039CE8->var_534.stars], 0, 96); LoadPalette(gUnknown_0856F50C, 48, 32); - if(gUnknown_02039CE8->var_534.gender) + if (gUnknown_02039CE8->var_534.gender) LoadPalette(gUnknown_0856F4CC, 16, 32); } LoadPalette(gUnknown_0856F52C, 64, 32); @@ -1545,284 +1335,81 @@ u8 sub_80C43A8(void) return 0; } -NAKED -void sub_80C4550(u8* ptr) //nested loop -{ - asm("\n\ - .syntax unified\n\ - push {r4-r7,lr}\n\ - adds r7, r0, 0\n\ - ldr r0, =gUnknown_02039CE8\n\ - ldr r0, [r0]\n\ - ldr r1, =0x00005ca8\n\ - adds r6, r0, r1\n\ - movs r1, 0\n\ -_080C455E:\n\ - movs r2, 0\n\ - lsls r5, r1, 16\n\ - asrs r1, r5, 16\n\ - lsls r3, r1, 5\n\ - lsls r0, r1, 4\n\ - subs r0, r1\n\ - lsls r4, r0, 1\n\ -_080C456C:\n\ - lsls r0, r2, 16\n\ - asrs r1, r0, 16\n\ - adds r2, r0, 0\n\ - cmp r1, 0x1D\n\ - bgt _080C4590\n\ - adds r0, r3, r1\n\ - lsls r0, 1\n\ - adds r0, r6\n\ - adds r1, r4, r1\n\ - lsls r1, 1\n\ - adds r1, r7\n\ - ldrh r1, [r1]\n\ - b _080C4598\n\ - .pool\n\ -_080C4590:\n\ - adds r0, r3, r1\n\ - lsls r0, 1\n\ - adds r0, r6\n\ - ldrh r1, [r7]\n\ -_080C4598:\n\ - strh r1, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 9\n\ - adds r0, r2, r1\n\ - lsrs r2, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x1F\n\ - ble _080C456C\n\ - adds r0, r5, r1\n\ - lsrs r1, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x13\n\ - ble _080C455E\n\ - movs r0, 0x2\n\ - bl CopyBgTilemapBufferToVram\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided"); -} - -NAKED -void sub_80C45C0(u8* ptr) //nested loop -{ - asm("\n\ - .syntax unified\n\ - push {r4-r7,lr}\n\ - adds r7, r0, 0\n\ - ldr r0, =gUnknown_02039CE8\n\ - ldr r0, [r0]\n\ - ldr r1, =0x00003ca8\n\ - adds r6, r0, r1\n\ - movs r1, 0\n\ -_080C45CE:\n\ - movs r2, 0\n\ - lsls r5, r1, 16\n\ - asrs r1, r5, 16\n\ - lsls r3, r1, 5\n\ - lsls r0, r1, 4\n\ - subs r0, r1\n\ - lsls r4, r0, 1\n\ -_080C45DC:\n\ - lsls r0, r2, 16\n\ - asrs r1, r0, 16\n\ - adds r2, r0, 0\n\ - cmp r1, 0x1D\n\ - bgt _080C4600\n\ - adds r0, r3, r1\n\ - lsls r0, 1\n\ - adds r0, r6\n\ - adds r1, r4, r1\n\ - lsls r1, 1\n\ - adds r1, r7\n\ - ldrh r1, [r1]\n\ - b _080C4608\n\ - .pool\n\ -_080C4600:\n\ - adds r0, r3, r1\n\ - lsls r0, 1\n\ - adds r0, r6\n\ - ldrh r1, [r7]\n\ -_080C4608:\n\ - strh r1, [r0]\n\ - movs r1, 0x80\n\ - lsls r1, 9\n\ - adds r0, r2, r1\n\ - lsrs r2, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x1F\n\ - ble _080C45DC\n\ - adds r0, r5, r1\n\ - lsrs r1, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x13\n\ - ble _080C45CE\n\ - movs r0, 0\n\ - bl CopyBgTilemapBufferToVram\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided"); -} - -NAKED +void sub_80C4550(u16 *ptr) +{ + s16 i, j; + u16 *dst = gUnknown_02039CE8->var_5CA8; + + for (i = 0; i < 20; i++) + { + for (j = 0; j < 32; j++) + { + if (j < 30) + dst[32 * i + j] = ptr[30 * i + j]; + else + dst[32 * i + j] = ptr[0]; + } + } + CopyBgTilemapBufferToVram(2); +} + +void sub_80C45C0(u16* ptr) +{ + s16 i, j; + u16 *dst = gUnknown_02039CE8->var_3CA8; + + for (i = 0; i < 20; i++) + { + for (j = 0; j < 32; j++) + { + if (j < 30) + dst[32 * i + j] = ptr[30 * i + j]; + else + dst[32 * i + j] = ptr[0]; + } + } + CopyBgTilemapBufferToVram(0); +} + void sub_80C4630(void) { - asm("\n\ - .syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0xC\n\ - movs r0, 0xC0\n\ - mov r8, r0\n\ - movs r2, 0x3\n\ - mov r10, r2\n\ - ldr r2, =gUnknown_0856FB78\n\ - ldr r4, =gUnknown_02039CE8\n\ - ldr r1, [r4]\n\ - ldr r3, =0x0000052b\n\ - adds r0, r1, r3\n\ - ldrb r0, [r0]\n\ - adds r0, r2\n\ - ldrb r3, [r0]\n\ - ldr r0, =0x00000535\n\ - adds r1, r0\n\ - ldrb r0, [r1]\n\ - str r0, [sp]\n\ - movs r0, 0x1\n\ - str r0, [sp, 0x4]\n\ - movs r0, 0x4\n\ - str r0, [sp, 0x8]\n\ - movs r0, 0x3\n\ - movs r1, 0x8F\n\ - movs r2, 0xF\n\ - bl FillBgTilemapBufferRect\n\ - ldr r0, [r4]\n\ - ldrb r0, [r0, 0x5]\n\ - cmp r0, 0\n\ - bne _080C4724\n\ - movs r2, 0x4\n\ - mov r9, r2\n\ - movs r2, 0\n\ - movs r6, 0x1\n\ -_080C467E:\n\ - ldr r0, =gUnknown_02039CE8\n\ - ldr r1, [r0]\n\ - lsls r0, r2, 16\n\ - asrs r7, r0, 16\n\ - adds r1, 0x11\n\ - adds r1, r7\n\ - ldrb r0, [r1]\n\ - cmp r0, 0\n\ - beq _080C4700\n\ - mov r3, r9\n\ - lsls r5, r3, 24\n\ - lsrs r5, 24\n\ - str r6, [sp]\n\ - str r6, [sp, 0x4]\n\ - mov r0, r10\n\ - str r0, [sp, 0x8]\n\ - movs r0, 0x3\n\ - mov r1, r8\n\ - adds r2, r5, 0\n\ - movs r3, 0xF\n\ - bl FillBgTilemapBufferRect\n\ - mov r1, r8\n\ - adds r1, 0x1\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - mov r4, r9\n\ - adds r4, 0x1\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - str r6, [sp]\n\ - str r6, [sp, 0x4]\n\ - mov r2, r10\n\ - str r2, [sp, 0x8]\n\ - movs r0, 0x3\n\ - adds r2, r4, 0\n\ - movs r3, 0xF\n\ - bl FillBgTilemapBufferRect\n\ - mov r1, r8\n\ - adds r1, 0x10\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - str r6, [sp]\n\ - str r6, [sp, 0x4]\n\ - mov r3, r10\n\ - str r3, [sp, 0x8]\n\ - movs r0, 0x3\n\ - adds r2, r5, 0\n\ - movs r3, 0x10\n\ - bl FillBgTilemapBufferRect\n\ - mov r1, r8\n\ - adds r1, 0x11\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - str r6, [sp]\n\ - str r6, [sp, 0x4]\n\ - mov r0, r10\n\ - str r0, [sp, 0x8]\n\ - movs r0, 0x3\n\ - adds r2, r4, 0\n\ - movs r3, 0x10\n\ - bl FillBgTilemapBufferRect\n\ -_080C4700:\n\ - adds r0, r7, 0x1\n\ - lsls r0, 16\n\ - mov r1, r8\n\ - adds r1, 0x2\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - mov r8, r1\n\ - mov r2, r9\n\ - lsls r1, r2, 16\n\ - movs r3, 0xC0\n\ - lsls r3, 10\n\ - adds r1, r3\n\ - lsrs r1, 16\n\ - mov r9, r1\n\ - lsrs r2, r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x7\n\ - ble _080C467E\n\ -_080C4724:\n\ - movs r0, 0x3\n\ - bl CopyBgTilemapBufferToVram\n\ - add sp, 0xC\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided"); + s16 i, x; + u16 tileNum = 192; + u8 palNum = 3; + + FillBgTilemapBufferRect(3, 143, 15, gUnknown_0856FB78[gUnknown_02039CE8->var_52B], gUnknown_02039CE8->var_534.stars, 1, 4); + if (!gUnknown_02039CE8->var_5) + { + x = 4; + for (i = 0; i < 8; i++, tileNum += 2, x += 3) + { + if (gUnknown_02039CE8->badgeCount[i]) + { + FillBgTilemapBufferRect(3, tileNum, x, 15, 1, 1, palNum); + FillBgTilemapBufferRect(3, tileNum + 1, x + 1, 15, 1, 1, palNum); + FillBgTilemapBufferRect(3, tileNum + 16, x, 16, 1, 1, palNum); + FillBgTilemapBufferRect(3, tileNum + 17, x + 1, 16, 1, 1, palNum); + } + } + } + CopyBgTilemapBufferToVram(3); } void sub_80C474C(void) { - if(!gUnknown_02039CE8->var_52A) + if (!gUnknown_02039CE8->var_52A) { - if(gUnknown_02039CE8->var_10) + if (gUnknown_02039CE8->var_10) { FillBgTilemapBufferRect(3, 141, 27, 9, 1, 1, 1); FillBgTilemapBufferRect(3, 157, 27, 10, 1, 1, 1); } - if(gUnknown_02039CE8->var_534.var_3C) + if (gUnknown_02039CE8->var_534.var_3C) { FillBgTilemapBufferRect(3, 141, 21, 13, 1, 1, 1); FillBgTilemapBufferRect(3, 157, 21, 14, 1, 1, 1); } - if(gUnknown_02039CE8->var_534.var_40) + if (gUnknown_02039CE8->var_534.var_40) { FillBgTilemapBufferRect(3, 141, 27, 11, 1, 1, 1); FillBgTilemapBufferRect(3, 157, 27, 12, 1, 1, 1); @@ -1830,17 +1417,17 @@ void sub_80C474C(void) } else { - if(gUnknown_02039CE8->var_10) + if (gUnknown_02039CE8->var_10) { FillBgTilemapBufferRect(3, 141, 27, 9, 1, 1, 0); FillBgTilemapBufferRect(3, 157, 27, 10, 1, 1, 0); } - if(gUnknown_02039CE8->var_534.contestsWithFriends) + if (gUnknown_02039CE8->var_534.contestsWithFriends) { FillBgTilemapBufferRect(3, 141, 27, 13, 1, 1, 0); FillBgTilemapBufferRect(3, 157, 27, 14, 1, 1, 0); } - if(gUnknown_02039CE8->var_D) + if (gUnknown_02039CE8->var_D) { FillBgTilemapBufferRect(3, 141, 17, 15, 1, 1, 0); FillBgTilemapBufferRect(3, 157, 17, 16, 1, 1, 0); @@ -1853,7 +1440,7 @@ void sub_80C474C(void) void sub_80C48C8(void) { - if(++gUnknown_02039CE8->var_6 > 60) + if (++gUnknown_02039CE8->var_6 > 60) { gUnknown_02039CE8->var_6 = 0; gUnknown_02039CE8->var_7 ^= 1; @@ -1876,9 +1463,10 @@ void sub_80C4918(void) bool8 sub_80C4940(void) { - if(FindTaskIdByFunc(sub_80C4960) == 0xFF) + if (FindTaskIdByFunc(sub_80C4960) == 0xFF) return TRUE; - return FALSE; + else + return FALSE; } void sub_80C4960(u8 taskId) @@ -1890,11 +1478,12 @@ void sub_80C4960(u8 taskId) bool8 sub_80C4998(struct Task* task) { u32 i; + HideBg(1); HideBg(3); ScanlineEffect_Stop(); ScanlineEffect_Clear(); - for(i = 0; i < 160; i++) + for (i = 0; i < 160; i++) gScanlineEffectRegBuffers[1][i] = 0; task->data[0]++; return FALSE; -- cgit v1.2.3 From 4e396207d3f09772f0f073b5a945bb1fafe1fcdd Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 20 Jan 2019 18:24:35 +0100 Subject: document more of trainer card --- src/cable_club.c | 4 +- src/frontier_pass.c | 31 ++ src/rom_8011DC0.c | 4 +- src/start_menu.c | 43 +- src/trainer_card.c | 1389 ++++++++++++++++++++++++++++++++------------------- 5 files changed, 924 insertions(+), 547 deletions(-) create mode 100644 src/frontier_pass.c (limited to 'src') diff --git a/src/cable_club.c b/src/cable_club.c index 784426d53..ce9b9db05 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -498,7 +498,7 @@ static void sub_80B2C30(u8 taskId) for (index = 0; index < GetLinkPlayerCount(); index++) { - sub_80C3120(&gTrainerCards[index], gBlockRecvBuffer[index], gLinkPlayers[index].version); + CopyTrainerCardData(&gTrainerCards[index], gBlockRecvBuffer[index], gLinkPlayers[index].version); } SetSuppressLinkErrorMessage(FALSE); @@ -1176,7 +1176,7 @@ static void sub_80B39A4(void) void sp02A_crash_sound(void) { - TrainerCard_ShowLinkCard(gSpecialVar_0x8006, CB2_ReturnToFieldContinueScriptPlayMapMusic); + ShowTrainerCardInLink(gSpecialVar_0x8006, CB2_ReturnToFieldContinueScriptPlayMapMusic); } bool32 sub_80B39D4(u8 linkPlayerIndex) diff --git a/src/frontier_pass.c b/src/frontier_pass.c new file mode 100644 index 000000000..4473dfae0 --- /dev/null +++ b/src/frontier_pass.c @@ -0,0 +1,31 @@ +#include "global.h" +#include "gpu_regs.h" +#include "bg.h" + +void sub_80C50D0(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + SetGpuReg(REG_OFFSET_BG3CNT, 0); + SetGpuReg(REG_OFFSET_BG2CNT, 0); + SetGpuReg(REG_OFFSET_BG1CNT, 0); + SetGpuReg(REG_OFFSET_BG0CNT, 0); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 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, 0); + CpuFill16(0, (void *)VRAM, VRAM_SIZE); + CpuFill32(0, (void *)OAM, OAM_SIZE); +} diff --git a/src/rom_8011DC0.c b/src/rom_8011DC0.c index 813d143d2..41f7eeee7 100644 --- a/src/rom_8011DC0.c +++ b/src/rom_8011DC0.c @@ -1577,7 +1577,7 @@ void sub_80140E0(u8 taskId) for (i = 0; i < GetLinkPlayerCount(); i++) { recvBuff = gBlockRecvBuffer[i]; - sub_80C3120(&gTrainerCards[i], recvBuff, gLinkPlayers[i].version); + CopyTrainerCardData(&gTrainerCards[i], recvBuff, gLinkPlayers[i].version); } if (GetLinkPlayerCount() == 2) @@ -1607,7 +1607,7 @@ void sub_80141A4(void) break; case 1: if (!FuncIsActiveTask(sub_80140E0)) - TrainerCard_ShowLinkCard(GetMultiplayerId() ^ 1, CB2_ReturnToField); + ShowTrainerCardInLink(GetMultiplayerId() ^ 1, CB2_ReturnToField); break; } diff --git a/src/start_menu.c b/src/start_menu.c index 34d37e995..6b4b0e775 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -9,6 +9,7 @@ #include "strings.h" #include "bg.h" #include "field_effect.h" +#include "party_menu.h" #include "task.h" #include "overworld.h" #include "link.h" @@ -30,6 +31,7 @@ #include "scanline_effect.h" #include "text_window.h" #include "load_save.h" +#include "trainer_card.h" #include "international_string_util.h" #include "constants/songs.h" #include "field_player_avatar.h" @@ -89,11 +91,9 @@ extern void var_800D_set_xB(void); extern void sub_808B864(void); extern void CB2_Pokedex(void); extern void PlayRainSoundEffect(void); -extern void CB2_PartyMenuFromStartMenu(void); extern void CB2_PokeNav(void); -extern void sub_80C4DDC(void (*)(void)); +extern void ShowPlayerTrainerCard(void (*)(void)); extern void sub_80C51C4(void (*)(void)); -extern void TrainerCard_ShowLinkCard(u8, void (*)(void)); extern void ScriptUnfreezeEventObjects(void); extern void sub_81A9EC8(void); extern void save_serialize_map(void); @@ -468,21 +468,14 @@ static bool32 InitStartMenuStep(void) break; case 3: if (GetSafariZoneFlag()) - { ShowSafariBallsWindow(); - } if (InBattlePyramid()) - { ShowPyramidFloorWindow(); - } sUnknown_02037619[0]++; break; case 4: - if (!PrintStartMenuActions(&sUnknown_02037619[1], 2)) - { - break; - } - sUnknown_02037619[0]++; + if (PrintStartMenuActions(&sUnknown_02037619[1], 2)) + sUnknown_02037619[0]++; break; case 5: sStartMenuCursorPos = sub_81983AC(GetStartMenuWindowId(), 1, 0, 9, 16, sNumStartMenuActions, sStartMenuCursorPos); @@ -497,15 +490,14 @@ static void InitStartMenu(void) { sUnknown_02037619[0] = 0; sUnknown_02037619[1] = 0; - while (!InitStartMenuStep()); + while (!InitStartMenuStep()) + ; } static void StartMenuTask(u8 taskId) { if (InitStartMenuStep() == TRUE) - { SwitchTaskToFollowupFunc(taskId); - } } static void CreateStartMenuTask(TaskFunc followupFunc) @@ -544,18 +536,14 @@ void sub_809FA34(u8 taskId) // Referenced in field_screen.s and rom_8011DC0.s { case 0: if (InUnionRoom() == TRUE) - { var_800D_set_xB(); - } gMenuCallback = HandleStartMenuInput; task->data[0]++; break; case 1: if (gMenuCallback() == TRUE) - { DestroyTask(taskId); - } break; } } @@ -591,9 +579,8 @@ static bool8 HandleStartMenuInput(void) PlaySE(SE_SELECT); if (sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void == StartMenuPokedexCallback) { - if (GetNationalPokedexCount(0) == 0) { + if (GetNationalPokedexCount(0) == 0) return FALSE; - } } gMenuCallback = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void; @@ -689,17 +676,11 @@ static bool8 StartMenuPlayerNameCallback(void) CleanupOverworldWindowsAndTilemaps(); if (is_c1_link_related_active() || InUnionRoom()) - { - sub_80C4DDC(CB2_ReturnToFieldWithOpenMenu); // Display trainer card - } + ShowPlayerTrainerCard(CB2_ReturnToFieldWithOpenMenu); // Display trainer card else if (FlagGet(FLAG_SYS_FRONTIER_PASS)) - { sub_80C51C4(CB2_ReturnToFieldWithOpenMenu); // Display frontier pass - } else - { - sub_80C4DDC(CB2_ReturnToFieldWithOpenMenu); // Display trainer card - } + ShowPlayerTrainerCard(CB2_ReturnToFieldWithOpenMenu); // Display trainer card return TRUE; } @@ -710,9 +691,7 @@ static bool8 StartMenuPlayerNameCallback(void) static bool8 StartMenuSaveCallback(void) { if (InBattlePyramid()) - { RemoveExtraStartMenuWindows(); - } gMenuCallback = SaveStartCallback; // Display save menu @@ -758,7 +737,7 @@ static bool8 StartMenuLinkModePlayerNameCallback(void) { PlayRainSoundEffect(); CleanupOverworldWindowsAndTilemaps(); - TrainerCard_ShowLinkCard(gUnknown_03005DB4, CB2_ReturnToFieldWithOpenMenu); + ShowTrainerCardInLink(gUnknown_03005DB4, CB2_ReturnToFieldWithOpenMenu); return TRUE; } diff --git a/src/trainer_card.c b/src/trainer_card.c index 26a78ca08..816d3bf25 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -8,15 +8,13 @@ #include "link.h" #include "bg.h" #include "sound.h" -#include "constants/songs.h" #include "overworld.h" #include "menu.h" #include "text.h" -#include "constants/flags.h" #include "event_data.h" -#include "constants/game_stat.h" -#include "constants/battle_frontier.h" +#include "easy_chat.h" #include "money.h" +#include "strings.h" #include "string_util.h" #include "trainer_card.h" #include "gpu_regs.h" @@ -24,174 +22,41 @@ #include "pokedex.h" #include "graphics.h" #include "pokemon_icon.h" +#include "trainer_pokemon_sprites.h" #include "script_pokemon_util_80F87D8.h" +#include "constants/songs.h" +#include "constants/flags.h" +#include "constants/game_stat.h" +#include "constants/battle_frontier.h" -//external functions -extern u8 sub_80D30A0(u16); -extern void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 bTone); -extern void TintPalette_SepiaTone(u16 *palette, u16 count); - -//gfx -extern const u32 gUnknown_08DD2AE0[]; -extern const u32 gUnknown_08DD21B0[]; -extern const u32 gUnknown_08DD2D30[]; -extern const u32 gUnknown_08DD2010[]; -extern const u32 gUnknown_08DD2B78[]; -extern const u32 gUnknown_08DD228C[]; -extern const u32 gUnknown_08DD2E5C[]; -extern const u32 gUnknown_0856F5CC[]; -extern const u32 gUnknown_0856F814[]; -extern const u32 gEmeraldTrainerCard_Gfx[]; -extern const u32 gFireRedTrainerCard_Gfx[]; -extern const u32 gUnknown_0856F018[]; -extern const u32 gUnknown_08DD1F78[]; - -//strings -extern const u8 gText_WaitingTrainerFinishReading[]; -extern const u8 gText_TrainerCardName[]; -extern const u8 gText_TrainerCardIDNo[]; -extern const u8 gText_TrainerCardMoney[]; -extern const u8 gText_PokedollarVar1[]; -extern const u8 gText_EmptyString6[]; -extern const u8 gText_TrainerCardPokedex[]; -extern const u8 gText_TrainerCardTime[]; -extern const u8 gText_Colon2[]; -extern const u8 gText_Var1sTrainerCard[]; -extern const u8 gText_HallOfFameDebut[]; -extern const u8 gText_WinsLosses[]; -extern const u8 gText_PokemonTrades[]; -extern const u8 gText_BerryCrush[]; -extern const u8 gText_UnionTradesAndBattles[]; -extern const u8 gText_Var1DarkGreyShadowLightGrey[]; -extern const u8 gText_PokeblocksWithFriends[]; -extern const u8 gText_WonContestsWFriends[]; -extern const u8 gText_WSlashStraightSlash[]; -extern const u8 gText_Var1DarkLightGreyBP[]; -extern const u8 gText_BattleTower[]; -extern const u8 gText_BattlePtsWon[]; - -//const rom data to be moved from data/trainer_card.s to this file -extern const struct BgTemplate gUnknown_0856FAB4[4]; -extern const struct WindowTemplate gUnknown_0856FAC4[]; -extern const u8 gUnknown_0856FB0C[]; -extern const u8* gUnknown_0856FB40[]; -extern const u8 gUnknown_0856FB48[]; -extern const u8 gUnknown_0856FB4A[]; -extern const u8 gUnknown_0856FB4C[]; -extern const u8 gUnknown_0856FB55[]; -extern const u8 gUnknown_0856FB57[]; -extern const u8 gUnknown_0856FB0F[]; -extern const u8* gUnknown_0856FB5C[]; -extern const u8 gUnknown_0856FB68[6]; -extern const u8 gUnknown_0856FB6E[6]; -extern const u8 gUnknown_0856FB74[4]; -extern const u8 gUnknown_0856F54C[]; -extern const u8 gUnknown_0856F56C[]; -extern const u8 gUnknown_0856F58C[]; -extern const u8 gUnknown_0856F5AC[]; -extern const u8 gUnknown_0856F4EC[]; -extern const u8 gUnknown_0856F4AC[]; -extern const u8 gUnknown_0856F50C[]; -extern const u8 gUnknown_0856F4CC[]; -extern const u8 gUnknown_0856F52C[]; -extern const u8* gEmeraldTrainerCardStarPals[]; -extern const u8* gFireRedTrainerCardStarPals[]; -extern const u8 gUnknown_0856FB78[]; -extern bool8 (*const gUnknown_0856FB28[])(struct Task *); +enum +{ + CARD_TYPE_FR, + CARD_TYPE_RUBY, + CARD_TYPE_EMERALD, +}; -//this file's functions -/*static*/ void sub_80C2690(void); -/*static*/ void sub_80C26D4(void); -/*static*/ void sub_80C48C8(void); -/*static*/ void sub_80C2710(void); -/*static*/ void sub_80C2728(u8 task); -/*static*/ bool8 PrintAllOnCardPage1(void); -/*static*/ void sub_80C438C(u8); -/*static*/ void sub_80C4FF0(void); -/*static*/ void sub_80C4550(u16*); -/*static*/ void sub_80C45C0(u16*); -/*static*/ void sub_80C4630(void); -/*static*/ void PrintTimeOnCard(void); -/*static*/ void sub_80C4918(void); -/*static*/ bool8 sub_80C4940(void); -/*static*/ bool8 sub_80C2AD8(void); -/*static*/ void sub_80C2C80(void); -/*static*/ u32 GetCappedGameStat(u8 statId, u32 maxValue); -/*static*/ bool8 HasAllFrontierSymbols(void); -/*static*/ u32 sub_80C2E40(void); -/*static*/ u8 sub_80C2E84(struct TrainerCard*); -/*static*/ u16 GetCaughtMonsCount(void); -/*static*/ void SetPlayerCardData(struct TrainerCard*, u8); -/*static*/ void sub_80C3020(struct TrainerCard*); -/*static*/ u8 sub_80C4FCC(u8); -/*static*/ void sub_80C3190(void); -/*static*/ void sub_80C3278(void); -/*static*/ void sub_80C334C(void); -/*static*/ void sub_80C3388(void); -/*static*/ void sub_80C3404(void); -/*static*/ void sub_80C3414(void); -/*static*/ void sub_80C4EE4(void); -/*static*/ void PrintNameOnCard(void); -/*static*/ void PrintIdOnCard(void); -/*static*/ void PrintMoneyOnCard(void); -/*static*/ void PrintPokedexOnCard(void); -/*static*/ void PrintProfilePhraseOnCard(void); -/*static*/ bool8 PrintStringsOnCardPage2(void); -/*static*/ void sub_80C3B50(void); -/*static*/ void PrintHofDebutStringOnCard(void); -/*static*/ void PrintWinsLossesStringOnCard(void); -/*static*/ void PrintTradesStringOnCard(void); -/*static*/ void PrintBerryCrushStringOnCard(void); -/*static*/ void PrintPokeblockStringOnCard(void); -/*static*/ void PrintUnionStringOnCard(void); -/*static*/ void PrintContestStringOnCard(void); -/*static*/ void sub_80C4140(void); -/*static*/ void PrintBattleFacilityStringOnCard(void); -/*static*/ void sub_80C42A4(void); -/*static*/ void PrintAllVariableNumsOnCardPage2(void); -/*static*/ void PrintNameOnCard2(void); -/*static*/ void PrintHofTimeOnCard(void); -/*static*/ void PrintLinkResultsNumsOnCard(void); -/*static*/ void PrintTradesNumOnCard(void); -/*static*/ void PrintBerryCrushNumOnCard(void); -/*static*/ void PrintUnionNumOnCard(void); -/*static*/ void PrintPokeblocksNumOnCard(void); -/*static*/ void PrintContestNumOnCard(void); -/*static*/ void PrintBattleFacilityNumsOnCard(void); -/*static*/ void sub_80C3C34(u8 top, const u8* str1, u8* str2, const u8* color); -/*static*/ void sub_80C4330(void); -/*static*/ u8 sub_80C43A8(void); -/*static*/ void sub_80C474C(void); -/*static*/ void sub_80C4960(u8); -/*static*/ bool8 sub_80C4998(struct Task* task); -/*static*/ bool8 sub_80C49D8(struct Task* task); -/*static*/ void sub_80C32EC(u16); -void sub_80C41D8(void); - -extern struct UnknownStruct +struct TrainerCardData { u8 var_0; - u8 var_1; - u8 var_2; - u8 var_3; + u8 printState; + u8 gfxLoadState; + u8 bgPalLoadState; u8 var_4; - u8 var_5; + bool8 isLink; u8 var_6; u8 var_7; u8 var_8; - u8 var_9; - u8 var_A; - u8 var_B; - u8 var_C; - u8 var_D; + bool8 allowDMACopy; + bool8 hasPokedex; + bool8 hasHofResult; + bool8 hasLinkResults; + bool8 hasBattleTowerWins; u8 var_E; u8 var_F; - u8 var_10; + bool8 hasTrades; u8 badgeCount[8]; - u8 var_19[0xD]; - u8 var_26[0xD]; - u8 var_33[0xD]; - u8 var_40[0xD]; + u8 var_19[4][0xD]; u8 var_4D[0x46]; u8 var_93[0x46]; u8 var_D9[0x8C]; @@ -202,17 +67,17 @@ extern struct UnknownStruct u8 var_34F[0x46]; u8 var_395[0x46]; u8 var_3DB[0x46]; - u8 var_421[0x47]; + u8 var_421[0x46]; u16 var_468[0x60]; s8 var_528; u8 var_529; - u8 var_52A; - u8 var_52B; + u8 cardType; + bool8 isHoenn; u16 var_52C; void (*callback2)(void); - struct TrainerCard var_534; + struct TrainerCard trainerCard; u16 var_598[0x4B0 / 2]; - u8 var_A48[0x4B0]; + u16 var_A48[0x4B0 / 2]; u16 var_EF8[0x4B0 / 2]; u8 var_13A8[0x400]; u8 var_17A8[0x200]; @@ -220,20 +85,237 @@ extern struct UnknownStruct u16 var_3CA8[0x2000 / 2]; u16 var_5CA8[0x2000 / 2]; u16 var_7CA8; - u8 var_7CAA; -}* gUnknown_02039CE8; + u8 language; +}; + +//external functions +extern u8 sub_80D30A0(u16); +extern void sub_80C5868(void); -void sub_80C2690(void) +// EWRAM +EWRAM_DATA static struct TrainerCardData *sData = NULL; + +//this file's functions +static void VblankCb_TrainerCard(void); +static void HblankCb_TrainerCard(void); +static void sub_80C48C8(void); +static void CB2_TrainerCard(void); +static void CloseTrainerCard(u8 task); +static bool8 PrintAllOnCardPage1(void); +static void sub_80C438C(u8); +static void sub_80C4FF0(void); +static void sub_80C4550(u16*); +static void sub_80C45C0(u16*); +static void sub_80C4630(void); +static void PrintTimeOnCard(void); +static void sub_80C4918(void); +static bool8 sub_80C4940(void); +static bool8 LoadCardGfx(void); +static void CB2_InitTrainerCard(void); +static u32 GetCappedGameStat(u8 statId, u32 maxValue); +static bool8 HasAllFrontierSymbols(void); +static u8 GetRubyTrainerStars(struct TrainerCard*); +static u16 GetCaughtMonsCount(void); +static void SetPlayerCardData(struct TrainerCard*, u8); +static void sub_80C3020(struct TrainerCard*); +static u8 VersionToCardType(u8); +static void SetDataFromTrainerCard(void); +static void HandleGpuRegs(void); +static void ResetGpuRegs(void); +static void InitBgsAndWindows(void); +static void SetTrainerCardCb2(void); +static void sub_80C3414(void); +static void sub_80C4EE4(void); +static u8 GetSetCardType(void); +static void PrintNameOnCard(void); +static void PrintIdOnCard(void); +static void PrintMoneyOnCard(void); +static void PrintPokedexOnCard(void); +static void PrintProfilePhraseOnCard(void); +static bool8 PrintStringsOnCardPage2(void); +static void sub_80C3B50(void); +static void PrintHofDebutStringOnCard(void); +static void PrintWinsLossesStringOnCard(void); +static void PrintTradesStringOnCard(void); +static void PrintBerryCrushStringOnCard(void); +static void PrintPokeblockStringOnCard(void); +static void PrintUnionStringOnCard(void); +static void PrintContestStringOnCard(void); +static void sub_80C4140(void); +static void PrintBattleFacilityStringOnCard(void); +static void sub_80C42A4(void); +static void PrintAllVariableNumsOnCardPage2(void); +static void PrintNameOnCard2(void); +static void PrintHofTimeOnCard(void); +static void PrintLinkResultsNumsOnCard(void); +static void PrintTradesNumOnCard(void); +static void PrintBerryCrushNumOnCard(void); +static void PrintUnionNumOnCard(void); +static void PrintPokeblocksNumOnCard(void); +static void PrintContestNumOnCard(void); +static void PrintBattleFacilityNumsOnCard(void); +static void PrintString(u8 top, const u8* str1, u8* str2, const u8* color); +static void sub_80C4330(void); +static u8 SetCardBgsAndPals(void); +static void sub_80C474C(void); +static void sub_80C4960(u8); +static bool8 sub_80C4998(struct Task* task); +static bool8 sub_80C49D8(struct Task* task); +static bool8 sub_80C4B08(struct Task* task); +static bool8 sub_80C4C1C(struct Task* task); +static bool8 sub_80C4C84(struct Task* task); +static bool8 sub_80C4DB0(struct Task* task); +static void sub_80C32EC(u16); +static void sub_80C41D8(void); +static void sub_80C6D80(const u8 *, u8 *, u8, u8, u8); + +// const rom data +static const u32 gUnknown_0856F018[] = INCBIN_U32("graphics/trainer_card/stickers_fr.4bpp.lz"); +static const u16 gUnknown_0856F18C[] = INCBIN_U16("graphics/trainer_card/unknown_56F18C.gbapal"); +static const u16 gEmeraldTrainerCard1Star_Pal[] = INCBIN_U16("graphics/trainer_card/one_star.gbapal"); +static const u16 gFireRedTrainerCard1Star_Pal[] = INCBIN_U16("graphics/trainer_card/one_star_fr.gbapal"); +static const u16 gEmeraldTrainerCard2Star_Pal[] = INCBIN_U16("graphics/trainer_card/two_stars.gbapal"); +static const u16 gFireRedTrainerCard2Star_Pal[] = INCBIN_U16("graphics/trainer_card/two_stars_fr.gbapal"); +static const u16 gEmeraldTrainerCard3Star_Pal[] = INCBIN_U16("graphics/trainer_card/three_stars.gbapal"); +static const u16 gFireRedTrainerCard3Star_Pal[] = INCBIN_U16("graphics/trainer_card/three_stars_fr.gbapal"); +static const u16 gEmeraldTrainerCard4Star_Pal[] = INCBIN_U16("graphics/trainer_card/four_stars.gbapal"); +static const u16 gFireRedTrainerCard4Star_Pal[] = INCBIN_U16("graphics/trainer_card/four_stars_fr.gbapal"); +static const u16 gUnknown_0856F4AC[] = INCBIN_U16("graphics/trainer_card/female_bg.gbapal"); +static const u16 gUnknown_0856F4CC[] = INCBIN_U16("graphics/trainer_card/female_bg_fr.gbapal"); +static const u16 gUnknown_0856F4EC[] = INCBIN_U16("graphics/trainer_card/badges.gbapal"); +static const u16 gUnknown_0856F50C[] = INCBIN_U16("graphics/trainer_card/badges_fr.gbapal"); +static const u16 gUnknown_0856F52C[] = INCBIN_U16("graphics/trainer_card/gold.gbapal"); +static const u16 gUnknown_0856F54C[] = INCBIN_U16("graphics/trainer_card/stickers_fr1.gbapal"); +static const u16 gUnknown_0856F56C[] = INCBIN_U16("graphics/trainer_card/stickers_fr2.gbapal"); +static const u16 gUnknown_0856F58C[] = INCBIN_U16("graphics/trainer_card/stickers_fr3.gbapal"); +static const u16 gUnknown_0856F5AC[] = INCBIN_U16("graphics/trainer_card/stickers_fr4.gbapal"); +static const u32 gUnknown_0856F5CC[] = INCBIN_U32("graphics/trainer_card/badges.4bpp.lz"); +static const u32 gUnknown_0856F814[] = INCBIN_U32("graphics/trainer_card/badges_fr.4bpp.lz"); + +static const struct BgTemplate gUnknown_0856FAB4[4] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 27, + .screenSize = 2, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 2, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 192 + }, +}; + +static const struct WindowTemplate gUnknown_0856FAC4[] = +{ + { + .bg = 1, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 27, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x253, + }, + { + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 28, + .height = 18, + .paletteNum = 15, + .baseBlock = 0x1, + }, + { + .bg = 3, + .tilemapLeft = 19, + .tilemapTop = 5, + .width = 9, + .height = 10, + .paletteNum = 8, + .baseBlock = 0x150, + }, + DUMMY_WIN_TEMPLATE +}; + +static const u16 *const gEmeraldTrainerCardStarPals[] = +{ + gEmeraldTrainerCard0Star_Pal, + gEmeraldTrainerCard1Star_Pal, + gEmeraldTrainerCard2Star_Pal, + gEmeraldTrainerCard3Star_Pal, + gEmeraldTrainerCard4Star_Pal, +}; + +static const u16 *const gFireRedTrainerCardStarPals[] = +{ + gFireRedTrainerCard0Star_Pal, + gFireRedTrainerCard1Star_Pal, + gFireRedTrainerCard2Star_Pal, + gFireRedTrainerCard3Star_Pal, + gFireRedTrainerCard4Star_Pal, +}; + +static const u8 gUnknown_0856FB0C[] = {0, 2, 3}; +static const u8 gUnknown_0856FB0F[] = {0, 4, 5}; +static const u8 gUnknown_0856FB12[6] = {0}; + +static const u8 gUnknown_0856FB18[][2][2] = +{ + {{0xD, 4}, {0xD, 4}}, + {{1, 0}, {1, 0}}, +}; + +static const u8 gUnknown_0856FB20[][2] = {{0x4E, 0x4F}, {0x50, 0x51}, {0x3C, 0x3F}}; + +static bool8 (*const gUnknown_0856FB28[])(struct Task *) = +{ + sub_80C4998, + sub_80C49D8, + sub_80C4B08, + sub_80C4C1C, + sub_80C4C84, + sub_80C4DB0, +}; + +// code +static void VblankCb_TrainerCard(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); sub_80C48C8(); - if (gUnknown_02039CE8->var_9) + if (sData->allowDMACopy) DmaCopy16(3, &gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 0x140); } -void sub_80C26D4(void) +static void HblankCb_TrainerCard(void) { u16 backup; u16 bgVOffset; @@ -245,7 +327,7 @@ void sub_80C26D4(void) REG_IME = backup; } -void sub_80C2710(void) +static void CB2_TrainerCard(void) { RunTasks(); AnimateSprites(); @@ -253,51 +335,50 @@ void sub_80C2710(void) UpdatePaletteFade(); } -void sub_80C2728(u8 taskId) +static void CloseTrainerCard(u8 taskId) { - SetMainCallback2(gUnknown_02039CE8->callback2); + SetMainCallback2(sData->callback2); FreeAllWindowBuffers(); - Free(gUnknown_02039CE8); - gUnknown_02039CE8 = NULL; + FREE_AND_SET_NULL(sData); DestroyTask(taskId); } -void sub_80C2760(u8 taskId) +static void sub_80C2760(u8 taskId) { - switch (gUnknown_02039CE8->var_0) + switch (sData->var_0) { case 0: if (!IsDma3ManagerBusyWithBgCopy()) { FillWindowPixelBuffer(1, 0); - gUnknown_02039CE8->var_0++; + sData->var_0++; } break; case 1: if (PrintAllOnCardPage1()) - gUnknown_02039CE8->var_0++; + sData->var_0++; break; case 2: sub_80C438C(1); - gUnknown_02039CE8->var_0++; + sData->var_0++; break; case 3: FillWindowPixelBuffer(2, 0); sub_80C4FF0(); sub_80C438C(2); - gUnknown_02039CE8->var_0++; + sData->var_0++; break; case 4: - sub_80C4550(gUnknown_02039CE8->var_EF8); - gUnknown_02039CE8->var_0++; + sub_80C4550(sData->var_EF8); + sData->var_0++; break; case 5: - sub_80C45C0(gUnknown_02039CE8->var_598); - gUnknown_02039CE8->var_0++; + sub_80C45C0(sData->var_598); + sData->var_0++; break; case 6: sub_80C4630(); - gUnknown_02039CE8->var_0++; + sData->var_0++; break; case 7: if (gWirelessCommType == 1 && gReceivedRemoteLinkPlayers == TRUE) @@ -305,45 +386,45 @@ void sub_80C2760(u8 taskId) sub_800E0E8(); CreateWirelessStatusIndicatorSprite(230, 150); } - BlendPalettes(0xFFFFFFFF, 16, gUnknown_02039CE8->var_52C); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, gUnknown_02039CE8->var_52C); - SetVBlankCallback(sub_80C2690); - gUnknown_02039CE8->var_0++; + BlendPalettes(0xFFFFFFFF, 16, sData->var_52C); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, sData->var_52C); + SetVBlankCallback(VblankCb_TrainerCard); + sData->var_0++; break; case 8: if (!UpdatePaletteFade() && !IsDma3ManagerBusyWithBgCopy()) { PlaySE(SE_RG_CARD3); - gUnknown_02039CE8->var_0 = 10; + sData->var_0 = 10; } break; case 9: if (!IsSEPlaying()) - gUnknown_02039CE8->var_0++; + sData->var_0++; break; case 10: - if (!gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_529) + if (!gReceivedRemoteLinkPlayers && sData->var_529) { PrintTimeOnCard(); sub_80C438C(1); - gUnknown_02039CE8->var_529 = 0; + sData->var_529 = 0; } if (gMain.newKeys & A_BUTTON) { sub_80C4918(); PlaySE(SE_RG_CARD1); - gUnknown_02039CE8->var_0 = 12; + sData->var_0 = 12; } else if (gMain.newKeys & B_BUTTON) { - if (gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE) + if (gReceivedRemoteLinkPlayers && sData->isLink && InUnionRoom() == TRUE) { - gUnknown_02039CE8->var_0 = 15; + sData->var_0 = 15; } else { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, gUnknown_02039CE8->var_52C); - gUnknown_02039CE8->var_0 = 14; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, sData->var_52C); + sData->var_0 = 14; } } break; @@ -351,38 +432,38 @@ void sub_80C2760(u8 taskId) if (sub_80C4940() && sub_8087598() != TRUE) { PlaySE(SE_RG_CARD3); - gUnknown_02039CE8->var_0 = 11; + sData->var_0 = 11; } break; case 11: if (gMain.newKeys & B_BUTTON) { - if (gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE) + if (gReceivedRemoteLinkPlayers && sData->isLink && InUnionRoom() == TRUE) { - gUnknown_02039CE8->var_0 = 15; + sData->var_0 = 15; } else if (gReceivedRemoteLinkPlayers) { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, gUnknown_02039CE8->var_52C); - gUnknown_02039CE8->var_0 = 14; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, sData->var_52C); + sData->var_0 = 14; } else { sub_80C4918(); - gUnknown_02039CE8->var_0 = 13; + sData->var_0 = 13; PlaySE(SE_RG_CARD1); } } else if (gMain.newKeys & A_BUTTON) { - if (gReceivedRemoteLinkPlayers && gUnknown_02039CE8->var_5 && InUnionRoom() == TRUE) + if (gReceivedRemoteLinkPlayers && sData->isLink && InUnionRoom() == TRUE) { - gUnknown_02039CE8->var_0 = 15; + sData->var_0 = 15; } else { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, gUnknown_02039CE8->var_52C); - gUnknown_02039CE8->var_0 = 14; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, sData->var_52C); + sData->var_0 = 14; } } break; @@ -391,91 +472,91 @@ void sub_80C2760(u8 taskId) NewMenuHelpers_DrawDialogueFrame(0, 1); AddTextPrinterParameterized(0, 1, gText_WaitingTrainerFinishReading, 0, 1, 255, 0); CopyWindowToVram(0, 3); - gUnknown_02039CE8->var_0 = 16; + sData->var_0 = 16; break; case 16: if (!gReceivedRemoteLinkPlayers) { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, gUnknown_02039CE8->var_52C); - gUnknown_02039CE8->var_0 = 14; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, sData->var_52C); + sData->var_0 = 14; } break; case 14: if (!UpdatePaletteFade()) - sub_80C2728(taskId); + CloseTrainerCard(taskId); break; case 13: if (sub_80C4940() && sub_8087598() != TRUE) { - gUnknown_02039CE8->var_0 = 10; + sData->var_0 = 10; PlaySE(SE_RG_CARD3); } break; } } -bool8 sub_80C2AD8(void) +static bool8 LoadCardGfx(void) { - switch (gUnknown_02039CE8->var_2) + switch (sData->gfxLoadState) { case 0: - if (gUnknown_02039CE8->var_52A) - LZ77UnCompWram(gUnknown_08DD1F78, gUnknown_02039CE8->var_EF8); + if (sData->cardType != CARD_TYPE_FR) + LZ77UnCompWram(gUnknown_08DD1F78, sData->var_EF8); else - LZ77UnCompWram(gUnknown_08DD2AE0, gUnknown_02039CE8->var_EF8); + LZ77UnCompWram(gUnknown_08DD2AE0, sData->var_EF8); break; case 1: - if (gUnknown_02039CE8->var_52A) - LZ77UnCompWram(gUnknown_08DD21B0, gUnknown_02039CE8->var_A48); + if (sData->cardType != CARD_TYPE_FR) + LZ77UnCompWram(gUnknown_08DD21B0, sData->var_A48); else - LZ77UnCompWram(gUnknown_08DD2D30, gUnknown_02039CE8->var_A48); + LZ77UnCompWram(gUnknown_08DD2D30, sData->var_A48); break; case 2: - if (!gUnknown_02039CE8->var_5) + if (!sData->isLink) { - if (gUnknown_02039CE8->var_52A) - LZ77UnCompWram(gUnknown_08DD2010, gUnknown_02039CE8->var_598); + if (sData->cardType != CARD_TYPE_FR) + LZ77UnCompWram(gUnknown_08DD2010, sData->var_598); else - LZ77UnCompWram(gUnknown_08DD2B78, gUnknown_02039CE8->var_598); + LZ77UnCompWram(gUnknown_08DD2B78, sData->var_598); } else { - if (gUnknown_02039CE8->var_52A) - LZ77UnCompWram(gUnknown_08DD228C, gUnknown_02039CE8->var_598); + if (sData->cardType != CARD_TYPE_FR) + LZ77UnCompWram(gUnknown_08DD228C, sData->var_598); else - LZ77UnCompWram(gUnknown_08DD2E5C, gUnknown_02039CE8->var_598); + LZ77UnCompWram(gUnknown_08DD2E5C, sData->var_598); } break; case 3: - if (gUnknown_02039CE8->var_52A) - LZ77UnCompWram(gUnknown_0856F5CC, gUnknown_02039CE8->var_13A8); + if (sData->cardType != CARD_TYPE_FR) + LZ77UnCompWram(gUnknown_0856F5CC, sData->var_13A8); else - LZ77UnCompWram(gUnknown_0856F814, gUnknown_02039CE8->var_13A8); + LZ77UnCompWram(gUnknown_0856F814, sData->var_13A8); break; case 4: - if (gUnknown_02039CE8->var_52A) - LZ77UnCompWram(gEmeraldTrainerCard_Gfx, gUnknown_02039CE8->var_19A8); + if (sData->cardType != CARD_TYPE_FR) + LZ77UnCompWram(gEmeraldTrainerCard_Gfx, sData->var_19A8); else - LZ77UnCompWram(gFireRedTrainerCard_Gfx, gUnknown_02039CE8->var_19A8); + LZ77UnCompWram(gFireRedTrainerCard_Gfx, sData->var_19A8); break; case 5: - if (!gUnknown_02039CE8->var_52A) - LZ77UnCompWram(gUnknown_0856F018, gUnknown_02039CE8->var_17A8); + if (sData->cardType == CARD_TYPE_FR) + LZ77UnCompWram(gUnknown_0856F018, sData->var_17A8); break; default: - gUnknown_02039CE8->var_2 = 0; + sData->gfxLoadState = 0; return TRUE; } - gUnknown_02039CE8->var_2++; + sData->gfxLoadState++; return FALSE; } -void sub_80C2C80(void) +static void CB2_InitTrainerCard(void) { switch (gMain.state) { case 0: - sub_80C334C(); + ResetGpuRegs(); sub_80C3414(); gMain.state++; break; @@ -484,7 +565,7 @@ void sub_80C2C80(void) gMain.state++; break; case 2: - if (!gUnknown_02039CE8->var_52C) + if (!sData->var_52C) DmaClear16(3, (void *)PLTT, PLTT_SIZE); gMain.state++; break; @@ -494,7 +575,7 @@ void sub_80C2C80(void) ResetPaletteFade(); gMain.state++; case 4: - sub_80C3388(); + InitBgsAndWindows(); gMain.state++; break; case 5: @@ -502,7 +583,7 @@ void sub_80C2C80(void) gMain.state++; break; case 6: - if (sub_80C2AD8() == TRUE) + if (LoadCardGfx() == TRUE) gMain.state++; break; case 7: @@ -510,7 +591,7 @@ void sub_80C2C80(void) gMain.state++; break; case 8: - sub_80C3278(); + HandleGpuRegs(); gMain.state++; break; case 9: @@ -518,23 +599,23 @@ void sub_80C2C80(void) gMain.state++; break; case 10: - if (sub_80C43A8() == TRUE) + if (SetCardBgsAndPals() == TRUE) gMain.state++; break; default: - sub_80C3404(); + SetTrainerCardCb2(); break; } } -u32 GetCappedGameStat(u8 statId, u32 maxValue) +static u32 GetCappedGameStat(u8 statId, u32 maxValue) { u32 statValue = GetGameStat(statId); return min(maxValue, statValue); } -bool8 HasAllFrontierSymbols(void) +static bool8 HasAllFrontierSymbols(void) { u8 i; for (i = 0; i < NUM_FRONTIER_FACILITIES; i++) @@ -545,7 +626,7 @@ bool8 HasAllFrontierSymbols(void) return TRUE; } -u32 sub_80C2E40(void) +u32 CountPlayerTrainerStars(void) { u8 stars = 0; @@ -561,7 +642,7 @@ u32 sub_80C2E40(void) return stars; } -u8 sub_80C2E84(struct TrainerCard *trainerCard) +static u8 GetRubyTrainerStars(struct TrainerCard *trainerCard) { u8 stars = 0; @@ -569,7 +650,7 @@ u8 sub_80C2E84(struct TrainerCard *trainerCard) stars++; if (trainerCard->caughtAllHoenn) stars++; - if (trainerCard->battleTowerLosses > 49) + if (trainerCard->battleTowerStraightWins > 49) stars++; if (trainerCard->hasAllPaintings) stars++; @@ -577,7 +658,7 @@ u8 sub_80C2E84(struct TrainerCard *trainerCard) return stars; } -void SetPlayerCardData(struct TrainerCard *trainerCard, u8 arg1) +static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType) { u32 playTime; u8 i; @@ -618,21 +699,22 @@ void SetPlayerCardData(struct TrainerCard *trainerCard, u8 arg1) StringCopy(trainerCard->playerName, gSaveBlock2Ptr->playerName); - switch (arg1) + switch (cardType) { - case 2: + case CARD_TYPE_EMERALD: trainerCard->battleTowerWins = 0; - trainerCard->battleTowerLosses = 0; - case 0: + trainerCard->battleTowerStraightWins = 0; + // Seems like GF got CARD_TYPE_FR and CARD_TYPE_RUBY wrong. + case CARD_TYPE_FR: trainerCard->contestsWithFriends = GetCappedGameStat(GAME_STAT_WON_LINK_CONTEST, 999); trainerCard->pokeblocksWithFriends = GetCappedGameStat(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF); if (CountPlayerContestPaintings() > 4) trainerCard->hasAllPaintings = TRUE; - trainerCard->stars = sub_80C2E84(trainerCard); + trainerCard->stars = GetRubyTrainerStars(trainerCard); break; - case 1: + case CARD_TYPE_RUBY: trainerCard->battleTowerWins = 0; - trainerCard->battleTowerLosses = 0; + trainerCard->battleTowerStraightWins = 0; trainerCard->contestsWithFriends = 0; trainerCard->pokeblocksWithFriends = 0; trainerCard->hasAllPaintings = 0; @@ -641,14 +723,14 @@ void SetPlayerCardData(struct TrainerCard *trainerCard, u8 arg1) } } -void sub_80C3020(struct TrainerCard *trainerCard) +static void sub_80C3020(struct TrainerCard *trainerCard) { memset(trainerCard, 0, sizeof(struct TrainerCard)); - trainerCard->var_38 = 3; - SetPlayerCardData(trainerCard, 2); - trainerCard->var_60 = HasAllFrontierSymbols(); - trainerCard->var_62 = gSaveBlock2Ptr->frontier.field_EBA; - if (trainerCard->var_60) + trainerCard->version = VERSION_EMERALD; + SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD); + trainerCard->hasAllSymbols = HasAllFrontierSymbols(); + trainerCard->frontierBP = gSaveBlock2Ptr->frontier.field_EBA; + if (trainerCard->hasAllSymbols) trainerCard->stars++; if (trainerCard->gender == FEMALE) @@ -660,10 +742,10 @@ void sub_80C3020(struct TrainerCard *trainerCard) void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) { memset(trainerCard, 0, 0x60); - trainerCard->var_38 = 3; - SetPlayerCardData(trainerCard, 2); + trainerCard->version = VERSION_EMERALD; + SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD); trainerCard->var_3A = HasAllFrontierSymbols(); - *((u16*)&trainerCard->var_3C) = gSaveBlock2Ptr->frontier.field_EBA; + *((u16*)&trainerCard->berruCrushPoints) = gSaveBlock2Ptr->frontier.field_EBA; if (trainerCard->var_3A) trainerCard->stars++; @@ -673,70 +755,64 @@ void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) trainerCard->var_4F = gUnknown_08329D54[trainerCard->trainerId % 8]; } -void sub_80C3120(struct TrainerCard *trainerCard, u16 *src, u8 gameVersion) +void CopyTrainerCardData(struct TrainerCard *dst, u16 *src, u8 gameVersion) { - memset(trainerCard, 0, sizeof(struct TrainerCard)); - trainerCard->var_38 = gameVersion; + memset(dst, 0, sizeof(struct TrainerCard)); + dst->version = gameVersion; - switch (sub_80C4FCC(gameVersion)) + switch (VersionToCardType(gameVersion)) { - case 0: - memcpy(trainerCard, src, 0x60); + case CARD_TYPE_FR: + memcpy(dst, src, 0x60); break; - case 1: - memcpy(trainerCard, src, 0x38); + case CARD_TYPE_RUBY: + memcpy(dst, src, 0x38); break; - case 2: - memcpy(trainerCard, src, 0x60); - trainerCard->var_3C = 0; - trainerCard->var_60 = src[29]; - trainerCard->var_62 = src[30]; + case CARD_TYPE_EMERALD: + memcpy(dst, src, 0x60); + dst->berruCrushPoints = 0; + dst->hasAllSymbols = src[29]; + dst->frontierBP = src[30]; break; } } -void sub_80C3190(void) +static void SetDataFromTrainerCard(void) { u8 i; u32 badgeFlag; - gUnknown_02039CE8->var_A = 0; - gUnknown_02039CE8->var_B = 0; - gUnknown_02039CE8->var_C = 0; - gUnknown_02039CE8->var_D = 0; - gUnknown_02039CE8->var_E = 0; - gUnknown_02039CE8->var_F = 0; - gUnknown_02039CE8->var_10 = 0; - memset(gUnknown_02039CE8->badgeCount, 0, sizeof(gUnknown_02039CE8->badgeCount)); - if (gUnknown_02039CE8->var_534.hasPokedex) - gUnknown_02039CE8->var_A++; - - if (gUnknown_02039CE8->var_534.hofDebutHours - || gUnknown_02039CE8->var_534.hofDebutMinutes - || gUnknown_02039CE8->var_534.hofDebutSeconds) - gUnknown_02039CE8->var_B++; - - if (gUnknown_02039CE8->var_534.linkBattleWins || gUnknown_02039CE8->var_534.linkBattleLosses) - gUnknown_02039CE8->var_C++; - if (gUnknown_02039CE8->var_534.pokemonTrades) - gUnknown_02039CE8->var_10++; - if (gUnknown_02039CE8->var_534.battleTowerWins || gUnknown_02039CE8->var_534.battleTowerLosses) - gUnknown_02039CE8->var_D++; - - i = 0; - badgeFlag = FLAG_BADGE01_GET; - while (1) + sData->hasPokedex = FALSE; + sData->hasHofResult = FALSE; + sData->hasLinkResults = FALSE; + sData->hasBattleTowerWins = FALSE; + sData->var_E = 0; + sData->var_F = 0; + sData->hasTrades = FALSE; + memset(sData->badgeCount, 0, sizeof(sData->badgeCount)); + if (sData->trainerCard.hasPokedex) + sData->hasPokedex++; + + if (sData->trainerCard.hofDebutHours + || sData->trainerCard.hofDebutMinutes + || sData->trainerCard.hofDebutSeconds) + sData->hasHofResult++; + + if (sData->trainerCard.linkBattleWins || sData->trainerCard.linkBattleLosses) + sData->hasLinkResults++; + if (sData->trainerCard.pokemonTrades) + sData->hasTrades++; + if (sData->trainerCard.battleTowerWins || sData->trainerCard.battleTowerStraightWins) + sData->hasBattleTowerWins++; + + for (i = 0, badgeFlag = FLAG_BADGE01_GET; badgeFlag <= FLAG_BADGE08_GET; badgeFlag++, i++) { if (FlagGet(badgeFlag)) - gUnknown_02039CE8->badgeCount[i]++; - badgeFlag++; - i++; - if (badgeFlag > FLAG_BADGE08_GET) - break; + sData->badgeCount[i]++; } } -void sub_80C3278(void) +static void HandleGpuRegs(void) { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); ShowBg(0); @@ -755,18 +831,18 @@ void sub_80C3278(void) EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_HBLANK); } -void sub_80C32EC(u16 arg0) +static void sub_80C32EC(u16 arg0) { s8 quotient = (arg0 + 40) / 10; if (quotient <= 4) quotient = 0; - gUnknown_02039CE8->var_528 = quotient; - SetGpuReg(REG_OFFSET_BLDY, gUnknown_02039CE8->var_528); - SetGpuReg(REG_OFFSET_WIN0V, (gUnknown_02039CE8->var_7CA8 * 256) | (160 - gUnknown_02039CE8->var_7CA8)); + sData->var_528 = quotient; + SetGpuReg(REG_OFFSET_BLDY, sData->var_528); + SetGpuReg(REG_OFFSET_WIN0V, (sData->var_7CA8 * 256) | (160 - sData->var_7CA8)); } -void sub_80C334C(void) +static void ResetGpuRegs(void) { SetVBlankCallback(NULL); SetHBlankCallback(NULL); @@ -777,7 +853,7 @@ void sub_80C334C(void) SetGpuReg(REG_OFFSET_BG3CNT, 0); } -void sub_80C3388(void) +static void InitBgsAndWindows(void) { ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, gUnknown_0856FAB4, ARRAY_COUNT(gUnknown_0856FAB4)); @@ -794,23 +870,23 @@ void sub_80C3388(void) sub_81973A4(); } -void sub_80C3404(void) +static void SetTrainerCardCb2(void) { - SetMainCallback2(sub_80C2710); + SetMainCallback2(CB2_TrainerCard); } -void sub_80C3414(void) +static void sub_80C3414(void) { ResetTasks(); ScanlineEffect_Stop(); CreateTask(sub_80C2760, 0); sub_80C4EE4(); - sub_80C3190(); + SetDataFromTrainerCard(); } -bool8 PrintAllOnCardPage1(void) +static bool8 PrintAllOnCardPage1(void) { - switch (gUnknown_02039CE8->var_1) + switch (sData->printState) { case 0: PrintNameOnCard(); @@ -831,16 +907,16 @@ bool8 PrintAllOnCardPage1(void) PrintProfilePhraseOnCard(); break; default: - gUnknown_02039CE8->var_1 = 0; + sData->printState = 0; return TRUE; } - gUnknown_02039CE8->var_1++; + sData->printState++; return FALSE; } -bool8 PrintStringsOnCardPage2(void) +static bool8 PrintStringsOnCardPage2(void) { - switch (gUnknown_02039CE8->var_1) + switch (sData->printState) { case 0: sub_80C3B50(); @@ -870,14 +946,14 @@ bool8 PrintStringsOnCardPage2(void) sub_80C42A4(); break; default: - gUnknown_02039CE8->var_1 = 0; + sData->printState = 0; return TRUE; } - gUnknown_02039CE8->var_1++; + sData->printState++; return FALSE; } -void PrintAllVariableNumsOnCardPage2(void) +static void PrintAllVariableNumsOnCardPage2(void) { PrintNameOnCard2(); PrintHofTimeOnCard(); @@ -890,28 +966,28 @@ void PrintAllVariableNumsOnCardPage2(void) PrintBattleFacilityNumsOnCard(); } -void PrintNameOnCard(void) +static void PrintNameOnCard(void) { u8 buffer[32]; u8* txtPtr; txtPtr = StringCopy(buffer, gText_TrainerCardName); - StringCopy(txtPtr, gUnknown_02039CE8->var_534.playerName); - ConvertInternationalString(txtPtr, gUnknown_02039CE8->var_7CAA); - if (!gUnknown_02039CE8->var_52A) + StringCopy(txtPtr, sData->trainerCard.playerName); + ConvertInternationalString(txtPtr, sData->language); + if (sData->cardType == CARD_TYPE_FR) AddTextPrinterParameterized3(1, 1, 20, 28, gUnknown_0856FB0C, -1, buffer); else AddTextPrinterParameterized3(1, 1, 16, 33, gUnknown_0856FB0C, -1, buffer); } -void PrintIdOnCard(void) +static void PrintIdOnCard(void) { u8 buffer[32]; u8* txtPtr; s32 xPos; u32 top; txtPtr = StringCopy(buffer, gText_TrainerCardIDNo); - ConvertIntToDecimalStringN(txtPtr, gUnknown_02039CE8->var_534.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); - if (!gUnknown_02039CE8->var_52A) + ConvertIntToDecimalStringN(txtPtr, sData->trainerCard.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); + if (sData->cardType == CARD_TYPE_FR) { xPos = GetStringCenterAlignXOffset(1, buffer, 80) + 132; top = 9; @@ -925,19 +1001,19 @@ void PrintIdOnCard(void) AddTextPrinterParameterized3(1, 1, xPos, top, gUnknown_0856FB0C, -1, buffer); } -void PrintMoneyOnCard(void) +static void PrintMoneyOnCard(void) { s32 xOffset; u8 top; - if (!gUnknown_02039CE8->var_52B) + if (!sData->isHoenn) AddTextPrinterParameterized3(1, 1, 20, 56, gUnknown_0856FB0C, -1, gText_TrainerCardMoney); else AddTextPrinterParameterized3(1, 1, 16, 57, gUnknown_0856FB0C, -1, gText_TrainerCardMoney); - ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.money, 0, 6); + ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.money, 0, 6); StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); - if (!gUnknown_02039CE8->var_52B) + if (!sData->isHoenn) { xOffset = GetStringRightAlignXOffset(1, gStringVar4, 144); top = 56; @@ -950,7 +1026,7 @@ void PrintMoneyOnCard(void) AddTextPrinterParameterized3(1, 1, xOffset, top, gUnknown_0856FB0C, -1, gStringVar4); } -u16 GetCaughtMonsCount(void) +static u16 GetCaughtMonsCount(void) { if (IsNationalPokedexEnabled()) return GetNationalPokedexCount(FLAG_GET_CAUGHT); @@ -958,18 +1034,18 @@ u16 GetCaughtMonsCount(void) return GetHoennPokedexCount(FLAG_GET_CAUGHT); } -void PrintPokedexOnCard(void) +static void PrintPokedexOnCard(void) { s32 xOffset; u8 top; if (FlagGet(FLAG_SYS_POKEDEX_GET)) { - if (!gUnknown_02039CE8->var_52B) + if (!sData->isHoenn) AddTextPrinterParameterized3(1, 1, 20, 72, gUnknown_0856FB0C, -1, gText_TrainerCardPokedex); else AddTextPrinterParameterized3(1, 1, 16, 73, gUnknown_0856FB0C, -1,gText_TrainerCardPokedex); - StringCopy(ConvertIntToDecimalStringN(gStringVar4, gUnknown_02039CE8->var_534.caughtMonsCount, 0, 3), gText_EmptyString6); - if (!gUnknown_02039CE8->var_52B) + StringCopy(ConvertIntToDecimalStringN(gStringVar4, sData->trainerCard.caughtMonsCount, 0, 3), gText_EmptyString6); + if (!sData->isHoenn) { xOffset = GetStringRightAlignXOffset(1, gStringVar4, 144); top = 72; @@ -983,22 +1059,24 @@ void PrintPokedexOnCard(void) } } -void PrintTimeOnCard(void) +static const u8 *const gUnknown_0856FB40[] = {gUnknown_0856FB0C, gUnknown_0856FB12}; + +static void PrintTimeOnCard(void) { u16 hours; u16 minutes; s32 width; u32 r7, r4, r10; - if (!gUnknown_02039CE8->var_52B) + if (!sData->isHoenn) AddTextPrinterParameterized3(1, 1, 20, 88, gUnknown_0856FB0C, -1, gText_TrainerCardTime); else AddTextPrinterParameterized3(1, 1, 16, 89, gUnknown_0856FB0C, -1, gText_TrainerCardTime); - if (gUnknown_02039CE8->var_5) + if (sData->isLink) { - hours = gUnknown_02039CE8->var_534.playTimeHours; - minutes = gUnknown_02039CE8->var_534.playTimeMinutes; + hours = sData->trainerCard.playTimeHours; + minutes = sData->trainerCard.playTimeMinutes; } else { @@ -1012,7 +1090,7 @@ void PrintTimeOnCard(void) minutes = 59; width = GetStringWidth(1, gText_Colon2, 0); - if (!gUnknown_02039CE8->var_52B) + if (!sData->isHoenn) { r7 = 144; r4 = 88; @@ -1029,300 +1107,308 @@ void PrintTimeOnCard(void) ConvertIntToDecimalStringN(gStringVar4, hours, 1, 3); AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, -1, gStringVar4); r7 += 18; - AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB40[gUnknown_02039CE8->var_7], -1, gText_Colon2); + AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB40[sData->var_7], -1, gText_Colon2); r7 += width; ConvertIntToDecimalStringN(gStringVar4, minutes, 2, 2); AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, -1, gStringVar4); } -void PrintProfilePhraseOnCard(void) +static const u8 gUnknown_0856FB48[] = {0x71, 0x68}; +static const u8 gUnknown_0856FB4A[] = {0x81, 0x78}; + +static void PrintProfilePhraseOnCard(void) { - if (gUnknown_02039CE8->var_5) + if (sData->isLink) { - AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB48[gUnknown_02039CE8->var_52B], gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_19); - AddTextPrinterParameterized3(1, 1, GetStringWidth(1, gUnknown_02039CE8->var_19, 0) + 14, gUnknown_0856FB48[gUnknown_02039CE8->var_52B], gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_26); - AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB4A[gUnknown_02039CE8->var_52B], gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_33); - AddTextPrinterParameterized3(1, 1, GetStringWidth(1, gUnknown_02039CE8->var_33, 0) + 14, gUnknown_0856FB4A[gUnknown_02039CE8->var_52B], gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_40); + AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB48[sData->isHoenn], gUnknown_0856FB0C, -1, sData->var_19[0]); + AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->var_19[0], 0) + 14, gUnknown_0856FB48[sData->isHoenn], gUnknown_0856FB0C, -1, sData->var_19[1]); + AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB4A[sData->isHoenn], gUnknown_0856FB0C, -1, sData->var_19[2]); + AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->var_19[2], 0) + 14, gUnknown_0856FB4A[sData->isHoenn], gUnknown_0856FB0C, -1, sData->var_19[3]); } } -void PrintNameOnCard2(void) +static void PrintNameOnCard2(void) { - StringCopy(gUnknown_02039CE8->var_4D, gUnknown_02039CE8->var_534.playerName); - ConvertInternationalString(gUnknown_02039CE8->var_4D, gUnknown_02039CE8->var_7CAA); - if (gUnknown_02039CE8->var_52A) + StringCopy(sData->var_4D, sData->trainerCard.playerName); + ConvertInternationalString(sData->var_4D, sData->language); + if (sData->cardType != CARD_TYPE_FR) { - StringCopy(gStringVar1, gUnknown_02039CE8->var_4D); - StringExpandPlaceholders(gUnknown_02039CE8->var_4D, gText_Var1sTrainerCard); + StringCopy(gStringVar1, sData->var_4D); + StringExpandPlaceholders(sData->var_4D, gText_Var1sTrainerCard); } } -void sub_80C3B50(void) +static void sub_80C3B50(void) { - if (!gUnknown_02039CE8->var_52B) - AddTextPrinterParameterized3(1, 1, 136, 9, gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_4D); + if (!sData->isHoenn) + AddTextPrinterParameterized3(1, 1, 136, 9, gUnknown_0856FB0C, -1, sData->var_4D); else - AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, gUnknown_02039CE8->var_4D, 216), 9, gUnknown_0856FB0C, -1, gUnknown_02039CE8->var_4D); + AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, sData->var_4D, 216), 9, gUnknown_0856FB0C, -1, sData->var_4D); } -void PrintHofTimeOnCard(void) +static const u8 gUnknown_0856FB4C[] = {0xfd, 0x02, 0xf0, 0xfd, 0x03, 0xf0, 0xfd, 0x04, 0xff}; + +static void PrintHofTimeOnCard(void) { - if (gUnknown_02039CE8->var_B) + if (sData->hasHofResult) { - ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.hofDebutHours, 1, 3); - ConvertIntToDecimalStringN(gStringVar2, gUnknown_02039CE8->var_534.hofDebutMinutes, 2, 2); - ConvertIntToDecimalStringN(gStringVar3, gUnknown_02039CE8->var_534.hofDebutSeconds, 2, 2); - StringExpandPlaceholders(gUnknown_02039CE8->var_93, gUnknown_0856FB4C); + ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.hofDebutHours, 1, 3); + ConvertIntToDecimalStringN(gStringVar2, sData->trainerCard.hofDebutMinutes, 2, 2); + ConvertIntToDecimalStringN(gStringVar3, sData->trainerCard.hofDebutSeconds, 2, 2); + StringExpandPlaceholders(sData->var_93, gUnknown_0856FB4C); } } -void sub_80C3C34(u8 top, const u8* str1, u8* str2, const u8* color) +static const u8 gUnknown_0856FB55[] = {0x08, 0x10}; +static const u8 gUnknown_0856FB57[] = {0xd8, 0xd8}; + +static void PrintString(u8 top, const u8* str1, u8* str2, const u8* color) { - AddTextPrinterParameterized3(1, 1, gUnknown_0856FB55[gUnknown_02039CE8->var_52B], top * 16 + 33, gUnknown_0856FB0C, -1, str1); - AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, str2, gUnknown_0856FB57[gUnknown_02039CE8->var_52B]), top * 16 + 33, color, -1, str2); + AddTextPrinterParameterized3(1, 1, gUnknown_0856FB55[sData->isHoenn], top * 16 + 33, gUnknown_0856FB0C, -1, str1); + AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, str2, gUnknown_0856FB57[sData->isHoenn]), top * 16 + 33, color, -1, str2); } -void PrintHofDebutStringOnCard(void) +static void PrintHofDebutStringOnCard(void) { - if (gUnknown_02039CE8->var_B) - sub_80C3C34(0, gText_HallOfFameDebut, gUnknown_02039CE8->var_93, gUnknown_0856FB0F); + if (sData->hasHofResult) + PrintString(0, gText_HallOfFameDebut, sData->var_93, gUnknown_0856FB0F); } -void PrintLinkResultsNumsOnCard(void) +static const u8 *const gUnknown_0856FB5C[] = {gText_LinkBattles, gText_LinkCableBattles, gText_LinkBattles}; + +static void PrintLinkResultsNumsOnCard(void) { - if (gUnknown_02039CE8->var_C) + if (sData->hasLinkResults) { - StringCopy(gUnknown_02039CE8->var_D9, gUnknown_0856FB5C[gUnknown_02039CE8->var_52A]); - ConvertIntToDecimalStringN(gUnknown_02039CE8->var_165, gUnknown_02039CE8->var_534.linkBattleWins, 0, 4); - ConvertIntToDecimalStringN(gUnknown_02039CE8->var_1AB, gUnknown_02039CE8->var_534.linkBattleLosses, 0, 4); + StringCopy(sData->var_D9, gUnknown_0856FB5C[sData->cardType]); + ConvertIntToDecimalStringN(sData->var_165, sData->trainerCard.linkBattleWins, 0, 4); + ConvertIntToDecimalStringN(sData->var_1AB, sData->trainerCard.linkBattleLosses, 0, 4); } } -void PrintWinsLossesStringOnCard(void) +static void PrintWinsLossesStringOnCard(void) { - if (gUnknown_02039CE8->var_C) + if (sData->hasLinkResults) { - StringCopy(gStringVar1, gUnknown_02039CE8->var_165); - StringCopy(gStringVar2, gUnknown_02039CE8->var_1AB); + StringCopy(gStringVar1, sData->var_165); + StringCopy(gStringVar2, sData->var_1AB); StringExpandPlaceholders(gStringVar4, gText_WinsLosses); - sub_80C3C34(1, gUnknown_02039CE8->var_D9, gStringVar4, gUnknown_0856FB0C); + PrintString(1, sData->var_D9, gStringVar4, gUnknown_0856FB0C); } } -void PrintTradesNumOnCard(void) +static void PrintTradesNumOnCard(void) { - if (gUnknown_02039CE8->var_10) - ConvertIntToDecimalStringN(gUnknown_02039CE8->var_237, gUnknown_02039CE8->var_534.pokemonTrades, 1, 5); + if (sData->hasTrades) + ConvertIntToDecimalStringN(sData->var_237, sData->trainerCard.pokemonTrades, 1, 5); } -void PrintTradesStringOnCard(void) +static void PrintTradesStringOnCard(void) { - if (gUnknown_02039CE8->var_10) - sub_80C3C34(2, gText_PokemonTrades, gUnknown_02039CE8->var_237, gUnknown_0856FB0F); + if (sData->hasTrades) + PrintString(2, gText_PokemonTrades, sData->var_237, gUnknown_0856FB0F); } -void PrintBerryCrushNumOnCard(void) +static void PrintBerryCrushNumOnCard(void) { - if (!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_3C) - ConvertIntToDecimalStringN(gUnknown_02039CE8->var_2C3, gUnknown_02039CE8->var_534.var_3C, 1, 5); + if (sData->cardType == CARD_TYPE_FR && sData->trainerCard.berruCrushPoints) + ConvertIntToDecimalStringN(sData->var_2C3, sData->trainerCard.berruCrushPoints, 1, 5); } -void PrintBerryCrushStringOnCard(void) +static void PrintBerryCrushStringOnCard(void) { - if (!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_3C) - sub_80C3C34(4, gText_BerryCrush, gUnknown_02039CE8->var_2C3, gUnknown_0856FB0F); + if (sData->cardType == CARD_TYPE_FR && sData->trainerCard.berruCrushPoints) + PrintString(4, gText_BerryCrush, sData->var_2C3, gUnknown_0856FB0F); } -void PrintUnionNumOnCard(void) +static void PrintUnionNumOnCard(void) { - if (!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_40) - ConvertIntToDecimalStringN(gUnknown_02039CE8->var_34F, gUnknown_02039CE8->var_534.var_40, 1, 5); + if (sData->cardType == CARD_TYPE_FR && sData->trainerCard.unionRoomNum) + ConvertIntToDecimalStringN(sData->var_34F, sData->trainerCard.unionRoomNum, 1, 5); } -void PrintUnionStringOnCard(void) +static void PrintUnionStringOnCard(void) { - if (!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_40) - sub_80C3C34(3, gText_UnionTradesAndBattles, gUnknown_02039CE8->var_34F, gUnknown_0856FB0F); + if (sData->cardType == CARD_TYPE_FR && sData->trainerCard.unionRoomNum) + PrintString(3, gText_UnionTradesAndBattles, sData->var_34F, gUnknown_0856FB0F); } -void PrintPokeblocksNumOnCard(void) +static void PrintPokeblocksNumOnCard(void) { - if (gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.pokeblocksWithFriends) + if (sData->cardType != CARD_TYPE_FR && sData->trainerCard.pokeblocksWithFriends) { - ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.pokeblocksWithFriends, 1, 5); - StringExpandPlaceholders(gUnknown_02039CE8->var_395, gText_Var1DarkGreyShadowLightGrey); + ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.pokeblocksWithFriends, 1, 5); + StringExpandPlaceholders(sData->var_395, gText_Var1DarkGreyShadowLightGrey); } } -void PrintPokeblockStringOnCard(void) +static void PrintPokeblockStringOnCard(void) { - if (gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.pokeblocksWithFriends) - sub_80C3C34(3, gText_PokeblocksWithFriends, gUnknown_02039CE8->var_395, gUnknown_0856FB0F); + if (sData->cardType != CARD_TYPE_FR && sData->trainerCard.pokeblocksWithFriends) + PrintString(3, gText_PokeblocksWithFriends, sData->var_395, gUnknown_0856FB0F); } -void PrintContestNumOnCard(void) +static void PrintContestNumOnCard(void) { - if (gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.contestsWithFriends) - ConvertIntToDecimalStringN(gUnknown_02039CE8->var_3DB, gUnknown_02039CE8->var_534.contestsWithFriends, 1, 5); + if (sData->cardType != CARD_TYPE_FR && sData->trainerCard.contestsWithFriends) + ConvertIntToDecimalStringN(sData->var_3DB, sData->trainerCard.contestsWithFriends, 1, 5); } -void PrintContestStringOnCard(void) +static void PrintContestStringOnCard(void) { - if (gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.contestsWithFriends) - sub_80C3C34(4, gText_WonContestsWFriends, gUnknown_02039CE8->var_3DB, gUnknown_0856FB0F); + if (sData->cardType != CARD_TYPE_FR && sData->trainerCard.contestsWithFriends) + PrintString(4, gText_WonContestsWFriends, sData->var_3DB, gUnknown_0856FB0F); } -void PrintBattleFacilityNumsOnCard(void) +static void PrintBattleFacilityNumsOnCard(void) { - switch (gUnknown_02039CE8->var_52A) + switch (sData->cardType) { - case 1: - if (gUnknown_02039CE8->var_D) + case CARD_TYPE_RUBY: + if (sData->hasBattleTowerWins) { - ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.battleTowerWins, 1, 4); - ConvertIntToDecimalStringN(gStringVar2, gUnknown_02039CE8->var_534.battleTowerLosses, 1, 4); - StringExpandPlaceholders(gUnknown_02039CE8->var_421, gText_WSlashStraightSlash); + ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.battleTowerWins, 1, 4); + ConvertIntToDecimalStringN(gStringVar2, sData->trainerCard.battleTowerStraightWins, 1, 4); + StringExpandPlaceholders(sData->var_421, gText_WSlashStraightSlash); } break; - case 2: - if (gUnknown_02039CE8->var_534.var_62) + case CARD_TYPE_EMERALD: + if (sData->trainerCard.frontierBP) { - ConvertIntToDecimalStringN(gStringVar1, gUnknown_02039CE8->var_534.var_62, 1, 5); - StringExpandPlaceholders(gUnknown_02039CE8->var_421, gText_Var1DarkLightGreyBP); + ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.frontierBP, 1, 5); + StringExpandPlaceholders(sData->var_421, gText_Var1DarkLightGreyBP); } break; - case 0: + case CARD_TYPE_FR: break; } } -void PrintBattleFacilityStringOnCard(void) +static void PrintBattleFacilityStringOnCard(void) { - switch (gUnknown_02039CE8->var_52A) + switch (sData->cardType) { - case 1: - if (gUnknown_02039CE8->var_D) - sub_80C3C34(5, gText_BattleTower, gUnknown_02039CE8->var_421, gUnknown_0856FB0C); + case CARD_TYPE_RUBY: + if (sData->hasBattleTowerWins) + PrintString(5, gText_BattleTower, sData->var_421, gUnknown_0856FB0C); break; - case 2: - if (gUnknown_02039CE8->var_534.var_62) - sub_80C3C34(5, gText_BattlePtsWon, gUnknown_02039CE8->var_421, gUnknown_0856FB0F); + case CARD_TYPE_EMERALD: + if (sData->trainerCard.frontierBP) + PrintString(5, gText_BattlePtsWon, sData->var_421, gUnknown_0856FB0F); break; - case 0: + case CARD_TYPE_FR: break; } } -void sub_80C4140(void) +static void sub_80C4140(void) { u8 i; - u8 buffer[8]; - u8 buffer2[8]; - memcpy(buffer, gUnknown_0856FB68, sizeof(gUnknown_0856FB68)); - memcpy(buffer2, gUnknown_0856FB6E, sizeof(gUnknown_0856FB6E)); + u8 buffer[] = {0x05, 0x06, 0x07, 0x08, 0x09, 0x0a}; + u8 buffer2[] = {0x00, 0x04, 0x08, 0x0c, 0x10, 0x14}; - if (!gUnknown_02039CE8->var_52A) + if (sData->cardType == CARD_TYPE_FR) { for (i = 0; i < 6; i++) { - if (gUnknown_02039CE8->var_534.monSpecies[i]) + if (sData->trainerCard.monSpecies[i]) { - u8 monSpecies = sub_80D30A0(gUnknown_02039CE8->var_534.monSpecies[i]); + u8 monSpecies = sub_80D30A0(sData->trainerCard.monSpecies[i]); WriteSequenceToBgTilemapBuffer(3, 16 * i + 224, buffer2[i] + 3, 15, 4, 4, buffer[monSpecies], 1); } } } } -void sub_80C41D8(void) +static void sub_80C41D8(void) { u8 i; - CpuSet(gMonIconPalettes, gUnknown_02039CE8->var_468, 0x60); - switch (gUnknown_02039CE8->var_534.var_4E) + CpuSet(gMonIconPalettes, sData->var_468, 0x60); + switch (sData->trainerCard.var_4E) { case 0: break; case 1: - TintPalette_CustomTone(gUnknown_02039CE8->var_468, 96, 0, 0, 0); + TintPalette_CustomTone(sData->var_468, 96, 0, 0, 0); break; case 2: - TintPalette_CustomTone(gUnknown_02039CE8->var_468, 96, 500, 330, 310); + TintPalette_CustomTone(sData->var_468, 96, 500, 330, 310); break; case 3: - TintPalette_SepiaTone(gUnknown_02039CE8->var_468, 96); + TintPalette_SepiaTone(sData->var_468, 96); break; } - LoadPalette(gUnknown_02039CE8->var_468, 80, 192); + LoadPalette(sData->var_468, 80, 192); for (i = 0; i < 6; i++) { - if (gUnknown_02039CE8->var_534.monSpecies[i]) - LoadBgTiles(3, GetMonIconTiles(gUnknown_02039CE8->var_534.monSpecies[i], 0), 512, 16 * i + 32); + if (sData->trainerCard.monSpecies[i]) + LoadBgTiles(3, GetMonIconTiles(sData->trainerCard.monSpecies[i], 0), 512, 16 * i + 32); } } -void sub_80C42A4(void) +static void sub_80C42A4(void) { u8 i; - u8 buffer[4]; - memcpy(buffer, gUnknown_0856FB74, sizeof(gUnknown_0856FB74)); - if (!gUnknown_02039CE8->var_52A && gUnknown_02039CE8->var_534.var_4C == 1) + u8 buffer[4] = {0x0b, 0x0c, 0x0d, 0x0e}; + + if (sData->cardType == CARD_TYPE_FR && sData->trainerCard.var_4C == 1) { for (i = 0; i < 3; i++) { - u8 var_50 = gUnknown_02039CE8->var_534.var_50[i]; - if (gUnknown_02039CE8->var_534.var_50[i]) + u8 var_50 = sData->trainerCard.var_50[i]; + if (sData->trainerCard.var_50[i]) WriteSequenceToBgTilemapBuffer(3, i * 4 + 320, i * 3 + 2, 2, 2, 2, buffer[var_50 - 1], 1); } } } -void sub_80C4330(void) +static void sub_80C4330(void) { LoadPalette(gUnknown_0856F54C, 176, 32); LoadPalette(gUnknown_0856F56C, 192, 32); LoadPalette(gUnknown_0856F58C, 208, 32); LoadPalette(gUnknown_0856F5AC, 224, 32); - LoadBgTiles(3, gUnknown_02039CE8->var_17A8, 1024, 128); + LoadBgTiles(3, sData->var_17A8, 1024, 128); } -void sub_80C438C(u8 windowId) +static void sub_80C438C(u8 windowId) { PutWindowTilemap(windowId); CopyWindowToVram(windowId, 3); } -u8 sub_80C43A8(void) +static u8 SetCardBgsAndPals(void) { - switch (gUnknown_02039CE8->var_3) + switch (sData->bgPalLoadState) { case 0: - LoadBgTiles(3, gUnknown_02039CE8->var_13A8, 1024, 0); + LoadBgTiles(3, sData->var_13A8, 1024, 0); break; case 1: - LoadBgTiles(0, gUnknown_02039CE8->var_19A8, 6144, 0); + LoadBgTiles(0, sData->var_19A8, 6144, 0); break; case 2: - if (gUnknown_02039CE8->var_52A) + if (sData->cardType != CARD_TYPE_FR) { - LoadPalette(gEmeraldTrainerCardStarPals[gUnknown_02039CE8->var_534.stars], 0, 96); + LoadPalette(gEmeraldTrainerCardStarPals[sData->trainerCard.stars], 0, 96); LoadPalette(gUnknown_0856F4EC, 48, 32); - if (gUnknown_02039CE8->var_534.gender) + if (sData->trainerCard.gender) LoadPalette(gUnknown_0856F4AC, 16, 32); } else { - LoadPalette(gFireRedTrainerCardStarPals[gUnknown_02039CE8->var_534.stars], 0, 96); + LoadPalette(gFireRedTrainerCardStarPals[sData->trainerCard.stars], 0, 96); LoadPalette(gUnknown_0856F50C, 48, 32); - if (gUnknown_02039CE8->var_534.gender) + if (sData->trainerCard.gender) LoadPalette(gUnknown_0856F4CC, 16, 32); } LoadPalette(gUnknown_0856F52C, 64, 32); break; case 3: - SetBgTilemapBuffer(0, gUnknown_02039CE8->var_3CA8); - SetBgTilemapBuffer(2, gUnknown_02039CE8->var_5CA8); + SetBgTilemapBuffer(0, sData->var_3CA8); + SetBgTilemapBuffer(2, sData->var_5CA8); break; case 4: FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); @@ -1331,14 +1417,14 @@ u8 sub_80C43A8(void) default: return 1; } - gUnknown_02039CE8->var_3++; + sData->bgPalLoadState++; return 0; } -void sub_80C4550(u16 *ptr) +static void sub_80C4550(u16 *ptr) { s16 i, j; - u16 *dst = gUnknown_02039CE8->var_5CA8; + u16 *dst = sData->var_5CA8; for (i = 0; i < 20; i++) { @@ -1353,10 +1439,10 @@ void sub_80C4550(u16 *ptr) CopyBgTilemapBufferToVram(2); } -void sub_80C45C0(u16* ptr) +static void sub_80C45C0(u16* ptr) { s16 i, j; - u16 *dst = gUnknown_02039CE8->var_3CA8; + u16 *dst = sData->var_3CA8; for (i = 0; i < 20; i++) { @@ -1371,19 +1457,21 @@ void sub_80C45C0(u16* ptr) CopyBgTilemapBufferToVram(0); } -void sub_80C4630(void) +static const u8 gUnknown_0856FB78[] = {7, 7}; + +static void sub_80C4630(void) { s16 i, x; u16 tileNum = 192; u8 palNum = 3; - FillBgTilemapBufferRect(3, 143, 15, gUnknown_0856FB78[gUnknown_02039CE8->var_52B], gUnknown_02039CE8->var_534.stars, 1, 4); - if (!gUnknown_02039CE8->var_5) + FillBgTilemapBufferRect(3, 143, 15, gUnknown_0856FB78[sData->isHoenn], sData->trainerCard.stars, 1, 4); + if (!sData->isLink) { x = 4; for (i = 0; i < 8; i++, tileNum += 2, x += 3) { - if (gUnknown_02039CE8->badgeCount[i]) + if (sData->badgeCount[i]) { FillBgTilemapBufferRect(3, tileNum, x, 15, 1, 1, palNum); FillBgTilemapBufferRect(3, tileNum + 1, x + 1, 15, 1, 1, palNum); @@ -1395,21 +1483,21 @@ void sub_80C4630(void) CopyBgTilemapBufferToVram(3); } -void sub_80C474C(void) +static void sub_80C474C(void) { - if (!gUnknown_02039CE8->var_52A) + if (sData->cardType == CARD_TYPE_FR) { - if (gUnknown_02039CE8->var_10) + if (sData->hasTrades) { FillBgTilemapBufferRect(3, 141, 27, 9, 1, 1, 1); FillBgTilemapBufferRect(3, 157, 27, 10, 1, 1, 1); } - if (gUnknown_02039CE8->var_534.var_3C) + if (sData->trainerCard.berruCrushPoints) { FillBgTilemapBufferRect(3, 141, 21, 13, 1, 1, 1); FillBgTilemapBufferRect(3, 157, 21, 14, 1, 1, 1); } - if (gUnknown_02039CE8->var_534.var_40) + if (sData->trainerCard.unionRoomNum) { FillBgTilemapBufferRect(3, 141, 27, 11, 1, 1, 1); FillBgTilemapBufferRect(3, 157, 27, 12, 1, 1, 1); @@ -1417,17 +1505,17 @@ void sub_80C474C(void) } else { - if (gUnknown_02039CE8->var_10) + if (sData->hasTrades) { FillBgTilemapBufferRect(3, 141, 27, 9, 1, 1, 0); FillBgTilemapBufferRect(3, 157, 27, 10, 1, 1, 0); } - if (gUnknown_02039CE8->var_534.contestsWithFriends) + if (sData->trainerCard.contestsWithFriends) { FillBgTilemapBufferRect(3, 141, 27, 13, 1, 1, 0); FillBgTilemapBufferRect(3, 157, 27, 14, 1, 1, 0); } - if (gUnknown_02039CE8->var_D) + if (sData->hasBattleTowerWins) { FillBgTilemapBufferRect(3, 141, 17, 15, 1, 1, 0); FillBgTilemapBufferRect(3, 157, 17, 16, 1, 1, 0); @@ -1438,13 +1526,13 @@ void sub_80C474C(void) CopyBgTilemapBufferToVram(3); } -void sub_80C48C8(void) +static void sub_80C48C8(void) { - if (++gUnknown_02039CE8->var_6 > 60) + if (++sData->var_6 > 60) { - gUnknown_02039CE8->var_6 = 0; - gUnknown_02039CE8->var_7 ^= 1; - gUnknown_02039CE8->var_529 = 1; + sData->var_6 = 0; + sData->var_7 ^= 1; + sData->var_529 = 1; } } @@ -1454,14 +1542,14 @@ u8 sub_80C4904(u8 cardId) return trainerCards[cardId].stars; } -void sub_80C4918(void) +static void sub_80C4918(void) { u8 taskId = CreateTask(sub_80C4960, 0); sub_80C4960(taskId); - SetHBlankCallback(sub_80C26D4); + SetHBlankCallback(HblankCb_TrainerCard); } -bool8 sub_80C4940(void) +static bool8 sub_80C4940(void) { if (FindTaskIdByFunc(sub_80C4960) == 0xFF) return TRUE; @@ -1469,13 +1557,13 @@ bool8 sub_80C4940(void) return FALSE; } -void sub_80C4960(u8 taskId) +static void sub_80C4960(u8 taskId) { while(gUnknown_0856FB28[gTasks[taskId].data[0]](&gTasks[taskId])) ; } -bool8 sub_80C4998(struct Task* task) +static bool8 sub_80C4998(struct Task* task) { u32 i; @@ -1488,3 +1576,282 @@ bool8 sub_80C4998(struct Task* task) task->data[0]++; return FALSE; } + +static bool8 sub_80C49D8(struct Task* task) +{ + u32 r4, r5, r10, r7, r6, var_24, r9, var; + s16 i; + + sData->allowDMACopy = FALSE; + if (task->data[1] >= 77) + task->data[1] = 77; + else + task->data[1] += 7; + + sData->var_7CA8 = task->data[1]; + sub_80C32EC(task->data[1]); + + // ??? + r7 = task->data[1]; + r9 = 160 - r7; + r4 = r9 - r7; + r6 = -r7 << 16; + r5 = 0xA00000 / r4; + r5 += 0xFFFF0000; + var_24 = r6; + var_24 += r5 * r4; + r10 = r5 / r4; + r5 *= 2; + + for (i = 0; i < r7; i++) + gScanlineEffectRegBuffers[0][i] = -i; + for (; i < (s16)(r9); i++) + { + var = r6 >> 16; + r6 += r5; + r5 -= r10; + gScanlineEffectRegBuffers[0][i] = var; + } + var = var_24 >> 16; + for (; i < 160; i++) + gScanlineEffectRegBuffers[0][i] = var; + + sData->allowDMACopy = TRUE; + if (task->data[1] >= 77) + task->data[0]++; + + return FALSE; +} + +static bool8 sub_80C4B08(struct Task* task) +{ + sData->allowDMACopy = FALSE; + if (sub_8087598() == TRUE) + return FALSE; + + do + { + switch (sData->var_4) + { + case 0: + FillWindowPixelBuffer(1, 0); + FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20); + break; + case 1: + if (!sData->var_8) + { + if (!PrintStringsOnCardPage2()) + return FALSE; + } + else + { + if (!PrintAllOnCardPage1()) + return FALSE; + } + break; + case 2: + if (!sData->var_8) + sub_80C45C0(sData->var_A48); + else + sub_80C438C(1); + break; + case 3: + if (!sData->var_8) + sub_80C474C(); + else + FillWindowPixelBuffer(2, 0); + break; + case 4: + if (sData->var_8) + sub_80C4FF0(); + break; + default: + task->data[0]++; + sData->allowDMACopy = TRUE; + sData->var_4 = 0; + return FALSE; + } + sData->var_4++; + } while (gReceivedRemoteLinkPlayers == 0); + + return FALSE; +} + +static bool8 sub_80C4C1C(struct Task* task) +{ + sData->allowDMACopy = FALSE; + if (sData->var_8) + { + sub_80C438C(2); + sub_80C4550(sData->var_EF8); + sub_80C45C0(sData->var_598); + sub_80C4630(); + } + sub_80C438C(1); + sData->var_8 ^= 1; + task->data[0]++; + sData->allowDMACopy = TRUE; + PlaySE(SE_RG_CARD2); + return FALSE; +} + +static bool8 sub_80C4C84(struct Task* task) +{ + u32 r4, r5, r10, r7, r6, var_24, r9, var; + s16 i; + + sData->allowDMACopy = FALSE; + if (task->data[1] <= 5) + task->data[1] = 0; + else + task->data[1] -= 5; + + sData->var_7CA8 = task->data[1]; + sub_80C32EC(task->data[1]); + + // ??? + r7 = task->data[1]; + r9 = 160 - r7; + r4 = r9 - r7; + r6 = -r7 << 16; + r5 = 0xA00000 / r4; + r5 += 0xFFFF0000; + var_24 = r6; + var_24 += r5 * r4; + r10 = r5 / r4; + r5 /= 2; + + for (i = 0; i < r7; i++) + gScanlineEffectRegBuffers[0][i] = -i; + for (; i < (s16)(r9); i++) + { + var = r6 >> 16; + r6 += r5; + r5 += r10; + gScanlineEffectRegBuffers[0][i] = var; + } + var = var_24 >> 16; + for (; i < 160; i++) + gScanlineEffectRegBuffers[0][i] = var; + + sData->allowDMACopy = TRUE; + if (task->data[1] <= 0) + task->data[0]++; + + return FALSE; +} + +static bool8 sub_80C4DB0(struct Task *task) +{ + ShowBg(1); + ShowBg(3); + SetHBlankCallback(NULL); + DestroyTask(FindTaskIdByFunc(sub_80C4960)); + return FALSE; +} + +void ShowPlayerTrainerCard(void (*callback)(void)) +{ + sData = AllocZeroed(sizeof(*sData)); + sData->callback2 = callback; + if (callback == sub_80C5868) + sData->var_52C = 0x7FFF; + else + sData->var_52C = 0; + + if (InUnionRoom() == TRUE) + sData->isLink = TRUE; + else + sData->isLink = FALSE; + + sData->language = LANGUAGE_ENGLISH; + sub_80C3020(&sData->trainerCard); + SetMainCallback2(CB2_InitTrainerCard); +} + +void ShowTrainerCardInLink(u8 cardId, void (*callback)(void)) +{ + sData = AllocZeroed(sizeof(*sData)); + sData->callback2 = callback; + sData->isLink = TRUE; + sData->trainerCard = gTrainerCards[cardId]; + sData->language = gLinkPlayers[cardId].language; + SetMainCallback2(CB2_InitTrainerCard); +} + +static void sub_80C4EE4(void) +{ + u8 i; + + sData->var_0 = 0; + sData->var_6 = gSaveBlock2Ptr->playTimeVBlanks; + sData->var_7 = 0; + sData->var_8 = 0; + sData->var_528 = 0; + sData->cardType = GetSetCardType(); + for (i = 0; i < 4; i++) + CopyEasyChatWord(sData->var_19[i], sData->trainerCard.var_28[i]); +} + +static u8 GetSetCardType(void) +{ + if (sData == NULL) + { + if (gGameVersion == VERSION_FIRE_RED || gGameVersion == VERSION_LEAF_GREEN) + return CARD_TYPE_FR; + else if (gGameVersion == VERSION_EMERALD) + return CARD_TYPE_EMERALD; + else + return CARD_TYPE_RUBY; + } + else + { + if (sData->trainerCard.version == VERSION_FIRE_RED || sData->trainerCard.version == VERSION_LEAF_GREEN) + { + sData->isHoenn = FALSE; + return CARD_TYPE_FR; + } + else if (sData->trainerCard.version == VERSION_EMERALD) + { + sData->isHoenn = TRUE; + return CARD_TYPE_EMERALD; + } + else + { + sData->isHoenn = TRUE; + return CARD_TYPE_RUBY; + } + } +} + +static u8 VersionToCardType(u8 version) +{ + if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN) + return CARD_TYPE_FR; + else if (version == VERSION_EMERALD) + return CARD_TYPE_EMERALD; + else + return CARD_TYPE_RUBY; +} + +static void sub_80C4FF0(void) +{ + if (InUnionRoom() == TRUE && gReceivedRemoteLinkPlayers == 1) + { + sub_818D938(FacilityClassToPicIndex(sData->trainerCard.var_4F), + TRUE, + gUnknown_0856FB18[sData->isHoenn][sData->trainerCard.gender][0], + gUnknown_0856FB18[sData->isHoenn][sData->trainerCard.gender][1], + 8, + 2); + } + else + { + sub_818D938(FacilityClassToPicIndex(gUnknown_0856FB20[sData->cardType][sData->trainerCard.gender]), + TRUE, + gUnknown_0856FB18[sData->isHoenn][sData->trainerCard.gender][0], + gUnknown_0856FB18[sData->isHoenn][sData->trainerCard.gender][1], + 8, + 2); + } +} -- cgit v1.2.3 From 75a1c022dd2b1d76559d2ae3141713e9045bb5dc Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 20 Jan 2019 18:48:29 +0100 Subject: Make trainer card compile --- src/trade.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src') diff --git a/src/trade.c b/src/trade.c index 7af1e19c9..99c9f6088 100644 --- a/src/trade.c +++ b/src/trade.c @@ -49,6 +49,8 @@ #define Trade_SendData(ptr) (SendBlock(bitmask_all_link_players_but_self(), ptr->linkData, 20)) +extern void sub_80C6D80(const u8 *, u8 *, u8, u8, u8); + struct InGameTrade { /*0x00*/ u8 name[11]; /*0x0C*/ u16 species; -- cgit v1.2.3 From 261955b6ed39fd40f9f70d8e2055db60415054e4 Mon Sep 17 00:00:00 2001 From: garak Date: Mon, 21 Jan 2019 11:55:27 -0500 Subject: trainer hill easy chat constants --- src/data/battle_frontier/trainer_hill.h | 9686 +++++++++++++++---------------- src/trainer_hill.c | 1 + 2 files changed, 4844 insertions(+), 4843 deletions(-) (limited to 'src') diff --git a/src/data/battle_frontier/trainer_hill.h b/src/data/battle_frontier/trainer_hill.h index eb988b721..ca0d623e9 100644 --- a/src/data/battle_frontier/trainer_hill.h +++ b/src/data/battle_frontier/trainer_hill.h @@ -2,4856 +2,4856 @@ static const struct TrHillTag sDataTagNormal = { - .unkField_0 = 8, - .unused1 = 2, - .unkField_2 = 4, - .unused3 = 0, - .unused4 = 5, - .unused5 = 30, - .unused6 = 5, - .floors = - { - [0] = - { - .unk0 = 0x11, - .unk1 = 0x12, - .trainers = - { - [0] = - { - .name = _("ALAINA"), - .facilityClass = FACILITY_CLASS_HEX_MANIAC, - .unused = 0, - .speechBefore = {0xA02, 0x1016, 0x161A, 0x1022, 0x102F, 0x1627}, - .speechWin = {0x1020, 0x2207, 0x1431, 0x61E, 0x1404, 0x161B}, - .speechLose = {0x1E0F, 0xE20, 0x1020, 0x24AB, 0xC00, 0xFFFF}, - .speechAfter = {0xA01, 0x1000, 0x162F, 0x1037, 0xE0D, 0x400}, - .mons = - { - [0] = - { - .species = SPECIES_MISDREAVUS, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, - .attackEV = 155, - .speedEV = 255, - .spAttackEV = 100, - .otId = TRAINER_HILL_OTID, - .hpIV = 24, - .attackIV = 24, - .defenseIV = 24, - .speedIV = 24, - .spAttackIV = 24, - .spDefenseIV = 24, - .altAbility = 0, - .personality = 0x0, - .nickname = _("MISDREAVUS"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_SOLROCK, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_PSYCHIC, MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE, MOVE_CALM_MIND}, - .level = 0, - .ppBonuses = 0, - .hpEV = 200, - .defenseEV = 100, - .spAttackEV = 110, - .spDefenseEV = 100, - .otId = TRAINER_HILL_OTID, - .hpIV = 24, - .attackIV = 24, - .defenseIV = 24, - .speedIV = 24, - .spAttackIV = 24, - .spDefenseIV = 24, - .altAbility = 0, - .personality = 0xF, - .nickname = _("SOLROCK"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_CLAYDOL, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ICE_BEAM}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .defenseEV = 135, - .spDefenseEV = 120, - .otId = TRAINER_HILL_OTID, - .hpIV = 24, - .attackIV = 24, - .defenseIV = 24, - .speedIV = 24, - .spAttackIV = 24, - .spDefenseIV = 24, - .altAbility = 0, - .personality = 0xC, - .nickname = _("CLAYDOL"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_WEEZING, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, - .hpEV = 110, - .attackEV = 200, - .spDefenseEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 24, - .attackIV = 24, - .defenseIV = 24, - .speedIV = 24, - .spAttackIV = 24, - .spDefenseIV = 24, - .altAbility = 0, - .personality = 0x80, - .nickname = _("WEEZING"), - .friendship = 0, - }, - [4] = - { - .species = SPECIES_LUNATONE, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_CALM_MIND}, - .level = 0, - .ppBonuses = 0, - .hpEV = 200, - .defenseEV = 100, - .spAttackEV = 110, - .spDefenseEV = 100, - .otId = TRAINER_HILL_OTID, - .hpIV = 24, - .attackIV = 24, - .defenseIV = 24, - .speedIV = 24, - .spAttackIV = 24, - .spDefenseIV = 24, - .altAbility = 0, - .personality = 0xF, - .nickname = _("LUNATONE"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_FLYGON, - .heldItem = ITEM_CHOICE_BAND, - .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_FLAMETHROWER}, - .level = 0, - .ppBonuses = 0, - .attackEV = 155, - .speedEV = 255, - .spAttackEV = 100, - .otId = TRAINER_HILL_OTID, - .hpIV = 24, - .attackIV = 24, - .defenseIV = 24, - .speedIV = 24, - .spAttackIV = 24, - .spDefenseIV = 24, - .altAbility = 0, - .personality = 0x83, - .nickname = _("FLYGON"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("ALFONSO"), - .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, - .unused = 0, - .speechBefore = {0xA01, 0x121E, 0x1647, 0x1020, 0x180F, 0xFFFF}, - .speechWin = {0xA29, 0xE09, 0x2630, 0x102C, 0xA28, 0x1A15}, - .speechLose = {0xA28, 0x1A15, 0xC00, 0xA07, 0x201F, 0x1029}, - .speechAfter = {0x1020, 0x1A15, 0x1028, 0xE39, 0x180F, 0xC00}, - .mons = - { - [0] = - { - .species = SPECIES_SEALEO, - .heldItem = ITEM_NEVER_MELT_ICE, - .moves = {MOVE_BLIZZARD, MOVE_ICE_BALL, MOVE_ENCORE, MOVE_HAIL}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xF, - .nickname = _("SEALEO"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_AMPHAROS, - .heldItem = ITEM_MAGNET, - .moves = {MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_COTTON_SPORE, MOVE_LIGHT_SCREEN}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xF, - .nickname = _("AMPHAROS"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_MACHOKE, - .heldItem = ITEM_BLACK_BELT, - .moves = {MOVE_DYNAMIC_PUNCH, MOVE_MUD_SLAP, MOVE_COUNTER, MOVE_SCARY_FACE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .attackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x4E, - .nickname = _("MACHOKE"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_FLAREON, - .heldItem = ITEM_CHARCOAL, - .moves = {MOVE_FIRE_BLAST, MOVE_BITE, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x28, - .nickname = _("FLAREON"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_MAGNETON, - .heldItem = ITEM_MAGNET, - .moves = {MOVE_ZAP_CANNON, MOVE_THUNDER_WAVE, MOVE_SCREECH, MOVE_METAL_SOUND}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x0, - .nickname = _("MAGNETON"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_PINSIR, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_GUILLOTINE, MOVE_BRICK_BREAK, MOVE_SWAGGER, MOVE_FAINT_ATTACK}, - .level = 0, - .ppBonuses = 0, - .hpEV = 200, - .defenseEV = 155, - .spDefenseEV = 155, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x85, - .nickname = _("PINSIR"), - .friendship = 255, - }, - }, - }, - }, - .data = {0x31, 0x3B, 0x35, 0x35, 0x26, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x26, 0x3A, 0x3B, 0x35, 0x3B, 0x8, 0x31, 0x3B, 0x2C, 0x2C, 0x2C, 0x2B, 0x24, 0x24, 0x24, 0x24, 0x2C, 0x3B, 0x3B, 0x2C, 0x3B, 0x8, 0x2D, 0x3B, 0x3B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x3B, 0x3B, 0x35, 0x3B, 0x35, 0x35, 0x3B, 0x8, 0x33, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x3B, 0x2C, 0x2B, 0x3B, 0x8, 0x33, 0x35, 0x3B, 0x3B, 0x3B, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x8, 0x34, 0x2C, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x32, 0x30, 0x3B, 0x2B, 0x32, 0x30, 0x2C, 0x3B, 0x8, 0x31, 0x35, 0x3B, 0x3B, 0x35, 0x3B, 0x2C, 0x3B, 0x3B, 0x35, 0x2C, 0x3B, 0x3B, 0x35, 0x35, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x35, 0x3B, 0x2B, 0x32, 0x21, 0x30, 0x2C, 0x2C, 0x8, 0x31, 0x35, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x2C, 0x3B, 0x35, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x2B, 0x3B, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x3B, 0x8, 0x31, 0x35, 0x35, 0x35, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x35, 0x2B, 0x3B, 0x35, 0x35, 0x8, 0x31, 0x2B, 0x2C, 0x2C, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x2C, 0x2C, 0x3B, 0x2C, 0x2C, 0x8, 0x31, 0x2B, 0x3B, 0x3B, 0x35, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x3B, 0x3B, 0x2C, 0x32, 0x30, 0x2C, 0x32, 0x30, 0x3B, 0x35, 0x8, 0x31, 0x3B, 0x3B, 0x3B, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x3FE5, 0x401, 0xBDED, 0x8425, 0xDFBD, 0x221, 0x7E7F, 0x941, 0x7F7D, 0x911, 0x7FF7, 0x4101, 0x79F9, 0x803, 0xFFFF}, - .coords = {27, 45}, - .direction = 0x21, - .range = 0x21, - }, - [1] = - { - .unk0 = 0x13, - .unk1 = 0x14, - .trainers = - { - [0] = - { - .name = _("THEODORE"), - .facilityClass = FACILITY_CLASS_BLACK_BELT, - .unused = 0, - .speechBefore = {0xA28, 0x61E, 0x1000, 0x2617, 0xA02, 0xC00}, - .speechWin = {0xC0A, 0xC28, 0xC00, 0xC0A, 0xC28, 0xC01}, - .speechLose = {0xA01, 0x160A, 0x1036, 0x1029, 0x1039, 0x122F}, - .speechAfter = {0x2801, 0xA02, 0x1A35, 0x1232, 0xE15, 0x614}, - .mons = - { - [0] = - { - .species = SPECIES_MEDITITE, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 20, - .defenseIV = 20, - .speedIV = 20, - .spAttackIV = 20, - .spDefenseIV = 20, - .altAbility = 0, - .personality = 0x80, - .nickname = _("MEDITITE"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_HERACROSS, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 20, - .defenseIV = 20, - .speedIV = 20, - .spAttackIV = 20, - .spDefenseIV = 20, - .altAbility = 1, - .personality = 0x80, - .nickname = _("HERACROSS"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_HITMONTOP, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 20, - .defenseIV = 20, - .speedIV = 20, - .spAttackIV = 20, - .spDefenseIV = 20, - .altAbility = 0, - .personality = 0x3, - .nickname = _("HITMONTOP"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_MACHOP, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 20, - .defenseIV = 20, - .speedIV = 20, - .spAttackIV = 20, - .spDefenseIV = 20, - .altAbility = 0, - .personality = 0x4E, - .nickname = _("MACHOP"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_PINSIR, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 20, - .defenseIV = 20, - .speedIV = 20, - .spAttackIV = 20, - .spDefenseIV = 20, - .altAbility = 0, - .personality = 0x80, - .nickname = _("PINSIR"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_HITMONCHAN, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 20, - .defenseIV = 20, - .speedIV = 20, - .spAttackIV = 20, - .spDefenseIV = 20, - .altAbility = 0, - .personality = 0x3, - .nickname = _("HITMONCHAN"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("JAYDEN"), - .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, - .unused = 0, - .speechBefore = {0xA4A, 0x1E04, 0xA02, 0x1015, 0x1018, 0x1437}, - .speechWin = {0xA02, 0x606, 0x102E, 0x1020, 0x1809, 0xFFFF}, - .speechLose = {0xA3D, 0x162D, 0x606, 0x140B, 0xC03, 0xFFFF}, - .speechAfter = {0x1026, 0xA01, 0x140F, 0x1020, 0xA0C, 0xA33}, - .mons = - { - [0] = - { - .species = SPECIES_VULPIX, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_TAIL_WHIP, MOVE_OVERHEAT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xF, - .nickname = _("VULPIX"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_MINUN, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_THUNDER_WAVE, MOVE_CHARM, MOVE_ENCORE, MOVE_SPARK}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x8C, - .nickname = _("MINUN"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_ROSELIA, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_TOXIC, MOVE_LEECH_SEED, MOVE_SWEET_SCENT, MOVE_GIGA_DRAIN}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0xF, - .nickname = _("ROSELIA"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_MR_MIME, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_SAFEGUARD, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_PSYCHIC}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x82, - .nickname = _("MR. MIME"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_PLUSLE, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_RAIN_DANCE, MOVE_LIGHT_SCREEN, MOVE_HELPING_HAND, MOVE_THUNDER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x5, - .nickname = _("PLUSLE"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_TOGEPI, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOLLOW_ME, MOVE_METRONOME}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0x37, - .nickname = _("TOGEPI"), - .friendship = 255, - }, - }, - }, - }, - .data = {0xD1, 0xD5, 0xD5, 0xD5, 0xD9, 0xD9, 0x1B, 0x1C, 0x1D, 0xC5, 0xC6, 0xCE, 0xD5, 0xDB, 0xD5, 0x8, 0xD1, 0xCB, 0xC4, 0xC4, 0xDB, 0xDB, 0xC4, 0xC4, 0xC4, 0xCC, 0xCC, 0xCC, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xDB, 0x17, 0x17, 0x17, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xD5, 0x17, 0x17, 0x17, 0xD5, 0xD5, 0xD5, 0xD5, 0xDF, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0x17, 0x17, 0x1F, 0xCB, 0xCB, 0xC4, 0xC4, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xC4, 0xCB, 0xCB, 0xDF, 0xD5, 0xD5, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xDB, 0xC4, 0xC4, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xD5, 0xD5, 0xDF, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xC4, 0xC4, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xDF, 0xD5, 0xD5, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xC4, 0xC4, 0xDB, 0xC4, 0xC4, 0xC4, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0xDB, 0xD5, 0xD5, 0xD5, 0xCB, 0x8, 0xD1, 0xC4, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0x8, 0xD1, 0xDB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0x8, 0xD1, 0xDB, 0xDB, 0xC4, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xC4, 0xC4, 0xC4, 0xC4, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x73FB, 0x400B, 0x400B, 0x51EB, 0x538B, 0x51BB, 0x518B, 0x51EB, 0x518B, 0x51BB, 0x5003, 0x501F, 0x101F, 0x101F, 0xFFFF}, - .coords = {180, 233}, - .direction = 0x3, - .range = 0x35, - }, - [2] = - { - .unk0 = 0x15, - .unk1 = 0x16, - .trainers = - { - [0] = - { - .name = _("SALVADORE"), - .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M, - .unused = 0, - .speechBefore = {0x100D, 0x2623, 0x1E04, 0x1E1B, 0x1E0A, 0x81A}, - .speechWin = {0x100A, 0xA02, 0x103A, 0x102F, 0x120B, 0xC03}, - .speechLose = {0xA01, 0x1000, 0x161E, 0xA02, 0x80B, 0xA33}, - .speechAfter = {0x101F, 0xA02, 0x123C, 0xE11, 0xC03, 0xFFFF}, - .mons = - { - [0] = - { - .species = SPECIES_VAPOREON, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_HAZE, MOVE_HELPING_HAND, MOVE_TICKLE, MOVE_WATER_PULSE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x37, - .nickname = _("VAPOREON"), - .friendship = 0, - }, - [1] = - { - .species = SPECIES_DODRIO, - .heldItem = ITEM_KINGS_ROCK, - .moves = {MOVE_HAZE, MOVE_TRI_ATTACK, MOVE_TAUNT, MOVE_TORMENT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0x8A, - .nickname = _("DODRIO"), - .friendship = 0, - }, - [2] = - { - .species = SPECIES_OMASTAR, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_HAZE, MOVE_HYDRO_PUMP, MOVE_TICKLE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x14, - .nickname = _("OMASTAR"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_LICKITUNG, - .heldItem = ITEM_CHESTO_BERRY, - .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x8, - .nickname = _("LICKITUNG"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_SLOWBRO, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_BELLY_DRUM, MOVE_MUD_SLAP, MOVE_SWAGGER, MOVE_AMNESIA}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0x94, - .nickname = _("SLOWBRO"), - .friendship = 0, - }, - [5] = - { - .species = SPECIES_LINOONE, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 20, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x8, - .nickname = _("LINOONE"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("VERONICA"), - .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, - .unused = 0, - .speechBefore = {0xA29, 0xE0D, 0x620, 0x40C, 0xE17, 0x1E0A}, - .speechWin = {0xA29, 0x620, 0xE1D, 0x1E25, 0xC00, 0xFFFF}, - .speechLose = {0xA29, 0x142A, 0x1C0D, 0xE1D, 0x1E25, 0xC00}, - .speechAfter = {0x1E25, 0x801, 0xA29, 0x1217, 0x811, 0xC00}, - .mons = - { - [0] = - { - .species = SPECIES_SKITTY, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_PSYCH_UP, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_IRON_TAIL}, - .level = 0, - .ppBonuses = 0, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0xCB, - .nickname = _("SKITTY"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_MEDICHAM, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_PSYCH_UP, MOVE_HI_JUMP_KICK, MOVE_MEGA_KICK, MOVE_ROCK_SLIDE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xD, - .nickname = _("MEDICHAM"), - .friendship = 0, - }, - [2] = - { - .species = SPECIES_STANTLER, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_PSYCH_UP, MOVE_RETURN, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .speedEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x3, - .nickname = _("STANTLER"), - .friendship = 0, - }, - [3] = - { - .species = SPECIES_NIDOQUEEN, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_SUPERPOWER, MOVE_BITE, MOVE_CHARM, MOVE_FLATTER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 20, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x3, - .nickname = _("NIDOQUEEN"), - .friendship = 0, - }, - [4] = - { - .species = SPECIES_NINETALES, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_OVERHEAT, MOVE_QUICK_ATTACK, MOVE_SPITE, MOVE_TAIL_WHIP}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xD7, - .nickname = _("NINETALES"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_CHARIZARD, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_OVERHEAT, MOVE_BEAT_UP, MOVE_SCARY_FACE, MOVE_GROWL}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x28, - .nickname = _("CHARIZARD"), - .friendship = 255, - }, - }, - }, - }, - .data = {0x31, 0x35, 0x35, 0x35, 0x26, 0x26, 0x13, 0x14, 0x15, 0x38, 0x26, 0x2E, 0x35, 0x35, 0x3B, 0x8, 0x69, 0x63, 0x64, 0x64, 0x64, 0x64, 0x71, 0x71, 0x71, 0x72, 0x64, 0x64, 0x64, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x43, 0x41, 0x40, 0x41, 0x42, 0x41, 0x41, 0x4A, 0x42, 0x41, 0x41, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x43, 0x4B, 0x43, 0x43, 0x41, 0x42, 0x42, 0x40, 0x41, 0x40, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x40, 0x42, 0x42, 0x41, 0x41, 0x42, 0x4A, 0x42, 0x41, 0x42, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x42, 0x41, 0x43, 0x4B, 0x41, 0x41, 0x41, 0x40, 0x43, 0x41, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x40, 0x43, 0x41, 0x42, 0x42, 0x41, 0x4A, 0x42, 0x41, 0x42, 0x63, 0x73, 0x8, 0x69, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x64, 0x73, 0x8, 0x69, 0x43, 0x43, 0x41, 0x42, 0x42, 0x41, 0x43, 0x41, 0x41, 0x40, 0x42, 0x41, 0x42, 0x73, 0x8, 0x69, 0x42, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x42, 0x73, 0x8}, - .unk3A0 = {0x381, 0x7C3D, 0x4005, 0x4005, 0x4005, 0x4045, 0x4005, 0x4805, 0x4005, 0x4045, 0x4005, 0x4205, 0x4005, 0x4045, 0x1, 0x1}, - .coords = {37, 41}, - .direction = 0x23, - .range = 0x33, - }, - [3] = - { - .unk0 = 0x17, - .unk1 = 0x18, - .trainers = - { - [0] = - { - .name = _("KEENAN"), - .facilityClass = FACILITY_CLASS_PSYCHIC_M, - .unused = 0, - .speechBefore = {0xA02, 0x1A35, 0x1025, 0x1202, 0xFFFF, 0xFFFF}, - .speechWin = {0x1039, 0x122E, 0xFFFF, 0x1C13, 0x100B, 0x1E1B}, - .speechLose = {0x1019, 0xE0D, 0x1C13, 0x1632, 0xA02, 0xC03}, - .speechAfter = {0xA02, 0x1017, 0x101E, 0x1C13, 0x102F, 0x1A05}, - .mons = - { - [0] = - { - .species = SPECIES_ALAKAZAM, - .heldItem = ITEM_PETAYA_BERRY, - .moves = {MOVE_SKILL_SWAP, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_REFLECT}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x41, - .nickname = _("ALAKAZAM"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_BLISSEY, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_SKILL_SWAP, MOVE_EGG_BOMB, MOVE_THUNDERBOLT, MOVE_SING}, - .level = 0, - .ppBonuses = 0, - .defenseEV = 255, - .spAttackEV = 155, - .spDefenseEV = 100, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 1, - .personality = 0xF, - .nickname = _("BLISSEY"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_GRUMPIG, - .heldItem = ITEM_TWISTED_SPOON, - .moves = {MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_REST}, - .level = 0, - .ppBonuses = 0, - .hpEV = 110, - .defenseEV = 200, - .spAttackEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x8C, - .nickname = _("GRUMPIG"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_GARDEVOIR, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_SKILL_SWAP, MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_PROTECT}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 1, - .personality = 0xF, - .nickname = _("GARDEVOIR"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_VENOMOTH, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_SKILL_SWAP, MOVE_SIGNAL_BEAM, MOVE_SLEEP_POWDER, MOVE_TOXIC}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x80, - .nickname = _("VENOMOTH"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_ESPEON, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_SKILL_SWAP, MOVE_PSYBEAM, MOVE_SWIFT, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0xF, - .nickname = _("ESPEON"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("KRISTINA"), - .facilityClass = FACILITY_CLASS_AROMA_LADY, - .unused = 0, - .speechBefore = {0xA31, 0x1400, 0xC04, 0x1E22, 0x1020, 0x401}, - .speechWin = {0xA01, 0xE2C, 0x103A, 0x1021, 0x61A, 0x401}, - .speechLose = {0xA01, 0x2757, 0xE39, 0x620, 0x401, 0xFFFF}, - .speechAfter = {0xA28, 0x61B, 0x1034, 0x823, 0x1013, 0x445}, - .mons = - { - [0] = - { - .species = SPECIES_WEEZING, - .heldItem = ITEM_POISON_BARB, - .moves = {MOVE_TOXIC, MOVE_SLUDGE_BOMB, MOVE_SMOKESCREEN, MOVE_HAZE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .attackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x3, - .nickname = _("WEEZING"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_GLOOM, - .heldItem = ITEM_MIRACLE_SEED, - .moves = {MOVE_PETAL_DANCE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x8C, - .nickname = _("GLOOM"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_MUK, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_SCREECH, MOVE_DISABLE, MOVE_SLUDGE_BOMB, MOVE_ACID_ARMOR}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .attackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x3, - .nickname = _("MUK"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_TROPIUS, - .heldItem = ITEM_WHITE_HERB, - .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_SWEET_SCENT, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, - .attackEV = 120, - .speedEV = 255, - .spAttackEV = 135, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x83, - .nickname = _("TROPIUS"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_BELLOSSOM, - .heldItem = ITEM_MENTAL_HERB, - .moves = {MOVE_SWEET_SCENT, MOVE_PETAL_DANCE, MOVE_STUN_SPORE, MOVE_SLUDGE_BOMB}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x6, - .nickname = _("BELLOSSOM"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_MEGANIUM, - .heldItem = ITEM_MIRACLE_SEED, - .moves = {MOVE_RAZOR_LEAF, MOVE_BODY_SLAM, MOVE_LEECH_SEED, MOVE_SYNTHESIS}, - .level = 0, - .ppBonuses = 0, - .attackEV = 200, - .speedEV = 110, - .spAttackEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x1F, - .nickname = _("MEGANIUM"), - .friendship = 255, - }, - }, - }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x1F, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x24, 0x24, 0x24, 0x2B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x35, 0x35, 0x3B, 0x35, 0x35, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x2C, 0x2C, 0x3B, 0x2C, 0x2C, 0x8, 0x33, 0x17, 0x1F, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x34, 0x17, 0x2C, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2C, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x1F, 0x17, 0x17, 0x17, 0x17, 0x1F, 0x17, 0x3B, 0x3B, 0x3B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x35, 0x1F, 0x17, 0x17, 0x1F, 0x17, 0x8, 0x34, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x2C, 0x3B, 0x3B, 0x2B, 0x17, 0x8, 0x17, 0x17, 0x17, 0x1F, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x17, 0x17, 0x2C, 0x17, 0x8, 0x1F, 0x17, 0x17, 0x2C, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x3B, 0x1F, 0x3B, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x3B, 0x2B, 0x3B, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x35, 0x35, 0x35, 0x2B, 0x17, 0x3B, 0x2C, 0x3B, 0x17, 0x8, 0x34, 0x17, 0x17, 0x17, 0x17, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x7C1, 0x8441, 0x8477, 0x8441, 0xA441, 0x401, 0x1, 0x8401, 0x8465, 0x445, 0x1441, 0x8449, 0x8449, 0x87C1, 0xFFFF}, - .coords = {71, 167}, - .direction = 0x1, - .range = 0x33, - }, - }, + .unkField_0 = 8, + .unused1 = 2, + .unkField_2 = 4, + .unused3 = 0, + .unused4 = 5, + .unused5 = 30, + .unused6 = 5, + .floors = + { + [0] = + { + .unk0 = 0x11, + .unk1 = 0x12, + .trainers = + { + [0] = + { + .name = _("ALAINA"), + .facilityClass = FACILITY_CLASS_HEX_MANIAC, + .unused = 0, + .speechBefore = {EC_WORD_YOU, EC_WORD_CAN, EC_WORD_CHOOSE, EC_WORD_NOT, EC_WORD_TO, EC_WORD_BELIEVE}, + .speechWin = {EC_WORD_A, EC_WORD_SUPER, EC_WORD_NATURAL, EC_WORD_POWER, EC_WORD_HAS, EC_WORD_COME}, + .speechLose = {EC_WORD_THIS, EC_WORD_MUST_BE, EC_WORD_A, EC_MOVE(NIGHTMARE), EC_WORD_EXCL, 0xFFFF}, + .speechAfter = {EC_WORD_I, EC_WORD_WILL, EC_WORD_DISAPPEAR, EC_WORD_IN, EC_WORD_THE, EC_WORD_DARK}, + .mons = + { + [0] = + { + .species = SPECIES_MISDREAVUS, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .attackEV = 155, + .speedEV = 255, + .spAttackEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .altAbility = 0, + .personality = 0x0, + .nickname = _("MISDREAVUS"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_SOLROCK, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_PSYCHIC, MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE, MOVE_CALM_MIND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 200, + .defenseEV = 100, + .spAttackEV = 110, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .altAbility = 0, + .personality = 0xF, + .nickname = _("SOLROCK"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_CLAYDOL, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_EARTHQUAKE, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ICE_BEAM}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .defenseEV = 135, + .spDefenseEV = 120, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .altAbility = 0, + .personality = 0xC, + .nickname = _("CLAYDOL"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_WEEZING, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .attackEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .altAbility = 0, + .personality = 0x80, + .nickname = _("WEEZING"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_LUNATONE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_ROCK_SLIDE, MOVE_CALM_MIND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 200, + .defenseEV = 100, + .spAttackEV = 110, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .altAbility = 0, + .personality = 0xF, + .nickname = _("LUNATONE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_FLYGON, + .heldItem = ITEM_CHOICE_BAND, + .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_FLAMETHROWER}, + .level = 0, + .ppBonuses = 0, + .attackEV = 155, + .speedEV = 255, + .spAttackEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 24, + .attackIV = 24, + .defenseIV = 24, + .speedIV = 24, + .spAttackIV = 24, + .spDefenseIV = 24, + .altAbility = 0, + .personality = 0x83, + .nickname = _("FLYGON"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("ALFONSO"), + .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_NEVER, EC_WORD_TAKE, EC_WORD_A, EC_WORD_TRAIN, 0xFFFF}, + .speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_MOVE2(SUPERSONIC), EC_WORD_ON, EC_WORD_MY, EC_WORD_BIKE}, + .speechLose = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_EXCL, EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_IT}, + .speechAfter = {EC_WORD_A, EC_WORD_BIKE, EC_WORD_OVER, EC_WORD_ANY, EC_WORD_TRAIN, EC_WORD_EXCL}, + .mons = + { + [0] = + { + .species = SPECIES_SEALEO, + .heldItem = ITEM_NEVER_MELT_ICE, + .moves = {MOVE_BLIZZARD, MOVE_ICE_BALL, MOVE_ENCORE, MOVE_HAIL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("SEALEO"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_AMPHAROS, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_COTTON_SPORE, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("AMPHAROS"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_MACHOKE, + .heldItem = ITEM_BLACK_BELT, + .moves = {MOVE_DYNAMIC_PUNCH, MOVE_MUD_SLAP, MOVE_COUNTER, MOVE_SCARY_FACE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x4E, + .nickname = _("MACHOKE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_FLAREON, + .heldItem = ITEM_CHARCOAL, + .moves = {MOVE_FIRE_BLAST, MOVE_BITE, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x28, + .nickname = _("FLAREON"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_MAGNETON, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_ZAP_CANNON, MOVE_THUNDER_WAVE, MOVE_SCREECH, MOVE_METAL_SOUND}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x0, + .nickname = _("MAGNETON"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_PINSIR, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_GUILLOTINE, MOVE_BRICK_BREAK, MOVE_SWAGGER, MOVE_FAINT_ATTACK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 200, + .defenseEV = 155, + .spDefenseEV = 155, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x85, + .nickname = _("PINSIR"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x35, 0x35, 0x26, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x26, 0x3A, 0x3B, 0x35, 0x3B, 0x8, 0x31, 0x3B, 0x2C, 0x2C, 0x2C, 0x2B, 0x24, 0x24, 0x24, 0x24, 0x2C, 0x3B, 0x3B, 0x2C, 0x3B, 0x8, 0x2D, 0x3B, 0x3B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x3B, 0x3B, 0x35, 0x3B, 0x35, 0x35, 0x3B, 0x8, 0x33, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x3B, 0x2C, 0x2B, 0x3B, 0x8, 0x33, 0x35, 0x3B, 0x3B, 0x3B, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x8, 0x34, 0x2C, 0x3B, 0x32, 0x21, 0x30, 0x2B, 0x32, 0x30, 0x3B, 0x2B, 0x32, 0x30, 0x2C, 0x3B, 0x8, 0x31, 0x35, 0x3B, 0x3B, 0x35, 0x3B, 0x2C, 0x3B, 0x3B, 0x35, 0x2C, 0x3B, 0x3B, 0x35, 0x35, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x35, 0x3B, 0x2B, 0x32, 0x21, 0x30, 0x2C, 0x2C, 0x8, 0x31, 0x35, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x2C, 0x3B, 0x35, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x2B, 0x3B, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x3B, 0x8, 0x31, 0x35, 0x35, 0x35, 0x2B, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x35, 0x2B, 0x3B, 0x35, 0x35, 0x8, 0x31, 0x2B, 0x2C, 0x2C, 0x2C, 0x32, 0x30, 0x2B, 0x32, 0x30, 0x2C, 0x2C, 0x3B, 0x2C, 0x2C, 0x8, 0x31, 0x2B, 0x3B, 0x3B, 0x35, 0x3B, 0x3B, 0x2B, 0x3B, 0x3B, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x2C, 0x32, 0x30, 0x2B, 0x3B, 0x3B, 0x2C, 0x32, 0x30, 0x2C, 0x32, 0x30, 0x3B, 0x35, 0x8, 0x31, 0x3B, 0x3B, 0x3B, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x3FE5, 0x401, 0xBDED, 0x8425, 0xDFBD, 0x221, 0x7E7F, 0x941, 0x7F7D, 0x911, 0x7FF7, 0x4101, 0x79F9, 0x803, 0xFFFF}, + .coords = {27, 45}, + .direction = 0x21, + .range = 0x21, + }, + [1] = + { + .unk0 = 0x13, + .unk1 = 0x14, + .trainers = + { + [0] = + { + .name = _("THEODORE"), + .facilityClass = FACILITY_CLASS_BLACK_BELT, + .unused = 0, + .speechBefore = {EC_WORD_MY, EC_WORD_POWER, EC_WORD_WILL, EC_MOVE2(STOMP), EC_WORD_YOU, EC_WORD_EXCL}, + .speechWin = {EC_WORD_WAAAH, EC_WORD_HAHAHA, EC_WORD_EXCL, EC_WORD_WAAAH, EC_WORD_HAHAHA, EC_WORD_EXCL_EXCL}, + .speechLose = {EC_WORD_I, EC_WORD_WENT, EC_WORD_AT, EC_WORD_IT, EC_WORD_TOO, EC_WORD_HARD}, + .speechAfter = {EC_WORD_YES_SIR_EXCL, EC_WORD_YOU, EC_WORD_LOOK, EC_WORD_NICE, EC_WORD_AND, EC_WORD_GUTSY}, + .mons = + { + [0] = + { + .species = SPECIES_MEDITITE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .altAbility = 0, + .personality = 0x80, + .nickname = _("MEDITITE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_HERACROSS, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .altAbility = 1, + .personality = 0x80, + .nickname = _("HERACROSS"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_HITMONTOP, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_FOCUS_PUNCH, MOVE_PROTECT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .altAbility = 0, + .personality = 0x3, + .nickname = _("HITMONTOP"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_MACHOP, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .altAbility = 0, + .personality = 0x4E, + .nickname = _("MACHOP"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_PINSIR, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .altAbility = 0, + .personality = 0x80, + .nickname = _("PINSIR"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_HITMONCHAN, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_FOCUS_PUNCH, MOVE_REVENGE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 20, + .defenseIV = 20, + .speedIV = 20, + .spAttackIV = 20, + .spDefenseIV = 20, + .altAbility = 0, + .personality = 0x3, + .nickname = _("HITMONCHAN"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("JAYDEN"), + .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, + .unused = 0, + .speechBefore = {EC_WORD_SOME, EC_WORD_THINGS, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_DO, EC_WORD_ALONE}, + .speechWin = {EC_WORD_YOU, EC_WORD_WIN, EC_WORD_AS, EC_WORD_A, EC_WORD_GROUP, 0xFFFF}, + .speechLose = {EC_WORD_WE, EC_WORD_COULDN_T, EC_WORD_WIN, EC_WORD_TOGETHER, EC_WORD_QUES, 0xFFFF}, + .speechAfter = {EC_WORD_MAYBE, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_WORD_BOY, EC_WORD_FRIEND}, + .mons = + { + [0] = + { + .species = SPECIES_VULPIX, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_TAIL_WHIP, MOVE_OVERHEAT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("VULPIX"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MINUN, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_THUNDER_WAVE, MOVE_CHARM, MOVE_ENCORE, MOVE_SPARK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8C, + .nickname = _("MINUN"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_ROSELIA, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_TOXIC, MOVE_LEECH_SEED, MOVE_SWEET_SCENT, MOVE_GIGA_DRAIN}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0xF, + .nickname = _("ROSELIA"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_MR_MIME, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_SAFEGUARD, MOVE_REFLECT, MOVE_LIGHT_SCREEN, MOVE_PSYCHIC}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x82, + .nickname = _("MR. MIME"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_PLUSLE, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_RAIN_DANCE, MOVE_LIGHT_SCREEN, MOVE_HELPING_HAND, MOVE_THUNDER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x5, + .nickname = _("PLUSLE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_TOGEPI, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_LIGHT_SCREEN, MOVE_REFLECT, MOVE_FOLLOW_ME, MOVE_METRONOME}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x37, + .nickname = _("TOGEPI"), + .friendship = 255, + }, + }, + }, + }, + .data = {0xD1, 0xD5, 0xD5, 0xD5, 0xD9, 0xD9, 0x1B, 0x1C, 0x1D, 0xC5, 0xC6, 0xCE, 0xD5, 0xDB, 0xD5, 0x8, 0xD1, 0xCB, 0xC4, 0xC4, 0xDB, 0xDB, 0xC4, 0xC4, 0xC4, 0xCC, 0xCC, 0xCC, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xDB, 0x17, 0x17, 0x17, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xD5, 0x17, 0x17, 0x17, 0xD5, 0xD5, 0xD5, 0xD5, 0xDF, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0x17, 0x17, 0x1F, 0xCB, 0xCB, 0xC4, 0xC4, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xC4, 0xCB, 0xCB, 0xDF, 0xD5, 0xD5, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xDB, 0xC4, 0xC4, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xD5, 0xD5, 0xDF, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xC4, 0xC4, 0xDB, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xCB, 0xCB, 0xDF, 0xD5, 0xD5, 0xCB, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xC4, 0xC4, 0xDB, 0xC4, 0xC4, 0xC4, 0xDB, 0xCB, 0x8, 0xD1, 0xCB, 0xDB, 0xCB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0xDB, 0xD5, 0xD5, 0xD5, 0xCB, 0x8, 0xD1, 0xC4, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0x8, 0xD1, 0xDB, 0xDB, 0xCB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0x8, 0xD1, 0xDB, 0xDB, 0xC4, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xC4, 0xC4, 0xC4, 0xC4, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x73FB, 0x400B, 0x400B, 0x51EB, 0x538B, 0x51BB, 0x518B, 0x51EB, 0x518B, 0x51BB, 0x5003, 0x501F, 0x101F, 0x101F, 0xFFFF}, + .coords = {180, 233}, + .direction = 0x3, + .range = 0x35, + }, + [2] = + { + .unk0 = 0x15, + .unk1 = 0x16, + .trainers = + { + [0] = + { + .name = _("SALVADORE"), + .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M, + .unused = 0, + .speechBefore = {EC_WORD_LET_S, EC_MOVE2(WRAP), EC_WORD_THINGS, EC_WORD_UP, EC_WORD_HERE, EC_WORD_HEY_QUES}, + .speechWin = {EC_WORD_WOULD, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_GO_HOME, EC_WORD_QUES}, + .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_SORRY, EC_WORD_FRIEND}, + .speechAfter = {EC_WORD_HAVEN_T, EC_WORD_YOU, EC_WORD_DONE, EC_WORD_ENOUGH, EC_WORD_QUES, 0xFFFF}, + .mons = + { + [0] = + { + .species = SPECIES_VAPOREON, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_HAZE, MOVE_HELPING_HAND, MOVE_TICKLE, MOVE_WATER_PULSE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x37, + .nickname = _("VAPOREON"), + .friendship = 0, + }, + [1] = + { + .species = SPECIES_DODRIO, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_HAZE, MOVE_TRI_ATTACK, MOVE_TAUNT, MOVE_TORMENT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x8A, + .nickname = _("DODRIO"), + .friendship = 0, + }, + [2] = + { + .species = SPECIES_OMASTAR, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_HAZE, MOVE_HYDRO_PUMP, MOVE_TICKLE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x14, + .nickname = _("OMASTAR"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_LICKITUNG, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8, + .nickname = _("LICKITUNG"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_SLOWBRO, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_BELLY_DRUM, MOVE_MUD_SLAP, MOVE_SWAGGER, MOVE_AMNESIA}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x94, + .nickname = _("SLOWBRO"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_LINOONE, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_BELLY_DRUM, MOVE_REST, MOVE_MUD_SLAP, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 20, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8, + .nickname = _("LINOONE"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("VERONICA"), + .facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F, + .unused = 0, + .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_STRONG, EC_WORD_BEAUTY, EC_WORD_AROUND, EC_WORD_HERE}, + .speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL, 0xFFFF}, + .speechLose = {EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_TODAY, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL}, + .speechAfter = {EC_WORD_WHY, EC_WORD_YES, EC_WORD_I_AM, EC_WORD_ANGRY, EC_WORD_THANK_YOU, EC_WORD_EXCL}, + .mons = + { + [0] = + { + .species = SPECIES_SKITTY, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_PSYCH_UP, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_IRON_TAIL}, + .level = 0, + .ppBonuses = 0, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xCB, + .nickname = _("SKITTY"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MEDICHAM, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_PSYCH_UP, MOVE_HI_JUMP_KICK, MOVE_MEGA_KICK, MOVE_ROCK_SLIDE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xD, + .nickname = _("MEDICHAM"), + .friendship = 0, + }, + [2] = + { + .species = SPECIES_STANTLER, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_PSYCH_UP, MOVE_RETURN, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .speedEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("STANTLER"), + .friendship = 0, + }, + [3] = + { + .species = SPECIES_NIDOQUEEN, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_SUPERPOWER, MOVE_BITE, MOVE_CHARM, MOVE_FLATTER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 20, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("NIDOQUEEN"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_NINETALES, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_OVERHEAT, MOVE_QUICK_ATTACK, MOVE_SPITE, MOVE_TAIL_WHIP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xD7, + .nickname = _("NINETALES"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_CHARIZARD, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_OVERHEAT, MOVE_BEAT_UP, MOVE_SCARY_FACE, MOVE_GROWL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x28, + .nickname = _("CHARIZARD"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x35, 0x35, 0x35, 0x26, 0x26, 0x13, 0x14, 0x15, 0x38, 0x26, 0x2E, 0x35, 0x35, 0x3B, 0x8, 0x69, 0x63, 0x64, 0x64, 0x64, 0x64, 0x71, 0x71, 0x71, 0x72, 0x64, 0x64, 0x64, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x43, 0x41, 0x40, 0x41, 0x42, 0x41, 0x41, 0x4A, 0x42, 0x41, 0x41, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x43, 0x4B, 0x43, 0x43, 0x41, 0x42, 0x42, 0x40, 0x41, 0x40, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x40, 0x42, 0x42, 0x41, 0x41, 0x42, 0x4A, 0x42, 0x41, 0x42, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x42, 0x41, 0x43, 0x4B, 0x41, 0x41, 0x41, 0x40, 0x43, 0x41, 0x63, 0x73, 0x8, 0x69, 0x63, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x63, 0x73, 0x8, 0x69, 0x63, 0x41, 0x40, 0x43, 0x41, 0x42, 0x42, 0x41, 0x4A, 0x42, 0x41, 0x42, 0x63, 0x73, 0x8, 0x69, 0x64, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x64, 0x73, 0x73, 0x73, 0x64, 0x73, 0x8, 0x69, 0x43, 0x43, 0x41, 0x42, 0x42, 0x41, 0x43, 0x41, 0x41, 0x40, 0x42, 0x41, 0x42, 0x73, 0x8, 0x69, 0x42, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x42, 0x73, 0x8}, + .unk3A0 = {0x381, 0x7C3D, 0x4005, 0x4005, 0x4005, 0x4045, 0x4005, 0x4805, 0x4005, 0x4045, 0x4005, 0x4205, 0x4005, 0x4045, 0x1, 0x1}, + .coords = {37, 41}, + .direction = 0x23, + .range = 0x33, + }, + [3] = + { + .unk0 = 0x17, + .unk1 = 0x18, + .trainers = + { + [0] = + { + .name = _("KEENAN"), + .facilityClass = FACILITY_CLASS_PSYCHIC_M, + .unused = 0, + .speechBefore = {EC_WORD_YOU, EC_WORD_LOOK, EC_WORD_SO, EC_WORD_HURRIED, 0xFFFF, 0xFFFF}, + .speechWin = {EC_WORD_TOO, EC_WORD_BAD, 0xFFFF, EC_WORD_TIME, EC_WORD_IS, EC_WORD_UP}, + .speechLose = {EC_WORD_DOES, EC_WORD_THE, EC_WORD_TIME, EC_WORD_WORRY, EC_WORD_YOU, EC_WORD_QUES}, + .speechAfter = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_HAVE, EC_WORD_TIME, EC_WORD_TO, EC_WORD_CHAT}, + .mons = + { + [0] = + { + .species = SPECIES_ALAKAZAM, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_SKILL_SWAP, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_REFLECT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x41, + .nickname = _("ALAKAZAM"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_BLISSEY, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_SKILL_SWAP, MOVE_EGG_BOMB, MOVE_THUNDERBOLT, MOVE_SING}, + .level = 0, + .ppBonuses = 0, + .defenseEV = 255, + .spAttackEV = 155, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 1, + .personality = 0xF, + .nickname = _("BLISSEY"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_GRUMPIG, + .heldItem = ITEM_TWISTED_SPOON, + .moves = {MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_REST}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spAttackEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x8C, + .nickname = _("GRUMPIG"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_GARDEVOIR, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_SKILL_SWAP, MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 1, + .personality = 0xF, + .nickname = _("GARDEVOIR"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_VENOMOTH, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SKILL_SWAP, MOVE_SIGNAL_BEAM, MOVE_SLEEP_POWDER, MOVE_TOXIC}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x80, + .nickname = _("VENOMOTH"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ESPEON, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_SKILL_SWAP, MOVE_PSYBEAM, MOVE_SWIFT, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xF, + .nickname = _("ESPEON"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("KRISTINA"), + .facilityClass = FACILITY_CLASS_AROMA_LADY, + .unused = 0, + .speechBefore = {EC_WORD_IT_S, EC_WORD_HOT, EC_WORD_ELLIPSIS, EC_WORD_WHAT, EC_WORD_A, EC_WORD_STENCH}, + .speechWin = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_AN, EC_WORD_OFFENSIVE, EC_WORD_STENCH}, + .speechLose = {EC_WORD_I, EC_MOVE2(COVET), EC_WORD_ANY, EC_WORD_STRONG, EC_WORD_STENCH, 0xFFFF}, + .speechAfter = {EC_WORD_MY, EC_WORD_SENSE, EC_WORD_OF, EC_WORD_SMELL, EC_WORD_ISN_T, EC_WORD_NORMAL}, + .mons = + { + [0] = + { + .species = SPECIES_WEEZING, + .heldItem = ITEM_POISON_BARB, + .moves = {MOVE_TOXIC, MOVE_SLUDGE_BOMB, MOVE_SMOKESCREEN, MOVE_HAZE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("WEEZING"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_GLOOM, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_PETAL_DANCE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8C, + .nickname = _("GLOOM"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_MUK, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SCREECH, MOVE_DISABLE, MOVE_SLUDGE_BOMB, MOVE_ACID_ARMOR}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("MUK"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_TROPIUS, + .heldItem = ITEM_WHITE_HERB, + .moves = {MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_SWEET_SCENT, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .attackEV = 120, + .speedEV = 255, + .spAttackEV = 135, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x83, + .nickname = _("TROPIUS"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_BELLOSSOM, + .heldItem = ITEM_MENTAL_HERB, + .moves = {MOVE_SWEET_SCENT, MOVE_PETAL_DANCE, MOVE_STUN_SPORE, MOVE_SLUDGE_BOMB}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x6, + .nickname = _("BELLOSSOM"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_MEGANIUM, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_RAZOR_LEAF, MOVE_BODY_SLAM, MOVE_LEECH_SEED, MOVE_SYNTHESIS}, + .level = 0, + .ppBonuses = 0, + .attackEV = 200, + .speedEV = 110, + .spAttackEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x1F, + .nickname = _("MEGANIUM"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x1F, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x24, 0x24, 0x24, 0x2B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x35, 0x35, 0x3B, 0x35, 0x35, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x2C, 0x2C, 0x3B, 0x2C, 0x2C, 0x8, 0x33, 0x17, 0x1F, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x34, 0x17, 0x2C, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2C, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0x2C, 0x3B, 0x3B, 0x3B, 0x3B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x1F, 0x17, 0x17, 0x17, 0x17, 0x1F, 0x17, 0x3B, 0x3B, 0x3B, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x35, 0x1F, 0x17, 0x17, 0x1F, 0x17, 0x8, 0x34, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x2C, 0x3B, 0x3B, 0x2B, 0x17, 0x8, 0x17, 0x17, 0x17, 0x1F, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x17, 0x17, 0x2C, 0x17, 0x8, 0x1F, 0x17, 0x17, 0x2C, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x3B, 0x1F, 0x3B, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x3B, 0x3B, 0x3B, 0x2B, 0x17, 0x3B, 0x2B, 0x3B, 0x17, 0x8, 0x33, 0x17, 0x17, 0x17, 0x17, 0x2B, 0x35, 0x35, 0x35, 0x2B, 0x17, 0x3B, 0x2C, 0x3B, 0x17, 0x8, 0x34, 0x17, 0x17, 0x17, 0x17, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x7C1, 0x8441, 0x8477, 0x8441, 0xA441, 0x401, 0x1, 0x8401, 0x8465, 0x445, 0x1441, 0x8449, 0x8449, 0x87C1, 0xFFFF}, + .coords = {71, 167}, + .direction = 0x1, + .range = 0x33, + }, + }, }; static const struct TrHillTag sDataTagVariety = { - .unkField_0 = 8, - .unused1 = 1, - .unkField_2 = 4, - .unused3 = 0, - .unused4 = 21, - .unused5 = 76, - .unused6 = 5, - .floors = - { - [0] = - { - .unk0 = 0x29, - .unk1 = 0x2A, - .trainers = - { - [0] = - { - .name = _("TERRANCE"), - .facilityClass = FACILITY_CLASS_GENTLEMAN, - .unused = 0, - .speechBefore = {0x1405, 0xA22, 0x1000, 0x20F, 0x1020, 0x26D9}, - .speechWin = {0x811, 0xA28, 0x619, 0x100B, 0xA05, 0x26D9}, - .speechLose = {0x1E19, 0xA28, 0x26D9, 0x102F, 0xA02, 0xFFFF}, - .speechAfter = {0x817, 0x809, 0xA28, 0xA33, 0xFFFF, 0xFFFF}, - .mons = - { - [0] = - { - .species = SPECIES_DELIBIRD, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_PRESENT, MOVE_SPLASH, MOVE_HAIL, MOVE_PROTECT}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0x8A, - .nickname = _("DELIBIRD"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_CLEFAIRY, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_PRESENT, MOVE_COSMIC_POWER, MOVE_LIGHT_SCREEN, MOVE_MOONLIGHT}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xD, - .nickname = _("CLEFAIRY"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_PIKACHU, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_PRESENT, MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_AGILITY}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xD, - .nickname = _("PIKACHU"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_MARILL, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_PRESENT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_ENDURE}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0x8A, - .nickname = _("MARILL"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_JIGGLYPUFF, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_PRESENT, MOVE_SING, MOVE_DISABLE, MOVE_REST}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xD, - .nickname = _("JIGGLYPUFF"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_TOGETIC, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_PRESENT, MOVE_CHARM, MOVE_SWEET_KISS, MOVE_WISH}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0x26, - .nickname = _("TOGETIC"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("ELIZABETH"), - .facilityClass = FACILITY_CLASS_LADY, - .unused = 0, - .speechBefore = {0x1016, 0xA02, 0x61B, 0xA14, 0x2474, 0xC03}, - .speechWin = {0xE1D, 0x1027, 0x1E29, 0xA01, 0x100A, 0x1212}, - .speechLose = {0x1E04, 0x1017, 0x1C06, 0x180D, 0x1038, 0xFFFF}, - .speechAfter = {0xA29, 0xE09, 0x121A, 0xE15, 0x120E, 0x1C1A}, - .mons = - { - [0] = - { - .species = SPECIES_WIGGLYTUFF, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_SING, MOVE_DREAM_EATER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0xC1, - .nickname = _("WIGGLYTUFF"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_SABLEYE, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_ASTONISH, MOVE_FAINT_ATTACK, MOVE_DETECT, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x87, - .nickname = _("SABLEYE"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_GRUMPIG, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_PSYBEAM, MOVE_MAGIC_COAT, MOVE_BOUNCE, MOVE_FUTURE_SIGHT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0xA, - .nickname = _("GRUMPIG"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_CORSOLA, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_BUBBLE_BEAM, MOVE_ROCK_BLAST, MOVE_REFLECT, MOVE_LIGHT_SCREEN}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x12, - .nickname = _("CORSOLA"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_CLAMPERL, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_WHIRLPOOL, MOVE_IRON_DEFENSE, MOVE_ENDURE, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0xA, - .nickname = _("CLAMPERL"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_STARMIE, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_DIVE, MOVE_ICY_WIND, MOVE_SWIFT, MOVE_SKILL_SWAP}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0xA, - .nickname = _("STARMIE"), - .friendship = 255, - }, - }, - }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x40, 0x41, 0x41, 0x8, 0x40, 0xFB, 0x43, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x42, 0x42, 0x42, 0xFB, 0x41, 0x8, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x43, 0x43, 0xFB, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0xFB, 0x43, 0x41, 0x42, 0x40, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x40, 0x43, 0x43, 0x43, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x42, 0x41, 0xFE, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x42, 0x41, 0x43, 0x43, 0x43, 0x41, 0x40, 0x42, 0x42, 0x42, 0x42, 0x41, 0x40, 0x41, 0x8, 0x40, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xFB, 0x41, 0x40, 0x41, 0x8, 0x40, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0xFB, 0x40, 0x41, 0x8, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x8, 0x40, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x8}, - .unk3A0 = {0x381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}, - .coords = {133, 137}, - .direction = 0x23, - .range = 0x33, - }, - [1] = - { - .unk0 = 0x2B, - .unk1 = 0x2C, - .trainers = - { - [0] = - { - .name = _("ANNABELL"), - .facilityClass = FACILITY_CLASS_PARASOL_LADY, - .unused = 0, - .speechBefore = {0x81E, 0x100F, 0xA02, 0xE09, 0x2813, 0xC03}, - .speechWin = {0xA1F, 0xA02, 0xE09, 0x1440, 0xC03, 0xFFFF}, - .speechLose = {0xA01, 0x1016, 0x1239, 0xA06, 0xE09, 0x1240}, - .speechAfter = {0xA05, 0x20E, 0x1A35, 0xE25, 0x102F, 0x449}, - .mons = - { - [0] = - { - .species = SPECIES_JIGGLYPUFF, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_SING, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 85, - .attackEV = 85, - .defenseEV = 85, - .speedEV = 85, - .spAttackEV = 85, - .spDefenseEV = 85, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x0, - .nickname = _("JIGGLYPUFF"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_JYNX, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_PERISH_SONG, MOVE_FAKE_TEARS, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 85, - .attackEV = 85, - .defenseEV = 85, - .speedEV = 85, - .spAttackEV = 85, - .spDefenseEV = 85, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x0, - .nickname = _("JYNX"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_EXPLOUD, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_HOWL, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 85, - .attackEV = 85, - .defenseEV = 85, - .speedEV = 85, - .spAttackEV = 85, - .spDefenseEV = 85, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x96, - .nickname = _("EXPLOUD"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_ABSOL, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_SWORDS_DANCE, MOVE_SLASH, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 85, - .attackEV = 85, - .defenseEV = 85, - .speedEV = 85, - .spAttackEV = 85, - .spDefenseEV = 85, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x96, - .nickname = _("ABSOL"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_PIDGEOTTO, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_FEATHER_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 85, - .attackEV = 85, - .defenseEV = 85, - .speedEV = 85, - .spAttackEV = 85, - .spDefenseEV = 85, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x96, - .nickname = _("PIDGEOTTO"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_ALTARIA, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 85, - .attackEV = 85, - .defenseEV = 85, - .speedEV = 85, - .spAttackEV = 85, - .spDefenseEV = 85, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x0, - .nickname = _("ALTARIA"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("COLEMAN"), - .facilityClass = FACILITY_CLASS_COLLECTOR, - .unused = 0, - .speechBefore = {0xA01, 0x1645, 0xA2C, 0x102E, 0xA28, 0x1A00}, - .speechWin = {0x103B, 0xA28, 0x1A00, 0x1239, 0x1E14, 0xC03}, - .speechLose = {0xA06, 0x103A, 0x1020, 0x24D7, 0xA27, 0xC00}, - .speechAfter = {0xA2A, 0x60E, 0x200, 0x102E, 0xA28, 0x1A00}, - .mons = - { - [0] = - { - .species = SPECIES_CHIMECHO, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0xD, - .nickname = _("CHIMECHO"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_WHISMUR, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0xD, - .nickname = _("WHISMUR"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_YANMA, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x8A, - .nickname = _("YANMA"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_ILLUMISE, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0xA, - .nickname = _("ILLUMISE"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_SPHEAL, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0xA, - .nickname = _("SPHEAL"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_VIGOROTH, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x87, - .nickname = _("VIGOROTH"), - .friendship = 255, - }, - }, - }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x9B, 0x9C, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x8, 0x9C, 0x9B, 0x96, 0x40, 0xDB, 0xDB, 0x40, 0x96, 0x40, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x8, 0x91, 0x96, 0x40, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9C, 0x8, 0x91, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x9B, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x8, 0x91, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x8, 0x91, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9C, 0x8, 0x9C, 0x9B, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x8, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9C, 0x96, 0x8, 0xD6, 0x96, 0x9C, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x9C, 0xD6, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0xD6, 0x9C, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF}, - .coords = {131, 139}, - .direction = 0x23, - .range = 0x77, - }, - [2] = - { - .unk0 = 0x2D, - .unk1 = 0x2E, - .trainers = - { - [0] = - { - .name = _("ENRIQUE"), - .facilityClass = FACILITY_CLASS_RICH_BOY, - .unused = 0, - .speechBefore = {0x20F, 0xE25, 0x102B, 0x1021, 0x2017, 0x1C13}, - .speechWin = {0x822, 0x822, 0xC00, 0x81B, 0xFFFF, 0xFFFF}, - .speechLose = {0xC3B, 0x162D, 0xA02, 0x604, 0xC03, 0xFFFF}, - .speechAfter = {0x103B, 0xA02, 0x1239, 0xA28, 0x142B, 0xC03}, - .mons = - { - [0] = - { - .species = SPECIES_WOOPER, - .heldItem = ITEM_FIGY_BERRY, - .moves = {MOVE_RAIN_DANCE, MOVE_YAWN, MOVE_SURF, MOVE_HAZE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 6, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x8C, - .nickname = _("WOOPER"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_POLIWAG, - .heldItem = ITEM_WIKI_BERRY, - .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_MIST, MOVE_HYPNOSIS}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 6, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0x3, - .nickname = _("POLIWAG"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_PSYDUCK, - .heldItem = ITEM_AGUAV_BERRY, - .moves = {MOVE_HYPNOSIS, MOVE_SURF, MOVE_DISABLE, MOVE_SEISMIC_TOSS}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x3, - .nickname = _("PSYDUCK"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_RHYDON, - .heldItem = ITEM_SOFT_SAND, - .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .speedEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x96, - .nickname = _("RHYDON"), - .friendship = 0, - }, - [4] = - { - .species = SPECIES_RHYHORN, - .heldItem = ITEM_SOFT_SAND, - .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x3, - .nickname = _("RHYHORN"), - .friendship = 0, - }, - [5] = - { - .species = SPECIES_CUBONE, - .heldItem = ITEM_SOFT_SAND, - .moves = {MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0x80, - .nickname = _("CUBONE"), - .friendship = 0, - }, - }, - }, - [1] = - { - .name = _("COLLEEN"), - .facilityClass = FACILITY_CLASS_LADY, - .unused = 0, - .speechBefore = {0xA01, 0x100A, 0x103A, 0x102F, 0x40A, 0x1038}, - .speechWin = {0xA01, 0x103A, 0x1E0F, 0x40A, 0x1E05, 0xC00}, - .speechLose = {0x818, 0xE15, 0x2216, 0xA28, 0x1827, 0xC04}, - .speechAfter = {0xA01, 0x1236, 0x102F, 0x601, 0xE1C, 0x1C05}, - .mons = - { - [0] = - { - .species = SPECIES_MAGNEMITE, - .heldItem = ITEM_MAGNET, - .moves = {MOVE_THUNDER, MOVE_ZAP_CANNON, MOVE_SPARK, MOVE_THUNDER_SHOCK}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x8C, - .nickname = _("MAGNEMITE"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_ELECTABUZZ, - .heldItem = ITEM_MAGNET, - .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_SHOCK_WAVE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x41, - .nickname = _("ELECTABUZZ"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_FLAAFFY, - .heldItem = ITEM_MAGNET, - .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_SHOCK_WAVE, MOVE_THUNDER_SHOCK}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .spAttackEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x0, - .nickname = _("FLAAFFY"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_BALTOY, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x3, - .nickname = _("BALTOY"), - .friendship = 0, - }, - [4] = - { - .species = SPECIES_PINECO, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .speedEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x3, - .nickname = _("PINECO"), - .friendship = 0, - }, - [5] = - { - .species = SPECIES_VOLTORB, - .heldItem = ITEM_SILK_SCARF, - .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x80, - .nickname = _("VOLTORB"), - .friendship = 0, - }, - }, - }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x1C, 0x1D, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x84, 0x84, 0x84, 0x9A, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x17, 0xBB, 0xBB, 0x8}, - .unk3A0 = {0x381, 0x381, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1}, - .coords = {25, 30}, - .direction = 0x23, - .range = 0x44, - }, - [3] = - { - .unk0 = 0x2F, - .unk1 = 0x30, - .trainers = - { - [0] = - { - .name = _("KIMBERLY"), - .facilityClass = FACILITY_CLASS_POKEFAN_F, - .unused = 0, - .speechBefore = {0xA01, 0x103A, 0x163A, 0x1036, 0xA28, 0x45D}, - .speechWin = {0xA29, 0x1022, 0x122E, 0xA02, 0x1212, 0xC03}, - .speechLose = {0xA06, 0x1020, 0xE02, 0xA21, 0x1029, 0x1443}, - .speechAfter = {0xA28, 0x45D, 0x100B, 0x1E29, 0x102B, 0xA14}, - .mons = - { - [0] = - { - .species = SPECIES_UNOWN, - .heldItem = ITEM_MIRACLE_SEED, - .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 30, - .attackIV = 31, - .defenseIV = 30, - .speedIV = 31, - .spAttackIV = 30, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x202, - .nickname = _("UNOWN"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_UNOWN, - .heldItem = ITEM_MYSTIC_WATER, - .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 30, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 30, - .spAttackIV = 30, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x10001, - .nickname = _("UNOWN"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_UNOWN, - .heldItem = ITEM_BLACK_BELT, - .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 30, - .attackIV = 30, - .defenseIV = 30, - .speedIV = 30, - .spAttackIV = 30, - .spDefenseIV = 30, - .altAbility = 0, - .personality = 0x102, - .nickname = _("UNOWN"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_SPINDA, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS}, - .level = 0, - .ppBonuses = 0, - .hpEV = 110, - .defenseEV = 200, - .spDefenseEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x88FE980F, - .nickname = _("SPINDA"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_PLUSLE, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xF, - .nickname = _("PLUSLE"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_VOLBEAT, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_HELPING_HAND, MOVE_SIGNAL_BEAM, MOVE_SOLAR_BEAM, MOVE_MOONLIGHT}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0xF, - .nickname = _("VOLBEAT"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("FRANCISCO"), - .facilityClass = FACILITY_CLASS_POKEFAN_M, - .unused = 0, - .speechBefore = {0xA01, 0x1822, 0x1E10, 0x1C04, 0x1039, 0xFFFF}, - .speechWin = {0x1025, 0xE1D, 0xE0F, 0xA02, 0x631, 0xFFFF}, - .speechLose = {0x81D, 0x1004, 0xA01, 0x162D, 0x123F, 0xA02}, - .speechAfter = {0x801, 0xC04, 0xFFFF, 0x811, 0xFFFF, 0xFFFF}, - .mons = - { - [0] = - { - .species = SPECIES_SPINDA, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS}, - .level = 0, - .ppBonuses = 0, - .hpEV = 110, - .defenseEV = 200, - .spDefenseEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xE2880098, - .nickname = _("SPINDA"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_MINUN, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x8C, - .nickname = _("MINUN"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_ILLUMISE, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_HELPING_HAND, MOVE_WISH, MOVE_THUNDERBOLT, MOVE_MOONLIGHT}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xF, - .nickname = _("ILLUMISE"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_UNOWN, - .heldItem = ITEM_CHARCOAL, - .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 30, - .attackIV = 31, - .defenseIV = 30, - .speedIV = 30, - .spAttackIV = 30, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x302, - .nickname = _("UNOWN"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_UNOWN, - .heldItem = ITEM_SOFT_SAND, - .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .attackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 30, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 30, - .spDefenseIV = 30, - .altAbility = 0, - .personality = 0x203, - .nickname = _("UNOWN"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_UNOWN, - .heldItem = ITEM_TWISTED_SPOON, - .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 30, - .speedIV = 30, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x301, - .nickname = _("UNOWN"), - .friendship = 255, - }, - }, - }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x5E, 0x41, 0x71, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x65, 0x40, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x42, 0x73, 0x41, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x43, 0x73, 0x43, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x8, 0x65, 0x42, 0x73, 0x42, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x8, 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x43, 0x6D, 0x41, 0x73, 0x43, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x8, 0x65, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x40, 0x73, 0x8, 0x6C, 0x73, 0x40, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x8, 0x69, 0x40, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x1, 0x2201, 0x1, 0x8881, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0xFFFF}, - .coords = {42, 46}, - .direction = 0x23, - .range = 0x33, - }, - }, + .unkField_0 = 8, + .unused1 = 1, + .unkField_2 = 4, + .unused3 = 0, + .unused4 = 21, + .unused5 = 76, + .unused6 = 5, + .floors = + { + [0] = + { + .unk0 = 0x29, + .unk1 = 0x2A, + .trainers = + { + [0] = + { + .name = _("TERRANCE"), + .facilityClass = FACILITY_CLASS_GENTLEMAN, + .unused = 0, + .speechBefore = {EC_WORD_GOOD, EC_WORD_CHILDREN, EC_WORD_WILL, EC_WORD_GET, EC_WORD_A, EC_MOVE2(PRESENT)}, + .speechWin = {EC_WORD_THANK_YOU, EC_WORD_MY, EC_WORD_VICTORY, EC_WORD_IS, EC_WORD_YOUR, EC_MOVE2(PRESENT)}, + .speechLose = {EC_WORD_THAT_WAS, EC_WORD_MY, EC_MOVE2(PRESENT), EC_WORD_TO, EC_WORD_YOU, 0xFFFF}, + .speechAfter = {EC_WORD_WELL_THEN, EC_WORD_CONGRATS, EC_WORD_MY, EC_WORD_FRIEND, 0xFFFF, 0xFFFF}, + .mons = + { + [0] = + { + .species = SPECIES_DELIBIRD, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_SPLASH, MOVE_HAIL, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x8A, + .nickname = _("DELIBIRD"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_CLEFAIRY, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_COSMIC_POWER, MOVE_LIGHT_SCREEN, MOVE_MOONLIGHT}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xD, + .nickname = _("CLEFAIRY"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_PIKACHU, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_AGILITY}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xD, + .nickname = _("PIKACHU"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_MARILL, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_ENDURE}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x8A, + .nickname = _("MARILL"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_JIGGLYPUFF, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_SING, MOVE_DISABLE, MOVE_REST}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xD, + .nickname = _("JIGGLYPUFF"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_TOGETIC, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_PRESENT, MOVE_CHARM, MOVE_SWEET_KISS, MOVE_WISH}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x26, + .nickname = _("TOGETIC"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("ELIZABETH"), + .facilityClass = FACILITY_CLASS_LADY, + .unused = 0, + .speechBefore = {EC_WORD_CAN, EC_WORD_YOU, EC_WORD_SENSE, EC_WORD_ME, EC_MOVE(FOCUS_ENERGY), EC_WORD_QUES}, + .speechWin = {EC_WORD_THAT_S, EC_WORD_ABOUT, EC_WORD_RIGHT, EC_WORD_I, EC_WORD_WOULD, EC_WORD_THINK}, + .speechLose = {EC_WORD_THINGS, EC_WORD_DON_T, EC_WORD_ALWAYS, EC_WORD_WORK, EC_WORD_OUT, 0xFFFF}, + .speechAfter = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_LONESOME, EC_WORD_AND, EC_WORD_SAD, EC_WORD_NOW}, + .mons = + { + [0] = + { + .species = SPECIES_WIGGLYTUFF, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_SING, MOVE_DREAM_EATER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xC1, + .nickname = _("WIGGLYTUFF"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_SABLEYE, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_ASTONISH, MOVE_FAINT_ATTACK, MOVE_DETECT, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x87, + .nickname = _("SABLEYE"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_GRUMPIG, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_PSYBEAM, MOVE_MAGIC_COAT, MOVE_BOUNCE, MOVE_FUTURE_SIGHT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xA, + .nickname = _("GRUMPIG"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_CORSOLA, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_BUBBLE_BEAM, MOVE_ROCK_BLAST, MOVE_REFLECT, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x12, + .nickname = _("CORSOLA"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_CLAMPERL, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_WHIRLPOOL, MOVE_IRON_DEFENSE, MOVE_ENDURE, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xA, + .nickname = _("CLAMPERL"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_STARMIE, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_DIVE, MOVE_ICY_WIND, MOVE_SWIFT, MOVE_SKILL_SWAP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xA, + .nickname = _("STARMIE"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x40, 0x41, 0x41, 0x8, 0x40, 0xFB, 0x43, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x42, 0x42, 0x42, 0xFB, 0x41, 0x8, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x42, 0x40, 0x43, 0x41, 0x43, 0x43, 0xFB, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0xFB, 0x43, 0x41, 0x42, 0x40, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x40, 0x43, 0x43, 0x43, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x42, 0x41, 0xFE, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x41, 0x41, 0x41, 0xFE, 0xFE, 0xFE, 0xFB, 0xFE, 0xFE, 0xFE, 0x41, 0x41, 0x40, 0x41, 0x8, 0x40, 0x42, 0x41, 0x43, 0x43, 0x43, 0x41, 0x40, 0x42, 0x42, 0x42, 0x42, 0x41, 0x40, 0x41, 0x8, 0x40, 0x40, 0x41, 0xFB, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0xFB, 0x41, 0x40, 0x41, 0x8, 0x40, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0xFB, 0x40, 0x41, 0x8, 0x40, 0xFB, 0x43, 0x43, 0x41, 0x41, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0xFB, 0x41, 0x8, 0x40, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x8}, + .unk3A0 = {0x381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1}, + .coords = {133, 137}, + .direction = 0x23, + .range = 0x33, + }, + [1] = + { + .unk0 = 0x2B, + .unk1 = 0x2C, + .trainers = + { + [0] = + { + .name = _("ANNABELL"), + .facilityClass = FACILITY_CLASS_PARASOL_LADY, + .unused = 0, + .speechBefore = {EC_WORD_HI, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_UPBEAT, EC_WORD_QUES}, + .speechWin = {EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_WELL, EC_WORD_QUES, 0xFFFF}, + .speechLose = {EC_WORD_I, EC_WORD_CAN, EC_WORD_SEE, EC_WORD_YOU_RE, EC_WORD_FEELING, EC_WORD_GREAT}, + .speechAfter = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_LOOK, EC_WORD_READY, EC_WORD_TO, EC_WORD_HUSTLE}, + .mons = + { + [0] = + { + .species = SPECIES_JIGGLYPUFF, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SING, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x0, + .nickname = _("JIGGLYPUFF"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_JYNX, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_PERISH_SONG, MOVE_FAKE_TEARS, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x0, + .nickname = _("JYNX"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_EXPLOUD, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_HOWL, MOVE_HYPER_VOICE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x96, + .nickname = _("EXPLOUD"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_ABSOL, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SWORDS_DANCE, MOVE_SLASH, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x96, + .nickname = _("ABSOL"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_PIDGEOTTO, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_FEATHER_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x96, + .nickname = _("PIDGEOTTO"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ALTARIA, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_DRAGON_DANCE, MOVE_AERIAL_ACE, MOVE_ATTRACT, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 85, + .attackEV = 85, + .defenseEV = 85, + .speedEV = 85, + .spAttackEV = 85, + .spDefenseEV = 85, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x0, + .nickname = _("ALTARIA"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("COLEMAN"), + .facilityClass = FACILITY_CLASS_COLLECTOR, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_SEEK, EC_WORD_SOMEONE, EC_WORD_AS, EC_WORD_MY, EC_WORD_IDOL}, + .speechWin = {EC_WORD_DID, EC_WORD_MY, EC_WORD_IDOL, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES}, + .speechLose = {EC_WORD_YOU_RE, EC_WORD_LIKE, EC_WORD_A, EC_MOVE(HEAL_BELL), EC_WORD_TO_ME, EC_WORD_EXCL}, + .speechAfter = {EC_WORD_I_VE, EC_WORD_DECIDED, EC_WORD_I_CHOOSE_YOU, EC_WORD_AS, EC_WORD_MY, EC_WORD_IDOL}, + .mons = + { + [0] = + { + .species = SPECIES_CHIMECHO, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xD, + .nickname = _("CHIMECHO"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_WHISMUR, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xD, + .nickname = _("WHISMUR"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_YANMA, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_UPROAR, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x8A, + .nickname = _("YANMA"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_ILLUMISE, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xA, + .nickname = _("ILLUMISE"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_SPHEAL, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xA, + .nickname = _("SPHEAL"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_VIGOROTH, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_ENCORE, MOVE_ATTRACT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x87, + .nickname = _("VIGOROTH"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x9B, 0x9C, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x96, 0x40, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x8, 0x9C, 0x9B, 0x96, 0x40, 0xDB, 0xDB, 0x40, 0x96, 0x40, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x8, 0x91, 0x96, 0x40, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9C, 0x8, 0x91, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x9B, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0x42, 0x96, 0x8, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x8, 0x91, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x8, 0x91, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9C, 0x8, 0x9C, 0x9B, 0x9B, 0x96, 0x42, 0xDB, 0xDB, 0xD6, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x8, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0xDB, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9C, 0x96, 0x8, 0xD6, 0x96, 0x9C, 0x9B, 0x9B, 0x96, 0x41, 0xDB, 0x42, 0x96, 0x9B, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x9C, 0xD6, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0x40, 0x96, 0x9B, 0x9C, 0x9B, 0x96, 0xD6, 0x9C, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF}, + .coords = {131, 139}, + .direction = 0x23, + .range = 0x77, + }, + [2] = + { + .unk0 = 0x2D, + .unk1 = 0x2E, + .trainers = + { + [0] = + { + .name = _("ENRIQUE"), + .facilityClass = FACILITY_CLASS_RICH_BOY, + .unused = 0, + .speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_FOR, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_TIME}, + .speechWin = {EC_WORD_HEY, EC_WORD_HEY, EC_WORD_EXCL, EC_WORD_WHAT_S_UP_QUES, 0xFFFF, 0xFFFF}, + .speechLose = {EC_WORD_AWW, EC_WORD_COULDN_T, EC_WORD_YOU, EC_WORD_LET_ME_WIN, EC_WORD_QUES, 0xFFFF}, + .speechAfter = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_SKILL, EC_WORD_QUES}, + .mons = + { + [0] = + { + .species = SPECIES_WOOPER, + .heldItem = ITEM_FIGY_BERRY, + .moves = {MOVE_RAIN_DANCE, MOVE_YAWN, MOVE_SURF, MOVE_HAZE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 6, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8C, + .nickname = _("WOOPER"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_POLIWAG, + .heldItem = ITEM_WIKI_BERRY, + .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_MIST, MOVE_HYPNOSIS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 6, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x3, + .nickname = _("POLIWAG"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_PSYDUCK, + .heldItem = ITEM_AGUAV_BERRY, + .moves = {MOVE_HYPNOSIS, MOVE_SURF, MOVE_DISABLE, MOVE_SEISMIC_TOSS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("PSYDUCK"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_RHYDON, + .heldItem = ITEM_SOFT_SAND, + .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .speedEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x96, + .nickname = _("RHYDON"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_RHYHORN, + .heldItem = ITEM_SOFT_SAND, + .moves = {MOVE_EARTHQUAKE, MOVE_MAGNITUDE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("RHYHORN"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_CUBONE, + .heldItem = ITEM_SOFT_SAND, + .moves = {MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x80, + .nickname = _("CUBONE"), + .friendship = 0, + }, + }, + }, + [1] = + { + .name = _("COLLEEN"), + .facilityClass = FACILITY_CLASS_LADY, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_ROCK, EC_WORD_OUT}, + .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_ROCK, EC_WORD_THING, EC_WORD_EXCL}, + .speechLose = {EC_WORD_GO_AHEAD, EC_WORD_AND, EC_WORD_CRUSH, EC_WORD_MY, EC_WORD_DREAM, EC_WORD_ELLIPSIS}, + .speechAfter = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO, EC_WORD_WILD, EC_WORD_SOMETIME}, + .mons = + { + [0] = + { + .species = SPECIES_MAGNEMITE, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_THUNDER, MOVE_ZAP_CANNON, MOVE_SPARK, MOVE_THUNDER_SHOCK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8C, + .nickname = _("MAGNEMITE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_ELECTABUZZ, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_THUNDER_PUNCH, MOVE_SHOCK_WAVE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x41, + .nickname = _("ELECTABUZZ"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_FLAAFFY, + .heldItem = ITEM_MAGNET, + .moves = {MOVE_THUNDER, MOVE_THUNDERBOLT, MOVE_SHOCK_WAVE, MOVE_THUNDER_SHOCK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .spAttackEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x0, + .nickname = _("FLAAFFY"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_BALTOY, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("BALTOY"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_PINECO, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .speedEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("PINECO"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_VOLTORB, + .heldItem = ITEM_SILK_SCARF, + .moves = {MOVE_EXPLOSION, MOVE_SELF_DESTRUCT, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x80, + .nickname = _("VOLTORB"), + .friendship = 0, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x1C, 0x1D, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x84, 0x84, 0x84, 0x9A, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0x17, 0x17, 0x17, 0xBB, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x8, 0x17, 0xB2, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xA1, 0xB0, 0x17, 0xB2, 0xA1, 0x8, 0x17, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0x17, 0xBB, 0xBB, 0x8}, + .unk3A0 = {0x381, 0x381, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1, 0x7FF7, 0x1}, + .coords = {25, 30}, + .direction = 0x23, + .range = 0x44, + }, + [3] = + { + .unk0 = 0x2F, + .unk1 = 0x30, + .trainers = + { + [0] = + { + .name = _("KIMBERLY"), + .facilityClass = FACILITY_CLASS_POKEFAN_F, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_WORKING, EC_WORD_AT, EC_WORD_MY, EC_WORD_OWN_TEMPO}, + .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_BAD, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_QUES}, + .speechLose = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_MEAN, EC_WORD_KID, EC_WORD_IT, EC_WORD_SEEMS}, + .speechAfter = {EC_WORD_MY, EC_WORD_OWN_TEMPO, EC_WORD_IS, EC_WORD_RIGHT, EC_WORD_FOR, EC_WORD_ME}, + .mons = + { + [0] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 30, + .attackIV = 31, + .defenseIV = 30, + .speedIV = 31, + .spAttackIV = 30, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x202, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_MYSTIC_WATER, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 30, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 30, + .spAttackIV = 30, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x10001, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_BLACK_BELT, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 30, + .attackIV = 30, + .defenseIV = 30, + .speedIV = 30, + .spAttackIV = 30, + .spDefenseIV = 30, + .altAbility = 0, + .personality = 0x102, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_SPINDA, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x88FE980F, + .nickname = _("SPINDA"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_PLUSLE, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("PLUSLE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_VOLBEAT, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_HELPING_HAND, MOVE_SIGNAL_BEAM, MOVE_SOLAR_BEAM, MOVE_MOONLIGHT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0xF, + .nickname = _("VOLBEAT"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("FRANCISCO"), + .facilityClass = FACILITY_CLASS_POKEFAN_M, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_STUDY, EC_WORD_EVERY, EC_WORD_DAY, EC_WORD_TOO, 0xFFFF}, + .speechWin = {EC_WORD_SO, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_LOSE, 0xFFFF}, + .speechLose = {EC_WORD_NO, EC_WORD_WONDER, EC_WORD_I, EC_WORD_COULDN_T, EC_WORD_BEAT, EC_WORD_YOU}, + .speechAfter = {EC_WORD_YES, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_THANK_YOU, 0xFFFF, 0xFFFF}, + .mons = + { + [0] = + { + .species = SPECIES_SPINDA, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_TEETER_DANCE, MOVE_DIZZY_PUNCH, MOVE_CALM_MIND, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xE2880098, + .nickname = _("SPINDA"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MINUN, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_HELPING_HAND, MOVE_THUNDERBOLT, MOVE_AGILITY, MOVE_BATON_PASS}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8C, + .nickname = _("MINUN"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_ILLUMISE, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_HELPING_HAND, MOVE_WISH, MOVE_THUNDERBOLT, MOVE_MOONLIGHT}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("ILLUMISE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_CHARCOAL, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 30, + .attackIV = 31, + .defenseIV = 30, + .speedIV = 30, + .spAttackIV = 30, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x302, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_SOFT_SAND, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 30, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 30, + .spDefenseIV = 30, + .altAbility = 0, + .personality = 0x203, + .nickname = _("UNOWN"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_UNOWN, + .heldItem = ITEM_TWISTED_SPOON, + .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 30, + .speedIV = 30, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x301, + .nickname = _("UNOWN"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x5E, 0x41, 0x71, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x65, 0x40, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x42, 0x45, 0x45, 0x45, 0x45, 0x45, 0x8, 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x42, 0x73, 0x41, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x43, 0x73, 0x43, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x8, 0x65, 0x42, 0x73, 0x42, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x8, 0x6C, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x8, 0x69, 0x40, 0x6D, 0x41, 0x73, 0x41, 0x6D, 0x42, 0x73, 0x43, 0x6D, 0x41, 0x73, 0x43, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x8, 0x65, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x42, 0x6D, 0x42, 0x73, 0x41, 0x6D, 0x40, 0x73, 0x8, 0x6C, 0x73, 0x40, 0x73, 0x64, 0x73, 0x41, 0x73, 0x64, 0x73, 0x42, 0x73, 0x64, 0x73, 0x42, 0x8, 0x69, 0x40, 0x6D, 0x42, 0x73, 0x42, 0x6D, 0x43, 0x73, 0x40, 0x6D, 0x41, 0x73, 0x40, 0x6D, 0x8, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x40, 0x73, 0x64, 0x73, 0x43, 0x73, 0x64, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x1, 0x2201, 0x1, 0x8881, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0x1, 0x8889, 0x1, 0x2223, 0xFFFF}, + .coords = {42, 46}, + .direction = 0x23, + .range = 0x33, + }, + }, }; static const struct TrHillTag sDataTagUnique = { - .unkField_0 = 8, - .unused1 = 3, - .unkField_2 = 4, - .unused3 = 0, - .unused4 = 243, - .unused5 = 82, - .unused6 = 6, - .floors = - { - [0] = - { - .unk0 = 0x31, - .unk1 = 0x32, - .trainers = - { - [0] = - { - .name = _("MEREDITH"), - .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, - .unused = 0, - .speechBefore = {0x1E02, 0xC04, 0xFFFF, 0xA01, 0xC04, 0xFFFF}, - .speechWin = {0xC1D, 0xC00, 0xFFFF, 0x1E02, 0xC04, 0xC3A}, - .speechLose = {0x1E02, 0xC04, 0xFFFF, 0xC0A, 0xC04, 0xFFFF}, - .speechAfter = {0x1E02, 0xC04, 0xFFFF, 0xA29, 0x120E, 0xC04}, - .mons = - { - [0] = - { - .species = SPECIES_SUNFLORA, - .heldItem = ITEM_PERSIM_BERRY, - .moves = {MOVE_PETAL_DANCE, MOVE_GRASS_WHISTLE, MOVE_LIGHT_SCREEN, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .defenseEV = 155, - .spDefenseEV = 100, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x0, - .nickname = _("SUNFLORA"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_TANGELA, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_GIGA_DRAIN, MOVE_SLEEP_POWDER, MOVE_AMNESIA, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spDefenseEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x91, - .nickname = _("TANGELA"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_VENUSAUR, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, - .hpEV = 100, - .attackEV = 110, - .defenseEV = 100, - .spAttackEV = 100, - .spDefenseEV = 100, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x1F, - .nickname = _("VENUSAUR"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_LANTURN, - .heldItem = ITEM_PERSIM_BERRY, - .moves = {MOVE_SPARK, MOVE_WATER_PULSE, MOVE_CONFUSE_RAY, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xF, - .nickname = _("LANTURN"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_MANECTRIC, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_THUNDERBOLT, MOVE_HEADBUTT, MOVE_BITE, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0xF, - .nickname = _("MANECTRIC"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_RAIKOU, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_THUNDER, MOVE_CRUNCH, MOVE_ROAR, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xF, - .nickname = _("RAIKOU"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("BERNARD"), - .facilityClass = FACILITY_CLASS_KINDLER, - .unused = 0, - .speechBefore = {0xA01, 0x1015, 0x631, 0x1E0F, 0x1400, 0x628}, - .speechWin = {0x103B, 0xA01, 0x415, 0xA02, 0x1E13, 0xC03}, - .speechLose = {0xC29, 0xC00, 0xA06, 0x1020, 0x1230, 0xA35}, - .speechAfter = {0xA05, 0x281D, 0xE20, 0x420, 0x141E, 0xC04}, - .mons = - { - [0] = - { - .species = SPECIES_RELICANTH, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_ANCIENT_POWER, MOVE_WATER_PULSE, MOVE_MUD_SPORT, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 155, - .defenseEV = 100, - .spDefenseEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x2F, - .nickname = _("RELICANTH"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_GOLDUCK, - .heldItem = ITEM_LAX_INCENSE, - .moves = {MOVE_SURF, MOVE_PSYBEAM, MOVE_BRICK_BREAK, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xF, - .nickname = _("GOLDUCK"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_BLASTOISE, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_HYDRO_PUMP, MOVE_BITE, MOVE_MIRROR_COAT, MOVE_RAIN_DANCE}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x28, - .nickname = _("BLASTOISE"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_MAGCARGO, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_HEAT_WAVE, MOVE_ROCK_SLIDE, MOVE_PROTECT, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spDefenseEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0x93, - .nickname = _("MAGCARGO"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_RAPIDASH, - .heldItem = ITEM_KINGS_ROCK, - .moves = {MOVE_FIRE_BLAST, MOVE_BOUNCE, MOVE_QUICK_ATTACK, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0xF, - .nickname = _("RAPIDASH"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_MOLTRES, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_SKY_ATTACK, MOVE_AERIAL_ACE, MOVE_ROAR, MOVE_SUNNY_DAY}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xF, - .nickname = _("MOLTRES"), - .friendship = 255, - }, - }, - }, - }, - .data = {0xF1, 0xF5, 0xFB, 0xF5, 0xE6, 0xE6, 0x1B, 0x14, 0x15, 0xF8, 0xF9, 0xFA, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xF9, 0xE6, 0xEE, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0x9B, 0x9B, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0x9B, 0xDB, 0xDB, 0x9B, 0xEC, 0xFB, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xF5, 0x95, 0x95, 0xF5, 0xF5, 0xF5, 0xEB, 0xEC, 0xEB, 0xFB, 0xEB, 0x8, 0xED, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x8, 0xF4, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xF5, 0xFB, 0x8, 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x5E01, 0x50FF, 0x5083, 0x503B, 0x5FEB, 0xC02B, 0x5FEB, 0x5009, 0x57FD, 0x1005, 0x7FF5, 0x15, 0x7FF5, 0x1, 0xFFFF}, - .coords = {52, 55}, - .direction = 0x23, - .range = 0x22, - }, - [1] = - { - .unk0 = 0x33, - .unk1 = 0x34, - .trainers = - { - [0] = - { - .name = _("ABRAHAM"), - .facilityClass = FACILITY_CLASS_RUIN_MANIAC, - .unused = 0, - .speechBefore = {0xA01, 0x103A, 0x1E0F, 0x20E, 0xE0D, 0x143C}, - .speechWin = {0x1E22, 0x1020, 0x1240, 0x20E, 0x1029, 0x100B}, - .speechLose = {0xA01, 0x1E26, 0x1020, 0x63E, 0x1030, 0x1C12}, - .speechAfter = {0xA01, 0x1236, 0x1020, 0x24A6, 0x1034, 0xA02}, - .mons = - { - [0] = - { - .species = SPECIES_SMEARGLE, - .heldItem = ITEM_SCOPE_LENS, - .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_IMPRISON}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x8A, - .nickname = _("SMEARGLE"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_SMEARGLE, - .heldItem = ITEM_CHESTO_BERRY, - .moves = {MOVE_REST, MOVE_THUNDER_WAVE, MOVE_FLAMETHROWER, MOVE_IMPRISON}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x87, - .nickname = _("SMEARGLE"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_SMEARGLE, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_EXPLOSION}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xD, - .nickname = _("SMEARGLE"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_SMEARGLE, - .heldItem = ITEM_SCOPE_LENS, - .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_IMPRISON}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xA, - .nickname = _("SMEARGLE"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_SMEARGLE, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_TOXIC, MOVE_PROTECT, MOVE_WILL_O_WISP, MOVE_IMPRISON}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xA, - .nickname = _("SMEARGLE"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_SMEARGLE, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x8A, - .nickname = _("SMEARGLE"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("LUC"), - .facilityClass = FACILITY_CLASS_TUBER_M, - .unused = 0, - .speechBefore = {0xA01, 0x101E, 0x1020, 0x415, 0x123A, 0x63E}, - .speechWin = {0xA28, 0x123A, 0x63E, 0x100B, 0x415, 0x100C}, - .speechLose = {0x103C, 0xA02, 0x1239, 0xA28, 0x63E, 0xC03}, - .speechAfter = {0xA29, 0x412, 0xE0A, 0xE29, 0x639, 0xC04}, - .mons = - { - [0] = - { - .species = SPECIES_STARYU, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_CAMOUFLAGE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 1, - .personality = 0xA, - .nickname = _("STARYU"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_MEOWTH, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_PAY_DAY, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0xD, - .nickname = _("MEOWTH"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_BLAZIKEN, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_BLAZE_KICK, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x28, - .nickname = _("BLAZIKEN"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_CUBONE, - .heldItem = ITEM_THICK_CLUB, - .moves = {MOVE_BONEMERANG, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 6, - .spDefenseEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 1, - .personality = 0x16, - .nickname = _("CUBONE"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_BEEDRILL, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_TWINEEDLE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 0, - .personality = 0x8A, - .nickname = _("BEEDRILL"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_RATICATE, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_SUPER_FANG, MOVE_NONE, MOVE_NONE, MOVE_NONE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 5, - .attackIV = 5, - .defenseIV = 5, - .speedIV = 5, - .spAttackIV = 5, - .spDefenseIV = 5, - .altAbility = 1, - .personality = 0xD, - .nickname = _("RATICATE"), - .friendship = 255, - }, - }, - }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x2D, 0x3B, 0x3B, 0x3B, 0x35, 0x2C, 0x23, 0x24, 0x23, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x94, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x8, 0x8D, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8C, 0x8, 0x94, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x9B, 0x9B, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x9B, 0x95, 0x8F, 0x9B, 0x8, 0x91, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x95, 0x97, 0x95, 0x97, 0x8C, 0x9B, 0x8C, 0x97, 0x95, 0x8, 0x91, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x87, 0x95, 0x87, 0x8C, 0x8, 0x8D, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8, 0x94, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x8, 0x91, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x95, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x95, 0x8F, 0x8B, 0x8F, 0x8C, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8, 0x91, 0x97, 0x8C, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8B, 0x97, 0x9B, 0x8, 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8C, 0x9B, 0x9B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x7C1, 0x8AA1, 0x209, 0x5557, 0xA281, 0x81, 0x5D6D, 0x2283, 0x89, 0xDD55, 0x20A1, 0xA81, 0x7D5D, 0x9, 0xFFFF}, - .coords = {105, 109}, - .direction = 0x23, - .range = 0x33, - }, - [2] = - { - .unk0 = 0x35, - .unk1 = 0x36, - .trainers = - { - [0] = - { - .name = _("BREYDEN"), - .facilityClass = FACILITY_CLASS_YOUNGSTER, - .unused = 0, - .speechBefore = {0xA01, 0x1225, 0x102B, 0xA28, 0x20E, 0xE12}, - .speechWin = {0xA28, 0x20E, 0x1016, 0x1018, 0x1029, 0x102A}, - .speechLose = {0xA31, 0x1022, 0x103A, 0xA3D, 0x1C06, 0x606}, - .speechAfter = {0xA01, 0x103A, 0xE0D, 0x1C21, 0x20E, 0x143C}, - .mons = - { - [0] = - { - .species = SPECIES_CHARMELEON, - .heldItem = ITEM_CHARCOAL, - .moves = {MOVE_FIRE_SPIN, MOVE_DRAGON_RAGE, MOVE_FLAMETHROWER, MOVE_SLASH}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 25, - .attackIV = 25, - .defenseIV = 25, - .speedIV = 25, - .spAttackIV = 25, - .spDefenseIV = 25, - .altAbility = 0, - .personality = 0x32, - .nickname = _("CHARMELEON"), - .friendship = 100, - }, - [1] = - { - .species = SPECIES_WARTORTLE, - .heldItem = ITEM_MYSTIC_WATER, - .moves = {MOVE_HYDRO_PUMP, MOVE_SKULL_BASH, MOVE_RAIN_DANCE, MOVE_PROTECT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 25, - .attackIV = 25, - .defenseIV = 25, - .speedIV = 25, - .spAttackIV = 25, - .spDefenseIV = 25, - .altAbility = 0, - .personality = 0x0, - .nickname = _("WARTORTLE"), - .friendship = 100, - }, - [2] = - { - .species = SPECIES_IVYSAUR, - .heldItem = ITEM_MIRACLE_SEED, - .moves = {MOVE_SOLAR_BEAM, MOVE_SYNTHESIS, MOVE_GROWTH, MOVE_SWEET_SCENT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 6, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 25, - .attackIV = 25, - .defenseIV = 25, - .speedIV = 25, - .spAttackIV = 25, - .spDefenseIV = 25, - .altAbility = 0, - .personality = 0x0, - .nickname = _("IVYSAUR"), - .friendship = 100, - }, - [3] = - { - .species = SPECIES_BAYLEEF, - .heldItem = ITEM_MIRACLE_SEED, - .moves = {MOVE_SOLAR_BEAM, MOVE_SAFEGUARD, MOVE_LIGHT_SCREEN, MOVE_BODY_SLAM}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .attackEV = 130, - .spAttackEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 25, - .attackIV = 25, - .defenseIV = 25, - .speedIV = 25, - .spAttackIV = 25, - .spDefenseIV = 25, - .altAbility = 0, - .personality = 0x32, - .nickname = _("BAYLEEF"), - .friendship = 100, - }, - [4] = - { - .species = SPECIES_CROCONAW, - .heldItem = ITEM_MYSTIC_WATER, - .moves = {MOVE_SCARY_FACE, MOVE_SLASH, MOVE_HYDRO_PUMP, MOVE_SCREECH}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .speedEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 25, - .attackIV = 25, - .defenseIV = 25, - .speedIV = 25, - .spAttackIV = 25, - .spDefenseIV = 25, - .altAbility = 0, - .personality = 0x3, - .nickname = _("CROCONAW"), - .friendship = 100, - }, - [5] = - { - .species = SPECIES_QUILAVA, - .heldItem = ITEM_CHARCOAL, - .moves = {MOVE_QUICK_ATTACK, MOVE_FLAMETHROWER, MOVE_FLAME_WHEEL, MOVE_SWIFT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x28, - .nickname = _("QUILAVA"), - .friendship = 100, - }, - }, - }, - [1] = - { - .name = _("ANIYA"), - .facilityClass = FACILITY_CLASS_TUBER_F, - .unused = 0, - .speechBefore = {0xA2C, 0x120A, 0xA14, 0xE13, 0x20E, 0x208}, - .speechWin = {0xA29, 0x1022, 0x280A, 0x1036, 0x1E0F, 0xC00}, - .speechLose = {0xC1D, 0xE0A, 0xC04, 0x1E25, 0x1E25, 0xC02}, - .speechAfter = {0xA06, 0x140A, 0xC03, 0x1017, 0x62D, 0xC00}, - .mons = - { - [0] = - { - .species = SPECIES_SMOOCHUM, - .heldItem = ITEM_PETAYA_BERRY, - .moves = {MOVE_ICE_BEAM, MOVE_PSYCHIC, MOVE_SWEET_KISS, MOVE_FAKE_TEARS}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x32, - .nickname = _("SMOOCHUM"), - .friendship = 50, - }, - [1] = - { - .species = SPECIES_AZURILL, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_SURF, MOVE_SING, MOVE_RAIN_DANCE, MOVE_BLIZZARD}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0xC8, - .nickname = _("AZURILL"), - .friendship = 50, - }, - [2] = - { - .species = SPECIES_ELEKID, - .heldItem = ITEM_KINGS_ROCK, - .moves = {MOVE_FIRE_PUNCH, MOVE_THUNDER, MOVE_ICE_PUNCH, MOVE_THUNDER_WAVE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x0, - .nickname = _("ELEKID"), - .friendship = 50, - }, - [3] = - { - .species = SPECIES_CLEFFA, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_MEGA_KICK, MOVE_SWEET_KISS, MOVE_SING, MOVE_METRONOME}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x0, - .nickname = _("CLEFFA"), - .friendship = 50, - }, - [4] = - { - .species = SPECIES_WYNAUT, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_ENCORE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x84, - .nickname = _("WYNAUT"), - .friendship = 50, - }, - [5] = - { - .species = SPECIES_MAGBY, - .heldItem = ITEM_SCOPE_LENS, - .moves = {MOVE_FIRE_BLAST, MOVE_CONFUSE_RAY, MOVE_THUNDER_PUNCH, MOVE_BARRIER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0xF, - .nickname = _("MAGBY"), - .friendship = 50, - }, - }, - }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x8, 0x69, 0x46, 0x7A, 0x73, 0x73, 0x73, 0x79, 0x73, 0x73, 0x73, 0x7D, 0x73, 0x73, 0x73, 0x46, 0x8, 0x69, 0x46, 0x73, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x69, 0x46, 0x73, 0x73, 0x7B, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x7A, 0x73, 0x73, 0x73, 0x46, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7A, 0x46, 0x8, 0x69, 0x46, 0x73, 0x73, 0x73, 0x73, 0x73, 0x7D, 0x7C, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x46, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0xF1, 0x46, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7A, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7C, 0x8, 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xFB, 0x8, 0x7C, 0xFB, 0x7B, 0xFB, 0x7A, 0xFB, 0x79, 0xFB, 0xB3, 0xFB, 0x7D, 0xFB, 0x7E, 0xFB, 0x7D, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x7FFB, 0x4003, 0x5FFF, 0x4003, 0x7FFB, 0x4003, 0x7EFF, 0x4443, 0x4443, 0x4443, 0x7EFF, 0x4001, 0x7FFD, 0x1, 0xFFFF}, - .coords = {150, 152}, - .direction = 0x23, - .range = 0x11, - }, - [3] = - { - .unk0 = 0x38, - .unk1 = 0x37, - .trainers = - { - [0] = - { - .name = _("DANE"), - .facilityClass = FACILITY_CLASS_BIRD_KEEPER, - .unused = 0, - .speechBefore = {0xA01, 0x120A, 0xA28, 0x20E, 0x102C, 0x1A34}, - .speechWin = {0xA31, 0x1240, 0x102F, 0x1A1C, 0xE15, 0x628}, - .speechLose = {0xC0A, 0xC00, 0xA28, 0x123A, 0x20E, 0xC00}, - .speechAfter = {0x102D, 0x102C, 0x1C12, 0x1A34, 0xA01, 0x601}, - .mons = - { - [0] = - { - .species = SPECIES_SUDOWOODO, - .heldItem = ITEM_SITRUS_BERRY, - .moves = {MOVE_ROCK_SLIDE, MOVE_BLOCK, MOVE_TOXIC, MOVE_EXPLOSION}, - .level = 0, - .ppBonuses = 0, - .hpEV = 100, - .attackEV = 255, - .spDefenseEV = 155, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x80, - .nickname = _("SUDOWOODO"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_SLOWKING, - .heldItem = ITEM_SCOPE_LENS, - .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_BLIZZARD, MOVE_DISABLE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .defenseEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0x8C, - .nickname = _("SLOWKING"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_ENTEI, - .heldItem = ITEM_PETAYA_BERRY, - .moves = {MOVE_FLAMETHROWER, MOVE_CALM_MIND, MOVE_FIRE_SPIN, MOVE_ROAR}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xF, - .nickname = _("ENTEI"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_HITMONCHAN, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_MEGA_PUNCH, MOVE_DETECT, MOVE_COUNTER, MOVE_SKY_UPPERCUT}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x3, - .nickname = _("HITMONCHAN"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_MANTINE, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_ATTRACT, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .defenseEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0x6, - .nickname = _("MANTINE"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_ZAPDOS, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_AGILITY}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x18, - .nickname = _("ZAPDOS"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("STEPHANIE"), - .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, - .unused = 0, - .speechBefore = {0x1E0F, 0x100B, 0xE0F, 0xA02, 0x606, 0xC00}, - .speechWin = {0x1018, 0xA02, 0x1243, 0xE0F, 0x1C1A, 0xC03}, - .speechLose = {0x801, 0xE1D, 0xE0F, 0xA02, 0x1018, 0x1029}, - .speechAfter = {0xA02, 0x123F, 0xA14, 0x1405, 0x102B, 0xA02}, - .mons = - { - [0] = - { - .species = SPECIES_HITMONLEE, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_MEGA_KICK, MOVE_MIND_READER, MOVE_FOCUS_ENERGY, MOVE_HI_JUMP_KICK}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .attackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x3, - .nickname = _("HITMONLEE"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_PORYGON2, - .heldItem = ITEM_SCOPE_LENS, - .moves = {MOVE_LOCK_ON, MOVE_BLIZZARD, MOVE_CONVERSION_2, MOVE_PSYCHIC}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xF, - .nickname = _("PORYGON2"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_SUICUNE, - .heldItem = ITEM_PETAYA_BERRY, - .moves = {MOVE_SURF, MOVE_CALM_MIND, MOVE_MIRROR_COAT, MOVE_MIST}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xF, - .nickname = _("SUICUNE"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_HOUNDOOM, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_ROAR, MOVE_WILL_O_WISP}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 1, - .personality = 0xF, - .nickname = _("HOUNDOOM"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_STANTLER, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_CONFUSE_RAY, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_TAKE_DOWN}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0x3, - .nickname = _("STANTLER"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_ARTICUNO, - .heldItem = ITEM_NEVER_MELT_ICE, - .moves = {MOVE_BLIZZARD, MOVE_SHEER_COLD, MOVE_MIST, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 15, - .attackIV = 15, - .defenseIV = 15, - .speedIV = 15, - .spAttackIV = 15, - .spDefenseIV = 15, - .altAbility = 0, - .personality = 0xF, - .nickname = _("ARTICUNO"), - .friendship = 255, - }, - }, - }, - }, - .data = {0xF1, 0xFB, 0xFB, 0xFB, 0xF9, 0xF9, 0x1B, 0x1C, 0x1D, 0xE5, 0xE6, 0xEE, 0xF5, 0xFB, 0xFB, 0x8, 0xED, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x8, 0xF4, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xF5, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0x8, 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x3F9, 0xF041, 0x41, 0x7F5F, 0x4401, 0x4541, 0x5579, 0x5541, 0x555F, 0x5541, 0x5541, 0x557D, 0x1101, 0x1101, 0xFFFF}, - .coords = {40, 91}, - .direction = 0x21, - .range = 0x33, - }, - }, + .unkField_0 = 8, + .unused1 = 3, + .unkField_2 = 4, + .unused3 = 0, + .unused4 = 243, + .unused5 = 82, + .unused6 = 6, + .floors = + { + [0] = + { + .unk0 = 0x31, + .unk1 = 0x32, + .trainers = + { + [0] = + { + .name = _("MEREDITH"), + .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, + .unused = 0, + .speechBefore = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I, EC_WORD_ELLIPSIS, 0xFFFF}, + .speechWin = {EC_WORD_OH, EC_WORD_EXCL, 0xFFFF, EC_WORD_UM, EC_WORD_ELLIPSIS, EC_WORD_YAY}, + .speechLose = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_WAAAH, EC_WORD_ELLIPSIS, 0xFFFF}, + .speechAfter = {EC_WORD_UM, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_SAD, EC_WORD_ELLIPSIS}, + .mons = + { + [0] = + { + .species = SPECIES_SUNFLORA, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_PETAL_DANCE, MOVE_GRASS_WHISTLE, MOVE_LIGHT_SCREEN, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .defenseEV = 155, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x0, + .nickname = _("SUNFLORA"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_TANGELA, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_GIGA_DRAIN, MOVE_SLEEP_POWDER, MOVE_AMNESIA, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spDefenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x91, + .nickname = _("TANGELA"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_VENUSAUR, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_SOLAR_BEAM, MOVE_EARTHQUAKE, MOVE_SYNTHESIS, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 100, + .attackEV = 110, + .defenseEV = 100, + .spAttackEV = 100, + .spDefenseEV = 100, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x1F, + .nickname = _("VENUSAUR"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_LANTURN, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_SPARK, MOVE_WATER_PULSE, MOVE_CONFUSE_RAY, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("LANTURN"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_MANECTRIC, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_THUNDERBOLT, MOVE_HEADBUTT, MOVE_BITE, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0xF, + .nickname = _("MANECTRIC"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_RAIKOU, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_THUNDER, MOVE_CRUNCH, MOVE_ROAR, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("RAIKOU"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("BERNARD"), + .facilityClass = FACILITY_CLASS_KINDLER, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_LOSE, EC_WORD_THIS, EC_WORD_HOT, EC_WORD_BATTLE}, + .speechWin = {EC_WORD_DID, EC_WORD_I, EC_WORD_COOL, EC_WORD_YOU, EC_WORD_DOWN, EC_WORD_QUES}, + .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_TERRIBLE, EC_WORD_PERSON}, + .speechAfter = {EC_WORD_YOUR, EC_WORD_HEART, EC_WORD_MUST_BE, EC_WORD_ICE, EC_WORD_COLD, EC_WORD_ELLIPSIS}, + .mons = + { + [0] = + { + .species = SPECIES_RELICANTH, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_ANCIENT_POWER, MOVE_WATER_PULSE, MOVE_MUD_SPORT, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 155, + .defenseEV = 100, + .spDefenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x2F, + .nickname = _("RELICANTH"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_GOLDUCK, + .heldItem = ITEM_LAX_INCENSE, + .moves = {MOVE_SURF, MOVE_PSYBEAM, MOVE_BRICK_BREAK, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("GOLDUCK"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_BLASTOISE, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_HYDRO_PUMP, MOVE_BITE, MOVE_MIRROR_COAT, MOVE_RAIN_DANCE}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x28, + .nickname = _("BLASTOISE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_MAGCARGO, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_HEAT_WAVE, MOVE_ROCK_SLIDE, MOVE_PROTECT, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spDefenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x93, + .nickname = _("MAGCARGO"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_RAPIDASH, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_FIRE_BLAST, MOVE_BOUNCE, MOVE_QUICK_ATTACK, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0xF, + .nickname = _("RAPIDASH"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_MOLTRES, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_SKY_ATTACK, MOVE_AERIAL_ACE, MOVE_ROAR, MOVE_SUNNY_DAY}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("MOLTRES"), + .friendship = 255, + }, + }, + }, + }, + .data = {0xF1, 0xF5, 0xFB, 0xF5, 0xE6, 0xE6, 0x1B, 0x14, 0x15, 0xF8, 0xF9, 0xFA, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xF9, 0xE6, 0xEE, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0x9B, 0x9B, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0x9B, 0xDB, 0xDB, 0x9B, 0xEC, 0xFB, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xF5, 0x95, 0x95, 0xF5, 0xF5, 0xF5, 0xEB, 0xEC, 0xEB, 0xFB, 0xEB, 0x8, 0xED, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x8, 0xF4, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xF5, 0xFB, 0x8, 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEB, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xEB, 0xFB, 0xEB, 0xFB, 0x8, 0xF1, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x5E01, 0x50FF, 0x5083, 0x503B, 0x5FEB, 0xC02B, 0x5FEB, 0x5009, 0x57FD, 0x1005, 0x7FF5, 0x15, 0x7FF5, 0x1, 0xFFFF}, + .coords = {52, 55}, + .direction = 0x23, + .range = 0x22, + }, + [1] = + { + .unk0 = 0x33, + .unk1 = 0x34, + .trainers = + { + [0] = + { + .name = _("ABRAHAM"), + .facilityClass = FACILITY_CLASS_RUIN_MANIAC, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_POKEMON, EC_WORD_THE, EC_WORD_BEST}, + .speechWin = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_GREAT, EC_WORD_POKEMON, EC_WORD_IT, EC_WORD_IS}, + .speechLose = {EC_WORD_I, EC_WORD_CONFUSED, EC_WORD_A, EC_WORD_MOVE, EC_WORD_WITH, EC_WORD_ANOTHER}, + .speechAfter = {EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_MOVE(SKETCH), EC_WORD_OF, EC_WORD_YOU}, + .mons = + { + [0] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8A, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_REST, MOVE_THUNDER_WAVE, MOVE_FLAMETHROWER, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x87, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_EXPLOSION}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xD, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xA, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_TOXIC, MOVE_PROTECT, MOVE_WILL_O_WISP, MOVE_IMPRISON}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xA, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_SMEARGLE, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_TEETER_DANCE, MOVE_LOCK_ON, MOVE_SHEER_COLD, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x8A, + .nickname = _("SMEARGLE"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("LUC"), + .facilityClass = FACILITY_CLASS_TUBER_M, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_WORD_COOL, EC_WORD_RARE, EC_WORD_MOVE}, + .speechWin = {EC_WORD_MY, EC_WORD_RARE, EC_WORD_MOVE, EC_WORD_IS, EC_WORD_COOL, EC_WORD_ISN_T_IT_QUES}, + .speechLose = {EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_MOVE, EC_WORD_QUES}, + .speechAfter = {EC_WORD_I_AM, EC_WORD_SMART, EC_WORD_BUT, EC_WORD_ALSO, EC_WORD_WEAK, EC_WORD_ELLIPSIS}, + .mons = + { + [0] = + { + .species = SPECIES_STARYU, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_CAMOUFLAGE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 1, + .personality = 0xA, + .nickname = _("STARYU"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MEOWTH, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_PAY_DAY, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0xD, + .nickname = _("MEOWTH"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_BLAZIKEN, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_BLAZE_KICK, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x28, + .nickname = _("BLAZIKEN"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_CUBONE, + .heldItem = ITEM_THICK_CLUB, + .moves = {MOVE_BONEMERANG, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 1, + .personality = 0x16, + .nickname = _("CUBONE"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_BEEDRILL, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_TWINEEDLE, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 0, + .personality = 0x8A, + .nickname = _("BEEDRILL"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_RATICATE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_SUPER_FANG, MOVE_NONE, MOVE_NONE, MOVE_NONE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 5, + .attackIV = 5, + .defenseIV = 5, + .speedIV = 5, + .spAttackIV = 5, + .spDefenseIV = 5, + .altAbility = 1, + .personality = 0xD, + .nickname = _("RATICATE"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x26, 0x1B, 0x1C, 0x1D, 0x25, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x2D, 0x3B, 0x3B, 0x3B, 0x35, 0x2C, 0x23, 0x24, 0x23, 0x2C, 0x35, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x94, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x8, 0x8D, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8C, 0x8, 0x94, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x9B, 0x9B, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x95, 0x9B, 0x95, 0x8F, 0x9B, 0x8, 0x91, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x95, 0x97, 0x95, 0x97, 0x8C, 0x9B, 0x8C, 0x97, 0x95, 0x8, 0x91, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x8C, 0x87, 0x8B, 0x87, 0x9B, 0x87, 0x95, 0x87, 0x8C, 0x8, 0x8D, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x8C, 0x8F, 0x9B, 0x8, 0x94, 0x97, 0x95, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x95, 0x97, 0x95, 0x97, 0x9B, 0x97, 0x9B, 0x8, 0x91, 0x87, 0x8C, 0x87, 0x95, 0x87, 0x95, 0x87, 0x8B, 0x87, 0x8C, 0x87, 0x9B, 0x87, 0x9B, 0x8, 0x91, 0x8F, 0x95, 0x8F, 0x8B, 0x8F, 0x8C, 0x8F, 0x8C, 0x8F, 0x9B, 0x8F, 0x95, 0x8F, 0x9B, 0x8, 0x91, 0x97, 0x8C, 0x97, 0x8C, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x9B, 0x97, 0x8B, 0x97, 0x9B, 0x8, 0x91, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8C, 0x9B, 0x9B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x7C1, 0x8AA1, 0x209, 0x5557, 0xA281, 0x81, 0x5D6D, 0x2283, 0x89, 0xDD55, 0x20A1, 0xA81, 0x7D5D, 0x9, 0xFFFF}, + .coords = {105, 109}, + .direction = 0x23, + .range = 0x33, + }, + [2] = + { + .unk0 = 0x35, + .unk1 = 0x36, + .trainers = + { + [0] = + { + .name = _("BREYDEN"), + .facilityClass = FACILITY_CLASS_YOUNGSTER, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_CARE, EC_WORD_FOR, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_A_LOT}, + .speechWin = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_CAN, EC_WORD_DO, EC_WORD_IT, EC_WORD_ALL}, + .speechLose = {EC_WORD_IT_S, EC_WORD_NOT, EC_WORD_LIKE, EC_WORD_WE, EC_WORD_ALWAYS, EC_WORD_WIN}, + .speechAfter = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THE, EC_WORD_BEGINNING, EC_WORD_POKEMON, EC_WORD_BEST}, + .mons = + { + [0] = + { + .species = SPECIES_CHARMELEON, + .heldItem = ITEM_CHARCOAL, + .moves = {MOVE_FIRE_SPIN, MOVE_DRAGON_RAGE, MOVE_FLAMETHROWER, MOVE_SLASH}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .altAbility = 0, + .personality = 0x32, + .nickname = _("CHARMELEON"), + .friendship = 100, + }, + [1] = + { + .species = SPECIES_WARTORTLE, + .heldItem = ITEM_MYSTIC_WATER, + .moves = {MOVE_HYDRO_PUMP, MOVE_SKULL_BASH, MOVE_RAIN_DANCE, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .altAbility = 0, + .personality = 0x0, + .nickname = _("WARTORTLE"), + .friendship = 100, + }, + [2] = + { + .species = SPECIES_IVYSAUR, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_SOLAR_BEAM, MOVE_SYNTHESIS, MOVE_GROWTH, MOVE_SWEET_SCENT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 6, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .altAbility = 0, + .personality = 0x0, + .nickname = _("IVYSAUR"), + .friendship = 100, + }, + [3] = + { + .species = SPECIES_BAYLEEF, + .heldItem = ITEM_MIRACLE_SEED, + .moves = {MOVE_SOLAR_BEAM, MOVE_SAFEGUARD, MOVE_LIGHT_SCREEN, MOVE_BODY_SLAM}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .attackEV = 130, + .spAttackEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .altAbility = 0, + .personality = 0x32, + .nickname = _("BAYLEEF"), + .friendship = 100, + }, + [4] = + { + .species = SPECIES_CROCONAW, + .heldItem = ITEM_MYSTIC_WATER, + .moves = {MOVE_SCARY_FACE, MOVE_SLASH, MOVE_HYDRO_PUMP, MOVE_SCREECH}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .speedEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 25, + .attackIV = 25, + .defenseIV = 25, + .speedIV = 25, + .spAttackIV = 25, + .spDefenseIV = 25, + .altAbility = 0, + .personality = 0x3, + .nickname = _("CROCONAW"), + .friendship = 100, + }, + [5] = + { + .species = SPECIES_QUILAVA, + .heldItem = ITEM_CHARCOAL, + .moves = {MOVE_QUICK_ATTACK, MOVE_FLAMETHROWER, MOVE_FLAME_WHEEL, MOVE_SWIFT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x28, + .nickname = _("QUILAVA"), + .friendship = 100, + }, + }, + }, + [1] = + { + .name = _("ANIYA"), + .facilityClass = FACILITY_CLASS_TUBER_F, + .unused = 0, + .speechBefore = {EC_WORD_SOMEONE, EC_WORD_GOT, EC_WORD_ME, EC_WORD_A_LITTLE, EC_WORD_POKEMON, EC_WORD_EGG}, + .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_NEW, EC_WORD_AT, EC_WORD_THIS, EC_WORD_EXCL}, + .speechLose = {EC_WORD_OH, EC_WORD_BUT, EC_WORD_ELLIPSIS, EC_WORD_WHY, EC_WORD_WHY, EC_WORD_QUES_EXCL}, + .speechAfter = {EC_WORD_YOU_RE, EC_WORD_BUSY, EC_WORD_QUES, EC_WORD_DON_T, EC_WORD_GIVE_UP, EC_WORD_EXCL}, + .mons = + { + [0] = + { + .species = SPECIES_SMOOCHUM, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_ICE_BEAM, MOVE_PSYCHIC, MOVE_SWEET_KISS, MOVE_FAKE_TEARS}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x32, + .nickname = _("SMOOCHUM"), + .friendship = 50, + }, + [1] = + { + .species = SPECIES_AZURILL, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_SURF, MOVE_SING, MOVE_RAIN_DANCE, MOVE_BLIZZARD}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xC8, + .nickname = _("AZURILL"), + .friendship = 50, + }, + [2] = + { + .species = SPECIES_ELEKID, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_FIRE_PUNCH, MOVE_THUNDER, MOVE_ICE_PUNCH, MOVE_THUNDER_WAVE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x0, + .nickname = _("ELEKID"), + .friendship = 50, + }, + [3] = + { + .species = SPECIES_CLEFFA, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_MEGA_KICK, MOVE_SWEET_KISS, MOVE_SING, MOVE_METRONOME}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x0, + .nickname = _("CLEFFA"), + .friendship = 50, + }, + [4] = + { + .species = SPECIES_WYNAUT, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_ENCORE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x84, + .nickname = _("WYNAUT"), + .friendship = 50, + }, + [5] = + { + .species = SPECIES_MAGBY, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_FIRE_BLAST, MOVE_CONFUSE_RAY, MOVE_THUNDER_PUNCH, MOVE_BARRIER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xF, + .nickname = _("MAGBY"), + .friendship = 50, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x8, 0x69, 0x46, 0x7A, 0x73, 0x73, 0x73, 0x79, 0x73, 0x73, 0x73, 0x7D, 0x73, 0x73, 0x73, 0x46, 0x8, 0x69, 0x46, 0x73, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x69, 0x46, 0x73, 0x73, 0x7B, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x7A, 0x73, 0x73, 0x73, 0x46, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7A, 0x46, 0x8, 0x69, 0x46, 0x73, 0x73, 0x73, 0x73, 0x73, 0x7D, 0x7C, 0x73, 0x7C, 0x73, 0x7B, 0x73, 0x46, 0x8, 0x69, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x7C, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x9B, 0x9B, 0x46, 0x3B, 0x3B, 0x3B, 0x46, 0x9B, 0x9B, 0x9B, 0x9B, 0x46, 0x8, 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0xF1, 0x46, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7A, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x7C, 0x8, 0xF1, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xFB, 0x8, 0x7C, 0xFB, 0x7B, 0xFB, 0x7A, 0xFB, 0x79, 0xFB, 0xB3, 0xFB, 0x7D, 0xFB, 0x7E, 0xFB, 0x7D, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x7FFB, 0x4003, 0x5FFF, 0x4003, 0x7FFB, 0x4003, 0x7EFF, 0x4443, 0x4443, 0x4443, 0x7EFF, 0x4001, 0x7FFD, 0x1, 0xFFFF}, + .coords = {150, 152}, + .direction = 0x23, + .range = 0x11, + }, + [3] = + { + .unk0 = 0x38, + .unk1 = 0x37, + .trainers = + { + [0] = + { + .name = _("DANE"), + .facilityClass = FACILITY_CLASS_BIRD_KEEPER, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_GOT, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ON, EC_WORD_VACATION}, + .speechWin = {EC_WORD_IT_S, EC_WORD_GREAT, EC_WORD_TO, EC_WORD_TRAVEL, EC_WORD_AND, EC_WORD_BATTLE}, + .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, EC_WORD_MY, EC_WORD_RARE, EC_WORD_POKEMON, EC_WORD_EXCL}, + .speechAfter = {EC_WORD_OFF, EC_WORD_ON, EC_WORD_ANOTHER, EC_WORD_VACATION, EC_WORD_I, EC_WORD_GO}, + .mons = + { + [0] = + { + .species = SPECIES_SUDOWOODO, + .heldItem = ITEM_SITRUS_BERRY, + .moves = {MOVE_ROCK_SLIDE, MOVE_BLOCK, MOVE_TOXIC, MOVE_EXPLOSION}, + .level = 0, + .ppBonuses = 0, + .hpEV = 100, + .attackEV = 255, + .spDefenseEV = 155, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x80, + .nickname = _("SUDOWOODO"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_SLOWKING, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_BLIZZARD, MOVE_DISABLE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .defenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x8C, + .nickname = _("SLOWKING"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_ENTEI, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_FLAMETHROWER, MOVE_CALM_MIND, MOVE_FIRE_SPIN, MOVE_ROAR}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("ENTEI"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_HITMONCHAN, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_MEGA_PUNCH, MOVE_DETECT, MOVE_COUNTER, MOVE_SKY_UPPERCUT}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("HITMONCHAN"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_MANTINE, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_ATTRACT, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .defenseEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0x6, + .nickname = _("MANTINE"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ZAPDOS, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_AGILITY}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x18, + .nickname = _("ZAPDOS"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("STEPHANIE"), + .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F, + .unused = 0, + .speechBefore = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_WIN, EC_WORD_EXCL}, + .speechWin = {EC_WORD_DO, EC_WORD_YOU, EC_WORD_UNDERSTAND, EC_WORD_HOW, EC_WORD_NOW, EC_WORD_QUES}, + .speechLose = {EC_WORD_YES, EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_YOU, EC_WORD_DO, EC_WORD_IT}, + .speechAfter = {EC_WORD_YOU, EC_WORD_BEAT, EC_WORD_ME, EC_WORD_GOOD, EC_WORD_FOR, EC_WORD_YOU}, + .mons = + { + [0] = + { + .species = SPECIES_HITMONLEE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_MEGA_KICK, MOVE_MIND_READER, MOVE_FOCUS_ENERGY, MOVE_HI_JUMP_KICK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .attackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("HITMONLEE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_PORYGON2, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_LOCK_ON, MOVE_BLIZZARD, MOVE_CONVERSION_2, MOVE_PSYCHIC}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("PORYGON2"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_SUICUNE, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_SURF, MOVE_CALM_MIND, MOVE_MIRROR_COAT, MOVE_MIST}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("SUICUNE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_HOUNDOOM, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_FLAMETHROWER, MOVE_CRUNCH, MOVE_ROAR, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 1, + .personality = 0xF, + .nickname = _("HOUNDOOM"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_STANTLER, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_CONFUSE_RAY, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_TAKE_DOWN}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0x3, + .nickname = _("STANTLER"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ARTICUNO, + .heldItem = ITEM_NEVER_MELT_ICE, + .moves = {MOVE_BLIZZARD, MOVE_SHEER_COLD, MOVE_MIST, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 15, + .attackIV = 15, + .defenseIV = 15, + .speedIV = 15, + .spAttackIV = 15, + .spDefenseIV = 15, + .altAbility = 0, + .personality = 0xF, + .nickname = _("ARTICUNO"), + .friendship = 255, + }, + }, + }, + }, + .data = {0xF1, 0xFB, 0xFB, 0xFB, 0xF9, 0xF9, 0x1B, 0x1C, 0x1D, 0xE5, 0xE6, 0xEE, 0xF5, 0xFB, 0xFB, 0x8, 0xED, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x8, 0xF4, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xEC, 0xEC, 0xEC, 0xEB, 0xEC, 0xEC, 0xFB, 0xEC, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xF5, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xEC, 0xEC, 0xEC, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xF5, 0xF5, 0xF5, 0xF5, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xFB, 0xEB, 0xF5, 0xF5, 0xF5, 0xF5, 0xFB, 0x8, 0xF1, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xFB, 0xEB, 0xFB, 0xEC, 0xEC, 0xEC, 0xEC, 0xEC, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xEB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0xF1, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xEC, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0xFB, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x3F9, 0xF041, 0x41, 0x7F5F, 0x4401, 0x4541, 0x5579, 0x5541, 0x555F, 0x5541, 0x5541, 0x557D, 0x1101, 0x1101, 0xFFFF}, + .coords = {40, 91}, + .direction = 0x21, + .range = 0x33, + }, + }, }; static const struct TrHillTag sDataTagExpert = { - .unkField_0 = 8, - .unused1 = 1, - .unkField_2 = 4, - .unused3 = 0, - .unused4 = 63, - .unused5 = 31, - .unused6 = 6, - .floors = - { - [0] = - { - .unk0 = 0x39, - .unk1 = 0x3A, - .trainers = - { - [0] = - { - .name = _("ALFRED"), - .facilityClass = FACILITY_CLASS_COOLTRAINER_M, - .unused = 0, - .speechBefore = {0xA3D, 0x1016, 0x1647, 0x102C, 0xE39, 0x432}, - .speechWin = {0xA3D, 0x103B, 0x1031, 0x1042, 0xC38, 0xC00}, - .speechLose = {0xA40, 0x616, 0x1013, 0xE39, 0x1405, 0xC04}, - .speechAfter = {0xA3D, 0x140F, 0x102F, 0x180F, 0xE12, 0xE36}, - .mons = - { - [0] = - { - .species = SPECIES_SNORLAX, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_EARTHQUAKE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .defenseEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x35, - .nickname = _("SNORLAX"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_MILTANK, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_MILK_DRINK}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x3, - .nickname = _("MILTANK"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_URSARING, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x7F, - .nickname = _("URSARING"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_SLAKING, - .heldItem = ITEM_CHESTO_BERRY, - .moves = {MOVE_HYPER_BEAM, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_REST}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .spDefenseEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x80, - .nickname = _("SLAKING"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_KANGASKHAN, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_FAKE_OUT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x3, - .nickname = _("KANGASKHAN"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_ZANGOOSE, - .heldItem = ITEM_SCOPE_LENS, - .moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_ROAR}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x80, - .nickname = _("ZANGOOSE"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("EDIE"), - .facilityClass = FACILITY_CLASS_PSYCHIC_F, - .unused = 0, - .speechBefore = {0xA3D, 0x1001, 0x102B, 0xE39, 0x20B, 0x61F}, - .speechWin = {0xA28, 0x616, 0x1639, 0x102F, 0x1419, 0xC00}, - .speechLose = {0x81D, 0x81D, 0xC04, 0x1E14, 0x1014, 0x1018}, - .speechAfter = {0x1023, 0x1231, 0x1006, 0x1020, 0x20B, 0x1806}, - .mons = - { - [0] = - { - .species = SPECIES_SLOWKING, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_SKILL_SWAP}, - .level = 0, - .ppBonuses = 0, - .hpEV = 200, - .defenseEV = 110, - .spAttackEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 1, - .personality = 0xF, - .nickname = _("SLOWKING"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_ESPEON, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_CALM_MIND, MOVE_REFLECT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x28, - .nickname = _("ESPEON"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_STARMIE, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_ICE_BEAM}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 1, - .personality = 0xF, - .nickname = _("STARMIE"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_GENGAR, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0xF, - .nickname = _("GENGAR"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_GARDEVOIR, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_MAGICAL_LEAF, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0xF, - .nickname = _("GARDEVOIR"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_ALAKAZAM, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_PSYCHIC, MOVE_RECOVER, MOVE_THUNDER_WAVE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0xF, - .nickname = _("ALAKAZAM"), - .friendship = 255, - }, - }, - }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x3B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x3B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x3B, 0x3B, 0x8, 0x69, 0x73, 0x8, 0x4D, 0x4D, 0x4D, 0x4D, 0xD1, 0x4D, 0x4D, 0x4D, 0x4D, 0x8, 0x69, 0x73, 0x8, 0x40, 0x3B, 0x8, 0x55, 0x55, 0x55, 0x55, 0xD1, 0x55, 0x55, 0x55, 0x55, 0x8, 0x31, 0x41, 0x8, 0x69, 0x41, 0x8, 0xC5, 0xD9, 0xD9, 0xD9, 0x9A, 0xD9, 0xD9, 0xD9, 0xC6, 0x8, 0x41, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x8, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xCD, 0x9B, 0x73, 0x73, 0x44, 0x73, 0x73, 0x9B, 0xD5, 0x8, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x8, 0x31, 0x73, 0x8, 0x69, 0x41, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xDB, 0xDB, 0xDB, 0x8, 0x41, 0x73, 0x8, 0x40, 0x3B, 0x8, 0x8, 0xC7, 0xC7, 0xDB, 0xDB, 0xDB, 0xC7, 0xC7, 0x8, 0x8, 0x31, 0x41, 0x8, 0x69, 0x3B, 0x4D, 0x4D, 0x67, 0x67, 0xDB, 0xDB, 0xDB, 0x67, 0x67, 0x4D, 0x4D, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x55, 0x55, 0xD7, 0xD7, 0xD1, 0xDB, 0xDB, 0xD7, 0xD7, 0x55, 0x55, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x73, 0x8, 0x69, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x201, 0x3EF9, 0x3EF9, 0x3EF9, 0x2009, 0x3019, 0x2009, 0x3019, 0x2009, 0x3019, 0x3019, 0x3C79, 0x1, 0x1, 0xFFFF}, - .coords = {116, 122}, - .direction = 0x23, - .range = 0x55, - }, - [1] = - { - .unk0 = 0x3B, - .unk1 = 0x3C, - .trainers = - { - [0] = - { - .name = _("RODERICK"), - .facilityClass = FACILITY_CLASS_COOLTRAINER_M, - .unused = 0, - .speechBefore = {0xA01, 0x1016, 0x606, 0x103E, 0x1020, 0x270E}, - .speechWin = {0xA31, 0xE16, 0x1431, 0x1E14, 0xA01, 0x606}, - .speechLose = {0x280E, 0x1404, 0xA14, 0xE09, 0x1428, 0xC04}, - .speechAfter = {0xA02, 0x101E, 0x1020, 0x1405, 0x1814, 0xC03}, - .mons = - { - [0] = - { - .species = SPECIES_SWELLOW, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_AERIAL_ACE, MOVE_AGILITY, MOVE_FACADE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x3, - .nickname = _("SWELLOW"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_MACHAMP, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_LOW_KICK, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x3, - .nickname = _("MACHAMP"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_URSARING, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_PROTECT, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x3, - .nickname = _("URSARING"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_KINGLER, - .heldItem = ITEM_PERSIM_BERRY, - .moves = {MOVE_RETURN, MOVE_PROTECT, MOVE_CRABHAMMER, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x80, - .nickname = _("KINGLER"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_TYRANITAR, - .heldItem = ITEM_PERSIM_BERRY, - .moves = {MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .defenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x80, - .nickname = _("TYRANITAR"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_DRAGONITE, - .heldItem = ITEM_PERSIM_BERRY, - .moves = {MOVE_BODY_SLAM, MOVE_THUNDER_WAVE, MOVE_EARTHQUAKE, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .attackEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x80, - .nickname = _("DRAGONITE"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("ALICIA"), - .facilityClass = FACILITY_CLASS_COOLTRAINER_F, - .unused = 0, - .speechBefore = {0xA01, 0x1017, 0x140F, 0x1020, 0x270E, 0xC00}, - .speechWin = {0x80B, 0xC00, 0x1039, 0x122E, 0x102B, 0xA02}, - .speechLose = {0x1E22, 0x1021, 0xC15, 0x26A5, 0x1E19, 0xC00}, - .speechAfter = {0xA01, 0x1016, 0x1006, 0xA05, 0x20E, 0x1814}, - .mons = - { - [0] = - { - .species = SPECIES_JOLTEON, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0xA, - .nickname = _("JOLTEON"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_ALAKAZAM, - .heldItem = ITEM_KINGS_ROCK, - .moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_ATTRACT, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0xA, - .nickname = _("ALAKAZAM"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_STARMIE, - .heldItem = ITEM_SCOPE_LENS, - .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_SWAGGER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 1, - .personality = 0xA, - .nickname = _("STARMIE"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_DUSCLOPS, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_PURSUIT, MOVE_PROTECT, MOVE_ATTRACT, MOVE_WILL_O_WISP}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x82, - .nickname = _("DUSCLOPS"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_NINETALES, - .heldItem = ITEM_WHITE_HERB, - .moves = {MOVE_OVERHEAT, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_ATTRACT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .speedEV = 252, - .spAttackEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0xD2, - .nickname = _("NINETALES"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_BANETTE, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_SHADOW_BALL, MOVE_FAINT_ATTACK, MOVE_ATTRACT, MOVE_WILL_O_WISP}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x85, - .nickname = _("BANETTE"), - .friendship = 255, - }, - }, - }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x8, 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x8, 0x91, 0x46, 0x7D, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0xB3, 0x9B, 0x9B, 0x9B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x9B, 0x8, 0x91, 0x46, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x8, 0x91, 0x46, 0x9B, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xB3, 0x8, 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x8, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0x8, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, - .unk3A0 = {0x381, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF}, - .coords = {167, 231}, - .direction = 0x1, - .range = 0x33, - }, - [2] = - { - .unk0 = 0x3D, - .unk1 = 0x3E, - .trainers = - { - [0] = - { - .name = _("TERRENCE"), - .facilityClass = FACILITY_CLASS_EXPERT_M, - .unused = 0, - .speechBefore = {0xC33, 0x1E0F, 0x618, 0x100B, 0x102B, 0xA02}, - .speechWin = {0xC33, 0x103B, 0xA02, 0x1239, 0x1E14, 0xC03}, - .speechLose = {0xC33, 0xA29, 0x1025, 0x80B, 0xFFFF, 0xFFFF}, - .speechAfter = {0x100B, 0xA05, 0xA10, 0x620, 0xC03, 0xFFFF}, - .mons = - { - [0] = - { - .species = SPECIES_WOBBUFFET, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_MIRROR_COAT, MOVE_COUNTER, MOVE_SAFEGUARD, MOVE_ENCORE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x94, - .nickname = _("WOBBUFFET"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_EXPLOUD, - .heldItem = ITEM_CHESTO_BERRY, - .moves = {MOVE_HYPER_VOICE, MOVE_COUNTER, MOVE_REST, MOVE_ROCK_SLIDE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x85, - .nickname = _("EXPLOUD"), - .friendship = 0, - }, - [2] = - { - .species = SPECIES_CROBAT, - .heldItem = ITEM_KINGS_ROCK, - .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE, MOVE_TOXIC}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x0, - .nickname = _("CROBAT"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_DUGTRIO, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_DOUBLE_TEAM, MOVE_PROTECT, MOVE_RETURN, MOVE_SLUDGE_BOMB}, - .level = 0, - .ppBonuses = 0, - .hpEV = 6, - .attackEV = 252, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 1, - .personality = 0xD, - .nickname = _("DUGTRIO"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_ELECTRODE, - .heldItem = ITEM_PETAYA_BERRY, - .moves = {MOVE_TORMENT, MOVE_MIRROR_COAT, MOVE_THUNDERBOLT, MOVE_LIGHT_SCREEN}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x5, - .nickname = _("ELECTRODE"), - .friendship = 0, - }, - [5] = - { - .species = SPECIES_GENGAR, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_CONFUSE_RAY, MOVE_MEAN_LOOK, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spDefenseEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x14, - .nickname = _("GENGAR"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("CARLOTTA"), - .facilityClass = FACILITY_CLASS_EXPERT_F, - .unused = 0, - .speechBefore = {0xC33, 0xA01, 0x1000, 0x606, 0x102B, 0xA02}, - .speechWin = {0xC33, 0xA3D, 0x101E, 0x1020, 0x1821, 0x1C10}, - .speechLose = {0xC33, 0xA29, 0x80B, 0x102F, 0x121B, 0xA02}, - .speechAfter = {0x100B, 0xA05, 0xA09, 0x415, 0xC03, 0xFFFF}, - .mons = - { - [0] = - { - .species = SPECIES_LAPRAS, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_PERISH_SONG, MOVE_SING}, - .level = 0, - .ppBonuses = 0, - .hpEV = 250, - .defenseEV = 130, - .spDefenseEV = 130, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x82, - .nickname = _("LAPRAS"), - .friendship = 0, - }, - [1] = - { - .species = SPECIES_ABSOL, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_PERISH_SONG, MOVE_DOUBLE_EDGE, MOVE_PROTECT, MOVE_TORMENT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .defenseEV = 6, - .speedEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x8A, - .nickname = _("ABSOL"), - .friendship = 0, - }, - [2] = - { - .species = SPECIES_ALTARIA, - .heldItem = ITEM_KINGS_ROCK, - .moves = {MOVE_PERISH_SONG, MOVE_PROTECT, MOVE_DRAGON_CLAW, MOVE_FIRE_BLAST}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .spAttackEV = 6, - .spDefenseEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x0, - .nickname = _("ALTARIA"), - .friendship = 0, - }, - [3] = - { - .species = SPECIES_DEWGONG, - .heldItem = ITEM_CHESTO_BERRY, - .moves = {MOVE_ICE_BEAM, MOVE_SIGNAL_BEAM, MOVE_REST, MOVE_PERISH_SONG}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 252, - .spAttackEV = 6, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x14, - .nickname = _("DEWGONG"), - .friendship = 0, - }, - [4] = - { - .species = SPECIES_POLITOED, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_HYDRO_PUMP, MOVE_BLIZZARD, MOVE_MIND_READER, MOVE_PERISH_SONG}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .spAttackEV = 6, - .spDefenseEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 1, - .personality = 0x14, - .nickname = _("POLITOED"), - .friendship = 0, - }, - [5] = - { - .species = SPECIES_MAROWAK, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_PERISH_SONG, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_PROTECT}, - .level = 0, - .ppBonuses = 0, - .hpEV = 252, - .speedEV = 6, - .spDefenseEV = 252, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 1, - .personality = 0x17, - .nickname = _("MAROWAK"), - .friendship = 0, - }, - }, - }, - }, - .data = {0xD1, 0xDB, 0xDB, 0xDB, 0xD9, 0xD9, 0x1B, 0x14, 0x15, 0x98, 0x99, 0x9A, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xD5, 0xD5, 0xC3, 0xF9, 0x86, 0x8E, 0x95, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x8, 0xD1, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x8, 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xCC, 0xCC, 0xFB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCC, 0xCC, 0xCC, 0xCC, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xD5, 0xD5, 0xD5, 0xD5, 0xFB, 0xEC, 0xFB, 0xEC, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xF5, 0xF5, 0xFB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x8, 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xCC, 0xCC, 0xCB, 0xFB, 0x8C, 0x8C, 0x8C, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCC, 0xFB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8}, - .unk3A0 = {0x381, 0x201, 0xEE1, 0x1EF1, 0x3EF9, 0x3EF9, 0x7E7D, 0x783D, 0x2BD, 0x783D, 0x7E7D, 0x3E79, 0x3EF9, 0x1EF1, 0xEE1, 0x201}, - .coords = {103, 167}, - .direction = 0x1, - .range = 0x33, - }, - [3] = - { - .unk0 = 0x3F, - .unk1 = 0x40, - .trainers = - { - [0] = - { - .name = _("NORA"), - .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, - .unused = 0, - .speechBefore = {0xC0A, 0x1E0F, 0x100B, 0x1025, 0x200F, 0xC00}, - .speechWin = {0xC0A, 0xA29, 0x1025, 0x1205, 0xA01, 0x607}, - .speechLose = {0xC0A, 0xA29, 0x1025, 0x120E, 0xA01, 0x630}, - .speechAfter = {0xC0A, 0xC00, 0xFFFF, 0x601, 0x1E1E, 0xC00}, - .mons = - { - [0] = - { - .species = SPECIES_FORRETRESS, - .heldItem = ITEM_QUICK_CLAW, - .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_SPIKES}, - .level = 0, - .ppBonuses = 0, - .hpEV = 110, - .attackEV = 200, - .spDefenseEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x3, - .nickname = _("FORRETRESS"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_ELECTRODE, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_SWIFT, MOVE_LIGHT_SCREEN}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 1, - .personality = 0xC, - .nickname = _("ELECTRODE"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_EXEGGUTOR, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_EXPLOSION, MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_SOLAR_BEAM}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x7F, - .nickname = _("EXEGGUTOR"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_DUSCLOPS, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE}, - .level = 0, - .ppBonuses = 0, - .hpEV = 110, - .defenseEV = 200, - .spDefenseEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x93, - .nickname = _("DUSCLOPS"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_NINETALES, - .heldItem = ITEM_WHITE_HERB, - .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_OVERHEAT, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0xF, - .nickname = _("NINETALES"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_BANETTE, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_THUNDERBOLT, MOVE_THUNDER}, - .level = 0, - .ppBonuses = 0, - .hpEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x96, - .nickname = _("BANETTE"), - .friendship = 255, - }, - }, - }, - [1] = - { - .name = _("GAV"), - .facilityClass = FACILITY_CLASS_PKMN_RANGER_M, - .unused = 0, - .speechBefore = {0xC3E, 0xA02, 0x1015, 0x1C19, 0xA14, 0xC00}, - .speechWin = {0xC3C, 0xC00, 0xFFFF, 0xA29, 0x2017, 0x415}, - .speechLose = {0xA29, 0x1022, 0x415, 0x1036, 0x102A, 0xC00}, - .speechAfter = {0xC2F, 0x1E19, 0x1021, 0x2017, 0x628, 0xC00}, - .mons = - { - [0] = - { - .species = SPECIES_SALAMENCE, - .heldItem = ITEM_SHELL_BELL, - .moves = {MOVE_ROCK_SLIDE, MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x95, - .nickname = _("SALAMENCE"), - .friendship = 255, - }, - [1] = - { - .species = SPECIES_GENGAR, - .heldItem = ITEM_LUM_BERRY, - .moves = {MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND}, - .level = 0, - .ppBonuses = 0, - .speedEV = 255, - .spAttackEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x8C, - .nickname = _("GENGAR"), - .friendship = 255, - }, - [2] = - { - .species = SPECIES_GYARADOS, - .heldItem = ITEM_BRIGHT_POWDER, - .moves = {MOVE_DRAGON_DANCE, MOVE_HYPER_BEAM, MOVE_BITE, MOVE_EARTHQUAKE}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x3, - .nickname = _("GYARADOS"), - .friendship = 255, - }, - [3] = - { - .species = SPECIES_GENGAR, - .heldItem = ITEM_SALAC_BERRY, - .moves = {MOVE_EXPLOSION, MOVE_MEAN_LOOK, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY}, - .level = 0, - .ppBonuses = 0, - .attackEV = 255, - .speedEV = 255, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x3, - .nickname = _("GENGAR"), - .friendship = 255, - }, - [4] = - { - .species = SPECIES_DUSCLOPS, - .heldItem = ITEM_LEFTOVERS, - .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_SHADOW_BALL}, - .level = 0, - .ppBonuses = 0, - .hpEV = 110, - .defenseEV = 200, - .spDefenseEV = 200, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x14, - .nickname = _("DUSCLOPS"), - .friendship = 255, - }, - [5] = - { - .species = SPECIES_MISDREAVUS, - .heldItem = ITEM_FOCUS_BAND, - .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_PERISH_SONG, MOVE_SHADOW_BALL}, - .level = 0, - .ppBonuses = 0, - .hpEV = 180, - .defenseEV = 180, - .spDefenseEV = 150, - .otId = TRAINER_HILL_OTID, - .hpIV = 31, - .attackIV = 31, - .defenseIV = 31, - .speedIV = 31, - .spAttackIV = 31, - .spDefenseIV = 31, - .altAbility = 0, - .personality = 0x85, - .nickname = _("MISDREAVUS"), - .friendship = 255, - }, - }, - }, - }, - .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x8, 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x8, 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x8, 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x8, 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x8, 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x8, 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x8, 0x96, 0x9B, 0x9B, 0x9B, 0x9B, 0xD6, 0xD6, 0x96, 0xD6, 0xD6, 0xDB, 0x9B, 0x9B, 0x9B, 0x96, 0x8, 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x8, 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x8, 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x8, 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x8, 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x8, 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x8, 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x8}, - .unk3A0 = {0x381, 0x101, 0x101, 0x6C1, 0x821, 0x16D1, 0x2829, 0x2009, 0x1, 0x2009, 0x2829, 0x16D1, 0x821, 0x6C1, 0x101, 0x101}, - .coords = {103, 167}, - .direction = 0x1, - .range = 0x33, - }, - }, + .unkField_0 = 8, + .unused1 = 1, + .unkField_2 = 4, + .unused3 = 0, + .unused4 = 63, + .unused5 = 31, + .unused6 = 6, + .floors = + { + [0] = + { + .unk0 = 0x39, + .unk1 = 0x3A, + .trainers = + { + [0] = + { + .name = _("ALFRED"), + .facilityClass = FACILITY_CLASS_COOLTRAINER_M, + .unused = 0, + .speechBefore = {EC_WORD_WE, EC_WORD_CAN, EC_WORD_TAKE, EC_WORD_ON, EC_WORD_ANY, EC_WORD_TYPE}, + .speechWin = {EC_WORD_WE, EC_WORD_DID, EC_WORD_BETTER, EC_WORD_THAN, EC_WORD_OKAY, EC_WORD_EXCL}, + .speechLose = {EC_WORD_OUR, EC_WORD_STRATEGY, EC_WORD_ISN_T, EC_WORD_ANY, EC_WORD_GOOD, EC_WORD_ELLIPSIS}, + .speechAfter = {EC_WORD_WE, EC_WORD_NEED, EC_WORD_TO, EC_WORD_TRAIN, EC_WORD_A_LOT, EC_WORD_MORE}, + .mons = + { + [0] = + { + .species = SPECIES_SNORLAX, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_EARTHQUAKE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .defenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x35, + .nickname = _("SNORLAX"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MILTANK, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_MILK_DRINK}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("MILTANK"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_URSARING, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x7F, + .nickname = _("URSARING"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_SLAKING, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_HYPER_BEAM, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_REST}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x80, + .nickname = _("SLAKING"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_KANGASKHAN, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_FAKE_OUT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("KANGASKHAN"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ZANGOOSE, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_ROAR}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x80, + .nickname = _("ZANGOOSE"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("EDIE"), + .facilityClass = FACILITY_CLASS_PSYCHIC_F, + .unused = 0, + .speechBefore = {EC_WORD_WE, EC_WORD_WILL_BE_HERE, EC_WORD_FOR, EC_WORD_ANY, EC_WORD_TRAINER, EC_WORD_CHALLENGE}, + .speechWin = {EC_WORD_MY, EC_WORD_STRATEGY, EC_WORD_WORKS, EC_WORD_TO, EC_WORD_PERFECTION, EC_WORD_EXCL}, + .speechLose = {EC_WORD_NO, EC_WORD_NO, EC_WORD_ELLIPSIS, EC_WORD_THAT, EC_WORD_WON_T, EC_WORD_DO}, + .speechAfter = {EC_WORD_THERE, EC_WORD_SHOULD, EC_WORD_BE, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_SCHOOL}, + .mons = + { + [0] = + { + .species = SPECIES_SLOWKING, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_SKILL_SWAP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 200, + .defenseEV = 110, + .spAttackEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 1, + .personality = 0xF, + .nickname = _("SLOWKING"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_ESPEON, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_CALM_MIND, MOVE_REFLECT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x28, + .nickname = _("ESPEON"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_STARMIE, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_THUNDERBOLT, MOVE_ICE_BEAM}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 1, + .personality = 0xF, + .nickname = _("STARMIE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_GENGAR, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xF, + .nickname = _("GENGAR"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_GARDEVOIR, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_MAGICAL_LEAF, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xF, + .nickname = _("GARDEVOIR"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_ALAKAZAM, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_RECOVER, MOVE_THUNDER_WAVE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xF, + .nickname = _("ALAKAZAM"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x1B, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x2C, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x8, 0x31, 0x3B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x3B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x3B, 0x3B, 0x8, 0x69, 0x73, 0x8, 0x4D, 0x4D, 0x4D, 0x4D, 0xD1, 0x4D, 0x4D, 0x4D, 0x4D, 0x8, 0x69, 0x73, 0x8, 0x40, 0x3B, 0x8, 0x55, 0x55, 0x55, 0x55, 0xD1, 0x55, 0x55, 0x55, 0x55, 0x8, 0x31, 0x41, 0x8, 0x69, 0x41, 0x8, 0xC5, 0xD9, 0xD9, 0xD9, 0x9A, 0xD9, 0xD9, 0xD9, 0xC6, 0x8, 0x41, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x8, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xCD, 0x9B, 0x73, 0x73, 0x44, 0x73, 0x73, 0x9B, 0xD5, 0x8, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x8, 0xD4, 0xDB, 0x9B, 0x73, 0x73, 0x73, 0x9B, 0xDB, 0xCC, 0x8, 0x31, 0x73, 0x8, 0x69, 0x41, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0x9B, 0xDB, 0xDB, 0xDB, 0xDB, 0x8, 0x41, 0x73, 0x8, 0x40, 0x3B, 0x8, 0x8, 0xC7, 0xC7, 0xDB, 0xDB, 0xDB, 0xC7, 0xC7, 0x8, 0x8, 0x31, 0x41, 0x8, 0x69, 0x3B, 0x4D, 0x4D, 0x67, 0x67, 0xDB, 0xDB, 0xDB, 0x67, 0x67, 0x4D, 0x4D, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x55, 0x55, 0xD7, 0xD7, 0xD1, 0xDB, 0xDB, 0xD7, 0xD7, 0x55, 0x55, 0x31, 0x73, 0x8, 0x69, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x73, 0x8, 0x69, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x201, 0x3EF9, 0x3EF9, 0x3EF9, 0x2009, 0x3019, 0x2009, 0x3019, 0x2009, 0x3019, 0x3019, 0x3C79, 0x1, 0x1, 0xFFFF}, + .coords = {116, 122}, + .direction = 0x23, + .range = 0x55, + }, + [1] = + { + .unk0 = 0x3B, + .unk1 = 0x3C, + .trainers = + { + [0] = + { + .name = _("RODERICK"), + .facilityClass = FACILITY_CLASS_COOLTRAINER_M, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_CAN, EC_WORD_WIN, EC_WORD_WITHOUT, EC_WORD_A, EC_MOVE2(HELPING_HAND)}, + .speechWin = {EC_WORD_IT_S, EC_WORD_ONLY, EC_WORD_NATURAL, EC_WORD_THAT, EC_WORD_I, EC_WORD_WIN}, + .speechLose = {EC_WORD_LOSING, EC_WORD_HAS, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_SMALL, EC_WORD_ELLIPSIS}, + .speechAfter = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_A, EC_WORD_GOOD, EC_WORD_TEACHER, EC_WORD_QUES}, + .mons = + { + [0] = + { + .species = SPECIES_SWELLOW, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_AERIAL_ACE, MOVE_AGILITY, MOVE_FACADE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("SWELLOW"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_MACHAMP, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_LOW_KICK, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("MACHAMP"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_URSARING, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_PROTECT, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("URSARING"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_KINGLER, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_RETURN, MOVE_PROTECT, MOVE_CRABHAMMER, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x80, + .nickname = _("KINGLER"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_TYRANITAR, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .defenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x80, + .nickname = _("TYRANITAR"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_DRAGONITE, + .heldItem = ITEM_PERSIM_BERRY, + .moves = {MOVE_BODY_SLAM, MOVE_THUNDER_WAVE, MOVE_EARTHQUAKE, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .attackEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x80, + .nickname = _("DRAGONITE"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("ALICIA"), + .facilityClass = FACILITY_CLASS_COOLTRAINER_F, + .unused = 0, + .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_NEED, EC_WORD_A, EC_MOVE2(HELPING_HAND), EC_WORD_EXCL}, + .speechWin = {EC_WORD_SORRY, EC_WORD_EXCL, EC_WORD_TOO, EC_WORD_BAD, EC_WORD_FOR, EC_WORD_YOU}, + .speechLose = {EC_WORD_WHAT, EC_WORD_AN, EC_WORD_UNBELIEVABLE, EC_MOVE2(STRUGGLE), EC_WORD_THAT_WAS, EC_WORD_EXCL}, + .speechAfter = {EC_WORD_I, EC_WORD_CAN, EC_WORD_BE, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_TEACHER}, + .mons = + { + [0] = + { + .species = SPECIES_JOLTEON, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xA, + .nickname = _("JOLTEON"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_ALAKAZAM, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_ATTRACT, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xA, + .nickname = _("ALAKAZAM"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_STARMIE, + .heldItem = ITEM_SCOPE_LENS, + .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_SWAGGER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 1, + .personality = 0xA, + .nickname = _("STARMIE"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_DUSCLOPS, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_PURSUIT, MOVE_PROTECT, MOVE_ATTRACT, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x82, + .nickname = _("DUSCLOPS"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_NINETALES, + .heldItem = ITEM_WHITE_HERB, + .moves = {MOVE_OVERHEAT, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_ATTRACT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .speedEV = 252, + .spAttackEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xD2, + .nickname = _("NINETALES"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_BANETTE, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_SHADOW_BALL, MOVE_FAINT_ATTACK, MOVE_ATTRACT, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x85, + .nickname = _("BANETTE"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x38, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x78, 0x8, 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x8, 0x91, 0x46, 0x7D, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0xB3, 0x9B, 0x9B, 0x9B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x9B, 0x8, 0x91, 0x46, 0x9B, 0x7D, 0x9B, 0x7C, 0x9B, 0x7B, 0x9B, 0x7A, 0x9B, 0x7C, 0x9B, 0x9B, 0x9B, 0x8, 0x91, 0x46, 0x9B, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x8, 0x91, 0x46, 0x9B, 0x7C, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x9B, 0x9B, 0x7D, 0x9B, 0x7E, 0x9B, 0x8, 0x91, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0xB3, 0x8, 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x8, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0x8, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xDB, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x8, 0x91, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0xDB, 0xD6, 0x96, 0x9B, 0x9B, 0x96, 0xD6, 0x9B, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8}, + .unk3A0 = {0x381, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x4001, 0x5FFF, 0x4001, 0x7FFD, 0x1, 0x1, 0x1, 0x1, 0x1, 0xFFFF}, + .coords = {167, 231}, + .direction = 0x1, + .range = 0x33, + }, + [2] = + { + .unk0 = 0x3D, + .unk1 = 0x3E, + .trainers = + { + [0] = + { + .name = _("TERRENCE"), + .facilityClass = FACILITY_CLASS_EXPERT_M, + .unused = 0, + .speechBefore = {EC_WORD_OH_DEAR, EC_WORD_THIS, EC_WORD_MATCH, EC_WORD_IS, EC_WORD_FOR, EC_WORD_YOU}, + .speechWin = {EC_WORD_OH_DEAR, EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES}, + .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SORRY, 0xFFFF, 0xFFFF}, + .speechAfter = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_GRANDMOTHER, EC_WORD_STRONG, EC_WORD_QUES, 0xFFFF}, + .mons = + { + [0] = + { + .species = SPECIES_WOBBUFFET, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_MIRROR_COAT, MOVE_COUNTER, MOVE_SAFEGUARD, MOVE_ENCORE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x94, + .nickname = _("WOBBUFFET"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_EXPLOUD, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_HYPER_VOICE, MOVE_COUNTER, MOVE_REST, MOVE_ROCK_SLIDE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x85, + .nickname = _("EXPLOUD"), + .friendship = 0, + }, + [2] = + { + .species = SPECIES_CROBAT, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE, MOVE_TOXIC}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x0, + .nickname = _("CROBAT"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_DUGTRIO, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_DOUBLE_TEAM, MOVE_PROTECT, MOVE_RETURN, MOVE_SLUDGE_BOMB}, + .level = 0, + .ppBonuses = 0, + .hpEV = 6, + .attackEV = 252, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 1, + .personality = 0xD, + .nickname = _("DUGTRIO"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_ELECTRODE, + .heldItem = ITEM_PETAYA_BERRY, + .moves = {MOVE_TORMENT, MOVE_MIRROR_COAT, MOVE_THUNDERBOLT, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x5, + .nickname = _("ELECTRODE"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_GENGAR, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_CONFUSE_RAY, MOVE_MEAN_LOOK, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spDefenseEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x14, + .nickname = _("GENGAR"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("CARLOTTA"), + .facilityClass = FACILITY_CLASS_EXPERT_F, + .unused = 0, + .speechBefore = {EC_WORD_OH_DEAR, EC_WORD_I, EC_WORD_WILL, EC_WORD_WIN, EC_WORD_FOR, EC_WORD_YOU}, + .speechWin = {EC_WORD_OH_DEAR, EC_WORD_WE, EC_WORD_HAVE, EC_WORD_A, EC_WORD_PARTY, EC_WORD_LATER}, + .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_TO, EC_WORD_DISAPPOINT, EC_WORD_YOU}, + .speechAfter = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_GRANDFATHER, EC_WORD_COOL, EC_WORD_QUES, 0xFFFF}, + .mons = + { + [0] = + { + .species = SPECIES_LAPRAS, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_PERISH_SONG, MOVE_SING}, + .level = 0, + .ppBonuses = 0, + .hpEV = 250, + .defenseEV = 130, + .spDefenseEV = 130, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x82, + .nickname = _("LAPRAS"), + .friendship = 0, + }, + [1] = + { + .species = SPECIES_ABSOL, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_PERISH_SONG, MOVE_DOUBLE_EDGE, MOVE_PROTECT, MOVE_TORMENT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .defenseEV = 6, + .speedEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x8A, + .nickname = _("ABSOL"), + .friendship = 0, + }, + [2] = + { + .species = SPECIES_ALTARIA, + .heldItem = ITEM_KINGS_ROCK, + .moves = {MOVE_PERISH_SONG, MOVE_PROTECT, MOVE_DRAGON_CLAW, MOVE_FIRE_BLAST}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .spAttackEV = 6, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x0, + .nickname = _("ALTARIA"), + .friendship = 0, + }, + [3] = + { + .species = SPECIES_DEWGONG, + .heldItem = ITEM_CHESTO_BERRY, + .moves = {MOVE_ICE_BEAM, MOVE_SIGNAL_BEAM, MOVE_REST, MOVE_PERISH_SONG}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 252, + .spAttackEV = 6, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x14, + .nickname = _("DEWGONG"), + .friendship = 0, + }, + [4] = + { + .species = SPECIES_POLITOED, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_HYDRO_PUMP, MOVE_BLIZZARD, MOVE_MIND_READER, MOVE_PERISH_SONG}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .spAttackEV = 6, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 1, + .personality = 0x14, + .nickname = _("POLITOED"), + .friendship = 0, + }, + [5] = + { + .species = SPECIES_MAROWAK, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_PERISH_SONG, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_PROTECT}, + .level = 0, + .ppBonuses = 0, + .hpEV = 252, + .speedEV = 6, + .spDefenseEV = 252, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 1, + .personality = 0x17, + .nickname = _("MAROWAK"), + .friendship = 0, + }, + }, + }, + }, + .data = {0xD1, 0xDB, 0xDB, 0xDB, 0xD9, 0xD9, 0x1B, 0x14, 0x15, 0x98, 0x99, 0x9A, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xD5, 0xD5, 0xC3, 0xF9, 0x86, 0x8E, 0x95, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x8, 0xD1, 0xD5, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x95, 0x9B, 0x8, 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xCC, 0xCC, 0xFB, 0xFB, 0x8C, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCC, 0xCC, 0xCC, 0xCC, 0xFB, 0xF5, 0xFB, 0xF5, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xD5, 0xD5, 0xD5, 0xD5, 0xFB, 0xEC, 0xFB, 0xEC, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCB, 0xCB, 0xCB, 0xCB, 0xF5, 0xF5, 0xFB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x8, 0xD1, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x8, 0xD1, 0xDB, 0xCB, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0xF5, 0x8B, 0x8B, 0x8B, 0x8B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xCC, 0xCB, 0xCB, 0xCB, 0xFB, 0x8B, 0x8B, 0x8B, 0x8C, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xCC, 0xCC, 0xCB, 0xFB, 0x8C, 0x8C, 0x8C, 0x9B, 0x9B, 0x9B, 0x9B, 0x8, 0xD1, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCC, 0xFB, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x9B, 0x8}, + .unk3A0 = {0x381, 0x201, 0xEE1, 0x1EF1, 0x3EF9, 0x3EF9, 0x7E7D, 0x783D, 0x2BD, 0x783D, 0x7E7D, 0x3E79, 0x3EF9, 0x1EF1, 0xEE1, 0x201}, + .coords = {103, 167}, + .direction = 0x1, + .range = 0x33, + }, + [3] = + { + .unk0 = 0x3F, + .unk1 = 0x40, + .trainers = + { + [0] = + { + .name = _("NORA"), + .facilityClass = FACILITY_CLASS_PKMN_RANGER_F, + .unused = 0, + .speechBefore = {EC_WORD_WAAAH, EC_WORD_THIS, EC_WORD_IS, EC_WORD_SO, EC_WORD_EXCITING, EC_WORD_EXCL}, + .speechWin = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_I, EC_WORD_WON}, + .speechLose = {EC_WORD_WAAAH, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SAD, EC_WORD_I, EC_WORD_LOST}, + .speechAfter = {EC_WORD_WAAAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_GO, EC_WORD_AWAY, EC_WORD_EXCL}, + .mons = + { + [0] = + { + .species = SPECIES_FORRETRESS, + .heldItem = ITEM_QUICK_CLAW, + .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_SPIKES}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .attackEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("FORRETRESS"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_ELECTRODE, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_SWIFT, MOVE_LIGHT_SCREEN}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 1, + .personality = 0xC, + .nickname = _("ELECTRODE"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_EXEGGUTOR, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_EXPLOSION, MOVE_HYPNOSIS, MOVE_PSYCHIC, MOVE_SOLAR_BEAM}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x7F, + .nickname = _("EXEGGUTOR"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_DUSCLOPS, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x93, + .nickname = _("DUSCLOPS"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_NINETALES, + .heldItem = ITEM_WHITE_HERB, + .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_OVERHEAT, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0xF, + .nickname = _("NINETALES"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_BANETTE, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_IMPRISON, MOVE_PROTECT, MOVE_THUNDERBOLT, MOVE_THUNDER}, + .level = 0, + .ppBonuses = 0, + .hpEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x96, + .nickname = _("BANETTE"), + .friendship = 255, + }, + }, + }, + [1] = + { + .name = _("GAV"), + .facilityClass = FACILITY_CLASS_PKMN_RANGER_M, + .unused = 0, + .speechBefore = {EC_WORD_WAHAHAHA, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_STOP, EC_WORD_ME, EC_WORD_EXCL}, + .speechWin = {EC_WORD_WOWEE, EC_WORD_EXCL, 0xFFFF, EC_WORD_I_AM, EC_WORD_AWESOME, EC_WORD_COOL}, + .speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_COOL, EC_WORD_AT, EC_WORD_ALL, EC_WORD_EXCL}, + .speechAfter = {EC_WORD_HEHEHE, EC_WORD_THAT_WAS, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_BATTLE, EC_WORD_EXCL}, + .mons = + { + [0] = + { + .species = SPECIES_SALAMENCE, + .heldItem = ITEM_SHELL_BELL, + .moves = {MOVE_ROCK_SLIDE, MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x95, + .nickname = _("SALAMENCE"), + .friendship = 255, + }, + [1] = + { + .species = SPECIES_GENGAR, + .heldItem = ITEM_LUM_BERRY, + .moves = {MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND}, + .level = 0, + .ppBonuses = 0, + .speedEV = 255, + .spAttackEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x8C, + .nickname = _("GENGAR"), + .friendship = 255, + }, + [2] = + { + .species = SPECIES_GYARADOS, + .heldItem = ITEM_BRIGHT_POWDER, + .moves = {MOVE_DRAGON_DANCE, MOVE_HYPER_BEAM, MOVE_BITE, MOVE_EARTHQUAKE}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("GYARADOS"), + .friendship = 255, + }, + [3] = + { + .species = SPECIES_GENGAR, + .heldItem = ITEM_SALAC_BERRY, + .moves = {MOVE_EXPLOSION, MOVE_MEAN_LOOK, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY}, + .level = 0, + .ppBonuses = 0, + .attackEV = 255, + .speedEV = 255, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x3, + .nickname = _("GENGAR"), + .friendship = 255, + }, + [4] = + { + .species = SPECIES_DUSCLOPS, + .heldItem = ITEM_LEFTOVERS, + .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_SHADOW_BALL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 110, + .defenseEV = 200, + .spDefenseEV = 200, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x14, + .nickname = _("DUSCLOPS"), + .friendship = 255, + }, + [5] = + { + .species = SPECIES_MISDREAVUS, + .heldItem = ITEM_FOCUS_BAND, + .moves = {MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY, MOVE_PERISH_SONG, MOVE_SHADOW_BALL}, + .level = 0, + .ppBonuses = 0, + .hpEV = 180, + .defenseEV = 180, + .spDefenseEV = 150, + .otId = TRAINER_HILL_OTID, + .hpIV = 31, + .attackIV = 31, + .defenseIV = 31, + .speedIV = 31, + .spAttackIV = 31, + .spDefenseIV = 31, + .altAbility = 0, + .personality = 0x85, + .nickname = _("MISDREAVUS"), + .friendship = 255, + }, + }, + }, + }, + .data = {0x31, 0x3B, 0x3B, 0x3B, 0x39, 0x39, 0x13, 0x14, 0x15, 0x39, 0x39, 0x3A, 0x3B, 0x3B, 0x3B, 0x8, 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x8, 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x8, 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x8, 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x8, 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x8, 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x8, 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x8, 0x96, 0x9B, 0x9B, 0x9B, 0x9B, 0xD6, 0xD6, 0x96, 0xD6, 0xD6, 0xDB, 0x9B, 0x9B, 0x9B, 0x96, 0x8, 0xFB, 0xFB, 0x46, 0x36, 0x9B, 0xDB, 0xD6, 0xD6, 0xD6, 0xDB, 0x9B, 0x36, 0x46, 0xFB, 0xFB, 0x8, 0xF6, 0xFB, 0x46, 0x36, 0x46, 0x9B, 0xDB, 0xD6, 0xDB, 0x9B, 0x46, 0x36, 0x46, 0xFB, 0xF6, 0x8, 0xF6, 0xFB, 0xFB, 0x46, 0x9B, 0x46, 0x46, 0xDB, 0x46, 0x46, 0x9B, 0x46, 0xFB, 0xFB, 0xF6, 0x8, 0xFD, 0xF6, 0xFB, 0x9B, 0x46, 0x36, 0x36, 0x9B, 0x36, 0x36, 0x46, 0x9B, 0xFB, 0xF6, 0xFD, 0x8, 0xF6, 0xFB, 0x9B, 0xFB, 0xFB, 0x46, 0x46, 0x9B, 0x46, 0x46, 0xFB, 0xFB, 0x9B, 0xFB, 0xF6, 0x8, 0xFB, 0x9B, 0xFB, 0xF6, 0xFB, 0xFB, 0xFB, 0x46, 0xFB, 0xFB, 0xFB, 0xF6, 0xFB, 0x9B, 0xFB, 0x8, 0x96, 0xFB, 0xF6, 0xFD, 0xF6, 0xF6, 0xFB, 0x46, 0xFB, 0xF6, 0xF6, 0xFD, 0xF6, 0xFB, 0x9B, 0x8}, + .unk3A0 = {0x381, 0x101, 0x101, 0x6C1, 0x821, 0x16D1, 0x2829, 0x2009, 0x1, 0x2009, 0x2829, 0x16D1, 0x821, 0x6C1, 0x101, 0x101}, + .coords = {103, 167}, + .direction = 0x1, + .range = 0x33, + }, + }, }; diff --git a/src/trainer_hill.c b/src/trainer_hill.c index a5b5486be..e0a236286 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -28,6 +28,7 @@ #include "constants/maps.h" #include "constants/species.h" #include "constants/trainers.h" +#include "constants/easy_chat.h" extern bool32 sub_81D3B34(void); -- cgit v1.2.3 From b6e5b4ee1ae8b2bac2cbf143b7bc7cd65afd08ab Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 22 Jan 2019 21:56:57 +0100 Subject: trainer card diego pls --- src/trainer_card.c | 136 ++++++++++++++++++++++++++--------------------------- 1 file changed, 68 insertions(+), 68 deletions(-) (limited to 'src') diff --git a/src/trainer_card.c b/src/trainer_card.c index 816d3bf25..cde15ae34 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -31,8 +31,8 @@ enum { - CARD_TYPE_FR, - CARD_TYPE_RUBY, + CARD_TYPE_FRLG, + CARD_TYPE_RS, CARD_TYPE_EMERALD, }; @@ -500,13 +500,13 @@ static bool8 LoadCardGfx(void) switch (sData->gfxLoadState) { case 0: - if (sData->cardType != CARD_TYPE_FR) + if (sData->cardType != CARD_TYPE_FRLG) LZ77UnCompWram(gUnknown_08DD1F78, sData->var_EF8); else LZ77UnCompWram(gUnknown_08DD2AE0, sData->var_EF8); break; case 1: - if (sData->cardType != CARD_TYPE_FR) + if (sData->cardType != CARD_TYPE_FRLG) LZ77UnCompWram(gUnknown_08DD21B0, sData->var_A48); else LZ77UnCompWram(gUnknown_08DD2D30, sData->var_A48); @@ -514,33 +514,33 @@ static bool8 LoadCardGfx(void) case 2: if (!sData->isLink) { - if (sData->cardType != CARD_TYPE_FR) + if (sData->cardType != CARD_TYPE_FRLG) LZ77UnCompWram(gUnknown_08DD2010, sData->var_598); else LZ77UnCompWram(gUnknown_08DD2B78, sData->var_598); } else { - if (sData->cardType != CARD_TYPE_FR) + if (sData->cardType != CARD_TYPE_FRLG) LZ77UnCompWram(gUnknown_08DD228C, sData->var_598); else LZ77UnCompWram(gUnknown_08DD2E5C, sData->var_598); } break; case 3: - if (sData->cardType != CARD_TYPE_FR) + if (sData->cardType != CARD_TYPE_FRLG) LZ77UnCompWram(gUnknown_0856F5CC, sData->var_13A8); else LZ77UnCompWram(gUnknown_0856F814, sData->var_13A8); break; case 4: - if (sData->cardType != CARD_TYPE_FR) + if (sData->cardType != CARD_TYPE_FRLG) LZ77UnCompWram(gEmeraldTrainerCard_Gfx, sData->var_19A8); else LZ77UnCompWram(gFireRedTrainerCard_Gfx, sData->var_19A8); break; case 5: - if (sData->cardType == CARD_TYPE_FR) + if (sData->cardType == CARD_TYPE_FRLG) LZ77UnCompWram(gUnknown_0856F018, sData->var_17A8); break; default: @@ -704,15 +704,15 @@ static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType) case CARD_TYPE_EMERALD: trainerCard->battleTowerWins = 0; trainerCard->battleTowerStraightWins = 0; - // Seems like GF got CARD_TYPE_FR and CARD_TYPE_RUBY wrong. - case CARD_TYPE_FR: + // Seems like GF got CARD_TYPE_FRLG and CARD_TYPE_RS wrong. + case CARD_TYPE_FRLG: trainerCard->contestsWithFriends = GetCappedGameStat(GAME_STAT_WON_LINK_CONTEST, 999); trainerCard->pokeblocksWithFriends = GetCappedGameStat(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF); if (CountPlayerContestPaintings() > 4) trainerCard->hasAllPaintings = TRUE; trainerCard->stars = GetRubyTrainerStars(trainerCard); break; - case CARD_TYPE_RUBY: + case CARD_TYPE_RS: trainerCard->battleTowerWins = 0; trainerCard->battleTowerStraightWins = 0; trainerCard->contestsWithFriends = 0; @@ -726,7 +726,7 @@ static void SetPlayerCardData(struct TrainerCard *trainerCard, u8 cardType) static void sub_80C3020(struct TrainerCard *trainerCard) { memset(trainerCard, 0, sizeof(struct TrainerCard)); - trainerCard->version = VERSION_EMERALD; + trainerCard->version = GAME_VERSION; SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD); trainerCard->hasAllSymbols = HasAllFrontierSymbols(); trainerCard->frontierBP = gSaveBlock2Ptr->frontier.field_EBA; @@ -742,10 +742,10 @@ static void sub_80C3020(struct TrainerCard *trainerCard) void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard) { memset(trainerCard, 0, 0x60); - trainerCard->version = VERSION_EMERALD; + trainerCard->version = GAME_VERSION; SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD); trainerCard->var_3A = HasAllFrontierSymbols(); - *((u16*)&trainerCard->berruCrushPoints) = gSaveBlock2Ptr->frontier.field_EBA; + *((u16*)&trainerCard->berryCrushPoints) = gSaveBlock2Ptr->frontier.field_EBA; if (trainerCard->var_3A) trainerCard->stars++; @@ -762,15 +762,15 @@ void CopyTrainerCardData(struct TrainerCard *dst, u16 *src, u8 gameVersion) switch (VersionToCardType(gameVersion)) { - case CARD_TYPE_FR: + case CARD_TYPE_FRLG: memcpy(dst, src, 0x60); break; - case CARD_TYPE_RUBY: + case CARD_TYPE_RS: memcpy(dst, src, 0x38); break; case CARD_TYPE_EMERALD: memcpy(dst, src, 0x60); - dst->berruCrushPoints = 0; + dst->berryCrushPoints = 0; dst->hasAllSymbols = src[29]; dst->frontierBP = src[30]; break; @@ -973,10 +973,10 @@ static void PrintNameOnCard(void) txtPtr = StringCopy(buffer, gText_TrainerCardName); StringCopy(txtPtr, sData->trainerCard.playerName); ConvertInternationalString(txtPtr, sData->language); - if (sData->cardType == CARD_TYPE_FR) - AddTextPrinterParameterized3(1, 1, 20, 28, gUnknown_0856FB0C, -1, buffer); + if (sData->cardType == CARD_TYPE_FRLG) + AddTextPrinterParameterized3(1, 1, 20, 28, gUnknown_0856FB0C, TEXT_SPEED_FF, buffer); else - AddTextPrinterParameterized3(1, 1, 16, 33, gUnknown_0856FB0C, -1, buffer); + AddTextPrinterParameterized3(1, 1, 16, 33, gUnknown_0856FB0C, TEXT_SPEED_FF, buffer); } static void PrintIdOnCard(void) @@ -987,7 +987,7 @@ static void PrintIdOnCard(void) u32 top; txtPtr = StringCopy(buffer, gText_TrainerCardIDNo); ConvertIntToDecimalStringN(txtPtr, sData->trainerCard.trainerId, STR_CONV_MODE_LEADING_ZEROS, 5); - if (sData->cardType == CARD_TYPE_FR) + if (sData->cardType == CARD_TYPE_FRLG) { xPos = GetStringCenterAlignXOffset(1, buffer, 80) + 132; top = 9; @@ -998,7 +998,7 @@ static void PrintIdOnCard(void) top = 9; } - AddTextPrinterParameterized3(1, 1, xPos, top, gUnknown_0856FB0C, -1, buffer); + AddTextPrinterParameterized3(1, 1, xPos, top, gUnknown_0856FB0C, TEXT_SPEED_FF, buffer); } static void PrintMoneyOnCard(void) @@ -1007,9 +1007,9 @@ static void PrintMoneyOnCard(void) u8 top; if (!sData->isHoenn) - AddTextPrinterParameterized3(1, 1, 20, 56, gUnknown_0856FB0C, -1, gText_TrainerCardMoney); + AddTextPrinterParameterized3(1, 1, 20, 56, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardMoney); else - AddTextPrinterParameterized3(1, 1, 16, 57, gUnknown_0856FB0C, -1, gText_TrainerCardMoney); + AddTextPrinterParameterized3(1, 1, 16, 57, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardMoney); ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.money, 0, 6); StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1); @@ -1023,7 +1023,7 @@ static void PrintMoneyOnCard(void) xOffset = GetStringRightAlignXOffset(1, gStringVar4, 128); top = 57; } - AddTextPrinterParameterized3(1, 1, xOffset, top, gUnknown_0856FB0C, -1, gStringVar4); + AddTextPrinterParameterized3(1, 1, xOffset, top, gUnknown_0856FB0C, TEXT_SPEED_FF, gStringVar4); } static u16 GetCaughtMonsCount(void) @@ -1041,9 +1041,9 @@ static void PrintPokedexOnCard(void) if (FlagGet(FLAG_SYS_POKEDEX_GET)) { if (!sData->isHoenn) - AddTextPrinterParameterized3(1, 1, 20, 72, gUnknown_0856FB0C, -1, gText_TrainerCardPokedex); + AddTextPrinterParameterized3(1, 1, 20, 72, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardPokedex); else - AddTextPrinterParameterized3(1, 1, 16, 73, gUnknown_0856FB0C, -1,gText_TrainerCardPokedex); + AddTextPrinterParameterized3(1, 1, 16, 73, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardPokedex); StringCopy(ConvertIntToDecimalStringN(gStringVar4, sData->trainerCard.caughtMonsCount, 0, 3), gText_EmptyString6); if (!sData->isHoenn) { @@ -1055,7 +1055,7 @@ static void PrintPokedexOnCard(void) xOffset = GetStringRightAlignXOffset(1, gStringVar4, 128); top = 73; } - AddTextPrinterParameterized3(1, 1, xOffset, top, gUnknown_0856FB0C, -1, gStringVar4); + AddTextPrinterParameterized3(1, 1, xOffset, top, gUnknown_0856FB0C, TEXT_SPEED_FF, gStringVar4); } } @@ -1069,9 +1069,9 @@ static void PrintTimeOnCard(void) u32 r7, r4, r10; if (!sData->isHoenn) - AddTextPrinterParameterized3(1, 1, 20, 88, gUnknown_0856FB0C, -1, gText_TrainerCardTime); + AddTextPrinterParameterized3(1, 1, 20, 88, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardTime); else - AddTextPrinterParameterized3(1, 1, 16, 89, gUnknown_0856FB0C, -1, gText_TrainerCardTime); + AddTextPrinterParameterized3(1, 1, 16, 89, gUnknown_0856FB0C, TEXT_SPEED_FF, gText_TrainerCardTime); if (sData->isLink) { @@ -1105,12 +1105,12 @@ static void PrintTimeOnCard(void) FillWindowPixelRect(1, 0, r7, r4, r10, 15); ConvertIntToDecimalStringN(gStringVar4, hours, 1, 3); - AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, -1, gStringVar4); + AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, TEXT_SPEED_FF, gStringVar4); r7 += 18; - AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB40[sData->var_7], -1, gText_Colon2); + AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB40[sData->var_7], TEXT_SPEED_FF, gText_Colon2); r7 += width; ConvertIntToDecimalStringN(gStringVar4, minutes, 2, 2); - AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, -1, gStringVar4); + AddTextPrinterParameterized3(1, 1, r7, r4, gUnknown_0856FB0C, TEXT_SPEED_FF, gStringVar4); } static const u8 gUnknown_0856FB48[] = {0x71, 0x68}; @@ -1120,10 +1120,10 @@ static void PrintProfilePhraseOnCard(void) { if (sData->isLink) { - AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB48[sData->isHoenn], gUnknown_0856FB0C, -1, sData->var_19[0]); - AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->var_19[0], 0) + 14, gUnknown_0856FB48[sData->isHoenn], gUnknown_0856FB0C, -1, sData->var_19[1]); - AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB4A[sData->isHoenn], gUnknown_0856FB0C, -1, sData->var_19[2]); - AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->var_19[2], 0) + 14, gUnknown_0856FB4A[sData->isHoenn], gUnknown_0856FB0C, -1, sData->var_19[3]); + AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB48[sData->isHoenn], gUnknown_0856FB0C, TEXT_SPEED_FF, sData->var_19[0]); + AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->var_19[0], 0) + 14, gUnknown_0856FB48[sData->isHoenn], gUnknown_0856FB0C, TEXT_SPEED_FF, sData->var_19[1]); + AddTextPrinterParameterized3(1, 1, 8, gUnknown_0856FB4A[sData->isHoenn], gUnknown_0856FB0C, TEXT_SPEED_FF, sData->var_19[2]); + AddTextPrinterParameterized3(1, 1, GetStringWidth(1, sData->var_19[2], 0) + 14, gUnknown_0856FB4A[sData->isHoenn], gUnknown_0856FB0C, TEXT_SPEED_FF, sData->var_19[3]); } } @@ -1131,7 +1131,7 @@ static void PrintNameOnCard2(void) { StringCopy(sData->var_4D, sData->trainerCard.playerName); ConvertInternationalString(sData->var_4D, sData->language); - if (sData->cardType != CARD_TYPE_FR) + if (sData->cardType != CARD_TYPE_FRLG) { StringCopy(gStringVar1, sData->var_4D); StringExpandPlaceholders(sData->var_4D, gText_Var1sTrainerCard); @@ -1141,9 +1141,9 @@ static void PrintNameOnCard2(void) static void sub_80C3B50(void) { if (!sData->isHoenn) - AddTextPrinterParameterized3(1, 1, 136, 9, gUnknown_0856FB0C, -1, sData->var_4D); + AddTextPrinterParameterized3(1, 1, 136, 9, gUnknown_0856FB0C, TEXT_SPEED_FF, sData->var_4D); else - AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, sData->var_4D, 216), 9, gUnknown_0856FB0C, -1, sData->var_4D); + AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, sData->var_4D, 216), 9, gUnknown_0856FB0C, TEXT_SPEED_FF, sData->var_4D); } static const u8 gUnknown_0856FB4C[] = {0xfd, 0x02, 0xf0, 0xfd, 0x03, 0xf0, 0xfd, 0x04, 0xff}; @@ -1164,8 +1164,8 @@ static const u8 gUnknown_0856FB57[] = {0xd8, 0xd8}; static void PrintString(u8 top, const u8* str1, u8* str2, const u8* color) { - AddTextPrinterParameterized3(1, 1, gUnknown_0856FB55[sData->isHoenn], top * 16 + 33, gUnknown_0856FB0C, -1, str1); - AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, str2, gUnknown_0856FB57[sData->isHoenn]), top * 16 + 33, color, -1, str2); + AddTextPrinterParameterized3(1, 1, gUnknown_0856FB55[sData->isHoenn], top * 16 + 33, gUnknown_0856FB0C, TEXT_SPEED_FF, str1); + AddTextPrinterParameterized3(1, 1, GetStringRightAlignXOffset(1, str2, gUnknown_0856FB57[sData->isHoenn]), top * 16 + 33, color, TEXT_SPEED_FF, str2); } static void PrintHofDebutStringOnCard(void) @@ -1211,31 +1211,31 @@ static void PrintTradesStringOnCard(void) static void PrintBerryCrushNumOnCard(void) { - if (sData->cardType == CARD_TYPE_FR && sData->trainerCard.berruCrushPoints) - ConvertIntToDecimalStringN(sData->var_2C3, sData->trainerCard.berruCrushPoints, 1, 5); + if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.berryCrushPoints) + ConvertIntToDecimalStringN(sData->var_2C3, sData->trainerCard.berryCrushPoints, 1, 5); } static void PrintBerryCrushStringOnCard(void) { - if (sData->cardType == CARD_TYPE_FR && sData->trainerCard.berruCrushPoints) + if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.berryCrushPoints) PrintString(4, gText_BerryCrush, sData->var_2C3, gUnknown_0856FB0F); } static void PrintUnionNumOnCard(void) { - if (sData->cardType == CARD_TYPE_FR && sData->trainerCard.unionRoomNum) + if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.unionRoomNum) ConvertIntToDecimalStringN(sData->var_34F, sData->trainerCard.unionRoomNum, 1, 5); } static void PrintUnionStringOnCard(void) { - if (sData->cardType == CARD_TYPE_FR && sData->trainerCard.unionRoomNum) + if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.unionRoomNum) PrintString(3, gText_UnionTradesAndBattles, sData->var_34F, gUnknown_0856FB0F); } static void PrintPokeblocksNumOnCard(void) { - if (sData->cardType != CARD_TYPE_FR && sData->trainerCard.pokeblocksWithFriends) + if (sData->cardType != CARD_TYPE_FRLG && sData->trainerCard.pokeblocksWithFriends) { ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.pokeblocksWithFriends, 1, 5); StringExpandPlaceholders(sData->var_395, gText_Var1DarkGreyShadowLightGrey); @@ -1244,19 +1244,19 @@ static void PrintPokeblocksNumOnCard(void) static void PrintPokeblockStringOnCard(void) { - if (sData->cardType != CARD_TYPE_FR && sData->trainerCard.pokeblocksWithFriends) + if (sData->cardType != CARD_TYPE_FRLG && sData->trainerCard.pokeblocksWithFriends) PrintString(3, gText_PokeblocksWithFriends, sData->var_395, gUnknown_0856FB0F); } static void PrintContestNumOnCard(void) { - if (sData->cardType != CARD_TYPE_FR && sData->trainerCard.contestsWithFriends) + if (sData->cardType != CARD_TYPE_FRLG && sData->trainerCard.contestsWithFriends) ConvertIntToDecimalStringN(sData->var_3DB, sData->trainerCard.contestsWithFriends, 1, 5); } static void PrintContestStringOnCard(void) { - if (sData->cardType != CARD_TYPE_FR && sData->trainerCard.contestsWithFriends) + if (sData->cardType != CARD_TYPE_FRLG && sData->trainerCard.contestsWithFriends) PrintString(4, gText_WonContestsWFriends, sData->var_3DB, gUnknown_0856FB0F); } @@ -1264,7 +1264,7 @@ static void PrintBattleFacilityNumsOnCard(void) { switch (sData->cardType) { - case CARD_TYPE_RUBY: + case CARD_TYPE_RS: if (sData->hasBattleTowerWins) { ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.battleTowerWins, 1, 4); @@ -1279,7 +1279,7 @@ static void PrintBattleFacilityNumsOnCard(void) StringExpandPlaceholders(sData->var_421, gText_Var1DarkLightGreyBP); } break; - case CARD_TYPE_FR: + case CARD_TYPE_FRLG: break; } } @@ -1288,7 +1288,7 @@ static void PrintBattleFacilityStringOnCard(void) { switch (sData->cardType) { - case CARD_TYPE_RUBY: + case CARD_TYPE_RS: if (sData->hasBattleTowerWins) PrintString(5, gText_BattleTower, sData->var_421, gUnknown_0856FB0C); break; @@ -1296,7 +1296,7 @@ static void PrintBattleFacilityStringOnCard(void) if (sData->trainerCard.frontierBP) PrintString(5, gText_BattlePtsWon, sData->var_421, gUnknown_0856FB0F); break; - case CARD_TYPE_FR: + case CARD_TYPE_FRLG: break; } } @@ -1307,7 +1307,7 @@ static void sub_80C4140(void) u8 buffer[] = {0x05, 0x06, 0x07, 0x08, 0x09, 0x0a}; u8 buffer2[] = {0x00, 0x04, 0x08, 0x0c, 0x10, 0x14}; - if (sData->cardType == CARD_TYPE_FR) + if (sData->cardType == CARD_TYPE_FRLG) { for (i = 0; i < 6; i++) { @@ -1353,7 +1353,7 @@ static void sub_80C42A4(void) u8 i; u8 buffer[4] = {0x0b, 0x0c, 0x0d, 0x0e}; - if (sData->cardType == CARD_TYPE_FR && sData->trainerCard.var_4C == 1) + if (sData->cardType == CARD_TYPE_FRLG && sData->trainerCard.var_4C == 1) { for (i = 0; i < 3; i++) { @@ -1390,7 +1390,7 @@ static u8 SetCardBgsAndPals(void) LoadBgTiles(0, sData->var_19A8, 6144, 0); break; case 2: - if (sData->cardType != CARD_TYPE_FR) + if (sData->cardType != CARD_TYPE_FRLG) { LoadPalette(gEmeraldTrainerCardStarPals[sData->trainerCard.stars], 0, 96); LoadPalette(gUnknown_0856F4EC, 48, 32); @@ -1485,14 +1485,14 @@ static void sub_80C4630(void) static void sub_80C474C(void) { - if (sData->cardType == CARD_TYPE_FR) + if (sData->cardType == CARD_TYPE_FRLG) { if (sData->hasTrades) { FillBgTilemapBufferRect(3, 141, 27, 9, 1, 1, 1); FillBgTilemapBufferRect(3, 157, 27, 10, 1, 1, 1); } - if (sData->trainerCard.berruCrushPoints) + if (sData->trainerCard.berryCrushPoints) { FillBgTilemapBufferRect(3, 141, 21, 13, 1, 1, 1); FillBgTilemapBufferRect(3, 157, 21, 14, 1, 1, 1); @@ -1764,7 +1764,7 @@ void ShowPlayerTrainerCard(void (*callback)(void)) else sData->isLink = FALSE; - sData->language = LANGUAGE_ENGLISH; + sData->language = GAME_LANGUAGE; sub_80C3020(&sData->trainerCard); SetMainCallback2(CB2_InitTrainerCard); } @@ -1798,18 +1798,18 @@ static u8 GetSetCardType(void) if (sData == NULL) { if (gGameVersion == VERSION_FIRE_RED || gGameVersion == VERSION_LEAF_GREEN) - return CARD_TYPE_FR; + return CARD_TYPE_FRLG; else if (gGameVersion == VERSION_EMERALD) return CARD_TYPE_EMERALD; else - return CARD_TYPE_RUBY; + return CARD_TYPE_RS; } else { if (sData->trainerCard.version == VERSION_FIRE_RED || sData->trainerCard.version == VERSION_LEAF_GREEN) { sData->isHoenn = FALSE; - return CARD_TYPE_FR; + return CARD_TYPE_FRLG; } else if (sData->trainerCard.version == VERSION_EMERALD) { @@ -1819,7 +1819,7 @@ static u8 GetSetCardType(void) else { sData->isHoenn = TRUE; - return CARD_TYPE_RUBY; + return CARD_TYPE_RS; } } } @@ -1827,11 +1827,11 @@ static u8 GetSetCardType(void) static u8 VersionToCardType(u8 version) { if (version == VERSION_FIRE_RED || version == VERSION_LEAF_GREEN) - return CARD_TYPE_FR; + return CARD_TYPE_FRLG; else if (version == VERSION_EMERALD) return CARD_TYPE_EMERALD; else - return CARD_TYPE_RUBY; + return CARD_TYPE_RS; } static void sub_80C4FF0(void) -- cgit v1.2.3 From 08a3533682706283fa7e563f26bd06984010628e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Fri, 25 Jan 2019 23:32:45 +0100 Subject: Start frontier pass --- src/frontier_pass.c | 444 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/graphics.c | 2 +- 2 files changed, 445 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/frontier_pass.c b/src/frontier_pass.c index 4473dfae0..7b25ca9b8 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -1,7 +1,103 @@ #include "global.h" #include "gpu_regs.h" +#include "main.h" +#include "trainer_card.h" +#include "event_data.h" +#include "recorded_battle.h" +#include "alloc.h" +#include "sprite.h" +#include "scanline_effect.h" +#include "text_window.h" +#include "task.h" +#include "graphics.h" +#include "palette.h" +#include "window.h" +#include "menu_helpers.h" +#include "menu.h" #include "bg.h" +#include "sound.h" +#include "battle_pyramid.h" +#include "overworld.h" +#include "constants/battle_frontier.h" +#include "constants/rgb.h" +#include "constants/region_map_sections.h" +#include "constants/songs.h" +enum +{ + CURSOR_AREA_NOTHING, + CURSOR_AREA_MAP, + CURSOR_AREA_CARD, + CURSOR_AREA_RECORD, + CURSOR_AREA_CANCEL, + CURSOR_AREA_POINTS, + CURSOR_AREA_EARNED_SYMBOLS, // The window. + CURSOR_AREA_SYMBOL, // All 7 symbols. + CURSOR_AREA_COUNT = CURSOR_AREA_SYMBOL + NUM_FRONTIER_FACILITIES, +}; + +struct FrontierPassData +{ + void (*callback)(void); + u16 state; + u16 battlePoints; + s16 x; + s16 y; + u8 cursorArea; + u8 previousCursorArea; + u8 hasBattleRecord:1; + u8 unkE:3; + u8 trainerStars:4; + u8 facilitySymbols[NUM_FRONTIER_FACILITIES]; +}; + +struct FrontierPassUnk +{ + u32 unk0[8]; + u8 *unk20; + u8 *unk24; + u8 *unk28; + bool8 unk2C; + s16 unk2E; + s16 unk30; + u8 tilemapBuff1[0x1000]; + u8 tilemapBuff2[0x1000]; + u8 tilemapBuff3[0x400]; +}; + +struct FrontierPassSaved +{ + void (*callback)(void); + s16 x; + s16 y; +}; + +extern struct FrontierPassData *gUnknown_02039CEC; +extern struct FrontierPassUnk *gUnknown_02039CF0; +extern struct FrontierPassSaved gUnknown_02039CF8; + +// This file's functions. +u32 sub_80C51F0(void (*callback)(void)); +void sub_80C544C(void); +void sub_80C629C(void); +void sub_80C63FC(void); +void sub_80C62DC(void); +u32 sub_80C52E4(void); +bool32 sub_80C5484(void); +bool32 sub_80C570C(void); +void sub_80C5A48(u8 taskId); +void sub_80C5BD8(u8 taskId); +void sub_80C6104(u8 cursorArea, u8 previousCursorArea); + +// Const rom data. +extern const s16 gUnknown_085713E0[][2]; +extern const struct BgTemplate gUnknown_085713E8[3]; +extern const struct WindowTemplate gUnknown_08571400[]; +extern const u32 gUnknown_085712F8[]; +extern const u32 gUnknown_085712C0[]; +extern const u32 gUnknown_08571060[]; + +// code void sub_80C50D0(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); @@ -29,3 +125,351 @@ void sub_80C50D0(void) CpuFill16(0, (void *)VRAM, VRAM_SIZE); CpuFill32(0, (void *)OAM, OAM_SIZE); } + +void sub_80C51C4(void (*callback)(void)) +{ + sub_80C51F0(callback); + SetMainCallback2(sub_80C544C); +} + +void sub_80C51D8(void) +{ + SetMainCallback2(gUnknown_02039CEC->callback); + sub_80C52E4(); +} + +u32 sub_80C51F0(void (*callback)(void)) +{ + u8 i; + + if (gUnknown_02039CEC != NULL) + return 1; + + gUnknown_02039CEC = AllocZeroed(sizeof(*gUnknown_02039CEC)); + if (gUnknown_02039CEC == NULL) + return 2; + + gUnknown_02039CEC->callback = callback; + i = GetCurrentRegionMapSectionId(); + if (i != MAPSEC_BATTLE_FRONTIER && i != MAPSEC_ARTISAN_CAVE) + { + gUnknown_02039CEC->x = 176; + gUnknown_02039CEC->y = 104; + } + else + { + gUnknown_02039CEC->x = 176; + gUnknown_02039CEC->y = 48; + } + + gUnknown_02039CEC->battlePoints = gSaveBlock2Ptr->frontier.battlePoints; + gUnknown_02039CEC->hasBattleRecord = CanCopyRecordedBattleSaveData(); + gUnknown_02039CEC->unkE = 0; + gUnknown_02039CEC->trainerStars = CountPlayerTrainerStars(); + for (i = 0; i < 7; i++) + { + if (FlagGet(FLAG_SYS_TOWER_SILVER + i * 2)) + gUnknown_02039CEC->facilitySymbols[i]++; + if (FlagGet(FLAG_SYS_TOWER_GOLD + i * 2)) + gUnknown_02039CEC->facilitySymbols[i]++; + } + + return 0; +} + +u32 sub_80C52E4(void) +{ + if (gUnknown_02039CEC == NULL) + return 1; + + memset(gUnknown_02039CEC, 0, sizeof(*gUnknown_02039CEC)); // Why clear data, if it's going to be freed anyway? + FREE_AND_SET_NULL(gUnknown_02039CEC); + return 0; +} + +u32 sub_80C5310(void) +{ + if (gUnknown_02039CF0 != NULL) + return 1; + + gUnknown_02039CF0 = AllocZeroed(sizeof(*gUnknown_02039CF0)); + if (gUnknown_02039CF0 == NULL) + return 2; + + return 0; +} + +u32 sub_80C5340(void) +{ + FreeAllWindowBuffers(); + if (gUnknown_02039CF0 == NULL) + return 1; + + if (gUnknown_02039CF0->unk28 != NULL) + FREE_AND_SET_NULL(gUnknown_02039CF0->unk28); + if (gUnknown_02039CF0->unk24 != NULL) + FREE_AND_SET_NULL(gUnknown_02039CF0->unk24); + if (gUnknown_02039CF0->unk20 != NULL) + FREE_AND_SET_NULL(gUnknown_02039CF0->unk20); + + memset(gUnknown_02039CF0, 0, sizeof(*gUnknown_02039CF0)); // Why clear data, if it's going to be freed anyway? + FREE_AND_SET_NULL(gUnknown_02039CF0); + return 0; +} + +void sub_80C53AC(void) +{ + if (gUnknown_02039CF0->unk2C) + { + SetBgAffine(2, + gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][0] << 8, + gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][1] << 8, + gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][0], + gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][1], + gUnknown_02039CF0->unk2E, + gUnknown_02039CF0->unk30, + 0); + } + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_80C5438(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); +} + +void sub_80C544C(void) +{ + if (sub_80C5484()) + { + CreateTask(sub_80C5A48, 0); + SetMainCallback2(sub_80C5438); + } +} + +void sub_80C5470(void) +{ + if (sub_80C570C()) + { + sub_80C51D8(); + } +} + +bool32 sub_80C5484(void) +{ + u32 sizeOut = 0; + + switch (gUnknown_02039CEC->state) + { + case 0: + SetVBlankCallback(NULL); + ScanlineEffect_Stop(); + SetVBlankHBlankCallbacksToNull(); + DisableInterrupts(INTR_FLAG_HBLANK); + break; + case 1: + sub_80C50D0(); + break; + case 2: + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + reset_temp_tile_data_buffers(); + break; + case 3: + sub_80C5310(); + break; + case 4: + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(1, gUnknown_085713E8, ARRAY_COUNT(gUnknown_085713E8)); + SetBgTilemapBuffer(1, gUnknown_02039CF0->tilemapBuff1); + SetBgTilemapBuffer(2, gUnknown_02039CF0->tilemapBuff2); + SetBgTilemapBuffer(3, gUnknown_02039CF0->tilemapBuff3); + SetBgAttribute(2, BG_ATTR_WRAPAROUND, 1); + break; + case 5: + InitWindows(gUnknown_08571400); + DeactivateAllTextPrinters(); + break; + case 6: + gUnknown_02039CF0->unk20 = malloc_and_decompress(gUnknown_085712F8, &sizeOut); + gUnknown_02039CF0->unk24 = malloc_and_decompress(gUnknown_08571060, &sizeOut); + gUnknown_02039CF0->unk28 = malloc_and_decompress(gUnknown_085712C0, &sizeOut); + decompress_and_copy_tile_data_to_vram(1, gUnknown_08DE08C8, 0, 0, 0); + decompress_and_copy_tile_data_to_vram(2, gUnknown_08DE2084, 0, 0, 0); + break; + case 7: + if (free_temp_tile_data_buffers_if_possible()) + return FALSE; + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + break; + case 8: + LoadPalette(gUnknown_08DE07C8[0], 0, 0x1A0); + LoadPalette(gUnknown_08DE07C8[1 + gUnknown_02039CEC->trainerStars], 0x10, 0x20); + LoadPalette(stdpal_get(0), 0xF0, 0x20); + sub_80C629C(); + sub_80C6104(gUnknown_02039CEC->cursorArea, gUnknown_02039CEC->previousCursorArea); + if (gUnknown_02039CEC->unkE == 1 || gUnknown_02039CEC->unkE == 2) + { + gUnknown_02039CEC->state = 0; + return TRUE; + } + break; + case 9: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + ShowBg(0); + ShowBg(1); + ShowBg(2); + sub_80C62DC(); + SetVBlankCallback(sub_80C53AC); + BlendPalettes(0xFFFFFFFF, 0x10, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + break; + case 10: + AnimateSprites(); + BuildOamBuffer(); + if (UpdatePaletteFade()) + return FALSE; + + gUnknown_02039CEC->state = 0; + return TRUE; + } + + gUnknown_02039CEC->state++; + return FALSE; +} + +bool32 sub_80C570C(void) +{ + switch (gUnknown_02039CEC->state) + { + case 0: + if (gUnknown_02039CEC->unkE != 1 && gUnknown_02039CEC->unkE != 2) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + } + else + { + gUnknown_02039CEC->state = 2; + return FALSE; + } + break; + case 1: + if (UpdatePaletteFade()) + return FALSE; + break; + case 2: + SetGpuReg(REG_OFFSET_DISPCNT, 0); + HideBg(0); + HideBg(1); + HideBg(2); + SetVBlankCallback(NULL); + ScanlineEffect_Stop(); + SetVBlankHBlankCallbacksToNull(); + break; + case 3: + sub_80C63FC(); + break; + case 4: + sub_80C50D0(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + break; + case 5: + UnsetBgTilemapBuffer(0); + UnsetBgTilemapBuffer(1); + UnsetBgTilemapBuffer(2); + sub_80C5340(); + gUnknown_02039CEC->state = 0; + return TRUE; + } + + gUnknown_02039CEC->state++; + return FALSE; +} + +struct +{ + s16 yStart; + s16 yEnd; + s16 xStart; + s16 xEnd; +} +extern const gUnknown_08571454[]; + +u8 sub_80C57FC(s16 x, s16 y) +{ + u8 i; + + // Minus/Plus 1, because the table doesn't take into account the nothing field. + for (i = 0; i < CURSOR_AREA_COUNT - 1; i++) + { + if (gUnknown_08571454[i].yStart <= y && gUnknown_08571454[i].yEnd >= y + && gUnknown_08571454[i].xStart <= x && gUnknown_08571454[i].xEnd >= x) + { + if (i >= CURSOR_AREA_SYMBOL - 1 && gUnknown_02039CEC->facilitySymbols[i - CURSOR_AREA_SYMBOL + 1] == 0) + break; + + return i + 1; + } + } + + return 0; +} + +void sub_80C5868(void) +{ + u8 taskId; + + if (!sub_80C5484()) + return; + + switch (gUnknown_02039CEC->unkE) + { + case 1: + case 2: + taskId = CreateTask(sub_80C5BD8, 0); + gTasks[taskId].data[0] = 1; + break; + case 3: + default: + gUnknown_02039CEC->unkE = 0; + taskId = CreateTask(sub_80C5A48, 0); + break; + } + + SetMainCallback2(sub_80C5438); +} + +void sub_80C58D4(void) +{ + sub_80C51F0(gUnknown_02039CF8.callback); + gUnknown_02039CEC->x = gUnknown_02039CF8.x; + gUnknown_02039CEC->y = gUnknown_02039CF8.y; + memset(&gUnknown_02039CF8, 0, sizeof(gUnknown_02039CF8)); + switch (InBattlePyramid()) + { + case 1: + PlayBGM(MUS_PYRAMID); + break; + case 2: + PlayBGM(MUS_PYRAMID_TOP); + break; + default: + Overworld_PlaySpecialMapMusic(); + break; + } + + SetMainCallback2(sub_80C5868); +} diff --git a/src/graphics.c b/src/graphics.c index 10efd5043..287a1f5d6 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1590,7 +1590,7 @@ const u32 gUnknown_08DE0644[] = INCBIN_U32("graphics/title_screen/title_screen2. // more trainer card stuff -const u16 gUnknown_08DE07C8[] = INCBIN_U16("graphics/frontier_pass/tiles.gbapal");// size in LoadPalette calls is reported as 0xD0 << 1, which is 0x1A0, but palette is only 0x100 bytes long so it loads garbage as well +const u16 gUnknown_08DE07C8[][16] = INCBIN_U16("graphics/frontier_pass/tiles.gbapal");// size in LoadPalette calls is reported as 0xD0 << 1, which is 0x1A0, but palette is only 0x100 bytes long so it loads garbage as well const u32 gUnknown_08DE08C8[] = INCBIN_U32("graphics/frontier_pass/tiles.4bpp.lz"); const u32 gUnknown_08DE2084[] = INCBIN_U32("graphics/frontier_pass/tiles2.8bpp.lz"); const u32 gUnknown_08DE3060[] = INCBIN_U32("graphics/frontier_pass/tiles.bin.lz"); -- cgit v1.2.3 From 0688725afb36ae02c4f4904dfe02aa6b8e8e29fa Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 26 Jan 2019 14:50:24 +0100 Subject: Document and decompile more of frontier pass. --- src/frontier_pass.c | 579 ++++++++++++++++++++++++++++++++++++++++++++++------ src/start_menu.c | 5 +- src/trainer_card.c | 4 +- 3 files changed, 524 insertions(+), 64 deletions(-) (limited to 'src') diff --git a/src/frontier_pass.c b/src/frontier_pass.c index 7b25ca9b8..078baaff1 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -10,19 +10,36 @@ #include "text_window.h" #include "task.h" #include "graphics.h" +#include "strings.h" +#include "frontier_pass.h" +#include "international_string_util.h" #include "palette.h" #include "window.h" +#include "decompress.h" #include "menu_helpers.h" #include "menu.h" #include "bg.h" #include "sound.h" +#include "string_util.h" #include "battle_pyramid.h" #include "overworld.h" +#include "math_util.h" #include "constants/battle_frontier.h" #include "constants/rgb.h" #include "constants/region_map_sections.h" #include "constants/songs.h" +// All windows displayed in the frontier pass. +enum +{ + WINDOW_EARNED_SYMBOLS, + WINDOW_BATTLE_RECORD, + WINDOW_BATTLE_POINTS, + WINDOW_DESCRIPTION, + WINDOW_4, + WINDOW_COUNT +}; + enum { CURSOR_AREA_NOTHING, @@ -41,8 +58,8 @@ struct FrontierPassData void (*callback)(void); u16 state; u16 battlePoints; - s16 x; - s16 y; + s16 cursorX; + s16 cursorY; u8 cursorArea; u8 previousCursorArea; u8 hasBattleRecord:1; @@ -51,13 +68,14 @@ struct FrontierPassData u8 facilitySymbols[NUM_FRONTIER_FACILITIES]; }; -struct FrontierPassUnk +struct FrontierPassGfx { - u32 unk0[8]; + struct Sprite *cursorSprite; + struct Sprite *symbolSprites[NUM_FRONTIER_FACILITIES]; u8 *unk20; u8 *unk24; u8 *unk28; - bool8 unk2C; + bool8 setAffine; s16 unk2E; s16 unk30; u8 tilemapBuff1[0x1000]; @@ -68,26 +86,29 @@ struct FrontierPassUnk struct FrontierPassSaved { void (*callback)(void); - s16 x; - s16 y; + s16 cursorX; + s16 cursorY; }; extern struct FrontierPassData *gUnknown_02039CEC; -extern struct FrontierPassUnk *gUnknown_02039CF0; +extern struct FrontierPassGfx *gUnknown_02039CF0; extern struct FrontierPassSaved gUnknown_02039CF8; // This file's functions. -u32 sub_80C51F0(void (*callback)(void)); -void sub_80C544C(void); +u32 AllocateFrontierPassData(void (*callback)(void)); +void ShowFrontierMap(void (*callback)(void)); +void CB2_InitFrontierPass(void); void sub_80C629C(void); -void sub_80C63FC(void); -void sub_80C62DC(void); -u32 sub_80C52E4(void); -bool32 sub_80C5484(void); -bool32 sub_80C570C(void); -void sub_80C5A48(u8 taskId); -void sub_80C5BD8(u8 taskId); +void FreeCursorAndSymbolSprites(void); +void LoadCursorAndSymbolSprites(void); +u32 FreeFrontierPassData(void); +bool32 InitFrontierPass(void); +bool32 HideFrontierPass(void); +void Task_HandleFrontierPassInput(u8 taskId); +void Task_DoFadeEffect(u8 taskId); void sub_80C6104(u8 cursorArea, u8 previousCursorArea); +void PrintAreaDescription(u8 cursorArea); +void sub_80C5F58(bool8 arg0, bool8 arg1); // Const rom data. extern const s16 gUnknown_085713E0[][2]; @@ -96,6 +117,13 @@ extern const struct WindowTemplate gUnknown_08571400[]; extern const u32 gUnknown_085712F8[]; extern const u32 gUnknown_085712C0[]; extern const u32 gUnknown_08571060[]; +extern const u8 gUnknown_08571448[]; +extern const u8 gUnknown_0857144B[]; +extern const u8 *const gUnknown_08571614[]; +extern const struct SpritePalette gUnknown_085714E4[]; +extern const struct CompressedSpriteSheet gUnknown_085714BC[]; +extern const struct SpriteTemplate gUnknown_085715B4; +extern const struct SpriteTemplate gUnknown_085715E4; // code void sub_80C50D0(void) @@ -126,19 +154,19 @@ void sub_80C50D0(void) CpuFill32(0, (void *)OAM, OAM_SIZE); } -void sub_80C51C4(void (*callback)(void)) +void ShowFrontierPass(void (*callback)(void)) { - sub_80C51F0(callback); - SetMainCallback2(sub_80C544C); + AllocateFrontierPassData(callback); + SetMainCallback2(CB2_InitFrontierPass); } -void sub_80C51D8(void) +void LeaveFrontierPass(void) { SetMainCallback2(gUnknown_02039CEC->callback); - sub_80C52E4(); + FreeFrontierPassData(); } -u32 sub_80C51F0(void (*callback)(void)) +u32 AllocateFrontierPassData(void (*callback)(void)) { u8 i; @@ -153,13 +181,13 @@ u32 sub_80C51F0(void (*callback)(void)) i = GetCurrentRegionMapSectionId(); if (i != MAPSEC_BATTLE_FRONTIER && i != MAPSEC_ARTISAN_CAVE) { - gUnknown_02039CEC->x = 176; - gUnknown_02039CEC->y = 104; + gUnknown_02039CEC->cursorX = 176; + gUnknown_02039CEC->cursorY = 104; } else { - gUnknown_02039CEC->x = 176; - gUnknown_02039CEC->y = 48; + gUnknown_02039CEC->cursorX = 176; + gUnknown_02039CEC->cursorY = 48; } gUnknown_02039CEC->battlePoints = gSaveBlock2Ptr->frontier.battlePoints; @@ -177,7 +205,7 @@ u32 sub_80C51F0(void (*callback)(void)) return 0; } -u32 sub_80C52E4(void) +u32 FreeFrontierPassData(void) { if (gUnknown_02039CEC == NULL) return 1; @@ -187,7 +215,7 @@ u32 sub_80C52E4(void) return 0; } -u32 sub_80C5310(void) +u32 AllocateFrontierPassGfx(void) { if (gUnknown_02039CF0 != NULL) return 1; @@ -199,7 +227,7 @@ u32 sub_80C5310(void) return 0; } -u32 sub_80C5340(void) +u32 FreeFrontierPassGfx(void) { FreeAllWindowBuffers(); if (gUnknown_02039CF0 == NULL) @@ -217,9 +245,9 @@ u32 sub_80C5340(void) return 0; } -void sub_80C53AC(void) +void VblankCb_FrontierPass(void) { - if (gUnknown_02039CF0->unk2C) + if (gUnknown_02039CF0->setAffine) { SetBgAffine(2, gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][0] << 8, @@ -235,31 +263,31 @@ void sub_80C53AC(void) TransferPlttBuffer(); } -void sub_80C5438(void) +void CB2_FrontierPass(void) { RunTasks(); AnimateSprites(); BuildOamBuffer(); } -void sub_80C544C(void) +void CB2_InitFrontierPass(void) { - if (sub_80C5484()) + if (InitFrontierPass()) { - CreateTask(sub_80C5A48, 0); - SetMainCallback2(sub_80C5438); + CreateTask(Task_HandleFrontierPassInput, 0); + SetMainCallback2(CB2_FrontierPass); } } -void sub_80C5470(void) +void CB2_HideFrontierPass(void) { - if (sub_80C570C()) + if (HideFrontierPass()) { - sub_80C51D8(); + LeaveFrontierPass(); } } -bool32 sub_80C5484(void) +bool32 InitFrontierPass(void) { u32 sizeOut = 0; @@ -282,7 +310,7 @@ bool32 sub_80C5484(void) reset_temp_tile_data_buffers(); break; case 3: - sub_80C5310(); + AllocateFrontierPassGfx(); break; case 4: ResetBgsAndClearDma3BusyFlags(0); @@ -330,8 +358,8 @@ bool32 sub_80C5484(void) ShowBg(0); ShowBg(1); ShowBg(2); - sub_80C62DC(); - SetVBlankCallback(sub_80C53AC); + LoadCursorAndSymbolSprites(); + SetVBlankCallback(VblankCb_FrontierPass); BlendPalettes(0xFFFFFFFF, 0x10, 0); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); break; @@ -349,7 +377,7 @@ bool32 sub_80C5484(void) return FALSE; } -bool32 sub_80C570C(void) +bool32 HideFrontierPass(void) { switch (gUnknown_02039CEC->state) { @@ -378,7 +406,7 @@ bool32 sub_80C570C(void) SetVBlankHBlankCallbacksToNull(); break; case 3: - sub_80C63FC(); + FreeCursorAndSymbolSprites(); break; case 4: sub_80C50D0(); @@ -390,7 +418,7 @@ bool32 sub_80C570C(void) UnsetBgTilemapBuffer(0); UnsetBgTilemapBuffer(1); UnsetBgTilemapBuffer(2); - sub_80C5340(); + FreeFrontierPassGfx(); gUnknown_02039CEC->state = 0; return TRUE; } @@ -408,7 +436,7 @@ struct } extern const gUnknown_08571454[]; -u8 sub_80C57FC(s16 x, s16 y) +u8 GetCursorAreaFromCoords(s16 x, s16 y) { u8 i; @@ -428,35 +456,35 @@ u8 sub_80C57FC(s16 x, s16 y) return 0; } -void sub_80C5868(void) +void CB2_ReshowFrontierPass(void) { u8 taskId; - if (!sub_80C5484()) + if (!InitFrontierPass()) return; switch (gUnknown_02039CEC->unkE) { case 1: case 2: - taskId = CreateTask(sub_80C5BD8, 0); - gTasks[taskId].data[0] = 1; + taskId = CreateTask(Task_DoFadeEffect, 0); + gTasks[taskId].data[0] = TRUE; break; case 3: default: gUnknown_02039CEC->unkE = 0; - taskId = CreateTask(sub_80C5A48, 0); + taskId = CreateTask(Task_HandleFrontierPassInput, 0); break; } - SetMainCallback2(sub_80C5438); + SetMainCallback2(CB2_FrontierPass); } -void sub_80C58D4(void) +void CB2_ReturnFromRecord(void) { - sub_80C51F0(gUnknown_02039CF8.callback); - gUnknown_02039CEC->x = gUnknown_02039CF8.x; - gUnknown_02039CEC->y = gUnknown_02039CF8.y; + AllocateFrontierPassData(gUnknown_02039CF8.callback); + gUnknown_02039CEC->cursorX = gUnknown_02039CF8.cursorX; + gUnknown_02039CEC->cursorY = gUnknown_02039CF8.cursorY; memset(&gUnknown_02039CF8, 0, sizeof(gUnknown_02039CF8)); switch (InBattlePyramid()) { @@ -471,5 +499,438 @@ void sub_80C58D4(void) break; } - SetMainCallback2(sub_80C5868); + SetMainCallback2(CB2_ReshowFrontierPass); +} + +void CB2_ShowFrontierPassFeature(void) +{ + if (!HideFrontierPass()) + return; + + switch (gUnknown_02039CEC->unkE) + { + case 1: + ShowFrontierMap(CB2_ReshowFrontierPass); + break; + case 3: + gUnknown_02039CF8.callback = gUnknown_02039CEC->callback; + gUnknown_02039CF8.cursorX = gUnknown_02039CEC->cursorX; + gUnknown_02039CF8.cursorY = gUnknown_02039CEC->cursorY; + FreeFrontierPassData(); + PlayRecordedBattle(CB2_ReturnFromRecord); + break; + case 2: + ShowPlayerTrainerCard(CB2_ReshowFrontierPass); + break; + } +} + +bool32 TryCallPassAreaFunction(u8 taskId, u8 cursorArea) +{ + switch (cursorArea) + { + case CURSOR_AREA_RECORD: + if (!gUnknown_02039CEC->hasBattleRecord) + return FALSE; + gUnknown_02039CEC->unkE = 3; + DestroyTask(taskId); + SetMainCallback2(CB2_ShowFrontierPassFeature); + break; + case CURSOR_AREA_MAP: + case CURSOR_AREA_CARD: + gUnknown_02039CEC->unkE = cursorArea; + gTasks[taskId].func = Task_DoFadeEffect; + gTasks[taskId].data[0] = FALSE; + break; + default: + return FALSE; + } + + gUnknown_02039CEC->cursorX = gUnknown_02039CF0->cursorSprite->pos1.x; + gUnknown_02039CEC->cursorY = gUnknown_02039CF0->cursorSprite->pos1.y; + return TRUE; +} + +void Task_HandleFrontierPassInput(u8 taskId) +{ + u8 var = FALSE; // Reused, first informs whether the cursor moves, then used as the new cursor area. + + if (gMain.heldKeys & DPAD_UP && gUnknown_02039CF0->cursorSprite->pos1.y >= 9) + { + gUnknown_02039CF0->cursorSprite->pos1.y -= 2; + if (gUnknown_02039CF0->cursorSprite->pos1.y <= 7) + gUnknown_02039CF0->cursorSprite->pos1.y = 2; + var = TRUE; + } + if (gMain.heldKeys & DPAD_DOWN && gUnknown_02039CF0->cursorSprite->pos1.y <= 135) + { + gUnknown_02039CF0->cursorSprite->pos1.y += 2; + if (gUnknown_02039CF0->cursorSprite->pos1.y >= 137) + gUnknown_02039CF0->cursorSprite->pos1.y = 136; + var = TRUE; + } + + if (gMain.heldKeys & DPAD_LEFT && gUnknown_02039CF0->cursorSprite->pos1.x >= 6) + { + gUnknown_02039CF0->cursorSprite->pos1.x -= 2; + if (gUnknown_02039CF0->cursorSprite->pos1.x <= 4) + gUnknown_02039CF0->cursorSprite->pos1.x = 5; + var = TRUE; + } + if (gMain.heldKeys & DPAD_RIGHT && gUnknown_02039CF0->cursorSprite->pos1.x <= 231) + { + gUnknown_02039CF0->cursorSprite->pos1.x += 2; + if (gUnknown_02039CF0->cursorSprite->pos1.x >= 233) + gUnknown_02039CF0->cursorSprite->pos1.x = 232; + var = TRUE; + } + + if (!var) // Cursor did not change. + { + if (gUnknown_02039CEC->cursorArea != CURSOR_AREA_NOTHING && gMain.newKeys & A_BUTTON) + { + if (gUnknown_02039CEC->cursorArea <= CURSOR_AREA_RECORD) // Map, Card, Record + { + PlaySE(SE_SELECT); + if (TryCallPassAreaFunction(taskId, gUnknown_02039CEC->cursorArea)) + return; + } + else if (gUnknown_02039CEC->cursorArea == CURSOR_AREA_CANCEL) + { + PlaySE(SE_PC_OFF); + SetMainCallback2(CB2_HideFrontierPass); + DestroyTask(taskId); + // BUG. The function should return here. Otherwise, it can play the same sound twice and destroy the same task twice. + } + } + + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_PC_OFF); + SetMainCallback2(CB2_HideFrontierPass); + DestroyTask(taskId); + } + } + else + { + var = GetCursorAreaFromCoords(gUnknown_02039CF0->cursorSprite->pos1.x - 5, gUnknown_02039CF0->cursorSprite->pos1.y + 5); + if (gUnknown_02039CEC->cursorArea != var) + { + PrintAreaDescription(var); + gUnknown_02039CEC->previousCursorArea = gUnknown_02039CEC->cursorArea; + gUnknown_02039CEC->cursorArea = var; + sub_80C6104(gUnknown_02039CEC->cursorArea, gUnknown_02039CEC->previousCursorArea); + } + } +} + +void Task_DoFadeEffect(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (gUnknown_02039CEC->state) + { + case 0: + if (!data[0]) + { + sub_80C5F58(TRUE, FALSE); + data[1] = 0x100; + data[2] = 0x100; + data[3] = 0x15; + data[4] = 0x15; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_WHITE); + } + else + { + data[1] = 0x1FC; + data[2] = 0x1FC; + data[3] = -0x15; + data[4] = -0x15; + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + ShowBg(0); + ShowBg(1); + ShowBg(2); + LoadCursorAndSymbolSprites(); + SetVBlankCallback(VblankCb_FrontierPass); + BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_WHITE); + } + gUnknown_02039CF0->setAffine = TRUE; + gUnknown_02039CF0->unk2E = sub_8151624(data[1]); + gUnknown_02039CF0->unk30 = sub_8151624(data[2]); + break; + case 1: + UpdatePaletteFade(); + data[1] += data[3]; + data[2] += data[4]; + gUnknown_02039CF0->unk2E = sub_8151624(data[1]); + gUnknown_02039CF0->unk30 = sub_8151624(data[2]); + if (!data[0]) + { + if (data[1] <= 0x1FC) + return; + } + else + { + if (data[1] != 0x100) + return; + } + break; + case 2: + if (gUnknown_02039CF0->setAffine) // Nonsensical check. + gUnknown_02039CF0->setAffine = FALSE; + if (UpdatePaletteFade()) + return; + if (!data[0]) + { + DestroyTask(taskId); + SetMainCallback2(CB2_ShowFrontierPassFeature); + } + else + { + sub_80C5F58(FALSE, FALSE); + gUnknown_02039CEC->unkE = 0; + gTasks[taskId].func = Task_HandleFrontierPassInput; + } + SetBgAttribute(2, BG_ATTR_WRAPAROUND, 0); + gUnknown_02039CEC->state = 0; + return; + } + + gUnknown_02039CEC->state++; +} + +void ShowAndPrintWindows(void) +{ + s32 x; + u8 i; + + for (i = 0; i < WINDOW_COUNT; i++) + { + PutWindowTilemap(i); + FillWindowPixelBuffer(i, 0); + } + + x = GetStringCenterAlignXOffset(1, gText_SymbolsEarned, 0x60); + AddTextPrinterParameterized3(WINDOW_EARNED_SYMBOLS, 1, x, 5, gUnknown_08571448, 0, gText_SymbolsEarned); + + x = GetStringCenterAlignXOffset(1, gText_BattleRecord, 0x60); + AddTextPrinterParameterized3(WINDOW_BATTLE_RECORD, 1, x, 5, gUnknown_08571448, 0, gText_BattleRecord); + + AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, 8, 5, 4, gUnknown_08571448, 0, gText_BattlePoints); + ConvertIntToDecimalStringN(gStringVar4, gUnknown_02039CEC->battlePoints, STR_CONV_MODE_LEFT_ALIGN, 5); + x = GetStringRightAlignXOffset(8, gStringVar4, 0x5B); + AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, 8, x, 16, gUnknown_08571448, 0, gStringVar4); + + gUnknown_02039CEC->cursorArea = GetCursorAreaFromCoords(gUnknown_02039CEC->cursorX - 5, gUnknown_02039CEC->cursorY + 5); + gUnknown_02039CEC->previousCursorArea = CURSOR_AREA_NOTHING; + PrintAreaDescription(gUnknown_02039CEC->cursorArea); + + for (i = 0; i < WINDOW_COUNT; i++) + CopyWindowToVram(i, 3); + + CopyBgTilemapBufferToVram(0); +} + +void PrintAreaDescription(u8 cursorArea) +{ + FillWindowPixelBuffer(WINDOW_DESCRIPTION, 0); + if (cursorArea == CURSOR_AREA_RECORD && !gUnknown_02039CEC->hasBattleRecord) + AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, gUnknown_0857144B, 0, gUnknown_08571614[0]); + else if (cursorArea != CURSOR_AREA_NOTHING) + AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, gUnknown_0857144B, 0, gUnknown_08571614[cursorArea]); + + CopyWindowToVram(WINDOW_DESCRIPTION, 3); + CopyBgTilemapBufferToVram(0); +} + +void sub_80C5F58(bool8 arg0, bool8 arg1) +{ + switch (gUnknown_02039CEC->unkE) + { + case 1: + if (arg0) + CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_02039CF0->unk20, 16, 3, 12, 7, 16); + else + FillBgTilemapBufferRect(2, 0, 16, 3, 12, 7, 16); + break; + case 2: + if (arg0) + CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_02039CF0->unk20 + 84, 16, 10, 12, 7, 16); + else + FillBgTilemapBufferRect(2, 0, 16, 10, 12, 7, 16); + break; + default: + return; + } + + CopyBgTilemapBufferToVram(2); + if (arg1) + { + SetBgAffine(2, + gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][0] << 8, + gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][1] << 8, + gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][0], + gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][1], + sub_8151624(0x1FC), + sub_8151624(0x1FC), + 0); + } + else + { + SetBgAffine(2, + gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][0] << 8, + gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][1] << 8, + gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][0], + gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][1], + sub_8151624(0x100), + sub_8151624(0x100), + 0); + } +} + +void sub_80C6104(u8 cursorArea, u8 previousCursorArea) +{ + bool32 var; + + switch (previousCursorArea) + { + case CURSOR_AREA_MAP: + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_02039CF0->unk24, 16, 3, 12, 7, 17); + var = TRUE; + break; + case CURSOR_AREA_CARD: + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_02039CF0->unk24 + 336, 16, 10, 12, 7, 17); + var = TRUE; + break; + case CURSOR_AREA_RECORD: + if (!gUnknown_02039CEC->hasBattleRecord) + { + var = FALSE; + } + else + { + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_02039CF0->unk28, 2, 10, 12, 3, 17); + var = TRUE; + } + break; + case CURSOR_AREA_CANCEL: + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DE3350, 21, 0, 9, 2, 17); + var = TRUE; + break; + default: + var = FALSE; + break; + } + + if (!var) + { + if (cursorArea == CURSOR_AREA_NOTHING || cursorArea > CURSOR_AREA_CANCEL) + return; + } + + switch (cursorArea) + { + case CURSOR_AREA_MAP: + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_02039CF0->unk24 + 168, 16, 3, 12, 7, 17); + var = TRUE; + break; + case CURSOR_AREA_CARD: + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_02039CF0->unk24 + 504, 16, 10, 12, 7, 17); + var = TRUE; + break; + case CURSOR_AREA_RECORD: + if (!gUnknown_02039CEC->hasBattleRecord) + return; + + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_02039CF0->unk28 + 72, 2, 10, 12, 3, 17); + var = TRUE; + break; + case CURSOR_AREA_CANCEL: + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_08DE3374, 21, 0, 9, 2, 17); + var = TRUE; + break; + default: + var = FALSE; + break; + } + + if (!var) + { + asm("":::"r4"); + if (previousCursorArea == CURSOR_AREA_NOTHING || previousCursorArea > CURSOR_AREA_CANCEL) + return; + } + + CopyBgTilemapBufferToVram(1); +} + +void sub_80C629C(void) +{ + CopyToBgTilemapBuffer(1, gUnknown_08DE3060, 0, 0); + sub_80C6104(gUnknown_02039CEC->cursorArea, gUnknown_02039CEC->previousCursorArea); + sub_80C5F58(TRUE, gUnknown_02039CEC->unkE); + ShowAndPrintWindows(); + CopyBgTilemapBufferToVram(1); +} + +void LoadCursorAndSymbolSprites(void) +{ + u8 spriteId; + u8 i = 0; + + FreeAllSpritePalettes(); + ResetAffineAnimData(); + LoadSpritePalettes(gUnknown_085714E4); + LoadCompressedSpriteSheet(&gUnknown_085714BC[0]); + LoadCompressedSpriteSheet(&gUnknown_085714BC[2]); + spriteId = CreateSprite(&gUnknown_085715B4, gUnknown_02039CEC->cursorX, gUnknown_02039CEC->cursorY, 0); + gUnknown_02039CF0->cursorSprite = &gSprites[spriteId]; + gUnknown_02039CF0->cursorSprite->oam.priority = 0; + + for (i = 0; i < NUM_FRONTIER_FACILITIES; i++) + { + if (gUnknown_02039CEC->facilitySymbols[i] != 0) + { + struct SpriteTemplate sprite = gUnknown_085715E4; + + sprite.paletteTag += gUnknown_02039CEC->facilitySymbols[i] - 1; + spriteId = CreateSprite(&sprite, gUnknown_08571454[i + CURSOR_AREA_SYMBOL - 1].xStart + 8, gUnknown_08571454[i + CURSOR_AREA_SYMBOL - 1].yStart + 6, i + 1); + gUnknown_02039CF0->symbolSprites[i] = &gSprites[spriteId]; + gUnknown_02039CF0->symbolSprites[i]->oam.priority = 2; + StartSpriteAnim(gUnknown_02039CF0->symbolSprites[i], i); + } + } +} + +void FreeCursorAndSymbolSprites(void) +{ + u8 i = 0; + + DestroySprite(gUnknown_02039CF0->cursorSprite); + gUnknown_02039CF0->cursorSprite = NULL; + for (i = 0; i < NUM_FRONTIER_FACILITIES; i++) + { + if (gUnknown_02039CF0->symbolSprites[i] != NULL) + { + DestroySprite(gUnknown_02039CF0->symbolSprites[i]); + gUnknown_02039CF0->symbolSprites[i] = NULL; + } + } + FreeAllSpritePalettes(); + FreeSpriteTilesByTag(2); + FreeSpriteTilesByTag(0); +} + +void nullsub_39(void) +{ + +} + +// Frontier Map code. +/* +void ShowFrontierMap(void (*callback)(void)); +{ + } +*/ diff --git a/src/start_menu.c b/src/start_menu.c index 6b4b0e775..5c7e5365d 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -10,6 +10,7 @@ #include "bg.h" #include "field_effect.h" #include "party_menu.h" +#include "frontier_pass.h" #include "task.h" #include "overworld.h" #include "link.h" @@ -92,8 +93,6 @@ extern void sub_808B864(void); extern void CB2_Pokedex(void); extern void PlayRainSoundEffect(void); extern void CB2_PokeNav(void); -extern void ShowPlayerTrainerCard(void (*)(void)); -extern void sub_80C51C4(void (*)(void)); extern void ScriptUnfreezeEventObjects(void); extern void sub_81A9EC8(void); extern void save_serialize_map(void); @@ -678,7 +677,7 @@ static bool8 StartMenuPlayerNameCallback(void) if (is_c1_link_related_active() || InUnionRoom()) ShowPlayerTrainerCard(CB2_ReturnToFieldWithOpenMenu); // Display trainer card else if (FlagGet(FLAG_SYS_FRONTIER_PASS)) - sub_80C51C4(CB2_ReturnToFieldWithOpenMenu); // Display frontier pass + ShowFrontierPass(CB2_ReturnToFieldWithOpenMenu); // Display frontier pass else ShowPlayerTrainerCard(CB2_ReturnToFieldWithOpenMenu); // Display trainer card diff --git a/src/trainer_card.c b/src/trainer_card.c index cde15ae34..e4b9c5edf 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -8,6 +8,7 @@ #include "link.h" #include "bg.h" #include "sound.h" +#include "frontier_pass.h" #include "overworld.h" #include "menu.h" #include "text.h" @@ -90,7 +91,6 @@ struct TrainerCardData //external functions extern u8 sub_80D30A0(u16); -extern void sub_80C5868(void); // EWRAM EWRAM_DATA static struct TrainerCardData *sData = NULL; @@ -1754,7 +1754,7 @@ void ShowPlayerTrainerCard(void (*callback)(void)) { sData = AllocZeroed(sizeof(*sData)); sData->callback2 = callback; - if (callback == sub_80C5868) + if (callback == CB2_ReshowFrontierPass) sData->var_52C = 0x7FFF; else sData->var_52C = 0; -- cgit v1.2.3 From 03549349f89ba464b1f4b4f7c87b204f3045741b Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 26 Jan 2019 19:20:14 +0100 Subject: Decompile all frontier pass --- src/frontier_pass.c | 457 +++++++++++++++++++++++++++++++++++++++++-- src/pokemon_storage_system.c | 164 +++++++++++++++- src/trainer_card.c | 1 - 3 files changed, 606 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/frontier_pass.c b/src/frontier_pass.c index 078baaff1..f9d56a272 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -25,6 +25,7 @@ #include "overworld.h" #include "math_util.h" #include "constants/battle_frontier.h" +#include "constants/maps.h" #include "constants/rgb.h" #include "constants/region_map_sections.h" #include "constants/songs.h" @@ -117,12 +118,11 @@ extern const struct WindowTemplate gUnknown_08571400[]; extern const u32 gUnknown_085712F8[]; extern const u32 gUnknown_085712C0[]; extern const u32 gUnknown_08571060[]; -extern const u8 gUnknown_08571448[]; -extern const u8 gUnknown_0857144B[]; +extern const u8 gUnknown_08571448[][3]; extern const u8 *const gUnknown_08571614[]; extern const struct SpritePalette gUnknown_085714E4[]; extern const struct CompressedSpriteSheet gUnknown_085714BC[]; -extern const struct SpriteTemplate gUnknown_085715B4; +extern const struct SpriteTemplate gUnknown_085715B4[2]; extern const struct SpriteTemplate gUnknown_085715E4; // code @@ -712,15 +712,15 @@ void ShowAndPrintWindows(void) } x = GetStringCenterAlignXOffset(1, gText_SymbolsEarned, 0x60); - AddTextPrinterParameterized3(WINDOW_EARNED_SYMBOLS, 1, x, 5, gUnknown_08571448, 0, gText_SymbolsEarned); + AddTextPrinterParameterized3(WINDOW_EARNED_SYMBOLS, 1, x, 5, gUnknown_08571448[0], 0, gText_SymbolsEarned); x = GetStringCenterAlignXOffset(1, gText_BattleRecord, 0x60); - AddTextPrinterParameterized3(WINDOW_BATTLE_RECORD, 1, x, 5, gUnknown_08571448, 0, gText_BattleRecord); + AddTextPrinterParameterized3(WINDOW_BATTLE_RECORD, 1, x, 5, gUnknown_08571448[0], 0, gText_BattleRecord); - AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, 8, 5, 4, gUnknown_08571448, 0, gText_BattlePoints); + AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, 8, 5, 4, gUnknown_08571448[0], 0, gText_BattlePoints); ConvertIntToDecimalStringN(gStringVar4, gUnknown_02039CEC->battlePoints, STR_CONV_MODE_LEFT_ALIGN, 5); x = GetStringRightAlignXOffset(8, gStringVar4, 0x5B); - AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, 8, x, 16, gUnknown_08571448, 0, gStringVar4); + AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, 8, x, 16, gUnknown_08571448[0], 0, gStringVar4); gUnknown_02039CEC->cursorArea = GetCursorAreaFromCoords(gUnknown_02039CEC->cursorX - 5, gUnknown_02039CEC->cursorY + 5); gUnknown_02039CEC->previousCursorArea = CURSOR_AREA_NOTHING; @@ -736,9 +736,9 @@ void PrintAreaDescription(u8 cursorArea) { FillWindowPixelBuffer(WINDOW_DESCRIPTION, 0); if (cursorArea == CURSOR_AREA_RECORD && !gUnknown_02039CEC->hasBattleRecord) - AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, gUnknown_0857144B, 0, gUnknown_08571614[0]); + AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, gUnknown_08571448[1], 0, gUnknown_08571614[0]); else if (cursorArea != CURSOR_AREA_NOTHING) - AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, gUnknown_0857144B, 0, gUnknown_08571614[cursorArea]); + AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, gUnknown_08571448[1], 0, gUnknown_08571614[cursorArea]); CopyWindowToVram(WINDOW_DESCRIPTION, 3); CopyBgTilemapBufferToVram(0); @@ -884,7 +884,7 @@ void LoadCursorAndSymbolSprites(void) LoadSpritePalettes(gUnknown_085714E4); LoadCompressedSpriteSheet(&gUnknown_085714BC[0]); LoadCompressedSpriteSheet(&gUnknown_085714BC[2]); - spriteId = CreateSprite(&gUnknown_085715B4, gUnknown_02039CEC->cursorX, gUnknown_02039CEC->cursorY, 0); + spriteId = CreateSprite(&gUnknown_085715B4[0], gUnknown_02039CEC->cursorX, gUnknown_02039CEC->cursorY, 0); gUnknown_02039CF0->cursorSprite = &gSprites[spriteId]; gUnknown_02039CF0->cursorSprite->oam.priority = 0; @@ -928,9 +928,440 @@ void nullsub_39(void) } // Frontier Map code. -/* -void ShowFrontierMap(void (*callback)(void)); + +struct FrontierMapData +{ + void (*callback)(void); + struct Sprite *cursorSprite; + struct Sprite *playerHeadSprite; + struct Sprite *mapIndicatorSprite; + u8 cursorPos; + u8 unk11; + u8 tilemapBuff0[0x1000]; + u8 tilemapBuff1[0x1000]; + u8 tilemapBuff2[0x1000]; +}; + +extern struct FrontierMapData *gUnknown_02039CF4; + +// Forward declarations. +void sub_80C67BC(u8 taskId); +void sub_80C6B94(void); +void sub_80C6974(void); +void sub_80C6C70(u8 direction); + +extern const struct BgTemplate gUnknown_085713F4[3]; +extern const struct WindowTemplate gUnknown_08571428[]; +extern const u32 gUnknown_0856FBBC[]; +extern const u32 gUnknown_08570E00[]; + +void ShowFrontierMap(void (*callback)(void)) +{ + if (gUnknown_02039CF4 != NULL) + SetMainCallback2(callback); // This line doesn't make sense at all, since it gets overwritten later anyway. + + gUnknown_02039CF4 = AllocZeroed(sizeof(*gUnknown_02039CF4)); + gUnknown_02039CF4->callback = callback; + ResetTasks(); + CreateTask(sub_80C67BC, 0); + SetMainCallback2(CB2_FrontierPass); +} + +void sub_80C6498(void) +{ + ResetTasks(); + SetMainCallback2(gUnknown_02039CF4->callback); + memset(gUnknown_02039CF4, 0, sizeof(*gUnknown_02039CF4)); // Pointless memory clear. + FREE_AND_SET_NULL(gUnknown_02039CF4); +} + +bool32 sub_80C64CC(void) +{ + switch (gUnknown_02039CEC->state) + { + case 0: + SetVBlankCallback(NULL); + ScanlineEffect_Stop(); + SetVBlankHBlankCallbacksToNull(); + break; + case 1: + sub_80C50D0(); + break; + case 2: + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + reset_temp_tile_data_buffers(); + break; + case 3: + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_085713F4, ARRAY_COUNT(gUnknown_085713F4)); + SetBgTilemapBuffer(0, gUnknown_02039CF4->tilemapBuff0); + SetBgTilemapBuffer(1, gUnknown_02039CF4->tilemapBuff1); + SetBgTilemapBuffer(2, gUnknown_02039CF4->tilemapBuff2); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + break; + case 4: + InitWindows(gUnknown_08571428); + DeactivateAllTextPrinters(); + sub_80C6B94(); + decompress_and_copy_tile_data_to_vram(1, gUnknown_0856FBBC, 0, 0, 0); + break; + case 5: + if (free_temp_tile_data_buffers_if_possible()) + return FALSE; + LoadPalette(gUnknown_08DE07C8[0], 0, 0x1A0); + LoadPalette(stdpal_get(0), 0xF0, 0x20); + CopyToBgTilemapBuffer(2, gUnknown_08570E00, 0, 0); + CopyBgTilemapBufferToVram(2); + break; + case 6: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + ShowBg(0); + ShowBg(1); + ShowBg(2); + sub_80C6974(); + SetVBlankCallback(VblankCb_FrontierPass); + BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_WHITE); + break; + case 7: + if (UpdatePaletteFade()) + return FALSE; + gUnknown_02039CEC->state = 0; + return TRUE; + } + + gUnknown_02039CEC->state++; + return FALSE; +} + +bool32 sub_80C66AC(void) { + switch (gUnknown_02039CEC->state) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_WHITE); + break; + case 1: + if (UpdatePaletteFade()) + return FALSE; + SetGpuReg(REG_OFFSET_DISPCNT, 0); + HideBg(0); + HideBg(1); + HideBg(2); + break; + case 2: + SetVBlankCallback(NULL); + ScanlineEffect_Stop(); + SetVBlankHBlankCallbacksToNull(); + break; + case 3: + if (gUnknown_02039CF4->cursorSprite != NULL) + { + DestroySprite(gUnknown_02039CF4->cursorSprite); + FreeSpriteTilesByTag(0); + } + if (gUnknown_02039CF4->mapIndicatorSprite != NULL) + { + DestroySprite(gUnknown_02039CF4->mapIndicatorSprite); + FreeSpriteTilesByTag(1); + } + if (gUnknown_02039CF4->playerHeadSprite != NULL) + { + DestroySprite(gUnknown_02039CF4->playerHeadSprite); + FreeSpriteTilesByTag(4); + } + FreeAllWindowBuffers(); + break; + case 4: + sub_80C50D0(); + ResetSpriteData(); + FreeAllSpritePalettes(); + break; + case 5: + UnsetBgTilemapBuffer(0); + UnsetBgTilemapBuffer(1); + UnsetBgTilemapBuffer(2); + gUnknown_02039CEC->state = 0; + return TRUE; + } + gUnknown_02039CEC->state++; + return FALSE; +} + +void sub_80C67BC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + if (sub_80C64CC()) + break; + return; + case 1: + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_PC_OFF); + data[0] = 4; + } + else if (gMain.newKeys & DPAD_DOWN) + { + if (gUnknown_02039CF4->cursorPos >= NUM_FRONTIER_FACILITIES - 1) + sub_80C6C70(0); + else + data[0] = 2; + } + else if (gMain.newKeys & DPAD_UP) + { + if (gUnknown_02039CF4->cursorPos == 0) + sub_80C6C70(1); + else + data[0] = 3; + } + return; + case 2: + if (data[1] > 3) + { + sub_80C6C70(0); + data[1] = 0; + data[0] = 1; + } + else + { + gUnknown_02039CF4->cursorSprite->pos1.y += 4; + data[1]++; + } + return; + case 3: + if (data[1] > 3) + { + sub_80C6C70(1); + data[1] = 0; + data[0] = 1; + } + else + { + gUnknown_02039CF4->cursorSprite->pos1.y -= 4; + data[1]++; + } + return; + case 4: + if (sub_80C66AC()) + break; + return; + case 5: + DestroyTask(taskId); + sub_80C6498(); + return; + } + + data[0]++; +} + +u8 sub_80C68E8(u16 mapNum) // id + 1, zero means not a frontier map number +{ + if ((mapNum >= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_LOBBY) && mapNum <= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM)) + || (mapNum >= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM) && mapNum <= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM2))) + return FRONTIER_FACILITY_TOWER + 1; + else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_DOME_LOBBY) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM)) + return FRONTIER_FACILITY_DOME + 1; + else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PALACE_LOBBY) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM)) + return FRONTIER_FACILITY_PALACE + 1; + else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_ARENA_LOBBY) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_ARENA_BATTLE_ROOM)) + return FRONTIER_FACILITY_ARENA + 1; + else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM)) + return FRONTIER_FACILITY_FACTORY + 1; + else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_LOBBY) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM1) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM2) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3)) + return FRONTIER_FACILITY_PIKE + 1; + else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE) + || mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_TOP)) + return FRONTIER_FACILITY_PYRAMID + 1; + else + return 0; +} + +struct +{ + const u8 *name; + const u8 *description; + s16 x; + s16 y; + u8 animNum; +} extern const gUnknown_08571650[]; + +extern const struct CompressedSpriteSheet gUnknown_085714D4[]; +extern const struct SpriteTemplate gUnknown_085715FC; + +void sub_80C6974(void) +{ + struct SpriteTemplate sprite; + u8 spriteId; + u8 id; + s16 x = 0, y; + + FreeAllSpritePalettes(); + LoadSpritePalettes(gUnknown_085714E4); + + LoadCompressedSpriteSheet(&gUnknown_085714BC[0]); + spriteId = CreateSprite(&gUnknown_085715B4[0], 155, (gUnknown_02039CF4->cursorPos * 16) + 8, 2); + gUnknown_02039CF4->cursorSprite = &gSprites[spriteId]; + gUnknown_02039CF4->cursorSprite->oam.priority = 0; + gUnknown_02039CF4->cursorSprite->hFlip = TRUE; + StartSpriteAnim(gUnknown_02039CF4->cursorSprite, 1); + + LoadCompressedSpriteSheet(&gUnknown_085714BC[1]); + spriteId = CreateSprite(&gUnknown_085715B4[1], gUnknown_08571650[gUnknown_02039CF4->cursorPos].x, gUnknown_08571650[gUnknown_02039CF4->cursorPos].y, 1); + gUnknown_02039CF4->mapIndicatorSprite = &gSprites[spriteId]; + gUnknown_02039CF4->mapIndicatorSprite->oam.priority = 0; + StartSpriteAnim(gUnknown_02039CF4->mapIndicatorSprite, gUnknown_08571650[gUnknown_02039CF4->cursorPos].animNum); + + // Create player indicator head sprite only if it's in vicinity of battle frontier. + id = GetCurrentRegionMapSectionId(); + if (id == MAPSEC_BATTLE_FRONTIER || id == MAPSEC_ARTISAN_CAVE) + { + s8 mapNum = gSaveBlock1Ptr->location.mapNum; + + if (mapNum == MAP_NUM(BATTLE_FRONTIER_OUTSIDE_WEST) + || (mapNum == MAP_NUM(BATTLE_FRONTIER_OUTSIDE_EAST) && (x = 55))) + { + x += gSaveBlock1Ptr->pos.x; + y = gSaveBlock1Ptr->pos.y; + + x /= 8; + y /= 8; + + id = 0; + } + else + { + id = sub_80C68E8(mapNum); + if (id != 0) + { + x = gUnknown_08571650[id - 1].x; + y = gUnknown_08571650[id - 1].y; + } + else + { + // Handle Artisan Cave. + if (gSaveBlock1Ptr->escapeWarp.mapNum == MAP_NUM(BATTLE_FRONTIER_OUTSIDE_EAST)) + x = gSaveBlock1Ptr->escapeWarp.x + 55; + else + x = gSaveBlock1Ptr->escapeWarp.x; + + y = gSaveBlock1Ptr->escapeWarp.y; + + x /= 8; + y /= 8; + } + } + + LoadCompressedSpriteSheet(gUnknown_085714D4); + sprite = gUnknown_085715FC; + sprite.paletteTag = gSaveBlock2Ptr->playerGender + 4; + if (id != 0) + { + spriteId = CreateSprite(&sprite, x, y, 0); + } + else + { + x *= 8; + y *= 8; + spriteId = CreateSprite(&sprite, x + 20, y + 36, 0); + } + + gUnknown_02039CF4->playerHeadSprite = &gSprites[spriteId]; + gUnknown_02039CF4->playerHeadSprite->oam.priority = 0; + if (gSaveBlock2Ptr->playerGender != MALE) + StartSpriteAnim(gUnknown_02039CF4->playerHeadSprite, 1); + } +} + +enum +{ + MAP_WINDOW_0, + MAP_WINDOW_NAME, + MAP_WINDOW_DESCRIPTION, + MAP_WINDOW_COUNT +}; + +void sub_80C6B94(void) +{ + u8 i; + + for (i = 0; i < MAP_WINDOW_COUNT; i++) + { + PutWindowTilemap(i); + FillWindowPixelBuffer(i, 0); + } + + for (i = 0; i < NUM_FRONTIER_FACILITIES; i++) + { + if (i == gUnknown_02039CF4->cursorPos) + AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (i * 16) + 1, gUnknown_08571448[2], 0, gUnknown_08571650[i].name); + else + AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (i * 16) + 1, gUnknown_08571448[1], 0, gUnknown_08571650[i].name); + } + + AddTextPrinterParameterized3(MAP_WINDOW_DESCRIPTION, 1, 4, 0, gUnknown_08571448[0], 0, gUnknown_08571650[gUnknown_02039CF4->cursorPos].description); + + for (i = 0; i < MAP_WINDOW_COUNT; i++) + CopyWindowToVram(i, 3); + + CopyBgTilemapBufferToVram(0); +} + +void sub_80C6C70(u8 direction) +{ + u8 oldCursorPos, i; + + if (direction) + { + oldCursorPos = gUnknown_02039CF4->cursorPos; + gUnknown_02039CF4->cursorPos = (oldCursorPos + 6) % NUM_FRONTIER_FACILITIES; + } + else + { + oldCursorPos = gUnknown_02039CF4->cursorPos; + gUnknown_02039CF4->cursorPos = (oldCursorPos + 1) % NUM_FRONTIER_FACILITIES; + } + + AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (oldCursorPos * 16) + 1, gUnknown_08571448[1], 0, gUnknown_08571650[oldCursorPos].name); + AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (gUnknown_02039CF4->cursorPos * 16) + 1, gUnknown_08571448[2], 0, gUnknown_08571650[gUnknown_02039CF4->cursorPos].name); + + gUnknown_02039CF4->cursorSprite->pos1.y = (gUnknown_02039CF4->cursorPos * 16) + 8; + + StartSpriteAnim(gUnknown_02039CF4->mapIndicatorSprite, gUnknown_08571650[gUnknown_02039CF4->cursorPos].animNum); + gUnknown_02039CF4->mapIndicatorSprite->pos1.x = gUnknown_08571650[gUnknown_02039CF4->cursorPos].x; + gUnknown_02039CF4->mapIndicatorSprite->pos1.y = gUnknown_08571650[gUnknown_02039CF4->cursorPos].y; + FillWindowPixelBuffer(MAP_WINDOW_DESCRIPTION, 0); + AddTextPrinterParameterized3(MAP_WINDOW_DESCRIPTION, 1, 4, 0, gUnknown_08571448[0], 0, gUnknown_08571650[gUnknown_02039CF4->cursorPos].description); + + for (i = 0; i < 3; i++) + CopyWindowToVram(i, 3); + + CopyBgTilemapBufferToVram(0); + PlaySE(SE_Z_SCROLL); } -*/ diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 36ed78a54..dc2e80a61 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -463,8 +463,6 @@ EWRAM_DATA static u8 sMovingMonOrigBoxId = 0; EWRAM_DATA static u8 sMovingMonOrigBoxPos = 0; EWRAM_DATA static bool8 sCanOnlyMove = 0; -extern void sub_80C6D80(u8 *arg0, void *arg1, u8 arg2, u8 arg3, s32 arg4); - extern const struct CompressedSpriteSheet gMonFrontPicTable[]; // This file's functions. @@ -1543,6 +1541,168 @@ static const u8 gHandCursorTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cu static const u8 gHandCursorShadowTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cursor_shadow.4bpp"); // code +void sub_80C6D80(u8 *string, void *dst, u8 arg2, u8 arg3, s32 arg4) +{ + s32 i, val, val2; + u16 windowId; + u8 txtColor[3]; + u8 *tileData1, *tileData2; + struct WindowTemplate winTemplate = {0}; + + winTemplate.width = 24; + winTemplate.height = 2; + windowId = AddWindow(&winTemplate); + FillWindowPixelBuffer(windowId, (arg3 << 4) | arg3); + tileData1 = (u8*) GetWindowAttribute(windowId, WINDOW_TILE_DATA); + tileData2 = (winTemplate.width * 32) + tileData1; + + if (!arg2) + txtColor[0] = 0; + else + txtColor[0] = arg3; + txtColor[1] = 0xF; + txtColor[2] = 0xE; + AddTextPrinterParameterized4(windowId, 1, 0, 1, 0, 0, txtColor, -1, string); + + val = arg4; + if (val > 6u) + val = 6; + val2 = arg4 - 6; + if (val > 0) + { + for (i = val; i != 0; i--) + { + CpuCopy16(tileData1, dst, 0x80); + CpuCopy16(tileData2, dst + 0x80, 0x80); + tileData1 += 0x80; + tileData2 += 0x80; + dst += 0x100; + } + } + + if (val2 > 0) + CpuFill16((arg3 << 4) | arg3, dst, (u32)(val2) * 0x100); + + RemoveWindow(windowId); +} + +NAKED +void sub_80C6EAC() +{ + 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, 0x2C\n\ + str r0, [sp, 0x20]\n\ + str r1, [sp, 0x24]\n\ + adds r6, r3, 0\n\ + ldr r0, [sp, 0x4C]\n\ + mov r9, r0\n\ + ldr r1, [sp, 0x50]\n\ + mov r10, r1\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + str r2, [sp, 0x28]\n\ + lsls r6, 24\n\ + lsrs r6, 24\n\ + mov r2, r9\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r9, r2\n\ + mov r0, r10\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + movs r0, 0\n\ + movs r1, 0\n\ + str r0, [sp, 0x18]\n\ + str r1, [sp, 0x1C]\n\ + ldr r0, [sp, 0x20]\n\ + bl StringLength_Multibyte\n\ + lsls r0, 24\n\ + ldr r2, =0x00ffffff\n\ + ldr r1, [sp, 0x18]\n\ + ands r1, r2\n\ + orrs r1, r0\n\ + str r1, [sp, 0x18]\n\ + ldr r1, =0xffffff00\n\ + add r2, sp, 0x18\n\ + mov r8, r2\n\ + ldr r0, [r2, 0x4]\n\ + ands r0, r1\n\ + movs r1, 0x2\n\ + orrs r0, r1\n\ + str r0, [r2, 0x4]\n\ + ldr r5, [sp, 0x18]\n\ + lsrs r5, 24\n\ + lsls r5, 5\n\ + mov r0, r8\n\ + bl AddWindow\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + lsls r1, r6, 4\n\ + orrs r1, r6\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + adds r0, r4, 0\n\ + bl FillWindowPixelBuffer\n\ + adds r0, r4, 0\n\ + movs r1, 0x7\n\ + bl GetWindowAttribute\n\ + adds r7, r0, 0\n\ + mov r0, r8\n\ + ldrb r0, [r0, 0x3]\n\ + lsls r0, 5\n\ + mov r8, r0\n\ + add r8, r7\n\ + add r0, sp, 0x14\n\ + movs r1, 0\n\ + strb r6, [r0]\n\ + mov r2, r9\n\ + strb r2, [r0, 0x1]\n\ + mov r2, r10\n\ + strb r2, [r0, 0x2]\n\ + str r1, [sp]\n\ + str r1, [sp, 0x4]\n\ + str r0, [sp, 0x8]\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + str r0, [sp, 0xC]\n\ + ldr r0, [sp, 0x20]\n\ + str r0, [sp, 0x10]\n\ + adds r0, r4, 0\n\ + movs r1, 0x1\n\ + movs r2, 0\n\ + movs r3, 0x2\n\ + bl AddTextPrinterParameterized4\n\ + lsrs r5, 1\n\ + adds r0, r7, 0\n\ + ldr r1, [sp, 0x24]\n\ + adds r2, r5, 0\n\ + bl CpuSet\n\ + ldr r2, [sp, 0x24]\n\ + ldr r0, [sp, 0x28]\n\ + adds r1, r2, r0\n\ + mov r0, r8\n\ + adds r2, r5, 0\n\ + bl CpuSet\n\ + adds r0, r4, 0\n\ + bl RemoveWindow\n\ + add sp, 0x2C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool"); +} + u8 CountMonsInBox(u8 boxId) { u16 i, count; diff --git a/src/trainer_card.c b/src/trainer_card.c index e4b9c5edf..b7bd5cc1d 100755 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -167,7 +167,6 @@ static bool8 sub_80C4C84(struct Task* task); static bool8 sub_80C4DB0(struct Task* task); static void sub_80C32EC(u16); static void sub_80C41D8(void); -static void sub_80C6D80(const u8 *, u8 *, u8, u8, u8); // const rom data static const u32 gUnknown_0856F018[] = INCBIN_U32("graphics/trainer_card/stickers_fr.4bpp.lz"); -- cgit v1.2.3 From 01c3f3fc059b01b17ae7ceb0168be76617e1714d Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 26 Jan 2019 20:56:06 +0100 Subject: Document all of frontier pass --- src/frontier_pass.c | 1052 ++++++++++++++++++++++++++++-------------- src/pokemon_storage_system.c | 138 +----- src/string_util.c | 2 +- src/trade.c | 3 +- 4 files changed, 723 insertions(+), 472 deletions(-) (limited to 'src') diff --git a/src/frontier_pass.c b/src/frontier_pass.c index f9d56a272..a0f6af73c 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -2,6 +2,7 @@ #include "gpu_regs.h" #include "main.h" #include "trainer_card.h" +#include "battle_anim.h" #include "event_data.h" #include "recorded_battle.h" #include "alloc.h" @@ -41,6 +42,15 @@ enum WINDOW_COUNT }; +// Windows displayed in the facilities map view. +enum +{ + MAP_WINDOW_0, + MAP_WINDOW_NAME, + MAP_WINDOW_DESCRIPTION, + MAP_WINDOW_COUNT +}; + enum { CURSOR_AREA_NOTHING, @@ -91,42 +101,425 @@ struct FrontierPassSaved s16 cursorY; }; -extern struct FrontierPassData *gUnknown_02039CEC; -extern struct FrontierPassGfx *gUnknown_02039CF0; -extern struct FrontierPassSaved gUnknown_02039CF8; +struct FrontierMapData +{ + void (*callback)(void); + struct Sprite *cursorSprite; + struct Sprite *playerHeadSprite; + struct Sprite *mapIndicatorSprite; + u8 cursorPos; + u8 unused; + u8 tilemapBuff0[0x1000]; + u8 tilemapBuff1[0x1000]; + u8 tilemapBuff2[0x1000]; +}; + +static EWRAM_DATA struct FrontierPassData *sPassData = NULL; +static EWRAM_DATA struct FrontierPassGfx *sPassGfx = NULL; +static EWRAM_DATA struct FrontierMapData *sMapData = NULL; +static EWRAM_DATA struct FrontierPassSaved sSavedPassData = {0}; // This file's functions. -u32 AllocateFrontierPassData(void (*callback)(void)); -void ShowFrontierMap(void (*callback)(void)); -void CB2_InitFrontierPass(void); -void sub_80C629C(void); -void FreeCursorAndSymbolSprites(void); -void LoadCursorAndSymbolSprites(void); -u32 FreeFrontierPassData(void); -bool32 InitFrontierPass(void); -bool32 HideFrontierPass(void); -void Task_HandleFrontierPassInput(u8 taskId); -void Task_DoFadeEffect(u8 taskId); -void sub_80C6104(u8 cursorArea, u8 previousCursorArea); -void PrintAreaDescription(u8 cursorArea); -void sub_80C5F58(bool8 arg0, bool8 arg1); +static u32 AllocateFrontierPassData(void (*callback)(void)); +static void ShowFrontierMap(void (*callback)(void)); +static void CB2_InitFrontierPass(void); +static void sub_80C629C(void); +static void FreeCursorAndSymbolSprites(void); +static void LoadCursorAndSymbolSprites(void); +static u32 FreeFrontierPassData(void); +static bool32 InitFrontierPass(void); +static bool32 HideFrontierPass(void); +static void Task_HandleFrontierPassInput(u8 taskId); +static void Task_DoFadeEffect(u8 taskId); +static void sub_80C6104(u8 cursorArea, u8 previousCursorArea); +static void PrintAreaDescription(u8 cursorArea); +static void sub_80C5F58(bool8 arg0, bool8 arg1); +static void SpriteCb_Dummy(struct Sprite *sprite); // Const rom data. -extern const s16 gUnknown_085713E0[][2]; -extern const struct BgTemplate gUnknown_085713E8[3]; -extern const struct WindowTemplate gUnknown_08571400[]; -extern const u32 gUnknown_085712F8[]; -extern const u32 gUnknown_085712C0[]; -extern const u32 gUnknown_08571060[]; -extern const u8 gUnknown_08571448[][3]; -extern const u8 *const gUnknown_08571614[]; -extern const struct SpritePalette gUnknown_085714E4[]; -extern const struct CompressedSpriteSheet gUnknown_085714BC[]; -extern const struct SpriteTemplate gUnknown_085715B4[2]; -extern const struct SpriteTemplate gUnknown_085715E4; +static const u16 sMaleHeadPalette[] = INCBIN_U16("graphics/frontier_pass/map_heads.gbapal"); +static const u16 sFemaleHeadPalette[] = INCBIN_U16("graphics/frontier_pass/map_heads_female.gbapal"); +static const u32 gUnknown_0856FBBC[] = INCBIN_U32("graphics/frontier_pass/map_screen.4bpp.lz"); +static const u32 sCursorGfx[] = INCBIN_U32("graphics/frontier_pass/cursor.4bpp.lz"); +static const u32 sHeadsGfx[] = INCBIN_U32("graphics/frontier_pass/map_heads.4bpp.lz"); +static const u32 sMapCursorGfx[] = INCBIN_U32("graphics/frontier_pass/map_cursor.4bpp.lz"); +static const u32 gUnknown_08570E00[] = INCBIN_U32("graphics/frontier_pass/map_screen.bin.lz"); +static const u32 gUnknown_08571060[] = INCBIN_U32("graphics/frontier_pass/small_map_and_card.bin.lz"); +static const u32 gUnknown_08571298[] = INCBIN_U32("graphics/frontier_pass/unknown_571298.bin"); +static const u32 gUnknown_085712C0[] = INCBIN_U32("graphics/frontier_pass/record_frame.bin.lz"); +static const u32 gUnknown_085712F8[] = INCBIN_U32("graphics/frontier_pass/small_map_and_card_affine.bin.lz"); + +static const s16 gUnknown_085713E0[][2] = {{216, 32}, {216, 128}}; + +static const struct BgTemplate sPassBgTemplates[] = +{ + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 29, + .screenSize = 1, + .paletteMode = 1, + .priority = 0, + .baseTile = 0 + }, +}; + +static const struct BgTemplate sMapBgTemplates[] = +{ + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, +}; + +static const struct WindowTemplate sPassWindowTemplates[] = +{ + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 3, + .width = 12, + .height = 3, + .paletteNum = 15, + .baseBlock = 0x1, + }, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 10, + .width = 12, + .height = 3, + .paletteNum = 15, + .baseBlock = 0x26, + }, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 13, + .width = 12, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x4B, + }, + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 18, + .width = 30, + .height = 3, + .paletteNum = 15, + .baseBlock = 0x7C, + }, + DUMMY_WIN_TEMPLATE +}; + +static const struct WindowTemplate sMapWindowTemplates[] = +{ + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 1, + .width = 15, + .height = 5, + .paletteNum = 15, + .baseBlock = 0x1, + }, + { + .bg = 0, + .tilemapLeft = 20, + .tilemapTop = 1, + .width = 10, + .height = 14, + .paletteNum = 15, + .baseBlock = 0x4D, + }, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 16, + .width = 26, + .height = 4, + .paletteNum = 15, + .baseBlock = 0xDA, + }, + DUMMY_WIN_TEMPLATE +}; + +static const u8 sTextColors[][3] = +{ + {0, 2, 3}, + {0, 1, 9}, + {0, 4, 5}, +}; + +struct +{ + s16 yStart; + s16 yEnd; + s16 xStart; + s16 xEnd; +} +static const sPassAreasLayout[] = +{ + {28, 76, 132, 220}, + {84, 132, 132, 220}, + {80, 102, 20, 108}, + {0, 16, 152, 240}, + {108, 134, 20, 108}, + {24, 48, 20, 108}, + {50, 66, 20, 36}, + {66, 82, 32, 48}, + {50, 66, 44, 60}, + {66, 82, 56, 72}, + {50, 66, 68, 84}, + {66, 82, 80, 96}, + {50, 66, 92, 108}, +}; + +static const struct CompressedSpriteSheet sCursorSpriteSheets[] = +{ + {sCursorGfx, 0x100, 0}, + {sMapCursorGfx, 0x400, 1}, + {gFrontierPassMedals_Gfx, 0x380, 2}, +}; + +static const struct CompressedSpriteSheet sHeadsSpriteSheet[] = +{ + {sHeadsGfx, 0x100, 4}, + {} +}; + +static const struct SpritePalette sSpritePalettes[] = +{ + {gFrontierPassCursor_Pal, 0}, + {gFrontierPassMapCursor_Pal, 1}, + {gFrontierPassMedalsSilver_Pal, 2}, + {gFrontierPassMedalsGold_Pal, 3}, + {sMaleHeadPalette, 4}, + {sFemaleHeadPalette, 5}, + {} +}; + +static const union AnimCmd sSpriteAnim_857151C[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_8571524[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_857152C[] = +{ + ANIMCMD_FRAME(4, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_8571534[] = +{ + ANIMCMD_FRAME(8, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_857153C[] = +{ + ANIMCMD_FRAME(12, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_8571544[] = +{ + ANIMCMD_FRAME(16, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_857154C[] = +{ + ANIMCMD_FRAME(20, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_8571554[] = +{ + ANIMCMD_FRAME(24, 0), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_857155C[] = +{ + ANIMCMD_FRAME(0, 45), + ANIMCMD_FRAME(8, 45), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_8571568[] = +{ + ANIMCMD_FRAME(16, 45), + ANIMCMD_FRAME(24, 45), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sSpriteAnimTable_8571574[] = +{ + sSpriteAnim_8571524, + sSpriteAnim_857152C +}; + +static const union AnimCmd *const sSpriteAnimTable_857157C[] = +{ + sSpriteAnim_8571524, + sSpriteAnim_857152C, + sSpriteAnim_8571534, + sSpriteAnim_857153C, + sSpriteAnim_8571544, + sSpriteAnim_857154C, + sSpriteAnim_8571554 +}; + +static const union AnimCmd *const sSpriteAnimTable_8571598[] = +{ + sSpriteAnim_857155C, + sSpriteAnim_8571568 +}; + +static const union AffineAnimCmd sSpriteAffineAnim_85715A0[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_85715B0[] = +{ + sSpriteAffineAnim_85715A0 +}; + +static const struct SpriteTemplate sSpriteTemplates_Cursors[] = +{ + { + .tileTag = 0, + .paletteTag = 0, + .oam = &gUnknown_0852490C, + .anims = sSpriteAnimTable_8571574, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 1, + .paletteTag = 1, + .oam = &gUnknown_08524934, + .anims = sSpriteAnimTable_8571598, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, +}; + +static const struct SpriteTemplate sSpriteTemplate_Medal = +{ + .tileTag = 2, + .paletteTag = 2, + .oam = &gUnknown_0852490C, + .anims = sSpriteAnimTable_857157C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate sSpriteTemplate_Head = +{ + .tileTag = 4, + .paletteTag = 4, + .oam = &gUnknown_0852490C, + .anims = sSpriteAnimTable_8571574, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCb_Dummy, +}; + +static const u8 *const sPassAreaDescriptions[] = +{ + gUnknown_085EDA96, + gUnknown_085ED932, + gUnknown_085ED94D, + gUnknown_085ED961, + gUnknown_085ED977, + gUnknown_085ED993, + gUnknown_085ED9AF, + gUnknown_085ED9C7, + gUnknown_085ED9E5, + gUnknown_085EDA02, + gUnknown_085EDA21, + gUnknown_085EDA3C, + gUnknown_085EDA5E, + gUnknown_085EDA78, + gUnknown_085ED931, +}; + +struct +{ + const u8 *name; + const u8 *description; + s16 x; + s16 y; + u8 animNum; +} static const sMapLandmarks[] = +{ + {gUnknown_085EDAB1, gUnknown_085EDB0F, 0x59, 0x28, 1}, + {gUnknown_085EDABE, gUnknown_085EDB4E, 0x21, 0x2A, 1}, + {gUnknown_085EDACA, gUnknown_085EDB8B, 0x78, 0x56, 0}, + {gUnknown_085EDAD8, gUnknown_085EDBC2, 0x72, 0x3B, 0}, + {gUnknown_085EDAE5, gUnknown_085EDC00, 0x19, 0x43, 0}, + {gUnknown_085EDAF4, gUnknown_085EDC45, 0x39, 0x39, 1}, + {gUnknown_085EDB00, gUnknown_085EDC84, 0x86, 0x29, 1}, +}; // code -void sub_80C50D0(void) +static void ResetGpuRegsAndBgs(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); SetGpuReg(REG_OFFSET_BG3CNT, 0); @@ -160,102 +553,102 @@ void ShowFrontierPass(void (*callback)(void)) SetMainCallback2(CB2_InitFrontierPass); } -void LeaveFrontierPass(void) +static void LeaveFrontierPass(void) { - SetMainCallback2(gUnknown_02039CEC->callback); + SetMainCallback2(sPassData->callback); FreeFrontierPassData(); } -u32 AllocateFrontierPassData(void (*callback)(void)) +static u32 AllocateFrontierPassData(void (*callback)(void)) { u8 i; - if (gUnknown_02039CEC != NULL) + if (sPassData != NULL) return 1; - gUnknown_02039CEC = AllocZeroed(sizeof(*gUnknown_02039CEC)); - if (gUnknown_02039CEC == NULL) + sPassData = AllocZeroed(sizeof(*sPassData)); + if (sPassData == NULL) return 2; - gUnknown_02039CEC->callback = callback; + sPassData->callback = callback; i = GetCurrentRegionMapSectionId(); if (i != MAPSEC_BATTLE_FRONTIER && i != MAPSEC_ARTISAN_CAVE) { - gUnknown_02039CEC->cursorX = 176; - gUnknown_02039CEC->cursorY = 104; + sPassData->cursorX = 176; + sPassData->cursorY = 104; } else { - gUnknown_02039CEC->cursorX = 176; - gUnknown_02039CEC->cursorY = 48; + sPassData->cursorX = 176; + sPassData->cursorY = 48; } - gUnknown_02039CEC->battlePoints = gSaveBlock2Ptr->frontier.battlePoints; - gUnknown_02039CEC->hasBattleRecord = CanCopyRecordedBattleSaveData(); - gUnknown_02039CEC->unkE = 0; - gUnknown_02039CEC->trainerStars = CountPlayerTrainerStars(); + sPassData->battlePoints = gSaveBlock2Ptr->frontier.battlePoints; + sPassData->hasBattleRecord = CanCopyRecordedBattleSaveData(); + sPassData->unkE = 0; + sPassData->trainerStars = CountPlayerTrainerStars(); for (i = 0; i < 7; i++) { if (FlagGet(FLAG_SYS_TOWER_SILVER + i * 2)) - gUnknown_02039CEC->facilitySymbols[i]++; + sPassData->facilitySymbols[i]++; if (FlagGet(FLAG_SYS_TOWER_GOLD + i * 2)) - gUnknown_02039CEC->facilitySymbols[i]++; + sPassData->facilitySymbols[i]++; } return 0; } -u32 FreeFrontierPassData(void) +static u32 FreeFrontierPassData(void) { - if (gUnknown_02039CEC == NULL) + if (sPassData == NULL) return 1; - memset(gUnknown_02039CEC, 0, sizeof(*gUnknown_02039CEC)); // Why clear data, if it's going to be freed anyway? - FREE_AND_SET_NULL(gUnknown_02039CEC); + memset(sPassData, 0, sizeof(*sPassData)); // Why clear data, if it's going to be freed anyway? + FREE_AND_SET_NULL(sPassData); return 0; } -u32 AllocateFrontierPassGfx(void) +static u32 AllocateFrontierPassGfx(void) { - if (gUnknown_02039CF0 != NULL) + if (sPassGfx != NULL) return 1; - gUnknown_02039CF0 = AllocZeroed(sizeof(*gUnknown_02039CF0)); - if (gUnknown_02039CF0 == NULL) + sPassGfx = AllocZeroed(sizeof(*sPassGfx)); + if (sPassGfx == NULL) return 2; return 0; } -u32 FreeFrontierPassGfx(void) +static u32 FreeFrontierPassGfx(void) { FreeAllWindowBuffers(); - if (gUnknown_02039CF0 == NULL) + if (sPassGfx == NULL) return 1; - if (gUnknown_02039CF0->unk28 != NULL) - FREE_AND_SET_NULL(gUnknown_02039CF0->unk28); - if (gUnknown_02039CF0->unk24 != NULL) - FREE_AND_SET_NULL(gUnknown_02039CF0->unk24); - if (gUnknown_02039CF0->unk20 != NULL) - FREE_AND_SET_NULL(gUnknown_02039CF0->unk20); + if (sPassGfx->unk28 != NULL) + FREE_AND_SET_NULL(sPassGfx->unk28); + if (sPassGfx->unk24 != NULL) + FREE_AND_SET_NULL(sPassGfx->unk24); + if (sPassGfx->unk20 != NULL) + FREE_AND_SET_NULL(sPassGfx->unk20); - memset(gUnknown_02039CF0, 0, sizeof(*gUnknown_02039CF0)); // Why clear data, if it's going to be freed anyway? - FREE_AND_SET_NULL(gUnknown_02039CF0); + memset(sPassGfx, 0, sizeof(*sPassGfx)); // Why clear data, if it's going to be freed anyway? + FREE_AND_SET_NULL(sPassGfx); return 0; } -void VblankCb_FrontierPass(void) +static void VblankCb_FrontierPass(void) { - if (gUnknown_02039CF0->setAffine) + if (sPassGfx->setAffine) { SetBgAffine(2, - gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][0] << 8, - gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][1] << 8, - gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][0], - gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][1], - gUnknown_02039CF0->unk2E, - gUnknown_02039CF0->unk30, + gUnknown_085713E0[sPassData->unkE - 1][0] << 8, + gUnknown_085713E0[sPassData->unkE - 1][1] << 8, + gUnknown_085713E0[sPassData->unkE - 1][0], + gUnknown_085713E0[sPassData->unkE - 1][1], + sPassGfx->unk2E, + sPassGfx->unk30, 0); } LoadOam(); @@ -263,14 +656,14 @@ void VblankCb_FrontierPass(void) TransferPlttBuffer(); } -void CB2_FrontierPass(void) +static void CB2_FrontierPass(void) { RunTasks(); AnimateSprites(); BuildOamBuffer(); } -void CB2_InitFrontierPass(void) +static void CB2_InitFrontierPass(void) { if (InitFrontierPass()) { @@ -279,7 +672,7 @@ void CB2_InitFrontierPass(void) } } -void CB2_HideFrontierPass(void) +static void CB2_HideFrontierPass(void) { if (HideFrontierPass()) { @@ -287,11 +680,11 @@ void CB2_HideFrontierPass(void) } } -bool32 InitFrontierPass(void) +static bool32 InitFrontierPass(void) { u32 sizeOut = 0; - switch (gUnknown_02039CEC->state) + switch (sPassData->state) { case 0: SetVBlankCallback(NULL); @@ -300,7 +693,7 @@ bool32 InitFrontierPass(void) DisableInterrupts(INTR_FLAG_HBLANK); break; case 1: - sub_80C50D0(); + ResetGpuRegsAndBgs(); break; case 2: ResetTasks(); @@ -314,20 +707,20 @@ bool32 InitFrontierPass(void) break; case 4: ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(1, gUnknown_085713E8, ARRAY_COUNT(gUnknown_085713E8)); - SetBgTilemapBuffer(1, gUnknown_02039CF0->tilemapBuff1); - SetBgTilemapBuffer(2, gUnknown_02039CF0->tilemapBuff2); - SetBgTilemapBuffer(3, gUnknown_02039CF0->tilemapBuff3); + InitBgsFromTemplates(1, sPassBgTemplates, ARRAY_COUNT(sPassBgTemplates)); + SetBgTilemapBuffer(1, sPassGfx->tilemapBuff1); + SetBgTilemapBuffer(2, sPassGfx->tilemapBuff2); + SetBgTilemapBuffer(3, sPassGfx->tilemapBuff3); SetBgAttribute(2, BG_ATTR_WRAPAROUND, 1); break; case 5: - InitWindows(gUnknown_08571400); + InitWindows(sPassWindowTemplates); DeactivateAllTextPrinters(); break; case 6: - gUnknown_02039CF0->unk20 = malloc_and_decompress(gUnknown_085712F8, &sizeOut); - gUnknown_02039CF0->unk24 = malloc_and_decompress(gUnknown_08571060, &sizeOut); - gUnknown_02039CF0->unk28 = malloc_and_decompress(gUnknown_085712C0, &sizeOut); + sPassGfx->unk20 = malloc_and_decompress(gUnknown_085712F8, &sizeOut); + sPassGfx->unk24 = malloc_and_decompress(gUnknown_08571060, &sizeOut); + sPassGfx->unk28 = malloc_and_decompress(gUnknown_085712C0, &sizeOut); decompress_and_copy_tile_data_to_vram(1, gUnknown_08DE08C8, 0, 0, 0); decompress_and_copy_tile_data_to_vram(2, gUnknown_08DE2084, 0, 0, 0); break; @@ -343,13 +736,13 @@ bool32 InitFrontierPass(void) break; case 8: LoadPalette(gUnknown_08DE07C8[0], 0, 0x1A0); - LoadPalette(gUnknown_08DE07C8[1 + gUnknown_02039CEC->trainerStars], 0x10, 0x20); + LoadPalette(gUnknown_08DE07C8[1 + sPassData->trainerStars], 0x10, 0x20); LoadPalette(stdpal_get(0), 0xF0, 0x20); sub_80C629C(); - sub_80C6104(gUnknown_02039CEC->cursorArea, gUnknown_02039CEC->previousCursorArea); - if (gUnknown_02039CEC->unkE == 1 || gUnknown_02039CEC->unkE == 2) + sub_80C6104(sPassData->cursorArea, sPassData->previousCursorArea); + if (sPassData->unkE == 1 || sPassData->unkE == 2) { - gUnknown_02039CEC->state = 0; + sPassData->state = 0; return TRUE; } break; @@ -369,26 +762,26 @@ bool32 InitFrontierPass(void) if (UpdatePaletteFade()) return FALSE; - gUnknown_02039CEC->state = 0; + sPassData->state = 0; return TRUE; } - gUnknown_02039CEC->state++; + sPassData->state++; return FALSE; } -bool32 HideFrontierPass(void) +static bool32 HideFrontierPass(void) { - switch (gUnknown_02039CEC->state) + switch (sPassData->state) { case 0: - if (gUnknown_02039CEC->unkE != 1 && gUnknown_02039CEC->unkE != 2) + if (sPassData->unkE != 1 && sPassData->unkE != 2) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); } else { - gUnknown_02039CEC->state = 2; + sPassData->state = 2; return FALSE; } break; @@ -409,7 +802,7 @@ bool32 HideFrontierPass(void) FreeCursorAndSymbolSprites(); break; case 4: - sub_80C50D0(); + ResetGpuRegsAndBgs(); ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); @@ -419,34 +812,25 @@ bool32 HideFrontierPass(void) UnsetBgTilemapBuffer(1); UnsetBgTilemapBuffer(2); FreeFrontierPassGfx(); - gUnknown_02039CEC->state = 0; + sPassData->state = 0; return TRUE; } - gUnknown_02039CEC->state++; + sPassData->state++; return FALSE; } -struct -{ - s16 yStart; - s16 yEnd; - s16 xStart; - s16 xEnd; -} -extern const gUnknown_08571454[]; - -u8 GetCursorAreaFromCoords(s16 x, s16 y) +static u8 GetCursorAreaFromCoords(s16 x, s16 y) { u8 i; // Minus/Plus 1, because the table doesn't take into account the nothing field. for (i = 0; i < CURSOR_AREA_COUNT - 1; i++) { - if (gUnknown_08571454[i].yStart <= y && gUnknown_08571454[i].yEnd >= y - && gUnknown_08571454[i].xStart <= x && gUnknown_08571454[i].xEnd >= x) + if (sPassAreasLayout[i].yStart <= y && sPassAreasLayout[i].yEnd >= y + && sPassAreasLayout[i].xStart <= x && sPassAreasLayout[i].xEnd >= x) { - if (i >= CURSOR_AREA_SYMBOL - 1 && gUnknown_02039CEC->facilitySymbols[i - CURSOR_AREA_SYMBOL + 1] == 0) + if (i >= CURSOR_AREA_SYMBOL - 1 && sPassData->facilitySymbols[i - CURSOR_AREA_SYMBOL + 1] == 0) break; return i + 1; @@ -463,7 +847,7 @@ void CB2_ReshowFrontierPass(void) if (!InitFrontierPass()) return; - switch (gUnknown_02039CEC->unkE) + switch (sPassData->unkE) { case 1: case 2: @@ -472,7 +856,7 @@ void CB2_ReshowFrontierPass(void) break; case 3: default: - gUnknown_02039CEC->unkE = 0; + sPassData->unkE = 0; taskId = CreateTask(Task_HandleFrontierPassInput, 0); break; } @@ -480,12 +864,12 @@ void CB2_ReshowFrontierPass(void) SetMainCallback2(CB2_FrontierPass); } -void CB2_ReturnFromRecord(void) +static void CB2_ReturnFromRecord(void) { - AllocateFrontierPassData(gUnknown_02039CF8.callback); - gUnknown_02039CEC->cursorX = gUnknown_02039CF8.cursorX; - gUnknown_02039CEC->cursorY = gUnknown_02039CF8.cursorY; - memset(&gUnknown_02039CF8, 0, sizeof(gUnknown_02039CF8)); + AllocateFrontierPassData(sSavedPassData.callback); + sPassData->cursorX = sSavedPassData.cursorX; + sPassData->cursorY = sSavedPassData.cursorY; + memset(&sSavedPassData, 0, sizeof(sSavedPassData)); switch (InBattlePyramid()) { case 1: @@ -502,20 +886,20 @@ void CB2_ReturnFromRecord(void) SetMainCallback2(CB2_ReshowFrontierPass); } -void CB2_ShowFrontierPassFeature(void) +static void CB2_ShowFrontierPassFeature(void) { if (!HideFrontierPass()) return; - switch (gUnknown_02039CEC->unkE) + switch (sPassData->unkE) { case 1: ShowFrontierMap(CB2_ReshowFrontierPass); break; case 3: - gUnknown_02039CF8.callback = gUnknown_02039CEC->callback; - gUnknown_02039CF8.cursorX = gUnknown_02039CEC->cursorX; - gUnknown_02039CF8.cursorY = gUnknown_02039CEC->cursorY; + sSavedPassData.callback = sPassData->callback; + sSavedPassData.cursorX = sPassData->cursorX; + sSavedPassData.cursorY = sPassData->cursorY; FreeFrontierPassData(); PlayRecordedBattle(CB2_ReturnFromRecord); break; @@ -525,20 +909,20 @@ void CB2_ShowFrontierPassFeature(void) } } -bool32 TryCallPassAreaFunction(u8 taskId, u8 cursorArea) +static bool32 TryCallPassAreaFunction(u8 taskId, u8 cursorArea) { switch (cursorArea) { case CURSOR_AREA_RECORD: - if (!gUnknown_02039CEC->hasBattleRecord) + if (!sPassData->hasBattleRecord) return FALSE; - gUnknown_02039CEC->unkE = 3; + sPassData->unkE = 3; DestroyTask(taskId); SetMainCallback2(CB2_ShowFrontierPassFeature); break; case CURSOR_AREA_MAP: case CURSOR_AREA_CARD: - gUnknown_02039CEC->unkE = cursorArea; + sPassData->unkE = cursorArea; gTasks[taskId].func = Task_DoFadeEffect; gTasks[taskId].data[0] = FALSE; break; @@ -546,56 +930,56 @@ bool32 TryCallPassAreaFunction(u8 taskId, u8 cursorArea) return FALSE; } - gUnknown_02039CEC->cursorX = gUnknown_02039CF0->cursorSprite->pos1.x; - gUnknown_02039CEC->cursorY = gUnknown_02039CF0->cursorSprite->pos1.y; + sPassData->cursorX = sPassGfx->cursorSprite->pos1.x; + sPassData->cursorY = sPassGfx->cursorSprite->pos1.y; return TRUE; } -void Task_HandleFrontierPassInput(u8 taskId) +static void Task_HandleFrontierPassInput(u8 taskId) { u8 var = FALSE; // Reused, first informs whether the cursor moves, then used as the new cursor area. - if (gMain.heldKeys & DPAD_UP && gUnknown_02039CF0->cursorSprite->pos1.y >= 9) + if (gMain.heldKeys & DPAD_UP && sPassGfx->cursorSprite->pos1.y >= 9) { - gUnknown_02039CF0->cursorSprite->pos1.y -= 2; - if (gUnknown_02039CF0->cursorSprite->pos1.y <= 7) - gUnknown_02039CF0->cursorSprite->pos1.y = 2; + sPassGfx->cursorSprite->pos1.y -= 2; + if (sPassGfx->cursorSprite->pos1.y <= 7) + sPassGfx->cursorSprite->pos1.y = 2; var = TRUE; } - if (gMain.heldKeys & DPAD_DOWN && gUnknown_02039CF0->cursorSprite->pos1.y <= 135) + if (gMain.heldKeys & DPAD_DOWN && sPassGfx->cursorSprite->pos1.y <= 135) { - gUnknown_02039CF0->cursorSprite->pos1.y += 2; - if (gUnknown_02039CF0->cursorSprite->pos1.y >= 137) - gUnknown_02039CF0->cursorSprite->pos1.y = 136; + sPassGfx->cursorSprite->pos1.y += 2; + if (sPassGfx->cursorSprite->pos1.y >= 137) + sPassGfx->cursorSprite->pos1.y = 136; var = TRUE; } - if (gMain.heldKeys & DPAD_LEFT && gUnknown_02039CF0->cursorSprite->pos1.x >= 6) + if (gMain.heldKeys & DPAD_LEFT && sPassGfx->cursorSprite->pos1.x >= 6) { - gUnknown_02039CF0->cursorSprite->pos1.x -= 2; - if (gUnknown_02039CF0->cursorSprite->pos1.x <= 4) - gUnknown_02039CF0->cursorSprite->pos1.x = 5; + sPassGfx->cursorSprite->pos1.x -= 2; + if (sPassGfx->cursorSprite->pos1.x <= 4) + sPassGfx->cursorSprite->pos1.x = 5; var = TRUE; } - if (gMain.heldKeys & DPAD_RIGHT && gUnknown_02039CF0->cursorSprite->pos1.x <= 231) + if (gMain.heldKeys & DPAD_RIGHT && sPassGfx->cursorSprite->pos1.x <= 231) { - gUnknown_02039CF0->cursorSprite->pos1.x += 2; - if (gUnknown_02039CF0->cursorSprite->pos1.x >= 233) - gUnknown_02039CF0->cursorSprite->pos1.x = 232; + sPassGfx->cursorSprite->pos1.x += 2; + if (sPassGfx->cursorSprite->pos1.x >= 233) + sPassGfx->cursorSprite->pos1.x = 232; var = TRUE; } if (!var) // Cursor did not change. { - if (gUnknown_02039CEC->cursorArea != CURSOR_AREA_NOTHING && gMain.newKeys & A_BUTTON) + if (sPassData->cursorArea != CURSOR_AREA_NOTHING && gMain.newKeys & A_BUTTON) { - if (gUnknown_02039CEC->cursorArea <= CURSOR_AREA_RECORD) // Map, Card, Record + if (sPassData->cursorArea <= CURSOR_AREA_RECORD) // Map, Card, Record { PlaySE(SE_SELECT); - if (TryCallPassAreaFunction(taskId, gUnknown_02039CEC->cursorArea)) + if (TryCallPassAreaFunction(taskId, sPassData->cursorArea)) return; } - else if (gUnknown_02039CEC->cursorArea == CURSOR_AREA_CANCEL) + else if (sPassData->cursorArea == CURSOR_AREA_CANCEL) { PlaySE(SE_PC_OFF); SetMainCallback2(CB2_HideFrontierPass); @@ -613,22 +997,22 @@ void Task_HandleFrontierPassInput(u8 taskId) } else { - var = GetCursorAreaFromCoords(gUnknown_02039CF0->cursorSprite->pos1.x - 5, gUnknown_02039CF0->cursorSprite->pos1.y + 5); - if (gUnknown_02039CEC->cursorArea != var) + var = GetCursorAreaFromCoords(sPassGfx->cursorSprite->pos1.x - 5, sPassGfx->cursorSprite->pos1.y + 5); + if (sPassData->cursorArea != var) { PrintAreaDescription(var); - gUnknown_02039CEC->previousCursorArea = gUnknown_02039CEC->cursorArea; - gUnknown_02039CEC->cursorArea = var; - sub_80C6104(gUnknown_02039CEC->cursorArea, gUnknown_02039CEC->previousCursorArea); + sPassData->previousCursorArea = sPassData->cursorArea; + sPassData->cursorArea = var; + sub_80C6104(sPassData->cursorArea, sPassData->previousCursorArea); } } } -void Task_DoFadeEffect(u8 taskId) +static void Task_DoFadeEffect(u8 taskId) { s16 *data = gTasks[taskId].data; - switch (gUnknown_02039CEC->state) + switch (sPassData->state) { case 0: if (!data[0]) @@ -655,16 +1039,16 @@ void Task_DoFadeEffect(u8 taskId) BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_WHITE); } - gUnknown_02039CF0->setAffine = TRUE; - gUnknown_02039CF0->unk2E = sub_8151624(data[1]); - gUnknown_02039CF0->unk30 = sub_8151624(data[2]); + sPassGfx->setAffine = TRUE; + sPassGfx->unk2E = sub_8151624(data[1]); + sPassGfx->unk30 = sub_8151624(data[2]); break; case 1: UpdatePaletteFade(); data[1] += data[3]; data[2] += data[4]; - gUnknown_02039CF0->unk2E = sub_8151624(data[1]); - gUnknown_02039CF0->unk30 = sub_8151624(data[2]); + sPassGfx->unk2E = sub_8151624(data[1]); + sPassGfx->unk30 = sub_8151624(data[2]); if (!data[0]) { if (data[1] <= 0x1FC) @@ -677,8 +1061,8 @@ void Task_DoFadeEffect(u8 taskId) } break; case 2: - if (gUnknown_02039CF0->setAffine) // Nonsensical check. - gUnknown_02039CF0->setAffine = FALSE; + if (sPassGfx->setAffine) // Nonsensical check. + sPassGfx->setAffine = FALSE; if (UpdatePaletteFade()) return; if (!data[0]) @@ -689,18 +1073,18 @@ void Task_DoFadeEffect(u8 taskId) else { sub_80C5F58(FALSE, FALSE); - gUnknown_02039CEC->unkE = 0; + sPassData->unkE = 0; gTasks[taskId].func = Task_HandleFrontierPassInput; } SetBgAttribute(2, BG_ATTR_WRAPAROUND, 0); - gUnknown_02039CEC->state = 0; + sPassData->state = 0; return; } - gUnknown_02039CEC->state++; + sPassData->state++; } -void ShowAndPrintWindows(void) +static void ShowAndPrintWindows(void) { s32 x; u8 i; @@ -712,19 +1096,19 @@ void ShowAndPrintWindows(void) } x = GetStringCenterAlignXOffset(1, gText_SymbolsEarned, 0x60); - AddTextPrinterParameterized3(WINDOW_EARNED_SYMBOLS, 1, x, 5, gUnknown_08571448[0], 0, gText_SymbolsEarned); + AddTextPrinterParameterized3(WINDOW_EARNED_SYMBOLS, 1, x, 5, sTextColors[0], 0, gText_SymbolsEarned); x = GetStringCenterAlignXOffset(1, gText_BattleRecord, 0x60); - AddTextPrinterParameterized3(WINDOW_BATTLE_RECORD, 1, x, 5, gUnknown_08571448[0], 0, gText_BattleRecord); + AddTextPrinterParameterized3(WINDOW_BATTLE_RECORD, 1, x, 5, sTextColors[0], 0, gText_BattleRecord); - AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, 8, 5, 4, gUnknown_08571448[0], 0, gText_BattlePoints); - ConvertIntToDecimalStringN(gStringVar4, gUnknown_02039CEC->battlePoints, STR_CONV_MODE_LEFT_ALIGN, 5); + AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, 8, 5, 4, sTextColors[0], 0, gText_BattlePoints); + ConvertIntToDecimalStringN(gStringVar4, sPassData->battlePoints, STR_CONV_MODE_LEFT_ALIGN, 5); x = GetStringRightAlignXOffset(8, gStringVar4, 0x5B); - AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, 8, x, 16, gUnknown_08571448[0], 0, gStringVar4); + AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, 8, x, 16, sTextColors[0], 0, gStringVar4); - gUnknown_02039CEC->cursorArea = GetCursorAreaFromCoords(gUnknown_02039CEC->cursorX - 5, gUnknown_02039CEC->cursorY + 5); - gUnknown_02039CEC->previousCursorArea = CURSOR_AREA_NOTHING; - PrintAreaDescription(gUnknown_02039CEC->cursorArea); + sPassData->cursorArea = GetCursorAreaFromCoords(sPassData->cursorX - 5, sPassData->cursorY + 5); + sPassData->previousCursorArea = CURSOR_AREA_NOTHING; + PrintAreaDescription(sPassData->cursorArea); for (i = 0; i < WINDOW_COUNT; i++) CopyWindowToVram(i, 3); @@ -732,31 +1116,31 @@ void ShowAndPrintWindows(void) CopyBgTilemapBufferToVram(0); } -void PrintAreaDescription(u8 cursorArea) +static void PrintAreaDescription(u8 cursorArea) { FillWindowPixelBuffer(WINDOW_DESCRIPTION, 0); - if (cursorArea == CURSOR_AREA_RECORD && !gUnknown_02039CEC->hasBattleRecord) - AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, gUnknown_08571448[1], 0, gUnknown_08571614[0]); + if (cursorArea == CURSOR_AREA_RECORD && !sPassData->hasBattleRecord) + AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, sTextColors[1], 0, sPassAreaDescriptions[0]); else if (cursorArea != CURSOR_AREA_NOTHING) - AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, gUnknown_08571448[1], 0, gUnknown_08571614[cursorArea]); + AddTextPrinterParameterized3(WINDOW_DESCRIPTION, 1, 2, 0, sTextColors[1], 0, sPassAreaDescriptions[cursorArea]); CopyWindowToVram(WINDOW_DESCRIPTION, 3); CopyBgTilemapBufferToVram(0); } -void sub_80C5F58(bool8 arg0, bool8 arg1) +static void sub_80C5F58(bool8 arg0, bool8 arg1) { - switch (gUnknown_02039CEC->unkE) + switch (sPassData->unkE) { case 1: if (arg0) - CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_02039CF0->unk20, 16, 3, 12, 7, 16); + CopyToBgTilemapBufferRect_ChangePalette(2, sPassGfx->unk20, 16, 3, 12, 7, 16); else FillBgTilemapBufferRect(2, 0, 16, 3, 12, 7, 16); break; case 2: if (arg0) - CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_02039CF0->unk20 + 84, 16, 10, 12, 7, 16); + CopyToBgTilemapBufferRect_ChangePalette(2, sPassGfx->unk20 + 84, 16, 10, 12, 7, 16); else FillBgTilemapBufferRect(2, 0, 16, 10, 12, 7, 16); break; @@ -768,10 +1152,10 @@ void sub_80C5F58(bool8 arg0, bool8 arg1) if (arg1) { SetBgAffine(2, - gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][0] << 8, - gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][1] << 8, - gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][0], - gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][1], + gUnknown_085713E0[sPassData->unkE - 1][0] << 8, + gUnknown_085713E0[sPassData->unkE - 1][1] << 8, + gUnknown_085713E0[sPassData->unkE - 1][0], + gUnknown_085713E0[sPassData->unkE - 1][1], sub_8151624(0x1FC), sub_8151624(0x1FC), 0); @@ -779,38 +1163,38 @@ void sub_80C5F58(bool8 arg0, bool8 arg1) else { SetBgAffine(2, - gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][0] << 8, - gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][1] << 8, - gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][0], - gUnknown_085713E0[gUnknown_02039CEC->unkE - 1][1], + gUnknown_085713E0[sPassData->unkE - 1][0] << 8, + gUnknown_085713E0[sPassData->unkE - 1][1] << 8, + gUnknown_085713E0[sPassData->unkE - 1][0], + gUnknown_085713E0[sPassData->unkE - 1][1], sub_8151624(0x100), sub_8151624(0x100), 0); } } -void sub_80C6104(u8 cursorArea, u8 previousCursorArea) +static void sub_80C6104(u8 cursorArea, u8 previousCursorArea) { bool32 var; switch (previousCursorArea) { case CURSOR_AREA_MAP: - CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_02039CF0->unk24, 16, 3, 12, 7, 17); + CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24, 16, 3, 12, 7, 17); var = TRUE; break; case CURSOR_AREA_CARD: - CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_02039CF0->unk24 + 336, 16, 10, 12, 7, 17); + CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24 + 336, 16, 10, 12, 7, 17); var = TRUE; break; case CURSOR_AREA_RECORD: - if (!gUnknown_02039CEC->hasBattleRecord) + if (!sPassData->hasBattleRecord) { var = FALSE; } else { - CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_02039CF0->unk28, 2, 10, 12, 3, 17); + CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk28, 2, 10, 12, 3, 17); var = TRUE; } break; @@ -832,18 +1216,18 @@ void sub_80C6104(u8 cursorArea, u8 previousCursorArea) switch (cursorArea) { case CURSOR_AREA_MAP: - CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_02039CF0->unk24 + 168, 16, 3, 12, 7, 17); + CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24 + 168, 16, 3, 12, 7, 17); var = TRUE; break; case CURSOR_AREA_CARD: - CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_02039CF0->unk24 + 504, 16, 10, 12, 7, 17); + CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk24 + 504, 16, 10, 12, 7, 17); var = TRUE; break; case CURSOR_AREA_RECORD: - if (!gUnknown_02039CEC->hasBattleRecord) + if (!sPassData->hasBattleRecord) return; - CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_02039CF0->unk28 + 72, 2, 10, 12, 3, 17); + CopyToBgTilemapBufferRect_ChangePalette(1, sPassGfx->unk28 + 72, 2, 10, 12, 3, 17); var = TRUE; break; case CURSOR_AREA_CANCEL: @@ -865,56 +1249,56 @@ void sub_80C6104(u8 cursorArea, u8 previousCursorArea) CopyBgTilemapBufferToVram(1); } -void sub_80C629C(void) +static void sub_80C629C(void) { CopyToBgTilemapBuffer(1, gUnknown_08DE3060, 0, 0); - sub_80C6104(gUnknown_02039CEC->cursorArea, gUnknown_02039CEC->previousCursorArea); - sub_80C5F58(TRUE, gUnknown_02039CEC->unkE); + sub_80C6104(sPassData->cursorArea, sPassData->previousCursorArea); + sub_80C5F58(TRUE, sPassData->unkE); ShowAndPrintWindows(); CopyBgTilemapBufferToVram(1); } -void LoadCursorAndSymbolSprites(void) +static void LoadCursorAndSymbolSprites(void) { u8 spriteId; u8 i = 0; FreeAllSpritePalettes(); ResetAffineAnimData(); - LoadSpritePalettes(gUnknown_085714E4); - LoadCompressedSpriteSheet(&gUnknown_085714BC[0]); - LoadCompressedSpriteSheet(&gUnknown_085714BC[2]); - spriteId = CreateSprite(&gUnknown_085715B4[0], gUnknown_02039CEC->cursorX, gUnknown_02039CEC->cursorY, 0); - gUnknown_02039CF0->cursorSprite = &gSprites[spriteId]; - gUnknown_02039CF0->cursorSprite->oam.priority = 0; + LoadSpritePalettes(sSpritePalettes); + LoadCompressedSpriteSheet(&sCursorSpriteSheets[0]); + LoadCompressedSpriteSheet(&sCursorSpriteSheets[2]); + spriteId = CreateSprite(&sSpriteTemplates_Cursors[0], sPassData->cursorX, sPassData->cursorY, 0); + sPassGfx->cursorSprite = &gSprites[spriteId]; + sPassGfx->cursorSprite->oam.priority = 0; for (i = 0; i < NUM_FRONTIER_FACILITIES; i++) { - if (gUnknown_02039CEC->facilitySymbols[i] != 0) + if (sPassData->facilitySymbols[i] != 0) { - struct SpriteTemplate sprite = gUnknown_085715E4; + struct SpriteTemplate sprite = sSpriteTemplate_Medal; - sprite.paletteTag += gUnknown_02039CEC->facilitySymbols[i] - 1; - spriteId = CreateSprite(&sprite, gUnknown_08571454[i + CURSOR_AREA_SYMBOL - 1].xStart + 8, gUnknown_08571454[i + CURSOR_AREA_SYMBOL - 1].yStart + 6, i + 1); - gUnknown_02039CF0->symbolSprites[i] = &gSprites[spriteId]; - gUnknown_02039CF0->symbolSprites[i]->oam.priority = 2; - StartSpriteAnim(gUnknown_02039CF0->symbolSprites[i], i); + sprite.paletteTag += sPassData->facilitySymbols[i] - 1; + spriteId = CreateSprite(&sprite, sPassAreasLayout[i + CURSOR_AREA_SYMBOL - 1].xStart + 8, sPassAreasLayout[i + CURSOR_AREA_SYMBOL - 1].yStart + 6, i + 1); + sPassGfx->symbolSprites[i] = &gSprites[spriteId]; + sPassGfx->symbolSprites[i]->oam.priority = 2; + StartSpriteAnim(sPassGfx->symbolSprites[i], i); } } } -void FreeCursorAndSymbolSprites(void) +static void FreeCursorAndSymbolSprites(void) { u8 i = 0; - DestroySprite(gUnknown_02039CF0->cursorSprite); - gUnknown_02039CF0->cursorSprite = NULL; + DestroySprite(sPassGfx->cursorSprite); + sPassGfx->cursorSprite = NULL; for (i = 0; i < NUM_FRONTIER_FACILITIES; i++) { - if (gUnknown_02039CF0->symbolSprites[i] != NULL) + if (sPassGfx->symbolSprites[i] != NULL) { - DestroySprite(gUnknown_02039CF0->symbolSprites[i]); - gUnknown_02039CF0->symbolSprites[i] = NULL; + DestroySprite(sPassGfx->symbolSprites[i]); + sPassGfx->symbolSprites[i] = NULL; } } FreeAllSpritePalettes(); @@ -922,62 +1306,42 @@ void FreeCursorAndSymbolSprites(void) FreeSpriteTilesByTag(0); } -void nullsub_39(void) +static void SpriteCb_Dummy(struct Sprite *sprite) { } // Frontier Map code. -struct FrontierMapData -{ - void (*callback)(void); - struct Sprite *cursorSprite; - struct Sprite *playerHeadSprite; - struct Sprite *mapIndicatorSprite; - u8 cursorPos; - u8 unk11; - u8 tilemapBuff0[0x1000]; - u8 tilemapBuff1[0x1000]; - u8 tilemapBuff2[0x1000]; -}; - -extern struct FrontierMapData *gUnknown_02039CF4; - // Forward declarations. -void sub_80C67BC(u8 taskId); -void sub_80C6B94(void); -void sub_80C6974(void); -void sub_80C6C70(u8 direction); - -extern const struct BgTemplate gUnknown_085713F4[3]; -extern const struct WindowTemplate gUnknown_08571428[]; -extern const u32 gUnknown_0856FBBC[]; -extern const u32 gUnknown_08570E00[]; +static void Task_HandleFrontierMap(u8 taskId); +static void PrintOnFrontierMap(void); +static void InitFrontierMapSprites(void); +static void HandleFrontierMapCursorMove(u8 direction); -void ShowFrontierMap(void (*callback)(void)) +static void ShowFrontierMap(void (*callback)(void)) { - if (gUnknown_02039CF4 != NULL) + if (sMapData != NULL) SetMainCallback2(callback); // This line doesn't make sense at all, since it gets overwritten later anyway. - gUnknown_02039CF4 = AllocZeroed(sizeof(*gUnknown_02039CF4)); - gUnknown_02039CF4->callback = callback; + sMapData = AllocZeroed(sizeof(*sMapData)); + sMapData->callback = callback; ResetTasks(); - CreateTask(sub_80C67BC, 0); + CreateTask(Task_HandleFrontierMap, 0); SetMainCallback2(CB2_FrontierPass); } -void sub_80C6498(void) +static void FreeFrontierMap(void) { ResetTasks(); - SetMainCallback2(gUnknown_02039CF4->callback); - memset(gUnknown_02039CF4, 0, sizeof(*gUnknown_02039CF4)); // Pointless memory clear. - FREE_AND_SET_NULL(gUnknown_02039CF4); + SetMainCallback2(sMapData->callback); + memset(sMapData, 0, sizeof(*sMapData)); // Pointless memory clear. + FREE_AND_SET_NULL(sMapData); } -bool32 sub_80C64CC(void) +static bool32 InitFrontierMap(void) { - switch (gUnknown_02039CEC->state) + switch (sPassData->state) { case 0: SetVBlankCallback(NULL); @@ -985,7 +1349,7 @@ bool32 sub_80C64CC(void) SetVBlankHBlankCallbacksToNull(); break; case 1: - sub_80C50D0(); + ResetGpuRegsAndBgs(); break; case 2: ResetSpriteData(); @@ -995,10 +1359,10 @@ bool32 sub_80C64CC(void) break; case 3: ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_085713F4, ARRAY_COUNT(gUnknown_085713F4)); - SetBgTilemapBuffer(0, gUnknown_02039CF4->tilemapBuff0); - SetBgTilemapBuffer(1, gUnknown_02039CF4->tilemapBuff1); - SetBgTilemapBuffer(2, gUnknown_02039CF4->tilemapBuff2); + InitBgsFromTemplates(0, sMapBgTemplates, ARRAY_COUNT(sMapBgTemplates)); + SetBgTilemapBuffer(0, sMapData->tilemapBuff0); + SetBgTilemapBuffer(1, sMapData->tilemapBuff1); + SetBgTilemapBuffer(2, sMapData->tilemapBuff2); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 30, 20); FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 30, 20); @@ -1007,9 +1371,9 @@ bool32 sub_80C64CC(void) CopyBgTilemapBufferToVram(2); break; case 4: - InitWindows(gUnknown_08571428); + InitWindows(sMapWindowTemplates); DeactivateAllTextPrinters(); - sub_80C6B94(); + PrintOnFrontierMap(); decompress_and_copy_tile_data_to_vram(1, gUnknown_0856FBBC, 0, 0, 0); break; case 5: @@ -1025,7 +1389,7 @@ bool32 sub_80C64CC(void) ShowBg(0); ShowBg(1); ShowBg(2); - sub_80C6974(); + InitFrontierMapSprites(); SetVBlankCallback(VblankCb_FrontierPass); BlendPalettes(0xFFFFFFFF, 0x10, RGB_WHITE); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_WHITE); @@ -1033,17 +1397,17 @@ bool32 sub_80C64CC(void) case 7: if (UpdatePaletteFade()) return FALSE; - gUnknown_02039CEC->state = 0; + sPassData->state = 0; return TRUE; } - gUnknown_02039CEC->state++; + sPassData->state++; return FALSE; } -bool32 sub_80C66AC(void) +static bool32 ExitFrontierMap(void) { - switch (gUnknown_02039CEC->state) + switch (sPassData->state) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_WHITE); @@ -1062,25 +1426,25 @@ bool32 sub_80C66AC(void) SetVBlankHBlankCallbacksToNull(); break; case 3: - if (gUnknown_02039CF4->cursorSprite != NULL) + if (sMapData->cursorSprite != NULL) { - DestroySprite(gUnknown_02039CF4->cursorSprite); + DestroySprite(sMapData->cursorSprite); FreeSpriteTilesByTag(0); } - if (gUnknown_02039CF4->mapIndicatorSprite != NULL) + if (sMapData->mapIndicatorSprite != NULL) { - DestroySprite(gUnknown_02039CF4->mapIndicatorSprite); + DestroySprite(sMapData->mapIndicatorSprite); FreeSpriteTilesByTag(1); } - if (gUnknown_02039CF4->playerHeadSprite != NULL) + if (sMapData->playerHeadSprite != NULL) { - DestroySprite(gUnknown_02039CF4->playerHeadSprite); + DestroySprite(sMapData->playerHeadSprite); FreeSpriteTilesByTag(4); } FreeAllWindowBuffers(); break; case 4: - sub_80C50D0(); + ResetGpuRegsAndBgs(); ResetSpriteData(); FreeAllSpritePalettes(); break; @@ -1088,22 +1452,22 @@ bool32 sub_80C66AC(void) UnsetBgTilemapBuffer(0); UnsetBgTilemapBuffer(1); UnsetBgTilemapBuffer(2); - gUnknown_02039CEC->state = 0; + sPassData->state = 0; return TRUE; } - gUnknown_02039CEC->state++; + sPassData->state++; return FALSE; } -void sub_80C67BC(u8 taskId) +static void Task_HandleFrontierMap(u8 taskId) { s16 *data = gTasks[taskId].data; switch (data[0]) { case 0: - if (sub_80C64CC()) + if (InitFrontierMap()) break; return; case 1: @@ -1114,15 +1478,15 @@ void sub_80C67BC(u8 taskId) } else if (gMain.newKeys & DPAD_DOWN) { - if (gUnknown_02039CF4->cursorPos >= NUM_FRONTIER_FACILITIES - 1) - sub_80C6C70(0); + if (sMapData->cursorPos >= NUM_FRONTIER_FACILITIES - 1) + HandleFrontierMapCursorMove(0); else data[0] = 2; } else if (gMain.newKeys & DPAD_UP) { - if (gUnknown_02039CF4->cursorPos == 0) - sub_80C6C70(1); + if (sMapData->cursorPos == 0) + HandleFrontierMapCursorMove(1); else data[0] = 3; } @@ -1130,43 +1494,43 @@ void sub_80C67BC(u8 taskId) case 2: if (data[1] > 3) { - sub_80C6C70(0); + HandleFrontierMapCursorMove(0); data[1] = 0; data[0] = 1; } else { - gUnknown_02039CF4->cursorSprite->pos1.y += 4; + sMapData->cursorSprite->pos1.y += 4; data[1]++; } return; case 3: if (data[1] > 3) { - sub_80C6C70(1); + HandleFrontierMapCursorMove(1); data[1] = 0; data[0] = 1; } else { - gUnknown_02039CF4->cursorSprite->pos1.y -= 4; + sMapData->cursorSprite->pos1.y -= 4; data[1]++; } return; case 4: - if (sub_80C66AC()) + if (ExitFrontierMap()) break; return; case 5: DestroyTask(taskId); - sub_80C6498(); + FreeFrontierMap(); return; } data[0]++; } -u8 sub_80C68E8(u16 mapNum) // id + 1, zero means not a frontier map number +static u8 MapNumToFrontierFacilityId(u16 mapNum) // id + 1, zero means not a frontier map number { if ((mapNum >= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_LOBBY) && mapNum <= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM)) || (mapNum >= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM) && mapNum <= MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM2))) @@ -1203,19 +1567,7 @@ u8 sub_80C68E8(u16 mapNum) // id + 1, zero means not a frontier map number return 0; } -struct -{ - const u8 *name; - const u8 *description; - s16 x; - s16 y; - u8 animNum; -} extern const gUnknown_08571650[]; - -extern const struct CompressedSpriteSheet gUnknown_085714D4[]; -extern const struct SpriteTemplate gUnknown_085715FC; - -void sub_80C6974(void) +static void InitFrontierMapSprites(void) { struct SpriteTemplate sprite; u8 spriteId; @@ -1223,20 +1575,20 @@ void sub_80C6974(void) s16 x = 0, y; FreeAllSpritePalettes(); - LoadSpritePalettes(gUnknown_085714E4); + LoadSpritePalettes(sSpritePalettes); - LoadCompressedSpriteSheet(&gUnknown_085714BC[0]); - spriteId = CreateSprite(&gUnknown_085715B4[0], 155, (gUnknown_02039CF4->cursorPos * 16) + 8, 2); - gUnknown_02039CF4->cursorSprite = &gSprites[spriteId]; - gUnknown_02039CF4->cursorSprite->oam.priority = 0; - gUnknown_02039CF4->cursorSprite->hFlip = TRUE; - StartSpriteAnim(gUnknown_02039CF4->cursorSprite, 1); + LoadCompressedSpriteSheet(&sCursorSpriteSheets[0]); + spriteId = CreateSprite(&sSpriteTemplates_Cursors[0], 155, (sMapData->cursorPos * 16) + 8, 2); + sMapData->cursorSprite = &gSprites[spriteId]; + sMapData->cursorSprite->oam.priority = 0; + sMapData->cursorSprite->hFlip = TRUE; + StartSpriteAnim(sMapData->cursorSprite, 1); - LoadCompressedSpriteSheet(&gUnknown_085714BC[1]); - spriteId = CreateSprite(&gUnknown_085715B4[1], gUnknown_08571650[gUnknown_02039CF4->cursorPos].x, gUnknown_08571650[gUnknown_02039CF4->cursorPos].y, 1); - gUnknown_02039CF4->mapIndicatorSprite = &gSprites[spriteId]; - gUnknown_02039CF4->mapIndicatorSprite->oam.priority = 0; - StartSpriteAnim(gUnknown_02039CF4->mapIndicatorSprite, gUnknown_08571650[gUnknown_02039CF4->cursorPos].animNum); + LoadCompressedSpriteSheet(&sCursorSpriteSheets[1]); + spriteId = CreateSprite(&sSpriteTemplates_Cursors[1], sMapLandmarks[sMapData->cursorPos].x, sMapLandmarks[sMapData->cursorPos].y, 1); + sMapData->mapIndicatorSprite = &gSprites[spriteId]; + sMapData->mapIndicatorSprite->oam.priority = 0; + StartSpriteAnim(sMapData->mapIndicatorSprite, sMapLandmarks[sMapData->cursorPos].animNum); // Create player indicator head sprite only if it's in vicinity of battle frontier. id = GetCurrentRegionMapSectionId(); @@ -1257,11 +1609,11 @@ void sub_80C6974(void) } else { - id = sub_80C68E8(mapNum); + id = MapNumToFrontierFacilityId(mapNum); if (id != 0) { - x = gUnknown_08571650[id - 1].x; - y = gUnknown_08571650[id - 1].y; + x = sMapLandmarks[id - 1].x; + y = sMapLandmarks[id - 1].y; } else { @@ -1278,8 +1630,8 @@ void sub_80C6974(void) } } - LoadCompressedSpriteSheet(gUnknown_085714D4); - sprite = gUnknown_085715FC; + LoadCompressedSpriteSheet(sHeadsSpriteSheet); + sprite = sSpriteTemplate_Head; sprite.paletteTag = gSaveBlock2Ptr->playerGender + 4; if (id != 0) { @@ -1292,22 +1644,14 @@ void sub_80C6974(void) spriteId = CreateSprite(&sprite, x + 20, y + 36, 0); } - gUnknown_02039CF4->playerHeadSprite = &gSprites[spriteId]; - gUnknown_02039CF4->playerHeadSprite->oam.priority = 0; + sMapData->playerHeadSprite = &gSprites[spriteId]; + sMapData->playerHeadSprite->oam.priority = 0; if (gSaveBlock2Ptr->playerGender != MALE) - StartSpriteAnim(gUnknown_02039CF4->playerHeadSprite, 1); + StartSpriteAnim(sMapData->playerHeadSprite, 1); } } -enum -{ - MAP_WINDOW_0, - MAP_WINDOW_NAME, - MAP_WINDOW_DESCRIPTION, - MAP_WINDOW_COUNT -}; - -void sub_80C6B94(void) +static void PrintOnFrontierMap(void) { u8 i; @@ -1319,13 +1663,13 @@ void sub_80C6B94(void) for (i = 0; i < NUM_FRONTIER_FACILITIES; i++) { - if (i == gUnknown_02039CF4->cursorPos) - AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (i * 16) + 1, gUnknown_08571448[2], 0, gUnknown_08571650[i].name); + if (i == sMapData->cursorPos) + AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (i * 16) + 1, sTextColors[2], 0, sMapLandmarks[i].name); else - AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (i * 16) + 1, gUnknown_08571448[1], 0, gUnknown_08571650[i].name); + AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (i * 16) + 1, sTextColors[1], 0, sMapLandmarks[i].name); } - AddTextPrinterParameterized3(MAP_WINDOW_DESCRIPTION, 1, 4, 0, gUnknown_08571448[0], 0, gUnknown_08571650[gUnknown_02039CF4->cursorPos].description); + AddTextPrinterParameterized3(MAP_WINDOW_DESCRIPTION, 1, 4, 0, sTextColors[0], 0, sMapLandmarks[sMapData->cursorPos].description); for (i = 0; i < MAP_WINDOW_COUNT; i++) CopyWindowToVram(i, 3); @@ -1333,31 +1677,31 @@ void sub_80C6B94(void) CopyBgTilemapBufferToVram(0); } -void sub_80C6C70(u8 direction) +static void HandleFrontierMapCursorMove(u8 direction) { u8 oldCursorPos, i; if (direction) { - oldCursorPos = gUnknown_02039CF4->cursorPos; - gUnknown_02039CF4->cursorPos = (oldCursorPos + 6) % NUM_FRONTIER_FACILITIES; + oldCursorPos = sMapData->cursorPos; + sMapData->cursorPos = (oldCursorPos + 6) % NUM_FRONTIER_FACILITIES; } else { - oldCursorPos = gUnknown_02039CF4->cursorPos; - gUnknown_02039CF4->cursorPos = (oldCursorPos + 1) % NUM_FRONTIER_FACILITIES; + oldCursorPos = sMapData->cursorPos; + sMapData->cursorPos = (oldCursorPos + 1) % NUM_FRONTIER_FACILITIES; } - AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (oldCursorPos * 16) + 1, gUnknown_08571448[1], 0, gUnknown_08571650[oldCursorPos].name); - AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (gUnknown_02039CF4->cursorPos * 16) + 1, gUnknown_08571448[2], 0, gUnknown_08571650[gUnknown_02039CF4->cursorPos].name); + AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (oldCursorPos * 16) + 1, sTextColors[1], 0, sMapLandmarks[oldCursorPos].name); + AddTextPrinterParameterized3(MAP_WINDOW_NAME, 7, 4, (sMapData->cursorPos * 16) + 1, sTextColors[2], 0, sMapLandmarks[sMapData->cursorPos].name); - gUnknown_02039CF4->cursorSprite->pos1.y = (gUnknown_02039CF4->cursorPos * 16) + 8; + sMapData->cursorSprite->pos1.y = (sMapData->cursorPos * 16) + 8; - StartSpriteAnim(gUnknown_02039CF4->mapIndicatorSprite, gUnknown_08571650[gUnknown_02039CF4->cursorPos].animNum); - gUnknown_02039CF4->mapIndicatorSprite->pos1.x = gUnknown_08571650[gUnknown_02039CF4->cursorPos].x; - gUnknown_02039CF4->mapIndicatorSprite->pos1.y = gUnknown_08571650[gUnknown_02039CF4->cursorPos].y; + StartSpriteAnim(sMapData->mapIndicatorSprite, sMapLandmarks[sMapData->cursorPos].animNum); + sMapData->mapIndicatorSprite->pos1.x = sMapLandmarks[sMapData->cursorPos].x; + sMapData->mapIndicatorSprite->pos1.y = sMapLandmarks[sMapData->cursorPos].y; FillWindowPixelBuffer(MAP_WINDOW_DESCRIPTION, 0); - AddTextPrinterParameterized3(MAP_WINDOW_DESCRIPTION, 1, 4, 0, gUnknown_08571448[0], 0, gUnknown_08571650[gUnknown_02039CF4->cursorPos].description); + AddTextPrinterParameterized3(MAP_WINDOW_DESCRIPTION, 1, 4, 0, sTextColors[0], 0, sMapLandmarks[sMapData->cursorPos].description); for (i = 0; i < 3; i++) CopyWindowToVram(i, 3); diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index dc2e80a61..78fec2fc5 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -1541,7 +1541,7 @@ static const u8 gHandCursorTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cu static const u8 gHandCursorShadowTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cursor_shadow.4bpp"); // code -void sub_80C6D80(u8 *string, void *dst, u8 arg2, u8 arg3, s32 arg4) +void sub_80C6D80(const u8 *string, void *dst, u8 arg2, u8 arg3, s32 arg4) { s32 i, val, val2; u16 windowId; @@ -1586,121 +1586,29 @@ void sub_80C6D80(u8 *string, void *dst, u8 arg2, u8 arg3, s32 arg4) RemoveWindow(windowId); } -NAKED -void sub_80C6EAC() +// Unused +void sub_80C6EAC(const u8 *string, void *dst, u16 arg2, u8 arg3, u8 clr2, u8 clr3) { - 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, 0x2C\n\ - str r0, [sp, 0x20]\n\ - str r1, [sp, 0x24]\n\ - adds r6, r3, 0\n\ - ldr r0, [sp, 0x4C]\n\ - mov r9, r0\n\ - ldr r1, [sp, 0x50]\n\ - mov r10, r1\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - str r2, [sp, 0x28]\n\ - lsls r6, 24\n\ - lsrs r6, 24\n\ - mov r2, r9\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - mov r9, r2\n\ - mov r0, r10\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ - movs r0, 0\n\ - movs r1, 0\n\ - str r0, [sp, 0x18]\n\ - str r1, [sp, 0x1C]\n\ - ldr r0, [sp, 0x20]\n\ - bl StringLength_Multibyte\n\ - lsls r0, 24\n\ - ldr r2, =0x00ffffff\n\ - ldr r1, [sp, 0x18]\n\ - ands r1, r2\n\ - orrs r1, r0\n\ - str r1, [sp, 0x18]\n\ - ldr r1, =0xffffff00\n\ - add r2, sp, 0x18\n\ - mov r8, r2\n\ - ldr r0, [r2, 0x4]\n\ - ands r0, r1\n\ - movs r1, 0x2\n\ - orrs r0, r1\n\ - str r0, [r2, 0x4]\n\ - ldr r5, [sp, 0x18]\n\ - lsrs r5, 24\n\ - lsls r5, 5\n\ - mov r0, r8\n\ - bl AddWindow\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - lsls r1, r6, 4\n\ - orrs r1, r6\n\ - lsls r1, 24\n\ - lsrs r1, 24\n\ - adds r0, r4, 0\n\ - bl FillWindowPixelBuffer\n\ - adds r0, r4, 0\n\ - movs r1, 0x7\n\ - bl GetWindowAttribute\n\ - adds r7, r0, 0\n\ - mov r0, r8\n\ - ldrb r0, [r0, 0x3]\n\ - lsls r0, 5\n\ - mov r8, r0\n\ - add r8, r7\n\ - add r0, sp, 0x14\n\ - movs r1, 0\n\ - strb r6, [r0]\n\ - mov r2, r9\n\ - strb r2, [r0, 0x1]\n\ - mov r2, r10\n\ - strb r2, [r0, 0x2]\n\ - str r1, [sp]\n\ - str r1, [sp, 0x4]\n\ - str r0, [sp, 0x8]\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - str r0, [sp, 0xC]\n\ - ldr r0, [sp, 0x20]\n\ - str r0, [sp, 0x10]\n\ - adds r0, r4, 0\n\ - movs r1, 0x1\n\ - movs r2, 0\n\ - movs r3, 0x2\n\ - bl AddTextPrinterParameterized4\n\ - lsrs r5, 1\n\ - adds r0, r7, 0\n\ - ldr r1, [sp, 0x24]\n\ - adds r2, r5, 0\n\ - bl CpuSet\n\ - ldr r2, [sp, 0x24]\n\ - ldr r0, [sp, 0x28]\n\ - adds r1, r2, r0\n\ - mov r0, r8\n\ - adds r2, r5, 0\n\ - bl CpuSet\n\ - adds r0, r4, 0\n\ - bl RemoveWindow\n\ - add sp, 0x2C\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); + u32 var; + u8 windowId; + u8 txtColor[3]; + u8 *tileData1, *tileData2; + struct WindowTemplate winTemplate = {0}; + + winTemplate.width = StringLength_Multibyte(string); + winTemplate.height = 2; + var = winTemplate.width * 32; + windowId = AddWindow(&winTemplate); + FillWindowPixelBuffer(windowId, (arg3 << 4) | arg3); + tileData1 = (u8*) GetWindowAttribute(windowId, WINDOW_TILE_DATA); + tileData2 = (winTemplate.width * 32) + tileData1; + txtColor[0] = arg3; + txtColor[1] = clr2; + txtColor[2] = clr3; + AddTextPrinterParameterized4(windowId, 1, 0, 2, 0, 0, txtColor, -1, string); + CpuCopy16(tileData1, dst, var); + CpuCopy16(tileData2, dst + arg2, var); + RemoveWindow(windowId); } u8 CountMonsInBox(u8 boxId) diff --git a/src/string_util.c b/src/string_util.c index 8ce9a97ed..39d235ab8 100644 --- a/src/string_util.c +++ b/src/string_util.c @@ -587,7 +587,7 @@ u8 *StringCopyN_Multibyte(u8 *dest, u8 *src, u32 n) return dest; } -u32 StringLength_Multibyte(u8 *str) +u32 StringLength_Multibyte(const u8 *str) { u32 length = 0; diff --git a/src/trade.c b/src/trade.c index 99c9f6088..70b57fbc7 100644 --- a/src/trade.c +++ b/src/trade.c @@ -26,6 +26,7 @@ #include "pokedex.h" #include "pokemon_icon.h" #include "pokemon_summary_screen.h" +#include "pokemon_storage_system.h" #include "random.h" #include "rom_8011DC0.h" #include "save.h" @@ -49,8 +50,6 @@ #define Trade_SendData(ptr) (SendBlock(bitmask_all_link_players_but_self(), ptr->linkData, 20)) -extern void sub_80C6D80(const u8 *, u8 *, u8, u8, u8); - struct InGameTrade { /*0x00*/ u8 name[11]; /*0x0C*/ u16 species; -- cgit v1.2.3 From 251d16b73393b0210d7f279d805601a0e1bed98f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 26 Jan 2019 21:06:20 +0100 Subject: Make Frontier pass compile --- src/bg.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/bg.c b/src/bg.c index 54ec3b347..f73f5998d 100644 --- a/src/bg.c +++ b/src/bg.c @@ -246,7 +246,7 @@ void SetTextModeAndHideBgs(void) SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) & ~DISPCNT_ALL_BG_AND_MODE_BITS); } -static void SetBgAffineInternal(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle) +static void SetBgAffineInternal(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle) { struct BgAffineSrcData src; struct BgAffineDstData dest; @@ -777,7 +777,7 @@ s32 GetBgY(u8 bg) return sGpuBgConfigs2[bg].bg_y; } -void SetBgAffine(u8 bg, u32 srcCenterX, u32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle) +void SetBgAffine(u8 bg, s32 srcCenterX, s32 srcCenterY, s16 dispCenterX, s16 dispCenterY, s16 scaleX, s16 scaleY, u16 rotationAngle) { SetBgAffineInternal(bg, srcCenterX, srcCenterY, dispCenterX, dispCenterY, scaleX, scaleY, rotationAngle); } -- cgit v1.2.3 From 54ddbaaf0cef7aabf69521feb6dbec222e3df6f0 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 26 Jan 2019 22:09:24 +0100 Subject: Frontier pass clean-up --- src/frontier_pass.c | 152 ++++++++++++++++++++++++++-------------------------- 1 file changed, 75 insertions(+), 77 deletions(-) (limited to 'src') diff --git a/src/frontier_pass.c b/src/frontier_pass.c index a0f6af73c..0db546c4d 100644 --- a/src/frontier_pass.c +++ b/src/frontier_pass.c @@ -34,12 +34,12 @@ // All windows displayed in the frontier pass. enum { - WINDOW_EARNED_SYMBOLS, - WINDOW_BATTLE_RECORD, - WINDOW_BATTLE_POINTS, - WINDOW_DESCRIPTION, - WINDOW_4, - WINDOW_COUNT + WINDOW_EARNED_SYMBOLS, + WINDOW_BATTLE_RECORD, + WINDOW_BATTLE_POINTS, + WINDOW_DESCRIPTION, + WINDOW_4, + WINDOW_COUNT }; // Windows displayed in the facilities map view. @@ -215,75 +215,75 @@ static const struct BgTemplate sMapBgTemplates[] = static const struct WindowTemplate sPassWindowTemplates[] = { - { - .bg = 0, - .tilemapLeft = 2, - .tilemapTop = 3, - .width = 12, - .height = 3, - .paletteNum = 15, - .baseBlock = 0x1, - }, - { - .bg = 0, - .tilemapLeft = 2, - .tilemapTop = 10, - .width = 12, - .height = 3, - .paletteNum = 15, - .baseBlock = 0x26, - }, - { - .bg = 0, - .tilemapLeft = 2, - .tilemapTop = 13, - .width = 12, - .height = 4, - .paletteNum = 15, - .baseBlock = 0x4B, - }, - { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 18, - .width = 30, - .height = 3, - .paletteNum = 15, - .baseBlock = 0x7C, - }, - DUMMY_WIN_TEMPLATE + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 3, + .width = 12, + .height = 3, + .paletteNum = 15, + .baseBlock = 0x1, + }, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 10, + .width = 12, + .height = 3, + .paletteNum = 15, + .baseBlock = 0x26, + }, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 13, + .width = 12, + .height = 4, + .paletteNum = 15, + .baseBlock = 0x4B, + }, + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 18, + .width = 30, + .height = 3, + .paletteNum = 15, + .baseBlock = 0x7C, + }, + DUMMY_WIN_TEMPLATE }; static const struct WindowTemplate sMapWindowTemplates[] = { - { - .bg = 0, - .tilemapLeft = 0, - .tilemapTop = 1, - .width = 15, - .height = 5, - .paletteNum = 15, - .baseBlock = 0x1, - }, - { - .bg = 0, - .tilemapLeft = 20, - .tilemapTop = 1, - .width = 10, - .height = 14, - .paletteNum = 15, - .baseBlock = 0x4D, - }, - { - .bg = 0, - .tilemapLeft = 2, - .tilemapTop = 16, - .width = 26, - .height = 4, - .paletteNum = 15, - .baseBlock = 0xDA, - }, - DUMMY_WIN_TEMPLATE + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 1, + .width = 15, + .height = 5, + .paletteNum = 15, + .baseBlock = 0x1, + }, + { + .bg = 0, + .tilemapLeft = 20, + .tilemapTop = 1, + .width = 10, + .height = 14, + .paletteNum = 15, + .baseBlock = 0x4D, + }, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 16, + .width = 26, + .height = 4, + .paletteNum = 15, + .baseBlock = 0xDA, + }, + DUMMY_WIN_TEMPLATE }; static const u8 sTextColors[][3] = @@ -675,9 +675,7 @@ static void CB2_InitFrontierPass(void) static void CB2_HideFrontierPass(void) { if (HideFrontierPass()) - { LeaveFrontierPass(); - } } static bool32 InitFrontierPass(void) @@ -753,7 +751,7 @@ static bool32 InitFrontierPass(void) ShowBg(2); LoadCursorAndSymbolSprites(); SetVBlankCallback(VblankCb_FrontierPass); - BlendPalettes(0xFFFFFFFF, 0x10, 0); + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); break; case 10: @@ -1095,15 +1093,15 @@ static void ShowAndPrintWindows(void) FillWindowPixelBuffer(i, 0); } - x = GetStringCenterAlignXOffset(1, gText_SymbolsEarned, 0x60); + x = GetStringCenterAlignXOffset(1, gText_SymbolsEarned, 96); AddTextPrinterParameterized3(WINDOW_EARNED_SYMBOLS, 1, x, 5, sTextColors[0], 0, gText_SymbolsEarned); - x = GetStringCenterAlignXOffset(1, gText_BattleRecord, 0x60); + x = GetStringCenterAlignXOffset(1, gText_BattleRecord, 96); AddTextPrinterParameterized3(WINDOW_BATTLE_RECORD, 1, x, 5, sTextColors[0], 0, gText_BattleRecord); AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, 8, 5, 4, sTextColors[0], 0, gText_BattlePoints); ConvertIntToDecimalStringN(gStringVar4, sPassData->battlePoints, STR_CONV_MODE_LEFT_ALIGN, 5); - x = GetStringRightAlignXOffset(8, gStringVar4, 0x5B); + x = GetStringRightAlignXOffset(8, gStringVar4, 91); AddTextPrinterParameterized3(WINDOW_BATTLE_POINTS, 8, x, 16, sTextColors[0], 0, gStringVar4); sPassData->cursorArea = GetCursorAreaFromCoords(sPassData->cursorX - 5, sPassData->cursorY + 5); -- cgit v1.2.3