From da48c3037762f19493280ca45800ba5d8e57b83d Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 17 Oct 2017 14:54:31 -0700 Subject: Begin battle_tower decompilation --- src/battle_tower.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/battle_tower.c (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c new file mode 100644 index 000000000..51f4ca93d --- /dev/null +++ b/src/battle_tower.c @@ -0,0 +1,58 @@ +#include "global.h" +#include "battle_tower.h" +#include "event_data.h" +#include "vars.h" + + +extern void sub_813461C(u8 levelType); +extern void sub_8135C44(void); + + +void sub_8134548(void) +{ + u8 var1 = 0; + s32 levelType; + + for (levelType = 0; levelType < 2; levelType++) + { + switch (gSaveBlock2.filler_A8.var_4AE[levelType]) + { + case 0: + default: + sub_813461C(levelType); + if (!var1) + { + VarSet(VAR_0x4000, 5); + } + break; + case 1: + sub_813461C(levelType); + VarSet(VAR_0x4000, 1); + var1++; + break; + case 4: + VarSet(VAR_0x4000, 2); + var1++; + break; + case 5: + VarSet(VAR_0x4000, 3); + var1++; + break; + case 2: + VarSet(VAR_0x4000, 4); + var1++; + break; + case 3: + case 6: + break; + } + } + + if ((gSaveBlock2.filler_A8.var_4AE[0] == 3 || gSaveBlock2.filler_A8.var_4AE[0] == 6) + && (gSaveBlock2.filler_A8.var_4AE[1] == 3 || gSaveBlock2.filler_A8.var_4AE[1] == 6)) + { + VarSet(VAR_0x4000, 5); + } + + sub_8135C44(); +} -- cgit v1.2.3 From 13c196eda57ebbdb3c7e14bebd2985f1edceae34 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 21 Oct 2017 19:51:28 -0700 Subject: More battle_tower work --- src/battle/battle_records.c | 4 +- src/battle_tower.c | 1062 ++++++++++++++++++++++++++++++++++++- src/debug/unknown_debug_menu.c | 9 +- src/engine/mystery_event_script.c | 2 +- src/engine/record_mixing.c | 12 +- src/engine/trainer_card.c | 56 +- src/field/choose_party.c | 2 +- src/field/tv.c | 8 +- 8 files changed, 1108 insertions(+), 47 deletions(-) (limited to 'src') diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c index d848a10b8..59da6ba73 100644 --- a/src/battle/battle_records.c +++ b/src/battle/battle_records.c @@ -295,13 +295,13 @@ static void PrintWinStreak(const u8 *str, u16 streak, u8 left, u8 top) static void PrintRecordWinStreak(u8 level, u8 left, u8 top) { struct SaveBlock2_Sub *sb2sub = &gSaveBlock2.filler_A8; - u16 winStreak = sb2sub->recordWinStreak[level]; + u16 winStreak = sb2sub->recordWinStreaks[level]; PrintWinStreak(gOtherText_Record, winStreak, left, top); } static u16 GetLastWinStreak(u8 level) { - u16 result = gSaveBlock2.filler_A8.winStreak[level]; + u16 result = gSaveBlock2.filler_A8.currentWinStreaks[level]; if (result > 9999) result = 9999; return result; diff --git a/src/battle_tower.c b/src/battle_tower.c index 51f4ca93d..90884ec98 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1,11 +1,21 @@ #include "global.h" #include "battle_tower.h" #include "event_data.h" +#include "map_object_constants.h" +#include "rng.h" #include "vars.h" +extern u8 gTrainerClassToPicIndex[]; +extern u8 gTrainerClassToNameIndex[]; +extern u8 gUnknown_08405EB0[]; +extern u8 gUnknown_08405E7E[]; +extern u8 gUnknown_08405E92[]; +extern u8 gUnknown_08405E60[]; +extern struct BattleTowerTrainer gBattleTowerTrainers[]; -extern void sub_813461C(u8 levelType); extern void sub_8135C44(void); +extern void sub_813601C(void); +extern void sub_81349FC(u8); void sub_8134548(void) @@ -56,3 +66,1053 @@ void sub_8134548(void) sub_8135C44(); } + +void sub_813461C(u8 levelType) +{ + gSaveBlock2.filler_A8.var_4AE[levelType] = 0; + gSaveBlock2.filler_A8.var_4B0[levelType] = 1; + gSaveBlock2.filler_A8.var_4B4[levelType] = 1; +} + +// u8 sub_8134650(u8 levelType, u16 b) +// { +// u8 trainerTeamLevel; +// s32 i; +// u32 numValid = 0; + +// sub_813601C(); + +// if (gScriptResult || gSaveBlock2.filler_A8.ereaderTrainer.unk2 != b) +// { +// return 0; +// } + +// trainerTeamLevel = 50; +// if (levelType != 0) +// { +// trainerTeamLevel = 100; +// } + +// for (i = 0; i < 3; i++) +// { +// if (!gSaveBlock2.filler_A8.ereaderTrainer.party[i].level != trainerTeamLevel) +// { +// return 0; +// } + +// CheckMonBattleTowerBanlist(gSaveBlock2.filler_A8.ereaderTrainer.party[i].unk0, gSaveBlock2.filler_A8.ereaderTrainer.party[i].unk2, 1, levelType, &numValid); +// } + +// return numValid == 3; +// } + +__attribute__((naked)) +u8 sub_8134650(u8 levelType, u16 b) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0x2C\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + lsls r1, 16\n\ + lsrs r6, r1, 16\n\ + add r4, sp, 0x28\n\ + movs r0, 0\n\ + strb r0, [r4]\n\ + bl sub_813601C\n\ + ldr r0, _08134684 @ =gScriptResult\n\ + ldrh r0, [r0]\n\ + adds r7, r4, 0\n\ + cmp r0, 0\n\ + bne _08134680\n\ + ldr r1, _08134688 @ =gSaveBlock2\n\ + ldr r2, _0813468C @ =0x0000049a\n\ + adds r0, r1, r2\n\ + ldrh r0, [r0]\n\ + cmp r0, r6\n\ + beq _08134690\n\ +_08134680:\n\ + movs r0, 0\n\ + b _081346E2\n\ + .align 2, 0\n\ +_08134684: .4byte gScriptResult\n\ +_08134688: .4byte gSaveBlock2\n\ +_0813468C: .4byte 0x0000049a\n\ +_08134690:\n\ + movs r6, 0x32\n\ + cmp r5, 0\n\ + beq _08134698\n\ + movs r6, 0x64\n\ +_08134698:\n\ + movs r4, 0\n\ + mov r8, r1\n\ +_0813469C:\n\ + movs r0, 0x2C\n\ + muls r0, r4\n\ + mov r3, r8\n\ + adds r1, r0, r3\n\ + movs r2, 0x9B\n\ + lsls r2, 3\n\ + adds r0, r1, r2\n\ + ldrb r2, [r0]\n\ + cmp r2, r6\n\ + bne _08134680\n\ + ldr r3, _081346F0 @ =0x000004cc\n\ + adds r0, r1, r3\n\ + ldrh r0, [r0]\n\ + adds r3, 0x2\n\ + adds r1, r3\n\ + ldrh r1, [r1]\n\ + str r2, [sp]\n\ + add r2, sp, 0x10\n\ + str r2, [sp, 0x4]\n\ + add r2, sp, 0x1C\n\ + str r2, [sp, 0x8]\n\ + str r7, [sp, 0xC]\n\ + movs r2, 0x1\n\ + adds r3, r5, 0\n\ + bl CheckMonBattleTowerBanlist\n\ + adds r4, 0x1\n\ + cmp r4, 0x2\n\ + ble _0813469C\n\ + movs r1, 0\n\ + ldrb r0, [r7]\n\ + cmp r0, 0x3\n\ + bne _081346E0\n\ + movs r1, 0x1\n\ +_081346E0:\n\ + adds r0, r1, 0\n\ +_081346E2:\n\ + add sp, 0x2C\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_081346F0: .4byte 0x000004cc\n\ +.syntax divided\n"); +} + +// bool8 sub_81346F4(void) +// { +// s32 i; +// u32 j; +// u32 arr[4]; +// u16 var2 = sub_8135D3C(gSaveBlock2.filler_A8.battleTowerLevelType); + +// if (sub_8134650(gSaveBlock2.filler_A8.battleTowerLevelType)) +// { +// gSaveBlock2.filler_A8.battleTowerTrainerId = 0xC8; +// return TRUE; +// } + +// for (i = 0; i < 5; i++) +// { +// u32 var_or = 0; +// u32 var_add = 0; +// for (j = 0; j < 40; j++) +// { +// var_or |= gSaveBlock2.filler_A8.var_0A4[i][j]; +// var_add += gSaveBlock2.filler_A8.var_0A4[i][j]; +// } + + +// } +// } + +__attribute__((naked)) +bool8 sub_81346F4(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x18\n\ + movs r0, 0\n\ + mov r9, r0\n\ + ldr r4, _08134738 @ =gSaveBlock2\n\ + ldr r1, _0813473C @ =0x00000554\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 31\n\ + lsrs r7, r0, 31\n\ + adds r0, r7, 0\n\ + bl sub_8135D3C\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + adds r0, r7, 0\n\ + mov r1, r8\n\ + bl sub_8134650\n\ + lsls r0, 24\n\ + adds r1, r4, 0\n\ + cmp r0, 0\n\ + beq _08134744\n\ + ldr r2, _08134740 @ =0x00000564\n\ + adds r1, r2\n\ + movs r0, 0xC8\n\ + strb r0, [r1]\n\ + b _081347DE\n\ + .align 2, 0\n\ +_08134738: .4byte gSaveBlock2\n\ +_0813473C: .4byte 0x00000554\n\ +_08134740: .4byte 0x00000564\n\ +_08134744:\n\ + movs r5, 0\n\ + movs r3, 0xA4\n\ + mov r12, r3\n\ + mov r10, sp\n\ +_0813474C:\n\ + mov r0, r12\n\ + muls r0, r5\n\ + movs r4, 0\n\ + movs r1, 0\n\ + movs r2, 0\n\ + adds r6, r5, 0x1\n\ + str r6, [sp, 0x14]\n\ + ldr r6, _081347B4 @ =gSaveBlock2 + 0x14C\n\ + adds r3, r0, r6\n\ +_0813475E:\n\ + ldm r3!, {r0}\n\ + orrs r4, r0\n\ + adds r1, r0\n\ + adds r2, 0x1\n\ + cmp r2, 0x27\n\ + bls _0813475E\n\ + mov r3, r12\n\ + muls r3, r5\n\ + ldr r0, _081347B8 @ =gSaveBlock2\n\ + adds r2, r3, r0\n\ + movs r6, 0xA7\n\ + lsls r6, 1\n\ + adds r0, r2, r6\n\ + ldrh r0, [r0]\n\ + cmp r0, r8\n\ + bne _081347A4\n\ + subs r6, 0x2\n\ + adds r0, r2, r6\n\ + ldrb r0, [r0]\n\ + cmp r0, r7\n\ + bne _081347A4\n\ + cmp r4, 0\n\ + beq _081347A4\n\ + ldr r2, _081347BC @ =gSaveBlock2 + 0x1EC\n\ + adds r0, r3, r2\n\ + ldr r0, [r0]\n\ + cmp r0, r1\n\ + bne _081347A4\n\ + mov r3, r10\n\ + adds r3, 0x4\n\ + mov r10, r3\n\ + subs r3, 0x4\n\ + stm r3!, {r5}\n\ + movs r6, 0x1\n\ + add r9, r6\n\ +_081347A4:\n\ + ldr r5, [sp, 0x14]\n\ + cmp r5, 0x4\n\ + ble _0813474C\n\ + mov r0, r9\n\ + cmp r0, 0\n\ + bne _081347C0\n\ + movs r0, 0\n\ + b _081347E0\n\ + .align 2, 0\n\ +_081347B4: .4byte gSaveBlock2 + 0x14C\n\ +_081347B8: .4byte gSaveBlock2\n\ +_081347BC: .4byte gSaveBlock2 + 0x1EC\n\ +_081347C0:\n\ + bl Random\n\ + ldr r4, _081347F0 @ =gSaveBlock2\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r1, r9\n\ + bl __modsi3\n\ + lsls r0, 2\n\ + add r0, sp\n\ + ldr r0, [r0]\n\ + adds r0, 0x64\n\ + ldr r1, _081347F4 @ =0x00000564\n\ + adds r4, r1\n\ + strb r0, [r4]\n\ +_081347DE:\n\ + movs r0, 0x1\n\ +_081347E0:\n\ + add sp, 0x18\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_081347F0: .4byte gSaveBlock2\n\ +_081347F4: .4byte 0x00000564\n\ +.syntax divided\n"); +} + +// void sub_81347F8(void) +// { +// bool8 levelType = gSaveBlock2.filler_A8.battleTowerLevelType; +// if (sub_81346F4()) +// { +// sub_81349FC(gSaveBlock2.filler_A8.battleTowerTrainerId); +// gSaveBlock2.filler_A8.var_4C1[gSaveBlock2.filler_A8.var_4B0[levelType]] = gSaveBlock2.filler_A8.battleTowerTrainerId; +// } +// else +// { +// u16 var1; + +// if (gSaveBlock2.filler_A8.var_4B4[levelType] > 7) +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 30) >> 8; +// var1 = temp + 70; +// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && var1 != gSaveBlock2.filler_A8.var_4C1[i]; i++) // TODO: [i + 1]??? +// { } + +// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// { +// break; +// } +// } +// } +// else +// { +// if (gSaveBlock2.filler_A8.var_4B0[levelType] == 7) +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 5); +// u32 temp2 = (((gSaveBlock2.filler_A8.var_4B4[levelType] - 1) * 10) + 20); +// var1 = temp / 128 + temp2; +// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && gSaveBlock2.filler_A8.var_4C1[i] != var1; i++) // TODO: [i + 1]???? +// { } + +// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// { +// break; +// } +// } +// } +// else +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 320); +// u32 temp2 = ((gSaveBlock2.filler_A8.var_4B4[levelType] - 1) * 10); +// var1 = temp + temp2; +// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && gSaveBlock2.filler_A8.var_4C1[i] != var1; i++) +// { } + +// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// { +// break; +// } +// } +// } +// } + +// gSaveBlock2.filler_A8.battleTowerTrainerId = var1; +// sub_81349FC(gSaveBlock2.filler_A8.battleTowerTrainerId); + +// if (gSaveBlock2.filler_A8.var_4B0[levelType] < 7) +// { +// gSaveBlock2.filler_A8.var_4C1[gSaveBlock2.filler_A8.var_4B0[levelType]] = gSaveBlock2.filler_A8.battleTowerTrainerId; +// } +// } +// } + +__attribute__((naked)) +void sub_81347F8(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + ldr r5, _08134838 @ =gSaveBlock2\n\ + ldr r1, _0813483C @ =0x00000554\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 31\n\ + lsrs r6, r0, 31\n\ + bl sub_81346F4\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08134848\n\ + ldr r2, _08134840 @ =0x00000564\n\ + adds r4, r5, r2\n\ + ldrb r0, [r4]\n\ + bl sub_81349FC\n\ + lsls r0, r6, 1\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r1, r5, r3\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + adds r0, r5, r0\n\ + ldr r1, _08134844 @ =0x00000569\n\ + adds r0, r1\n\ + ldrb r1, [r4]\n\ + b _081349DC\n\ + .align 2, 0\n\ +_08134838: .4byte gSaveBlock2\n\ +_0813483C: .4byte 0x00000554\n\ +_08134840: .4byte 0x00000564\n\ +_08134844: .4byte 0x00000569\n\ +_08134848:\n\ + lsls r0, r6, 1\n\ + ldr r2, _081348D8 @ =0x0000055c\n\ + adds r1, r5, r2\n\ + adds r1, r0, r1\n\ + ldrh r1, [r1]\n\ + adds r7, r0, 0\n\ + cmp r1, 0x7\n\ + bls _0813485A\n\ + b _0813495C\n\ +_0813485A:\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r0, r5, r3\n\ + adds r1, r7, r0\n\ + ldrh r0, [r1]\n\ + cmp r0, 0x7\n\ + bne _081348E4\n\ + adds r6, r5, 0\n\ + mov r9, r7\n\ + adds r5, r1, 0\n\ + ldr r0, _081348DC @ =0x0000056a\n\ + adds r0, r6\n\ + mov r10, r0\n\ + mov r8, r5\n\ +_08134876:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r2, r1, 2\n\ + adds r2, r1\n\ + ldr r1, _081348D8 @ =0x0000055c\n\ + adds r4, r6, r1\n\ + mov r3, r9\n\ + adds r0, r3, r4\n\ + ldrh r1, [r0]\n\ + subs r1, 0x1\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 1\n\ + adds r0, 0x14\n\ + lsrs r2, 7\n\ + adds r2, r0\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + movs r1, 0\n\ + ldrh r0, [r5]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _081348C8\n\ + mov r3, r10\n\ + ldrb r0, [r3]\n\ + cmp r0, r2\n\ + beq _081348C8\n\ + subs r0, r4, 0x4\n\ + adds r0, r7, r0\n\ + ldrh r0, [r0]\n\ + subs r3, r0, 0x1\n\ + adds r4, 0xE\n\ +_081348BA:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _081348C8\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _081348BA\n\ +_081348C8:\n\ + mov r3, r8\n\ + ldrh r0, [r3]\n\ + subs r0, 0x1\n\ + ldr r4, _081348E0 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _08134876\n\ + b _081349B6\n\ + .align 2, 0\n\ +_081348D8: .4byte 0x0000055c\n\ +_081348DC: .4byte 0x0000056a\n\ +_081348E0: .4byte gSaveBlock2\n\ +_081348E4:\n\ + adds r6, r5, 0\n\ + mov r9, r7\n\ + adds r5, r1, 0\n\ + ldr r2, _08134950 @ =0x0000056a\n\ + adds r2, r6\n\ + mov r10, r2\n\ + mov r8, r5\n\ +_081348F2:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsrs r2, r0, 6\n\ + ldr r3, _08134954 @ =0x0000055c\n\ + adds r4, r6, r3\n\ + mov r1, r9\n\ + adds r0, r1, r4\n\ + ldrh r1, [r0]\n\ + subs r1, 0x1\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 1\n\ + adds r0, r2, r0\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + movs r1, 0\n\ + ldrh r0, [r5]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _08134942\n\ + mov r3, r10\n\ + ldrb r0, [r3]\n\ + cmp r0, r2\n\ + beq _08134942\n\ + subs r0, r4, 0x4\n\ + adds r0, r7, r0\n\ + ldrh r0, [r0]\n\ + subs r3, r0, 0x1\n\ + adds r4, 0xE\n\ +_08134934:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _08134942\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _08134934\n\ +_08134942:\n\ + mov r3, r8\n\ + ldrh r0, [r3]\n\ + subs r0, 0x1\n\ + ldr r4, _08134958 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _081348F2\n\ + b _081349B6\n\ + .align 2, 0\n\ +_08134950: .4byte 0x0000056a\n\ +_08134954: .4byte 0x0000055c\n\ +_08134958: .4byte gSaveBlock2\n\ +_0813495C:\n\ + movs r2, 0xAB\n\ + lsls r2, 3\n\ + adds r0, r5, r2\n\ + adds r6, r7, r0\n\ + ldr r3, _081349EC @ =0x0000056a\n\ + adds r3, r5\n\ + mov r8, r3\n\ + adds r5, r6, 0\n\ +_0813496C:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r0, r1, 4\n\ + subs r0, r1\n\ + lsls r0, 1\n\ + asrs r0, 8\n\ + adds r0, 0x46\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + movs r1, 0\n\ + ldrh r0, [r6]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _081349AC\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + ldr r4, _081349F0 @ =gSaveBlock2\n\ + cmp r0, r2\n\ + beq _081349AC\n\ + ldrh r0, [r5]\n\ + subs r3, r0, 0x1\n\ + ldr r0, _081349EC @ =0x0000056a\n\ + adds r4, r0\n\ +_0813499E:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _081349AC\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _0813499E\n\ +_081349AC:\n\ + ldrh r0, [r6]\n\ + subs r0, 0x1\n\ + ldr r4, _081349F0 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _0813496C\n\ +_081349B6:\n\ + ldr r1, _081349F4 @ =0x00000564\n\ + adds r0, r4, r1\n\ + strb r2, [r0]\n\ + ldr r2, _081349F4 @ =0x00000564\n\ + adds r5, r4, r2\n\ + ldrb r0, [r5]\n\ + bl sub_81349FC\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r0, r4, r3\n\ + adds r1, r7, r0\n\ + ldrh r0, [r1]\n\ + cmp r0, 0x6\n\ + bhi _081349DE\n\ + adds r0, r4, r0\n\ + ldr r1, _081349F8 @ =0x00000569\n\ + adds r0, r1\n\ + ldrb r1, [r5]\n\ +_081349DC:\n\ + strb r1, [r0]\n\ +_081349DE:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081349EC: .4byte 0x0000056a\n\ +_081349F0: .4byte gSaveBlock2\n\ +_081349F4: .4byte 0x00000564\n\ +_081349F8: .4byte 0x00000569\n\ +.syntax divided\n"); +} + +void sub_81349FC(u8 trainerIndex) +{ + u32 i; + u8 trainerClass; + + if (trainerIndex < 100) + { + trainerClass = gBattleTowerTrainers[trainerIndex].trainerClass; + } + else if (trainerIndex < 200) + { + trainerClass = gSaveBlock2.filler_A8.var_14C[trainerIndex - 100].trainerClass; + } + else + { + trainerClass = gSaveBlock2.filler_A8.ereaderTrainer.trainerClass; + } + + for (i = 0; i < 30 && gUnknown_08405E60[i] != trainerClass; i++); + if (i != 30) + { + u8 trainerObjectGfxId = gUnknown_08405E92[i]; + VarSet(0x4010, trainerObjectGfxId); + return; + } + + for (i = 0; i < 20 && gUnknown_08405E7E[i] != trainerClass; i++); + if (i != 20) + { + u8 trainerObjectGfxId = gUnknown_08405EB0[i]; + VarSet(0x4010, trainerObjectGfxId); + return; + } + + VarSet(0x4010, MAP_OBJ_GFX_BOY_1); +} + +void sub_8134AB4() +{ + sub_81349FC(200); +} + +// void sub_8134AC0(struct BattleTowerRecord *record) +// { +// u16 var1[5]; +// u16 var2[5]; +// s32 i, j, k; +// s16 l = 0; + +// for (i = 0; i < 5; i++) +// { +// k = 0; +// for (j = 0; j < 4 && gSaveBlock2.filler_A8.var_14C[i].var_C[i] != record->var_C[j]; j++); +// if (j == 4) +// { +// for (k = 0; k < 7 && gSaveBlock2.filler_A8.var_14C[i].var_8 == record->var_8; k++) +// { +// if (record->var_8 == 0xFF) +// { +// k = 7; +// break; +// } +// } +// } + +// if (k == 7) +// { +// break; +// } +// } + +// if (i < 5) +// { +// gSaveBlock2.filler_A8.var_14C[i] = *record; +// return; +// } + +// i = 0; +// while (i < 5) +// { +// if (gSaveBlock2.filler_A8.var_14C[i].var_2 == 0) +// { +// if (i > 4) +// { +// break; +// } + +// gSaveBlock2.filler_A8.var_14C[i] = *record; +// return; +// } + +// i++; +// } + +// var1[0] = gSaveBlock2.filler_A8.var_14C[0].var_2; +// var2[0] = 0; +// l++; + +// for (i = 1; i < 5; i++) +// { +// for (j = 0; gSaveBlock2.filler_A8.var_14C[i].var_2 <= var1[0] && j < l; j++) +// { +// if (gSaveBlock2.filler_A8.var_14C[i].var_2 < var1[0]) +// { +// j = 0; +// l = 1; +// var1[0] = gSaveBlock2.filler_A8.var_14C[i].var_2; +// var2[0] = i; +// break; +// } +// } + +// if (j == l) +// { +// var1[l] = gSaveBlock2.filler_A8.var_14C[i].var_2; +// var2[l] = i; +// l++; +// } +// } + +// gSaveBlock2.filler_A8.var_14C[var2[(Random() % l)]] = *record; +// } + +__attribute__((naked)) +void sub_8134AC0(struct BattleTowerRecord *record) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x1C\n\ + movs r7, 0\n\ + mov r8, r0\n\ + movs r5, 0\n\ + ldr r0, _08134B3C @ =gSaveBlock2\n\ + mov r12, r0\n\ + mov r1, r8\n\ + ldrb r1, [r1, 0xC]\n\ + str r1, [sp, 0x18]\n\ + movs r2, 0xAA\n\ + lsls r2, 1\n\ + add r2, r12\n\ + mov r10, r2\n\ + mov r9, r5\n\ +_08134AE6:\n\ + movs r6, 0\n\ + movs r3, 0\n\ + ldr r0, _08134B40 @ =gSaveBlock2 + 0x158\n\ + add r0, r9\n\ + ldrb r0, [r0]\n\ + ldr r1, [sp, 0x18]\n\ + cmp r0, r1\n\ + bne _08134B14\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + ldr r1, _08134B40 @ =gSaveBlock2 + 0x158\n\ + adds r2, r0, r1\n\ + mov r4, r8\n\ + adds r4, 0xC\n\ +_08134B02:\n\ + adds r2, 0x1\n\ + adds r3, 0x1\n\ + cmp r3, 0x3\n\ + bgt _08134B14\n\ + adds r1, r4, r3\n\ + ldrb r0, [r2]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + beq _08134B02\n\ +_08134B14:\n\ + cmp r3, 0x4\n\ + bne _08134B54\n\ + movs r6, 0\n\ + mov r2, r10\n\ + ldrb r0, [r2]\n\ + mov r3, r8\n\ + ldrb r3, [r3, 0x8]\n\ + cmp r0, r3\n\ + bne _08134B54\n\ + adds r1, r0, 0\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + adds r0, 0x4\n\ + ldr r3, _08134B44 @ =gSaveBlock2 + 0x150\n\ + adds r2, r0, r3\n\ +_08134B32:\n\ + cmp r1, 0xFF\n\ + bne _08134B48\n\ + movs r6, 0x7\n\ + b _08134B54\n\ + .align 2, 0\n\ +_08134B3C: .4byte gSaveBlock2\n\ +_08134B40: .4byte gSaveBlock2 + 0x158\n\ +_08134B44: .4byte gSaveBlock2 + 0x150\n\ +_08134B48:\n\ + adds r6, 0x1\n\ + cmp r6, 0x6\n\ + bgt _08134B54\n\ + ldrb r0, [r2]\n\ + cmp r0, r1\n\ + beq _08134B32\n\ +_08134B54:\n\ + cmp r6, 0x7\n\ + beq _08134B64\n\ + movs r0, 0xA4\n\ + add r10, r0\n\ + add r9, r0\n\ + adds r5, 0x1\n\ + cmp r5, 0x4\n\ + ble _08134AE6\n\ +\n\ +_08134B64:\n\ + cmp r5, 0x4\n\ + bgt _08134B76\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + add r0, r12\n\ + movs r1, 0xA6\n\ + lsls r1, 1\n\ + adds r0, r1\n\ + b _08134B9E\n\ +_08134B76:\n\ + movs r5, 0\n\ + movs r1, 0xA7\n\ + lsls r1, 1\n\ + add r1, r12\n\ + b _08134B88\n\ +_08134B80:\n\ + adds r1, 0xA4\n\ + adds r5, 0x1\n\ + cmp r5, 0x4\n\ + bgt _08134BA8\n\ +_08134B88:\n\ + ldrh r0, [r1]\n\ + cmp r0, 0\n\ + bne _08134B80\n\ + cmp r5, 0x4\n\ + bgt _08134BA8\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + add r0, r12\n\ + movs r2, 0xA6\n\ + lsls r2, 1\n\ + adds r0, r2\n\ +_08134B9E:\n\ + mov r1, r8\n\ + movs r2, 0xA4\n\ + bl memcpy\n\ + b _08134C5E\n\ +\n\ +_08134BA8:\n\ + mov r2, sp\n\ + movs r3, 0xA7\n\ + lsls r3, 1\n\ + mov r1, r12\n\ + adds r0, r1, r3\n\ + ldrh r0, [r0]\n\ + movs r1, 0\n\ + strh r0, [r2]\n\ + add r0, sp, 0xC\n\ + strh r1, [r0]\n\ + adds r7, 0x1\n\ + movs r5, 0x1\n\ + add r2, sp, 0xC @var2 = r2\n\ + mov r9, r2\n\ + mov r10, r3\n\ +_08134BC6:\n\ + movs r3, 0\n\ + adds r0, r5, 0x1\n\ + mov r12, r0\n\ + cmp r3, r7\n\ + bge _08134C0A\n\ + movs r1, 0xA4\n\ + adds r0, r5, 0\n\ + muls r0, r1\n\ + ldr r2, _08134BFC @ =gSaveBlock2\n\ + adds r0, r2\n\ + mov r1, r10\n\ + adds r4, r0, r1\n\ + mov r6, sp\n\ +_08134BE0:\n\ + lsls r0, r3, 1\n\ + add r0, sp\n\ + ldrh r2, [r4]\n\ + adds r1, r2, 0\n\ + ldrh r0, [r0]\n\ + cmp r1, r0\n\ + bcs _08134C00\n\ + movs r3, 0\n\ + movs r7, 0x1\n\ + strh r2, [r6]\n\ + mov r2, r9\n\ + strh r5, [r2]\n\ + b _08134C0A\n\ + .align 2, 0\n\ +_08134BFC: .4byte gSaveBlock2\n\ +_08134C00:\n\ + cmp r1, r0\n\ + bhi _08134C0A\n\ + adds r3, 0x1\n\ + cmp r3, r7\n\ + blt _08134BE0\n\ +_08134C0A:\n\ + cmp r3, r7\n\ + bne _08134C2A\n\ + lsls r1, r7, 1\n\ + mov r3, sp\n\ + adds r2, r3, r1\n\ + movs r3, 0xA4\n\ + adds r0, r5, 0\n\ + muls r0, r3\n\ + ldr r3, _08134C70 @ =gSaveBlock2\n\ + adds r0, r3\n\ + add r0, r10\n\ + ldrh r0, [r0]\n\ + strh r0, [r2]\n\ + add r1, r9\n\ + strh r5, [r1]\n\ + adds r7, 0x1\n\ +_08134C2A:\n\ + mov r5, r12\n\ + cmp r5, 0x4\n\ + ble _08134BC6\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + adds r1, r7, 0\n\ + bl __modsi3\n\ + adds r5, r0, 0\n\ + ldr r2, _08134C70 @ =gSaveBlock2\n\ + lsls r0, r5, 1\n\ + add r0, sp\n\ + adds r0, 0xC\n\ + ldrh r1, [r0]\n\ + movs r0, 0xA4\n\ + muls r0, r1\n\ + adds r0, r2\n\ + movs r1, 0xA6\n\ + lsls r1, 1\n\ + adds r0, r1\n\ + mov r1, r8\n\ + movs r2, 0xA4\n\ + bl memcpy\n\ +_08134C5E:\n\ + add sp, 0x1C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08134C70: .4byte gSaveBlock2\n\ +.syntax divided\n"); +} + +u8 get_trainer_class_pic_index(void) +{ + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; + } + else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + { + return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].trainerClass]; + } + else + { + return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].trainerClass]; + } +} + +u8 get_trainer_class_name_index(void) +{ + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; + } + else if (gSaveBlock2.filler_A8.battleTowerTrainerId >= 100) + { + return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].trainerClass]; + } + else + { + return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].trainerClass]; + } +} + +void get_trainer_name(u8* dest) +{ + s32 i; + + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + for (i = 0; i < 7; i++) + { + dest[i] = gSaveBlock2.filler_A8.ereaderTrainer.name[i]; + } + } + else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + { + for (i = 0; i < 7; i++) + { + dest[i] = gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].name[i]; + } + } + else + { + for (i = 0; i < 7; i++) + { + dest[i] = gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].name[i]; + } + } + + dest[i] = 0xFF; +} diff --git a/src/debug/unknown_debug_menu.c b/src/debug/unknown_debug_menu.c index a81625f2a..995fb38fc 100644 --- a/src/debug/unknown_debug_menu.c +++ b/src/debug/unknown_debug_menu.c @@ -1,4 +1,5 @@ #include "global.h" +#include "battle_tower.h" #include "menu.h" extern u8 gBattleCommunication[]; @@ -43,10 +44,10 @@ u8 sub_814A4B8(void) { gSaveBlock2.filler_A8.var_4AE[0] = 3; gSaveBlock2.filler_A8.var_4AE[1] = 3; - gSaveBlock2.filler_A8.var_4B4 = gBattleCommunication[0] + 1; - gSaveBlock2.filler_A8.var_4B6 = gBattleCommunication[0] + 1; - gSaveBlock2.filler_A8.var_4B0 = 1; - gSaveBlock2.filler_A8.var_4B2 = 1; + gSaveBlock2.filler_A8.var_4B4[0] = gBattleCommunication[0] + 1; + gSaveBlock2.filler_A8.var_4B4[1] = gBattleCommunication[0] + 1; + gSaveBlock2.filler_A8.var_4B0[0] = 1; + gSaveBlock2.filler_A8.var_4B0[1] = 1; CloseMenu(); return 1; } diff --git a/src/engine/mystery_event_script.c b/src/engine/mystery_event_script.c index a6568f5de..38ada0685 100644 --- a/src/engine/mystery_event_script.c +++ b/src/engine/mystery_event_script.c @@ -420,7 +420,7 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx) { u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]; - memcpy(gSaveBlock2.filler_A8.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.filler_A8.ereaderTrainer)); + memcpy(&gSaveBlock2.filler_A8.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.filler_A8.ereaderTrainer)); sub_813601C(); StringExpandPlaceholders(gStringVar4, gOtherText_NewTrainerInHoenn); ctx->data[2] = 2; diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c index 8dff432c1..000bafa4e 100644 --- a/src/engine/record_mixing.c +++ b/src/engine/record_mixing.c @@ -60,7 +60,7 @@ struct PlayerRecords u8 filler1044[0x40]; struct EasyChatPair easyChatPairs[5]; struct RecordMixingDayCareMail filler10AC; - u8 filler1124[0xA4]; + struct BattleTowerRecord battleTowerRecord; u16 filler11C8[0x34]; }; @@ -78,7 +78,7 @@ void RecordMixing_PrepareExchangePacket(void) gUnknown_02038738.mail[1] = gSaveBlock1.daycareData.misc.mail[1]; sub_8041324(gSaveBlock1.daycareData.mons, &gUnknown_02038738); memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixingDayCareMail)); - memcpy(unk_2018000.filler1124, gUnknown_083D0284, sizeof(unk_2018000.filler1124)); + memcpy(&unk_2018000.battleTowerRecord, gUnknown_083D0284, sizeof(struct BattleTowerRecord)); if (GetMultiplayerId() == 0) unk_2018000.filler11C8[0] = GetRecordMixingGift(); @@ -92,7 +92,7 @@ void RecordMixing_ReceiveExchangePacket(u32 a) sub_80B9B1C(unk_2008000.filler1044, sizeof(struct PlayerRecords), a); sub_80FA4E4(unk_2008000.easyChatPairs, sizeof(struct PlayerRecords), a); sub_80B9C6C((u8 *)&unk_2008000.filler10AC, sizeof(struct PlayerRecords), a, unk_2008000.tvShows); - sub_80B9B70(unk_2008000.filler1124, sizeof(struct PlayerRecords), a); + sub_80B9B70(&unk_2008000.battleTowerRecord, sizeof(struct PlayerRecords), a); sub_80B9F3C(unk_2008000.filler11C8, a); } @@ -447,11 +447,11 @@ void sub_80B9B1C(u8 *a, size_t size, u8 index) sub_80F7F30(); } -void sub_80B9B70(u8 *a, size_t size, u8 index) +void sub_80B9B70(void *battleTowerRecord, u32 size, u8 index) { sub_80B9A88(gUnknown_0300071C); - memcpy(a + size * index, a + size * gUnknown_0300071C[index], 0xA4); - sub_8134AC0(a + size * index); + memcpy(battleTowerRecord + size * index, battleTowerRecord + size * gUnknown_0300071C[index], sizeof(struct BattleTowerRecord)); + sub_8134AC0(battleTowerRecord + size * index); } u8 sub_80B9BBC(u16 *a) diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c index bcb62ede6..c8847b258 100644 --- a/src/engine/trainer_card.c +++ b/src/engine/trainer_card.c @@ -311,16 +311,16 @@ static void nullsub_60(u8 taskid) { } -void sub_8093390(struct TrainerCard *arg1) +void sub_8093390(struct TrainerCard *trainerCard) { u32 playTime; bool32 enteredHallOfFame; bool8 r4; u8 i; - arg1->gender = gSaveBlock2.playerGender; - arg1->playTimeHours = gSaveBlock2.playTimeHours; - arg1->playTimeMinutes = gSaveBlock2.playTimeMinutes; + trainerCard->gender = gSaveBlock2.playerGender; + trainerCard->playTimeHours = gSaveBlock2.playTimeHours; + trainerCard->playTimeMinutes = gSaveBlock2.playTimeMinutes; playTime = GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME); enteredHallOfFame = GetGameStat(GAME_STAT_ENTERED_HOF); @@ -328,39 +328,39 @@ void sub_8093390(struct TrainerCard *arg1) { playTime = 0; } - arg1->firstHallOfFameA = playTime >> 16; - arg1->firstHallOfFameB = (playTime >> 8) & 0xFF; - arg1->firstHallOfFameC = playTime & 0xFF; + trainerCard->firstHallOfFameA = playTime >> 16; + trainerCard->firstHallOfFameB = (playTime >> 8) & 0xFF; + trainerCard->firstHallOfFameC = playTime & 0xFF; - arg1->hasPokedex = FlagGet(SYS_POKEDEX_GET); - arg1->var_3 = sub_8090FC0(); - arg1->pokedexSeen = GetPokedexSeenCount(); + trainerCard->hasPokedex = FlagGet(SYS_POKEDEX_GET); + trainerCard->var_3 = sub_8090FC0(); + trainerCard->pokedexSeen = GetPokedexSeenCount(); - arg1->trainerId = (gSaveBlock2.playerTrainerId[1] << 8) | gSaveBlock2.playerTrainerId[0]; + trainerCard->trainerId = (gSaveBlock2.playerTrainerId[1] << 8) | gSaveBlock2.playerTrainerId[0]; // Link Cable Battles - arg1->linkBattleWins = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_WINS, 9999); - arg1->linkBattleLosses = sav12_xor_get_clamped_above(GAME_STAT_LINK_BATTLE_LOSSES, 9999); + 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); // Contests w/ Friends - arg1->contestsWithFriends = sav12_xor_get_clamped_above(GAME_STAT_WON_LINK_CONTEST, 999); + trainerCard->contestsWithFriends = sav12_xor_get_clamped_above(GAME_STAT_WON_LINK_CONTEST, 999); // Pokéblocks w/ Friends - arg1->pokeblocksWithFriends = sav12_xor_get_clamped_above(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF); + trainerCard->pokeblocksWithFriends = sav12_xor_get_clamped_above(GAME_STAT_POKEBLOCKS_WITH_FRIENDS, 0xFFFF); // Pokémon Trades - arg1->pokemonTrades = sav12_xor_get_clamped_above(GAME_STAT_POKEMON_TRADES, 0xFFFF); + trainerCard->pokemonTrades = sav12_xor_get_clamped_above(GAME_STAT_POKEMON_TRADES, 0xFFFF); - // Battle tower? - arg1->battleTowerWins = gSaveBlock2.filler_A8.var_4C8; - arg1->battleTowerLosses = gSaveBlock2.filler_A8.var_4CA; - if (arg1->battleTowerWins > 9999) + // Battle Tower + trainerCard->battleTowerWins = gSaveBlock2.filler_A8.totalBattleTowerWins; + trainerCard->battleTowerLosses = gSaveBlock2.filler_A8.bestBattleTowerWinStreak; + if (trainerCard->battleTowerWins > 9999) { - arg1->battleTowerWins = 9999; + trainerCard->battleTowerWins = 9999; } - if (arg1->battleTowerLosses > 9999) + if (trainerCard->battleTowerLosses > 9999) { - arg1->battleTowerLosses = 9999; + trainerCard->battleTowerLosses = 9999; } r4 = FALSE; @@ -368,21 +368,21 @@ void sub_8093390(struct TrainerCard *arg1) { r4 = TRUE; } - arg1->var_4 = r4; + trainerCard->var_4 = r4; - arg1->money = gSaveBlock1.money; + trainerCard->money = gSaveBlock1.money; for (i = 0; i < 4; i++) { - arg1->var_28[i] = gSaveBlock1.unk2B1C[i]; + trainerCard->var_28[i] = gSaveBlock1.unk2B1C[i]; } for (i = 0; i < 8; i++) { - arg1->playerName[i] = gSaveBlock2.playerName[i]; + trainerCard->playerName[i] = gSaveBlock2.playerName[i]; } - arg1->stars = sub_80934F4(arg1); + trainerCard->stars = sub_80934F4(trainerCard); } u8 sub_80934C4(u8 id) diff --git a/src/field/choose_party.c b/src/field/choose_party.c index f35dcdf56..879139aa4 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -176,7 +176,7 @@ static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn) return TRUE; } - if ((gSaveBlock2.filler_A8.var_4AC & 1) == 0 + if ((gSaveBlock2.filler_A8.battleTowerLevelType) == 0 && GetMonData(pkmn, MON_DATA_LEVEL) > 50) return FALSE; diff --git a/src/field/tv.c b/src/field/tv.c index e9b5e850d..89e978d00 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -675,11 +675,11 @@ void sub_80BE320(void) bravoTrainerTower->var01 = 1; StringCopy(bravoTrainerTower->trainerName, gSaveBlock2.playerName); StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.filler_A8.filler_3DC); - bravoTrainerTower->species = gSaveBlock2.filler_A8.var_480; - bravoTrainerTower->defeatedSpecies = gSaveBlock2.filler_A8.var_482; - bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.filler_A8.var_4D0); + bravoTrainerTower->species = gSaveBlock2.filler_A8.firstMonSpecies; + bravoTrainerTower->defeatedSpecies = gSaveBlock2.filler_A8.defeatedBySpecies; + bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.filler_A8.lastStreakLevelType); bravoTrainerTower->var1c = gSaveBlock2.filler_A8.var_4AD; - if (gSaveBlock2.filler_A8.var_4D0 == 0) + if (gSaveBlock2.filler_A8.lastStreakLevelType == 0) bravoTrainerTower->btLevel = 50; else bravoTrainerTower->btLevel = 100; -- cgit v1.2.3 From 37af50d1e2139f46e1f31c4b662fa51a2872c820 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 22 Oct 2017 14:37:52 -0700 Subject: decompile 2 battle_tower funcs --- src/battle_tower.c | 454 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 454 insertions(+) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 90884ec98..3ba522fe5 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1,10 +1,20 @@ #include "global.h" #include "battle_tower.h" +#include "data2.h" #include "event_data.h" #include "map_object_constants.h" +#include "pokedex.h" #include "rng.h" +#include "string_util.h" +#include "text.h" #include "vars.h" +extern u8 gUnknown_08400E23[]; +extern u8 gUnknown_08400E29[]; +extern u8 gUnknown_08400E2E[]; +extern u8 gUnknown_08400E30[]; + +extern u16 gBattleTowerBanlist[]; extern u8 gTrainerClassToPicIndex[]; extern u8 gTrainerClassToNameIndex[]; extern u8 gUnknown_08405EB0[]; @@ -1116,3 +1126,447 @@ void get_trainer_name(u8* dest) dest[i] = 0xFF; } + +__attribute__((naked)) +void sub_8134DD4(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x28\n\ + movs r0, 0\n\ + str r0, [sp, 0x18]\n\ + movs r1, 0x3C\n\ + str r1, [sp, 0x1C]\n\ + add r4, sp, 0xC\n\ + movs r0, 0xFF\n\ + strb r0, [r4]\n\ + bl ZeroEnemyPartyMons\n\ + ldr r1, _08134E04 @ =gSaveBlock2\n\ + ldr r2, _08134E08 @ =0x00000564\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x13\n\ + bhi _08134E0C\n\ + movs r3, 0x6\n\ + str r3, [sp, 0x14]\n\ + b _08134ED8\n\ + .align 2, 0\n\ +_08134E04: .4byte gSaveBlock2\n\ +_08134E08: .4byte 0x00000564\n\ +_08134E0C:\n\ + cmp r0, 0x1D\n\ + bhi _08134E1A\n\ + movs r0, 0x9\n\ + str r0, [sp, 0x14]\n\ + movs r1, 0x1E\n\ + str r1, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E1A:\n\ + cmp r0, 0x27\n\ + bhi _08134E28\n\ + movs r2, 0xC\n\ + str r2, [sp, 0x14]\n\ + movs r3, 0x3C\n\ + str r3, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E28:\n\ + cmp r0, 0x31\n\ + bhi _08134E36\n\ + movs r0, 0xF\n\ + str r0, [sp, 0x14]\n\ + movs r1, 0x5A\n\ + str r1, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E36:\n\ + cmp r0, 0x3B\n\ + bhi _08134E44\n\ + movs r2, 0x12\n\ + str r2, [sp, 0x14]\n\ + movs r3, 0x78\n\ + str r3, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E44:\n\ + cmp r0, 0x45\n\ + bhi _08134E52\n\ + movs r0, 0x15\n\ + str r0, [sp, 0x14]\n\ + movs r1, 0x96\n\ + str r1, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E52:\n\ + cmp r0, 0x4F\n\ + bhi _08134E60\n\ + movs r2, 0x1F\n\ + str r2, [sp, 0x14]\n\ + movs r3, 0xB4\n\ + str r3, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E60:\n\ + cmp r0, 0x63\n\ + bhi _08134E72\n\ + movs r0, 0x1F\n\ + str r0, [sp, 0x14]\n\ + movs r1, 0xC8\n\ + str r1, [sp, 0x18]\n\ + movs r2, 0x64\n\ + str r2, [sp, 0x1C]\n\ + b _08134ED8\n\ +_08134E72:\n\ + cmp r0, 0xC8\n\ + bne _08134E9C\n\ + movs r6, 0\n\ +_08134E78:\n\ + movs r0, 0x64\n\ + muls r0, r6\n\ + ldr r1, _08134E94 @ =gEnemyParty\n\ + adds r0, r1\n\ + movs r1, 0x2C\n\ + muls r1, r6\n\ + ldr r2, _08134E98 @ =gSaveBlock2 + 0x4CC\n\ + adds r1, r2\n\ + bl sub_803ADE8\n\ + adds r6, 0x1\n\ + cmp r6, 0x2\n\ + ble _08134E78\n\ + b _08135082\n\ + .align 2, 0\n\ +_08134E94: .4byte gEnemyParty\n\ +_08134E98: .4byte gSaveBlock2 + 0x4CC\n\ +_08134E9C:\n\ + movs r6, 0\n\ + adds r4, r1, 0\n\ + ldr r3, _08134ECC @ =0xffffc158\n\ + adds r5, r4, r3\n\ +_08134EA4:\n\ + movs r0, 0x64\n\ + muls r0, r6\n\ + ldr r1, _08134ED0 @ =gEnemyParty\n\ + adds r0, r1\n\ + ldr r2, _08134ED4 @ =0x00000564\n\ + adds r1, r4, r2\n\ + ldrb r2, [r1]\n\ + movs r1, 0xA4\n\ + muls r1, r2\n\ + adds r1, r5\n\ + movs r2, 0x2C\n\ + muls r2, r6\n\ + adds r1, r2\n\ + bl sub_803ADE8\n\ + adds r6, 0x1\n\ + cmp r6, 0x2\n\ + ble _08134EA4\n\ + b _08135082\n\ + .align 2, 0\n\ +_08134ECC: .4byte 0xffffc158\n\ +_08134ED0: .4byte gEnemyParty\n\ +_08134ED4: .4byte 0x00000564\n\ +_08134ED8:\n\ + ldr r2, _08134EF4 @ =gSaveBlock2\n\ + ldr r3, _08134EF8 @ =0x00000554\n\ + adds r0, r2, r3\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + adds r1, r2, 0\n\ + cmp r0, 0\n\ + beq _08134F00\n\ + ldr r0, _08134EFC @ =gBattleTowerLevel100Mons\n\ + mov r10, r0\n\ + movs r2, 0x64\n\ + str r2, [sp, 0x10]\n\ + b _08134F08\n\ + .align 2, 0\n\ +_08134EF4: .4byte gSaveBlock2\n\ +_08134EF8: .4byte 0x00000554\n\ +_08134EFC: .4byte gBattleTowerLevel100Mons\n\ +_08134F00:\n\ + ldr r3, _08134F54 @ =gBattleTowerLevel50Mons\n\ + mov r10, r3\n\ + movs r0, 0x32\n\ + str r0, [sp, 0x10]\n\ +_08134F08:\n\ + ldr r2, _08134F58 @ =gBattleTowerTrainers\n\ + ldr r3, _08134F5C @ =0x00000564\n\ + adds r0, r1, r3\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 3\n\ + adds r0, r2\n\ + ldrb r0, [r0, 0x9]\n\ + str r0, [sp, 0x20]\n\ + movs r6, 0\n\ +_08134F1E:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + ldr r2, [sp, 0x1C]\n\ + adds r0, r1, 0\n\ + muls r0, r2\n\ + asrs r0, 8\n\ + ldr r3, [sp, 0x18]\n\ + adds r7, r0, r3\n\ + ldr r0, [sp, 0x20]\n\ + cmp r0, 0\n\ + beq _08134F48\n\ + lsls r0, r7, 4\n\ + add r0, r10\n\ + ldrb r0, [r0, 0x3]\n\ + ldr r1, [sp, 0x20]\n\ + ands r0, r1\n\ + cmp r0, r1\n\ + beq _08134F48\n\ + b _0813507C\n\ +_08134F48:\n\ + movs r5, 0\n\ + lsls r0, r7, 4\n\ + mov r2, r10\n\ + adds r3, r0, r2\n\ + movs r4, 0\n\ + b _08134F64\n\ + .align 2, 0\n\ +_08134F54: .4byte gBattleTowerLevel50Mons\n\ +_08134F58: .4byte gBattleTowerTrainers\n\ +_08134F5C: .4byte 0x00000564\n\ +_08134F60:\n\ + adds r4, 0x64\n\ + adds r5, 0x1\n\ +_08134F64:\n\ + cmp r5, r6\n\ + bge _08134F7E\n\ + ldr r1, _08135094 @ =gEnemyParty\n\ + adds r0, r4, r1\n\ + movs r1, 0xB\n\ + movs r2, 0\n\ + str r3, [sp, 0x24]\n\ + bl GetMonData\n\ + ldr r3, [sp, 0x24]\n\ + ldrh r2, [r3]\n\ + cmp r0, r2\n\ + bne _08134F60\n\ +_08134F7E:\n\ + cmp r5, r6\n\ + bne _0813507C\n\ + movs r5, 0\n\ + cmp r5, r6\n\ + bge _08134FCC\n\ + ldr r3, _08135098 @ =gBattleTowerHeldItems\n\ + mov r9, r3\n\ + lsls r0, r7, 4\n\ + add r0, r10\n\ + mov r8, r0\n\ + movs r3, 0\n\ +_08134F94:\n\ + ldr r0, _08135094 @ =gEnemyParty\n\ + adds r4, r3, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + movs r2, 0\n\ + str r3, [sp, 0x24]\n\ + bl GetMonData\n\ + ldr r3, [sp, 0x24]\n\ + cmp r0, 0\n\ + beq _08134FC4\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + movs r2, 0\n\ + bl GetMonData\n\ + mov r2, r8\n\ + ldrb r1, [r2, 0x2]\n\ + lsls r1, 1\n\ + add r1, r9\n\ + ldr r3, [sp, 0x24]\n\ + ldrh r1, [r1]\n\ + cmp r0, r1\n\ + beq _08134FCC\n\ +_08134FC4:\n\ + adds r3, 0x64\n\ + adds r5, 0x1\n\ + cmp r5, r6\n\ + blt _08134F94\n\ +_08134FCC:\n\ + cmp r5, r6\n\ + bne _0813507C\n\ + movs r5, 0\n\ + cmp r5, r6\n\ + bge _08134FEE\n\ + add r0, sp, 0x4\n\ + ldrh r0, [r0]\n\ + cmp r0, r7\n\ + beq _08134FEE\n\ + add r1, sp, 0x4\n\ +_08134FE0:\n\ + adds r1, 0x2\n\ + adds r5, 0x1\n\ + cmp r5, r6\n\ + bge _08134FEE\n\ + ldrh r0, [r1]\n\ + cmp r0, r7\n\ + bne _08134FE0\n\ +_08134FEE:\n\ + cmp r5, r6\n\ + bne _0813507C\n\ + lsls r0, r6, 1\n\ + add r0, sp\n\ + adds r0, 0x4\n\ + strh r7, [r0]\n\ + movs r3, 0x64\n\ + adds r0, r6, 0\n\ + muls r0, r3\n\ + ldr r1, _08135094 @ =gEnemyParty\n\ + adds r0, r1\n\ + lsls r4, r7, 4\n\ + mov r3, r10\n\ + adds r2, r4, r3\n\ + ldrh r1, [r2]\n\ + ldrb r2, [r2, 0xC]\n\ + str r2, [sp]\n\ + ldr r2, [sp, 0x10]\n\ + ldr r3, [sp, 0x14]\n\ + bl CreateMonWithEVSpread\n\ + movs r5, 0\n\ + adds r0, r6, 0x1\n\ + mov r9, r0\n\ + mov r8, r4\n\ + movs r0, 0x64\n\ + adds r7, r6, 0\n\ + muls r7, r0\n\ + mov r0, r10\n\ + adds r0, 0x4\n\ + adds r4, r0\n\ + ldr r3, _08135094 @ =gEnemyParty\n\ +_0813502E:\n\ + ldrh r1, [r4]\n\ + lsls r2, r5, 24\n\ + lsrs r2, 24\n\ + adds r0, r7, r3\n\ + str r3, [sp, 0x24]\n\ + bl SetMonMoveSlot\n\ + ldrh r0, [r4]\n\ + ldr r3, [sp, 0x24]\n\ + cmp r0, 0xDA\n\ + bne _0813504A\n\ + movs r0, 0\n\ + mov r1, sp\n\ + strb r0, [r1, 0xC]\n\ +_0813504A:\n\ + adds r4, 0x2\n\ + adds r5, 0x1\n\ + cmp r5, 0x3\n\ + ble _0813502E\n\ + movs r2, 0x64\n\ + adds r4, r6, 0\n\ + muls r4, r2\n\ + ldr r3, _08135094 @ =gEnemyParty\n\ + adds r4, r3\n\ + adds r0, r4, 0\n\ + movs r1, 0x20\n\ + add r2, sp, 0xC\n\ + bl SetMonData\n\ + mov r0, r8\n\ + add r0, r10\n\ + ldrb r2, [r0, 0x2]\n\ + lsls r2, 1\n\ + ldr r0, _08135098 @ =gBattleTowerHeldItems\n\ + adds r2, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + bl SetMonData\n\ + mov r6, r9\n\ +_0813507C:\n\ + cmp r6, 0x3\n\ + beq _08135082\n\ + b _08134F1E\n\ +_08135082:\n\ + add sp, 0x28\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08135094: .4byte gEnemyParty\n\ +_08135098: .4byte gBattleTowerHeldItems\n\ +.syntax divided\n"); +} + +u32 CountBattleTowerBanlistCaught() +{ + s32 i; + u32 numCaught = 0; + + for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++) + { + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBanlist[i]), FLAG_GET_CAUGHT)) + { + numCaught++; + } + } + + return numCaught; +} + +u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numToAppend) +{ + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) + { + curIndexToAppend++; + + switch (curIndexToAppend - 1) + { + case 0: + case 2: + case 4: + case 6: + case 8: + case 10: + if (numToAppend == curIndexToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else if (numToAppend > curIndexToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + break; + case 1: + if (curIndexToAppend == numToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + + StringAppend(gStringVar1, gUnknown_08400E30); + break; + case 3: + case 5: + case 7: + case 9: + default: + if (curIndexToAppend == numToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + + StringAppend(gStringVar1, gUnknown_08400E2E); + break; + } + + StringAppend(gStringVar1, gSpeciesNames[species]); + } + + return curIndexToAppend; +} -- cgit v1.2.3 From 33f679d08e2efa07826389c6dce089cd407323d7 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 22 Oct 2017 15:26:28 -0700 Subject: Move battle_tower trainer data to src/ --- src/battle_tower.c | 6 +- src/data/battle_tower/trainers.h | 1403 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 1408 insertions(+), 1 deletion(-) create mode 100644 src/data/battle_tower/trainers.h (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 3ba522fe5..a9d79df17 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1,14 +1,19 @@ #include "global.h" #include "battle_tower.h" #include "data2.h" +#include "easy_chat.h" #include "event_data.h" #include "map_object_constants.h" +#include "moves.h" #include "pokedex.h" #include "rng.h" #include "string_util.h" #include "text.h" +#include "trainer.h" #include "vars.h" +#include "data/battle_tower/trainers.h" + extern u8 gUnknown_08400E23[]; extern u8 gUnknown_08400E29[]; extern u8 gUnknown_08400E2E[]; @@ -21,7 +26,6 @@ extern u8 gUnknown_08405EB0[]; extern u8 gUnknown_08405E7E[]; extern u8 gUnknown_08405E92[]; extern u8 gUnknown_08405E60[]; -extern struct BattleTowerTrainer gBattleTowerTrainers[]; extern void sub_8135C44(void); extern void sub_813601C(void); diff --git a/src/data/battle_tower/trainers.h b/src/data/battle_tower/trainers.h new file mode 100644 index 000000000..857231e61 --- /dev/null +++ b/src/data/battle_tower/trainers.h @@ -0,0 +1,1403 @@ +const struct BattleTowerTrainer gBattleTowerTrainers[] = +{ + { + .trainerClass = TRAINER_CLASS_YOUNGSTER, + .name = _("ALVIN"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_READY, + EC_WORD_QUES, + EC_WORD_HERE_I_COME, + EC_WORD_EXCL, + }, + }, + { + .trainerClass = TRAINER_CLASS_BIRD_KEEPER, + .name = _("DIRK"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_OKAY, + EC_WORD_I_AM, + EC_WORD_GOING, + EC_WORD_FOR, + EC_WORD_IT, + EC_WORD_EXCL, + }, + }, + { + .trainerClass = TRAINER_CLASS_LADY, + .name = _("CYBIL"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_A, + EC_WORD_PUSHOVER, + EC_WORD_LET_S, + EC_WORD_GET, + EC_WORD_GOING, + }, + }, + { + .trainerClass = TRAINER_CLASS_BLACK_BELT, + .name = _("CHEN"), + .teamFlags = 0x05, + .padding = 0, + .easyChat = { + EC_WORD_MY, + EC_WORD_SPIRIT, + EC_WORD_IS, + EC_WORD_ENOUGH, + EC_WORD_SNORT, + EC_WORD_ARRGH, + }, + }, + { + .trainerClass = TRAINER_CLASS_NINJA_BOY, + .name = _("YOSHI"), + .teamFlags = 0x05, + .padding = 0, + .easyChat = { + EC_WORD_GO, + EC_WORD_MY, + EC_WORD_POKEMON, + EC_WORD_FIGHT, + EC_WORD_THE, + EC_WORD_BATTLE, + }, + }, + { + .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, + .name = _("TINA"), + .teamFlags = 0x0A, + .padding = 0, + .easyChat = { + EC_WORD_STUDY, + EC_WORD_IS, + EC_WORD_BORING, + EC_WORD_LET_S, + EC_WORD_BATTLE, + EC_WORD_NOW, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .name = _("COREY"), + .teamFlags = 0x41, + .padding = 0, + .easyChat = { + EC_WORD_HEY, + EC_WORD_I, + EC_WORD_WILL, + EC_MOVE2(TRANSFORM), + EC_WORD_FOR, + EC_MOVE(STRENGTH), + }, + }, + { + .trainerClass = TRAINER_CLASS_FISHERMAN, + .name = _("GORDON"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_NEED, + EC_WORD_A, + EC_WORD_VACATION, + EC_WORD_RIGHT, + EC_WORD_NOW, + }, + }, + { + .trainerClass = TRAINER_CLASS_TUBER_F, + .name = _("ANN"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_WE, + EC_WORD_ALL, + EC_WORD_ADORE, + EC_WORD_POKEMON, + EC_WORD_ABSOLUTELY, + EC_WORD_TRULY, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_F, + .name = _("JULIA"), + .teamFlags = 0x42, + .padding = 0, + .easyChat = { + EC_WORD_I_AM, + EC_WORD_A, + EC_WORD_CUTE, + EC_WORD_LADY, + EC_WORD_YES, + EC_WORD_I_AM, + }, + }, + { + .trainerClass = TRAINER_CLASS_GENTLEMAN, + .name = _("GREGORY"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_THINK, + EC_WORD_WE, + EC_WORD_SHOULD, + EC_WORD_START, + EC_WORD_TODAY, + }, + }, + { + .trainerClass = TRAINER_CLASS_CAMPER, + .name = _("KEITH"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_MY, + EC_WORD_FRIEND, + EC_WORD_FROM, + EC_WORD_NOW, + EC_WORD_ON, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, + .name = _("KENDRA"), + .teamFlags = 0x0A, + .padding = 0, + .easyChat = { + EC_WORD_I_AM, + EC_MOVE(SWIFT), + EC_WORD_HOW, + EC_WORD_ABOUT, + EC_WORD_YOU, + EC_WORD_QUES, + }, + }, + { + .trainerClass = TRAINER_CLASS_HIKER, + .name = _("DEV"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_WAHAHAHA, + EC_WORD_I_AM, + EC_WORD_FEELING, + EC_WORD_LIKE, + EC_WORD_IT_S, + EC_MOVE2(PAY_DAY), + }, + }, + { + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .name = _("CASSIE"), + .teamFlags = 0x0A, + .padding = 0, + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_STRONG, + EC_WORD_AREN_T, + 0xFFFF, + EC_WORD_YOU, + EC_WORD_QUES, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_M, + .name = _("JULIAN"), + .teamFlags = 0x05, + .padding = 0, + .easyChat = { + EC_WORD_FUFUFU, + 0xFFFF, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_WIN, + EC_WORD_KID, + }, + }, + { + .trainerClass = TRAINER_CLASS_LASS, + .name = _("JOYCE"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_BE, + EC_WORD_KIND, + EC_WORD_TO, + EC_WORD_THE, + EC_WORD_DIGITAL, + EC_WORD_IDOL, + }, + }, + { + .trainerClass = TRAINER_CLASS_GUITARIST, + .name = _("LES"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_I_AM, + EC_WORD_GREAT, + EC_WORD_YOU_RE, + EC_WORD_JUST, + EC_WORD_RATHER, + EC_WORD_OKAY, + }, + }, + { + .trainerClass = TRAINER_CLASS_RICH_BOY, + .name = _("CLINTON"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_HAVE, + EC_WORD_ROUGH_SKIN, + EC_WORD_I, + EC_WORD_NEED, + EC_WORD_NATURAL_CURE, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_CATCHER, + .name = _("LEWIS"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_THIS, + EC_WORD_IS, + EC_WORD_EXCITING, + EC_WORD_CAN, + EC_WORD_I, + EC_WORD_WIN, + }, + }, + { + .trainerClass = TRAINER_CLASS_PICNICKER, + .name = _("RACHAEL"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_LIKE, + EC_WORD_WALKING, + EC_WORD_WITH, + EC_WORD_MY, + EC_WORD_POKEMON, + }, + }, + { + .trainerClass = TRAINER_CLASS_COLLECTOR, + .name = _("HAROLD"), + .teamFlags = 0x09, + .padding = 0, + .easyChat = { + EC_WORD_HERE, + EC_WORD_THEY, + EC_WORD_COME, + EC_WORD_MY, + EC_MOVE2(SUPERPOWER), + EC_WORD_POKEMON, + }, + }, + { + .trainerClass = TRAINER_CLASS_TUBER_M, + .name = _("KIPP"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_I_AM, + EC_WORD_A, + EC_WORD_GENIUS, + EC_WORD_I, + EC_WORD_SHOULD, + EC_WORD_WIN, + }, + }, + { + .trainerClass = TRAINER_CLASS_KINDLER, + .name = _("IRWIN"), + .teamFlags = 0x05, + .padding = 0, + .easyChat = { + EC_WORD_YOU, + EC_WORD_WILL, + EC_WORD_BE, + EC_WORD_FEELING, + EC_WORD_MY, + EC_WORD_FIRE, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_F, + .name = _("EILEEN"), + .teamFlags = 0x0A, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_WILL, + EC_MOVE(ASTONISH), + EC_WORD_YOU, + EC_WORD_IN, + EC_WORD_BATTLE, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_F, + .name = _("ANNE"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_SORRY, + EC_WORD_BUT, + EC_WORD_YOU, + EC_WORD_WILL, + EC_WORD_NOT, + EC_WORD_WIN, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, + .name = _("RUTH"), + .teamFlags = 0x06, + .padding = 0, + .easyChat = { + EC_WORD_A, + EC_WORD_STRONG, + EC_WORD_GIRL, + EC_WORD_WANTS, + EC_WORD_TOUGH, + EC_WORD_POKEMON, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMANIAC, + .name = _("JEREMY"), + .teamFlags = 0x40, + .padding = 0, + .easyChat = { + EC_WORD_MY, + EC_WORD_POKEMON, + EC_WORD_ARE, + EC_WORD_COOL, + EC_WORD_YOURS, + EC_WORD_CAN_T_WIN, + }, + }, + { + .trainerClass = TRAINER_CLASS_SAILOR, + .name = _("TREVOR"), + .teamFlags = 0x09, + .padding = 0, + .easyChat = { + EC_WORD_MY, + EC_WORD_OPPONENT, + EC_WORD_IS, + EC_WORD_FINALLY, + EC_WORD_HERE, + EC_WORD_EXCELLENT, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, + .name = _("COLETTE"), + .teamFlags = 0x06, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_AM, + EC_WORD_HUNGRY, + EC_MOVE2(POUND), + EC_WORD_MY, + EC_MOVE2(BELLY_DRUM), + }, + }, + { + .trainerClass = TRAINER_CLASS_HEX_MANIAC, + .name = _("PAULA"), + .teamFlags = 0x42, + .padding = 0, + .easyChat = { + EC_WORD_IT_S, + EC_WORD_HARD, + EC_WORD_TO, + EC_WORD_TAKE, + EC_WORD_UGLY, + EC_MOVE(SPITE), + }, + }, + { + .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .name = _("STANLY"), + .teamFlags = 0x41, + .padding = 0, + .easyChat = { + EC_WORD_ADVENTURE, + EC_WORD_AND, + EC_WORD_BATTLE, + EC_WORD_ARE, + EC_WORD_MY, + EC_WORD_LIKES, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .name = _("TROY"), + .teamFlags = 0x09, + .padding = 0, + .easyChat = { + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_LOSE, + EC_WORD_TO, + EC_WORD_A, + EC_WORD_KID, + }, + }, + { + .trainerClass = TRAINER_CLASS_SCHOOL_KID_M, + .name = _("ED"), + .teamFlags = 0x08, + .padding = 0, + .easyChat = { + EC_WORD_POKEMON, + EC_WORD_DAILY, + EC_WORD_AT, + EC_WORD_SCHOOL, + EC_WORD_IT_S, + EC_WORD_AWESOME, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, + .name = _("ELLEN"), + .teamFlags = 0x04, + .padding = 0, + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_KIND, + EC_WORD_TO, + EC_WORD_YOUR, + EC_WORD_POKEMON, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_M, + .name = _("ARNIE"), + .teamFlags = 0x09, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_BATTLE, + EC_WORD_SERIOUSLY, + EC_WORD_BEAUTIFUL, + EC_WORD_YOU, + EC_MOVE(DIG), + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, + .name = _("HAL"), + .teamFlags = 0x09, + .padding = 0, + .easyChat = { + EC_WORD_BOY, + EC_WORD_I_AM, + EC_WORD_TIRED, + EC_WORD_READY, + EC_WORD_FOR, + EC_WORD_SLEEP, + }, + }, + { + .trainerClass = TRAINER_CLASS_BEAUTY, + .name = _("LAUREN"), + .teamFlags = 0x06, + .padding = 0, + .easyChat = { + EC_WORD_A, + EC_WORD_TRAINER, + EC_WORD_LIKE, + EC_WORD_YOU, + EC_WORD_IS, + EC_WORD_EXCITING, + }, + }, + { + .trainerClass = TRAINER_CLASS_AROMA_LADY, + .name = _("STACY"), + .teamFlags = 0x06, + .padding = 0, + .easyChat = { + EC_WORD_HAVE, + EC_WORD_YOU, + EC_WORD_A, + EC_WORD_STENCH, + EC_WORD_OR, + EC_MOVE(SWEET_SCENT), + }, + }, + { + .trainerClass = TRAINER_CLASS_COLLECTOR, + .name = _("DARYL"), + .teamFlags = 0x81, + .padding = 0, + .easyChat = { + EC_WORD_YOUR, + EC_WORD_POKEMON, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_I, + EC_WORD_WANT, + EC_WORD_IT, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + .name = _("KATHY"), + .teamFlags = 0x04, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_WILL, + EC_WORD_TRY, + EC_WORD_MY, + EC_WORD_BEST, + EC_WORD_TODAY, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, + .name = _("HARRIS"), + .teamFlags = 0x0C, + .padding = 0, + .easyChat = { + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_EHEHE, + EC_MOVE(FAKE_TEARS), + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_M, + .name = _("GLENN"), + .teamFlags = 0x80, + .padding = 0, + .easyChat = { + EC_WORD_LISTEN, + EC_WORD_TO, + EC_WORD_MY, + EC_WORD_LOUSY, + EC_WORD_ANIME, + EC_WORD_SONG, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, + .name = _("NICO"), + .teamFlags = 0x04, + .padding = 0, + .easyChat = { + EC_WORD_DON_T, + EC_WORD_JUST, + EC_WORD_BATTLE, + EC_WORD_DO, + EC_WORD_SOMETHING, + EC_WORD_ELSE, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, + .name = _("BAILEY"), + .teamFlags = 0x41, + .padding = 0, + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_BUSY, + EC_WORD_GET, + EC_WORD_WITH, + EC_WORD_IT, + }, + }, + { + .trainerClass = TRAINER_CLASS_PARASOL_LADY, + .name = _("ABBIE"), + .teamFlags = 0x08, + .padding = 0, + .easyChat = { + EC_WORD_THE, + EC_MOVE(MORNING_SUN), + EC_WORD_HAS, + EC_WORD_SO, + EC_WORD_MUCH, + EC_MOVE(COSMIC_POWER), + }, + }, + { + .trainerClass = TRAINER_CLASS_CAMPER, + .name = _("AL"), + .teamFlags = 0x0C, + .padding = 0, + .easyChat = { + EC_WORD_LET_S, + EC_WORD_HAVE, + EC_WORD_AN, + EC_WORD_EXCITING, + EC_WORD_BATTLE, + EC_WORD_YEEHAW_EXCL, + }, + }, + { + .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, + .name = _("PEGGY"), + .teamFlags = 0x42, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_WANT, + EC_WORD_TO, + EC_WORD_SEE, + EC_WORD_SOME, + EC_MOVE(GROWTH), + }, + }, + { + .trainerClass = TRAINER_CLASS_BEAUTY, + .name = _("NAOMI"), + .teamFlags = 0x04, + .padding = 0, + .easyChat = { + EC_WORD_IT, + EC_WORD_WAS, + EC_WORD_GREAT, + EC_WORD_TO, + EC_WORD_BE, + EC_WORD_YOUNG, + }, + }, + { + .trainerClass = TRAINER_CLASS_NINJA_BOY, + .name = _("KENJI"), + .teamFlags = 0x0C, + .padding = 0, + .easyChat = { + EC_WORD_PLEASE, + 0xFFFF, + EC_WORD_DON_T, + EC_WORD_BE, + EC_WORD_MEAN, + EC_WORD_TO_ME, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, + .name = _("ROSS"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_WAKE_UP, + EC_WORD_MY, + EC_MOVE2(HIDDEN_POWER), + EC_WORD_AND, + EC_MOVE(ASTONISH), + EC_WORD_ME, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, + .name = _("EDNA"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_BATTLE_TOWER, + EC_WORD_IS, + EC_WORD_SO, + EC_WORD_ENTERTAINING, + EC_WORD_IT_S, + EC_WORD_AWESOME, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .name = _("ANTON"), + .teamFlags = 0x41, + .padding = 0, + .easyChat = { + EC_WORD_BLEND, + EC_WORD_THICK_FAT, + EC_WORD_AND, + EC_WORD_CHLOROPHYLL, + EC_WORD_IT_S, + EC_WORD_TASTY, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_M, + .name = _("MITCH"), + .teamFlags = 0x81, + .padding = 0, + .easyChat = { + EC_WORD_NEXT, + EC_WORD_A, + EC_WORD_GIRL, + EC_WORD_WITH, + EC_WORD_A, + EC_MOVE(SCARY_FACE), + }, + }, + { + .trainerClass = TRAINER_CLASS_HEX_MANIAC, + .name = _("ROD"), + .teamFlags = 0x42, + .padding = 0, + .easyChat = { + EC_WORD_GIMME, + EC_WORD_A, + EC_WORD_TOUGH, + EC_WORD_BATTLE, + EC_WORD_NOT, + EC_WORD_WIMPY, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, + .name = _("RICH"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_TASTY, + EC_WORD_WATER, + EC_WORD_IS, + EC_WORD_HIP_AND, + EC_WORD_HAPPENING, + EC_WORD_YES_SIR_EXCL, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_M, + .name = _("DANIEL"), + .teamFlags = 0x80, + .padding = 0, + .easyChat = { + EC_WORD_GO, + EC_WORD_FOR, + EC_WORD_IT, + EC_WORD_MY, + EC_WORD_LOVEY_DOVEY, + EC_WORD_POKEMON, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_F, + .name = _("GLORIA"), + .teamFlags = 0x82, + .padding = 0, + .easyChat = { + EC_WORD_LET_S, + EC_WORD_GET, + EC_WORD_THIS, + EC_WORD_FIERY, + EC_WORD_BATTLE, + EC_WORD_HAPPENING, + }, + }, + { + .trainerClass = TRAINER_CLASS_GUITARIST, + .name = _("NELSON"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_MUSIC, + EC_WORD_IS, + EC_WORD_MY, + EC_WORD_ALL, + EC_WORD_MY, + EC_WORD_DESTINY, + }, + }, + { + .trainerClass = TRAINER_CLASS_KINDLER, + .name = _("FERRIS"), + .teamFlags = 0x41, + .padding = 0, + .easyChat = { + EC_WORD_GOOD, + EC_WORD_IT, + EC_WORD_IS, + EC_WORD_SO, + EC_WORD_VERY, + EC_WORD_GOOD, + }, + }, + { + .trainerClass = TRAINER_CLASS_AROMA_LADY, + .name = _("AMANDA"), + .teamFlags = 0x82, + .padding = 0, + .easyChat = { + EC_WORD_WHAT, + EC_WORD_KIND, + EC_WORD_OF, + EC_WORD_TRAINER, + EC_WORD_ARE, + EC_WORD_YOU, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .name = _("MASON"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_DON_T, + EC_WORD_KNOW, + EC_WORD_HOW, + EC_WORD_TO, + EC_WORD_LOSE, + }, + }, + { + .trainerClass = TRAINER_CLASS_DRAGON_TAMER, + .name = _("NATE"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_DRAGON, + EC_WORD_POKEMON, + EC_WORD_ARE, + EC_WORD_ALL, + EC_WORD_THE, + EC_MOVE(RAGE), + }, + }, + { + .trainerClass = TRAINER_CLASS_LASS, + .name = _("MIRIAM"), + .teamFlags = 0x82, + .padding = 0, + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_TOO_STRONG, + EC_WORD_SERIOUSLY, + EC_WORD_IT_S, + EC_WORD_BAD, + EC_WORD_NEWS, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMANIAC, + .name = _("THEO"), + .teamFlags = 0x40, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_ADORE, + EC_WORD_MY, + EC_WORD_MEGA, + EC_WORD_CUTE, + EC_WORD_PLUSH_DOLL, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + .name = _("PAMELA"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_HERE_I_COME, + EC_WORD_I_AM, + EC_WORD_THE, + EC_WORD_CUTE, + EC_MOVE2(WATER_SPORT), + EC_WORD_IDOL, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_F, + .name = _("ALISSA"), + .teamFlags = 0x20, + .padding = 0, + .easyChat = { + EC_WORD_IT_S, + EC_WORD_A, + EC_WORD_PREPOSTEROUS, + EC_WORD_MATCH, + EC_WORD_I_AM, + EC_WORD_SHOCKED, + }, + }, + { + .trainerClass = TRAINER_CLASS_GENTLEMAN, + .name = _("ARTHUR"), + .teamFlags = 0x20, + .padding = 0, + .easyChat = { + EC_WORD_PLEASE, + EC_WORD_GIVE, + EC_WORD_ME, + EC_WORD_A, + EC_WORD_GOOD, + EC_WORD_BATTLE, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_F, + .name = _("MARCY"), + .teamFlags = 0x82, + .padding = 0, + .easyChat = { + EC_WORD_I_AM, + EC_WORD_BEAUTIFUL, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_BEAT, + EC_WORD_ME, + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, + .name = _("MILLER"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_BATTLE, + EC_WORD_DAILY, + EC_WORD_I, + EC_WORD_WON_T, + EC_WORD_LOSE, + }, + }, + { + .trainerClass = TRAINER_CLASS_BIRD_KEEPER, + .name = _("OLIVER"), + .teamFlags = 0x11, + .padding = 0, + .easyChat = { + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_GIGGLE, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + 0xFFFF, + 0xFFFF, + 0xFFFF, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, + .name = _("MOLLY"), + .teamFlags = 0x12, + .padding = 0, + .easyChat = { + EC_WORD_HOW, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_ON, + EC_WORD_MONDAY, + EC_WORD_MORNING, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .name = _("JASON"), + .teamFlags = 0x40, + .padding = 0, + .easyChat = { + EC_WORD_WATER, + EC_WORD_AND, + EC_WORD_BUG, + EC_WORD_POKEMON, + EC_WORD_ARE, + EC_WORD_GREAT, + }, + }, + { + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .name = _("AVA"), + .teamFlags = 0x20, + .padding = 0, + .easyChat = { + EC_WORD_WHAT, + EC_WORD_IS, + EC_WORD_THIS, + EC_WORD_PRESSURE, + EC_WORD_ELLIPSIS, + EC_WORD_STATIC, + }, + }, + { + .trainerClass = TRAINER_CLASS_FISHERMAN, + .name = _("HANK"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_A, + EC_WORD_KID, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_WIN, + }, + }, + { + .trainerClass = TRAINER_CLASS_SAILOR, + .name = _("PETER"), + .teamFlags = 0x20, + .padding = 0, + .easyChat = { + EC_WORD_IT_S, + EC_WORD_SERIOUSLY, + EC_WORD_TERRIBLE, + EC_WORD_I, + EC_WORD_REALLY, + EC_WORD_THINK, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_F, + .name = _("MINDY"), + .teamFlags = 0x20, + .padding = 0, + .easyChat = { + EC_WORD_YOU, + EC_WORD_APPEAR, + EC_WORD_TO, + EC_WORD_TRAIN, + EC_WORD_VERY, + EC_WORD_WELL, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .name = _("DWIGHT"), + .teamFlags = 0x11, + .padding = 0, + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_STRONG, + EC_WORD_YOU, + EC_WORD_ARE, + EC_WORD_SCARY, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, + .name = _("REENA"), + .teamFlags = 0x12, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_ALWAYS, + EC_WORD_LOSE, + EC_WORD_MAYBE, + EC_WORD_TODAY, + EC_WORD_ELLIPSIS, + }, + }, + { + .trainerClass = TRAINER_CLASS_PARASOL_LADY, + .name = _("MEGAN"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_DON_T, + EC_WORD_MAKE, + EC_WORD_THAT, + EC_MOVE(SCARY_FACE), + EC_WORD_AT, + EC_WORD_ME, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, + .name = _("SIERRA"), + .teamFlags = 0x04, + .padding = 0, + .easyChat = { + EC_WORD_I_VE, + EC_WORD_RUN, + EC_WORD_A_LOT, + EC_WORD_SO, + EC_WORD_I_AM, + EC_WORD_HEALTHY, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, + .name = _("ARNOLD"), + .teamFlags = 0x08, + .padding = 0, + .easyChat = { + EC_WORD_I_AM, + EC_WORD_FEELING, + EC_WORD_AWESOME, + EC_WORD_MY, + EC_WORD_POKEMON, + EC_WORD_ROCK, + }, + }, + { + .trainerClass = TRAINER_CLASS_BLACK_BELT, + .name = _("XIN"), + .teamFlags = 0x04, + .padding = 0, + .easyChat = { + EC_WORD_HOO_HAH, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_READY, + EC_WORD_TO, + EC_WORD_ROCK, + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, + .name = _("KELLY"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_YOU, + EC_WORD_COULDN_T, + EC_WORD_BEAT, + EC_WORD_ME, + EC_WORD_EVER, + EC_WORD_KID, + }, + }, + { + .trainerClass = TRAINER_CLASS_COLLECTOR, + .name = _("VANCE"), + .teamFlags = 0x80, + .padding = 0, + .easyChat = { + EC_WORD_POKEMON, + EC_WORD_ALL, + EC_WORD_OVER, + EC_WORD_THE, + EC_WORD_PLACE, + EC_WORD_WOWEE, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .name = _("TOBY"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_THIS, + EC_WORD_ISN_T, + EC_WORD_SPORTS, + EC_WORD_IT_S, + EC_WORD_A, + EC_WORD_BATTLE, + }, + }, + { + .trainerClass = TRAINER_CLASS_GENTLEMAN, + .name = _("NORTON"), + .teamFlags = 0x20, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_HAVE, + EC_WORD_TO, + EC_WORD_WIN, + EC_WORD_PLEASE, + EC_WORD_LOSE, + }, + }, + { + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .name = _("ZOE"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_THIS, + EC_WORD_IS, + EC_WORD_SCARY, + EC_WORD_PLEASE, + EC_WORD_BE, + EC_WORD_NICE, + }, + }, + { + .trainerClass = TRAINER_CLASS_BEAUTY, + .name = _("EMMA"), + .teamFlags = 0x20, + .padding = 0, + .easyChat = { + EC_WORD_DON_T, + EC_WORD_YOU, + EC_MOVE(FLAIL), + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_MOVE(WITHDRAW), + }, + }, + { + .trainerClass = TRAINER_CLASS_HIKER, + .name = _("VINCE"), + .teamFlags = 0x04, + .padding = 0, + .easyChat = { + EC_WORD_YAHOO, + EC_WORD_YAHOO, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_LISTENING, + EC_WORD_QUES, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_M, + .name = _("MARV"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_LEARN, + EC_WORD_TO, + EC_WORD_BATTLE, + EC_WORD_THE, + EC_WORD_CORRECT, + EC_WORD_WAY, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, + .name = _("TODD"), + .teamFlags = 0x40, + .padding = 0, + .easyChat = { + EC_WORD_THE, + EC_WORD_WAY, + EC_WORD_YOU, + EC_WORD_BATTLE, + EC_WORD_IT_S, + EC_WORD_CHILD_S_PLAY, + }, + }, + { + .trainerClass = TRAINER_CLASS_GUITARIST, + .name = _("GAVIN"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_BABY, + EC_WORD_BABY, + EC_WORD_BABY, + EC_WORD_ROCK, + EC_WORD_ME, + EC_WORD_HARD, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_M, + .name = _("QUINN"), + .teamFlags = 0x08, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_HAVE, + EC_WORD_A, + EC_WORD_STICKY_HOLD, + EC_WORD_ON, + EC_WORD_YOU, + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, + .name = _("JENN"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_I_AM, + EC_WORD_ON, + EC_WORD_A, + EC_WORD_TOUGH, + EC_WORD_TRAINER, + EC_WORD_SEARCH, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_M, + .name = _("JOEL"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_BELIEVE, + EC_WORD_IN, + EC_WORD_YOUR, + EC_WORD_POKEMON, + EC_WORD_AND, + EC_WORD_WIN, + }, + }, + { + .trainerClass = TRAINER_CLASS_DRAGON_TAMER, + .name = _("KYLE"), + .teamFlags = 0x0C, + .padding = 0, + .easyChat = { + EC_WORD_I, + EC_WORD_LIKE, + EC_WORD_A, + EC_WORD_GIRL, + EC_WORD_WITH, + EC_MOVE2(FORESIGHT), + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, + .name = _("BRET"), + .teamFlags = 0x01, + .padding = 0, + .easyChat = { + EC_WORD_TAKE, + EC_WORD_MY, + EC_WORD_OVERWHELMING, + EC_WORD_POWER, + EC_WORD_AND, + EC_WORD_DISAPPEAR, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_F, + .name = _("CARRIE"), + .teamFlags = 0x10, + .padding = 0, + .easyChat = { + EC_WORD_TRAINER, + EC_WORD_I, + EC_WORD_SEE, + EC_WORD_YOU, + EC_WORD_ARE, + EC_WORD_CAPABLE, + }, + }, + { + .trainerClass = TRAINER_CLASS_LADY, + .name = _("GILLIAN"), + .teamFlags = 0x02, + .padding = 0, + .easyChat = { + EC_WORD_COME_ON, + EC_WORD_SHOW, + EC_WORD_ME, + EC_WORD_AN, + EC_WORD_EXCELLENT, + EC_WORD_TIME, + }, + }, +}; -- cgit v1.2.3 From 7b4527154ff1a28e793d9aab2b417e0a460b8187 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 22 Oct 2017 15:29:18 -0700 Subject: Move battle_tower held_items to src/ --- src/battle_tower.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index a9d79df17..570d18720 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -3,6 +3,7 @@ #include "data2.h" #include "easy_chat.h" #include "event_data.h" +#include "items.h" #include "map_object_constants.h" #include "moves.h" #include "pokedex.h" @@ -14,6 +15,73 @@ #include "data/battle_tower/trainers.h" +const u16 gBattleTowerHeldItems[] = { + ITEM_NONE, + ITEM_KINGS_ROCK, + ITEM_SITRUS_BERRY, + ITEM_ORAN_BERRY, + ITEM_CHESTO_BERRY, + ITEM_HARD_STONE, + ITEM_FOCUS_BAND, + ITEM_PERSIM_BERRY, + ITEM_MIRACLE_SEED, + ITEM_BERRY_JUICE, + ITEM_MACHO_BRACE, + ITEM_SILVER_POWDER, + ITEM_CHERI_BERRY, + ITEM_BLACK_GLASSES, + ITEM_BLACK_BELT, + ITEM_SOUL_DEW, + ITEM_CHOICE_BAND, + ITEM_MAGNET, + ITEM_SILK_SCARF, + ITEM_WHITE_HERB, + ITEM_DEEP_SEA_SCALE, + ITEM_DEEP_SEA_TOOTH, + ITEM_MYSTIC_WATER, + ITEM_SHARP_BEAK, + ITEM_QUICK_CLAW, + ITEM_LEFTOVERS, + ITEM_RAWST_BERRY, + ITEM_LIGHT_BALL, + ITEM_POISON_BARB, + ITEM_NEVER_MELT_ICE, + ITEM_ASPEAR_BERRY, + ITEM_SPELL_TAG, + ITEM_BRIGHT_POWDER, + ITEM_LEPPA_BERRY, + ITEM_SCOPE_LENS, + ITEM_TWISTED_SPOON, + ITEM_METAL_COAT, + ITEM_MENTAL_HERB, + ITEM_CHARCOAL, + ITEM_PECHA_BERRY, + ITEM_SOFT_SAND, + ITEM_LUM_BERRY, + ITEM_DRAGON_SCALE, + ITEM_DRAGON_FANG, + ITEM_IAPAPA_BERRY, + ITEM_WIKI_BERRY, + ITEM_SEA_INCENSE, + ITEM_SHELL_BELL, + ITEM_SALAC_BERRY, + ITEM_LANSAT_BERRY, + ITEM_APICOT_BERRY, + ITEM_STARF_BERRY, + ITEM_LIECHI_BERRY, + ITEM_STICK, + ITEM_LAX_INCENSE, + ITEM_AGUAV_BERRY, + ITEM_FIGY_BERRY, + ITEM_THICK_CLUB, + ITEM_MAGO_BERRY, + ITEM_METAL_POWDER, + ITEM_PETAYA_BERRY, + ITEM_LUCKY_PUNCH, + ITEM_GANLON_BERRY, +}; + + extern u8 gUnknown_08400E23[]; extern u8 gUnknown_08400E29[]; extern u8 gUnknown_08400E2E[]; -- cgit v1.2.3 From 949a003bd1c81ae927764401a07bd83e2debb9b5 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 22 Oct 2017 15:43:32 -0700 Subject: Move battle_tower level50 mons to src/ --- src/battle_tower.c | 2 + src/data/battle_tower/level_50_mons.h | 3903 +++++++++++++++++++++++++++++++++ 2 files changed, 3905 insertions(+) create mode 100644 src/data/battle_tower/level_50_mons.h (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 570d18720..a2715ad52 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -8,6 +8,7 @@ #include "moves.h" #include "pokedex.h" #include "rng.h" +#include "species.h" #include "string_util.h" #include "text.h" #include "trainer.h" @@ -81,6 +82,7 @@ const u16 gBattleTowerHeldItems[] = { ITEM_GANLON_BERRY, }; +#include "data/battle_tower/level_50_mons.h" extern u8 gUnknown_08400E23[]; extern u8 gUnknown_08400E29[]; diff --git a/src/data/battle_tower/level_50_mons.h b/src/data/battle_tower/level_50_mons.h new file mode 100644 index 000000000..65b66b7ef --- /dev/null +++ b/src/data/battle_tower/level_50_mons.h @@ -0,0 +1,3903 @@ +const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = +{ + { + .species = SPECIES_PIKACHU, + .item = BATTLE_TOWER_ITEM_ORAN_BERRY, + .teamFlags = 0x42, + .moves = { + MOVE_QUICK_ATTACK, + MOVE_THUNDER_WAVE, + MOVE_THUNDER_SHOCK, + MOVE_GROWL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BEAUTIFLY, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x41, + .moves = { + MOVE_ABSORB, + MOVE_STUN_SPORE, + MOVE_GUST, + MOVE_SAFEGUARD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_SWELLOW, + .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .teamFlags = 0x07, + .moves = { + MOVE_PECK, + MOVE_WING_ATTACK, + MOVE_AERIAL_ACE, + MOVE_AGILITY + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x0B, + .moves = { + MOVE_HAIL, + MOVE_ENCORE, + MOVE_ICE_BALL, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_SEAKING, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x07, + .moves = { + MOVE_PECK, + MOVE_FLAIL, + MOVE_FURY_ATTACK, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_TORCHIC, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x42, + .moves = { + MOVE_FIRE_SPIN, + MOVE_PROTECT, + MOVE_SAND_ATTACK, + MOVE_SLASH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_MASQUERAIN, + .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .teamFlags = 0x41, + .moves = { + MOVE_STUN_SPORE, + MOVE_WATER_SPORT, + MOVE_QUICK_ATTACK, + MOVE_GUST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_ILLUMISE, + .item = BATTLE_TOWER_ITEM_NONE, + .teamFlags = 0x41, + .moves = { + MOVE_FLATTER, + MOVE_COVET, + MOVE_WISH, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_DELCATTY, + .item = BATTLE_TOWER_ITEM_SILK_SCARF, + .teamFlags = 0x42, + .moves = { + MOVE_ATTRACT, + MOVE_TAIL_WHIP, + MOVE_FAINT_ATTACK, + MOVE_DIG + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LONELY, + }, + { + .species = SPECIES_KECLEON, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_TAIL_WHIP, + MOVE_SLASH, + MOVE_LICK, + MOVE_SCREECH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_MIGHTYENA, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_BITE, + MOVE_TAKE_DOWN, + MOVE_ROAR, + MOVE_HOWL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SLAKING, + .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .teamFlags = 0x05, + .moves = { + MOVE_FAINT_ATTACK, + MOVE_COUNTER, + MOVE_SCRATCH, + MOVE_TAUNT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_MACHOKE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_LEER, + MOVE_DIG, + MOVE_LOW_KICK, + MOVE_FOCUS_PUNCH + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_RHYDON, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_STRENGTH, + MOVE_ROCK_TOMB, + MOVE_STOMP, + MOVE_ROCK_SMASH + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_CACTURNE, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x0B, + .moves = { + MOVE_POISON_STING, + MOVE_GROWTH, + MOVE_ABSORB, + MOVE_SOLAR_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ZIGZAGOON, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x0A, + .moves = { + MOVE_FLAIL, + MOVE_SAND_ATTACK, + MOVE_REST, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_DODRIO, + .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .teamFlags = 0x03, + .moves = { + MOVE_PURSUIT, + MOVE_TRI_ATTACK, + MOVE_GROWL, + MOVE_AGILITY + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_WHISCASH, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x0B, + .moves = { + MOVE_WATER_GUN, + MOVE_AMNESIA, + MOVE_MAGNITUDE, + MOVE_MUD_SLAP + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_NINJASK, + .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .teamFlags = 0x41, + .moves = { + MOVE_SAND_ATTACK, + MOVE_FURY_CUTTER, + MOVE_AGILITY, + MOVE_HARDEN + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_DUSCLOPS, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_PROTECT, + MOVE_NIGHT_SHADE, + MOVE_ASTONISH, + MOVE_WILL_O_WISP + }, + .evSpread = F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_CAMERUPT, + .item = BATTLE_TOWER_ITEM_CHARCOAL, + .teamFlags = 0x07, + .moves = { + MOVE_DIG, + MOVE_EMBER, + MOVE_GROWL, + MOVE_ROCK_SMASH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_SPINDA, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x4A, + .moves = { + MOVE_TEETER_DANCE, + MOVE_FLAIL, + MOVE_PSYCH_UP, + MOVE_DOUBLE_EDGE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_SEVIPER, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x09, + .moves = { + MOVE_SCREECH, + MOVE_GLARE, + MOVE_DIG, + MOVE_POISON_FANG + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x49, + .moves = { + MOVE_SAND_ATTACK, + MOVE_SAND_TOMB, + MOVE_FACADE, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_AZUMARILL, + .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .teamFlags = 0x42, + .moves = { + MOVE_BUBBLE_BEAM, + MOVE_TAIL_WHIP, + MOVE_RAIN_DANCE, + MOVE_ROLLOUT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ZANGOOSE, + .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .teamFlags = 0x07, + .moves = { + MOVE_STRENGTH, + MOVE_TAUNT, + MOVE_CRUSH_CLAW, + MOVE_DETECT + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MEDICHAM, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x07, + .moves = { + MOVE_REVERSAL, + MOVE_MEDITATE, + MOVE_CONFUSION, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_ROSELIA, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x0A, + .moves = { + MOVE_GROWTH, + MOVE_MEGA_DRAIN, + MOVE_TOXIC, + MOVE_CUT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_SWALOT, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_STOCKPILE, + MOVE_SPIT_UP, + MOVE_SLUDGE, + MOVE_POISON_GAS + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MAGNETON, + .item = BATTLE_TOWER_ITEM_MAGNET, + .teamFlags = 0x0B, + .moves = { + MOVE_SUPERSONIC, + MOVE_THUNDER_WAVE, + MOVE_SCREECH, + MOVE_TRI_ATTACK + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .teamFlags = 0x09, + .moves = { + MOVE_CONFUSION, + MOVE_TOXIC, + MOVE_TORMENT, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_RELICANTH, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x01, + .moves = { + MOVE_SURF, + MOVE_ANCIENT_POWER, + MOVE_ROCK_TOMB, + MOVE_HARDEN + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_NINETALES, + .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_FIRE_SPIN, + MOVE_QUICK_ATTACK, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_SHARPEDO, + .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .teamFlags = 0x05, + .moves = { + MOVE_BITE, + MOVE_SKULL_BASH, + MOVE_RAIN_DANCE, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_GIRAFARIG, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x03, + .moves = { + MOVE_STRENGTH, + MOVE_PSYBEAM, + MOVE_AGILITY, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_PELIPPER, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_MIST, + MOVE_STOCKPILE, + MOVE_SWALLOW, + MOVE_SPIT_UP + }, + .evSpread = F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_SABLEYE, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_SHADOW_BALL, + MOVE_NIGHT_SHADE, + MOVE_SNATCH, + MOVE_FAKE_OUT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_LUNATONE, + .item = BATTLE_TOWER_ITEM_HARD_STONE, + .teamFlags = 0x0B, + .moves = { + MOVE_COSMIC_POWER, + MOVE_SANDSTORM, + MOVE_PSYCHIC, + MOVE_ROCK_THROW + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_NONE, + .teamFlags = 0x0B, + .moves = { + MOVE_THIEF, + MOVE_FAKE_OUT, + MOVE_SURF, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GRUMPIG, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_ODOR_SLEUTH, + MOVE_CONFUSE_RAY, + MOVE_MAGIC_COAT, + MOVE_PSYCHIC + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x0B, + .moves = { + MOVE_CUT, + MOVE_LEECH_SEED, + MOVE_MEGA_DRAIN, + MOVE_STUN_SPORE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_WAILORD, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x03, + .moves = { + MOVE_WATER_SPOUT, + MOVE_ROLLOUT, + MOVE_MIST, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_WEEZING, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x05, + .moves = { + MOVE_SMOG, + MOVE_SELF_DESTRUCT, + MOVE_TOXIC, + MOVE_SLUDGE_BOMB + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_KADABRA, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_FUTURE_SIGHT, + MOVE_FOCUS_PUNCH, + MOVE_SKILL_SWAP, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_MAGNET, + .teamFlags = 0x07, + .moves = { + MOVE_THUNDER_WAVE, + MOVE_BITE, + MOVE_SPARK, + MOVE_QUICK_ATTACK + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_RAICHU, + .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_QUICK_ATTACK, + MOVE_AGILITY, + MOVE_LIGHT_SCREEN, + MOVE_THUNDERBOLT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_XATU, + .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .teamFlags = 0x03, + .moves = { + MOVE_NIGHT_SHADE, + MOVE_PECK, + MOVE_CONFUSE_RAY, + MOVE_FUTURE_SIGHT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_LOUDRED, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_UPROAR, + MOVE_STOMP, + MOVE_SCREECH, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_MODEST, + }, + { + .species = SPECIES_SOLROCK, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x03, + .moves = { + MOVE_ROCK_THROW, + MOVE_SUNNY_DAY, + MOVE_SOLAR_BEAM, + MOVE_SANDSTORM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_CLAYDOL, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x03, + .moves = { + MOVE_SANDSTORM, + MOVE_REFLECT, + MOVE_ROCK_TOMB, + MOVE_STRENGTH + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_CRAWDAUNT, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x03, + .moves = { + MOVE_WATER_PULSE, + MOVE_KNOCK_OFF, + MOVE_HARDEN, + MOVE_CUT + }, + .evSpread = F_EV_SPREAD_HP, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_GOLBAT, + .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .teamFlags = 0x09, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_WING_ATTACK, + MOVE_MEAN_LOOK, + MOVE_BITE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_BELLOSSOM, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x0A, + .moves = { + MOVE_SOLAR_BEAM, + MOVE_PETAL_DANCE, + MOVE_SWEET_SCENT, + MOVE_BULLET_SEED + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_DONPHAN, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x05, + .moves = { + MOVE_ROCK_SMASH, + MOVE_RAPID_SPIN, + MOVE_FLAIL, + MOVE_HORN_ATTACK + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_NOSEPASS, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_SANDSTORM, + MOVE_ROCK_SLIDE, + MOVE_BLOCK, + MOVE_THUNDER_WAVE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_PINSIR, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_SWORDS_DANCE, + MOVE_HARDEN, + MOVE_CUT, + MOVE_SEISMIC_TOSS + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x0B, + .moves = { + MOVE_DISABLE, + MOVE_PSYCH_UP, + MOVE_WATER_PULSE, + MOVE_BRICK_BREAK + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SHIFTRY, + .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .teamFlags = 0x07, + .moves = { + MOVE_TORMENT, + MOVE_EXTRASENSORY, + MOVE_SOLAR_BEAM, + MOVE_AERIAL_ACE + }, + .evSpread = F_EV_SPREAD_DEFENSE, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_DUSTOX, + .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .teamFlags = 0x01, + .moves = { + MOVE_CONFUSION, + MOVE_SILVER_WIND, + MOVE_PSYBEAM, + MOVE_WHIRLWIND + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_SHUPPET, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x03, + .moves = { + MOVE_WILL_O_WISP, + MOVE_NIGHT_SHADE, + MOVE_FAINT_ATTACK, + MOVE_CURSE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SEAKING, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x07, + .moves = { + MOVE_RAIN_DANCE, + MOVE_SURF, + MOVE_HORN_ATTACK, + MOVE_HORN_DRILL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE, + .nature = NATURE_LONELY, + }, + { + .species = SPECIES_SKARMORY, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x07, + .moves = { + MOVE_STEEL_WING, + MOVE_SAND_ATTACK, + MOVE_SWIFT, + MOVE_AGILITY + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_TORKOAL, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x43, + .moves = { + MOVE_FLAMETHROWER, + MOVE_IRON_DEFENSE, + MOVE_BODY_SLAM, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_GOLEM, + .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .teamFlags = 0x05, + .moves = { + MOVE_MAGNITUDE, + MOVE_EXPLOSION, + MOVE_STRENGTH, + MOVE_SANDSTORM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .teamFlags = 0x41, + .moves = { + MOVE_REFLECT, + MOVE_PSYCHIC, + MOVE_IMPRISON, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_SANDSLASH, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x07, + .moves = { + MOVE_SANDSTORM, + MOVE_SLASH, + MOVE_EARTHQUAKE, + MOVE_SWIFT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_WOBBUFFET, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_COUNTER, + MOVE_MIRROR_COAT, + MOVE_SAFEGUARD, + MOVE_DESTINY_BOND + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_TENTACRUEL, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_CONSTRICT, + MOVE_SURF, + MOVE_HYPER_BEAM, + MOVE_SCREECH + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_TROPIUS, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x05, + .moves = { + MOVE_SUNNY_DAY, + MOVE_SOLAR_BEAM, + MOVE_SYNTHESIS, + MOVE_RAZOR_LEAF + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_MAWILE, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x43, + .moves = { + MOVE_IRON_DEFENSE, + MOVE_SLUDGE_BOMB, + MOVE_CRUNCH, + MOVE_STRENGTH + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_SLUDGE, + MOVE_ACID_ARMOR, + MOVE_GIGA_DRAIN, + MOVE_DISABLE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MAGCARGO, + .item = BATTLE_TOWER_ITEM_CHARCOAL, + .teamFlags = 0x0D, + .moves = { + MOVE_FLAMETHROWER, + MOVE_ROCK_THROW, + MOVE_HARDEN, + MOVE_AMNESIA + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_LINOONE, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x07, + .moves = { + MOVE_HEADBUTT, + MOVE_TAIL_WHIP, + MOVE_SURF, + MOVE_DIG + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_LIGHT_SCREEN, + MOVE_THUNDERBOLT, + MOVE_SWIFT, + MOVE_ROLLOUT + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_DUSCLOPS, + .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .teamFlags = 0x09, + .moves = { + MOVE_MEAN_LOOK, + MOVE_NIGHT_SHADE, + MOVE_SKILL_SWAP, + MOVE_SHADOW_BALL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_VILEPLUME, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x0A, + .moves = { + MOVE_TOXIC, + MOVE_MOONLIGHT, + MOVE_GIGA_DRAIN, + MOVE_STUN_SPORE + }, + .evSpread = F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_BITE, + MOVE_HAZE, + MOVE_WING_ATTACK, + MOVE_STEEL_WING + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_CORSOLA, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x0A, + .moves = { + MOVE_RECOVER, + MOVE_MIRROR_COAT, + MOVE_HAIL, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x0B, + .moves = { + MOVE_RAPID_SPIN, + MOVE_WATER_PULSE, + MOVE_REFLECT, + MOVE_SKILL_SWAP + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_EXPLOUD, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x41, + .moves = { + MOVE_HYPER_BEAM, + MOVE_HOWL, + MOVE_UPROAR, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .teamFlags = 0x0B, + .moves = { + MOVE_PSYBEAM, + MOVE_SNATCH, + MOVE_REFLECT, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x05, + .moves = { + MOVE_HORN_ATTACK, + MOVE_COUNTER, + MOVE_REVERSAL, + MOVE_LEER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_CASTFORM, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_WEATHER_BALL, + MOVE_SUNNY_DAY, + MOVE_RAIN_DANCE, + MOVE_HAIL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_VIGOROTH, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x05, + .moves = { + MOVE_FOCUS_PUNCH, + MOVE_REVERSAL, + MOVE_COUNTER, + MOVE_TAUNT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_DUSKULL, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x09, + .moves = { + MOVE_TOXIC, + MOVE_CONFUSE_RAY, + MOVE_SHADOW_BALL, + MOVE_WILL_O_WISP + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_LANTURN, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x07, + .moves = { + MOVE_FLAIL, + MOVE_SURF, + MOVE_SPARK, + MOVE_TAKE_DOWN + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x05, + .moves = { + MOVE_STRENGTH, + MOVE_FAKE_OUT, + MOVE_FACADE, + MOVE_SAND_ATTACK + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x43, + .moves = { + MOVE_AGILITY, + MOVE_DIVE, + MOVE_ICE_BEAM, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GYARADOS, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x41, + .moves = { + MOVE_RAIN_DANCE, + MOVE_SURF, + MOVE_WATER_PULSE, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_AGGRON, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x45, + .moves = { + MOVE_EARTHQUAKE, + MOVE_BRICK_BREAK, + MOVE_METAL_CLAW, + MOVE_ROAR + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_ABSOL, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0xC7, + .moves = { + MOVE_SWORDS_DANCE, + MOVE_IRON_TAIL, + MOVE_SLASH, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_SWELLOW, + .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .teamFlags = 0x0F, + .moves = { + MOVE_DOUBLE_TEAM, + MOVE_FLY, + MOVE_TOXIC, + MOVE_STEEL_WING + }, + .evSpread = 0, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .teamFlags = 0x05, + .moves = { + MOVE_STRENGTH, + MOVE_CROSS_CHOP, + MOVE_EARTHQUAKE, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .teamFlags = 0x41, + .moves = { + MOVE_PROTECT, + MOVE_ICE_BEAM, + MOVE_HYPER_BEAM, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x41, + .moves = { + MOVE_LEAF_BLADE, + MOVE_DRAGON_CLAW, + MOVE_AGILITY, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_CHARCOAL, + .teamFlags = 0x41, + .moves = { + MOVE_BLAZE_KICK, + MOVE_MIRROR_MOVE, + MOVE_EARTHQUAKE, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_ALTARIA, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x43, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_DRAGON_DANCE, + MOVE_TOXIC, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .teamFlags = 0x43, + .moves = { + MOVE_BRICK_BREAK, + MOVE_WATER_PULSE, + MOVE_RAIN_DANCE, + MOVE_FOCUS_PUNCH + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_SABLEYE, + .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .teamFlags = 0x49, + .moves = { + MOVE_SHADOW_BALL, + MOVE_SNATCH, + MOVE_DIG, + MOVE_CONFUSE_RAY + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ZANGOOSE, + .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .teamFlags = 0x0F, + .moves = { + MOVE_FACADE, + MOVE_THUNDERBOLT, + MOVE_CRUSH_CLAW, + MOVE_DETECT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_LINOONE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x0F, + .moves = { + MOVE_IRON_TAIL, + MOVE_HEADBUTT, + MOVE_ATTRACT, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WHISCASH, + .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .teamFlags = 0x07, + .moves = { + MOVE_MUD_SLAP, + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_AMNESIA + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_SOLROCK, + .item = BATTLE_TOWER_ITEM_HARD_STONE, + .teamFlags = 0x43, + .moves = { + MOVE_EARTHQUAKE, + MOVE_LIGHT_SCREEN, + MOVE_ROCK_SLIDE, + MOVE_CONFUSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x03, + .moves = { + MOVE_RECOVER, + MOVE_RAIN_DANCE, + MOVE_SURF, + MOVE_CONFUSE_RAY + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_CACTURNE, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x0F, + .moves = { + MOVE_INGRAIN, + MOVE_LEECH_SEED, + MOVE_PROTECT, + MOVE_FRUSTRATION + }, + .evSpread = 0, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SHIFTRY, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x05, + .moves = { + MOVE_FRUSTRATION, + MOVE_HYPER_BEAM, + MOVE_GIGA_DRAIN, + MOVE_TORMENT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_MAGNET, + .teamFlags = 0x0F, + .moves = { + MOVE_THUNDER, + MOVE_THUNDER_WAVE, + MOVE_IRON_TAIL, + MOVE_ROAR + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_KECLEON, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0xC3, + .moves = { + MOVE_THUNDERBOLT, + MOVE_FOCUS_PUNCH, + MOVE_IRON_TAIL, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_PINSIR, + .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .teamFlags = 0x8D, + .moves = { + MOVE_GUILLOTINE, + MOVE_SUBMISSION, + MOVE_EARTHQUAKE, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_METANG, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x05, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SHADOW_BALL, + MOVE_PSYCHIC, + MOVE_METEOR_MASH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_CLAYDOL, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x43, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SELF_DESTRUCT, + MOVE_SANDSTORM, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_MASQUERAIN, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_TOXIC, + MOVE_SILVER_WIND, + MOVE_ATTRACT, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_RELICANTH, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0xC5, + .moves = { + MOVE_ROCK_TOMB, + MOVE_DOUBLE_EDGE, + MOVE_SURF, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x0D, + .moves = { + MOVE_SURF, + MOVE_ENCORE, + MOVE_BLIZZARD, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WAILORD, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_WATER_SPOUT, + MOVE_REST, + MOVE_AMNESIA, + MOVE_HAIL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_GIRAFARIG, + .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .teamFlags = 0x4F, + .moves = { + MOVE_DOUBLE_TEAM, + MOVE_CRUNCH, + MOVE_PSYCHIC, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MEDICHAM, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x4B, + .moves = { + MOVE_CALM_MIND, + MOVE_REVERSAL, + MOVE_ROCK_TOMB, + MOVE_PSYCHIC + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_TROPIUS, + .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .teamFlags = 0xC7, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SYNTHESIS, + MOVE_RAZOR_LEAF, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_NINJASK, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x05, + .moves = { + MOVE_DOUBLE_TEAM, + MOVE_SLASH, + MOVE_SWORDS_DANCE, + MOVE_LEECH_LIFE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_CAMERUPT, + .item = BATTLE_TOWER_ITEM_CHARCOAL, + .teamFlags = 0x0D, + .moves = { + MOVE_EARTHQUAKE, + MOVE_OVERHEAT, + MOVE_SUNNY_DAY, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_SHARPEDO, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x05, + .moves = { + MOVE_CRUNCH, + MOVE_SURF, + MOVE_EARTHQUAKE, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WIGGLYTUFF, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x0E, + .moves = { + MOVE_PROTECT, + MOVE_TOXIC, + MOVE_DOUBLE_TEAM, + MOVE_DIG + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_SEVIPER, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x05, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_HAZE, + MOVE_CRUNCH, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_CRADILY, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0xC1, + .moves = { + MOVE_ROCK_TOMB, + MOVE_CONFUSE_RAY, + MOVE_INGRAIN, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ARMALDO, + .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .teamFlags = 0xC1, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SANDSTORM, + MOVE_PROTECT, + MOVE_SLASH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MAGNETON, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x0D, + .moves = { + MOVE_ZAP_CANNON, + MOVE_SUPERSONIC, + MOVE_TOXIC, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_LANTURN, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x06, + .moves = { + MOVE_THUNDER, + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_SWALOT, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x8B, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_SNATCH, + MOVE_ENCORE, + MOVE_BODY_SLAM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SKARMORY, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x81, + .moves = { + MOVE_STEEL_WING, + MOVE_AGILITY, + MOVE_TORMENT, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_DONPHAN, + .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .teamFlags = 0x0D, + .moves = { + MOVE_EARTHQUAKE, + MOVE_FLAIL, + MOVE_ROAR, + MOVE_IRON_TAIL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x41, + .moves = { + MOVE_FACADE, + MOVE_REVERSAL, + MOVE_MEGAHORN, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BANETTE, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x83, + .moves = { + MOVE_SHADOW_BALL, + MOVE_HYPER_BEAM, + MOVE_THUNDERBOLT, + MOVE_SKILL_SWAP + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_SANDSLASH, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x0F, + .moves = { + MOVE_SANDSTORM, + MOVE_TOXIC, + MOVE_SLASH, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_CRAWDAUNT, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x05, + .moves = { + MOVE_GUILLOTINE, + MOVE_CRABHAMMER, + MOVE_BLIZZARD, + MOVE_SLUDGE_BOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_GRUMPIG, + .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .teamFlags = 0x8B, + .moves = { + MOVE_MAGIC_COAT, + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_CONFUSE_RAY + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LONELY, + }, + { + .species = SPECIES_RHYDON, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x45, + .moves = { + MOVE_IRON_TAIL, + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_FIRE_BLAST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x8B, + .moves = { + MOVE_PSYCHIC, + MOVE_REFLECT, + MOVE_RECOVER, + MOVE_SKILL_SWAP + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_DUSCLOPS, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_SHADOW_BALL, + MOVE_WILL_O_WISP, + MOVE_BLIZZARD, + MOVE_PSYCHIC + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_TORKOAL, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x09, + .moves = { + MOVE_FLAMETHROWER, + MOVE_AMNESIA, + MOVE_IRON_TAIL, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_SCREECH, + MOVE_EXPLOSION, + MOVE_MIRROR_COAT, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_IRON_TAIL, + MOVE_FOCUS_PUNCH, + MOVE_DOUBLE_TEAM, + MOVE_LEECH_SEED + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x05, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_THUNDERBOLT, + MOVE_FLAMETHROWER, + MOVE_FOCUS_PUNCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_WEEZING, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x05, + .moves = { + MOVE_EXPLOSION, + MOVE_SLUDGE_BOMB, + MOVE_SHADOW_BALL, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_RAICHU, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x4E, + .moves = { + MOVE_THUNDERBOLT, + MOVE_DOUBLE_TEAM, + MOVE_FOCUS_PUNCH, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_TENTACRUEL, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x09, + .moves = { + MOVE_DOUBLE_TEAM, + MOVE_TOXIC, + MOVE_SURF, + MOVE_SLUDGE_BOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_EXPLOUD, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x05, + .moves = { + MOVE_BLIZZARD, + MOVE_FLAMETHROWER, + MOVE_EARTHQUAKE, + MOVE_RETURN + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_XATU, + .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .teamFlags = 0x43, + .moves = { + MOVE_PSYCHIC, + MOVE_REST, + MOVE_CONFUSE_RAY, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_GOLEM, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_EXPLOSION, + MOVE_EARTHQUAKE, + MOVE_ROCK_TOMB, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x83, + .moves = { + MOVE_SURF, + MOVE_ATTRACT, + MOVE_CALM_MIND, + MOVE_BLIZZARD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_NINETALES, + .item = BATTLE_TOWER_ITEM_CHARCOAL, + .teamFlags = 0x4A, + .moves = { + MOVE_FLAMETHROWER, + MOVE_ATTRACT, + MOVE_TOXIC, + MOVE_CONFUSE_RAY + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x13, + .moves = { + MOVE_DOUBLE_TEAM, + MOVE_REST, + MOVE_SURF, + MOVE_DRAGON_BREATH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_SLAKING, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x03, + .moves = { + MOVE_CURSE, + MOVE_AMNESIA, + MOVE_YAWN, + MOVE_FOCUS_PUNCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_GYARADOS, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_THUNDER, + MOVE_EARTHQUAKE, + MOVE_HYDRO_PUMP, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x21, + .moves = { + MOVE_BELLY_DRUM, + MOVE_ENDURE, + MOVE_EARTHQUAKE, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_ABSOL, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0xC3, + .moves = { + MOVE_FAINT_ATTACK, + MOVE_DOUBLE_EDGE, + MOVE_SHADOW_BALL, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_ALTARIA, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x83, + .moves = { + MOVE_DRAGON_DANCE, + MOVE_MIRROR_MOVE, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .teamFlags = 0x11, + .moves = { + MOVE_CROSS_CHOP, + MOVE_FOCUS_PUNCH, + MOVE_ROCK_TOMB, + MOVE_ENCORE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x43, + .moves = { + MOVE_CRUNCH, + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x33, + .moves = { + MOVE_COUNTER, + MOVE_ROCK_SLIDE, + MOVE_FOCUS_PUNCH, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_GLALIE, + .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .teamFlags = 0x81, + .moves = { + MOVE_BLIZZARD, + MOVE_CRUNCH, + MOVE_ICY_WIND, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_HUNTAIL, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0xA1, + .moves = { + MOVE_RAIN_DANCE, + MOVE_HYDRO_PUMP, + MOVE_CRUNCH, + MOVE_BLIZZARD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .teamFlags = 0xD3, + .moves = { + MOVE_SURF, + MOVE_ATTRACT, + MOVE_RECOVER, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_GOREBYSS, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x83, + .moves = { + MOVE_PSYCHIC, + MOVE_SURF, + MOVE_BLIZZARD, + MOVE_SHADOW_BALL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x53, + .moves = { + MOVE_LEAF_BLADE, + MOVE_ENDEAVOR, + MOVE_EARTHQUAKE, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x53, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_MUD_SHOT, + MOVE_BLIZZARD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_AGGRON, + .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .teamFlags = 0x41, + .moves = { + MOVE_DOUBLE_EDGE, + MOVE_FLAMETHROWER, + MOVE_IRON_TAIL, + MOVE_BLIZZARD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_CRADILY, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0xE1, + .moves = { + MOVE_STOCKPILE, + MOVE_SPIT_UP, + MOVE_SWALLOW, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_ARMALDO, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0xC1, + .moves = { + MOVE_EARTHQUAKE, + MOVE_HYPER_BEAM, + MOVE_SLASH, + MOVE_SWORDS_DANCE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x82, + .moves = { + MOVE_FOCUS_PUNCH, + MOVE_COUNTER, + MOVE_MACH_PUNCH, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x83, + .moves = { + MOVE_RAIN_DANCE, + MOVE_SURF, + MOVE_PROTECT, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_SHIFTRY, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x03, + .moves = { + MOVE_TORMENT, + MOVE_FAINT_ATTACK, + MOVE_SHADOW_BALL, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_TROPIUS, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0xC3, + .moves = { + MOVE_SUNNY_DAY, + MOVE_SYNTHESIS, + MOVE_SOLAR_BEAM, + MOVE_LEECH_SEED + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_GRUMPIG, + .item = BATTLE_TOWER_ITEM_MACHO_BRACE, + .teamFlags = 0x23, + .moves = { + MOVE_TRICK, + MOVE_SKILL_SWAP, + MOVE_PSYCHIC, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_TORKOAL, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x81, + .moves = { + MOVE_IRON_DEFENSE, + MOVE_TOXIC, + MOVE_REST, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_NONE, + .teamFlags = 0x03, + .moves = { + MOVE_THUNDERBOLT, + MOVE_CRUNCH, + MOVE_ROAR, + MOVE_THIEF + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_PINSIR, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x61, + .moves = { + MOVE_GUILLOTINE, + MOVE_EARTHQUAKE, + MOVE_DOUBLE_TEAM, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x93, + .moves = { + MOVE_LIGHT_SCREEN, + MOVE_THUNDERBOLT, + MOVE_SURF, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x51, + .moves = { + MOVE_MEGAHORN, + MOVE_REVERSAL, + MOVE_EARTHQUAKE, + MOVE_COUNTER + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .teamFlags = 0x83, + .moves = { + MOVE_BLIZZARD, + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x13, + .moves = { + MOVE_PSYCHIC, + MOVE_RECOVER, + MOVE_ENCORE, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x93, + .moves = { + MOVE_SURF, + MOVE_BLIZZARD, + MOVE_RECOVER, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_REGICE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x11, + .moves = { + MOVE_REST, + MOVE_CURSE, + MOVE_BLIZZARD, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_REGISTEEL, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x11, + .moves = { + MOVE_REST, + MOVE_IRON_DEFENSE, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_REGIROCK, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x91, + .moves = { + MOVE_ROCK_TOMB, + MOVE_EARTHQUAKE, + MOVE_THUNDERBOLT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_DUSCLOPS, + .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .teamFlags = 0x20, + .moves = { + MOVE_SHADOW_BALL, + MOVE_EARTHQUAKE, + MOVE_BLIZZARD, + MOVE_DESTINY_BOND + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_SEAKING, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0xB2, + .moves = { + MOVE_HORN_DRILL, + MOVE_AGILITY, + MOVE_SLEEP_TALK, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_CAMERUPT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x00, + .moves = { + MOVE_EARTHQUAKE, + MOVE_ERUPTION, + MOVE_ROCK_SLIDE, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_LANTURN, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x82, + .moves = { + MOVE_THUNDERBOLT, + MOVE_SURF, + MOVE_THUNDER_WAVE, + MOVE_BLIZZARD + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_WEEZING, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x20, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_THUNDERBOLT, + MOVE_FIRE_BLAST, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_WHISCASH, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_ROCK_TOMB, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_AGGRON, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x11, + .moves = { + MOVE_DOUBLE_EDGE, + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_CACTURNE, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x63, + .moves = { + MOVE_DYNAMIC_PUNCH, + MOVE_COUNTER, + MOVE_FAINT_ATTACK, + MOVE_GIGA_DRAIN + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_SHARPEDO, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x01, + .moves = { + MOVE_CRUNCH, + MOVE_DOUBLE_EDGE, + MOVE_SURF, + MOVE_SWAGGER + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_ABSOL, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x82, + .moves = { + MOVE_DOUBLE_EDGE, + MOVE_FACADE, + MOVE_SWORDS_DANCE, + MOVE_QUICK_ATTACK + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WAILORD, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x23, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_EARTHQUAKE, + MOVE_ATTRACT, + MOVE_FISSURE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_TENTACRUEL, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x21, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_SLUDGE_BOMB, + MOVE_GIGA_DRAIN, + MOVE_MIRROR_COAT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0xA2, + .moves = { + MOVE_RAIN_DANCE, + MOVE_SURF, + MOVE_TOXIC, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WOBBUFFET, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x23, + .moves = { + MOVE_ENCORE, + MOVE_COUNTER, + MOVE_MIRROR_COAT, + MOVE_DESTINY_BOND + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_RHYDON, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x21, + .moves = { + MOVE_EARTHQUAKE, + MOVE_MEGAHORN, + MOVE_HORN_DRILL, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_GLALIE, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x21, + .moves = { + MOVE_CRUNCH, + MOVE_BLIZZARD, + MOVE_HAIL, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x13, + .moves = { + MOVE_LEAF_BLADE, + MOVE_EARTHQUAKE, + MOVE_DRAGON_CLAW, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x17, + .moves = { + MOVE_BLAZE_KICK, + MOVE_ROCK_TOMB, + MOVE_ENDURE, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x17, + .moves = { + MOVE_SURF, + MOVE_EARTHQUAKE, + MOVE_MUD_SHOT, + MOVE_BLIZZARD + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x19, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDERBOLT, + MOVE_DESTINY_BOND, + MOVE_WILL_O_WISP + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0xF6, + .moves = { + MOVE_SPORE, + MOVE_FOCUS_PUNCH, + MOVE_BRICK_BREAK, + MOVE_SLUDGE_BOMB + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .teamFlags = 0x1B, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDER_PUNCH, + MOVE_REFLECT, + MOVE_RECOVER + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_SHIFTRY, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x89, + .moves = { + MOVE_FAINT_ATTACK, + MOVE_SHADOW_BALL, + MOVE_DOUBLE_TEAM, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x85, + .moves = { + MOVE_CROSS_CHOP, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FAKE_OUT + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x49, + .moves = { + MOVE_ATTRACT, + MOVE_CONFUSE_RAY, + MOVE_BITE, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x15, + .moves = { + MOVE_CROSS_CHOP, + MOVE_FLAMETHROWER, + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x0B, + .moves = { + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_ROAR, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x27, + .moves = { + MOVE_THUNDERBOLT, + MOVE_PROTECT, + MOVE_MIRROR_COAT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x05, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_FLAMETHROWER, + MOVE_THUNDERBOLT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x4D, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FLAMETHROWER, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x1B, + .moves = { + MOVE_SURF, + MOVE_THUNDERBOLT, + MOVE_RECOVER, + MOVE_CONFUSE_RAY + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_DODRIO, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x2B, + .moves = { + MOVE_DRILL_PECK, + MOVE_TRI_ATTACK, + MOVE_AGILITY, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_RAICHU, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x0A, + .moves = { + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_REVERSAL, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_SURF, + MOVE_CROSS_CHOP, + MOVE_ICE_BEAM, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x54, + .moves = { + MOVE_MEGAHORN, + MOVE_ROCK_TOMB, + MOVE_ENDURE, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x06, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_EARTHQUAKE, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x1D, + .moves = { + MOVE_SURF, + MOVE_TOXIC, + MOVE_PROTECT, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x9C, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_CRUNCH, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x15, + .moves = { + MOVE_METEOR_MASH, + MOVE_PSYCHIC, + MOVE_EARTHQUAKE, + MOVE_LIGHT_SCREEN + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_REGIROCK, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0xB5, + .moves = { + MOVE_EARTHQUAKE, + MOVE_ANCIENT_POWER, + MOVE_FOCUS_PUNCH, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_REGICE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x96, + .moves = { + MOVE_ICE_BEAM, + MOVE_THUNDERBOLT, + MOVE_DOUBLE_TEAM, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_REGISTEEL, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x94, + .moves = { + MOVE_METAL_CLAW, + MOVE_EARTHQUAKE, + MOVE_THUNDERBOLT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x96, + .moves = { + MOVE_MIST_BALL, + MOVE_THUNDERBOLT, + MOVE_REST, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x95, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_REFLECT, + MOVE_RECOVER, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x96, + .moves = { + MOVE_SURF, + MOVE_TOXIC, + MOVE_RECOVER, + MOVE_MIRROR_COAT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_SLAKING, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x05, + .moves = { + MOVE_HYPER_BEAM, + MOVE_EARTHQUAKE, + MOVE_NONE, + MOVE_NONE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x1F, + .moves = { + MOVE_GIGA_DRAIN, + MOVE_DOUBLE_TEAM, + MOVE_LEECH_SEED, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x17, + .moves = { + MOVE_BLAZE_KICK, + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x17, + .moves = { + MOVE_MUDDY_WATER, + MOVE_MUD_SHOT, + MOVE_MIRROR_COAT, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x7B, + .moves = { + MOVE_PSYCHIC, + MOVE_SHADOW_BALL, + MOVE_DESTINY_BOND, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x56, + .moves = { + MOVE_SPORE, + MOVE_COUNTER, + MOVE_IRON_TAIL, + MOVE_GIGA_DRAIN + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x0A, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDER_PUNCH, + MOVE_FIRE_PUNCH, + MOVE_RECOVER + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x05, + .moves = { + MOVE_CROSS_CHOP, + MOVE_ROCK_TOMB, + MOVE_ENDURE, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_GYARADOS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x0C, + .moves = { + MOVE_HYPER_BEAM, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x49, + .moves = { + MOVE_TOXIC, + MOVE_CONFUSE_RAY, + MOVE_ATTRACT, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x15, + .moves = { + MOVE_CROSS_CHOP, + MOVE_COUNTER, + MOVE_EARTHQUAKE, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x63, + .moves = { + MOVE_THUNDER, + MOVE_THUNDER_WAVE, + MOVE_REST, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x07, + .moves = { + MOVE_THUNDERBOLT, + MOVE_SCREECH, + MOVE_MIRROR_COAT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_MODEST, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x45, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_GIGA_DRAIN, + MOVE_ROCK_TOMB, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x4D, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_IRON_TAIL, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x1B, + .moves = { + MOVE_LIGHT_SCREEN, + MOVE_THUNDERBOLT, + MOVE_SURF, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_NINETALES, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_OVERHEAT, + MOVE_FLAMETHROWER, + MOVE_IRON_TAIL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_GOLEM, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x25, + .moves = { + MOVE_EARTHQUAKE, + MOVE_ROAR, + MOVE_FIRE_BLAST, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x27, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_CROSS_CHOP, + MOVE_BLIZZARD, + MOVE_PSYCH_UP + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x55, + .moves = { + MOVE_MEGAHORN, + MOVE_EARTHQUAKE, + MOVE_COUNTER, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x36, + .moves = { + MOVE_SURF, + MOVE_BLIZZARD, + MOVE_ROCK_SLIDE, + MOVE_SHEER_COLD + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x5C, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_PROTECT, + MOVE_DRAGON_BREATH, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x9D, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FLAMETHROWER, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x15, + .moves = { + MOVE_METEOR_MASH, + MOVE_PSYCHIC, + MOVE_EARTHQUAKE, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_REGIROCK, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x95, + .moves = { + MOVE_EARTHQUAKE, + MOVE_ROCK_TOMB, + MOVE_FACADE, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_REGICE, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x96, + .moves = { + MOVE_BLIZZARD, + MOVE_THUNDERBOLT, + MOVE_HAIL, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_REGISTEEL, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x94, + .moves = { + MOVE_METAL_CLAW, + MOVE_EARTHQUAKE, + MOVE_ANCIENT_POWER, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x96, + .moves = { + MOVE_MIST_BALL, + MOVE_REFLECT, + MOVE_RECOVER, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x95, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0xD6, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_KECLEON, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x69, + .moves = { + MOVE_TRICK, + MOVE_REST, + MOVE_IRON_TAIL, + MOVE_DISABLE + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x5F, + .moves = { + MOVE_LEAF_BLADE, + MOVE_EARTHQUAKE, + MOVE_REST, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x7F, + .moves = { + MOVE_FOCUS_PUNCH, + MOVE_COUNTER, + MOVE_SWAGGER, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x57, + .moves = { + MOVE_IRON_TAIL, + MOVE_CURSE, + MOVE_DOUBLE_TEAM, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x3B, + .moves = { + MOVE_SHADOW_BALL, + MOVE_PSYCHIC, + MOVE_REST, + MOVE_IMPRISON + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x56, + .moves = { + MOVE_SPORE, + MOVE_FOCUS_PUNCH, + MOVE_SLUDGE_BOMB, + MOVE_IRON_TAIL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x1A, + .moves = { + MOVE_PSYCHIC, + MOVE_TRICK, + MOVE_RECOVER, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x65, + .moves = { + MOVE_REVENGE, + MOVE_COUNTER, + MOVE_FOCUS_PUNCH, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x54, + .moves = { + MOVE_RAIN_DANCE, + MOVE_PROTECT, + MOVE_TOXIC, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x4B, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_BITE, + MOVE_AIR_CUTTER, + MOVE_SHADOW_BALL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x75, + .moves = { + MOVE_CROSS_CHOP, + MOVE_ROCK_SLIDE, + MOVE_DYNAMIC_PUNCH, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_ATTRACT, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x64, + .moves = { + MOVE_THUNDER, + MOVE_DOUBLE_TEAM, + MOVE_MIRROR_COAT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x49, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_FLAMETHROWER, + MOVE_THUNDERBOLT, + MOVE_SHADOW_PUNCH + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0xCD, + .moves = { + MOVE_PROTECT, + MOVE_DIG, + MOVE_TOXIC, + MOVE_SANDSTORM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x5B, + .moves = { + MOVE_SURF, + MOVE_THUNDERBOLT, + MOVE_BLIZZARD, + MOVE_PSYCHIC + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x1A, + .moves = { + MOVE_RAIN_DANCE, + MOVE_LEECH_SEED, + MOVE_DIVE, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_RAICHU, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x4A, + .moves = { + MOVE_THUNDER, + MOVE_REVERSAL, + MOVE_FACADE, + MOVE_IRON_TAIL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_SURF, + MOVE_PSYCHIC, + MOVE_ICE_BEAM, + MOVE_IRON_TAIL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x15, + .moves = { + MOVE_MEGAHORN, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x26, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_FISSURE, + MOVE_SHEER_COLD + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x4D, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_BLIZZARD, + MOVE_HYPER_BEAM, + MOVE_DISABLE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x9C, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FIRE_BLAST, + MOVE_HYDRO_PUMP + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0xB5, + .moves = { + MOVE_METEOR_MASH, + MOVE_PSYCHIC, + MOVE_PURSUIT, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_REGIROCK, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x95, + .moves = { + MOVE_EARTHQUAKE, + MOVE_TOXIC, + MOVE_SUPERPOWER, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_REGICE, + .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .teamFlags = 0x96, + .moves = { + MOVE_ICE_BEAM, + MOVE_THUNDERBOLT, + MOVE_ANCIENT_POWER, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_REGISTEEL, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0xB4, + .moves = { + MOVE_CURSE, + MOVE_AMNESIA, + MOVE_RETURN, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x92, + .moves = { + MOVE_MIST_BALL, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x91, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0xB2, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_SLAKING, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x65, + .moves = { + MOVE_YAWN, + MOVE_SLASH, + MOVE_COUNTER, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0xDF, + .moves = { + MOVE_LEAF_BLADE, + MOVE_DETECT, + MOVE_DRAGON_CLAW, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0xD7, + .moves = { + MOVE_BLAZE_KICK, + MOVE_SKY_UPPERCUT, + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x5F, + .moves = { + MOVE_SURF, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_SHEDINJA, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0xDB, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_SHADOW_BALL, + MOVE_TOXIC, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x94, + .moves = { + MOVE_METEOR_MASH, + MOVE_PSYCHIC, + MOVE_SHADOW_BALL, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GRUMPIG, + .item = BATTLE_TOWER_ITEM_MACHO_BRACE, + .teamFlags = 0x4B, + .moves = { + MOVE_PSYCHIC, + MOVE_CONFUSE_RAY, + MOVE_TRICK, + MOVE_REFLECT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x92, + .moves = { + MOVE_MIST_BALL, + MOVE_RECOVER, + MOVE_ATTRACT, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x91, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_THUNDERBOLT, + MOVE_ICE_BEAM, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x1A, + .moves = { + MOVE_SURF, + MOVE_THUNDERBOLT, + MOVE_PSYCHIC, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x14, + .moves = { + MOVE_CROSS_CHOP, + MOVE_COUNTER, + MOVE_ROCK_TOMB, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, +}; -- cgit v1.2.3 From f15bbca1ffe425c53c9e4f43f38d97b2e49d2c31 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 22 Oct 2017 15:49:44 -0700 Subject: Move battle_tower level100 mons to src/ --- src/battle_tower.c | 1 + src/data/battle_tower/level_100_mons.h | 3903 ++++++++++++++++++++++++++++++++ src/data/battle_tower/level_50_mons.h | 310 +-- 3 files changed, 4059 insertions(+), 155 deletions(-) create mode 100644 src/data/battle_tower/level_100_mons.h (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index a2715ad52..ec1d1f9ec 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -83,6 +83,7 @@ const u16 gBattleTowerHeldItems[] = { }; #include "data/battle_tower/level_50_mons.h" +#include "data/battle_tower/level_100_mons.h" extern u8 gUnknown_08400E23[]; extern u8 gUnknown_08400E29[]; diff --git a/src/data/battle_tower/level_100_mons.h b/src/data/battle_tower/level_100_mons.h new file mode 100644 index 000000000..fff34ff1f --- /dev/null +++ b/src/data/battle_tower/level_100_mons.h @@ -0,0 +1,3903 @@ +const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = +{ + { + .species = SPECIES_LINOONE, + .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .teamFlags = 0x42, + .moves = { + MOVE_SLASH, + MOVE_GROWL, + MOVE_TAIL_WHIP, + MOVE_SAND_ATTACK + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_MIGHTYENA, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_BITE, + MOVE_HOWL, + MOVE_ODOR_SLEUTH, + MOVE_SCARY_FACE + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_BEAUTIFLY, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_GIGA_DRAIN, + MOVE_GUST, + MOVE_STUN_SPORE, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_DUSTOX, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_PSYBEAM, + MOVE_GUST, + MOVE_DOUBLE_TEAM, + MOVE_SILVER_WIND + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_LOMBRE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_ASTONISH, + MOVE_GROWL, + MOVE_MEGA_DRAIN, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LONELY, + }, + { + .species = SPECIES_NUZLEAF, + .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .teamFlags = 0x01, + .moves = { + MOVE_BULLET_SEED, + MOVE_RAZOR_WIND, + MOVE_FAINT_ATTACK, + MOVE_GROWTH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SWELLOW, + .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .teamFlags = 0x42, + .moves = { + MOVE_AERIAL_ACE, + MOVE_GROWL, + MOVE_ENDEAVOR, + MOVE_FOCUS_ENERGY + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_PELIPPER, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x02, + .moves = { + MOVE_SURF, + MOVE_WATER_SPORT, + MOVE_PROTECT, + MOVE_SUPERSONIC + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x42, + .moves = { + MOVE_MACH_PUNCH, + MOVE_MEGA_DRAIN, + MOVE_HEADBUTT, + MOVE_STUN_SPORE + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_NINJASK, + .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_SCRATCH, + MOVE_SCREECH, + MOVE_LEECH_LIFE, + MOVE_FLASH + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_BITE, + MOVE_FLY, + MOVE_SUPERSONIC, + MOVE_HAZE + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_MAWILE, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x03, + .moves = { + MOVE_VICE_GRIP, + MOVE_SWEET_SCENT, + MOVE_ASTONISH, + MOVE_STRENGTH + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_NOSEPASS, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_ROCK_THROW, + MOVE_SANDSTORM, + MOVE_HARDEN, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_DELCATTY, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x42, + .moves = { + MOVE_DOUBLE_SLAP, + MOVE_TAIL_WHIP, + MOVE_ATTRACT, + MOVE_CHARM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_CAMERUPT, + .item = BATTLE_TOWER_ITEM_CHARCOAL, + .teamFlags = 0x01, + .moves = { + MOVE_EMBER, + MOVE_TAKE_DOWN, + MOVE_GROWL, + MOVE_SANDSTORM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_ORAN_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_POISON_GAS, + MOVE_MINIMIZE, + MOVE_SLUDGE, + MOVE_SCREECH + }, + .evSpread = F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_SANDSLASH, + .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .teamFlags = 0x03, + .moves = { + MOVE_SLASH, + MOVE_SAND_ATTACK, + MOVE_DEFENSE_CURL, + MOVE_SWIFT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SPINDA, + .item = BATTLE_TOWER_ITEM_SILK_SCARF, + .teamFlags = 0x42, + .moves = { + MOVE_UPROAR, + MOVE_WATER_PULSE, + MOVE_THRASH, + MOVE_SAFEGUARD + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_WHISCASH, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_TICKLE, + MOVE_MUD_SPORT, + MOVE_WATER_GUN, + MOVE_WATER_SPORT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_CACTURNE, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x01, + .moves = { + MOVE_POISON_STING, + MOVE_PIN_MISSILE, + MOVE_ABSORB, + MOVE_COTTON_SPORE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_JIGGLYPUFF, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x42, + .moves = { + MOVE_SING, + MOVE_ROLLOUT, + MOVE_POUND, + MOVE_LIGHT_SCREEN + }, + .evSpread = F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MARILL, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x42, + .moves = { + MOVE_BUBBLE_BEAM, + MOVE_DEFENSE_CURL, + MOVE_RAIN_DANCE, + MOVE_IRON_TAIL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MAGNETON, + .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_THUNDER_SHOCK, + MOVE_SUPERSONIC, + MOVE_FLASH, + MOVE_SCREECH + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_CARVANHA, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x01, + .moves = { + MOVE_BITE, + MOVE_RAGE, + MOVE_SCARY_FACE, + MOVE_LEER + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_KECLEON, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_THIEF, + MOVE_LICK, + MOVE_BIND, + MOVE_FURY_SWIPES + }, + .evSpread = F_EV_SPREAD_DEFENSE, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_NINETALES, + .item = BATTLE_TOWER_ITEM_CHARCOAL, + .teamFlags = 0x02, + .moves = { + MOVE_EMBER, + MOVE_CONFUSE_RAY, + MOVE_FIRE_SPIN, + MOVE_SAFEGUARD + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_LONELY, + }, + { + .species = SPECIES_RAICHU, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x42, + .moves = { + MOVE_SHOCK_WAVE, + MOVE_GROWL, + MOVE_DOUBLE_TEAM, + MOVE_LIGHT_SCREEN + }, + .evSpread = F_EV_SPREAD_DEFENSE, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_SEALEO, + .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .teamFlags = 0x01, + .moves = { + MOVE_ICE_BALL, + MOVE_WATER_GUN, + MOVE_ENCORE, + MOVE_HAIL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_GRAVELER, + .item = BATTLE_TOWER_ITEM_HARD_STONE, + .teamFlags = 0x01, + .moves = { + MOVE_ROCK_THROW, + MOVE_MUD_SPORT, + MOVE_SANDSTORM, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_SHUPPET, + .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .teamFlags = 0x03, + .moves = { + MOVE_NIGHT_SHADE, + MOVE_WILL_O_WISP, + MOVE_SCREECH, + MOVE_KNOCK_OFF + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LUVDISC, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_ATTRACT, + MOVE_FLAIL, + MOVE_SWEET_KISS, + MOVE_WATER_PULSE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_LANTURN, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_THUNDER_WAVE, + MOVE_SUPERSONIC, + MOVE_WATER_GUN, + MOVE_SPARK + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_CORSOLA, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_MIRROR_COAT, + MOVE_BUBBLE, + MOVE_HARDEN, + MOVE_LIGHT_SCREEN + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_WAILMER, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_SURF, + MOVE_ROAR, + MOVE_GROWL, + MOVE_MIST + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_RHYDON, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x05, + .moves = { + MOVE_TAKE_DOWN, + MOVE_SCARY_FACE, + MOVE_TAIL_WHIP, + MOVE_ROAR + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_DODRIO, + .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .teamFlags = 0x05, + .moves = { + MOVE_FURY_ATTACK, + MOVE_PURSUIT, + MOVE_AERIAL_ACE, + MOVE_AGILITY + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x05, + .moves = { + MOVE_FURY_SWIPES, + MOVE_TAIL_WHIP, + MOVE_DISABLE, + MOVE_PSYCH_UP + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_BELLOSSOM, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x0A, + .moves = { + MOVE_GIGA_DRAIN, + MOVE_POISON_POWDER, + MOVE_STUN_SPORE, + MOVE_ACID + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_TROPIUS, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x05, + .moves = { + MOVE_STOMP, + MOVE_RAZOR_LEAF, + MOVE_GUST, + MOVE_SYNTHESIS + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SABLEYE, + .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .teamFlags = 0x0A, + .moves = { + MOVE_NIGHT_SHADE, + MOVE_FAKE_OUT, + MOVE_PSYCH_UP, + MOVE_DETECT + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x03, + .moves = { + MOVE_SONIC_BOOM, + MOVE_SCREECH, + MOVE_SPARK, + MOVE_SELF_DESTRUCT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_TENTACRUEL, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x01, + .moves = { + MOVE_ACID, + MOVE_WATER_PULSE, + MOVE_BARRIER, + MOVE_WRAP + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_CLAYDOL, + .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .teamFlags = 0x05, + .moves = { + MOVE_ANCIENT_POWER, + MOVE_MUD_SLAP, + MOVE_RAPID_SPIN, + MOVE_CONFUSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_GRUMPIG, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_PSYBEAM, + MOVE_PSYCH_UP, + MOVE_BOUNCE, + MOVE_MAGIC_COAT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_CRAWDAUNT, + .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .teamFlags = 0x05, + .moves = { + MOVE_CRABHAMMER, + MOVE_BUBBLE_BEAM, + MOVE_BRICK_BREAK, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_SEVIPER, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0x01, + .moves = { + MOVE_POISON_TAIL, + MOVE_GLARE, + MOVE_WRAP, + MOVE_THIEF + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_ZANGOOSE, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_FURY_CUTTER, + MOVE_LEER, + MOVE_QUICK_ATTACK, + MOVE_DETECT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ALTARIA, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x03, + .moves = { + MOVE_DRAGON_BREATH, + MOVE_SING, + MOVE_SAFEGUARD, + MOVE_TAKE_DOWN + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ROSELIA, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_LEECH_SEED, + MOVE_MEGA_DRAIN, + MOVE_GROWTH, + MOVE_STUN_SPORE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_VOLBEAT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x09, + .moves = { + MOVE_SIGNAL_BEAM, + MOVE_CONFUSE_RAY, + MOVE_DOUBLE_TEAM, + MOVE_LIGHT_SCREEN + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ILLUMISE, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_CHARM, + MOVE_ENCORE, + MOVE_SOLAR_BEAM, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_MAGNET, + .teamFlags = 0x03, + .moves = { + MOVE_BITE, + MOVE_HOWL, + MOVE_THUNDER_WAVE, + MOVE_SPARK + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_MAWILE, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_CRUNCH, + MOVE_IRON_DEFENSE, + MOVE_TORMENT, + MOVE_SANDSTORM + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x05, + .moves = { + MOVE_ARM_THRUST, + MOVE_FAKE_OUT, + MOVE_WHIRLWIND, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_SKARMORY, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x01, + .moves = { + MOVE_STEEL_WING, + MOVE_AGILITY, + MOVE_TAUNT, + MOVE_FLY + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_TORKOAL, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_FIRE_SPIN, + MOVE_SMOKESCREEN, + MOVE_BODY_SLAM, + MOVE_AMNESIA + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_GYARADOS, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_THRASH, + MOVE_DRAGON_RAGE, + MOVE_TWISTER, + MOVE_HYDRO_PUMP + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_MIGHTYENA, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_CRUNCH, + MOVE_HOWL, + MOVE_IRON_TAIL, + MOVE_TORMENT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_LINOONE, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x06, + .moves = { + MOVE_SLASH, + MOVE_ATTRACT, + MOVE_SHOCK_WAVE, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MASQUERAIN, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_TOXIC, + MOVE_STUN_SPORE, + MOVE_SUNNY_DAY, + MOVE_SOLAR_BEAM + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x06, + .moves = { + MOVE_BULLET_SEED, + MOVE_SLAM, + MOVE_SCREECH, + MOVE_DETECT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x06, + .moves = { + MOVE_DOUBLE_KICK, + MOVE_FLAMETHROWER, + MOVE_DOUBLE_TEAM, + MOVE_ROAR + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x49, + .moves = { + MOVE_SURF, + MOVE_MUD_SHOT, + MOVE_MUD_SPORT, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x49, + .moves = { + MOVE_DRAGON_BREATH, + MOVE_FLY, + MOVE_TOXIC, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x49, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_SMOKESCREEN, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_CORSOLA, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_ANCIENT_POWER, + MOVE_MIRROR_COAT, + MOVE_SAFEGUARD, + MOVE_REFLECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_RHYDON, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x41, + .moves = { + MOVE_EARTHQUAKE, + MOVE_IRON_TAIL, + MOVE_ROAR, + MOVE_THUNDERBOLT + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x06, + .moves = { + MOVE_MEGAHORN, + MOVE_COUNTER, + MOVE_PROTECT, + MOVE_LEER + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_GIRAFARIG, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_PSYCHIC, + MOVE_CRUNCH, + MOVE_BATON_PASS, + MOVE_AGILITY + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_XATU, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_PSYCHIC, + MOVE_FLY, + MOVE_CONFUSE_RAY, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_DODRIO, + .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .teamFlags = 0x03, + .moves = { + MOVE_DRILL_PECK, + MOVE_TRI_ATTACK, + MOVE_PURSUIT, + MOVE_TORMENT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SERIOUS, + }, + { + .species = SPECIES_VILEPLUME, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x89, + .moves = { + MOVE_POISON_POWDER, + MOVE_STUN_SPORE, + MOVE_SLEEP_POWDER, + MOVE_PETAL_DANCE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_MODEST, + }, + { + .species = SPECIES_MEDICHAM, + .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .teamFlags = 0x06, + .moves = { + MOVE_FOCUS_PUNCH, + MOVE_LIGHT_SCREEN, + MOVE_BULK_UP, + MOVE_PSYCHIC + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_ABSOL, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x06, + .moves = { + MOVE_SLASH, + MOVE_SWORDS_DANCE, + MOVE_DOUBLE_TEAM, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_DUSCLOPS, + .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .teamFlags = 0x4B, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_WILL_O_WISP, + MOVE_NIGHT_SHADE, + MOVE_DISABLE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_SHUPPET, + .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .teamFlags = 0x43, + .moves = { + MOVE_GRUDGE, + MOVE_SHADOW_BALL, + MOVE_CURSE, + MOVE_KNOCK_OFF + }, + .evSpread = F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_CASTFORM, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x82, + .moves = { + MOVE_WEATHER_BALL, + MOVE_HAIL, + MOVE_SUNNY_DAY, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SPEED, + .nature = NATURE_MODEST, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x02, + .moves = { + MOVE_SURF, + MOVE_REFRESH, + MOVE_RECOVER, + MOVE_RAIN_DANCE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_SHARPEDO, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_CRUNCH, + MOVE_FOCUS_ENERGY, + MOVE_SCARY_FACE, + MOVE_SCREECH + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x06, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SAND_ATTACK, + MOVE_DRAGON_BREATH, + MOVE_SAND_TOMB + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_TRAPINCH, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_TOXIC, + MOVE_SAND_TOMB, + MOVE_CRUNCH, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_LUNATONE, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x43, + .moves = { + MOVE_PSYCHIC, + MOVE_ROCK_THROW, + MOVE_HYPNOSIS, + MOVE_LIGHT_SCREEN + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SOLROCK, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x43, + .moves = { + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_COSMIC_POWER, + MOVE_CALM_MIND + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_BALTOY, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x43, + .moves = { + MOVE_PSYCHIC, + MOVE_EARTHQUAKE, + MOVE_REFLECT, + MOVE_SELF_DESTRUCT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_CRAWDAUNT, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x06, + .moves = { + MOVE_CRABHAMMER, + MOVE_SURF, + MOVE_PROTECT, + MOVE_BRICK_BREAK + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_WHISCASH, + .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .teamFlags = 0x06, + .moves = { + MOVE_EARTHQUAKE, + MOVE_TICKLE, + MOVE_AMNESIA, + MOVE_SURF + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SEVIPER, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x09, + .moves = { + MOVE_POISON_TAIL, + MOVE_CRUNCH, + MOVE_GIGA_DRAIN, + MOVE_HAZE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_MAGCARGO, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x89, + .moves = { + MOVE_FLAMETHROWER, + MOVE_LIGHT_SCREEN, + MOVE_AMNESIA, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .teamFlags = 0x09, + .moves = { + MOVE_KARATE_CHOP, + MOVE_SEISMIC_TOSS, + MOVE_BRICK_BREAK, + MOVE_LOW_KICK + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_SWALOT, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x86, + .moves = { + MOVE_YAWN, + MOVE_WATER_PULSE, + MOVE_SHADOW_BALL, + MOVE_SLUDGE_BOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x0C, + .moves = { + MOVE_LEAF_BLADE, + MOVE_GIGA_DRAIN, + MOVE_FURY_CUTTER, + MOVE_DETECT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x0C, + .moves = { + MOVE_BLAZE_KICK, + MOVE_FLAMETHROWER, + MOVE_PROTECT, + MOVE_QUICK_ATTACK + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x4C, + .moves = { + MOVE_SURF, + MOVE_MUD_SHOT, + MOVE_MUD_SLAP, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MIGHTYENA, + .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .teamFlags = 0x04, + .moves = { + MOVE_CRUNCH, + MOVE_HOWL, + MOVE_SWAGGER, + MOVE_SHADOW_BALL + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_LINOONE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x04, + .moves = { + MOVE_SLASH, + MOVE_REST, + MOVE_BELLY_DRUM, + MOVE_THUNDERBOLT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_BEAUTIFLY, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x08, + .moves = { + MOVE_GIGA_DRAIN, + MOVE_ATTRACT, + MOVE_MORNING_SUN, + MOVE_STUN_SPORE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_DUSTOX, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x08, + .moves = { + MOVE_PSYCHIC, + MOVE_SILVER_WIND, + MOVE_MOONLIGHT, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x0C, + .moves = { + MOVE_FAKE_OUT, + MOVE_HYDRO_PUMP, + MOVE_ICE_BEAM, + MOVE_UPROAR + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_SHIFTRY, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x0C, + .moves = { + MOVE_FRUSTRATION, + MOVE_GIGA_DRAIN, + MOVE_TORMENT, + MOVE_SWAGGER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_SWELLOW, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x88, + .moves = { + MOVE_FLY, + MOVE_ENDEAVOR, + MOVE_AERIAL_ACE, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .teamFlags = 0x4A, + .moves = { + MOVE_HYPNOSIS, + MOVE_DREAM_EATER, + MOVE_PSYCHIC, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x0C, + .moves = { + MOVE_DYNAMIC_PUNCH, + MOVE_MIND_READER, + MOVE_SNATCH, + MOVE_MEGA_DRAIN + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_VIGOROTH, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x04, + .moves = { + MOVE_SLASH, + MOVE_UPROAR, + MOVE_ENCORE, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_NINJASK, + .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .teamFlags = 0x04, + .moves = { + MOVE_FURY_CUTTER, + MOVE_GIGA_DRAIN, + MOVE_SWORDS_DANCE, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_SHEDINJA, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0xCA, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_SOLAR_BEAM, + MOVE_SUNNY_DAY, + MOVE_GRUDGE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_LOUDRED, + .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .teamFlags = 0x04, + .moves = { + MOVE_HYPER_VOICE, + MOVE_HOWL, + MOVE_SHADOW_BALL, + MOVE_TORMENT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x04, + .moves = { + MOVE_ARM_THRUST, + MOVE_BULK_UP, + MOVE_BRICK_BREAK, + MOVE_HIDDEN_POWER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .teamFlags = 0x88, + .moves = { + MOVE_PSYCHIC, + MOVE_SHADOW_BALL, + MOVE_FUTURE_SIGHT, + MOVE_DISABLE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0x88, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_TOXIC, + MOVE_MEAN_LOOK, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MAWILE, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x04, + .moves = { + MOVE_CRUNCH, + MOVE_IRON_DEFENSE, + MOVE_FAKE_TEARS, + MOVE_POISON_FANG + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_AGGRON, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x45, + .moves = { + MOVE_METAL_CLAW, + MOVE_FLAMETHROWER, + MOVE_METAL_SOUND, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GOLEM, + .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .teamFlags = 0xC5, + .moves = { + MOVE_ROLLOUT, + MOVE_DEFENSE_CURL, + MOVE_DOUBLE_TEAM, + MOVE_SELF_DESTRUCT + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_MAGNET, + .teamFlags = 0x04, + .moves = { + MOVE_THUNDER, + MOVE_RAIN_DANCE, + MOVE_THUNDER_WAVE, + MOVE_CHARGE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_VOLBEAT, + .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .teamFlags = 0x08, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_SIGNAL_BEAM, + MOVE_MOONLIGHT, + MOVE_TAIL_GLOW + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_ILLUMISE, + .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .teamFlags = 0x08, + .moves = { + MOVE_THUNDERBOLT, + MOVE_FLATTER, + MOVE_WISH, + MOVE_ENCORE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MASQUERAIN, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x88, + .moves = { + MOVE_GIGA_DRAIN, + MOVE_SILVER_WIND, + MOVE_STUN_SPORE, + MOVE_TOXIC + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_ROSELIA, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x08, + .moves = { + MOVE_PETAL_DANCE, + MOVE_GROWTH, + MOVE_SYNTHESIS, + MOVE_GRASS_WHISTLE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_IMPISH, + }, + { + .species = SPECIES_DELCATTY, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x08, + .moves = { + MOVE_SING, + MOVE_ATTRACT, + MOVE_DOUBLE_SLAP, + MOVE_HEAL_BELL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_SEAKING, + .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .teamFlags = 0x88, + .moves = { + MOVE_RAIN_DANCE, + MOVE_SURF, + MOVE_ATTRACT, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_GYARADOS, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x8C, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_EARTHQUAKE, + MOVE_DRAGON_RAGE, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CALM, + }, + { + .species = SPECIES_SWALOT, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x42, + .moves = { + MOVE_STOCKPILE, + MOVE_SWALLOW, + MOVE_SPIT_UP, + MOVE_YAWN + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_MAGCARGO, + .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_ROCK_SLIDE, + MOVE_FIRE_BLAST, + MOVE_BODY_SLAM, + MOVE_LIGHT_SCREEN + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LONELY, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_POISON_BARB, + .teamFlags = 0xC3, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_FLAMETHROWER, + MOVE_ACID_ARMOR, + MOVE_DISABLE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_SPINDA, + .item = BATTLE_TOWER_ITEM_SILK_SCARF, + .teamFlags = 0x42, + .moves = { + MOVE_DIZZY_PUNCH, + MOVE_TEETER_DANCE, + MOVE_PSYCH_UP, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_MODEST, + }, + { + .species = SPECIES_ALTARIA, + .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .teamFlags = 0x03, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_DRAGON_BREATH, + MOVE_DRAGON_DANCE, + MOVE_REFRESH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_ZANGOOSE, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_CRUSH_CLAW, + MOVE_TAUNT, + MOVE_SWORDS_DANCE, + MOVE_DETECT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_SEVIPER, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_GLARE, + MOVE_POISON_TAIL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_GRUMPIG, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x42, + .moves = { + MOVE_TOXIC, + MOVE_BOUNCE, + MOVE_CONFUSE_RAY, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_CACTURNE, + .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .teamFlags = 0x41, + .moves = { + MOVE_NEEDLE_ARM, + MOVE_INGRAIN, + MOVE_SPIKES, + MOVE_COTTON_SPORE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_CLAYDOL, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SANDSTORM, + MOVE_COSMIC_POWER, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_TENTACRUEL, + .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .teamFlags = 0xC1, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_HYDRO_PUMP, + MOVE_BARRIER, + MOVE_SUPERSONIC + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WIGGLYTUFF, + .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .teamFlags = 0xC3, + .moves = { + MOVE_SING, + MOVE_FOCUS_PUNCH, + MOVE_DISABLE, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_ADAMANT, + }, + { + .species = SPECIES_AZUMARILL, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0xC2, + .moves = { + MOVE_SURF, + MOVE_ATTRACT, + MOVE_DEFENSE_CURL, + MOVE_ROLLOUT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_RASH, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0xC3, + .moves = { + MOVE_THUNDERBOLT, + MOVE_MIRROR_COAT, + MOVE_LIGHT_SCREEN, + MOVE_SELF_DESTRUCT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x42, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_ATTRACT, + MOVE_RECOVER, + MOVE_REFRESH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_KECLEON, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x43, + .moves = { + MOVE_SKILL_SWAP, + MOVE_ANCIENT_POWER, + MOVE_WATER_PULSE, + MOVE_THUNDERBOLT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_DUSCLOPS, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x43, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_CURSE, + MOVE_REST, + MOVE_MEAN_LOOK + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_ABSOL, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_SLASH, + MOVE_SWORDS_DANCE, + MOVE_DOUBLE_TEAM, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_NINETALES, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0xC2, + .moves = { + MOVE_FLAMETHROWER, + MOVE_CONFUSE_RAY, + MOVE_DOUBLE_TEAM, + MOVE_WILL_O_WISP + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_PIKACHU, + .item = BATTLE_TOWER_ITEM_LIGHT_BALL, + .teamFlags = 0xC2, + .moves = { + MOVE_THUNDER_WAVE, + MOVE_THUNDER, + MOVE_RAIN_DANCE, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_VILEPLUME, + .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .teamFlags = 0xC3, + .moves = { + MOVE_GIGA_DRAIN, + MOVE_SLEEP_POWDER, + MOVE_MOONLIGHT, + MOVE_SLUDGE_BOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_DONPHAN, + .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .teamFlags = 0x41, + .moves = { + MOVE_EARTHQUAKE, + MOVE_DOUBLE_EDGE, + MOVE_IRON_TAIL, + MOVE_FISSURE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIRKY, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .teamFlags = 0xC3, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .teamFlags = 0x43, + .moves = { + MOVE_ICE_BEAM, + MOVE_BODY_SLAM, + MOVE_ENCORE, + MOVE_HAIL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_RELICANTH, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x41, + .moves = { + MOVE_YAWN, + MOVE_MUD_SPORT, + MOVE_DOUBLE_EDGE, + MOVE_SANDSTORM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LONELY, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x43, + .moves = { + MOVE_RAIN_DANCE, + MOVE_ICE_BEAM, + MOVE_HYDRO_PUMP, + MOVE_AGILITY + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_CRADILY, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x43, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_INGRAIN, + MOVE_ANCIENT_POWER, + MOVE_GIGA_DRAIN + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_ARMALDO, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x43, + .moves = { + MOVE_SLASH, + MOVE_ROCK_SLIDE, + MOVE_EARTHQUAKE, + MOVE_WATER_PULSE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_METAL_COAT, + .teamFlags = 0x41, + .moves = { + MOVE_METAL_CLAW, + MOVE_PSYCHIC, + MOVE_LIGHT_SCREEN, + MOVE_AGILITY + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x42, + .moves = { + MOVE_DRAGON_BREATH, + MOVE_CRUNCH, + MOVE_FLAMETHROWER, + MOVE_AERIAL_ACE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_MIGHTYENA, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_CRUNCH, + MOVE_YAWN, + MOVE_FACADE, + MOVE_HOWL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LINOONE, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x02, + .moves = { + MOVE_HYPER_BEAM, + MOVE_FACADE, + MOVE_ATTRACT, + MOVE_TRICK + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_SURF, + MOVE_FOCUS_PUNCH, + MOVE_FAKE_OUT, + MOVE_SYNTHESIS + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_EXPLOUD, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_UPROAR, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SWELLOW, + .item = BATTLE_TOWER_ITEM_LANSAT_BERRY, + .teamFlags = 0x02, + .moves = { + MOVE_FACADE, + MOVE_SUPERSONIC, + MOVE_WING_ATTACK, + MOVE_ENDEAVOR + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_PELIPPER, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x82, + .moves = { + MOVE_STOCKPILE, + MOVE_SWALLOW, + MOVE_SPIT_UP, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x01, + .moves = { + MOVE_DYNAMIC_PUNCH, + MOVE_COUNTER, + MOVE_BULK_UP, + MOVE_MIND_READER + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SHEDINJA, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_RETURN, + MOVE_DOUBLE_TEAM, + MOVE_TOXIC, + MOVE_SHADOW_BALL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_EXPLOUD, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_HYPER_BEAM, + MOVE_SUPERSONIC, + MOVE_FLAMETHROWER, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x01, + .moves = { + MOVE_CROSS_CHOP, + MOVE_COUNTER, + MOVE_FACADE, + MOVE_FAKE_OUT + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x83, + .moves = { + MOVE_PSYCHIC, + MOVE_ENCORE, + MOVE_DISABLE, + MOVE_RECOVER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x81, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_AIR_CUTTER, + MOVE_TORMENT, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SABLEYE, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x83, + .moves = { + MOVE_TOXIC, + MOVE_DETECT, + MOVE_RECOVER, + MOVE_TORMENT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_MAWILE, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x02, + .moves = { + MOVE_CRUNCH, + MOVE_SWORDS_DANCE, + MOVE_IRON_DEFENSE, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_AGGRON, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_DOUBLE_EDGE, + MOVE_IRON_DEFENSE, + MOVE_ROAR, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_GOLEM, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE, + MOVE_FLAMETHROWER, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_NOSEPASS, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x81, + .moves = { + MOVE_THUNDER_WAVE, + MOVE_ROCK_SLIDE, + MOVE_TORMENT, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x02, + .moves = { + MOVE_THUNDER, + MOVE_CRUNCH, + MOVE_THUNDER_WAVE, + MOVE_QUICK_ATTACK + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_ROSELIA, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x82, + .moves = { + MOVE_GRASS_WHISTLE, + MOVE_LEECH_SEED, + MOVE_GIGA_DRAIN, + MOVE_GROWTH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_DELCATTY, + .item = BATTLE_TOWER_ITEM_STARF_BERRY, + .teamFlags = 0x02, + .moves = { + MOVE_ASSIST, + MOVE_SING, + MOVE_ATTRACT, + MOVE_SUBSTITUTE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_TROPIUS, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0xC2, + .moves = { + MOVE_RAZOR_LEAF, + MOVE_EARTHQUAKE, + MOVE_ATTRACT, + MOVE_SYNTHESIS + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_SWALOT, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x03, + .moves = { + MOVE_YAWN, + MOVE_SLUDGE_BOMB, + MOVE_ATTRACT, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .teamFlags = 0x01, + .moves = { + MOVE_CROSS_CHOP, + MOVE_BULK_UP, + MOVE_LOW_KICK, + MOVE_BRICK_BREAK + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_CAMERUPT, + .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .teamFlags = 0x40, + .moves = { + MOVE_ERUPTION, + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE, + MOVE_OVERHEAT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_MAGCARGO, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x03, + .moves = { + MOVE_FLAMETHROWER, + MOVE_ROCK_SLIDE, + MOVE_EARTHQUAKE, + MOVE_REFLECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WEEZING, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x81, + .moves = { + MOVE_WILL_O_WISP, + MOVE_HYPER_BEAM, + MOVE_THUNDERBOLT, + MOVE_DESTINY_BOND + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_SPINDA, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x82, + .moves = { + MOVE_TRICK, + MOVE_TEETER_DANCE, + MOVE_FOCUS_PUNCH, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_SKARMORY, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x01, + .moves = { + MOVE_DRILL_PECK, + MOVE_STEEL_WING, + MOVE_TORMENT, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ALTARIA, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x02, + .moves = { + MOVE_SING, + MOVE_DRAGON_CLAW, + MOVE_ICE_BEAM, + MOVE_EARTHQUAKE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_GRUMPIG, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x82, + .moves = { + MOVE_PSYCHIC, + MOVE_CONFUSE_RAY, + MOVE_CALM_MIND, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_SHIFTRY, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x20, + .moves = { + MOVE_SWAGGER, + MOVE_FRUSTRATION, + MOVE_ATTRACT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_CLAYDOL, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x20, + .moves = { + MOVE_COSMIC_POWER, + MOVE_PSYCHIC, + MOVE_EARTHQUAKE, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x33, + .moves = { + MOVE_EARTHQUAKE, + MOVE_COUNTER, + MOVE_BELLY_DRUM, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_NOSEPASS, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x20, + .moves = { + MOVE_ROCK_SLIDE, + MOVE_THUNDER_WAVE, + MOVE_EARTHQUAKE, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_LAX, + }, + { + .species = SPECIES_DUSCLOPS, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x33, + .moves = { + MOVE_SHADOW_PUNCH, + MOVE_WILL_O_WISP, + MOVE_CONFUSE_RAY, + MOVE_DESTINY_BOND + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_SEAKING, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x20, + .moves = { + MOVE_HORN_DRILL, + MOVE_AGILITY, + MOVE_SLEEP_TALK, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_CAMERUPT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x73, + .moves = { + MOVE_EARTHQUAKE, + MOVE_ERUPTION, + MOVE_ROCK_SLIDE, + MOVE_FISSURE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_LANTURN, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x13, + .moves = { + MOVE_THUNDERBOLT, + MOVE_SURF, + MOVE_THUNDER_WAVE, + MOVE_CONFUSE_RAY + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_WEEZING, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x33, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_THUNDERBOLT, + MOVE_FIRE_BLAST, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WHISCASH, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x20, + .moves = { + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_SPARK, + MOVE_FISSURE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_AGGRON, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x51, + .moves = { + MOVE_DOUBLE_EDGE, + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_KECLEON, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x12, + .moves = { + MOVE_TRICK, + MOVE_FOCUS_PUNCH, + MOVE_ATTRACT, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_SHARPEDO, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x11, + .moves = { + MOVE_CRUNCH, + MOVE_DOUBLE_EDGE, + MOVE_SURF, + MOVE_SWAGGER + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ABSOL, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x12, + .moves = { + MOVE_DOUBLE_EDGE, + MOVE_FACADE, + MOVE_SWORDS_DANCE, + MOVE_QUICK_ATTACK + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WAILORD, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x72, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_EARTHQUAKE, + MOVE_ATTRACT, + MOVE_FISSURE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_TENTACRUEL, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x20, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_SLUDGE_BOMB, + MOVE_BARRIER, + MOVE_MIRROR_COAT + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_SABLEYE, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x32, + .moves = { + MOVE_SHADOW_BALL, + MOVE_TOXIC, + MOVE_RECOVER, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WOBBUFFET, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x20, + .moves = { + MOVE_ENCORE, + MOVE_COUNTER, + MOVE_MIRROR_COAT, + MOVE_DESTINY_BOND + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_MILD, + }, + { + .species = SPECIES_RHYDON, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x71, + .moves = { + MOVE_EARTHQUAKE, + MOVE_MEGAHORN, + MOVE_BRICK_BREAK, + MOVE_HORN_DRILL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_GLALIE, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x31, + .moves = { + MOVE_CRUNCH, + MOVE_BLIZZARD, + MOVE_HAIL, + MOVE_SHEER_COLD + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x8C, + .moves = { + MOVE_LEAF_BLADE, + MOVE_EARTHQUAKE, + MOVE_DRAGON_CLAW, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x8C, + .moves = { + MOVE_BLAZE_KICK, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x8C, + .moves = { + MOVE_SURF, + MOVE_EARTHQUAKE, + MOVE_MIRROR_COAT, + MOVE_BLIZZARD + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x1A, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDERBOLT, + MOVE_DESTINY_BOND, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x15, + .moves = { + MOVE_SPORE, + MOVE_FOCUS_PUNCH, + MOVE_MACH_PUNCH, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x58, + .moves = { + MOVE_PSYCHIC, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH, + MOVE_RECOVER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x15, + .moves = { + MOVE_CROSS_CHOP, + MOVE_EARTHQUAKE, + MOVE_FACADE, + MOVE_FAKE_OUT + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_GYARADOS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x55, + .moves = { + MOVE_HYPER_BEAM, + MOVE_EARTHQUAKE, + MOVE_SURF, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x58, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_CONFUSE_RAY, + MOVE_AIR_CUTTER, + MOVE_DOUBLE_TEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x5D, + .moves = { + MOVE_CROSS_CHOP, + MOVE_FLAMETHROWER, + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x1A, + .moves = { + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_ROAR, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x60, + .moves = { + MOVE_THUNDERBOLT, + MOVE_PROTECT, + MOVE_MIRROR_COAT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x64, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_FLAMETHROWER, + MOVE_THUNDERBOLT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x1C, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FLAMETHROWER, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x5C, + .moves = { + MOVE_SURF, + MOVE_THUNDERBOLT, + MOVE_RECOVER, + MOVE_CONFUSE_RAY + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_NINETALES, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x4A, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_TOXIC, + MOVE_FIRE_SPIN, + MOVE_HEAT_WAVE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_RAICHU, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x5A, + .moves = { + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_REVERSAL, + MOVE_IRON_TAIL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x55, + .moves = { + MOVE_SURF, + MOVE_CROSS_CHOP, + MOVE_ICE_BEAM, + MOVE_DIG + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x5D, + .moves = { + MOVE_MEGAHORN, + MOVE_EARTHQUAKE, + MOVE_ENDURE, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x26, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_EARTHQUAKE, + MOVE_SHEER_COLD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .teamFlags = 0x5B, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_DRAGON_BREATH, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x0D, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_CRUNCH, + MOVE_FIRE_BLAST + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x3D, + .moves = { + MOVE_METEOR_MASH, + MOVE_PSYCHIC, + MOVE_EARTHQUAKE, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_REGIROCK, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x3C, + .moves = { + MOVE_EARTHQUAKE, + MOVE_ANCIENT_POWER, + MOVE_THUNDERBOLT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_REGICE, + .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .teamFlags = 0x3C, + .moves = { + MOVE_ICE_BEAM, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_REGISTEEL, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x3C, + .moves = { + MOVE_METAL_CLAW, + MOVE_EARTHQUAKE, + MOVE_THUNDERBOLT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x0E, + .moves = { + MOVE_MIST_BALL, + MOVE_THUNDERBOLT, + MOVE_RECOVER, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x0D, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_THUNDERBOLT, + MOVE_RECOVER, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x1A, + .moves = { + MOVE_SURF, + MOVE_TOXIC, + MOVE_RECOVER, + MOVE_MIRROR_COAT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_SLAKING, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x15, + .moves = { + MOVE_YAWN, + MOVE_FOCUS_PUNCH, + MOVE_COUNTER, + MOVE_SLACK_OFF + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x8C, + .moves = { + MOVE_GIGA_DRAIN, + MOVE_DOUBLE_TEAM, + MOVE_LEECH_SEED, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x8C, + .moves = { + MOVE_BLAZE_KICK, + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE, + MOVE_QUICK_ATTACK + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x8C, + .moves = { + MOVE_MUDDY_WATER, + MOVE_MUD_SHOT, + MOVE_MIRROR_COAT, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDERBOLT, + MOVE_HYPNOSIS, + MOVE_DREAM_EATER + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_SPORE, + MOVE_COUNTER, + MOVE_SKY_UPPERCUT, + MOVE_GIGA_DRAIN + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x58, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDER_PUNCH, + MOVE_FIRE_PUNCH, + MOVE_RECOVER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x04, + .moves = { + MOVE_CROSS_CHOP, + MOVE_COUNTER, + MOVE_ENDURE, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_GYARADOS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x44, + .moves = { + MOVE_HYPER_BEAM, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_BOLD, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x48, + .moves = { + MOVE_TOXIC, + MOVE_CONFUSE_RAY, + MOVE_ATTRACT, + MOVE_FLY + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x5D, + .moves = { + MOVE_CROSS_CHOP, + MOVE_COUNTER, + MOVE_EARTHQUAKE, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_THUNDER, + MOVE_THUNDER_WAVE, + MOVE_QUICK_ATTACK, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x60, + .moves = { + MOVE_THUNDERBOLT, + MOVE_LIGHT_SCREEN, + MOVE_MIRROR_COAT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x64, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_GIGA_DRAIN, + MOVE_FLAMETHROWER, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x1C, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_IRON_TAIL, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x5C, + .moves = { + MOVE_BLIZZARD, + MOVE_THUNDERBOLT, + MOVE_PSYCHIC, + MOVE_RECOVER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_DODRIO, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x5A, + .moves = { + MOVE_DRILL_PECK, + MOVE_TRI_ATTACK, + MOVE_AGILITY, + MOVE_FACADE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_RAICHU, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x4A, + .moves = { + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_ATTRACT, + MOVE_FOCUS_PUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x45, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_CROSS_CHOP, + MOVE_BLIZZARD, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x5D, + .moves = { + MOVE_MEGAHORN, + MOVE_EARTHQUAKE, + MOVE_COUNTER, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x26, + .moves = { + MOVE_SURF, + MOVE_BLIZZARD, + MOVE_ROCK_SLIDE, + MOVE_SHEER_COLD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x5C, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_ICE_BEAM, + MOVE_DRAGON_BREATH, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .teamFlags = 0x1D, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_CRUNCH, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x3D, + .moves = { + MOVE_METEOR_MASH, + MOVE_PSYCHIC, + MOVE_EARTHQUAKE, + MOVE_SHADOW_BALL + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_REGIROCK, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x3C, + .moves = { + MOVE_EARTHQUAKE, + MOVE_THUNDERBOLT, + MOVE_FOCUS_PUNCH, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_REGICE, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x3C, + .moves = { + MOVE_ICE_BEAM, + MOVE_THUNDERBOLT, + MOVE_HAIL, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_REGISTEEL, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x3C, + .moves = { + MOVE_METAL_CLAW, + MOVE_EARTHQUAKE, + MOVE_ANCIENT_POWER, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x1E, + .moves = { + MOVE_MIST_BALL, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .teamFlags = 0x1D, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x1A, + .moves = { + MOVE_HYDRO_PUMP, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_MIRROR_COAT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_SLAKING, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x15, + .moves = { + MOVE_YAWN, + MOVE_FOCUS_PUNCH, + MOVE_COUNTER, + MOVE_PURSUIT + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x8C, + .moves = { + MOVE_LEAF_BLADE, + MOVE_ROCK_TOMB, + MOVE_DRAGON_CLAW, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .teamFlags = 0x8C, + .moves = { + MOVE_FOCUS_PUNCH, + MOVE_COUNTER, + MOVE_SWAGGER, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x8C, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_ATTRACT, + MOVE_REST + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_GARDEVOIR, + .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .teamFlags = 0x0A, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDERBOLT, + MOVE_ATTRACT, + MOVE_WILL_O_WISP + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BRELOOM, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x05, + .moves = { + MOVE_SPORE, + MOVE_FOCUS_PUNCH, + MOVE_MACH_PUNCH, + MOVE_COUNTER + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .teamFlags = 0x58, + .moves = { + MOVE_PSYCHIC, + MOVE_TRICK, + MOVE_RECOVER, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_HARIYAMA, + .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .teamFlags = 0x05, + .moves = { + MOVE_REVENGE, + MOVE_COUNTER, + MOVE_FOCUS_PUNCH, + MOVE_REVERSAL + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x0A, + .moves = { + MOVE_RAIN_DANCE, + MOVE_LEECH_SEED, + MOVE_GIGA_DRAIN, + MOVE_DIVE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_CROBAT, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x48, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_CONFUSE_RAY, + MOVE_SHADOW_BALL, + MOVE_SNATCH + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x5D, + .moves = { + MOVE_CROSS_CHOP, + MOVE_FIRE_BLAST, + MOVE_LOW_KICK, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_MANECTRIC, + .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .teamFlags = 0x08, + .moves = { + MOVE_THUNDERBOLT, + MOVE_THUNDER_WAVE, + MOVE_ATTRACT, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_ELECTRODE, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x60, + .moves = { + MOVE_THUNDER, + MOVE_SWIFT, + MOVE_MIRROR_COAT, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_BASHFUL, + }, + { + .species = SPECIES_MUK, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x64, + .moves = { + MOVE_SLUDGE_BOMB, + MOVE_FLAMETHROWER, + MOVE_THUNDERBOLT, + MOVE_SHADOW_PUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_FLYGON, + .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .teamFlags = 0x0C, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FIRE_BLAST, + MOVE_SANDSTORM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_TIMID, + }, + { + .species = SPECIES_STARMIE, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x4C, + .moves = { + MOVE_SURF, + MOVE_THUNDERBOLT, + MOVE_ICE_BEAM, + MOVE_PSYCHIC + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LUDICOLO, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x4A, + .moves = { + MOVE_LEECH_SEED, + MOVE_ATTRACT, + MOVE_DOUBLE_TEAM, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_SKARMORY, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x4B, + .moves = { + MOVE_DRILL_PECK, + MOVE_STEEL_WING, + MOVE_ATTRACT, + MOVE_PURSUIT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED, + .nature = NATURE_SASSY, + }, + { + .species = SPECIES_GOLDUCK, + .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .teamFlags = 0x49, + .moves = { + MOVE_SURF, + MOVE_PSYCHIC, + MOVE_ICE_BEAM, + MOVE_CROSS_CHOP + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_JOLLY, + }, + { + .species = SPECIES_HERACROSS, + .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .teamFlags = 0x5D, + .moves = { + MOVE_MEGAHORN, + MOVE_EARTHQUAKE, + MOVE_FOCUS_PUNCH, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_WALREIN, + .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .teamFlags = 0x26, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_FISSURE, + MOVE_SHEER_COLD + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_KINGDRA, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x5C, + .moves = { + MOVE_SURF, + MOVE_BLIZZARD, + MOVE_HYPER_BEAM, + MOVE_FLAIL + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x1D, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_EARTHQUAKE, + MOVE_FIRE_BLAST, + MOVE_HYDRO_PUMP + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_NAUGHTY, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x3D, + .moves = { + MOVE_METEOR_MASH, + MOVE_PSYCHIC, + MOVE_EARTHQUAKE, + MOVE_HYPER_BEAM + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_REGIROCK, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x3C, + .moves = { + MOVE_EARTHQUAKE, + MOVE_THUNDERBOLT, + MOVE_SUPERPOWER, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_REGICE, + .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .teamFlags = 0x3C, + .moves = { + MOVE_ICE_BEAM, + MOVE_THUNDERBOLT, + MOVE_ANCIENT_POWER, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, + .nature = NATURE_CAREFUL, + }, + { + .species = SPECIES_REGISTEEL, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x3C, + .moves = { + MOVE_METAL_CLAW, + MOVE_THUNDERBOLT, + MOVE_HYPER_BEAM, + MOVE_EXPLOSION + }, + .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_GENTLE, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x1E, + .moves = { + MOVE_MIST_BALL, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .teamFlags = 0x1D, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_THUNDERBOLT, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_MILOTIC, + .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .teamFlags = 0x1A, + .moves = { + MOVE_SURF, + MOVE_ICE_BEAM, + MOVE_RECOVER, + MOVE_ATTRACT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_BRAVE, + }, + { + .species = SPECIES_ALTARIA, + .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .teamFlags = 0x0A, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_ICE_BEAM, + MOVE_SING, + MOVE_FLAMETHROWER + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_SCEPTILE, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x9C, + .moves = { + MOVE_LEAF_BLADE, + MOVE_DETECT, + MOVE_DRAGON_CLAW, + MOVE_CRUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_BLAZIKEN, + .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .teamFlags = 0x9C, + .moves = { + MOVE_BLAZE_KICK, + MOVE_SKY_UPPERCUT, + MOVE_EARTHQUAKE, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, + .nature = NATURE_DOCILE, + }, + { + .species = SPECIES_SWAMPERT, + .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .teamFlags = 0x9C, + .moves = { + MOVE_SURF, + MOVE_EARTHQUAKE, + MOVE_ICE_BEAM, + MOVE_ROCK_TOMB + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SHEDINJA, + .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .teamFlags = 0x20, + .moves = { + MOVE_CONFUSE_RAY, + MOVE_SHADOW_BALL, + MOVE_TOXIC, + MOVE_GRUDGE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_METAGROSS, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x1D, + .moves = { + MOVE_METEOR_MASH, + MOVE_EARTHQUAKE, + MOVE_DOUBLE_TEAM, + MOVE_PROTECT + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, + .nature = NATURE_NAIVE, + }, + { + .species = SPECIES_ALAKAZAM, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x58, + .moves = { + MOVE_PSYCHIC, + MOVE_THUNDER_PUNCH, + MOVE_ICE_PUNCH, + MOVE_FIRE_PUNCH + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HASTY, + }, + { + .species = SPECIES_LATIAS, + .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .teamFlags = 0x1E, + .moves = { + MOVE_MIST_BALL, + MOVE_THUNDERBOLT, + MOVE_ICE_BEAM, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_QUIET, + }, + { + .species = SPECIES_LATIOS, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x1D, + .moves = { + MOVE_LUSTER_PURGE, + MOVE_THUNDERBOLT, + MOVE_ICE_BEAM, + MOVE_DRAGON_CLAW + }, + .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED, + .nature = NATURE_HARDY, + }, + { + .species = SPECIES_SALAMENCE, + .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .teamFlags = 0x1D, + .moves = { + MOVE_DRAGON_CLAW, + MOVE_FLAMETHROWER, + MOVE_EARTHQUAKE, + MOVE_AERIAL_ACE + }, + .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE, + .nature = NATURE_RELAXED, + }, + { + .species = SPECIES_MACHAMP, + .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .teamFlags = 0x5D, + .moves = { + MOVE_CROSS_CHOP, + MOVE_EARTHQUAKE, + MOVE_LOW_KICK, + MOVE_ROCK_SLIDE + }, + .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, + .nature = NATURE_HARDY, + }, +}; \ No newline at end of file diff --git a/src/data/battle_tower/level_50_mons.h b/src/data/battle_tower/level_50_mons.h index 65b66b7ef..8e1463a86 100644 --- a/src/data/battle_tower/level_50_mons.h +++ b/src/data/battle_tower/level_50_mons.h @@ -5,11 +5,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_ORAN_BERRY, .teamFlags = 0x42, .moves = { - MOVE_QUICK_ATTACK, - MOVE_THUNDER_WAVE, - MOVE_THUNDER_SHOCK, - MOVE_GROWL - }, + MOVE_QUICK_ATTACK, + MOVE_THUNDER_WAVE, + MOVE_THUNDER_SHOCK, + MOVE_GROWL + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, .nature = NATURE_HARDY, }, @@ -18,11 +18,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x41, .moves = { - MOVE_ABSORB, - MOVE_STUN_SPORE, - MOVE_GUST, - MOVE_SAFEGUARD - }, + MOVE_ABSORB, + MOVE_STUN_SPORE, + MOVE_GUST, + MOVE_SAFEGUARD + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, .nature = NATURE_BRAVE, }, @@ -31,11 +31,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x07, .moves = { - MOVE_PECK, - MOVE_WING_ATTACK, - MOVE_AERIAL_ACE, - MOVE_AGILITY - }, + MOVE_PECK, + MOVE_WING_ATTACK, + MOVE_AERIAL_ACE, + MOVE_AGILITY + }, .evSpread = F_EV_SPREAD_ATTACK, .nature = NATURE_GENTLE, }, @@ -44,11 +44,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x0B, .moves = { - MOVE_HAIL, - MOVE_ENCORE, - MOVE_ICE_BALL, - MOVE_TOXIC - }, + MOVE_HAIL, + MOVE_ENCORE, + MOVE_ICE_BALL, + MOVE_TOXIC + }, .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, .nature = NATURE_ADAMANT, }, @@ -57,11 +57,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x07, .moves = { - MOVE_PECK, - MOVE_FLAIL, - MOVE_FURY_ATTACK, - MOVE_SURF - }, + MOVE_PECK, + MOVE_FLAIL, + MOVE_FURY_ATTACK, + MOVE_SURF + }, .evSpread = F_EV_SPREAD_SPEED, .nature = NATURE_HASTY, }, @@ -70,11 +70,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x42, .moves = { - MOVE_FIRE_SPIN, - MOVE_PROTECT, - MOVE_SAND_ATTACK, - MOVE_SLASH - }, + MOVE_FIRE_SPIN, + MOVE_PROTECT, + MOVE_SAND_ATTACK, + MOVE_SLASH + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, .nature = NATURE_RELAXED, }, @@ -83,11 +83,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x41, .moves = { - MOVE_STUN_SPORE, - MOVE_WATER_SPORT, - MOVE_QUICK_ATTACK, - MOVE_GUST - }, + MOVE_STUN_SPORE, + MOVE_WATER_SPORT, + MOVE_QUICK_ATTACK, + MOVE_GUST + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP, .nature = NATURE_IMPISH, }, @@ -96,11 +96,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_NONE, .teamFlags = 0x41, .moves = { - MOVE_FLATTER, - MOVE_COVET, - MOVE_WISH, - MOVE_FACADE - }, + MOVE_FLATTER, + MOVE_COVET, + MOVE_WISH, + MOVE_FACADE + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, .nature = NATURE_HARDY, }, @@ -109,11 +109,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_SILK_SCARF, .teamFlags = 0x42, .moves = { - MOVE_ATTRACT, - MOVE_TAIL_WHIP, - MOVE_FAINT_ATTACK, - MOVE_DIG - }, + MOVE_ATTRACT, + MOVE_TAIL_WHIP, + MOVE_FAINT_ATTACK, + MOVE_DIG + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, .nature = NATURE_LONELY, }, @@ -122,11 +122,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x0B, .moves = { - MOVE_TAIL_WHIP, - MOVE_SLASH, - MOVE_LICK, - MOVE_SCREECH - }, + MOVE_TAIL_WHIP, + MOVE_SLASH, + MOVE_LICK, + MOVE_SCREECH + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE, .nature = NATURE_BRAVE, }, @@ -135,11 +135,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x05, .moves = { - MOVE_BITE, - MOVE_TAKE_DOWN, - MOVE_ROAR, - MOVE_HOWL - }, + MOVE_BITE, + MOVE_TAKE_DOWN, + MOVE_ROAR, + MOVE_HOWL + }, .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, .nature = NATURE_DOCILE, }, @@ -148,11 +148,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, .teamFlags = 0x05, .moves = { - MOVE_FAINT_ATTACK, - MOVE_COUNTER, - MOVE_SCRATCH, - MOVE_TAUNT - }, + MOVE_FAINT_ATTACK, + MOVE_COUNTER, + MOVE_SCRATCH, + MOVE_TAUNT + }, .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, .nature = NATURE_LAX, }, @@ -161,11 +161,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x05, .moves = { - MOVE_LEER, - MOVE_DIG, - MOVE_LOW_KICK, - MOVE_FOCUS_PUNCH - }, + MOVE_LEER, + MOVE_DIG, + MOVE_LOW_KICK, + MOVE_FOCUS_PUNCH + }, .evSpread = F_EV_SPREAD_SPEED, .nature = NATURE_TIMID, }, @@ -174,11 +174,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x05, .moves = { - MOVE_STRENGTH, - MOVE_ROCK_TOMB, - MOVE_STOMP, - MOVE_ROCK_SMASH - }, + MOVE_STRENGTH, + MOVE_ROCK_TOMB, + MOVE_STOMP, + MOVE_ROCK_SMASH + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, .nature = NATURE_QUIRKY, }, @@ -187,11 +187,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x0B, .moves = { - MOVE_POISON_STING, - MOVE_GROWTH, - MOVE_ABSORB, - MOVE_SOLAR_BEAM - }, + MOVE_POISON_STING, + MOVE_GROWTH, + MOVE_ABSORB, + MOVE_SOLAR_BEAM + }, .evSpread = F_EV_SPREAD_SP_ATTACK, .nature = NATURE_HARDY, }, @@ -200,11 +200,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x0A, .moves = { - MOVE_FLAIL, - MOVE_SAND_ATTACK, - MOVE_REST, - MOVE_SURF - }, + MOVE_FLAIL, + MOVE_SAND_ATTACK, + MOVE_REST, + MOVE_SURF + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK, .nature = NATURE_SASSY, }, @@ -213,11 +213,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x03, .moves = { - MOVE_PURSUIT, - MOVE_TRI_ATTACK, - MOVE_GROWL, - MOVE_AGILITY - }, + MOVE_PURSUIT, + MOVE_TRI_ATTACK, + MOVE_GROWL, + MOVE_AGILITY + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, .nature = NATURE_SERIOUS, }, @@ -226,11 +226,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x0B, .moves = { - MOVE_WATER_GUN, - MOVE_AMNESIA, - MOVE_MAGNITUDE, - MOVE_MUD_SLAP - }, + MOVE_WATER_GUN, + MOVE_AMNESIA, + MOVE_MAGNITUDE, + MOVE_MUD_SLAP + }, .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, .nature = NATURE_LAX, }, @@ -239,11 +239,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_SILVER_POWDER, .teamFlags = 0x41, .moves = { - MOVE_SAND_ATTACK, - MOVE_FURY_CUTTER, - MOVE_AGILITY, - MOVE_HARDEN - }, + MOVE_SAND_ATTACK, + MOVE_FURY_CUTTER, + MOVE_AGILITY, + MOVE_HARDEN + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, .nature = NATURE_QUIET, }, @@ -252,11 +252,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x01, .moves = { - MOVE_PROTECT, - MOVE_NIGHT_SHADE, - MOVE_ASTONISH, - MOVE_WILL_O_WISP - }, + MOVE_PROTECT, + MOVE_NIGHT_SHADE, + MOVE_ASTONISH, + MOVE_WILL_O_WISP + }, .evSpread = F_EV_SPREAD_HP, .nature = NATURE_HARDY, }, @@ -265,11 +265,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x07, .moves = { - MOVE_DIG, - MOVE_EMBER, - MOVE_GROWL, - MOVE_ROCK_SMASH - }, + MOVE_DIG, + MOVE_EMBER, + MOVE_GROWL, + MOVE_ROCK_SMASH + }, .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK, .nature = NATURE_BOLD, }, @@ -278,11 +278,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x4A, .moves = { - MOVE_TEETER_DANCE, - MOVE_FLAIL, - MOVE_PSYCH_UP, - MOVE_DOUBLE_EDGE - }, + MOVE_TEETER_DANCE, + MOVE_FLAIL, + MOVE_PSYCH_UP, + MOVE_DOUBLE_EDGE + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, .nature = NATURE_CALM, }, @@ -291,11 +291,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x09, .moves = { - MOVE_SCREECH, - MOVE_GLARE, - MOVE_DIG, - MOVE_POISON_FANG - }, + MOVE_SCREECH, + MOVE_GLARE, + MOVE_DIG, + MOVE_POISON_FANG + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, .nature = NATURE_HARDY, }, @@ -304,11 +304,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x49, .moves = { - MOVE_SAND_ATTACK, - MOVE_SAND_TOMB, - MOVE_FACADE, - MOVE_TOXIC - }, + MOVE_SAND_ATTACK, + MOVE_SAND_TOMB, + MOVE_FACADE, + MOVE_TOXIC + }, .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP, .nature = NATURE_HARDY, }, @@ -317,11 +317,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x42, .moves = { - MOVE_BUBBLE_BEAM, - MOVE_TAIL_WHIP, - MOVE_RAIN_DANCE, - MOVE_ROLLOUT - }, + MOVE_BUBBLE_BEAM, + MOVE_TAIL_WHIP, + MOVE_RAIN_DANCE, + MOVE_ROLLOUT + }, .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, .nature = NATURE_HARDY, }, @@ -330,11 +330,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_MENTAL_HERB, .teamFlags = 0x07, .moves = { - MOVE_STRENGTH, - MOVE_TAUNT, - MOVE_CRUSH_CLAW, - MOVE_DETECT - }, + MOVE_STRENGTH, + MOVE_TAUNT, + MOVE_CRUSH_CLAW, + MOVE_DETECT + }, .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP, .nature = NATURE_HARDY, }, @@ -343,11 +343,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x07, .moves = { - MOVE_REVERSAL, - MOVE_MEDITATE, - MOVE_CONFUSION, - MOVE_FACADE - }, + MOVE_REVERSAL, + MOVE_MEDITATE, + MOVE_CONFUSION, + MOVE_FACADE + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE, .nature = NATURE_HASTY, }, @@ -356,11 +356,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x0A, .moves = { - MOVE_GROWTH, - MOVE_MEGA_DRAIN, - MOVE_TOXIC, - MOVE_CUT - }, + MOVE_GROWTH, + MOVE_MEGA_DRAIN, + MOVE_TOXIC, + MOVE_CUT + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK, .nature = NATURE_NAUGHTY, }, @@ -369,11 +369,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x0B, .moves = { - MOVE_STOCKPILE, - MOVE_SPIT_UP, - MOVE_SLUDGE, - MOVE_POISON_GAS - }, + MOVE_STOCKPILE, + MOVE_SPIT_UP, + MOVE_SLUDGE, + MOVE_POISON_GAS + }, .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK, .nature = NATURE_HARDY, }, @@ -382,11 +382,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_MAGNET, .teamFlags = 0x0B, .moves = { - MOVE_SUPERSONIC, - MOVE_THUNDER_WAVE, - MOVE_SCREECH, - MOVE_TRI_ATTACK - }, + MOVE_SUPERSONIC, + MOVE_THUNDER_WAVE, + MOVE_SCREECH, + MOVE_TRI_ATTACK + }, .evSpread = F_EV_SPREAD_SPEED, .nature = NATURE_HARDY, }, @@ -395,11 +395,11 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x09, .moves = { - MOVE_CONFUSION, - MOVE_TOXIC, - MOVE_TORMENT, - MOVE_PROTECT - }, + MOVE_CONFUSION, + MOVE_TOXIC, + MOVE_TORMENT, + MOVE_PROTECT + }, .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP, .nature = NATURE_BOLD, }, -- cgit v1.2.3 From f90bc99a49a3d4fa60e96cd6fbcb546f8e3a1da0 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 23 Oct 2017 17:45:02 -0700 Subject: Move all battle_tower data into src/ --- src/battle_tower.c | 152 +++- src/data/battle_tower/trainers.h | 1700 ++++++++++++++++++++------------------ 2 files changed, 1047 insertions(+), 805 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index ec1d1f9ec..507d2be10 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -85,18 +85,160 @@ const u16 gBattleTowerHeldItems[] = { #include "data/battle_tower/level_50_mons.h" #include "data/battle_tower/level_100_mons.h" +const u8 gUnknown_08405E60[] = { + 4, + 7, + 8, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 23, + 29, + 32, + 34, + 36, + 38, + 39, + 41, + 43, + 45, + 46, + 47, + 53, + 56, + 64, + 66, + 72, + 73, +}; + +const u8 gUnknown_08405E7E[] = { + 3, + 6, + 9, + 10, + 11, + 12, + 22, + 30, + 33, + 35, + 40, + 42, + 44, + 48, + 49, + 50, + 51, + 65, + 67, + 71, +}; + +const u8 gUnknown_08405E92[] = { + MAP_OBJ_GFX_HIKER, + MAP_OBJ_GFX_TUBER_M, + MAP_OBJ_GFX_MAN_4, + MAP_OBJ_GFX_BOY_4, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_BLACK_BELT, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_CAMPER, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_PSYCHIC_M, + MAP_OBJ_GFX_GENTLEMAN, + MAP_OBJ_GFX_SCHOOL_KID_M, + MAP_OBJ_GFX_MAN_3, + MAP_OBJ_GFX_OLD_MAN_1, + MAP_OBJ_GFX_YOUNGSTER, + MAP_OBJ_GFX_FISHERMAN, + MAP_OBJ_GFX_CYCLING_TRIATHLETE_M, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_MAN_4, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_LITTLE_BOY_1, + MAP_OBJ_GFX_SAILOR, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_MAN_5, + MAP_OBJ_GFX_CAMPER, + MAP_OBJ_GFX_BUG_CATCHER, + MAP_OBJ_GFX_HIKER, +}; + +const u8 gUnknown_08405EB0[] = { + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_TUBER_F, + MAP_OBJ_GFX_WOMAN_7, + MAP_OBJ_GFX_WOMAN_1, + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_BEAUTY, + MAP_OBJ_GFX_LASS, + MAP_OBJ_GFX_GIRL_3, + MAP_OBJ_GFX_WOMAN_2, + MAP_OBJ_GFX_OLD_WOMAN_1, + MAP_OBJ_GFX_CYCLING_TRIATHLETE_F, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_GIRL_3, + MAP_OBJ_GFX_WOMAN_7, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_PICNICKER, + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_PICNICKER, + MAP_OBJ_GFX_LASS, +}; + +const u16 gBattleTowerBanlist[] = { + SPECIES_MEW, + SPECIES_MEWTWO, + SPECIES_HO_OH, + SPECIES_LUGIA, + SPECIES_CELEBI, + SPECIES_KYOGRE, + SPECIES_GROUDON, + SPECIES_RAYQUAZA, + SPECIES_JIRACHI, + SPECIES_DEOXYS, + 0xFFFF, +}; + +const u16 gUnknown_08405EDA[] = { + ITEM_HP_UP, + ITEM_PROTEIN, + ITEM_IRON, + ITEM_CALCIUM, + ITEM_CARBOS, + ITEM_ZINC, +}; + +const u16 gUnknown_08405EE6[] = { + ITEM_BRIGHT_POWDER, + ITEM_WHITE_HERB, + ITEM_QUICK_CLAW, + ITEM_LEFTOVERS, + ITEM_MENTAL_HERB, + ITEM_KINGS_ROCK, + ITEM_FOCUS_BAND, + ITEM_SCOPE_LENS, + ITEM_CHOICE_BAND, +}; + extern u8 gUnknown_08400E23[]; extern u8 gUnknown_08400E29[]; extern u8 gUnknown_08400E2E[]; extern u8 gUnknown_08400E30[]; -extern u16 gBattleTowerBanlist[]; extern u8 gTrainerClassToPicIndex[]; extern u8 gTrainerClassToNameIndex[]; -extern u8 gUnknown_08405EB0[]; -extern u8 gUnknown_08405E7E[]; -extern u8 gUnknown_08405E92[]; -extern u8 gUnknown_08405E60[]; extern void sub_8135C44(void); extern void sub_813601C(void); diff --git a/src/data/battle_tower/trainers.h b/src/data/battle_tower/trainers.h index 857231e61..b5eb3da7a 100644 --- a/src/data/battle_tower/trainers.h +++ b/src/data/battle_tower/trainers.h @@ -4,1400 +4,1500 @@ const struct BattleTowerTrainer gBattleTowerTrainers[] = .trainerClass = TRAINER_CLASS_YOUNGSTER, .name = _("ALVIN"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_READY, - EC_WORD_QUES, - EC_WORD_HERE_I_COME, - EC_WORD_EXCL, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_READY, + EC_WORD_QUES, + EC_WORD_HERE_I_COME, + EC_WORD_EXCL, + }, }, }, { .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .name = _("DIRK"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_OKAY, - EC_WORD_I_AM, - EC_WORD_GOING, - EC_WORD_FOR, - EC_WORD_IT, - EC_WORD_EXCL, + .greeting = { + .easyChat = { + EC_WORD_OKAY, + EC_WORD_I_AM, + EC_WORD_GOING, + EC_WORD_FOR, + EC_WORD_IT, + EC_WORD_EXCL, + }, }, }, { .trainerClass = TRAINER_CLASS_LADY, .name = _("CYBIL"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_YOU_RE, - EC_WORD_A, - EC_WORD_PUSHOVER, - EC_WORD_LET_S, - EC_WORD_GET, - EC_WORD_GOING, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_A, + EC_WORD_PUSHOVER, + EC_WORD_LET_S, + EC_WORD_GET, + EC_WORD_GOING, + }, }, }, { .trainerClass = TRAINER_CLASS_BLACK_BELT, .name = _("CHEN"), .teamFlags = 0x05, - .padding = 0, - .easyChat = { - EC_WORD_MY, - EC_WORD_SPIRIT, - EC_WORD_IS, - EC_WORD_ENOUGH, - EC_WORD_SNORT, - EC_WORD_ARRGH, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_SPIRIT, + EC_WORD_IS, + EC_WORD_ENOUGH, + EC_WORD_SNORT, + EC_WORD_ARRGH, + }, }, }, { .trainerClass = TRAINER_CLASS_NINJA_BOY, .name = _("YOSHI"), .teamFlags = 0x05, - .padding = 0, - .easyChat = { - EC_WORD_GO, - EC_WORD_MY, - EC_WORD_POKEMON, - EC_WORD_FIGHT, - EC_WORD_THE, - EC_WORD_BATTLE, + .greeting = { + .easyChat = { + EC_WORD_GO, + EC_WORD_MY, + EC_WORD_POKEMON, + EC_WORD_FIGHT, + EC_WORD_THE, + EC_WORD_BATTLE, + }, }, }, { .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, .name = _("TINA"), .teamFlags = 0x0A, - .padding = 0, - .easyChat = { - EC_WORD_STUDY, - EC_WORD_IS, - EC_WORD_BORING, - EC_WORD_LET_S, - EC_WORD_BATTLE, - EC_WORD_NOW, + .greeting = { + .easyChat = { + EC_WORD_STUDY, + EC_WORD_IS, + EC_WORD_BORING, + EC_WORD_LET_S, + EC_WORD_BATTLE, + EC_WORD_NOW, + }, }, }, { .trainerClass = TRAINER_CLASS_BUG_MANIAC, .name = _("COREY"), .teamFlags = 0x41, - .padding = 0, - .easyChat = { - EC_WORD_HEY, - EC_WORD_I, - EC_WORD_WILL, - EC_MOVE2(TRANSFORM), - EC_WORD_FOR, - EC_MOVE(STRENGTH), + .greeting = { + .easyChat = { + EC_WORD_HEY, + EC_WORD_I, + EC_WORD_WILL, + EC_MOVE2(TRANSFORM), + EC_WORD_FOR, + EC_MOVE(STRENGTH), + }, }, }, { .trainerClass = TRAINER_CLASS_FISHERMAN, .name = _("GORDON"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_NEED, - EC_WORD_A, - EC_WORD_VACATION, - EC_WORD_RIGHT, - EC_WORD_NOW, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_NEED, + EC_WORD_A, + EC_WORD_VACATION, + EC_WORD_RIGHT, + EC_WORD_NOW, + }, }, }, { .trainerClass = TRAINER_CLASS_TUBER_F, .name = _("ANN"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_WE, - EC_WORD_ALL, - EC_WORD_ADORE, - EC_WORD_POKEMON, - EC_WORD_ABSOLUTELY, - EC_WORD_TRULY, + .greeting = { + .easyChat = { + EC_WORD_WE, + EC_WORD_ALL, + EC_WORD_ADORE, + EC_WORD_POKEMON, + EC_WORD_ABSOLUTELY, + EC_WORD_TRULY, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEFAN_F, .name = _("JULIA"), .teamFlags = 0x42, - .padding = 0, - .easyChat = { - EC_WORD_I_AM, - EC_WORD_A, - EC_WORD_CUTE, - EC_WORD_LADY, - EC_WORD_YES, - EC_WORD_I_AM, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_A, + EC_WORD_CUTE, + EC_WORD_LADY, + EC_WORD_YES, + EC_WORD_I_AM, + }, }, }, { .trainerClass = TRAINER_CLASS_GENTLEMAN, .name = _("GREGORY"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_THINK, - EC_WORD_WE, - EC_WORD_SHOULD, - EC_WORD_START, - EC_WORD_TODAY, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_THINK, + EC_WORD_WE, + EC_WORD_SHOULD, + EC_WORD_START, + EC_WORD_TODAY, + }, }, }, { .trainerClass = TRAINER_CLASS_CAMPER, .name = _("KEITH"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_YOU_RE, - EC_WORD_MY, - EC_WORD_FRIEND, - EC_WORD_FROM, - EC_WORD_NOW, - EC_WORD_ON, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_MY, + EC_WORD_FRIEND, + EC_WORD_FROM, + EC_WORD_NOW, + EC_WORD_ON, + }, }, }, { .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, .name = _("KENDRA"), .teamFlags = 0x0A, - .padding = 0, - .easyChat = { - EC_WORD_I_AM, - EC_MOVE(SWIFT), - EC_WORD_HOW, - EC_WORD_ABOUT, - EC_WORD_YOU, - EC_WORD_QUES, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_MOVE(SWIFT), + EC_WORD_HOW, + EC_WORD_ABOUT, + EC_WORD_YOU, + EC_WORD_QUES, + }, }, }, { .trainerClass = TRAINER_CLASS_HIKER, .name = _("DEV"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_WAHAHAHA, - EC_WORD_I_AM, - EC_WORD_FEELING, - EC_WORD_LIKE, - EC_WORD_IT_S, - EC_MOVE2(PAY_DAY), + .greeting = { + .easyChat = { + EC_WORD_WAHAHAHA, + EC_WORD_I_AM, + EC_WORD_FEELING, + EC_WORD_LIKE, + EC_WORD_IT_S, + EC_MOVE2(PAY_DAY), + }, }, }, { .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .name = _("CASSIE"), .teamFlags = 0x0A, - .padding = 0, - .easyChat = { - EC_WORD_YOU_RE, - EC_WORD_STRONG, - EC_WORD_AREN_T, - 0xFFFF, - EC_WORD_YOU, - EC_WORD_QUES, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_STRONG, + EC_WORD_AREN_T, + 0xFFFF, + EC_WORD_YOU, + EC_WORD_QUES, + }, }, }, { .trainerClass = TRAINER_CLASS_PSYCHIC_M, .name = _("JULIAN"), .teamFlags = 0x05, - .padding = 0, - .easyChat = { - EC_WORD_FUFUFU, - 0xFFFF, - EC_WORD_YOU, - EC_WORD_CAN_T, - EC_WORD_WIN, - EC_WORD_KID, + .greeting = { + .easyChat = { + EC_WORD_FUFUFU, + 0xFFFF, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_WIN, + EC_WORD_KID, + }, }, }, { .trainerClass = TRAINER_CLASS_LASS, .name = _("JOYCE"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_BE, - EC_WORD_KIND, - EC_WORD_TO, - EC_WORD_THE, - EC_WORD_DIGITAL, - EC_WORD_IDOL, + .greeting = { + .easyChat = { + EC_WORD_BE, + EC_WORD_KIND, + EC_WORD_TO, + EC_WORD_THE, + EC_WORD_DIGITAL, + EC_WORD_IDOL, + }, }, }, { .trainerClass = TRAINER_CLASS_GUITARIST, .name = _("LES"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_I_AM, - EC_WORD_GREAT, - EC_WORD_YOU_RE, - EC_WORD_JUST, - EC_WORD_RATHER, - EC_WORD_OKAY, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_GREAT, + EC_WORD_YOU_RE, + EC_WORD_JUST, + EC_WORD_RATHER, + EC_WORD_OKAY, + }, }, }, { .trainerClass = TRAINER_CLASS_RICH_BOY, .name = _("CLINTON"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_HAVE, - EC_WORD_ROUGH_SKIN, - EC_WORD_I, - EC_WORD_NEED, - EC_WORD_NATURAL_CURE, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_HAVE, + EC_WORD_ROUGH_SKIN, + EC_WORD_I, + EC_WORD_NEED, + EC_WORD_NATURAL_CURE, + }, }, }, { .trainerClass = TRAINER_CLASS_BUG_CATCHER, .name = _("LEWIS"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_THIS, - EC_WORD_IS, - EC_WORD_EXCITING, - EC_WORD_CAN, - EC_WORD_I, - EC_WORD_WIN, + .greeting = { + .easyChat = { + EC_WORD_THIS, + EC_WORD_IS, + EC_WORD_EXCITING, + EC_WORD_CAN, + EC_WORD_I, + EC_WORD_WIN, + }, }, }, { .trainerClass = TRAINER_CLASS_PICNICKER, .name = _("RACHAEL"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_LIKE, - EC_WORD_WALKING, - EC_WORD_WITH, - EC_WORD_MY, - EC_WORD_POKEMON, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_LIKE, + EC_WORD_WALKING, + EC_WORD_WITH, + EC_WORD_MY, + EC_WORD_POKEMON, + }, }, }, { .trainerClass = TRAINER_CLASS_COLLECTOR, .name = _("HAROLD"), .teamFlags = 0x09, - .padding = 0, - .easyChat = { - EC_WORD_HERE, - EC_WORD_THEY, - EC_WORD_COME, - EC_WORD_MY, - EC_MOVE2(SUPERPOWER), - EC_WORD_POKEMON, + .greeting = { + .easyChat = { + EC_WORD_HERE, + EC_WORD_THEY, + EC_WORD_COME, + EC_WORD_MY, + EC_MOVE2(SUPERPOWER), + EC_WORD_POKEMON, + }, }, }, { .trainerClass = TRAINER_CLASS_TUBER_M, .name = _("KIPP"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_I_AM, - EC_WORD_A, - EC_WORD_GENIUS, - EC_WORD_I, - EC_WORD_SHOULD, - EC_WORD_WIN, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_A, + EC_WORD_GENIUS, + EC_WORD_I, + EC_WORD_SHOULD, + EC_WORD_WIN, + }, }, }, { .trainerClass = TRAINER_CLASS_KINDLER, .name = _("IRWIN"), .teamFlags = 0x05, - .padding = 0, - .easyChat = { - EC_WORD_YOU, - EC_WORD_WILL, - EC_WORD_BE, - EC_WORD_FEELING, - EC_WORD_MY, - EC_WORD_FIRE, + .greeting = { + .easyChat = { + EC_WORD_YOU, + EC_WORD_WILL, + EC_WORD_BE, + EC_WORD_FEELING, + EC_WORD_MY, + EC_WORD_FIRE, + }, }, }, { .trainerClass = TRAINER_CLASS_PSYCHIC_F, .name = _("EILEEN"), .teamFlags = 0x0A, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_WILL, - EC_MOVE(ASTONISH), - EC_WORD_YOU, - EC_WORD_IN, - EC_WORD_BATTLE, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_WILL, + EC_MOVE(ASTONISH), + EC_WORD_YOU, + EC_WORD_IN, + EC_WORD_BATTLE, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMER_F, .name = _("ANNE"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_SORRY, - EC_WORD_BUT, - EC_WORD_YOU, - EC_WORD_WILL, - EC_WORD_NOT, - EC_WORD_WIN, + .greeting = { + .easyChat = { + EC_WORD_SORRY, + EC_WORD_BUT, + EC_WORD_YOU, + EC_WORD_WILL, + EC_WORD_NOT, + EC_WORD_WIN, + }, }, }, { .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, .name = _("RUTH"), .teamFlags = 0x06, - .padding = 0, - .easyChat = { - EC_WORD_A, - EC_WORD_STRONG, - EC_WORD_GIRL, - EC_WORD_WANTS, - EC_WORD_TOUGH, - EC_WORD_POKEMON, + .greeting = { + .easyChat = { + EC_WORD_A, + EC_WORD_STRONG, + EC_WORD_GIRL, + EC_WORD_WANTS, + EC_WORD_TOUGH, + EC_WORD_POKEMON, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMANIAC, .name = _("JEREMY"), .teamFlags = 0x40, - .padding = 0, - .easyChat = { - EC_WORD_MY, - EC_WORD_POKEMON, - EC_WORD_ARE, - EC_WORD_COOL, - EC_WORD_YOURS, - EC_WORD_CAN_T_WIN, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_POKEMON, + EC_WORD_ARE, + EC_WORD_COOL, + EC_WORD_YOURS, + EC_WORD_CAN_T_WIN, + }, }, }, { .trainerClass = TRAINER_CLASS_SAILOR, .name = _("TREVOR"), .teamFlags = 0x09, - .padding = 0, - .easyChat = { - EC_WORD_MY, - EC_WORD_OPPONENT, - EC_WORD_IS, - EC_WORD_FINALLY, - EC_WORD_HERE, - EC_WORD_EXCELLENT, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_OPPONENT, + EC_WORD_IS, + EC_WORD_FINALLY, + EC_WORD_HERE, + EC_WORD_EXCELLENT, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, .name = _("COLETTE"), .teamFlags = 0x06, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_AM, - EC_WORD_HUNGRY, - EC_MOVE2(POUND), - EC_WORD_MY, - EC_MOVE2(BELLY_DRUM), + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_AM, + EC_WORD_HUNGRY, + EC_MOVE2(POUND), + EC_WORD_MY, + EC_MOVE2(BELLY_DRUM), + }, }, }, { .trainerClass = TRAINER_CLASS_HEX_MANIAC, .name = _("PAULA"), .teamFlags = 0x42, - .padding = 0, - .easyChat = { - EC_WORD_IT_S, - EC_WORD_HARD, - EC_WORD_TO, - EC_WORD_TAKE, - EC_WORD_UGLY, - EC_MOVE(SPITE), + .greeting = { + .easyChat = { + EC_WORD_IT_S, + EC_WORD_HARD, + EC_WORD_TO, + EC_WORD_TAKE, + EC_WORD_UGLY, + EC_MOVE(SPITE), + }, }, }, { .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .name = _("STANLY"), .teamFlags = 0x41, - .padding = 0, - .easyChat = { - EC_WORD_ADVENTURE, - EC_WORD_AND, - EC_WORD_BATTLE, - EC_WORD_ARE, - EC_WORD_MY, - EC_WORD_LIKES, + .greeting = { + .easyChat = { + EC_WORD_ADVENTURE, + EC_WORD_AND, + EC_WORD_BATTLE, + EC_WORD_ARE, + EC_WORD_MY, + EC_WORD_LIKES, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, .name = _("TROY"), .teamFlags = 0x09, - .padding = 0, - .easyChat = { - EC_WORD_YOU, - EC_WORD_CAN_T, - EC_WORD_LOSE, - EC_WORD_TO, - EC_WORD_A, - EC_WORD_KID, + .greeting = { + .easyChat = { + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_LOSE, + EC_WORD_TO, + EC_WORD_A, + EC_WORD_KID, + }, }, }, { .trainerClass = TRAINER_CLASS_SCHOOL_KID_M, .name = _("ED"), .teamFlags = 0x08, - .padding = 0, - .easyChat = { - EC_WORD_POKEMON, - EC_WORD_DAILY, - EC_WORD_AT, - EC_WORD_SCHOOL, - EC_WORD_IT_S, - EC_WORD_AWESOME, + .greeting = { + .easyChat = { + EC_WORD_POKEMON, + EC_WORD_DAILY, + EC_WORD_AT, + EC_WORD_SCHOOL, + EC_WORD_IT_S, + EC_WORD_AWESOME, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, .name = _("ELLEN"), .teamFlags = 0x04, - .padding = 0, - .easyChat = { - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_KIND, - EC_WORD_TO, - EC_WORD_YOUR, - EC_WORD_POKEMON, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_KIND, + EC_WORD_TO, + EC_WORD_YOUR, + EC_WORD_POKEMON, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMER_M, .name = _("ARNIE"), .teamFlags = 0x09, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_BATTLE, - EC_WORD_SERIOUSLY, - EC_WORD_BEAUTIFUL, - EC_WORD_YOU, - EC_MOVE(DIG), + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_BATTLE, + EC_WORD_SERIOUSLY, + EC_WORD_BEAUTIFUL, + EC_WORD_YOU, + EC_MOVE(DIG), + }, }, }, { .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, .name = _("HAL"), .teamFlags = 0x09, - .padding = 0, - .easyChat = { - EC_WORD_BOY, - EC_WORD_I_AM, - EC_WORD_TIRED, - EC_WORD_READY, - EC_WORD_FOR, - EC_WORD_SLEEP, + .greeting = { + .easyChat = { + EC_WORD_BOY, + EC_WORD_I_AM, + EC_WORD_TIRED, + EC_WORD_READY, + EC_WORD_FOR, + EC_WORD_SLEEP, + }, }, }, { .trainerClass = TRAINER_CLASS_BEAUTY, .name = _("LAUREN"), .teamFlags = 0x06, - .padding = 0, - .easyChat = { - EC_WORD_A, - EC_WORD_TRAINER, - EC_WORD_LIKE, - EC_WORD_YOU, - EC_WORD_IS, - EC_WORD_EXCITING, + .greeting = { + .easyChat = { + EC_WORD_A, + EC_WORD_TRAINER, + EC_WORD_LIKE, + EC_WORD_YOU, + EC_WORD_IS, + EC_WORD_EXCITING, + }, }, }, { .trainerClass = TRAINER_CLASS_AROMA_LADY, .name = _("STACY"), .teamFlags = 0x06, - .padding = 0, - .easyChat = { - EC_WORD_HAVE, - EC_WORD_YOU, - EC_WORD_A, - EC_WORD_STENCH, - EC_WORD_OR, - EC_MOVE(SWEET_SCENT), + .greeting = { + .easyChat = { + EC_WORD_HAVE, + EC_WORD_YOU, + EC_WORD_A, + EC_WORD_STENCH, + EC_WORD_OR, + EC_MOVE(SWEET_SCENT), + }, }, }, { .trainerClass = TRAINER_CLASS_COLLECTOR, .name = _("DARYL"), .teamFlags = 0x81, - .padding = 0, - .easyChat = { - EC_WORD_YOUR, - EC_WORD_POKEMON, - EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, - EC_WORD_I, - EC_WORD_WANT, - EC_WORD_IT, + .greeting = { + .easyChat = { + EC_WORD_YOUR, + EC_WORD_POKEMON, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_I, + EC_WORD_WANT, + EC_WORD_IT, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, .name = _("KATHY"), .teamFlags = 0x04, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_WILL, - EC_WORD_TRY, - EC_WORD_MY, - EC_WORD_BEST, - EC_WORD_TODAY, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_WILL, + EC_WORD_TRY, + EC_WORD_MY, + EC_WORD_BEST, + EC_WORD_TODAY, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, .name = _("HARRIS"), .teamFlags = 0x0C, - .padding = 0, - .easyChat = { - EC_WORD_WAAAH, - EC_WORD_WAAAH, - EC_WORD_WAAAH, - EC_WORD_WAAAH, - EC_WORD_EHEHE, - EC_MOVE(FAKE_TEARS), + .greeting = { + .easyChat = { + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_EHEHE, + EC_MOVE(FAKE_TEARS), + }, }, }, { .trainerClass = TRAINER_CLASS_POKEFAN_M, .name = _("GLENN"), .teamFlags = 0x80, - .padding = 0, - .easyChat = { - EC_WORD_LISTEN, - EC_WORD_TO, - EC_WORD_MY, - EC_WORD_LOUSY, - EC_WORD_ANIME, - EC_WORD_SONG, + .greeting = { + .easyChat = { + EC_WORD_LISTEN, + EC_WORD_TO, + EC_WORD_MY, + EC_WORD_LOUSY, + EC_WORD_ANIME, + EC_WORD_SONG, + }, }, }, { .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, .name = _("NICO"), .teamFlags = 0x04, - .padding = 0, - .easyChat = { - EC_WORD_DON_T, - EC_WORD_JUST, - EC_WORD_BATTLE, - EC_WORD_DO, - EC_WORD_SOMETHING, - EC_WORD_ELSE, + .greeting = { + .easyChat = { + EC_WORD_DON_T, + EC_WORD_JUST, + EC_WORD_BATTLE, + EC_WORD_DO, + EC_WORD_SOMETHING, + EC_WORD_ELSE, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, .name = _("BAILEY"), .teamFlags = 0x41, - .padding = 0, - .easyChat = { - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_BUSY, - EC_WORD_GET, - EC_WORD_WITH, - EC_WORD_IT, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_BUSY, + EC_WORD_GET, + EC_WORD_WITH, + EC_WORD_IT, + }, }, }, { .trainerClass = TRAINER_CLASS_PARASOL_LADY, .name = _("ABBIE"), .teamFlags = 0x08, - .padding = 0, - .easyChat = { - EC_WORD_THE, - EC_MOVE(MORNING_SUN), - EC_WORD_HAS, - EC_WORD_SO, - EC_WORD_MUCH, - EC_MOVE(COSMIC_POWER), + .greeting = { + .easyChat = { + EC_WORD_THE, + EC_MOVE(MORNING_SUN), + EC_WORD_HAS, + EC_WORD_SO, + EC_WORD_MUCH, + EC_MOVE(COSMIC_POWER), + }, }, }, { .trainerClass = TRAINER_CLASS_CAMPER, .name = _("AL"), .teamFlags = 0x0C, - .padding = 0, - .easyChat = { - EC_WORD_LET_S, - EC_WORD_HAVE, - EC_WORD_AN, - EC_WORD_EXCITING, - EC_WORD_BATTLE, - EC_WORD_YEEHAW_EXCL, + .greeting = { + .easyChat = { + EC_WORD_LET_S, + EC_WORD_HAVE, + EC_WORD_AN, + EC_WORD_EXCITING, + EC_WORD_BATTLE, + EC_WORD_YEEHAW_EXCL, + }, }, }, { .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, .name = _("PEGGY"), .teamFlags = 0x42, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_WANT, - EC_WORD_TO, - EC_WORD_SEE, - EC_WORD_SOME, - EC_MOVE(GROWTH), + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_WANT, + EC_WORD_TO, + EC_WORD_SEE, + EC_WORD_SOME, + EC_MOVE(GROWTH), + }, }, }, { .trainerClass = TRAINER_CLASS_BEAUTY, .name = _("NAOMI"), .teamFlags = 0x04, - .padding = 0, - .easyChat = { - EC_WORD_IT, - EC_WORD_WAS, - EC_WORD_GREAT, - EC_WORD_TO, - EC_WORD_BE, - EC_WORD_YOUNG, + .greeting = { + .easyChat = { + EC_WORD_IT, + EC_WORD_WAS, + EC_WORD_GREAT, + EC_WORD_TO, + EC_WORD_BE, + EC_WORD_YOUNG, + }, }, }, { .trainerClass = TRAINER_CLASS_NINJA_BOY, .name = _("KENJI"), .teamFlags = 0x0C, - .padding = 0, - .easyChat = { - EC_WORD_PLEASE, - 0xFFFF, - EC_WORD_DON_T, - EC_WORD_BE, - EC_WORD_MEAN, - EC_WORD_TO_ME, + .greeting = { + .easyChat = { + EC_WORD_PLEASE, + 0xFFFF, + EC_WORD_DON_T, + EC_WORD_BE, + EC_WORD_MEAN, + EC_WORD_TO_ME, + }, }, }, { .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, .name = _("ROSS"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_WAKE_UP, - EC_WORD_MY, - EC_MOVE2(HIDDEN_POWER), - EC_WORD_AND, - EC_MOVE(ASTONISH), - EC_WORD_ME, + .greeting = { + .easyChat = { + EC_WORD_WAKE_UP, + EC_WORD_MY, + EC_MOVE2(HIDDEN_POWER), + EC_WORD_AND, + EC_MOVE(ASTONISH), + EC_WORD_ME, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, .name = _("EDNA"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_BATTLE_TOWER, - EC_WORD_IS, - EC_WORD_SO, - EC_WORD_ENTERTAINING, - EC_WORD_IT_S, - EC_WORD_AWESOME, + .greeting = { + .easyChat = { + EC_WORD_BATTLE_TOWER, + EC_WORD_IS, + EC_WORD_SO, + EC_WORD_ENTERTAINING, + EC_WORD_IT_S, + EC_WORD_AWESOME, + }, }, }, { .trainerClass = TRAINER_CLASS_RUIN_MANIAC, .name = _("ANTON"), .teamFlags = 0x41, - .padding = 0, - .easyChat = { - EC_WORD_BLEND, - EC_WORD_THICK_FAT, - EC_WORD_AND, - EC_WORD_CHLOROPHYLL, - EC_WORD_IT_S, - EC_WORD_TASTY, + .greeting = { + .easyChat = { + EC_WORD_BLEND, + EC_WORD_THICK_FAT, + EC_WORD_AND, + EC_WORD_CHLOROPHYLL, + EC_WORD_IT_S, + EC_WORD_TASTY, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMER_M, .name = _("MITCH"), .teamFlags = 0x81, - .padding = 0, - .easyChat = { - EC_WORD_NEXT, - EC_WORD_A, - EC_WORD_GIRL, - EC_WORD_WITH, - EC_WORD_A, - EC_MOVE(SCARY_FACE), + .greeting = { + .easyChat = { + EC_WORD_NEXT, + EC_WORD_A, + EC_WORD_GIRL, + EC_WORD_WITH, + EC_WORD_A, + EC_MOVE(SCARY_FACE), + }, }, }, { .trainerClass = TRAINER_CLASS_HEX_MANIAC, .name = _("ROD"), .teamFlags = 0x42, - .padding = 0, - .easyChat = { - EC_WORD_GIMME, - EC_WORD_A, - EC_WORD_TOUGH, - EC_WORD_BATTLE, - EC_WORD_NOT, - EC_WORD_WIMPY, + .greeting = { + .easyChat = { + EC_WORD_GIMME, + EC_WORD_A, + EC_WORD_TOUGH, + EC_WORD_BATTLE, + EC_WORD_NOT, + EC_WORD_WIMPY, + }, }, }, { .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, .name = _("RICH"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_TASTY, - EC_WORD_WATER, - EC_WORD_IS, - EC_WORD_HIP_AND, - EC_WORD_HAPPENING, - EC_WORD_YES_SIR_EXCL, + .greeting = { + .easyChat = { + EC_WORD_TASTY, + EC_WORD_WATER, + EC_WORD_IS, + EC_WORD_HIP_AND, + EC_WORD_HAPPENING, + EC_WORD_YES_SIR_EXCL, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEFAN_M, .name = _("DANIEL"), .teamFlags = 0x80, - .padding = 0, - .easyChat = { - EC_WORD_GO, - EC_WORD_FOR, - EC_WORD_IT, - EC_WORD_MY, - EC_WORD_LOVEY_DOVEY, - EC_WORD_POKEMON, + .greeting = { + .easyChat = { + EC_WORD_GO, + EC_WORD_FOR, + EC_WORD_IT, + EC_WORD_MY, + EC_WORD_LOVEY_DOVEY, + EC_WORD_POKEMON, + }, }, }, { .trainerClass = TRAINER_CLASS_PSYCHIC_F, .name = _("GLORIA"), .teamFlags = 0x82, - .padding = 0, - .easyChat = { - EC_WORD_LET_S, - EC_WORD_GET, - EC_WORD_THIS, - EC_WORD_FIERY, - EC_WORD_BATTLE, - EC_WORD_HAPPENING, + .greeting = { + .easyChat = { + EC_WORD_LET_S, + EC_WORD_GET, + EC_WORD_THIS, + EC_WORD_FIERY, + EC_WORD_BATTLE, + EC_WORD_HAPPENING, + }, }, }, { .trainerClass = TRAINER_CLASS_GUITARIST, .name = _("NELSON"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_MUSIC, - EC_WORD_IS, - EC_WORD_MY, - EC_WORD_ALL, - EC_WORD_MY, - EC_WORD_DESTINY, + .greeting = { + .easyChat = { + EC_WORD_MUSIC, + EC_WORD_IS, + EC_WORD_MY, + EC_WORD_ALL, + EC_WORD_MY, + EC_WORD_DESTINY, + }, }, }, { .trainerClass = TRAINER_CLASS_KINDLER, .name = _("FERRIS"), .teamFlags = 0x41, - .padding = 0, - .easyChat = { - EC_WORD_GOOD, - EC_WORD_IT, - EC_WORD_IS, - EC_WORD_SO, - EC_WORD_VERY, - EC_WORD_GOOD, + .greeting = { + .easyChat = { + EC_WORD_GOOD, + EC_WORD_IT, + EC_WORD_IS, + EC_WORD_SO, + EC_WORD_VERY, + EC_WORD_GOOD, + }, }, }, { .trainerClass = TRAINER_CLASS_AROMA_LADY, .name = _("AMANDA"), .teamFlags = 0x82, - .padding = 0, - .easyChat = { - EC_WORD_WHAT, - EC_WORD_KIND, - EC_WORD_OF, - EC_WORD_TRAINER, - EC_WORD_ARE, - EC_WORD_YOU, + .greeting = { + .easyChat = { + EC_WORD_WHAT, + EC_WORD_KIND, + EC_WORD_OF, + EC_WORD_TRAINER, + EC_WORD_ARE, + EC_WORD_YOU, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, .name = _("MASON"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_DON_T, - EC_WORD_KNOW, - EC_WORD_HOW, - EC_WORD_TO, - EC_WORD_LOSE, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_DON_T, + EC_WORD_KNOW, + EC_WORD_HOW, + EC_WORD_TO, + EC_WORD_LOSE, + }, }, }, { .trainerClass = TRAINER_CLASS_DRAGON_TAMER, .name = _("NATE"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_DRAGON, - EC_WORD_POKEMON, - EC_WORD_ARE, - EC_WORD_ALL, - EC_WORD_THE, - EC_MOVE(RAGE), + .greeting = { + .easyChat = { + EC_WORD_DRAGON, + EC_WORD_POKEMON, + EC_WORD_ARE, + EC_WORD_ALL, + EC_WORD_THE, + EC_MOVE(RAGE), + }, }, }, { .trainerClass = TRAINER_CLASS_LASS, .name = _("MIRIAM"), .teamFlags = 0x82, - .padding = 0, - .easyChat = { - EC_WORD_YOU_RE, - EC_WORD_TOO_STRONG, - EC_WORD_SERIOUSLY, - EC_WORD_IT_S, - EC_WORD_BAD, - EC_WORD_NEWS, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_TOO_STRONG, + EC_WORD_SERIOUSLY, + EC_WORD_IT_S, + EC_WORD_BAD, + EC_WORD_NEWS, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMANIAC, .name = _("THEO"), .teamFlags = 0x40, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_ADORE, - EC_WORD_MY, - EC_WORD_MEGA, - EC_WORD_CUTE, - EC_WORD_PLUSH_DOLL, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_ADORE, + EC_WORD_MY, + EC_WORD_MEGA, + EC_WORD_CUTE, + EC_WORD_PLUSH_DOLL, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, .name = _("PAMELA"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_HERE_I_COME, - EC_WORD_I_AM, - EC_WORD_THE, - EC_WORD_CUTE, - EC_MOVE2(WATER_SPORT), - EC_WORD_IDOL, + .greeting = { + .easyChat = { + EC_WORD_HERE_I_COME, + EC_WORD_I_AM, + EC_WORD_THE, + EC_WORD_CUTE, + EC_MOVE2(WATER_SPORT), + EC_WORD_IDOL, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEFAN_F, .name = _("ALISSA"), .teamFlags = 0x20, - .padding = 0, - .easyChat = { - EC_WORD_IT_S, - EC_WORD_A, - EC_WORD_PREPOSTEROUS, - EC_WORD_MATCH, - EC_WORD_I_AM, - EC_WORD_SHOCKED, + .greeting = { + .easyChat = { + EC_WORD_IT_S, + EC_WORD_A, + EC_WORD_PREPOSTEROUS, + EC_WORD_MATCH, + EC_WORD_I_AM, + EC_WORD_SHOCKED, + }, }, }, { .trainerClass = TRAINER_CLASS_GENTLEMAN, .name = _("ARTHUR"), .teamFlags = 0x20, - .padding = 0, - .easyChat = { - EC_WORD_PLEASE, - EC_WORD_GIVE, - EC_WORD_ME, - EC_WORD_A, - EC_WORD_GOOD, - EC_WORD_BATTLE, + .greeting = { + .easyChat = { + EC_WORD_PLEASE, + EC_WORD_GIVE, + EC_WORD_ME, + EC_WORD_A, + EC_WORD_GOOD, + EC_WORD_BATTLE, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMER_F, .name = _("MARCY"), .teamFlags = 0x82, - .padding = 0, - .easyChat = { - EC_WORD_I_AM, - EC_WORD_BEAUTIFUL, - EC_WORD_YOU, - EC_WORD_CAN_T, - EC_WORD_BEAT, - EC_WORD_ME, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_BEAUTIFUL, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_BEAT, + EC_WORD_ME, + }, }, }, { .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, .name = _("MILLER"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_BATTLE, - EC_WORD_DAILY, - EC_WORD_I, - EC_WORD_WON_T, - EC_WORD_LOSE, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_BATTLE, + EC_WORD_DAILY, + EC_WORD_I, + EC_WORD_WON_T, + EC_WORD_LOSE, + }, }, }, { .trainerClass = TRAINER_CLASS_BIRD_KEEPER, .name = _("OLIVER"), .teamFlags = 0x11, - .padding = 0, - .easyChat = { - EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, - EC_WORD_GIGGLE, - EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, - 0xFFFF, - 0xFFFF, - 0xFFFF, + .greeting = { + .easyChat = { + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_GIGGLE, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + 0xFFFF, + 0xFFFF, + 0xFFFF, + }, }, }, { .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, .name = _("MOLLY"), .teamFlags = 0x12, - .padding = 0, - .easyChat = { - EC_WORD_HOW, - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_ON, - EC_WORD_MONDAY, - EC_WORD_MORNING, + .greeting = { + .easyChat = { + EC_WORD_HOW, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_ON, + EC_WORD_MONDAY, + EC_WORD_MORNING, + }, }, }, { .trainerClass = TRAINER_CLASS_BUG_MANIAC, .name = _("JASON"), .teamFlags = 0x40, - .padding = 0, - .easyChat = { - EC_WORD_WATER, - EC_WORD_AND, - EC_WORD_BUG, - EC_WORD_POKEMON, - EC_WORD_ARE, - EC_WORD_GREAT, + .greeting = { + .easyChat = { + EC_WORD_WATER, + EC_WORD_AND, + EC_WORD_BUG, + EC_WORD_POKEMON, + EC_WORD_ARE, + EC_WORD_GREAT, + }, }, }, { .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .name = _("AVA"), .teamFlags = 0x20, - .padding = 0, - .easyChat = { - EC_WORD_WHAT, - EC_WORD_IS, - EC_WORD_THIS, - EC_WORD_PRESSURE, - EC_WORD_ELLIPSIS, - EC_WORD_STATIC, + .greeting = { + .easyChat = { + EC_WORD_WHAT, + EC_WORD_IS, + EC_WORD_THIS, + EC_WORD_PRESSURE, + EC_WORD_ELLIPSIS, + EC_WORD_STATIC, + }, }, }, { .trainerClass = TRAINER_CLASS_FISHERMAN, .name = _("HANK"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_YOU_RE, - EC_WORD_A, - EC_WORD_KID, - EC_WORD_YOU, - EC_WORD_CAN_T, - EC_WORD_WIN, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_A, + EC_WORD_KID, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_WIN, + }, }, }, { .trainerClass = TRAINER_CLASS_SAILOR, .name = _("PETER"), .teamFlags = 0x20, - .padding = 0, - .easyChat = { - EC_WORD_IT_S, - EC_WORD_SERIOUSLY, - EC_WORD_TERRIBLE, - EC_WORD_I, - EC_WORD_REALLY, - EC_WORD_THINK, + .greeting = { + .easyChat = { + EC_WORD_IT_S, + EC_WORD_SERIOUSLY, + EC_WORD_TERRIBLE, + EC_WORD_I, + EC_WORD_REALLY, + EC_WORD_THINK, + }, }, }, { .trainerClass = TRAINER_CLASS_EXPERT_F, .name = _("MINDY"), .teamFlags = 0x20, - .padding = 0, - .easyChat = { - EC_WORD_YOU, - EC_WORD_APPEAR, - EC_WORD_TO, - EC_WORD_TRAIN, - EC_WORD_VERY, - EC_WORD_WELL, + .greeting = { + .easyChat = { + EC_WORD_YOU, + EC_WORD_APPEAR, + EC_WORD_TO, + EC_WORD_TRAIN, + EC_WORD_VERY, + EC_WORD_WELL, + }, }, }, { .trainerClass = TRAINER_CLASS_BUG_MANIAC, .name = _("DWIGHT"), .teamFlags = 0x11, - .padding = 0, - .easyChat = { - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_STRONG, - EC_WORD_YOU, - EC_WORD_ARE, - EC_WORD_SCARY, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_STRONG, + EC_WORD_YOU, + EC_WORD_ARE, + EC_WORD_SCARY, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, .name = _("REENA"), .teamFlags = 0x12, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_ALWAYS, - EC_WORD_LOSE, - EC_WORD_MAYBE, - EC_WORD_TODAY, - EC_WORD_ELLIPSIS, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_ALWAYS, + EC_WORD_LOSE, + EC_WORD_MAYBE, + EC_WORD_TODAY, + EC_WORD_ELLIPSIS, + }, }, }, { .trainerClass = TRAINER_CLASS_PARASOL_LADY, .name = _("MEGAN"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_DON_T, - EC_WORD_MAKE, - EC_WORD_THAT, - EC_MOVE(SCARY_FACE), - EC_WORD_AT, - EC_WORD_ME, + .greeting = { + .easyChat = { + EC_WORD_DON_T, + EC_WORD_MAKE, + EC_WORD_THAT, + EC_MOVE(SCARY_FACE), + EC_WORD_AT, + EC_WORD_ME, + }, }, }, { .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, .name = _("SIERRA"), .teamFlags = 0x04, - .padding = 0, - .easyChat = { - EC_WORD_I_VE, - EC_WORD_RUN, - EC_WORD_A_LOT, - EC_WORD_SO, - EC_WORD_I_AM, - EC_WORD_HEALTHY, + .greeting = { + .easyChat = { + EC_WORD_I_VE, + EC_WORD_RUN, + EC_WORD_A_LOT, + EC_WORD_SO, + EC_WORD_I_AM, + EC_WORD_HEALTHY, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, .name = _("ARNOLD"), .teamFlags = 0x08, - .padding = 0, - .easyChat = { - EC_WORD_I_AM, - EC_WORD_FEELING, - EC_WORD_AWESOME, - EC_WORD_MY, - EC_WORD_POKEMON, - EC_WORD_ROCK, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_FEELING, + EC_WORD_AWESOME, + EC_WORD_MY, + EC_WORD_POKEMON, + EC_WORD_ROCK, + }, }, }, { .trainerClass = TRAINER_CLASS_BLACK_BELT, .name = _("XIN"), .teamFlags = 0x04, - .padding = 0, - .easyChat = { - EC_WORD_HOO_HAH, - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_READY, - EC_WORD_TO, - EC_WORD_ROCK, + .greeting = { + .easyChat = { + EC_WORD_HOO_HAH, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_READY, + EC_WORD_TO, + EC_WORD_ROCK, + }, }, }, { .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, .name = _("KELLY"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_YOU, - EC_WORD_COULDN_T, - EC_WORD_BEAT, - EC_WORD_ME, - EC_WORD_EVER, - EC_WORD_KID, + .greeting = { + .easyChat = { + EC_WORD_YOU, + EC_WORD_COULDN_T, + EC_WORD_BEAT, + EC_WORD_ME, + EC_WORD_EVER, + EC_WORD_KID, + }, }, }, { .trainerClass = TRAINER_CLASS_COLLECTOR, .name = _("VANCE"), .teamFlags = 0x80, - .padding = 0, - .easyChat = { - EC_WORD_POKEMON, - EC_WORD_ALL, - EC_WORD_OVER, - EC_WORD_THE, - EC_WORD_PLACE, - EC_WORD_WOWEE, + .greeting = { + .easyChat = { + EC_WORD_POKEMON, + EC_WORD_ALL, + EC_WORD_OVER, + EC_WORD_THE, + EC_WORD_PLACE, + EC_WORD_WOWEE, + }, }, }, { .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, .name = _("TOBY"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_THIS, - EC_WORD_ISN_T, - EC_WORD_SPORTS, - EC_WORD_IT_S, - EC_WORD_A, - EC_WORD_BATTLE, + .greeting = { + .easyChat = { + EC_WORD_THIS, + EC_WORD_ISN_T, + EC_WORD_SPORTS, + EC_WORD_IT_S, + EC_WORD_A, + EC_WORD_BATTLE, + }, }, }, { .trainerClass = TRAINER_CLASS_GENTLEMAN, .name = _("NORTON"), .teamFlags = 0x20, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_HAVE, - EC_WORD_TO, - EC_WORD_WIN, - EC_WORD_PLEASE, - EC_WORD_LOSE, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_HAVE, + EC_WORD_TO, + EC_WORD_WIN, + EC_WORD_PLEASE, + EC_WORD_LOSE, + }, }, }, { .trainerClass = TRAINER_CLASS_BATTLE_GIRL, .name = _("ZOE"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_THIS, - EC_WORD_IS, - EC_WORD_SCARY, - EC_WORD_PLEASE, - EC_WORD_BE, - EC_WORD_NICE, + .greeting = { + .easyChat = { + EC_WORD_THIS, + EC_WORD_IS, + EC_WORD_SCARY, + EC_WORD_PLEASE, + EC_WORD_BE, + EC_WORD_NICE, + }, }, }, { .trainerClass = TRAINER_CLASS_BEAUTY, .name = _("EMMA"), .teamFlags = 0x20, - .padding = 0, - .easyChat = { - EC_WORD_DON_T, - EC_WORD_YOU, - EC_MOVE(FLAIL), - EC_WORD_YOU, - EC_WORD_CAN_T, - EC_MOVE(WITHDRAW), + .greeting = { + .easyChat = { + EC_WORD_DON_T, + EC_WORD_YOU, + EC_MOVE(FLAIL), + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_MOVE(WITHDRAW), + }, }, }, { .trainerClass = TRAINER_CLASS_HIKER, .name = _("VINCE"), .teamFlags = 0x04, - .padding = 0, - .easyChat = { - EC_WORD_YAHOO, - EC_WORD_YAHOO, - EC_WORD_ARE, - EC_WORD_YOU, - EC_WORD_LISTENING, - EC_WORD_QUES, + .greeting = { + .easyChat = { + EC_WORD_YAHOO, + EC_WORD_YAHOO, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_LISTENING, + EC_WORD_QUES, + }, }, }, { .trainerClass = TRAINER_CLASS_EXPERT_M, .name = _("MARV"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_LEARN, - EC_WORD_TO, - EC_WORD_BATTLE, - EC_WORD_THE, - EC_WORD_CORRECT, - EC_WORD_WAY, + .greeting = { + .easyChat = { + EC_WORD_LEARN, + EC_WORD_TO, + EC_WORD_BATTLE, + EC_WORD_THE, + EC_WORD_CORRECT, + EC_WORD_WAY, + }, }, }, { .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, .name = _("TODD"), .teamFlags = 0x40, - .padding = 0, - .easyChat = { - EC_WORD_THE, - EC_WORD_WAY, - EC_WORD_YOU, - EC_WORD_BATTLE, - EC_WORD_IT_S, - EC_WORD_CHILD_S_PLAY, + .greeting = { + .easyChat = { + EC_WORD_THE, + EC_WORD_WAY, + EC_WORD_YOU, + EC_WORD_BATTLE, + EC_WORD_IT_S, + EC_WORD_CHILD_S_PLAY, + }, }, }, { .trainerClass = TRAINER_CLASS_GUITARIST, .name = _("GAVIN"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_BABY, - EC_WORD_BABY, - EC_WORD_BABY, - EC_WORD_ROCK, - EC_WORD_ME, - EC_WORD_HARD, + .greeting = { + .easyChat = { + EC_WORD_BABY, + EC_WORD_BABY, + EC_WORD_BABY, + EC_WORD_ROCK, + EC_WORD_ME, + EC_WORD_HARD, + }, }, }, { .trainerClass = TRAINER_CLASS_PSYCHIC_M, .name = _("QUINN"), .teamFlags = 0x08, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_HAVE, - EC_WORD_A, - EC_WORD_STICKY_HOLD, - EC_WORD_ON, - EC_WORD_YOU, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_HAVE, + EC_WORD_A, + EC_WORD_STICKY_HOLD, + EC_WORD_ON, + EC_WORD_YOU, + }, }, }, { .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, .name = _("JENN"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_I_AM, - EC_WORD_ON, - EC_WORD_A, - EC_WORD_TOUGH, - EC_WORD_TRAINER, - EC_WORD_SEARCH, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_ON, + EC_WORD_A, + EC_WORD_TOUGH, + EC_WORD_TRAINER, + EC_WORD_SEARCH, + }, }, }, { .trainerClass = TRAINER_CLASS_EXPERT_M, .name = _("JOEL"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_BELIEVE, - EC_WORD_IN, - EC_WORD_YOUR, - EC_WORD_POKEMON, - EC_WORD_AND, - EC_WORD_WIN, + .greeting = { + .easyChat = { + EC_WORD_BELIEVE, + EC_WORD_IN, + EC_WORD_YOUR, + EC_WORD_POKEMON, + EC_WORD_AND, + EC_WORD_WIN, + }, }, }, { .trainerClass = TRAINER_CLASS_DRAGON_TAMER, .name = _("KYLE"), .teamFlags = 0x0C, - .padding = 0, - .easyChat = { - EC_WORD_I, - EC_WORD_LIKE, - EC_WORD_A, - EC_WORD_GIRL, - EC_WORD_WITH, - EC_MOVE2(FORESIGHT), + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_LIKE, + EC_WORD_A, + EC_WORD_GIRL, + EC_WORD_WITH, + EC_MOVE2(FORESIGHT), + }, }, }, { .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, .name = _("BRET"), .teamFlags = 0x01, - .padding = 0, - .easyChat = { - EC_WORD_TAKE, - EC_WORD_MY, - EC_WORD_OVERWHELMING, - EC_WORD_POWER, - EC_WORD_AND, - EC_WORD_DISAPPEAR, + .greeting = { + .easyChat = { + EC_WORD_TAKE, + EC_WORD_MY, + EC_WORD_OVERWHELMING, + EC_WORD_POWER, + EC_WORD_AND, + EC_WORD_DISAPPEAR, + }, }, }, { .trainerClass = TRAINER_CLASS_EXPERT_F, .name = _("CARRIE"), .teamFlags = 0x10, - .padding = 0, - .easyChat = { - EC_WORD_TRAINER, - EC_WORD_I, - EC_WORD_SEE, - EC_WORD_YOU, - EC_WORD_ARE, - EC_WORD_CAPABLE, + .greeting = { + .easyChat = { + EC_WORD_TRAINER, + EC_WORD_I, + EC_WORD_SEE, + EC_WORD_YOU, + EC_WORD_ARE, + EC_WORD_CAPABLE, + }, }, }, { .trainerClass = TRAINER_CLASS_LADY, .name = _("GILLIAN"), .teamFlags = 0x02, - .padding = 0, - .easyChat = { - EC_WORD_COME_ON, - EC_WORD_SHOW, - EC_WORD_ME, - EC_WORD_AN, - EC_WORD_EXCELLENT, - EC_WORD_TIME, + .greeting = { + .easyChat = { + EC_WORD_COME_ON, + EC_WORD_SHOW, + EC_WORD_ME, + EC_WORD_AN, + EC_WORD_EXCELLENT, + EC_WORD_TIME, + }, }, }, }; -- cgit v1.2.3 From e27be38588bc1d2d3e26e10c87d5de91a5cbab21 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 23 Oct 2017 19:32:10 -0700 Subject: More decomp of battle_tower --- src/battle_tower.c | 508 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 508 insertions(+) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 507d2be10..519a6f71e 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1,15 +1,21 @@ #include "global.h" +#include "battle.h" +#include "battle_setup.h" #include "battle_tower.h" +#include "battle_transition.h" #include "data2.h" #include "easy_chat.h" #include "event_data.h" #include "items.h" +#include "main.h" #include "map_object_constants.h" #include "moves.h" +#include "overworld.h" #include "pokedex.h" #include "rng.h" #include "species.h" #include "string_util.h" +#include "task.h" #include "text.h" #include "trainer.h" #include "vars.h" @@ -232,6 +238,8 @@ const u16 gUnknown_08405EE6[] = { ITEM_CHOICE_BAND, }; +extern void sub_81360D0(void); +extern u16 gSpecialVar_0x8004; extern u8 gUnknown_08400E23[]; extern u8 gUnknown_08400E29[]; extern u8 gUnknown_08400E2E[]; @@ -239,10 +247,17 @@ extern u8 gUnknown_08400E30[]; extern u8 gTrainerClassToPicIndex[]; extern u8 gTrainerClassToNameIndex[]; +extern u16 gTrainerBattleOpponent; +extern u16 gBattleTypeFlags; +extern u8 gSelectedOrderFromParty[]; extern void sub_8135C44(void); extern void sub_813601C(void); extern void sub_81349FC(u8); +extern void sub_81360AC(struct BattleTowerEReaderTrainer *); +extern void sub_8135A3C(void); + +#define ewram160FB (ewram[0x160FB]) void sub_8134548(void) @@ -1787,3 +1802,496 @@ u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numT return curIndexToAppend; } + +__attribute__((naked)) +void CheckMonBattleTowerBanlist() +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + ldr r2, [sp, 0x20]\n\ + ldr r4, [sp, 0x24]\n\ + mov r9, r4\n\ + ldr r4, [sp, 0x28]\n\ + mov r10, r4\n\ + ldr r7, [sp, 0x2C]\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + lsls r1, 16\n\ + lsrs r6, r1, 16\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + mov r12, r3\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r8, r2\n\ + movs r2, 0\n\ + movs r0, 0xCE\n\ + lsls r0, 1\n\ + cmp r4, r0\n\ + beq _081352CE\n\ + cmp r4, 0\n\ + beq _081352CE\n\ + ldr r0, _081352DC @ =gBattleTowerBanlist\n\ + ldrh r1, [r0]\n\ + ldr r5, _081352E0 @ =0x0000ffff\n\ + adds r3, r0, 0\n\ + cmp r1, r5\n\ + beq _08135264\n\ + cmp r1, r4\n\ + beq _08135258\n\ + adds r1, r3, 0\n\ +_0813524A:\n\ + adds r1, 0x2\n\ + adds r2, 0x1\n\ + ldrh r0, [r1]\n\ + cmp r0, r5\n\ + beq _08135264\n\ + cmp r0, r4\n\ + bne _0813524A\n\ +_08135258:\n\ + lsls r0, r2, 1\n\ + adds r0, r3\n\ + ldrh r1, [r0]\n\ + ldr r0, _081352E0 @ =0x0000ffff\n\ + cmp r1, r0\n\ + bne _081352CE\n\ +_08135264:\n\ + mov r0, r12\n\ + cmp r0, 0\n\ + bne _08135270\n\ + mov r1, r8\n\ + cmp r1, 0x32\n\ + bhi _081352CE\n\ +_08135270:\n\ + movs r2, 0\n\ + ldrb r3, [r7]\n\ + cmp r2, r3\n\ + bge _08135290\n\ + mov r1, r9\n\ + ldrh r0, [r1]\n\ + cmp r0, r4\n\ + beq _08135290\n\ + adds r5, r3, 0\n\ +_08135282:\n\ + adds r1, 0x2\n\ + adds r2, 0x1\n\ + cmp r2, r5\n\ + bge _08135290\n\ + ldrh r0, [r1]\n\ + cmp r0, r4\n\ + bne _08135282\n\ +_08135290:\n\ + cmp r2, r3\n\ + bne _081352CE\n\ + cmp r6, 0\n\ + beq _081352BA\n\ + movs r2, 0\n\ + cmp r2, r3\n\ + bge _081352B6\n\ + mov r1, r10\n\ + ldrh r0, [r1]\n\ + cmp r0, r6\n\ + beq _081352B6\n\ + adds r5, r3, 0\n\ +_081352A8:\n\ + adds r1, 0x2\n\ + adds r2, 0x1\n\ + cmp r2, r5\n\ + bge _081352B6\n\ + ldrh r0, [r1]\n\ + cmp r0, r6\n\ + bne _081352A8\n\ +_081352B6:\n\ + cmp r2, r3\n\ + bne _081352CE\n\ +_081352BA:\n\ + lsls r0, r3, 1\n\ + add r0, r9\n\ + strh r4, [r0]\n\ + ldrb r0, [r7]\n\ + lsls r0, 1\n\ + add r0, r10\n\ + strh r6, [r0]\n\ + ldrb r0, [r7]\n\ + adds r0, 0x1\n\ + strb r0, [r7]\n\ +_081352CE:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081352DC: .4byte gBattleTowerBanlist\n\ +_081352E0: .4byte 0x0000ffff\n\ +.syntax divided\n"); +} + +__attribute__((naked)) +void CheckPartyBattleTowerBanlist() +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x2C\n\ + add r1, sp, 0x28\n\ + movs r0, 0\n\ + strb r0, [r1]\n\ + movs r7, 0\n\ + mov r9, r1\n\ + add r0, sp, 0x1C\n\ + mov r10, r0\n\ +_081352FE:\n\ + movs r0, 0x64\n\ + adds r5, r7, 0\n\ + muls r5, r0\n\ + ldr r0, _081353C4 @ =gPlayerParty\n\ + adds r5, r0\n\ + adds r0, r5, 0\n\ + movs r1, 0x41\n\ + bl GetMonData\n\ + mov r8, r0\n\ + mov r1, r8\n\ + lsls r1, 16\n\ + lsrs r1, 16\n\ + mov r8, r1\n\ + adds r0, r5, 0\n\ + movs r1, 0xC\n\ + bl GetMonData\n\ + adds r6, r0, 0\n\ + lsls r6, 16\n\ + lsrs r6, 16\n\ + adds r0, r5, 0\n\ + movs r1, 0x38\n\ + bl GetMonData\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + adds r0, r5, 0\n\ + movs r1, 0x39\n\ + bl GetMonData\n\ + adds r2, r0, 0\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + ldr r5, _081353C8 @ =gScriptResult\n\ + ldrb r3, [r5]\n\ + str r4, [sp]\n\ + add r0, sp, 0x10\n\ + str r0, [sp, 0x4]\n\ + mov r1, r10\n\ + str r1, [sp, 0x8]\n\ + mov r0, r9\n\ + str r0, [sp, 0xC]\n\ + mov r0, r8\n\ + adds r1, r6, 0\n\ + bl CheckMonBattleTowerBanlist\n\ + adds r7, 0x1\n\ + cmp r7, 0x5\n\ + ble _081352FE\n\ + mov r1, r9\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x2\n\ + bhi _08135420\n\ + ldr r1, _081353CC @ =gStringVar1\n\ + movs r0, 0xFF\n\ + strb r0, [r1]\n\ + ldr r1, _081353D0 @ =gSpecialVar_0x8004\n\ + movs r0, 0x1\n\ + strh r0, [r1]\n\ + movs r0, 0\n\ + mov r1, r9\n\ + strb r0, [r1]\n\ + bl CountBattleTowerBanlistCaught\n\ + adds r6, r0, 0\n\ + ldr r2, _081353D4 @ =gBattleTowerBanlist\n\ + ldrh r0, [r2]\n\ + ldr r1, _081353D8 @ =0x0000ffff\n\ + cmp r0, r1\n\ + beq _081353A8\n\ + mov r5, r9\n\ + adds r7, r1, 0\n\ + adds r4, r2, 0\n\ +_08135394:\n\ + ldrh r0, [r4]\n\ + ldrb r1, [r5]\n\ + adds r2, r6, 0\n\ + bl AppendBattleTowerBannedSpeciesName\n\ + strb r0, [r5]\n\ + adds r4, 0x2\n\ + ldrh r0, [r4]\n\ + cmp r0, r7\n\ + bne _08135394\n\ +_081353A8:\n\ + mov r0, r9\n\ + ldrb r1, [r0]\n\ + cmp r1, 0\n\ + bne _081353E4\n\ + ldr r4, _081353CC @ =gStringVar1\n\ + ldr r1, _081353DC @ =gUnknown_08400E2C\n\ + adds r0, r4, 0\n\ + bl StringAppend\n\ + ldr r1, _081353E0 @ =gUnknown_08400E32\n\ + adds r0, r4, 0\n\ + bl StringAppend\n\ + b _0813543E\n\ + .align 2, 0\n\ +_081353C4: .4byte gPlayerParty\n\ +_081353C8: .4byte gScriptResult\n\ +_081353CC: .4byte gStringVar1\n\ +_081353D0: .4byte gSpecialVar_0x8004\n\ +_081353D4: .4byte gBattleTowerBanlist\n\ +_081353D8: .4byte 0x0000ffff\n\ +_081353DC: .4byte gUnknown_08400E2C\n\ +_081353E0: .4byte gUnknown_08400E32\n\ +_081353E4:\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08135400\n\ + ldr r0, _081353F8 @ =gStringVar1\n\ + ldr r1, _081353FC @ =gUnknown_08400E2E\n\ + bl StringAppend\n\ + b _08135408\n\ + .align 2, 0\n\ +_081353F8: .4byte gStringVar1\n\ +_081353FC: .4byte gUnknown_08400E2E\n\ +_08135400:\n\ + ldr r0, _08135414 @ =gStringVar1\n\ + ldr r1, _08135418 @ =gUnknown_08400E2C\n\ + bl StringAppend\n\ +_08135408:\n\ + ldr r0, _08135414 @ =gStringVar1\n\ + ldr r1, _0813541C @ =gUnknown_08400E36\n\ + bl StringAppend\n\ + b _0813543E\n\ + .align 2, 0\n\ +_08135414: .4byte gStringVar1\n\ +_08135418: .4byte gUnknown_08400E2C\n\ +_0813541C: .4byte gUnknown_08400E36\n\ +_08135420:\n\ + ldr r1, _08135450 @ =gSpecialVar_0x8004\n\ + movs r0, 0\n\ + strh r0, [r1]\n\ + ldr r2, _08135454 @ =gSaveBlock2\n\ + ldrb r0, [r5]\n\ + ldr r1, _08135458 @ =0x00000554\n\ + adds r2, r1\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + ldrb r3, [r2]\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + ands r0, r3\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ +_0813543E:\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\ + .align 2, 0\n\ +_08135450: .4byte gSpecialVar_0x8004\n\ +_08135454: .4byte gSaveBlock2\n\ +_08135458: .4byte 0x00000554\n\ +.syntax divided\n"); +} + +void sub_813545C(u16 *easyChat) +{ + sub_80EB544(gStringVar4, easyChat, 2, 3); +} + +void sub_8135474(void) +{ + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.greeting.easyChat); + } + else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + { + sub_813545C((u16 *)gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].greeting.easyChat); + } + else + { + sub_813545C(gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].greeting.easyChat); + } +} + +void sub_81354CC(void) +{ + s32 i; + u16 heldItem; + + switch (gSpecialVar_0x8004) + { + case 0: + break; + case 1: + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); + } + break; + case 2: + sub_81360D0(); + break; + } + + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void sub_8135534(u8 taskId) +{ + if (IsBattleTransitionDone() == TRUE) + { + gMain.savedCallback = sub_81354CC; + SetMainCallback2(sub_800E7C4); + DestroyTask(taskId); + } +} + +void sub_813556C(void) +{ + s32 i; + u16 heldItem; + u8 transition; + + switch (gSpecialVar_0x8004) + { + case 0: + gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent = 0; + + sub_8134DD4(); + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + case 1: + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); + } + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + case 2: + ZeroEnemyPartyMons(); + + for (i = 0; i < 3; i++) + { + sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.filler_A8.ereaderTrainer.party[i]); + } + + gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent = 0; + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + } +} + +void sub_8135668(void) +{ + s32 i; + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + ewram160FB = gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType]; + gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 1: + gSaveBlock2.filler_A8.battleTowerLevelType = gSpecialVar_0x8005; + break; + case 2: + gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 3: + gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 4: + gSaveBlock2.filler_A8.battleTowerTrainerId = gSpecialVar_0x8005; + break; + case 5: + for (i = 0; i < 3; i++) + { + gSaveBlock2.filler_A8.var_4BD[i] = gSelectedOrderFromParty[i]; + } + break; + case 6: + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + sub_81360AC(&gSaveBlock2.filler_A8.ereaderTrainer); + } + + if (gSaveBlock2.filler_A8.totalBattleTowerWins < 9999) + { + gSaveBlock2.filler_A8.totalBattleTowerWins++; + } + + gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]++; + sub_8135A3C(); + gScriptResult = gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]; + + gStringVar1[0] = gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType] + 0xA1; + gStringVar1[1] = 0xFF; + break; + case 7: + if (gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] < 1430) + { + gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType]++; + } + + sub_8135A3C(); + gScriptResult = gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType]; + break; + case 8: + gSaveBlock2.filler_A8.unk_554 = gSpecialVar_0x8005; + break; + case 9: + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.bestBattleTowerWinStreak); + break; + case 11: + if (gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] != 3) + { + sub_813461C(battleTowerLevelType); + } + break; + case 12: + gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = ewram160FB; + break; + case 13: + gSaveBlock2.filler_A8.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); + break; + case 14: + gSaveBlock2.filler_A8.lastStreakLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + break; + } +} -- cgit v1.2.3 From 978ca50dad8de72a3940b5423fd5c3b87c13eb46 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 28 Oct 2017 17:35:37 -0700 Subject: Even more battle tower decompilation --- src/battle_tower.c | 470 +++++++++++++++++++++++++++++++++++++++++++++- src/engine/trainer_card.c | 2 +- src/field/easy_chat.c | 10 +- src/field/tv.c | 2 +- 4 files changed, 473 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 519a6f71e..2513322cc 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -6,13 +6,17 @@ #include "data2.h" #include "easy_chat.h" #include "event_data.h" +#include "item.h" #include "items.h" #include "main.h" #include "map_object_constants.h" #include "moves.h" +#include "new_game.h" #include "overworld.h" #include "pokedex.h" #include "rng.h" +#include "save.h" +#include "script_pokemon_80C4.h" #include "species.h" #include "string_util.h" #include "task.h" @@ -217,7 +221,8 @@ const u16 gBattleTowerBanlist[] = { 0xFFFF, }; -const u16 gUnknown_08405EDA[] = { +// Item prizes for battle tower streaks of 5 or fewer sets. +const u16 ShortStreakPrizes[] = { ITEM_HP_UP, ITEM_PROTEIN, ITEM_IRON, @@ -226,7 +231,8 @@ const u16 gUnknown_08405EDA[] = { ITEM_ZINC, }; -const u16 gUnknown_08405EE6[] = { +// Item prizes for battle tower streaks of greater than 5 sets. +const u16 LongStreakPrizes[] = { ITEM_BRIGHT_POWDER, ITEM_WHITE_HERB, ITEM_QUICK_CLAW, @@ -250,12 +256,18 @@ extern u8 gTrainerClassToNameIndex[]; extern u16 gTrainerBattleOpponent; extern u16 gBattleTypeFlags; extern u8 gSelectedOrderFromParty[]; +extern struct Pokemon gUnknown_030042FC[]; +extern u8 gBattleOutcome; +extern struct BattlePokemon gBattleMons[]; -extern void sub_8135C44(void); +extern void ValidateBattleTowerRecordChecksums(void); extern void sub_813601C(void); extern void sub_81349FC(u8); extern void sub_81360AC(struct BattleTowerEReaderTrainer *); extern void sub_8135A3C(void); +extern void sub_8135CFC(void); +static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); +static void ClearBattleTowerRecord(struct BattleTowerRecord *); #define ewram160FB (ewram[0x160FB]) @@ -306,7 +318,7 @@ void sub_8134548(void) VarSet(VAR_0x4000, 5); } - sub_8135C44(); + ValidateBattleTowerRecordChecksums(); } void sub_813461C(u8 levelType) @@ -2295,3 +2307,453 @@ void sub_8135668(void) break; } } + +void sub_81358A4(void) +{ + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + gScriptResult = gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType]; + break; + case 1: + gScriptResult = gSaveBlock2.filler_A8.battleTowerLevelType; + break; + case 2: + gScriptResult = gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]; + break; + case 3: + gScriptResult = gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType]; + break; + case 4: + gScriptResult = gSaveBlock2.filler_A8.battleTowerTrainerId; + break; + case 5: + case 6: + case 7: + break; + case 8: + gScriptResult = gSaveBlock2.filler_A8.unk_554; + break; + case 9: + gScriptResult = sub_8135D3C(battleTowerLevelType); + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.bestBattleTowerWinStreak); + break; + case 11: + sub_813461C(battleTowerLevelType); + break; + case 12: + gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = ewram160FB; + break; + case 13: + gSaveBlock2.filler_A8.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); + break; + case 14: + gSaveBlock2.filler_A8.lastStreakLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + break; + } +} + +void sub_8135A14(void) +{ + s32 i; + + for (i = 0; i < 3; i++) + { + gSelectedOrderFromParty[i] = gSaveBlock2.filler_A8.var_4BD[i]; + } + + ReducePlayerPartyToThree(); +} + +#ifdef NONMATCHING +void sub_8135A3C(void) +{ + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + u16 winStreak = sub_8135D3C(battleTowerLevelType); + if (gSaveBlock2.filler_A8.recordWinStreaks[battleTowerLevelType] < winStreak) + { + gSaveBlock2.filler_A8.recordWinStreaks[battleTowerLevelType] = winStreak; + } + + if (gSaveBlock2.filler_A8.recordWinStreaks[0] > gSaveBlock2.filler_A8.recordWinStreaks[1]) + { + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.recordWinStreaks[0]); + if (gSaveBlock2.filler_A8.recordWinStreaks[0] > 9999) + { + gSaveBlock2.filler_A8.bestBattleTowerWinStreak = 9999; + } + else + { + gSaveBlock2.filler_A8.bestBattleTowerWinStreak = gSaveBlock2.filler_A8.recordWinStreaks[0]; + } + } + else + { + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.recordWinStreaks[1]); + if (gSaveBlock2.filler_A8.recordWinStreaks[1] > 9999) + { + gSaveBlock2.filler_A8.bestBattleTowerWinStreak = 9999; + } + else + { + gSaveBlock2.filler_A8.bestBattleTowerWinStreak = gSaveBlock2.filler_A8.recordWinStreaks[1]; + } + } +} +#else +__attribute__((naked)) +void sub_8135A3C(void) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + ldr r6, _08135A84 @ =gSaveBlock2\n\ + ldr r1, _08135A88 @ =0x00000554\n\ + adds r0, r6, r1\n\ + ldrb r4, [r0]\n\ + lsls r4, 31\n\ + lsrs r4, 31\n\ + adds r0, r4, 0\n\ + bl sub_8135D3C\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + lsls r4, 1\n\ + movs r3, 0xAC\n\ + lsls r3, 3\n\ + adds r2, r6, r3\n\ + adds r4, r2\n\ + ldrh r0, [r4]\n\ + cmp r0, r5\n\ + bcs _08135A66\n\ + strh r5, [r4]\n\ +_08135A66:\n\ + ldr r0, _08135A8C @ =0x00000562\n\ + adds r1, r6, r0\n\ + ldrh r0, [r2]\n\ + ldrh r3, [r1]\n\ + cmp r0, r3\n\ + bls _08135A94\n\ + adds r5, r0, 0\n\ + movs r0, 0x20\n\ + adds r1, r5, 0\n\ + bl SetGameStat\n\ + ldr r1, _08135A90 @ =0x0000270f\n\ + cmp r5, r1\n\ + bhi _08135AA4\n\ + b _08135AB4\n\ + .align 2, 0\n\ +_08135A84: .4byte gSaveBlock2\n\ +_08135A88: .4byte 0x00000554\n\ +_08135A8C: .4byte 0x00000562\n\ +_08135A90: .4byte 0x0000270f\n\ +_08135A94:\n\ + ldrh r5, [r1]\n\ + movs r0, 0x20\n\ + adds r1, r5, 0\n\ + bl SetGameStat\n\ + ldr r1, _08135AAC @ =0x0000270f\n\ + cmp r5, r1\n\ + bls _08135AB4\n\ +_08135AA4:\n\ + ldr r2, _08135AB0 @ =0x00000572\n\ + adds r0, r6, r2\n\ + strh r1, [r0]\n\ + b _08135ABA\n\ + .align 2, 0\n\ +_08135AAC: .4byte 0x0000270f\n\ +_08135AB0: .4byte 0x00000572\n\ +_08135AB4:\n\ + ldr r3, _08135AC0 @ =0x00000572\n\ + adds r0, r6, r3\n\ + strh r5, [r0]\n\ +_08135ABA:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08135AC0: .4byte 0x00000572\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_8135AC4(void) +{ + s32 i; + u8 trainerClass; + struct BattleTowerRecord *playerRecord = &gSaveBlock2.filler_A8.var_A8; + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + + if (gSaveBlock2.playerGender != 0) + { + trainerClass = gUnknown_08405E7E[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; + } + else + { + trainerClass = gUnknown_08405E60[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; + } + + playerRecord->var_0 = battleTowerLevelType; + playerRecord->trainerClass = trainerClass; + + copy_word_to_mem(playerRecord->trainerId, gSaveBlock2.playerTrainerId); + StringCopy8(playerRecord->name, gSaveBlock2.playerName); + + playerRecord->var_2 = sub_8135D3C(battleTowerLevelType); + + for (i = 0; i < 6; i++) + { + playerRecord->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; + } + + for (i = 0; i < 3; i++) + { + sub_803AF78(&gUnknown_030042FC[gSaveBlock2.filler_A8.var_4BD[i]], &playerRecord->party[i]); + } + + SetBattleTowerRecordChecksum(&gSaveBlock2.filler_A8.var_A8); + sub_8135A3C(); +} + +void sub_8135BA0(void) +{ + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + + if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) + { + if (gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] > 1 + || gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType] > 1) + { + sub_8135AC4(); + } + } + + sub_8135CFC(); + + gSaveBlock2.filler_A8.var_4AD = gBattleOutcome; + + if (gSpecialVar_0x8004 != 3) + { + gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; + } + + VarSet(VAR_0x4000, 0); + gSaveBlock2.filler_A8.unk_554 = 1; + TrySavingData(EREADER_SAVE); +} + +void sub_8135C38(void) +{ + DoSoftReset(); +} + +void ValidateBattleTowerRecordChecksums(void) +{ + u32 i; + s32 recordIndex; + struct BattleTowerRecord *record; + u32 checksum; + + checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + checksum += ((u32 *)&gSaveBlock2.filler_A8.var_A8)[i]; + } + + if (gSaveBlock2.filler_A8.var_A8.checksum != checksum) + { + ClearBattleTowerRecord(&gSaveBlock2.filler_A8.var_A8); + } + + for (recordIndex = 0; recordIndex < 5; recordIndex++) + { + record = &gSaveBlock2.filler_A8.var_14C[recordIndex]; + checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + checksum += ((u32 *)record)[i]; + } + + if (gSaveBlock2.filler_A8.var_14C[recordIndex].checksum != checksum) + { + ClearBattleTowerRecord(&gSaveBlock2.filler_A8.var_14C[recordIndex]); + } + } +} + +void SetBattleTowerRecordChecksum(struct BattleTowerRecord *record) +{ + u32 i; + + record->checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + record->checksum += ((u32 *)record)[i]; + } +} + +void ClearBattleTowerRecord(struct BattleTowerRecord *record) +{ + u32 i; + + for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32); i++) + { + ((u32 *)record)[i] = 0; + } +} + +void sub_8135CFC(void) +{ + s32 i; + + get_trainer_name(gSaveBlock2.filler_A8.defeatedByTrainerName); + gSaveBlock2.filler_A8.defeatedBySpecies = gBattleMons[1].species; + gSaveBlock2.filler_A8.firstMonSpecies = gBattleMons[0].species; + + for (i = 0; i < POKEMON_NAME_LENGTH; i++) + { + gSaveBlock2.filler_A8.firstMonNickname[i] = gBattleMons[0].nickname[i]; + } +} + +u16 sub_8135D3C(u8 battleTowerLevelType) +{ + u16 var2 = ((gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] - 1) * 7 - 1) + gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]; + + if (var2 > 9999) + { + return 9999; + } + + return var2; +} + +#ifdef NONMATCHING +void sub_8135D84(void) +{ + u16 prizeItem; + struct SaveBlock2 *saveBlock = &gSaveBlock2; + u8 battleTowerLevelType = saveBlock->filler_A8.battleTowerLevelType; + + if (saveBlock->filler_A8.var_4B4[battleTowerLevelType] - 1 > 5) + { + prizeItem = LongStreakPrizes[Random() % 9]; + } + else + { + prizeItem = ShortStreakPrizes[Random() % 6]; + } + + saveBlock->filler_A8.prizeItem = prizeItem; +} +#else +__attribute__((naked)) +void sub_8135D84(void) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + ldr r5, _08135DB0 @ =gSaveBlock2\n\ + ldr r1, _08135DB4 @ =0x00000554\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 31\n\ + lsrs r0, 31\n\ + lsls r0, 1\n\ + ldr r2, _08135DB8 @ =0x0000055c\n\ + adds r1, r5, r2\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + subs r0, 0x1\n\ + cmp r0, 0x5\n\ + ble _08135DC0\n\ + bl Random\n\ + ldr r4, _08135DBC @ =LongStreakPrizes\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x9\n\ + b _08135DCC\n\ + .align 2, 0\n\ +_08135DB0: .4byte gSaveBlock2\n\ +_08135DB4: .4byte 0x00000554\n\ +_08135DB8: .4byte 0x0000055c\n\ +_08135DBC: .4byte LongStreakPrizes\n\ +_08135DC0:\n\ + bl Random\n\ + ldr r4, _08135DE8 @ =ShortStreakPrizes\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x6\n\ +_08135DCC:\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r0, 15\n\ + adds r0, r4\n\ + ldrh r1, [r0]\n\ + movs r2, 0xAD\n\ + lsls r2, 3\n\ + adds r0, r5, r2\n\ + strh r1, [r0]\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08135DE8: .4byte ShortStreakPrizes\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_8135DEC(void) +{ + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + + if (AddBagItem(gSaveBlock2.filler_A8.prizeItem, 1) == TRUE) + { + CopyItemName(gSaveBlock2.filler_A8.prizeItem, gStringVar1); + gScriptResult = 1; + } + else + { + gScriptResult = 0; + gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = 6; + } +} + +void sub_8135E50() +{ + s32 i; + u32 partyIndex; + struct Pokemon *pokemon; + u8 ribbonType; + u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + + ribbonType = MON_DATA_WINNING_RIBBON; + if (battleTowerLevelType != 0) + { + ribbonType = MON_DATA_VICTORY_RIBBON; + } + + gScriptResult = 0; + + if (sub_8135D3C(battleTowerLevelType) > 55) + { + for (i = 0; i < 3; i++) + { + partyIndex = gSaveBlock2.filler_A8.var_4BD[i] - 1; + pokemon = &gPlayerParty[partyIndex]; + if (!GetMonData(pokemon, ribbonType)) + { + gScriptResult = 1; + SetMonData(pokemon, ribbonType, (u8 *)&gScriptResult); + } + } + } + + if (gScriptResult != 0) + { + IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); + } +} diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c index c8847b258..11baa65d5 100644 --- a/src/engine/trainer_card.c +++ b/src/engine/trainer_card.c @@ -374,7 +374,7 @@ void sub_8093390(struct TrainerCard *trainerCard) for (i = 0; i < 4; i++) { - trainerCard->var_28[i] = gSaveBlock1.unk2B1C[i]; + trainerCard->var_28[i] = gSaveBlock1.easyChats.unk2B1C[i]; } for (i = 0; i < 8; i++) diff --git a/src/field/easy_chat.c b/src/field/easy_chat.c index 6014b3d14..2668b57dd 100644 --- a/src/field/easy_chat.c +++ b/src/field/easy_chat.c @@ -278,13 +278,13 @@ void sub_80EB7C4(void) switch (gSpecialVar_0x8004) { case 0: - words = gSaveBlock1.unk2B1C; + words = gSaveBlock1.easyChats.unk2B1C; arg1 = 2; arg2 = 2; break; case 1: - words = gSaveBlock1.unk2B28; - if (sub_80EB680(gSaveBlock1.unk2B28, 3, 2, 20)) + words = gSaveBlock1.easyChats.unk2B28; + if (sub_80EB680(gSaveBlock1.easyChats.unk2B28, 3, 2, 20)) { arg1 = 2; arg2 = 3; @@ -296,12 +296,12 @@ void sub_80EB7C4(void) } break; case 2: - words = gSaveBlock1.unk2B34; + words = gSaveBlock1.easyChats.unk2B34; arg1 = 3; arg2 = 2; break; case 3: - words = gSaveBlock1.unk2B40; + words = gSaveBlock1.easyChats.unk2B40; arg1 = 3; arg2 = 2; break; diff --git a/src/field/tv.c b/src/field/tv.c index 89e978d00..1e38e79e0 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -674,7 +674,7 @@ void sub_80BE320(void) bravoTrainerTower->var00 = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE; bravoTrainerTower->var01 = 1; StringCopy(bravoTrainerTower->trainerName, gSaveBlock2.playerName); - StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.filler_A8.filler_3DC); + StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.filler_A8.defeatedByTrainerName); bravoTrainerTower->species = gSaveBlock2.filler_A8.firstMonSpecies; bravoTrainerTower->defeatedSpecies = gSaveBlock2.filler_A8.defeatedBySpecies; bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.filler_A8.lastStreakLevelType); -- cgit v1.2.3 From c677029e155aa5f0ef61de708588a36085fd36b4 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 28 Oct 2017 22:18:48 -0700 Subject: More battle_tower decomp --- src/battle/battle_controller_opponent.c | 2 +- src/battle/battle_message.c | 4 +- src/battle_tower.c | 285 +++++++++++++++++++++++++++++++- src/de_rom_8040FE0.c | 2 +- src/engine/mystery_event_script.c | 2 +- 5 files changed, 287 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 72b56b962..b6ada3b7b 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -4,6 +4,7 @@ #include "data2.h" #include "battle_811DA74.h" #include "battle_anim_813F0F4.h" +#include "battle_tower.h" #include "link.h" #include "m4a.h" #include "main.h" @@ -76,7 +77,6 @@ extern u8 sub_8046400(); extern void sub_8032A08(); extern void sub_8043DB0(); extern void sub_8033160(void); -extern u8 sub_8135FBC(void); extern u8 get_trainer_class_pic_index(void); extern void sub_80313A0(struct Sprite *); extern void sub_8032B4C(void); diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index a3cc320ad..9df153e0a 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -1,6 +1,7 @@ #include "global.h" -#include "battle_message.h" #include "battle.h" +#include "battle_message.h" +#include "battle_tower.h" #include "item.h" #include "items.h" #include "pokemon.h" @@ -127,7 +128,6 @@ u8 GetBankSide(u8 bank); s32 sub_803FC34(u16); void get_trainer_name(u8* dst); u8 get_trainer_class_name_index(void); -u8 sub_8135FD8(void); u8 GetMultiplayerId(void); u8 GetBankByPlayerAI(u8 ID); u8 GetBankSide(u8 bank); diff --git a/src/battle_tower.c b/src/battle_tower.c index 2513322cc..1ed893fdf 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -22,6 +22,7 @@ #include "task.h" #include "text.h" #include "trainer.h" +#include "tv.h" #include "vars.h" #include "data/battle_tower/trainers.h" @@ -261,11 +262,11 @@ extern u8 gBattleOutcome; extern struct BattlePokemon gBattleMons[]; extern void ValidateBattleTowerRecordChecksums(void); -extern void sub_813601C(void); extern void sub_81349FC(u8); -extern void sub_81360AC(struct BattleTowerEReaderTrainer *); extern void sub_8135A3C(void); extern void sub_8135CFC(void); +static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); +//static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); static void ClearBattleTowerRecord(struct BattleTowerRecord *); @@ -2258,7 +2259,7 @@ void sub_8135668(void) case 6: if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) { - sub_81360AC(&gSaveBlock2.filler_A8.ereaderTrainer); + ClearEReaderTrainer(&gSaveBlock2.filler_A8.ereaderTrainer); } if (gSaveBlock2.filler_A8.totalBattleTowerWins < 9999) @@ -2757,3 +2758,281 @@ void sub_8135E50() IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); } } + +__attribute__((naked)) +void unref_sub_8135EE8() +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + ldr r7, _08135F0C @ =gSaveBlock2 + 0x498\n\ + ldr r0, _08135F10 @ =0xfffffb68\n\ + adds r2, r7, r0\n\ + ldrb r0, [r2, 0x8]\n\ + cmp r0, 0\n\ + beq _08135F18\n\ + ldr r4, _08135F14 @ =gUnknown_08405E7E\n\ + ldrb r0, [r2, 0xA]\n\ + ldrb r1, [r2, 0xB]\n\ + adds r0, r1\n\ + ldrb r1, [r2, 0xC]\n\ + adds r0, r1\n\ + ldrb r1, [r2, 0xD]\n\ + adds r0, r1\n\ + movs r1, 0x14\n\ + b _08135F2A\n\ + .align 2, 0\n\ +_08135F0C: .4byte gSaveBlock2 + 0x498\n\ +_08135F10: .4byte 0xfffffb68\n\ +_08135F14: .4byte gUnknown_08405E7E\n\ +_08135F18:\n\ + ldr r4, _08135FA8 @ =gUnknown_08405E60\n\ + ldrb r0, [r2, 0xA]\n\ + ldrb r1, [r2, 0xB]\n\ + adds r0, r1\n\ + ldrb r1, [r2, 0xC]\n\ + adds r0, r1\n\ + ldrb r1, [r2, 0xD]\n\ + adds r0, r1\n\ + movs r1, 0x1E\n\ +_08135F2A:\n\ + bl __umodsi3\n\ + adds r0, r4\n\ + ldrb r0, [r0]\n\ + strb r0, [r7, 0x1]\n\ + adds r0, r7, 0\n\ + adds r0, 0xC\n\ + ldr r4, _08135FAC @ =gSaveBlock2 + 0xA\n\ + adds r1, r4, 0\n\ + bl copy_word_to_mem\n\ + adds r0, r7, 0x4\n\ + subs r4, 0xA\n\ + adds r1, r4, 0\n\ + bl StringCopy8\n\ + movs r0, 0x1\n\ + strh r0, [r7, 0x2]\n\ + movs r5, 0x7\n\ + movs r4, 0\n\ + ldr r0, _08135FB0 @ =gSaveBlock1\n\ + ldr r1, _08135FB4 @ =0x00002b28\n\ + adds r6, r0, r1\n\ + adds r3, r7, 0\n\ + adds r3, 0x10\n\ + adds r2, r7, 0\n\ + adds r2, 0x28\n\ + adds r1, r7, 0\n\ + adds r1, 0x1C\n\ +_08135F64:\n\ + ldrh r0, [r6]\n\ + strh r0, [r3]\n\ + strh r5, [r1]\n\ + adds r0, r5, 0x6\n\ + strh r0, [r2]\n\ + adds r5, 0x1\n\ + adds r6, 0x2\n\ + adds r3, 0x2\n\ + adds r2, 0x2\n\ + adds r1, 0x2\n\ + adds r4, 0x1\n\ + cmp r4, 0x5\n\ + ble _08135F64\n\ + movs r4, 0\n\ +_08135F80:\n\ + movs r0, 0x64\n\ + muls r0, r4\n\ + ldr r1, _08135FB8 @ =gPlayerParty\n\ + adds r0, r1\n\ + movs r1, 0x2C\n\ + muls r1, r4\n\ + adds r1, 0x34\n\ + adds r1, r7, r1\n\ + bl sub_803AF78\n\ + adds r4, 0x1\n\ + cmp r4, 0x2\n\ + ble _08135F80\n\ + adds r0, r7, 0\n\ + bl SetEReaderTrainerChecksum\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08135FA8: .4byte gUnknown_08405E60\n\ +_08135FAC: .4byte gSaveBlock2 + 0xA\n\ +_08135FB0: .4byte gSaveBlock1\n\ +_08135FB4: .4byte 0x00002b28\n\ +_08135FB8: .4byte gPlayerParty\n\ +.syntax divided\n"); +} + +u8 sub_8135FBC(void) +{ + return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; +} + +u8 sub_8135FD8(void) +{ + return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; +} + +void sub_8135FF4(u8 *text) +{ + s32 i; + + for (i = 0; i < 7; i++) + { + text[i] = gSaveBlock2.filler_A8.ereaderTrainer.name[i]; + } + + text[i] = 0xFF; +} + +void sub_813601C(void) +{ + u32 i; + u32 checksum; + struct BattleTowerEReaderTrainer *ereaderTrainer; + + gScriptResult = 0; + ereaderTrainer = &gSaveBlock2.filler_A8.ereaderTrainer; + + checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + checksum |= ((u32 *)ereaderTrainer)[i]; + } + + if (checksum == 0) + { + gScriptResult = 1; + return; + } + + checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + checksum += ((u32 *)ereaderTrainer)[i]; + } + + if (gSaveBlock2.filler_A8.ereaderTrainer.checksum != checksum) + { + ClearEReaderTrainer(&gSaveBlock2.filler_A8.ereaderTrainer); + gScriptResult = 1; + } +} + +void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer) +{ + s32 i; + + ereaderTrainer->checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + ereaderTrainer->checksum += ((u32 *)ereaderTrainer)[i]; + } +} + +void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) +{ + u32 i; + + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32); i++) + { + ((u32 *)ereaderTrainer)[i] = 0; + } +} + +void sub_81360C0(void) +{ + sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.greeting.easyChat); +} + +void sub_81360D0(void) +{ + if (gBattleOutcome == BATTLE_DREW) + { + gStringVar4[0] = 0xFF; + } + else if (gBattleOutcome == BATTLE_WON) + { + sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.farewellPlayerWon.easyChat); + } + else + { + sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.farewellPlayerLost.easyChat); + } +} + +void sub_813610C(void) +{ + s32 i; + + for (i = 0; i < 2; i++) + { + if (gSaveBlock2.filler_A8.var_4AE[i] == 1) + { + sub_80BFD20(); + } + } +} + + +#if GERMAN +__attribute__((naked)) +u8 de_sub_81364AC(void) +{ + asm(".syntax unified\n\ + push {lr}\n\ + ldr r2, _DE_081364C0 @ =gSaveBlock2\n\ + ldr r0, _DE_081364C4 @ =0x00000564\n\ + adds r1, r2, r0\n\ + ldrb r0, [r1]\n\ + cmp r0, 0xC8\n\ + bne _DE_081364CC\n\ + ldr r1, _DE_081364C8 @ =0x00000499\n\ + adds r0, r2, r1\n\ + b _DE_081364F2\n\ + .align 2, 0\n\ +_DE_081364C0: .4byte gSaveBlock2\n\ +_DE_081364C4: .4byte 0x00000564\n\ +_DE_081364C8: .4byte 0x00000499\n\ +_DE_081364CC:\n\ + cmp r0, 0x63\n\ + bhi _DE_081364E4\n\ + ldr r2, _DE_081364E0 @ =gBattleTowerTrainers\n\ + ldrb r1, [r1]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 3\n\ + adds r0, r2\n\ + b _DE_081364F2\n\ + .align 2, 0\n\ +_DE_081364E0: .4byte gBattleTowerTrainers\n\ +_DE_081364E4:\n\ + ldrb r0, [r1]\n\ + subs r0, 0x64\n\ + movs r1, 0xA4\n\ + muls r0, r1\n\ + adds r0, r2\n\ + adds r1, 0xA9\n\ + adds r0, r1\n\ +_DE_081364F2:\n\ + ldrb r0, [r0]\n\ + pop {r1}\n\ + bx r1\n\ +.syntax divided\n"); +} + +__attribute__((naked)) +u8 de_sub_81364F8(void) +{ + asm(".syntax unified\n\ + ldr r0, _DE_08136504 @ =gSaveBlock2\n\ + ldr r1, _DE_08136508 @ =0x00000499\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + bx lr\n\ + .align 2, 0\n\ +_DE_08136504: .4byte gSaveBlock2\n\ +_DE_08136508: .4byte 0x00000499\n\ +.syntax divided\n"); +} +#endif diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c index eebcc1437..953871c8b 100644 --- a/src/de_rom_8040FE0.c +++ b/src/de_rom_8040FE0.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_tower.h" #if GERMAN @@ -59,7 +60,6 @@ u8 *de_sub_804100C(u8 gender) { u8 de_sub_81364AC(void); u8 get_trainer_class_name_index(void); u8 de_sub_81364F8(void); -u8 sub_8135FD8(void); u8 *de_sub_8041024(s32 arg0, u32 arg1) { u8 nameIndex, trainerClass, gender; diff --git a/src/engine/mystery_event_script.c b/src/engine/mystery_event_script.c index 38ada0685..c07a23262 100644 --- a/src/engine/mystery_event_script.c +++ b/src/engine/mystery_event_script.c @@ -1,5 +1,6 @@ #include "global.h" #include "berry.h" +#include "battle_tower.h" #include "easy_chat.h" #include "event_data.h" #include "mail_data.h" @@ -27,7 +28,6 @@ #endif extern void party_compaction(void); -extern void sub_813601C(void); extern ScrCmdFunc gMysteryEventScriptCmdTable[]; extern ScrCmdFunc gMysteryEventScriptCmdTableEnd[]; -- cgit v1.2.3 From b9252e4f2803fe14bd7dd8385da595931b82c8d6 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 28 Oct 2017 22:59:19 -0700 Subject: Give more descriptive names for battle tower structs --- src/battle/battle_records.c | 17 ++- src/battle_tower.c | 307 +++++++++++++++++++------------------- src/debug/unknown_debug_menu.c | 12 +- src/engine/mystery_event_script.c | 2 +- src/engine/record_mixing.c | 4 +- src/engine/trainer_card.c | 4 +- src/field/choose_party.c | 2 +- src/field/tv.c | 12 +- src/scene/new_game.c | 6 +- 9 files changed, 183 insertions(+), 183 deletions(-) (limited to 'src') diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c index 59da6ba73..fd1f528ac 100644 --- a/src/battle/battle_records.c +++ b/src/battle/battle_records.c @@ -260,9 +260,9 @@ void ShowLinkBattleRecords(void) { static bool32 sub_8110494(u8 level) { - struct SaveBlock2_Sub *sb2sub = &gSaveBlock2.filler_A8; + struct BattleTowerData *battleTower = &gSaveBlock2.battleTower; - switch (sb2sub->var_4AE[level]) + switch (battleTower->var_4AE[level]) { case 0: return FALSE; @@ -294,17 +294,18 @@ static void PrintWinStreak(const u8 *str, u16 streak, u8 left, u8 top) static void PrintRecordWinStreak(u8 level, u8 left, u8 top) { - struct SaveBlock2_Sub *sb2sub = &gSaveBlock2.filler_A8; - u16 winStreak = sb2sub->recordWinStreaks[level]; + struct BattleTowerData *battleTower = &gSaveBlock2.battleTower; + u16 winStreak = battleTower->recordWinStreaks[level]; PrintWinStreak(gOtherText_Record, winStreak, left, top); } static u16 GetLastWinStreak(u8 level) { - u16 result = gSaveBlock2.filler_A8.currentWinStreaks[level]; - if (result > 9999) - result = 9999; - return result; + u16 winStreak = gSaveBlock2.battleTower.currentWinStreaks[level]; + if (winStreak > 9999) + winStreak = 9999; + + return winStreak; } static void PrintLastWinStreak(u8 level, u8 left, u8 top) diff --git a/src/battle_tower.c b/src/battle_tower.c index 1ed893fdf..f799168f6 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -280,7 +280,7 @@ void sub_8134548(void) for (levelType = 0; levelType < 2; levelType++) { - switch (gSaveBlock2.filler_A8.var_4AE[levelType]) + switch (gSaveBlock2.battleTower.var_4AE[levelType]) { case 0: default: @@ -313,8 +313,8 @@ void sub_8134548(void) } } - if ((gSaveBlock2.filler_A8.var_4AE[0] == 3 || gSaveBlock2.filler_A8.var_4AE[0] == 6) - && (gSaveBlock2.filler_A8.var_4AE[1] == 3 || gSaveBlock2.filler_A8.var_4AE[1] == 6)) + if ((gSaveBlock2.battleTower.var_4AE[0] == 3 || gSaveBlock2.battleTower.var_4AE[0] == 6) + && (gSaveBlock2.battleTower.var_4AE[1] == 3 || gSaveBlock2.battleTower.var_4AE[1] == 6)) { VarSet(VAR_0x4000, 5); } @@ -324,9 +324,9 @@ void sub_8134548(void) void sub_813461C(u8 levelType) { - gSaveBlock2.filler_A8.var_4AE[levelType] = 0; - gSaveBlock2.filler_A8.var_4B0[levelType] = 1; - gSaveBlock2.filler_A8.var_4B4[levelType] = 1; + gSaveBlock2.battleTower.var_4AE[levelType] = 0; + gSaveBlock2.battleTower.curChallengeWins[levelType] = 1; + gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] = 1; } // u8 sub_8134650(u8 levelType, u16 b) @@ -337,7 +337,7 @@ void sub_813461C(u8 levelType) // sub_813601C(); -// if (gScriptResult || gSaveBlock2.filler_A8.ereaderTrainer.unk2 != b) +// if (gScriptResult || gSaveBlock2.battleTower.ereaderTrainer.unk2 != b) // { // return 0; // } @@ -350,12 +350,12 @@ void sub_813461C(u8 levelType) // for (i = 0; i < 3; i++) // { -// if (!gSaveBlock2.filler_A8.ereaderTrainer.party[i].level != trainerTeamLevel) +// if (!gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) // { // return 0; // } -// CheckMonBattleTowerBanlist(gSaveBlock2.filler_A8.ereaderTrainer.party[i].unk0, gSaveBlock2.filler_A8.ereaderTrainer.party[i].unk2, 1, levelType, &numValid); +// CheckMonBattleTowerBanlist(gSaveBlock2.battleTower.ereaderTrainer.party[i].unk0, gSaveBlock2.battleTower.ereaderTrainer.party[i].unk2, 1, levelType, &numValid); // } // return numValid == 3; @@ -456,11 +456,11 @@ _081346F0: .4byte 0x000004cc\n\ // s32 i; // u32 j; // u32 arr[4]; -// u16 var2 = sub_8135D3C(gSaveBlock2.filler_A8.battleTowerLevelType); +// u16 var2 = sub_8135D3C(gSaveBlock2.battleTower.battleTowerLevelType); -// if (sub_8134650(gSaveBlock2.filler_A8.battleTowerLevelType)) +// if (sub_8134650(gSaveBlock2.battleTower.battleTowerLevelType)) // { -// gSaveBlock2.filler_A8.battleTowerTrainerId = 0xC8; +// gSaveBlock2.battleTower.battleTowerTrainerId = 0xC8; // return TRUE; // } @@ -470,8 +470,8 @@ _081346F0: .4byte 0x000004cc\n\ // u32 var_add = 0; // for (j = 0; j < 40; j++) // { -// var_or |= gSaveBlock2.filler_A8.var_0A4[i][j]; -// var_add += gSaveBlock2.filler_A8.var_0A4[i][j]; +// var_or |= gSaveBlock2.battleTower.var_0A4[i][j]; +// var_add += gSaveBlock2.battleTower.var_0A4[i][j]; // } @@ -614,27 +614,27 @@ _081347F4: .4byte 0x00000564\n\ // void sub_81347F8(void) // { -// bool8 levelType = gSaveBlock2.filler_A8.battleTowerLevelType; +// bool8 levelType = gSaveBlock2.battleTower.battleTowerLevelType; // if (sub_81346F4()) // { -// sub_81349FC(gSaveBlock2.filler_A8.battleTowerTrainerId); -// gSaveBlock2.filler_A8.var_4C1[gSaveBlock2.filler_A8.var_4B0[levelType]] = gSaveBlock2.filler_A8.battleTowerTrainerId; +// sub_81349FC(gSaveBlock2.battleTower.battleTowerTrainerId); +// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeWins[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; // } // else // { // u16 var1; -// if (gSaveBlock2.filler_A8.var_4B4[levelType] > 7) +// if (gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] > 7) // { // while (1) // { // s32 i; // u32 temp = ((Random() & 0xFF) * 30) >> 8; // var1 = temp + 70; -// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && var1 != gSaveBlock2.filler_A8.var_4C1[i]; i++) // TODO: [i + 1]??? +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeWins[levelType] - 1 && var1 != gSaveBlock2.battleTower.var_4C1[i]; i++) // TODO: [i + 1]??? // { } -// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// if (i == gSaveBlock2.battleTower.curChallengeWins[levelType] - 1) // { // break; // } @@ -642,18 +642,18 @@ _081347F4: .4byte 0x00000564\n\ // } // else // { -// if (gSaveBlock2.filler_A8.var_4B0[levelType] == 7) +// if (gSaveBlock2.battleTower.curChallengeWins[levelType] == 7) // { // while (1) // { // s32 i; // u32 temp = ((Random() & 0xFF) * 5); -// u32 temp2 = (((gSaveBlock2.filler_A8.var_4B4[levelType] - 1) * 10) + 20); +// u32 temp2 = (((gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] - 1) * 10) + 20); // var1 = temp / 128 + temp2; -// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && gSaveBlock2.filler_A8.var_4C1[i] != var1; i++) // TODO: [i + 1]???? +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeWins[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // TODO: [i + 1]???? // { } -// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// if (i == gSaveBlock2.battleTower.curChallengeWins[levelType] - 1) // { // break; // } @@ -665,12 +665,12 @@ _081347F4: .4byte 0x00000564\n\ // { // s32 i; // u32 temp = ((Random() & 0xFF) * 320); -// u32 temp2 = ((gSaveBlock2.filler_A8.var_4B4[levelType] - 1) * 10); +// u32 temp2 = ((gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] - 1) * 10); // var1 = temp + temp2; -// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && gSaveBlock2.filler_A8.var_4C1[i] != var1; i++) +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeWins[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // { } -// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// if (i == gSaveBlock2.battleTower.curChallengeWins[levelType] - 1) // { // break; // } @@ -678,12 +678,12 @@ _081347F4: .4byte 0x00000564\n\ // } // } -// gSaveBlock2.filler_A8.battleTowerTrainerId = var1; -// sub_81349FC(gSaveBlock2.filler_A8.battleTowerTrainerId); +// gSaveBlock2.battleTower.battleTowerTrainerId = var1; +// sub_81349FC(gSaveBlock2.battleTower.battleTowerTrainerId); -// if (gSaveBlock2.filler_A8.var_4B0[levelType] < 7) +// if (gSaveBlock2.battleTower.curChallengeWins[levelType] < 7) // { -// gSaveBlock2.filler_A8.var_4C1[gSaveBlock2.filler_A8.var_4B0[levelType]] = gSaveBlock2.filler_A8.battleTowerTrainerId; +// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeWins[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; // } // } // } @@ -963,11 +963,11 @@ void sub_81349FC(u8 trainerIndex) } else if (trainerIndex < 200) { - trainerClass = gSaveBlock2.filler_A8.var_14C[trainerIndex - 100].trainerClass; + trainerClass = gSaveBlock2.battleTower.records[trainerIndex - 100].trainerClass; } else { - trainerClass = gSaveBlock2.filler_A8.ereaderTrainer.trainerClass; + trainerClass = gSaveBlock2.battleTower.ereaderTrainer.trainerClass; } for (i = 0; i < 30 && gUnknown_08405E60[i] != trainerClass; i++); @@ -1004,10 +1004,10 @@ void sub_8134AB4() // for (i = 0; i < 5; i++) // { // k = 0; -// for (j = 0; j < 4 && gSaveBlock2.filler_A8.var_14C[i].var_C[i] != record->var_C[j]; j++); +// for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].var_C[i] != record->var_C[j]; j++); // if (j == 4) // { -// for (k = 0; k < 7 && gSaveBlock2.filler_A8.var_14C[i].var_8 == record->var_8; k++) +// for (k = 0; k < 7 && gSaveBlock2.battleTower.records[i].var_8 == record->var_8; k++) // { // if (record->var_8 == 0xFF) // { @@ -1025,40 +1025,40 @@ void sub_8134AB4() // if (i < 5) // { -// gSaveBlock2.filler_A8.var_14C[i] = *record; +// gSaveBlock2.battleTower.records[i] = *record; // return; // } // i = 0; // while (i < 5) // { -// if (gSaveBlock2.filler_A8.var_14C[i].var_2 == 0) +// if (gSaveBlock2.battleTower.records[i].var_2 == 0) // { // if (i > 4) // { // break; // } -// gSaveBlock2.filler_A8.var_14C[i] = *record; +// gSaveBlock2.battleTower.records[i] = *record; // return; // } // i++; // } -// var1[0] = gSaveBlock2.filler_A8.var_14C[0].var_2; +// var1[0] = gSaveBlock2.battleTower.records[0].var_2; // var2[0] = 0; // l++; // for (i = 1; i < 5; i++) // { -// for (j = 0; gSaveBlock2.filler_A8.var_14C[i].var_2 <= var1[0] && j < l; j++) +// for (j = 0; gSaveBlock2.battleTower.records[i].var_2 <= var1[0] && j < l; j++) // { -// if (gSaveBlock2.filler_A8.var_14C[i].var_2 < var1[0]) +// if (gSaveBlock2.battleTower.records[i].var_2 < var1[0]) // { // j = 0; // l = 1; -// var1[0] = gSaveBlock2.filler_A8.var_14C[i].var_2; +// var1[0] = gSaveBlock2.battleTower.records[i].var_2; // var2[0] = i; // break; // } @@ -1066,13 +1066,13 @@ void sub_8134AB4() // if (j == l) // { -// var1[l] = gSaveBlock2.filler_A8.var_14C[i].var_2; +// var1[l] = gSaveBlock2.battleTower.records[i].var_2; // var2[l] = i; // l++; // } // } -// gSaveBlock2.filler_A8.var_14C[var2[(Random() % l)]] = *record; +// gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; // } __attribute__((naked)) @@ -1313,33 +1313,33 @@ _08134C70: .4byte gSaveBlock2\n\ u8 get_trainer_class_pic_index(void) { - if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) { - return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } - else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) { - return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].trainerClass]; + return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; } else { - return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].trainerClass]; + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].trainerClass]; } } u8 get_trainer_class_name_index(void) { - if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) { - return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } - else if (gSaveBlock2.filler_A8.battleTowerTrainerId >= 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId >= 100) { - return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].trainerClass]; + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].trainerClass]; } else { - return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].trainerClass]; + return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; } } @@ -1347,25 +1347,25 @@ void get_trainer_name(u8* dest) { s32 i; - if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) { for (i = 0; i < 7; i++) { - dest[i] = gSaveBlock2.filler_A8.ereaderTrainer.name[i]; + dest[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; } } - else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) { for (i = 0; i < 7; i++) { - dest[i] = gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].name[i]; + dest[i] = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].name[i]; } } else { for (i = 0; i < 7; i++) { - dest[i] = gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].name[i]; + dest[i] = gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].name[i]; } } @@ -2129,17 +2129,17 @@ void sub_813545C(u16 *easyChat) void sub_8135474(void) { - if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) { - sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.greeting.easyChat); + sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); } - else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) { - sub_813545C((u16 *)gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].greeting.easyChat); + sub_813545C((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); } else { - sub_813545C(gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].greeting.easyChat); + sub_813545C(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].greeting.easyChat); } } @@ -2213,7 +2213,7 @@ void sub_813556C(void) for (i = 0; i < 3; i++) { - sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.filler_A8.ereaderTrainer.party[i]); + sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.battleTower.ereaderTrainer.party[i]); } gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); @@ -2230,130 +2230,130 @@ void sub_813556C(void) void sub_8135668(void) { s32 i; - u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; switch (gSpecialVar_0x8004) { case 0: - ewram160FB = gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType]; - gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; + ewram160FB = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; break; case 1: - gSaveBlock2.filler_A8.battleTowerLevelType = gSpecialVar_0x8005; + gSaveBlock2.battleTower.battleTowerLevelType = gSpecialVar_0x8005; break; case 2: - gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType] = gSpecialVar_0x8005; + gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType] = gSpecialVar_0x8005; break; case 3: - gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] = gSpecialVar_0x8005; + gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] = gSpecialVar_0x8005; break; case 4: - gSaveBlock2.filler_A8.battleTowerTrainerId = gSpecialVar_0x8005; + gSaveBlock2.battleTower.battleTowerTrainerId = gSpecialVar_0x8005; break; case 5: for (i = 0; i < 3; i++) { - gSaveBlock2.filler_A8.var_4BD[i] = gSelectedOrderFromParty[i]; + gSaveBlock2.battleTower.selectedPartyMons[i] = gSelectedOrderFromParty[i]; } break; case 6: - if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) { - ClearEReaderTrainer(&gSaveBlock2.filler_A8.ereaderTrainer); + ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); } - if (gSaveBlock2.filler_A8.totalBattleTowerWins < 9999) + if (gSaveBlock2.battleTower.totalBattleTowerWins < 9999) { - gSaveBlock2.filler_A8.totalBattleTowerWins++; + gSaveBlock2.battleTower.totalBattleTowerWins++; } - gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]++; + gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]++; sub_8135A3C(); - gScriptResult = gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]; - gStringVar1[0] = gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType] + 0xA1; + gStringVar1[0] = gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType] + 0xA1; gStringVar1[1] = 0xFF; break; case 7: - if (gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] < 1430) + if (gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] < 1430) { - gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType]++; + gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType]++; } sub_8135A3C(); - gScriptResult = gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType]; break; case 8: - gSaveBlock2.filler_A8.unk_554 = gSpecialVar_0x8005; + gSaveBlock2.battleTower.unk_554 = gSpecialVar_0x8005; break; case 9: break; case 10: - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.bestBattleTowerWinStreak); + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); break; case 11: - if (gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] != 3) + if (gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] != 3) { sub_813461C(battleTowerLevelType); } break; case 12: - gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = ewram160FB; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; break; case 13: - gSaveBlock2.filler_A8.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); + gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); break; case 14: - gSaveBlock2.filler_A8.lastStreakLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; break; } } void sub_81358A4(void) { - u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; switch (gSpecialVar_0x8004) { case 0: - gScriptResult = gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; break; case 1: - gScriptResult = gSaveBlock2.filler_A8.battleTowerLevelType; + gScriptResult = gSaveBlock2.battleTower.battleTowerLevelType; break; case 2: - gScriptResult = gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]; break; case 3: - gScriptResult = gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType]; break; case 4: - gScriptResult = gSaveBlock2.filler_A8.battleTowerTrainerId; + gScriptResult = gSaveBlock2.battleTower.battleTowerTrainerId; break; case 5: case 6: case 7: break; case 8: - gScriptResult = gSaveBlock2.filler_A8.unk_554; + gScriptResult = gSaveBlock2.battleTower.unk_554; break; case 9: gScriptResult = sub_8135D3C(battleTowerLevelType); break; case 10: - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.bestBattleTowerWinStreak); + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); break; case 11: sub_813461C(battleTowerLevelType); break; case 12: - gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = ewram160FB; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; break; case 13: - gSaveBlock2.filler_A8.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); + gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); break; case 14: - gSaveBlock2.filler_A8.lastStreakLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; break; } } @@ -2364,7 +2364,7 @@ void sub_8135A14(void) for (i = 0; i < 3; i++) { - gSelectedOrderFromParty[i] = gSaveBlock2.filler_A8.var_4BD[i]; + gSelectedOrderFromParty[i] = gSaveBlock2.battleTower.selectedPartyMons[i]; } ReducePlayerPartyToThree(); @@ -2373,35 +2373,35 @@ void sub_8135A14(void) #ifdef NONMATCHING void sub_8135A3C(void) { - u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; u16 winStreak = sub_8135D3C(battleTowerLevelType); - if (gSaveBlock2.filler_A8.recordWinStreaks[battleTowerLevelType] < winStreak) + if (gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] < winStreak) { - gSaveBlock2.filler_A8.recordWinStreaks[battleTowerLevelType] = winStreak; + gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] = winStreak; } - if (gSaveBlock2.filler_A8.recordWinStreaks[0] > gSaveBlock2.filler_A8.recordWinStreaks[1]) + if (gSaveBlock2.battleTower.recordWinStreaks[0] > gSaveBlock2.battleTower.recordWinStreaks[1]) { - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.recordWinStreaks[0]); - if (gSaveBlock2.filler_A8.recordWinStreaks[0] > 9999) + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.recordWinStreaks[0]); + if (gSaveBlock2.battleTower.recordWinStreaks[0] > 9999) { - gSaveBlock2.filler_A8.bestBattleTowerWinStreak = 9999; + gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; } else { - gSaveBlock2.filler_A8.bestBattleTowerWinStreak = gSaveBlock2.filler_A8.recordWinStreaks[0]; + gSaveBlock2.battleTower.bestBattleTowerWinStreak = gSaveBlock2.battleTower.recordWinStreaks[0]; } } else { - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.filler_A8.recordWinStreaks[1]); - if (gSaveBlock2.filler_A8.recordWinStreaks[1] > 9999) + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.recordWinStreaks[1]); + if (gSaveBlock2.battleTower.recordWinStreaks[1] > 9999) { - gSaveBlock2.filler_A8.bestBattleTowerWinStreak = 9999; + gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; } else { - gSaveBlock2.filler_A8.bestBattleTowerWinStreak = gSaveBlock2.filler_A8.recordWinStreaks[1]; + gSaveBlock2.battleTower.bestBattleTowerWinStreak = gSaveBlock2.battleTower.recordWinStreaks[1]; } } } @@ -2484,8 +2484,8 @@ void sub_8135AC4(void) { s32 i; u8 trainerClass; - struct BattleTowerRecord *playerRecord = &gSaveBlock2.filler_A8.var_A8; - u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + struct BattleTowerRecord *playerRecord = &gSaveBlock2.battleTower.playerRecord; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; if (gSaveBlock2.playerGender != 0) { @@ -2513,21 +2513,21 @@ void sub_8135AC4(void) for (i = 0; i < 3; i++) { - sub_803AF78(&gUnknown_030042FC[gSaveBlock2.filler_A8.var_4BD[i]], &playerRecord->party[i]); + sub_803AF78(&gUnknown_030042FC[gSaveBlock2.battleTower.selectedPartyMons[i]], &playerRecord->party[i]); } - SetBattleTowerRecordChecksum(&gSaveBlock2.filler_A8.var_A8); + SetBattleTowerRecordChecksum(&gSaveBlock2.battleTower.playerRecord); sub_8135A3C(); } void sub_8135BA0(void) { - u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) { - if (gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] > 1 - || gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType] > 1) + if (gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] > 1 + || gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType] > 1) { sub_8135AC4(); } @@ -2535,15 +2535,15 @@ void sub_8135BA0(void) sub_8135CFC(); - gSaveBlock2.filler_A8.var_4AD = gBattleOutcome; + gSaveBlock2.battleTower.battleOutcome = gBattleOutcome; if (gSpecialVar_0x8004 != 3) { - gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; } VarSet(VAR_0x4000, 0); - gSaveBlock2.filler_A8.unk_554 = 1; + gSaveBlock2.battleTower.unk_554 = 1; TrySavingData(EREADER_SAVE); } @@ -2562,26 +2562,26 @@ void ValidateBattleTowerRecordChecksums(void) checksum = 0; for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) { - checksum += ((u32 *)&gSaveBlock2.filler_A8.var_A8)[i]; + checksum += ((u32 *)&gSaveBlock2.battleTower.playerRecord)[i]; } - if (gSaveBlock2.filler_A8.var_A8.checksum != checksum) + if (gSaveBlock2.battleTower.playerRecord.checksum != checksum) { - ClearBattleTowerRecord(&gSaveBlock2.filler_A8.var_A8); + ClearBattleTowerRecord(&gSaveBlock2.battleTower.playerRecord); } for (recordIndex = 0; recordIndex < 5; recordIndex++) { - record = &gSaveBlock2.filler_A8.var_14C[recordIndex]; + record = &gSaveBlock2.battleTower.records[recordIndex]; checksum = 0; for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) { checksum += ((u32 *)record)[i]; } - if (gSaveBlock2.filler_A8.var_14C[recordIndex].checksum != checksum) + if (gSaveBlock2.battleTower.records[recordIndex].checksum != checksum) { - ClearBattleTowerRecord(&gSaveBlock2.filler_A8.var_14C[recordIndex]); + ClearBattleTowerRecord(&gSaveBlock2.battleTower.records[recordIndex]); } } } @@ -2611,19 +2611,19 @@ void sub_8135CFC(void) { s32 i; - get_trainer_name(gSaveBlock2.filler_A8.defeatedByTrainerName); - gSaveBlock2.filler_A8.defeatedBySpecies = gBattleMons[1].species; - gSaveBlock2.filler_A8.firstMonSpecies = gBattleMons[0].species; + get_trainer_name(gSaveBlock2.battleTower.defeatedByTrainerName); + gSaveBlock2.battleTower.defeatedBySpecies = gBattleMons[1].species; + gSaveBlock2.battleTower.firstMonSpecies = gBattleMons[0].species; for (i = 0; i < POKEMON_NAME_LENGTH; i++) { - gSaveBlock2.filler_A8.firstMonNickname[i] = gBattleMons[0].nickname[i]; + gSaveBlock2.battleTower.firstMonNickname[i] = gBattleMons[0].nickname[i]; } } u16 sub_8135D3C(u8 battleTowerLevelType) { - u16 var2 = ((gSaveBlock2.filler_A8.var_4B4[battleTowerLevelType] - 1) * 7 - 1) + gSaveBlock2.filler_A8.var_4B0[battleTowerLevelType]; + u16 var2 = ((gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] - 1) * 7 - 1) + gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]; if (var2 > 9999) { @@ -2638,9 +2638,9 @@ void sub_8135D84(void) { u16 prizeItem; struct SaveBlock2 *saveBlock = &gSaveBlock2; - u8 battleTowerLevelType = saveBlock->filler_A8.battleTowerLevelType; + u8 battleTowerLevelType = saveBlock->battleTower.battleTowerLevelType; - if (saveBlock->filler_A8.var_4B4[battleTowerLevelType] - 1 > 5) + if (saveBlock->battleTower.curStreakChallengesCompleted[battleTowerLevelType] - 1 > 5) { prizeItem = LongStreakPrizes[Random() % 9]; } @@ -2649,7 +2649,7 @@ void sub_8135D84(void) prizeItem = ShortStreakPrizes[Random() % 6]; } - saveBlock->filler_A8.prizeItem = prizeItem; + saveBlock->battleTower.prizeItem = prizeItem; } #else __attribute__((naked)) @@ -2709,17 +2709,17 @@ _08135DE8: .4byte ShortStreakPrizes\n\ void sub_8135DEC(void) { - u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - if (AddBagItem(gSaveBlock2.filler_A8.prizeItem, 1) == TRUE) + if (AddBagItem(gSaveBlock2.battleTower.prizeItem, 1) == TRUE) { - CopyItemName(gSaveBlock2.filler_A8.prizeItem, gStringVar1); + CopyItemName(gSaveBlock2.battleTower.prizeItem, gStringVar1); gScriptResult = 1; } else { gScriptResult = 0; - gSaveBlock2.filler_A8.var_4AE[battleTowerLevelType] = 6; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = 6; } } @@ -2729,7 +2729,7 @@ void sub_8135E50() u32 partyIndex; struct Pokemon *pokemon; u8 ribbonType; - u8 battleTowerLevelType = gSaveBlock2.filler_A8.battleTowerLevelType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; ribbonType = MON_DATA_WINNING_RIBBON; if (battleTowerLevelType != 0) @@ -2743,7 +2743,7 @@ void sub_8135E50() { for (i = 0; i < 3; i++) { - partyIndex = gSaveBlock2.filler_A8.var_4BD[i] - 1; + partyIndex = gSaveBlock2.battleTower.selectedPartyMons[i] - 1; pokemon = &gPlayerParty[partyIndex]; if (!GetMonData(pokemon, ribbonType)) { @@ -2865,12 +2865,12 @@ _08135FB8: .4byte gPlayerParty\n\ u8 sub_8135FBC(void) { - return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } u8 sub_8135FD8(void) { - return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } void sub_8135FF4(u8 *text) @@ -2879,7 +2879,7 @@ void sub_8135FF4(u8 *text) for (i = 0; i < 7; i++) { - text[i] = gSaveBlock2.filler_A8.ereaderTrainer.name[i]; + text[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; } text[i] = 0xFF; @@ -2892,7 +2892,7 @@ void sub_813601C(void) struct BattleTowerEReaderTrainer *ereaderTrainer; gScriptResult = 0; - ereaderTrainer = &gSaveBlock2.filler_A8.ereaderTrainer; + ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; checksum = 0; for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) @@ -2912,9 +2912,9 @@ void sub_813601C(void) checksum += ((u32 *)ereaderTrainer)[i]; } - if (gSaveBlock2.filler_A8.ereaderTrainer.checksum != checksum) + if (gSaveBlock2.battleTower.ereaderTrainer.checksum != checksum) { - ClearEReaderTrainer(&gSaveBlock2.filler_A8.ereaderTrainer); + ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); gScriptResult = 1; } } @@ -2942,7 +2942,7 @@ void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) void sub_81360C0(void) { - sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.greeting.easyChat); + sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); } void sub_81360D0(void) @@ -2953,11 +2953,11 @@ void sub_81360D0(void) } else if (gBattleOutcome == BATTLE_WON) { - sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.farewellPlayerWon.easyChat); + sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon.easyChat); } else { - sub_813545C(gSaveBlock2.filler_A8.ereaderTrainer.farewellPlayerLost.easyChat); + sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost.easyChat); } } @@ -2967,14 +2967,13 @@ void sub_813610C(void) for (i = 0; i < 2; i++) { - if (gSaveBlock2.filler_A8.var_4AE[i] == 1) + if (gSaveBlock2.battleTower.var_4AE[i] == 1) { sub_80BFD20(); } } } - #if GERMAN __attribute__((naked)) u8 de_sub_81364AC(void) diff --git a/src/debug/unknown_debug_menu.c b/src/debug/unknown_debug_menu.c index 995fb38fc..9cc24fc62 100644 --- a/src/debug/unknown_debug_menu.c +++ b/src/debug/unknown_debug_menu.c @@ -42,12 +42,12 @@ static u8 sub_814A464(void) u8 sub_814A4B8(void) { - gSaveBlock2.filler_A8.var_4AE[0] = 3; - gSaveBlock2.filler_A8.var_4AE[1] = 3; - gSaveBlock2.filler_A8.var_4B4[0] = gBattleCommunication[0] + 1; - gSaveBlock2.filler_A8.var_4B4[1] = gBattleCommunication[0] + 1; - gSaveBlock2.filler_A8.var_4B0[0] = 1; - gSaveBlock2.filler_A8.var_4B0[1] = 1; + gSaveBlock2.battleTower.var_4AE[0] = 3; + gSaveBlock2.battleTower.var_4AE[1] = 3; + gSaveBlock2.battleTower.curStreakChallengesCompleted[0] = gBattleCommunication[0] + 1; + gSaveBlock2.battleTower.curStreakChallengesCompleted[1] = gBattleCommunication[0] + 1; + gSaveBlock2.battleTower.curChallengeWins[0] = 1; + gSaveBlock2.battleTower.curChallengeWins[1] = 1; CloseMenu(); return 1; } diff --git a/src/engine/mystery_event_script.c b/src/engine/mystery_event_script.c index c07a23262..0fb3a21cd 100644 --- a/src/engine/mystery_event_script.c +++ b/src/engine/mystery_event_script.c @@ -420,7 +420,7 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx) { u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]; - memcpy(&gSaveBlock2.filler_A8.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.filler_A8.ereaderTrainer)); + memcpy(&gSaveBlock2.battleTower.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.battleTower.ereaderTrainer)); sub_813601C(); StringExpandPlaceholders(gStringVar4, gOtherText_NewTrainerInHoenn); ctx->data[2] = 2; diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c index 000bafa4e..87fc6a81d 100644 --- a/src/engine/record_mixing.c +++ b/src/engine/record_mixing.c @@ -43,7 +43,7 @@ void *gUnknown_083D0274 = &gSaveBlock1.unknown_2ABC; void *gUnknown_083D0278 = &gSaveBlock1.mauvilleMan; void *recordMixingEasyChatPairs = &gSaveBlock1.easyChatPairs; struct RecordMixingDayCareMail *gUnknown_083D0280 = &gUnknown_02038738; -void *gUnknown_083D0284 = &gSaveBlock2.filler_A8; +void *gBattleTowerPlayerRecord = &gSaveBlock2.battleTower.playerRecord; #define BUFFER_CHUNK_SIZE 200 @@ -78,7 +78,7 @@ void RecordMixing_PrepareExchangePacket(void) gUnknown_02038738.mail[1] = gSaveBlock1.daycareData.misc.mail[1]; sub_8041324(gSaveBlock1.daycareData.mons, &gUnknown_02038738); memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixingDayCareMail)); - memcpy(&unk_2018000.battleTowerRecord, gUnknown_083D0284, sizeof(struct BattleTowerRecord)); + memcpy(&unk_2018000.battleTowerRecord, gBattleTowerPlayerRecord, sizeof(struct BattleTowerRecord)); if (GetMultiplayerId() == 0) unk_2018000.filler11C8[0] = GetRecordMixingGift(); diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c index 11baa65d5..3e9dadbda 100644 --- a/src/engine/trainer_card.c +++ b/src/engine/trainer_card.c @@ -352,8 +352,8 @@ void sub_8093390(struct TrainerCard *trainerCard) trainerCard->pokemonTrades = sav12_xor_get_clamped_above(GAME_STAT_POKEMON_TRADES, 0xFFFF); // Battle Tower - trainerCard->battleTowerWins = gSaveBlock2.filler_A8.totalBattleTowerWins; - trainerCard->battleTowerLosses = gSaveBlock2.filler_A8.bestBattleTowerWinStreak; + trainerCard->battleTowerWins = gSaveBlock2.battleTower.totalBattleTowerWins; + trainerCard->battleTowerLosses = gSaveBlock2.battleTower.bestBattleTowerWinStreak; if (trainerCard->battleTowerWins > 9999) { trainerCard->battleTowerWins = 9999; diff --git a/src/field/choose_party.c b/src/field/choose_party.c index 879139aa4..fd90a9199 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -176,7 +176,7 @@ static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn) return TRUE; } - if ((gSaveBlock2.filler_A8.battleTowerLevelType) == 0 + if ((gSaveBlock2.battleTower.battleTowerLevelType) == 0 && GetMonData(pkmn, MON_DATA_LEVEL) > 50) return FALSE; diff --git a/src/field/tv.c b/src/field/tv.c index 1e38e79e0..fcbd734a9 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -674,12 +674,12 @@ void sub_80BE320(void) bravoTrainerTower->var00 = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE; bravoTrainerTower->var01 = 1; StringCopy(bravoTrainerTower->trainerName, gSaveBlock2.playerName); - StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.filler_A8.defeatedByTrainerName); - bravoTrainerTower->species = gSaveBlock2.filler_A8.firstMonSpecies; - bravoTrainerTower->defeatedSpecies = gSaveBlock2.filler_A8.defeatedBySpecies; - bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.filler_A8.lastStreakLevelType); - bravoTrainerTower->var1c = gSaveBlock2.filler_A8.var_4AD; - if (gSaveBlock2.filler_A8.lastStreakLevelType == 0) + StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.battleTower.defeatedByTrainerName); + bravoTrainerTower->species = gSaveBlock2.battleTower.firstMonSpecies; + bravoTrainerTower->defeatedSpecies = gSaveBlock2.battleTower.defeatedBySpecies; + bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.battleTower.lastStreakLevelType); + bravoTrainerTower->var1c = gSaveBlock2.battleTower.battleOutcome; + if (gSaveBlock2.battleTower.lastStreakLevelType == 0) bravoTrainerTower->btLevel = 50; else bravoTrainerTower->btLevel = 100; diff --git a/src/scene/new_game.c b/src/scene/new_game.c index 6ab21c544..b15282960 100644 --- a/src/scene/new_game.c +++ b/src/scene/new_game.c @@ -92,9 +92,9 @@ void sub_8052DA8(void) gSaveBlock1.sbStruct.unkSB1.sb1_2EFC_struct[i] = gUnknown_08216604; } -void sub_8052DE4(void) +void ZeroBattleTowerData(void) { - CpuFill32(0, &gSaveBlock2.filler_A8, sizeof(gSaveBlock2.filler_A8)); + CpuFill32(0, &gSaveBlock2.battleTower, sizeof(gSaveBlock2.battleTower)); } void WarpToTruck(void) @@ -127,7 +127,7 @@ void NewGameInitData(void) ZeroPlayerPartyMons(); ZeroEnemyPartyMons(); ResetPokedex(); - sub_8052DE4(); + ZeroBattleTowerData(); memset(&gSaveBlock1, 0, sizeof(gSaveBlock1)); ClearMailData(); gSaveBlock2.specialSaveWarp = 0; -- cgit v1.2.3 From fc786f80fd10732d23759e7c647f15406a5162d0 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 29 Oct 2017 16:51:25 -0700 Subject: Decompile a few nonmatchings in battle_tower --- src/battle_tower.c | 758 +++++++++++++---------------------------------------- 1 file changed, 187 insertions(+), 571 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index f799168f6..d1c62d21e 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -245,6 +245,9 @@ const u16 LongStreakPrizes[] = { ITEM_CHOICE_BAND, }; +extern const u8 gUnknown_08400E2C[]; +extern const u8 gUnknown_08400E32[]; +extern const u8 gUnknown_08400E36[]; extern void sub_81360D0(void); extern u16 gSpecialVar_0x8004; extern u8 gUnknown_08400E23[]; @@ -265,6 +268,7 @@ extern void ValidateBattleTowerRecordChecksums(void); extern void sub_81349FC(u8); extern void sub_8135A3C(void); extern void sub_8135CFC(void); +extern void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); //static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); @@ -329,287 +333,105 @@ void sub_813461C(u8 levelType) gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] = 1; } -// u8 sub_8134650(u8 levelType, u16 b) -// { -// u8 trainerTeamLevel; -// s32 i; -// u32 numValid = 0; +u8 sub_8134650(u8 levelType, u16 b) +{ + u8 trainerTeamLevel; + u8 monLevel; + s32 i; + u16 validPartySpecies[6]; + u16 validPartyHeldItems[6]; + u8 numValid; -// sub_813601C(); + numValid = 0; -// if (gScriptResult || gSaveBlock2.battleTower.ereaderTrainer.unk2 != b) -// { -// return 0; -// } + sub_813601C(); -// trainerTeamLevel = 50; -// if (levelType != 0) -// { -// trainerTeamLevel = 100; -// } + if (gScriptResult != 0 || gSaveBlock2.battleTower.ereaderTrainer.var_2 != b) + { + return 0; + } -// for (i = 0; i < 3; i++) -// { -// if (!gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) -// { -// return 0; -// } + trainerTeamLevel = 50; + if (levelType != 0) + { + trainerTeamLevel = 100; + } -// CheckMonBattleTowerBanlist(gSaveBlock2.battleTower.ereaderTrainer.party[i].unk0, gSaveBlock2.battleTower.ereaderTrainer.party[i].unk2, 1, levelType, &numValid); -// } + for (i = 0; i < 3; i++) + { + monLevel = gSaveBlock2.battleTower.ereaderTrainer.party[i].level; + if (gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) + { + return 0; + } -// return numValid == 3; -// } + CheckMonBattleTowerBanlist( + gSaveBlock2.battleTower.ereaderTrainer.party[i].species, + gSaveBlock2.battleTower.ereaderTrainer.party[i].heldItem, + 1, + levelType, + monLevel, + validPartySpecies, + validPartyHeldItems, + &numValid); + } -__attribute__((naked)) -u8 sub_8134650(u8 levelType, u16 b) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - sub sp, 0x2C\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - lsls r1, 16\n\ - lsrs r6, r1, 16\n\ - add r4, sp, 0x28\n\ - movs r0, 0\n\ - strb r0, [r4]\n\ - bl sub_813601C\n\ - ldr r0, _08134684 @ =gScriptResult\n\ - ldrh r0, [r0]\n\ - adds r7, r4, 0\n\ - cmp r0, 0\n\ - bne _08134680\n\ - ldr r1, _08134688 @ =gSaveBlock2\n\ - ldr r2, _0813468C @ =0x0000049a\n\ - adds r0, r1, r2\n\ - ldrh r0, [r0]\n\ - cmp r0, r6\n\ - beq _08134690\n\ -_08134680:\n\ - movs r0, 0\n\ - b _081346E2\n\ - .align 2, 0\n\ -_08134684: .4byte gScriptResult\n\ -_08134688: .4byte gSaveBlock2\n\ -_0813468C: .4byte 0x0000049a\n\ -_08134690:\n\ - movs r6, 0x32\n\ - cmp r5, 0\n\ - beq _08134698\n\ - movs r6, 0x64\n\ -_08134698:\n\ - movs r4, 0\n\ - mov r8, r1\n\ -_0813469C:\n\ - movs r0, 0x2C\n\ - muls r0, r4\n\ - mov r3, r8\n\ - adds r1, r0, r3\n\ - movs r2, 0x9B\n\ - lsls r2, 3\n\ - adds r0, r1, r2\n\ - ldrb r2, [r0]\n\ - cmp r2, r6\n\ - bne _08134680\n\ - ldr r3, _081346F0 @ =0x000004cc\n\ - adds r0, r1, r3\n\ - ldrh r0, [r0]\n\ - adds r3, 0x2\n\ - adds r1, r3\n\ - ldrh r1, [r1]\n\ - str r2, [sp]\n\ - add r2, sp, 0x10\n\ - str r2, [sp, 0x4]\n\ - add r2, sp, 0x1C\n\ - str r2, [sp, 0x8]\n\ - str r7, [sp, 0xC]\n\ - movs r2, 0x1\n\ - adds r3, r5, 0\n\ - bl CheckMonBattleTowerBanlist\n\ - adds r4, 0x1\n\ - cmp r4, 0x2\n\ - ble _0813469C\n\ - movs r1, 0\n\ - ldrb r0, [r7]\n\ - cmp r0, 0x3\n\ - bne _081346E0\n\ - movs r1, 0x1\n\ -_081346E0:\n\ - adds r0, r1, 0\n\ -_081346E2:\n\ - add sp, 0x2C\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_081346F0: .4byte 0x000004cc\n\ -.syntax divided\n"); + return numValid == 3; } -// bool8 sub_81346F4(void) -// { -// s32 i; -// u32 j; -// u32 arr[4]; -// u16 var2 = sub_8135D3C(gSaveBlock2.battleTower.battleTowerLevelType); - -// if (sub_8134650(gSaveBlock2.battleTower.battleTowerLevelType)) -// { -// gSaveBlock2.battleTower.battleTowerTrainerId = 0xC8; -// return TRUE; -// } +bool8 sub_81346F4(void) +{ + s32 recordIndex, j; + u8 battleTowerLevelType; + u16 winStreak; + bool8 retVal; + s32 numCandidates; + u32 trainerIds[5]; + + numCandidates = 0; + battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + winStreak = sub_8135D3C(battleTowerLevelType); + if (sub_8134650(battleTowerLevelType, winStreak)) + { + gSaveBlock2.battleTower.battleTowerTrainerId = 0xC8; + retVal = TRUE; + } + else + { + for (recordIndex = 0; recordIndex < 5; recordIndex++) + { + struct BattleTowerRecord *record = &gSaveBlock2.battleTower.records[recordIndex]; + u32 recordHasData = 0; + u32 checksum = 0; + for (j = 0; j < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; j++) + { + recordHasData |= ((u32 *)record)[j]; + checksum += ((u32 *)record)[j]; + } -// for (i = 0; i < 5; i++) -// { -// u32 var_or = 0; -// u32 var_add = 0; -// for (j = 0; j < 40; j++) -// { -// var_or |= gSaveBlock2.battleTower.var_0A4[i][j]; -// var_add += gSaveBlock2.battleTower.var_0A4[i][j]; -// } + if (gSaveBlock2.battleTower.records[recordIndex].var_2 == winStreak + && gSaveBlock2.battleTower.records[recordIndex].var_0 == battleTowerLevelType + && recordHasData + && gSaveBlock2.battleTower.records[recordIndex].checksum == checksum) + { + trainerIds[numCandidates] = recordIndex; + numCandidates++; + } + } - -// } -// } + if (numCandidates == 0) + { + retVal = FALSE; + } + else + { + gSaveBlock2.battleTower.battleTowerTrainerId = trainerIds[Random() % numCandidates] + 100; + retVal = TRUE; + } + } -__attribute__((naked)) -bool8 sub_81346F4(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x18\n\ - movs r0, 0\n\ - mov r9, r0\n\ - ldr r4, _08134738 @ =gSaveBlock2\n\ - ldr r1, _0813473C @ =0x00000554\n\ - adds r0, r4, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 31\n\ - lsrs r7, r0, 31\n\ - adds r0, r7, 0\n\ - bl sub_8135D3C\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r8, r0\n\ - adds r0, r7, 0\n\ - mov r1, r8\n\ - bl sub_8134650\n\ - lsls r0, 24\n\ - adds r1, r4, 0\n\ - cmp r0, 0\n\ - beq _08134744\n\ - ldr r2, _08134740 @ =0x00000564\n\ - adds r1, r2\n\ - movs r0, 0xC8\n\ - strb r0, [r1]\n\ - b _081347DE\n\ - .align 2, 0\n\ -_08134738: .4byte gSaveBlock2\n\ -_0813473C: .4byte 0x00000554\n\ -_08134740: .4byte 0x00000564\n\ -_08134744:\n\ - movs r5, 0\n\ - movs r3, 0xA4\n\ - mov r12, r3\n\ - mov r10, sp\n\ -_0813474C:\n\ - mov r0, r12\n\ - muls r0, r5\n\ - movs r4, 0\n\ - movs r1, 0\n\ - movs r2, 0\n\ - adds r6, r5, 0x1\n\ - str r6, [sp, 0x14]\n\ - ldr r6, _081347B4 @ =gSaveBlock2 + 0x14C\n\ - adds r3, r0, r6\n\ -_0813475E:\n\ - ldm r3!, {r0}\n\ - orrs r4, r0\n\ - adds r1, r0\n\ - adds r2, 0x1\n\ - cmp r2, 0x27\n\ - bls _0813475E\n\ - mov r3, r12\n\ - muls r3, r5\n\ - ldr r0, _081347B8 @ =gSaveBlock2\n\ - adds r2, r3, r0\n\ - movs r6, 0xA7\n\ - lsls r6, 1\n\ - adds r0, r2, r6\n\ - ldrh r0, [r0]\n\ - cmp r0, r8\n\ - bne _081347A4\n\ - subs r6, 0x2\n\ - adds r0, r2, r6\n\ - ldrb r0, [r0]\n\ - cmp r0, r7\n\ - bne _081347A4\n\ - cmp r4, 0\n\ - beq _081347A4\n\ - ldr r2, _081347BC @ =gSaveBlock2 + 0x1EC\n\ - adds r0, r3, r2\n\ - ldr r0, [r0]\n\ - cmp r0, r1\n\ - bne _081347A4\n\ - mov r3, r10\n\ - adds r3, 0x4\n\ - mov r10, r3\n\ - subs r3, 0x4\n\ - stm r3!, {r5}\n\ - movs r6, 0x1\n\ - add r9, r6\n\ -_081347A4:\n\ - ldr r5, [sp, 0x14]\n\ - cmp r5, 0x4\n\ - ble _0813474C\n\ - mov r0, r9\n\ - cmp r0, 0\n\ - bne _081347C0\n\ - movs r0, 0\n\ - b _081347E0\n\ - .align 2, 0\n\ -_081347B4: .4byte gSaveBlock2 + 0x14C\n\ -_081347B8: .4byte gSaveBlock2\n\ -_081347BC: .4byte gSaveBlock2 + 0x1EC\n\ -_081347C0:\n\ - bl Random\n\ - ldr r4, _081347F0 @ =gSaveBlock2\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - mov r1, r9\n\ - bl __modsi3\n\ - lsls r0, 2\n\ - add r0, sp\n\ - ldr r0, [r0]\n\ - adds r0, 0x64\n\ - ldr r1, _081347F4 @ =0x00000564\n\ - adds r4, r1\n\ - strb r0, [r4]\n\ -_081347DE:\n\ - movs r0, 0x1\n\ -_081347E0:\n\ - add sp, 0x18\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_081347F0: .4byte gSaveBlock2\n\ -_081347F4: .4byte 0x00000564\n\ -.syntax divided\n"); + return retVal; } // void sub_81347F8(void) @@ -1816,310 +1638,104 @@ u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numT return curIndexToAppend; } -__attribute__((naked)) -void CheckMonBattleTowerBanlist() +void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - ldr r2, [sp, 0x20]\n\ - ldr r4, [sp, 0x24]\n\ - mov r9, r4\n\ - ldr r4, [sp, 0x28]\n\ - mov r10, r4\n\ - ldr r7, [sp, 0x2C]\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - lsls r1, 16\n\ - lsrs r6, r1, 16\n\ - lsls r3, 24\n\ - lsrs r3, 24\n\ - mov r12, r3\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - mov r8, r2\n\ - movs r2, 0\n\ - movs r0, 0xCE\n\ - lsls r0, 1\n\ - cmp r4, r0\n\ - beq _081352CE\n\ - cmp r4, 0\n\ - beq _081352CE\n\ - ldr r0, _081352DC @ =gBattleTowerBanlist\n\ - ldrh r1, [r0]\n\ - ldr r5, _081352E0 @ =0x0000ffff\n\ - adds r3, r0, 0\n\ - cmp r1, r5\n\ - beq _08135264\n\ - cmp r1, r4\n\ - beq _08135258\n\ - adds r1, r3, 0\n\ -_0813524A:\n\ - adds r1, 0x2\n\ - adds r2, 0x1\n\ - ldrh r0, [r1]\n\ - cmp r0, r5\n\ - beq _08135264\n\ - cmp r0, r4\n\ - bne _0813524A\n\ -_08135258:\n\ - lsls r0, r2, 1\n\ - adds r0, r3\n\ - ldrh r1, [r0]\n\ - ldr r0, _081352E0 @ =0x0000ffff\n\ - cmp r1, r0\n\ - bne _081352CE\n\ -_08135264:\n\ - mov r0, r12\n\ - cmp r0, 0\n\ - bne _08135270\n\ - mov r1, r8\n\ - cmp r1, 0x32\n\ - bhi _081352CE\n\ -_08135270:\n\ - movs r2, 0\n\ - ldrb r3, [r7]\n\ - cmp r2, r3\n\ - bge _08135290\n\ - mov r1, r9\n\ - ldrh r0, [r1]\n\ - cmp r0, r4\n\ - beq _08135290\n\ - adds r5, r3, 0\n\ -_08135282:\n\ - adds r1, 0x2\n\ - adds r2, 0x1\n\ - cmp r2, r5\n\ - bge _08135290\n\ - ldrh r0, [r1]\n\ - cmp r0, r4\n\ - bne _08135282\n\ -_08135290:\n\ - cmp r2, r3\n\ - bne _081352CE\n\ - cmp r6, 0\n\ - beq _081352BA\n\ - movs r2, 0\n\ - cmp r2, r3\n\ - bge _081352B6\n\ - mov r1, r10\n\ - ldrh r0, [r1]\n\ - cmp r0, r6\n\ - beq _081352B6\n\ - adds r5, r3, 0\n\ -_081352A8:\n\ - adds r1, 0x2\n\ - adds r2, 0x1\n\ - cmp r2, r5\n\ - bge _081352B6\n\ - ldrh r0, [r1]\n\ - cmp r0, r6\n\ - bne _081352A8\n\ -_081352B6:\n\ - cmp r2, r3\n\ - bne _081352CE\n\ -_081352BA:\n\ - lsls r0, r3, 1\n\ - add r0, r9\n\ - strh r4, [r0]\n\ - ldrb r0, [r7]\n\ - lsls r0, 1\n\ - add r0, r10\n\ - strh r6, [r0]\n\ - ldrb r0, [r7]\n\ - adds r0, 0x1\n\ - strb r0, [r7]\n\ -_081352CE:\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_081352DC: .4byte gBattleTowerBanlist\n\ -_081352E0: .4byte 0x0000ffff\n\ -.syntax divided\n"); + s32 i; + u32 counter = 0; + + if (species == SPECIES_EGG || species == SPECIES_NONE) + return; + + while (1) + { + if (gBattleTowerBanlist[counter] == 0xFFFF) + goto EXIT2; + + if (gBattleTowerBanlist[counter] == species) + break; + + counter++; + } + + if (gBattleTowerBanlist[counter] != 0xFFFF) + return; + + EXIT2: + if (battleTowerLevelType == 0 && monLevel > 50) + return; + + for (i = 0; i < *numValid && validPartySpecies[i] != species ; i++); + if (i != *numValid) + return; + + if (heldItem != 0) + { + for (i = 0; i < *numValid && validPartyHeldItems[i] != heldItem ; i++); + if (i != *numValid) + return; + } + + validPartySpecies[*numValid] = species; + validPartyHeldItems[*numValid] = heldItem; + *numValid = *numValid + 1; } -__attribute__((naked)) -void CheckPartyBattleTowerBanlist() +void CheckPartyBattleTowerBanlist(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x2C\n\ - add r1, sp, 0x28\n\ - movs r0, 0\n\ - strb r0, [r1]\n\ - movs r7, 0\n\ - mov r9, r1\n\ - add r0, sp, 0x1C\n\ - mov r10, r0\n\ -_081352FE:\n\ - movs r0, 0x64\n\ - adds r5, r7, 0\n\ - muls r5, r0\n\ - ldr r0, _081353C4 @ =gPlayerParty\n\ - adds r5, r0\n\ - adds r0, r5, 0\n\ - movs r1, 0x41\n\ - bl GetMonData\n\ - mov r8, r0\n\ - mov r1, r8\n\ - lsls r1, 16\n\ - lsrs r1, 16\n\ - mov r8, r1\n\ - adds r0, r5, 0\n\ - movs r1, 0xC\n\ - bl GetMonData\n\ - adds r6, r0, 0\n\ - lsls r6, 16\n\ - lsrs r6, 16\n\ - adds r0, r5, 0\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - adds r0, r5, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - adds r2, r0, 0\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - ldr r5, _081353C8 @ =gScriptResult\n\ - ldrb r3, [r5]\n\ - str r4, [sp]\n\ - add r0, sp, 0x10\n\ - str r0, [sp, 0x4]\n\ - mov r1, r10\n\ - str r1, [sp, 0x8]\n\ - mov r0, r9\n\ - str r0, [sp, 0xC]\n\ - mov r0, r8\n\ - adds r1, r6, 0\n\ - bl CheckMonBattleTowerBanlist\n\ - adds r7, 0x1\n\ - cmp r7, 0x5\n\ - ble _081352FE\n\ - mov r1, r9\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x2\n\ - bhi _08135420\n\ - ldr r1, _081353CC @ =gStringVar1\n\ - movs r0, 0xFF\n\ - strb r0, [r1]\n\ - ldr r1, _081353D0 @ =gSpecialVar_0x8004\n\ - movs r0, 0x1\n\ - strh r0, [r1]\n\ - movs r0, 0\n\ - mov r1, r9\n\ - strb r0, [r1]\n\ - bl CountBattleTowerBanlistCaught\n\ - adds r6, r0, 0\n\ - ldr r2, _081353D4 @ =gBattleTowerBanlist\n\ - ldrh r0, [r2]\n\ - ldr r1, _081353D8 @ =0x0000ffff\n\ - cmp r0, r1\n\ - beq _081353A8\n\ - mov r5, r9\n\ - adds r7, r1, 0\n\ - adds r4, r2, 0\n\ -_08135394:\n\ - ldrh r0, [r4]\n\ - ldrb r1, [r5]\n\ - adds r2, r6, 0\n\ - bl AppendBattleTowerBannedSpeciesName\n\ - strb r0, [r5]\n\ - adds r4, 0x2\n\ - ldrh r0, [r4]\n\ - cmp r0, r7\n\ - bne _08135394\n\ -_081353A8:\n\ - mov r0, r9\n\ - ldrb r1, [r0]\n\ - cmp r1, 0\n\ - bne _081353E4\n\ - ldr r4, _081353CC @ =gStringVar1\n\ - ldr r1, _081353DC @ =gUnknown_08400E2C\n\ - adds r0, r4, 0\n\ - bl StringAppend\n\ - ldr r1, _081353E0 @ =gUnknown_08400E32\n\ - adds r0, r4, 0\n\ - bl StringAppend\n\ - b _0813543E\n\ - .align 2, 0\n\ -_081353C4: .4byte gPlayerParty\n\ -_081353C8: .4byte gScriptResult\n\ -_081353CC: .4byte gStringVar1\n\ -_081353D0: .4byte gSpecialVar_0x8004\n\ -_081353D4: .4byte gBattleTowerBanlist\n\ -_081353D8: .4byte 0x0000ffff\n\ -_081353DC: .4byte gUnknown_08400E2C\n\ -_081353E0: .4byte gUnknown_08400E32\n\ -_081353E4:\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _08135400\n\ - ldr r0, _081353F8 @ =gStringVar1\n\ - ldr r1, _081353FC @ =gUnknown_08400E2E\n\ - bl StringAppend\n\ - b _08135408\n\ - .align 2, 0\n\ -_081353F8: .4byte gStringVar1\n\ -_081353FC: .4byte gUnknown_08400E2E\n\ -_08135400:\n\ - ldr r0, _08135414 @ =gStringVar1\n\ - ldr r1, _08135418 @ =gUnknown_08400E2C\n\ - bl StringAppend\n\ -_08135408:\n\ - ldr r0, _08135414 @ =gStringVar1\n\ - ldr r1, _0813541C @ =gUnknown_08400E36\n\ - bl StringAppend\n\ - b _0813543E\n\ - .align 2, 0\n\ -_08135414: .4byte gStringVar1\n\ -_08135418: .4byte gUnknown_08400E2C\n\ -_0813541C: .4byte gUnknown_08400E36\n\ -_08135420:\n\ - ldr r1, _08135450 @ =gSpecialVar_0x8004\n\ - movs r0, 0\n\ - strh r0, [r1]\n\ - ldr r2, _08135454 @ =gSaveBlock2\n\ - ldrb r0, [r5]\n\ - ldr r1, _08135458 @ =0x00000554\n\ - adds r2, r1\n\ - movs r1, 0x1\n\ - ands r1, r0\n\ - ldrb r3, [r2]\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - ands r0, r3\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ -_0813543E:\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\ - .align 2, 0\n\ -_08135450: .4byte gSpecialVar_0x8004\n\ -_08135454: .4byte gSaveBlock2\n\ -_08135458: .4byte 0x00000554\n\ -.syntax divided\n"); + s32 i; + u16 species2; + u16 heldItem; + u8 level; + u16 hp; + u32 numBanlistCaught; + u16 validPartySpecies[6]; + u16 validPartyHeldItems[6]; + u8 counter; + + counter = 0; + + for (i = 0; i < PARTY_SIZE; i++) + { + species2 = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + + CheckMonBattleTowerBanlist(species2, heldItem, hp, gScriptResult, level, validPartySpecies, validPartyHeldItems, &counter); + } + + if (counter < 3) + { + gStringVar1[0] = 0xFF; + gSpecialVar_0x8004 = 1; + counter = 0; + + numBanlistCaught = CountBattleTowerBanlistCaught(); + + for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++) + { + counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBanlist[i], counter, numBanlistCaught); + } + + if (counter == 0) + { + StringAppend(gStringVar1, gUnknown_08400E2C); + StringAppend(gStringVar1, gUnknown_08400E32); + return; + } + + if (1 & counter) + StringAppend(gStringVar1, gUnknown_08400E2E); + else + StringAppend(gStringVar1, gUnknown_08400E2C); + + StringAppend(gStringVar1, gUnknown_08400E36); + } + else + { + gSpecialVar_0x8004 = 0; + gSaveBlock2.battleTower.battleTowerLevelType = gScriptResult; + } } void sub_813545C(u16 *easyChat) @@ -2642,11 +2258,11 @@ void sub_8135D84(void) if (saveBlock->battleTower.curStreakChallengesCompleted[battleTowerLevelType] - 1 > 5) { - prizeItem = LongStreakPrizes[Random() % 9]; + prizeItem = LongStreakPrizes[Random() % ARRAY_COUNT(LongStreakPrizes)]; } else { - prizeItem = ShortStreakPrizes[Random() % 6]; + prizeItem = ShortStreakPrizes[Random() % ARRAY_COUNT(ShortStreakPrizes)]; } saveBlock->battleTower.prizeItem = prizeItem; -- cgit v1.2.3 From 87c0040c1adca9b41a779a89a1aaedc63849f0df Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 31 Oct 2017 23:38:46 -0700 Subject: Decompile FillBattleTowerTrainerParty() --- src/battle_tower.c | 696 ++++++++++++++++++++--------------------------------- 1 file changed, 255 insertions(+), 441 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index d1c62d21e..5a335ddfa 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -816,91 +816,96 @@ void sub_8134AB4() sub_81349FC(200); } -// void sub_8134AC0(struct BattleTowerRecord *record) -// { -// u16 var1[5]; -// u16 var2[5]; -// s32 i, j, k; -// s16 l = 0; - -// for (i = 0; i < 5; i++) -// { -// k = 0; -// for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].var_C[i] != record->var_C[j]; j++); -// if (j == 4) -// { -// for (k = 0; k < 7 && gSaveBlock2.battleTower.records[i].var_8 == record->var_8; k++) -// { -// if (record->var_8 == 0xFF) -// { -// k = 7; -// break; -// } -// } -// } +#ifdef NONMATCHING +void sub_8134AC0(struct BattleTowerRecord *record) +{ + u16 var1[6]; + u16 var2[6]; + s32 i, j, k; + s16 l = 0; -// if (k == 7) -// { -// break; -// } -// } + for (i = 0; i < 5; i++) + { + k = 0; + for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].trainerId[j] == record->trainerId[j]; j++); + if (j == 4) + { + for (; k < 7 && gSaveBlock2.battleTower.records[i].name[4] == record->name[4]; k++) + { + if (record->name[4] == 0xFF) + { + k = 7; + break; + } + } + } -// if (i < 5) -// { -// gSaveBlock2.battleTower.records[i] = *record; -// return; -// } + if (k == 7) + { + break; + } + } -// i = 0; -// while (i < 5) -// { -// if (gSaveBlock2.battleTower.records[i].var_2 == 0) -// { -// if (i > 4) -// { -// break; -// } + if (i < 5) + { + gSaveBlock2.battleTower.records[i] = *record; + return; + } -// gSaveBlock2.battleTower.records[i] = *record; -// return; -// } + i = 0; + while (i < 5) + { + if (gSaveBlock2.battleTower.records[i].var_2 == 0) + { + if (i > 4) + { + break; + } -// i++; -// } + gSaveBlock2.battleTower.records[i] = *record; + return; + } -// var1[0] = gSaveBlock2.battleTower.records[0].var_2; -// var2[0] = 0; -// l++; + i++; + } -// for (i = 1; i < 5; i++) -// { -// for (j = 0; gSaveBlock2.battleTower.records[i].var_2 <= var1[0] && j < l; j++) -// { -// if (gSaveBlock2.battleTower.records[i].var_2 < var1[0]) -// { -// j = 0; -// l = 1; -// var1[0] = gSaveBlock2.battleTower.records[i].var_2; -// var2[0] = i; -// break; -// } -// } + var1[0] = gSaveBlock2.battleTower.records[0].var_2; + var2[0] = 0; + l++; -// if (j == l) -// { -// var1[l] = gSaveBlock2.battleTower.records[i].var_2; -// var2[l] = i; -// l++; -// } -// } + for (i = 1; i < 5; i++) + { + j = 0; + if (j < l) + { + for (; gSaveBlock2.battleTower.records[i].var_2 <= var1[j]; j++) + { + if (gSaveBlock2.battleTower.records[i].var_2 < var1[j]) + { + j = 0; + l = 1; + var1[0] = gSaveBlock2.battleTower.records[i].var_2; + var2[0] = i; + break; + } + } + } -// gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; -// } + if (j == l) + { + var1[l] = gSaveBlock2.battleTower.records[i].var_2; + var2[l] = i; + l++; + } + } + gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; +} +#else __attribute__((naked)) void sub_8134AC0(struct BattleTowerRecord *record) { - asm(".syntax unified\n\ + asm(".syntax unified\n\ push {r4-r7,lr}\n\ mov r7, r10\n\ mov r6, r9\n\ @@ -1047,7 +1052,7 @@ _08134BC6:\n\ adds r0, r5, 0x1\n\ mov r12, r0\n\ cmp r3, r7\n\ - bge _08134C0A\n\ + bge _08134C0A @ j < l\n\ movs r1, 0xA4\n\ adds r0, r5, 0\n\ muls r0, r1\n\ @@ -1130,8 +1135,9 @@ _08134C5E:\n\ bx r0\n\ .align 2, 0\n\ _08134C70: .4byte gSaveBlock2\n\ -.syntax divided\n"); + .syntax divided\n"); } +#endif // NONMATCHING u8 get_trainer_class_pic_index(void) { @@ -1194,373 +1200,181 @@ void get_trainer_name(u8* dest) dest[i] = 0xFF; } -__attribute__((naked)) -void sub_8134DD4(void) +void FillBattleTowerTrainerParty(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x28\n\ - movs r0, 0\n\ - str r0, [sp, 0x18]\n\ - movs r1, 0x3C\n\ - str r1, [sp, 0x1C]\n\ - add r4, sp, 0xC\n\ - movs r0, 0xFF\n\ - strb r0, [r4]\n\ - bl ZeroEnemyPartyMons\n\ - ldr r1, _08134E04 @ =gSaveBlock2\n\ - ldr r2, _08134E08 @ =0x00000564\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x13\n\ - bhi _08134E0C\n\ - movs r3, 0x6\n\ - str r3, [sp, 0x14]\n\ - b _08134ED8\n\ - .align 2, 0\n\ -_08134E04: .4byte gSaveBlock2\n\ -_08134E08: .4byte 0x00000564\n\ -_08134E0C:\n\ - cmp r0, 0x1D\n\ - bhi _08134E1A\n\ - movs r0, 0x9\n\ - str r0, [sp, 0x14]\n\ - movs r1, 0x1E\n\ - str r1, [sp, 0x18]\n\ - b _08134ED8\n\ -_08134E1A:\n\ - cmp r0, 0x27\n\ - bhi _08134E28\n\ - movs r2, 0xC\n\ - str r2, [sp, 0x14]\n\ - movs r3, 0x3C\n\ - str r3, [sp, 0x18]\n\ - b _08134ED8\n\ -_08134E28:\n\ - cmp r0, 0x31\n\ - bhi _08134E36\n\ - movs r0, 0xF\n\ - str r0, [sp, 0x14]\n\ - movs r1, 0x5A\n\ - str r1, [sp, 0x18]\n\ - b _08134ED8\n\ -_08134E36:\n\ - cmp r0, 0x3B\n\ - bhi _08134E44\n\ - movs r2, 0x12\n\ - str r2, [sp, 0x14]\n\ - movs r3, 0x78\n\ - str r3, [sp, 0x18]\n\ - b _08134ED8\n\ -_08134E44:\n\ - cmp r0, 0x45\n\ - bhi _08134E52\n\ - movs r0, 0x15\n\ - str r0, [sp, 0x14]\n\ - movs r1, 0x96\n\ - str r1, [sp, 0x18]\n\ - b _08134ED8\n\ -_08134E52:\n\ - cmp r0, 0x4F\n\ - bhi _08134E60\n\ - movs r2, 0x1F\n\ - str r2, [sp, 0x14]\n\ - movs r3, 0xB4\n\ - str r3, [sp, 0x18]\n\ - b _08134ED8\n\ -_08134E60:\n\ - cmp r0, 0x63\n\ - bhi _08134E72\n\ - movs r0, 0x1F\n\ - str r0, [sp, 0x14]\n\ - movs r1, 0xC8\n\ - str r1, [sp, 0x18]\n\ - movs r2, 0x64\n\ - str r2, [sp, 0x1C]\n\ - b _08134ED8\n\ -_08134E72:\n\ - cmp r0, 0xC8\n\ - bne _08134E9C\n\ - movs r6, 0\n\ -_08134E78:\n\ - movs r0, 0x64\n\ - muls r0, r6\n\ - ldr r1, _08134E94 @ =gEnemyParty\n\ - adds r0, r1\n\ - movs r1, 0x2C\n\ - muls r1, r6\n\ - ldr r2, _08134E98 @ =gSaveBlock2 + 0x4CC\n\ - adds r1, r2\n\ - bl sub_803ADE8\n\ - adds r6, 0x1\n\ - cmp r6, 0x2\n\ - ble _08134E78\n\ - b _08135082\n\ - .align 2, 0\n\ -_08134E94: .4byte gEnemyParty\n\ -_08134E98: .4byte gSaveBlock2 + 0x4CC\n\ -_08134E9C:\n\ - movs r6, 0\n\ - adds r4, r1, 0\n\ - ldr r3, _08134ECC @ =0xffffc158\n\ - adds r5, r4, r3\n\ -_08134EA4:\n\ - movs r0, 0x64\n\ - muls r0, r6\n\ - ldr r1, _08134ED0 @ =gEnemyParty\n\ - adds r0, r1\n\ - ldr r2, _08134ED4 @ =0x00000564\n\ - adds r1, r4, r2\n\ - ldrb r2, [r1]\n\ - movs r1, 0xA4\n\ - muls r1, r2\n\ - adds r1, r5\n\ - movs r2, 0x2C\n\ - muls r2, r6\n\ - adds r1, r2\n\ - bl sub_803ADE8\n\ - adds r6, 0x1\n\ - cmp r6, 0x2\n\ - ble _08134EA4\n\ - b _08135082\n\ - .align 2, 0\n\ -_08134ECC: .4byte 0xffffc158\n\ -_08134ED0: .4byte gEnemyParty\n\ -_08134ED4: .4byte 0x00000564\n\ -_08134ED8:\n\ - ldr r2, _08134EF4 @ =gSaveBlock2\n\ - ldr r3, _08134EF8 @ =0x00000554\n\ - adds r0, r2, r3\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - adds r1, r2, 0\n\ - cmp r0, 0\n\ - beq _08134F00\n\ - ldr r0, _08134EFC @ =gBattleTowerLevel100Mons\n\ - mov r10, r0\n\ - movs r2, 0x64\n\ - str r2, [sp, 0x10]\n\ - b _08134F08\n\ - .align 2, 0\n\ -_08134EF4: .4byte gSaveBlock2\n\ -_08134EF8: .4byte 0x00000554\n\ -_08134EFC: .4byte gBattleTowerLevel100Mons\n\ -_08134F00:\n\ - ldr r3, _08134F54 @ =gBattleTowerLevel50Mons\n\ - mov r10, r3\n\ - movs r0, 0x32\n\ - str r0, [sp, 0x10]\n\ -_08134F08:\n\ - ldr r2, _08134F58 @ =gBattleTowerTrainers\n\ - ldr r3, _08134F5C @ =0x00000564\n\ - adds r0, r1, r3\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 3\n\ - adds r0, r2\n\ - ldrb r0, [r0, 0x9]\n\ - str r0, [sp, 0x20]\n\ - movs r6, 0\n\ -_08134F1E:\n\ - bl Random\n\ - movs r1, 0xFF\n\ - ands r1, r0\n\ - ldr r2, [sp, 0x1C]\n\ - adds r0, r1, 0\n\ - muls r0, r2\n\ - asrs r0, 8\n\ - ldr r3, [sp, 0x18]\n\ - adds r7, r0, r3\n\ - ldr r0, [sp, 0x20]\n\ - cmp r0, 0\n\ - beq _08134F48\n\ - lsls r0, r7, 4\n\ - add r0, r10\n\ - ldrb r0, [r0, 0x3]\n\ - ldr r1, [sp, 0x20]\n\ - ands r0, r1\n\ - cmp r0, r1\n\ - beq _08134F48\n\ - b _0813507C\n\ -_08134F48:\n\ - movs r5, 0\n\ - lsls r0, r7, 4\n\ - mov r2, r10\n\ - adds r3, r0, r2\n\ - movs r4, 0\n\ - b _08134F64\n\ - .align 2, 0\n\ -_08134F54: .4byte gBattleTowerLevel50Mons\n\ -_08134F58: .4byte gBattleTowerTrainers\n\ -_08134F5C: .4byte 0x00000564\n\ -_08134F60:\n\ - adds r4, 0x64\n\ - adds r5, 0x1\n\ -_08134F64:\n\ - cmp r5, r6\n\ - bge _08134F7E\n\ - ldr r1, _08135094 @ =gEnemyParty\n\ - adds r0, r4, r1\n\ - movs r1, 0xB\n\ - movs r2, 0\n\ - str r3, [sp, 0x24]\n\ - bl GetMonData\n\ - ldr r3, [sp, 0x24]\n\ - ldrh r2, [r3]\n\ - cmp r0, r2\n\ - bne _08134F60\n\ -_08134F7E:\n\ - cmp r5, r6\n\ - bne _0813507C\n\ - movs r5, 0\n\ - cmp r5, r6\n\ - bge _08134FCC\n\ - ldr r3, _08135098 @ =gBattleTowerHeldItems\n\ - mov r9, r3\n\ - lsls r0, r7, 4\n\ - add r0, r10\n\ - mov r8, r0\n\ - movs r3, 0\n\ -_08134F94:\n\ - ldr r0, _08135094 @ =gEnemyParty\n\ - adds r4, r3, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xC\n\ - movs r2, 0\n\ - str r3, [sp, 0x24]\n\ - bl GetMonData\n\ - ldr r3, [sp, 0x24]\n\ - cmp r0, 0\n\ - beq _08134FC4\n\ - adds r0, r4, 0\n\ - movs r1, 0xC\n\ - movs r2, 0\n\ - bl GetMonData\n\ - mov r2, r8\n\ - ldrb r1, [r2, 0x2]\n\ - lsls r1, 1\n\ - add r1, r9\n\ - ldr r3, [sp, 0x24]\n\ - ldrh r1, [r1]\n\ - cmp r0, r1\n\ - beq _08134FCC\n\ -_08134FC4:\n\ - adds r3, 0x64\n\ - adds r5, 0x1\n\ - cmp r5, r6\n\ - blt _08134F94\n\ -_08134FCC:\n\ - cmp r5, r6\n\ - bne _0813507C\n\ - movs r5, 0\n\ - cmp r5, r6\n\ - bge _08134FEE\n\ - add r0, sp, 0x4\n\ - ldrh r0, [r0]\n\ - cmp r0, r7\n\ - beq _08134FEE\n\ - add r1, sp, 0x4\n\ -_08134FE0:\n\ - adds r1, 0x2\n\ - adds r5, 0x1\n\ - cmp r5, r6\n\ - bge _08134FEE\n\ - ldrh r0, [r1]\n\ - cmp r0, r7\n\ - bne _08134FE0\n\ -_08134FEE:\n\ - cmp r5, r6\n\ - bne _0813507C\n\ - lsls r0, r6, 1\n\ - add r0, sp\n\ - adds r0, 0x4\n\ - strh r7, [r0]\n\ - movs r3, 0x64\n\ - adds r0, r6, 0\n\ - muls r0, r3\n\ - ldr r1, _08135094 @ =gEnemyParty\n\ - adds r0, r1\n\ - lsls r4, r7, 4\n\ - mov r3, r10\n\ - adds r2, r4, r3\n\ - ldrh r1, [r2]\n\ - ldrb r2, [r2, 0xC]\n\ - str r2, [sp]\n\ - ldr r2, [sp, 0x10]\n\ - ldr r3, [sp, 0x14]\n\ - bl CreateMonWithEVSpread\n\ - movs r5, 0\n\ - adds r0, r6, 0x1\n\ - mov r9, r0\n\ - mov r8, r4\n\ - movs r0, 0x64\n\ - adds r7, r6, 0\n\ - muls r7, r0\n\ - mov r0, r10\n\ - adds r0, 0x4\n\ - adds r4, r0\n\ - ldr r3, _08135094 @ =gEnemyParty\n\ -_0813502E:\n\ - ldrh r1, [r4]\n\ - lsls r2, r5, 24\n\ - lsrs r2, 24\n\ - adds r0, r7, r3\n\ - str r3, [sp, 0x24]\n\ - bl SetMonMoveSlot\n\ - ldrh r0, [r4]\n\ - ldr r3, [sp, 0x24]\n\ - cmp r0, 0xDA\n\ - bne _0813504A\n\ - movs r0, 0\n\ - mov r1, sp\n\ - strb r0, [r1, 0xC]\n\ -_0813504A:\n\ - adds r4, 0x2\n\ - adds r5, 0x1\n\ - cmp r5, 0x3\n\ - ble _0813502E\n\ - movs r2, 0x64\n\ - adds r4, r6, 0\n\ - muls r4, r2\n\ - ldr r3, _08135094 @ =gEnemyParty\n\ - adds r4, r3\n\ - adds r0, r4, 0\n\ - movs r1, 0x20\n\ - add r2, sp, 0xC\n\ - bl SetMonData\n\ - mov r0, r8\n\ - add r0, r10\n\ - ldrb r2, [r0, 0x2]\n\ - lsls r2, 1\n\ - ldr r0, _08135098 @ =gBattleTowerHeldItems\n\ - adds r2, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xC\n\ - bl SetMonData\n\ - mov r6, r9\n\ -_0813507C:\n\ - cmp r6, 0x3\n\ - beq _08135082\n\ - b _08134F1E\n\ -_08135082:\n\ - add sp, 0x28\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08135094: .4byte gEnemyParty\n\ -_08135098: .4byte gBattleTowerHeldItems\n\ -.syntax divided\n"); + s32 partyIndex, i; + u16 chosenMonIndices[3]; + u8 friendship; + u8 level; + u8 fixedIV; + u8 battleMonsOffset; + u8 monPoolSize; + u8 teamFlags; + const struct BattleTowerPokemon *battleTowerMons; + + battleMonsOffset = 0; + monPoolSize = 60; + friendship = 255; + + ZeroEnemyPartyMons(); + + // Different trainers have access to different sets of pokemon to use in battle. + // The pokemon later in gBattleTowerLevel100Mons or gBattleTowerLevel50Mons are + // stronger. Additionally, the later trainers' pokemon are granted higher IVs. + if (gSaveBlock2.battleTower.battleTowerTrainerId < 20) + { + fixedIV = 6; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 30) + { + fixedIV = 9; + battleMonsOffset = 30; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 40) + { + fixedIV = 12; + battleMonsOffset = 60; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 50) + { + fixedIV = 15; + battleMonsOffset = 90; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 60) + { + fixedIV = 18; + battleMonsOffset = 120; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 70) + { + fixedIV = 21; + battleMonsOffset = 150; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 80) + { + fixedIV = 31; + battleMonsOffset = 180; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) + { + fixedIV = 31; + battleMonsOffset = 200; + monPoolSize = 100; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + { + // Load E-Reader trainer's party. + for (partyIndex = 0; partyIndex < 3; partyIndex++) + { + sub_803ADE8(&gEnemyParty[partyIndex], &gSaveBlock2.battleTower.ereaderTrainer.party[partyIndex]); + } + + return; + } + else + { + // Load a battle tower record's party. (From record mixing) + for (partyIndex = 0; partyIndex < 3; partyIndex++) + { + sub_803ADE8( + &gEnemyParty[partyIndex], + &gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].party[partyIndex]); + } + + return; + } + + // Use the appropriate list of pokemon and level depending on the + // current challenge type. (level 50 or level 100 challenge) + if (gSaveBlock2.battleTower.battleTowerLevelType != 0) + { + battleTowerMons = gBattleTowerLevel100Mons; + level = 100; + } + else + { + battleTowerMons = gBattleTowerLevel50Mons; + level = 50; + } + + teamFlags = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].teamFlags; + + // Attempt to fill the trainer's party with random Pokemon until 3 have been + // successfully chosen. The trainer's party may not have duplicate pokemon species + // or duplicate held items. Each pokemon must have all of the trainer's team flags + // set, as well. If any of those conditions are not met, then the loop starts over + // and another pokemon is chosen at random. + partyIndex = 0; + while (partyIndex != 3) + { + // Pick a random pokemon index based on the number of pokemon available to choose from + // and the starting offset in the battle tower pokemon array. + s32 battleMonIndex = ((Random() & 0xFF) * monPoolSize) / 256 + battleMonsOffset; + + // Ensure the chosen pokemon has compatible team flags with the trainer. + if (teamFlags == 0 || (battleTowerMons[battleMonIndex].teamFlags & teamFlags) == teamFlags) + { + // Ensure this pokemon species isn't a duplicate. + for (i = 0; i < partyIndex; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL) == battleTowerMons[battleMonIndex].species) + break; + } + + if (i != partyIndex) + continue; + + // Ensure this pokemon's held item isn't a duplicate. + for (i = 0; i < partyIndex; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != 0 + && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == gBattleTowerHeldItems[battleTowerMons[battleMonIndex].item]) + { + break; + } + } + + if (i != partyIndex) + continue; + + // Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary + // because the species and held items were already checked directly above. Perhaps this + // is leftover code before the logic for duplicate species and held items was added. + for (i = 0; i < partyIndex && chosenMonIndices[i] != battleMonIndex; i++); + + if (i != partyIndex) + continue; + + chosenMonIndices[partyIndex] = battleMonIndex; + + // Place the chosen pokemon into the trainer's party. + CreateMonWithEVSpread( + &gEnemyParty[partyIndex], + battleTowerMons[battleMonIndex].species, + level, + fixedIV, + battleTowerMons[battleMonIndex].evSpread); + + // Give the chosen pokemon its specified moves. + for (i = 0; i < 4; i++) + { + SetMonMoveSlot(&gEnemyParty[partyIndex], battleTowerMons[battleMonIndex].moves[i], i); + if (battleTowerMons[battleMonIndex].moves[i] == MOVE_FRUSTRATION) + { + // MOVE_FRUSTRATION is more powerful the lower the pokemon's friendship is. + friendship = 0; + } + } + + SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship); + SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, (u8 *)&gBattleTowerHeldItems[battleTowerMons[battleMonIndex].item]); + + // The pokemon was successfully added to the trainer's party, so it's safe to move on to + // the next party slot. + partyIndex++; + } + } + } u32 CountBattleTowerBanlistCaught() @@ -1805,7 +1619,7 @@ void sub_813556C(void) gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); gTrainerBattleOpponent = 0; - sub_8134DD4(); + FillBattleTowerTrainerParty(); CreateTask(sub_8135534, 1); current_map_music_set__default_for_battle(0); -- cgit v1.2.3 From fea6c54f45a22493768d57c16fb9b916cfdeadde Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 1 Nov 2017 21:33:03 -0700 Subject: Decompile Debug_FillEReaderTrainerWithPlayerData --- src/battle_tower.c | 160 +++++++++++++++++------------------------------------ 1 file changed, 51 insertions(+), 109 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 5a335ddfa..5a1b241df 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -270,7 +270,7 @@ extern void sub_8135A3C(void); extern void sub_8135CFC(void); extern void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); -//static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); +static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); static void ClearBattleTowerRecord(struct BattleTowerRecord *); @@ -1805,6 +1805,7 @@ void sub_8135A3C(void) { u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; u16 winStreak = sub_8135D3C(battleTowerLevelType); + if (gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] < winStreak) { gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] = winStreak; @@ -1812,26 +1813,28 @@ void sub_8135A3C(void) if (gSaveBlock2.battleTower.recordWinStreaks[0] > gSaveBlock2.battleTower.recordWinStreaks[1]) { - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.recordWinStreaks[0]); - if (gSaveBlock2.battleTower.recordWinStreaks[0] > 9999) + u16 streak = gSaveBlock2.battleTower.recordWinStreaks[0]; + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + if (streak > 9999) { gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; } else { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = gSaveBlock2.battleTower.recordWinStreaks[0]; + gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; } } else { - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.recordWinStreaks[1]); - if (gSaveBlock2.battleTower.recordWinStreaks[1] > 9999) + u16 streak = gSaveBlock2.battleTower.recordWinStreaks[1]; + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + if (streak > 9999) { gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; } else { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = gSaveBlock2.battleTower.recordWinStreaks[1]; + gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; } } } @@ -1917,7 +1920,7 @@ void sub_8135AC4(void) struct BattleTowerRecord *playerRecord = &gSaveBlock2.battleTower.playerRecord; u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - if (gSaveBlock2.playerGender != 0) + if (gSaveBlock2.playerGender != MALE) { trainerClass = gUnknown_08405E7E[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; @@ -2189,108 +2192,47 @@ void sub_8135E50() } } -__attribute__((naked)) -void unref_sub_8135EE8() +// This is a leftover debugging function that is used to populate the E-Reader +// trainer with the player's current data. +void Debug_FillEReaderTrainerWithPlayerData(void) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - ldr r7, _08135F0C @ =gSaveBlock2 + 0x498\n\ - ldr r0, _08135F10 @ =0xfffffb68\n\ - adds r2, r7, r0\n\ - ldrb r0, [r2, 0x8]\n\ - cmp r0, 0\n\ - beq _08135F18\n\ - ldr r4, _08135F14 @ =gUnknown_08405E7E\n\ - ldrb r0, [r2, 0xA]\n\ - ldrb r1, [r2, 0xB]\n\ - adds r0, r1\n\ - ldrb r1, [r2, 0xC]\n\ - adds r0, r1\n\ - ldrb r1, [r2, 0xD]\n\ - adds r0, r1\n\ - movs r1, 0x14\n\ - b _08135F2A\n\ - .align 2, 0\n\ -_08135F0C: .4byte gSaveBlock2 + 0x498\n\ -_08135F10: .4byte 0xfffffb68\n\ -_08135F14: .4byte gUnknown_08405E7E\n\ -_08135F18:\n\ - ldr r4, _08135FA8 @ =gUnknown_08405E60\n\ - ldrb r0, [r2, 0xA]\n\ - ldrb r1, [r2, 0xB]\n\ - adds r0, r1\n\ - ldrb r1, [r2, 0xC]\n\ - adds r0, r1\n\ - ldrb r1, [r2, 0xD]\n\ - adds r0, r1\n\ - movs r1, 0x1E\n\ -_08135F2A:\n\ - bl __umodsi3\n\ - adds r0, r4\n\ - ldrb r0, [r0]\n\ - strb r0, [r7, 0x1]\n\ - adds r0, r7, 0\n\ - adds r0, 0xC\n\ - ldr r4, _08135FAC @ =gSaveBlock2 + 0xA\n\ - adds r1, r4, 0\n\ - bl copy_word_to_mem\n\ - adds r0, r7, 0x4\n\ - subs r4, 0xA\n\ - adds r1, r4, 0\n\ - bl StringCopy8\n\ - movs r0, 0x1\n\ - strh r0, [r7, 0x2]\n\ - movs r5, 0x7\n\ - movs r4, 0\n\ - ldr r0, _08135FB0 @ =gSaveBlock1\n\ - ldr r1, _08135FB4 @ =0x00002b28\n\ - adds r6, r0, r1\n\ - adds r3, r7, 0\n\ - adds r3, 0x10\n\ - adds r2, r7, 0\n\ - adds r2, 0x28\n\ - adds r1, r7, 0\n\ - adds r1, 0x1C\n\ -_08135F64:\n\ - ldrh r0, [r6]\n\ - strh r0, [r3]\n\ - strh r5, [r1]\n\ - adds r0, r5, 0x6\n\ - strh r0, [r2]\n\ - adds r5, 0x1\n\ - adds r6, 0x2\n\ - adds r3, 0x2\n\ - adds r2, 0x2\n\ - adds r1, 0x2\n\ - adds r4, 0x1\n\ - cmp r4, 0x5\n\ - ble _08135F64\n\ - movs r4, 0\n\ -_08135F80:\n\ - movs r0, 0x64\n\ - muls r0, r4\n\ - ldr r1, _08135FB8 @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0x2C\n\ - muls r1, r4\n\ - adds r1, 0x34\n\ - adds r1, r7, r1\n\ - bl sub_803AF78\n\ - adds r4, 0x1\n\ - cmp r4, 0x2\n\ - ble _08135F80\n\ - adds r0, r7, 0\n\ - bl SetEReaderTrainerChecksum\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08135FA8: .4byte gUnknown_08405E60\n\ -_08135FAC: .4byte gSaveBlock2 + 0xA\n\ -_08135FB0: .4byte gSaveBlock1\n\ -_08135FB4: .4byte 0x00002b28\n\ -_08135FB8: .4byte gPlayerParty\n\ -.syntax divided\n"); + struct BattleTowerEReaderTrainer *ereaderTrainer; + s32 i; + s32 j; + + ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; + + if (gSaveBlock2.playerGender != MALE) + { + ereaderTrainer->trainerClass = gUnknown_08405E7E[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; + } + else + { + ereaderTrainer->trainerClass = gUnknown_08405E60[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; + } + + copy_word_to_mem(ereaderTrainer->trainerId, gSaveBlock2.playerTrainerId); + StringCopy8(ereaderTrainer->name, gSaveBlock2.playerName); + + ereaderTrainer->var_2 = 1; + + j = 7; + for (i = 0; i < 6; i++) + { + ereaderTrainer->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; + ereaderTrainer->farewellPlayerLost.easyChat[i] = j; + ereaderTrainer->farewellPlayerWon.easyChat[i] = j + 6; + j++; + } + + for (i = 0; i < 3; i++) + { + sub_803AF78(&gPlayerParty[i], &ereaderTrainer->party[i]); + } + + SetEReaderTrainerChecksum(ereaderTrainer); } u8 sub_8135FBC(void) -- cgit v1.2.3 From c2f014a9238e500eaddc17b27352a03488ba82dd Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 1 Nov 2017 21:50:04 -0700 Subject: Move german battle tower trainers into src/data/battle_tower --- src/battle_tower.c | 4 + src/data/battle_tower/trainers_de.h | 1503 +++++++++++++++++++++++++++++++++++ 2 files changed, 1507 insertions(+) create mode 100644 src/data/battle_tower/trainers_de.h (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 5a1b241df..a577e1402 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -25,7 +25,11 @@ #include "tv.h" #include "vars.h" +#if ENGLISH #include "data/battle_tower/trainers.h" +#elif GERMAN +#include "data/battle_tower/trainers_de.h" +#endif const u16 gBattleTowerHeldItems[] = { ITEM_NONE, diff --git a/src/data/battle_tower/trainers_de.h b/src/data/battle_tower/trainers_de.h new file mode 100644 index 000000000..86182da9d --- /dev/null +++ b/src/data/battle_tower/trainers_de.h @@ -0,0 +1,1503 @@ +const struct BattleTowerTrainer gBattleTowerTrainers[] = +{ + { + .trainerClass = TRAINER_CLASS_YOUNGSTER, + .name = _("ALWIN"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_READY, + EC_WORD_QUES, + EC_WORD_HERE_I_COME, + EC_WORD_EXCL, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BIRD_KEEPER, + .name = _("DIRK"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_OH_KAY, + EC_WORD_I_AM, + EC_WORD_READY, + EC_WORD_EXCL, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_LADY, + .name = _("SIBILLE"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_THAT, + EC_WORD_BECOMES, + EC_WORD_A, + EC_WORD_CHILD_S_PLAY, + EC_WORD_GO, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BLACK_BELT, + .name = _("OLAF"), + .teamFlags = 0x05, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_GHOST, + EC_WORD_IS, + EC_WORD_FULL, + EC_WORD_TOUGHNESS, + EC_WORD_SNORT, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_NINJA_BOY, + .name = _("JOST"), + .teamFlags = 0x05, + .greeting = { + .easyChat = { + EC_WORD_GO, + EC_WORD_WHO_WAS, + EC_WORD_POKEMON, + EC_WORD_FIGHT, + EC_WORD_FIGHT, + EC_WORD_FIGHT, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, + .name = _("TINA"), + .teamFlags = 0x0A, + .greeting = { + .easyChat = { + EC_WORD_STUDY, + EC_WORD_IS, + EC_WORD_BORING, + EC_WORD_LET_S, + EC_WORD_BETTER, + EC_WORD_FIGHT, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .name = _("HAJO"), + .teamFlags = 0x41, + .greeting = { + .easyChat = { + EC_WORD_TOUGHNESS, + EC_WORD_AND, + EC_MOVE2(TRANSFORM), + EC_WORD_WILL, + EC_WORD_BABE, + EC_WORD_FAINT, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_FISHERMAN, + .name = _("GEORG"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_IT, + EC_WORD_GOES, + EC_WORD_NOTHING, + EC_WORD_OVER, + EC_WORD_FISHING, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_TUBER_F, + .name = _("ANNE"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_POKEMON, + EC_WORD_MUST_BE, + EC_WORD_MAN, + EC_WORD_SIMPLE, + EC_WORD_ADORE, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_F, + .name = _("JULIA"), + .teamFlags = 0x42, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_CUTE, + EC_WORD_I_AM, + EC_WORD_QUITE, + EC_WORD_AN, + EC_WORD_LADY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_GENTLEMAN, + .name = _("JOHANN"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_THE, + EC_WORD_DAY, + EC_WORD_IS, + EC_WORD_PERFECT, + EC_WORD_FOR, + EC_WORD_BATTLE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_CAMPER, + .name = _("KARL"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_NOW, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_MY, + EC_WORD_FRIEND, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, + .name = _("KENDRA"), + .teamFlags = 0x0A, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_SMART, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_AND, + EC_WORD_YOU, + EC_WORD_QUES, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_HIKER, + .name = _("DAVID"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_WAHAHAHA, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_TODAY, + EC_WORD_IS, + EC_MOVE2(PAY_DAY), + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .name = _("KEA"), + .teamFlags = 0x0A, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_TOUGH, + EC_WORD_OR, + EC_WORD_QUES, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_M, + .name = _("JULIAN"), + .teamFlags = 0x05, + .greeting = { + .easyChat = { + EC_WORD_FUFUFU, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_DON_T, + EC_WORD_WINS, + EC_WORD_KID, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_LASS, + .name = _("JOSI"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_BE, + EC_WORD_KIND, + EC_WORD_TO, + EC_WORD_GIRL, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_GUITARIST, + .name = _("LEIF"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_GREAT, + EC_WORD_YOU_RE, + EC_WORD_RATHER, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_OKAY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_RICH_BOY, + .name = _("INGO"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_HAVE, + EC_WORD_ROUGH_SKIN, + EC_WORD_NATURAL_CURE, + EC_WORD_IS, + EC_WORD_ALL_RIGHT, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_CATCHER, + .name = _("LUDWIG"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_IF_I_WIN, + EC_WORD_IS, + EC_WORD_THAT, + EC_WORD_EXCITING, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_PICNICKER, + .name = _("RAJA"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_WITH, + EC_WORD_POKEMON, + EC_WORD_TO, + EC_WORD_WALKING, + EC_WORD_IS, + EC_WORD_GREAT, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_COLLECTOR, + .name = _("HARALD"), + .teamFlags = 0x09, + .greeting = { + .easyChat = { + EC_WORD_HERE_GOES, + EC_WORD_MY, + EC_WORD_HUGE_POWER, + 0xFFFF, + EC_WORD_POKEMON, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_TUBER_M, + .name = _("KIM"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_A, + EC_WORD_GENIUS, + EC_WORD_WE, + EC_WORD_WILL, + EC_WORD_WINS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_KINDLER, + .name = _("ERWIN"), + .teamFlags = 0x05, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_FIRE, + EC_WORD_IS, + EC_WORD_VERY, + EC_WORD_HOT, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_F, + .name = _("EIKA"), + .teamFlags = 0x0A, + .greeting = { + .easyChat = { + EC_WORD_FIGHTING, + EC_MOVE(ASTONISH), + EC_WORD_AND, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_F, + .name = _("ANNINA"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_SORRY, + EC_WORD_YOURS, + EC_WORD_POKEMON, + EC_WORD_WILL, + EC_WORD_DON_T, + EC_WORD_WINS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, + .name = _("RUTH"), + .teamFlags = 0x06, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_TOUGH, + EC_WORD_WHO_WAS, + EC_WORD_POKEMON, + EC_WORD_TOO, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMANIAC, + .name = _("JENS"), + .teamFlags = 0x40, + .greeting = { + .easyChat = { + EC_WORD_WHO_WAS, + EC_WORD_POKEMON, + EC_WORD_THOSE, + EC_WORD_COOL, + EC_WORD_YOURS, + EC_WORD_LOSE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SAILOR, + .name = _("TITUS"), + .teamFlags = 0x09, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_FOE, + EC_WORD_IS, + EC_WORD_FINALLY, + EC_WORD_HERE, + EC_WORD_EXCELLENT, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, + .name = _("NICOLA"), + .teamFlags = 0x06, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_VORACIOUS, + EC_MOVE2(POUND), + EC_WORD_AND, + EC_MOVE2(BELLY_DRUM), + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_HEX_MANIAC, + .name = _("PAULA"), + .teamFlags = 0x42, + .greeting = { + .easyChat = { + EC_WORD_IS_IT_QUES, + EC_WORD_THOSE_ARE, + EC_WORD_UGLY, + EC_MOVE(SPITE), + EC_WORD_TO, + EC_WORD_TAKE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .name = _("SÖREN"), + .teamFlags = 0x41, + .greeting = { + .easyChat = { + EC_WORD_ADVENTURE, + EC_WORD_AND, + EC_WORD_BATTLE, + EC_WORD_THOSE, + EC_WORD_WHO_WAS, + EC_WORD_LIKES, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .name = _("RAINER"), + .teamFlags = 0x09, + .greeting = { + .easyChat = { + EC_WORD_WE, + EC_WORD_CAN, + EC_WORD_VERSUS, + EC_WORD_CHILDREN, + EC_WORD_DON_T, + EC_WORD_LOSE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SCHOOL_KID_M, + .name = _("FABIAN"), + .teamFlags = 0x08, + .greeting = { + .easyChat = { + EC_WORD_DAILY, + EC_WORD_POKEMON, + EC_WORD_IN, + EC_WORD_THE, + EC_WORD_SCHOOL, + EC_WORD_AWESOME, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, + .name = _("ELLEN"), + .teamFlags = 0x04, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_ALL_RIGHT, + EC_WORD_TO, + EC_WORD_POKEMON, + EC_WORD_QUES, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_M, + .name = _("ARNIE"), + .teamFlags = 0x09, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_FIGHTING, + EC_WORD_IS, + EC_WORD_PERFECTION, + EC_WORD_YOUR, + EC_WORD_USELESS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, + .name = _("HARDI"), + .teamFlags = 0x09, + .greeting = { + .easyChat = { + EC_WORD_BOY, + EC_WORD_I_AM, + EC_WORD_MAYBE, + EC_WORD_TIRED, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BEAUTY, + .name = _("LINA"), + .teamFlags = 0x06, + .greeting = { + .easyChat = { + EC_WORD_A, + EC_WORD_TRAINER, + EC_WORD_HOW_DO, + EC_WORD_YOU, + EC_WORD_IS, + EC_WORD_EXCITING, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_AROMA_LADY, + .name = _("SELINA"), + .teamFlags = 0x06, + .greeting = { + .easyChat = { + EC_WORD_YOU_VE, + EC_WORD_STENCH, + EC_WORD_OR, + EC_MOVE(SWEET_SCENT), + EC_WORD_QUES, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_COLLECTOR, + .name = _("DANTE"), + .teamFlags = 0x81, + .greeting = { + .easyChat = { + EC_WORD_YOURS, + EC_WORD_POKEMON, + EC_WORD_I, + EC_WORD_WANTS, + EC_WORD_SHE, + EC_WORD_EXCL_EXCL, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + .name = _("KATJA"), + .teamFlags = 0x04, + .greeting = { + .easyChat = { + EC_WORD_TODAY, + EC_WORD_WANTS, + EC_WORD_I, + EC_WORD_MY, + EC_WORD_BEST, + EC_WORD_GIVE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, + .name = _("HORST"), + .teamFlags = 0x0C, + .greeting = { + .easyChat = { + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_WAAAH, + EC_WORD_EHEHE, + EC_MOVE(FAKE_TEARS), + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_M, + .name = _("GERRIT"), + .teamFlags = 0x80, + .greeting = { + .easyChat = { + EC_WORD_MY, + EC_WORD_ANIME, + EC_WORD_SONG, + EC_WORD_IS, + EC_WORD_DON_T, + EC_WORD_LOUSY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, + .name = _("NIKO"), + .teamFlags = 0x04, + .greeting = { + .easyChat = { + EC_WORD_BATTLE, + EC_WORD_DON_T, + EC_WORD_JUST, + EC_WORD_DO, + EC_WORD_SOMETHING, + EC_WORD_ELSE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, + .name = _("BALDO"), + .teamFlags = 0x41, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_BUSY, + EC_WORD_HAS, + EC_WORD_THAT, + EC_WORD_TIME, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_PARASOL_LADY, + .name = _("ALMA"), + .teamFlags = 0x08, + .greeting = { + .easyChat = { + EC_WORD_THAT, + EC_MOVE(MORNING_SUN), + EC_WORD_HAS, + EC_WORD_SO, + EC_WORD_A_LOT, + EC_MOVE(COSMIC_POWER), + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_CAMPER, + .name = _("ADAM"), + .teamFlags = 0x0C, + .greeting = { + .easyChat = { + EC_WORD_EXCITING, + EC_WORD_BATTLE, + EC_WORD_THOSE, + EC_WORD_GREAT, + EC_WORD_YEEHAW_EXCL, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SCHOOL_KID_F, + .name = _("GRETE"), + .teamFlags = 0x42, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_WANTS, + EC_WORD_SOMETHING, + EC_MOVE(GROWTH), + EC_WORD_WORKS, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BEAUTY, + .name = _("NAOMI"), + .teamFlags = 0x04, + .greeting = { + .easyChat = { + EC_WORD_IT, + EC_WORD_WAS, + EC_WORD_GREAT, + EC_WORD_YOUNG, + EC_WORD_TO, + EC_WORD_HIS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_NINJA_BOY, + .name = _("KENO"), + .teamFlags = 0x0C, + .greeting = { + .easyChat = { + EC_WORD_PLEASE, + EC_WORD_BE, + EC_WORD_DON_T, + EC_WORD_SO, + EC_WORD_MEAN, + EC_WORD_TO_ME, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_M, + .name = _("REMUS"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_WAKES_UP, + EC_MOVE2(HIDDEN_POWER), + EC_WORD_AND, + EC_MOVE(ASTONISH), + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_F, + .name = _("EDITH"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_THE, + EC_WORD_BATTLE_TOWER, + EC_WORD_IS, + EC_WORD_SO, + EC_WORD_ENTERTAINING, + EC_WORD_AWESOME, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUIN_MANIAC, + .name = _("ANTON"), + .teamFlags = 0x41, + .greeting = { + .easyChat = { + EC_WORD_THICK_FAT, + EC_WORD_AND, + EC_WORD_CHLOROPHYLL, + EC_WORD_BLEND, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_TASTY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_M, + .name = _("MALTE"), + .teamFlags = 0x81, + .greeting = { + .easyChat = { + EC_WORD_AN, + EC_MOVE(SCARY_FACE), + EC_WORD_IS, + EC_WORD_DON_T, + EC_WORD_QUITE, + EC_WORD_TERRIBLE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_HEX_MANIAC, + .name = _("RAOUL"), + .teamFlags = 0x42, + .greeting = { + .easyChat = { + EC_WORD_RUN_AWAY, + EC_WORD_GIVE_ME, + EC_WORD_SON, + EC_WORD_BEST, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_M, + .name = _("RICK"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_WATER, + EC_WORD_IS, + EC_WORD_TASTY, + EC_WORD_HIP_AND, + EC_WORD_REFRESHING, + EC_WORD_YES_SIR_EXCL, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_M, + .name = _("DENNIS"), + .teamFlags = 0x80, + .greeting = { + .easyChat = { + EC_WORD_GO, + EC_WORD_WHO_WAS, + EC_WORD_POKEMON, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_F, + .name = _("GLORIA"), + .teamFlags = 0x82, + .greeting = { + .easyChat = { + EC_WORD_THE, + EC_WORD_FIGHTING, + EC_WORD_MUST_BE, + EC_WORD_HOT, + EC_WORD_HIS, + EC_WORD_FIERY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_GUITARIST, + .name = _("NINO"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_MUSIC, + EC_WORD_IS, + EC_WORD_MY, + EC_WORD_EVERY, + EC_WORD_MY, + EC_WORD_DESTINY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_KINDLER, + .name = _("FIETE"), + .teamFlags = 0x41, + .greeting = { + .easyChat = { + EC_WORD_IT_S, + EC_WORD_ALL_RIGHT, + EC_WORD_VERY, + EC_WORD_ALL_RIGHT, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_AROMA_LADY, + .name = _("AMANDA"), + .teamFlags = 0x82, + .greeting = { + .easyChat = { + EC_WORD_WHAT, + EC_WORD_FOR, + EC_WORD_A, + EC_WORD_TRAINER, + EC_WORD_ARE, + EC_WORD_YOU, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .name = _("MAREK"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_WE_VE, + EC_WORD_UNTIL, + EC_WORD_NOW, + EC_WORD_TOTALLY, + EC_WORD_NEVER, + EC_WORD_LOST, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_DRAGON_TAMER, + .name = _("NATHAN"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_DRAGON, + 0xFFFF, + EC_WORD_POKEMON, + EC_WORD_THOSE, + EC_WORD_FANTASTIC, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_LASS, + .name = _("MIRIAM"), + .teamFlags = 0x82, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_QUITE, + EC_WORD_TOO_STRONG, + EC_WORD_AM, + EC_WORD_BAD, + EC_WORD_NEWS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMANIAC, + .name = _("THEO"), + .teamFlags = 0x40, + .greeting = { + .easyChat = { + EC_WORD_PLUSH_DOLL, + EC_WORD_MUST_BE, + EC_WORD_MAN, + EC_WORD_SIMPLE, + EC_WORD_ADORE, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + .name = _("PIA"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_HERE_I_COME, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_CUTE, + EC_WORD_A, + EC_WORD_CHANNEL, + EC_WORD_IDOL, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEFAN_F, + .name = _("ALISSA"), + .teamFlags = 0x20, + .greeting = { + .easyChat = { + EC_WORD_YOURS, + EC_WORD_POKEMON, + EC_WORD_THOSE, + EC_WORD_PREPOSTEROUS, + EC_WORD_I_AM, + EC_WORD_SHOCKED, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_GENTLEMAN, + .name = _("ARTUR"), + .teamFlags = 0x20, + .greeting = { + .easyChat = { + EC_WORD_PLEASE, + EC_WORD_ALL, + EC_WORD_BATTLE, + EC_WORD_WEREN_T, + EC_WORD_GREAT, + EC_WORD_HIS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMER_F, + .name = _("MAJA"), + .teamFlags = 0x82, + .greeting = { + .easyChat = { + EC_WORD_I_AM, + EC_WORD_PRETTY, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_DON_T, + EC_WORD_WINS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, + .name = _("MARIUS"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_BATTLE, + EC_WORD_DAILY, + EC_WORD_I, + EC_WORD_WON_T, + EC_WORD_LOSE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BIRD_KEEPER, + .name = _("OLIVER"), + .teamFlags = 0x11, + .greeting = { + .easyChat = { + EC_WORD_GIGGLE, + EC_WORD_GIGGLE, + EC_WORD_SNORT, + EC_WORD_HAPPILY, + EC_WORD_GIGGLE, + EC_WORD_MUFUFU, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_CYCLING_TRIATHLETE_F, + .name = _("MOLLY"), + .teamFlags = 0x12, + .greeting = { + .easyChat = { + EC_WORD_IS, + EC_WORD_TODAY, + EC_WORD_MONDAY, + EC_WORD_QUES, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .name = _("JÖRG"), + .teamFlags = 0x40, + .greeting = { + .easyChat = { + EC_WORD_WATER, + 0xFFFF, + EC_WORD_AND, + EC_WORD_BUG, + 0xFFFF, + EC_WORD_POKEMON, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .name = _("ANKE"), + .teamFlags = 0x20, + .greeting = { + .easyChat = { + EC_WORD_WHAT, + EC_WORD_IS, + EC_WORD_PRESSURE, + EC_WORD_STATIC, + EC_WORD_IS, + EC_WORD_SUPER, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_FISHERMAN, + .name = _("HANS"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_KID, + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_DON_T, + EC_WORD_WINS, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SAILOR, + .name = _("PETER"), + .teamFlags = 0x20, + .greeting = { + .easyChat = { + EC_WORD_IT_S, + EC_WORD_QUITE, + EC_WORD_TERRIBLE, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_MODE, + EC_WORD_I, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_F, + .name = _("MARA"), + .teamFlags = 0x20, + .greeting = { + .easyChat = { + EC_WORD_YOU_RE, + EC_WORD_VERY, + EC_WORD_ALL_RIGHT, + EC_WORD_TRAINS, + EC_WORD_OR, + EC_WORD_QUES, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BUG_MANIAC, + .name = _("DARIUS"), + .teamFlags = 0x11, + .greeting = { + .easyChat = { + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_TOUGH, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_SCARY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_F, + .name = _("REGINA"), + .teamFlags = 0x12, + .greeting = { + .easyChat = { + EC_WORD_TODAY, + EC_WORD_WIN, + EC_WORD_I, + EC_WORD_MAYBE, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_PARASOL_LADY, + .name = _("MAIKE"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_SO, + EC_WORD_AN, + EC_MOVE(SCARY_FACE), + EC_WORD_IS, + EC_WORD_NOT_VERY, + EC_WORD_KIND, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_RUNNING_TRIATHLETE_F, + .name = _("SANDRA"), + .teamFlags = 0x04, + .greeting = { + .easyChat = { + EC_WORD_SPORTS, + EC_WORD_IS, + EC_WORD_HEALTHY, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_SPIRALING, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_RANGER_M, + .name = _("ARNOLD"), + .teamFlags = 0x08, + .greeting = { + .easyChat = { + EC_WORD_AWESOME, + EC_WORD_WHO_WAS, + EC_WORD_POKEMON, + EC_WORD_THOSE, + EC_WORD_ROCK_SOLID, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BLACK_BELT, + .name = _("XENO"), + .teamFlags = 0x04, + .greeting = { + .easyChat = { + EC_WORD_HOO_HAH, + EC_WORD_ARE, + EC_WORD_YOU, + EC_WORD_READY, + EC_WORD_FOR, + EC_WORD_SHADY, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, + .name = _("KARLA"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_YOU, + EC_WORD_CAN_T, + EC_WORD_ME, + EC_WORD_NEVER, + EC_WORD_SMITE, + EC_WORD_KID, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_COLLECTOR, + .name = _("VOLKER"), + .teamFlags = 0x80, + .greeting = { + .easyChat = { + EC_WORD_FROM, + EC_WORD_PLACE, + EC_WORD_TO, + EC_WORD_PLACE, + EC_WORD_POKEMON, + EC_WORD_WOWEE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + .name = _("TOBIAS"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_THAT, + EC_WORD_ISN_T, + EC_WORD_SPORTS, + EC_WORD_IT_S, + EC_WORD_A, + EC_WORD_FIGHTING, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_GENTLEMAN, + .name = _("NORBERT"), + .teamFlags = 0x20, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_MUST_BE, + EC_WORD_WINS, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_PLEASE, + EC_WORD_PLEASE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BATTLE_GIRL, + .name = _("ZITA"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_THAT, + EC_WORD_IS, + EC_WORD_SCARY, + EC_WORD_PLEASE, + EC_WORD_BE, + EC_WORD_NICE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_BEAUTY, + .name = _("ELKE"), + .teamFlags = 0x20, + .greeting = { + .easyChat = { + EC_WORD_WITHOUT, + EC_MOVE(FLAIL), + EC_WORD_NONE, + EC_MOVE(WITHDRAW), + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_HIKER, + .name = _("VITUS"), + .teamFlags = 0x04, + .greeting = { + .easyChat = { + EC_WORD_YAHOO, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + EC_WORD_LISTENS, + EC_WORD_HER, + EC_WORD_TO, + EC_WORD_QUES, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_M, + .name = _("MALTE"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_LEARN, + EC_WORD_CORRECT, + EC_WORD_TO, + EC_WORD_FIGHT, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_POKEMON_BREEDER_M, + .name = _("TIM"), + .teamFlags = 0x40, + .greeting = { + .easyChat = { + EC_WORD_IT_S, + EC_WORD_A, + EC_WORD_FIGHTING, + EC_WORD_NONE, + EC_WORD_CHILD_S_PLAY, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_GUITARIST, + .name = _("GAVIN"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_SHADY, + EC_WORD_BABY, + EC_WORD_BABY, + EC_WORD_BABY, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_PSYCHIC_M, + .name = _("RALF"), + .teamFlags = 0x08, + .greeting = { + .easyChat = { + EC_WORD_STICKY_HOLD, + EC_WORD_THOSE, + EC_WORD_IMPORTANT, + EC_WORD_ISN_T_IT_QUES, + 0xFFFF, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_F, + .name = _("JENNY"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_I, + EC_WORD_SEARCH, + EC_WORD_TRAINER, + EC_WORD_ABSOLUTELY, + EC_WORD_TOUGH, + EC_WORD_THOSE, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_M, + .name = _("JOEL"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_BELIEVE, + EC_WORD_ON, + EC_WORD_YOURS, + EC_WORD_POKEMON, + EC_WORD_AND, + EC_WORD_WIN, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_DRAGON_TAMER, + .name = _("KOLJA"), + .teamFlags = 0x0C, + .greeting = { + .easyChat = { + EC_WORD_GIRL, + EC_WORD_WITH, + EC_MOVE2(FORESIGHT), + EC_WORD_THOSE, + EC_WORD_NICE, + 0xFFFF, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_COOL_TRAINER_M, + .name = _("BILL"), + .teamFlags = 0x01, + .greeting = { + .easyChat = { + EC_WORD_WHO_WAS, + EC_WORD_POWER, + EC_WORD_IS, + EC_WORD_OVERWHELMING, + EC_WORD_DISAPPEAR, + EC_WORD_BETTER, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_EXPERT_F, + .name = _("CALLA"), + .teamFlags = 0x10, + .greeting = { + .easyChat = { + EC_WORD_TRAINER, + EC_WORD_YOU, + EC_WORD_ARE, + EC_WORD_SEEMS, + EC_WORD_CAPABLE, + EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, + }, + }, + }, + { + .trainerClass = TRAINER_CLASS_LADY, + .name = _("GESA"), + .teamFlags = 0x02, + .greeting = { + .easyChat = { + EC_WORD_COME_ON, + EC_WORD_ABSOLUTELY, + EC_WORD_TIME, + EC_WORD_BECOMES, + EC_WORD_EXCELLENT, + 0xFFFF, + }, + }, + }, +}; -- cgit v1.2.3 From 979f8be280dfdabbfb166b25c10e0be03e06bcc2 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 1 Nov 2017 22:15:37 -0700 Subject: Decompile german functions in battle_tower --- src/battle_tower.c | 216 +++++++++++++++++++++-------------------------------- 1 file changed, 87 insertions(+), 129 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index a577e1402..ce928e33f 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -820,92 +820,90 @@ void sub_8134AB4() sub_81349FC(200); } -#ifdef NONMATCHING -void sub_8134AC0(struct BattleTowerRecord *record) -{ - u16 var1[6]; - u16 var2[6]; - s32 i, j, k; - s16 l = 0; +// void sub_8134AC0(struct BattleTowerRecord *record) +// { +// u16 var1[6]; +// u16 var2[6]; +// s32 i, j, k; +// s16 l = 0; - for (i = 0; i < 5; i++) - { - k = 0; - for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].trainerId[j] == record->trainerId[j]; j++); - if (j == 4) - { - for (; k < 7 && gSaveBlock2.battleTower.records[i].name[4] == record->name[4]; k++) - { - if (record->name[4] == 0xFF) - { - k = 7; - break; - } - } - } +// for (i = 0; i < 5; i++) +// { +// k = 0; +// for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].trainerId[j] == record->trainerId[j]; j++); +// if (j == 4) +// { +// for (; k < 7 && gSaveBlock2.battleTower.records[i].name[4] == record->name[4]; k++) +// { +// if (record->name[4] == 0xFF) +// { +// k = 7; +// break; +// } +// } +// } - if (k == 7) - { - break; - } - } +// if (k == 7) +// { +// break; +// } +// } - if (i < 5) - { - gSaveBlock2.battleTower.records[i] = *record; - return; - } +// if (i < 5) +// { +// gSaveBlock2.battleTower.records[i] = *record; +// return; +// } - i = 0; - while (i < 5) - { - if (gSaveBlock2.battleTower.records[i].var_2 == 0) - { - if (i > 4) - { - break; - } +// i = 0; +// while (i < 5) +// { +// if (gSaveBlock2.battleTower.records[i].var_2 == 0) +// { +// if (i > 4) +// { +// break; +// } - gSaveBlock2.battleTower.records[i] = *record; - return; - } +// gSaveBlock2.battleTower.records[i] = *record; +// return; +// } - i++; - } +// i++; +// } - var1[0] = gSaveBlock2.battleTower.records[0].var_2; - var2[0] = 0; - l++; +// var1[0] = gSaveBlock2.battleTower.records[0].var_2; +// var2[0] = 0; +// l++; - for (i = 1; i < 5; i++) - { - j = 0; - if (j < l) - { - for (; gSaveBlock2.battleTower.records[i].var_2 <= var1[j]; j++) - { - if (gSaveBlock2.battleTower.records[i].var_2 < var1[j]) - { - j = 0; - l = 1; - var1[0] = gSaveBlock2.battleTower.records[i].var_2; - var2[0] = i; - break; - } - } - } +// for (i = 1; i < 5; i++) +// { +// j = 0; +// if (j < l) +// { +// for (; gSaveBlock2.battleTower.records[i].var_2 <= var1[j]; j++) +// { +// if (gSaveBlock2.battleTower.records[i].var_2 < var1[j]) +// { +// j = 0; +// l = 1; +// var1[0] = gSaveBlock2.battleTower.records[i].var_2; +// var2[0] = i; +// break; +// } +// } +// } - if (j == l) - { - var1[l] = gSaveBlock2.battleTower.records[i].var_2; - var2[l] = i; - l++; - } - } +// if (j == l) +// { +// var1[l] = gSaveBlock2.battleTower.records[i].var_2; +// var2[l] = i; +// l++; +// } +// } - gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; -} -#else +// gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; +// } __attribute__((naked)) void sub_8134AC0(struct BattleTowerRecord *record) { @@ -1141,7 +1139,6 @@ _08134C5E:\n\ _08134C70: .4byte gSaveBlock2\n\ .syntax divided\n"); } -#endif // NONMATCHING u8 get_trainer_class_pic_index(void) { @@ -2351,63 +2348,24 @@ void sub_813610C(void) } #if GERMAN -__attribute__((naked)) u8 de_sub_81364AC(void) { - asm(".syntax unified\n\ - push {lr}\n\ - ldr r2, _DE_081364C0 @ =gSaveBlock2\n\ - ldr r0, _DE_081364C4 @ =0x00000564\n\ - adds r1, r2, r0\n\ - ldrb r0, [r1]\n\ - cmp r0, 0xC8\n\ - bne _DE_081364CC\n\ - ldr r1, _DE_081364C8 @ =0x00000499\n\ - adds r0, r2, r1\n\ - b _DE_081364F2\n\ - .align 2, 0\n\ -_DE_081364C0: .4byte gSaveBlock2\n\ -_DE_081364C4: .4byte 0x00000564\n\ -_DE_081364C8: .4byte 0x00000499\n\ -_DE_081364CC:\n\ - cmp r0, 0x63\n\ - bhi _DE_081364E4\n\ - ldr r2, _DE_081364E0 @ =gBattleTowerTrainers\n\ - ldrb r1, [r1]\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 3\n\ - adds r0, r2\n\ - b _DE_081364F2\n\ - .align 2, 0\n\ -_DE_081364E0: .4byte gBattleTowerTrainers\n\ -_DE_081364E4:\n\ - ldrb r0, [r1]\n\ - subs r0, 0x64\n\ - movs r1, 0xA4\n\ - muls r0, r1\n\ - adds r0, r2\n\ - adds r1, 0xA9\n\ - adds r0, r1\n\ -_DE_081364F2:\n\ - ldrb r0, [r0]\n\ - pop {r1}\n\ - bx r1\n\ -.syntax divided\n"); + if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + { + return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId >= 100) + { + return gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].trainerClass; + } + else + { + return gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass; + } } -__attribute__((naked)) u8 de_sub_81364F8(void) { - asm(".syntax unified\n\ - ldr r0, _DE_08136504 @ =gSaveBlock2\n\ - ldr r1, _DE_08136508 @ =0x00000499\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - bx lr\n\ - .align 2, 0\n\ -_DE_08136504: .4byte gSaveBlock2\n\ -_DE_08136508: .4byte 0x00000499\n\ -.syntax divided\n"); + return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; } #endif -- cgit v1.2.3 From c5cda9f16442780794852af54635f6526c4c031a Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 1 Nov 2017 23:52:26 -0700 Subject: Use descriptive variable and function names for battle_tower code --- src/battle/battle_controller_opponent.c | 4 +- src/battle/battle_message.c | 4 +- src/battle_tower.c | 391 ++++++++++----------- src/data/battle_tower/level_100_mons.h | 600 ++++++++++++++++---------------- src/data/battle_tower/level_50_mons.h | 600 ++++++++++++++++---------------- src/de_rom_8040FE0.c | 4 +- src/debug/unknown_debug_menu.c | 8 +- src/engine/mystery_event_script.c | 2 +- src/field/choose_party.c | 6 +- src/field/field_specials.c | 2 +- src/field/tv.c | 3 +- 11 files changed, 813 insertions(+), 811 deletions(-) (limited to 'src') diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index b6ada3b7b..09b6bf812 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -1222,7 +1222,7 @@ void OpponentHandleTrainerThrow(void) else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) trainerPicIndex = get_trainer_class_pic_index(); else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) - trainerPicIndex = sub_8135FBC(); + trainerPicIndex = GetEReaderTrainerPicIndex(); else trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic; @@ -1252,7 +1252,7 @@ void OpponentHandleTrainerSlide(void) else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) trainerPicIndex = get_trainer_class_pic_index(); else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) - trainerPicIndex = sub_8135FBC(); + trainerPicIndex = GetEReaderTrainerPicIndex(); else trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic; diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index 9df153e0a..79855a614 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -632,7 +632,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) toCpy = gTrainerClassNames[get_trainer_class_name_index()]; else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) - toCpy = gTrainerClassNames[sub_8135FD8()]; + toCpy = gTrainerClassNames[GetEReaderTrainerClassNameIndex()]; else toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent].trainerClass]; break; @@ -661,7 +661,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) } else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) { - sub_8135FF4(text); + SetEReaderTrainerName(text); toCpy = text; } else diff --git a/src/battle_tower.c b/src/battle_tower.c index ce928e33f..91e223216 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -31,7 +31,7 @@ #include "data/battle_tower/trainers_de.h" #endif -const u16 gBattleTowerHeldItems[] = { +static const u16 sBattleTowerHeldItems[] = { ITEM_NONE, ITEM_KINGS_ROCK, ITEM_SITRUS_BERRY, @@ -100,63 +100,63 @@ const u16 gBattleTowerHeldItems[] = { #include "data/battle_tower/level_50_mons.h" #include "data/battle_tower/level_100_mons.h" -const u8 gUnknown_08405E60[] = { - 4, - 7, - 8, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 23, - 29, - 32, - 34, - 36, - 38, - 39, - 41, - 43, - 45, - 46, - 47, - 53, - 56, - 64, - 66, - 72, - 73, +static const u8 sMaleTrainerClasses[] = { + TRAINER_CLASS_RUIN_MANIAC, + TRAINER_CLASS_TUBER_M, + TRAINER_CLASS_COOL_TRAINER_M, + TRAINER_CLASS_RICH_BOY, + TRAINER_CLASS_POKEMANIAC, + TRAINER_CLASS_SWIMMER_M, + TRAINER_CLASS_BLACK_BELT, + TRAINER_CLASS_GUITARIST, + TRAINER_CLASS_KINDLER, + TRAINER_CLASS_CAMPER, + TRAINER_CLASS_BUG_MANIAC, + TRAINER_CLASS_PSYCHIC_M, + TRAINER_CLASS_GENTLEMAN, + TRAINER_CLASS_SCHOOL_KID_M, + TRAINER_CLASS_POKEFAN_M, + TRAINER_CLASS_EXPERT_M, + TRAINER_CLASS_YOUNGSTER, + TRAINER_CLASS_FISHERMAN, + TRAINER_CLASS_CYCLING_TRIATHLETE_M, + TRAINER_CLASS_RUNNING_TRIATHLETE_M, + TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + TRAINER_CLASS_DRAGON_TAMER, + TRAINER_CLASS_BIRD_KEEPER, + TRAINER_CLASS_NINJA_BOY, + TRAINER_CLASS_SAILOR, + TRAINER_CLASS_COLLECTOR, + TRAINER_CLASS_POKEMON_BREEDER_M, + TRAINER_CLASS_POKEMON_RANGER_M, + TRAINER_CLASS_BUG_CATCHER, + TRAINER_CLASS_HIKER, }; -const u8 gUnknown_08405E7E[] = { - 3, - 6, - 9, - 10, - 11, - 12, - 22, - 30, - 33, - 35, - 40, - 42, - 44, - 48, - 49, - 50, - 51, - 65, - 67, - 71, +static const u8 sFemaleTrainerClasses[] = { + TRAINER_CLASS_AROMA_LADY, + TRAINER_CLASS_TUBER_F, + TRAINER_CLASS_COOL_TRAINER_F, + TRAINER_CLASS_HEX_MANIAC, + TRAINER_CLASS_LADY, + TRAINER_CLASS_BEAUTY, + TRAINER_CLASS_PSYCHIC_F, + TRAINER_CLASS_SCHOOL_KID_F, + TRAINER_CLASS_POKEFAN_F, + TRAINER_CLASS_EXPERT_F, + TRAINER_CLASS_CYCLING_TRIATHLETE_F, + TRAINER_CLASS_RUNNING_TRIATHLETE_F, + TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + TRAINER_CLASS_BATTLE_GIRL, + TRAINER_CLASS_PARASOL_LADY, + TRAINER_CLASS_SWIMMER_F, + TRAINER_CLASS_PICNICKER, + TRAINER_CLASS_POKEMON_BREEDER_F, + TRAINER_CLASS_POKEMON_RANGER_F, + TRAINER_CLASS_LASS, }; -const u8 gUnknown_08405E92[] = { +static const u8 sMaleTrainerGfxIds[] = { MAP_OBJ_GFX_HIKER, MAP_OBJ_GFX_TUBER_M, MAP_OBJ_GFX_MAN_4, @@ -189,7 +189,7 @@ const u8 gUnknown_08405E92[] = { MAP_OBJ_GFX_HIKER, }; -const u8 gUnknown_08405EB0[] = { +static const u8 sFemaleTrainerGfxIds[] = { MAP_OBJ_GFX_WOMAN_3, MAP_OBJ_GFX_TUBER_F, MAP_OBJ_GFX_WOMAN_7, @@ -212,7 +212,7 @@ const u8 gUnknown_08405EB0[] = { MAP_OBJ_GFX_LASS, }; -const u16 gBattleTowerBanlist[] = { +const u16 gBattleTowerBannedSpecies[] = { SPECIES_MEW, SPECIES_MEWTWO, SPECIES_HO_OH, @@ -227,7 +227,7 @@ const u16 gBattleTowerBanlist[] = { }; // Item prizes for battle tower streaks of 5 or fewer sets. -const u16 ShortStreakPrizes[] = { +/*static*/ const u16 sShortStreakPrizes[] = { ITEM_HP_UP, ITEM_PROTEIN, ITEM_IRON, @@ -237,7 +237,7 @@ const u16 ShortStreakPrizes[] = { }; // Item prizes for battle tower streaks of greater than 5 sets. -const u16 LongStreakPrizes[] = { +/*static*/ const u16 sLongStreakPrizes[] = { ITEM_BRIGHT_POWDER, ITEM_WHITE_HERB, ITEM_QUICK_CLAW, @@ -249,35 +249,35 @@ const u16 LongStreakPrizes[] = { ITEM_CHOICE_BAND, }; +static void ResetBattleTowerStreak(u8 levelType); +static void ValidateBattleTowerRecordChecksums(void); +static void PrintEReaderTrainerFarewellMessage(void); +extern void SetBattleTowerTrainerGfxId(u8); +extern void sub_8135A3C(void); +static void sub_8135CFC(void); +static void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); +static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); +static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); +static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); +static void ClearBattleTowerRecord(struct BattleTowerRecord *); + +extern const u8 gUnknown_08400E23[]; +extern const u8 gUnknown_08400E29[]; extern const u8 gUnknown_08400E2C[]; +extern const u8 gUnknown_08400E2E[]; +extern const u8 gUnknown_08400E30[]; extern const u8 gUnknown_08400E32[]; extern const u8 gUnknown_08400E36[]; -extern void sub_81360D0(void); extern u16 gSpecialVar_0x8004; -extern u8 gUnknown_08400E23[]; -extern u8 gUnknown_08400E29[]; -extern u8 gUnknown_08400E2E[]; -extern u8 gUnknown_08400E30[]; - extern u8 gTrainerClassToPicIndex[]; extern u8 gTrainerClassToNameIndex[]; extern u16 gTrainerBattleOpponent; extern u16 gBattleTypeFlags; extern u8 gSelectedOrderFromParty[]; -extern struct Pokemon gUnknown_030042FC[]; extern u8 gBattleOutcome; +extern struct Pokemon gUnknown_030042FC[]; extern struct BattlePokemon gBattleMons[]; -extern void ValidateBattleTowerRecordChecksums(void); -extern void sub_81349FC(u8); -extern void sub_8135A3C(void); -extern void sub_8135CFC(void); -extern void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); -static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); -static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); -static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); -static void ClearBattleTowerRecord(struct BattleTowerRecord *); - #define ewram160FB (ewram[0x160FB]) @@ -292,14 +292,14 @@ void sub_8134548(void) { case 0: default: - sub_813461C(levelType); + ResetBattleTowerStreak(levelType); if (!var1) { VarSet(VAR_0x4000, 5); } break; case 1: - sub_813461C(levelType); + ResetBattleTowerStreak(levelType); VarSet(VAR_0x4000, 1); var1++; break; @@ -330,14 +330,15 @@ void sub_8134548(void) ValidateBattleTowerRecordChecksums(); } -void sub_813461C(u8 levelType) +void ResetBattleTowerStreak(u8 levelType) { gSaveBlock2.battleTower.var_4AE[levelType] = 0; - gSaveBlock2.battleTower.curChallengeWins[levelType] = 1; - gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] = 1; + gSaveBlock2.battleTower.curChallengeBattleNum[levelType] = 1; + gSaveBlock2.battleTower.curStreakChallengesNum[levelType] = 1; } -u8 sub_8134650(u8 levelType, u16 b) +// Checks if the next trainer in Battle Tower should be the E-Reader trainer. +bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak) { u8 trainerTeamLevel; u8 monLevel; @@ -348,11 +349,11 @@ u8 sub_8134650(u8 levelType, u16 b) numValid = 0; - sub_813601C(); + ValidateEReaderTrainer(); - if (gScriptResult != 0 || gSaveBlock2.battleTower.ereaderTrainer.var_2 != b) + if (gScriptResult != 0 || gSaveBlock2.battleTower.ereaderTrainer.winStreak != winStreak) { - return 0; + return FALSE; } trainerTeamLevel = 50; @@ -366,7 +367,7 @@ u8 sub_8134650(u8 levelType, u16 b) monLevel = gSaveBlock2.battleTower.ereaderTrainer.party[i].level; if (gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) { - return 0; + return FALSE; } CheckMonBattleTowerBanlist( @@ -385,7 +386,7 @@ u8 sub_8134650(u8 levelType, u16 b) bool8 sub_81346F4(void) { - s32 recordIndex, j; + s32 recordIndex, i; u8 battleTowerLevelType; u16 winStreak; bool8 retVal; @@ -395,27 +396,28 @@ bool8 sub_81346F4(void) numCandidates = 0; battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - winStreak = sub_8135D3C(battleTowerLevelType); - if (sub_8134650(battleTowerLevelType, winStreak)) + winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + if (ShouldBattleEReaderTrainer(battleTowerLevelType, winStreak)) { - gSaveBlock2.battleTower.battleTowerTrainerId = 0xC8; + gSaveBlock2.battleTower.battleTowerTrainerId = 200; retVal = TRUE; } else { + // Check if one of the battle tower trainers from record mixing should be the next trainer. for (recordIndex = 0; recordIndex < 5; recordIndex++) { struct BattleTowerRecord *record = &gSaveBlock2.battleTower.records[recordIndex]; u32 recordHasData = 0; u32 checksum = 0; - for (j = 0; j < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; j++) + for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; i++) { - recordHasData |= ((u32 *)record)[j]; - checksum += ((u32 *)record)[j]; + recordHasData |= ((u32 *)record)[i]; + checksum += ((u32 *)record)[i]; } - if (gSaveBlock2.battleTower.records[recordIndex].var_2 == winStreak - && gSaveBlock2.battleTower.records[recordIndex].var_0 == battleTowerLevelType + if (gSaveBlock2.battleTower.records[recordIndex].winStreak == winStreak + && gSaveBlock2.battleTower.records[recordIndex].battleTowerLevelType == battleTowerLevelType && recordHasData && gSaveBlock2.battleTower.records[recordIndex].checksum == checksum) { @@ -443,24 +445,24 @@ bool8 sub_81346F4(void) // bool8 levelType = gSaveBlock2.battleTower.battleTowerLevelType; // if (sub_81346F4()) // { -// sub_81349FC(gSaveBlock2.battleTower.battleTowerTrainerId); -// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeWins[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; +// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); +// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; // } // else // { // u16 var1; -// if (gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] > 7) +// if (gSaveBlock2.battleTower.curStreakChallengesNum[levelType] > 7) // { // while (1) // { // s32 i; // u32 temp = ((Random() & 0xFF) * 30) >> 8; // var1 = temp + 70; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeWins[levelType] - 1 && var1 != gSaveBlock2.battleTower.var_4C1[i]; i++) // TODO: [i + 1]??? +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && var1 != gSaveBlock2.battleTower.var_4C1[i]; i++) // TODO: [i + 1]??? // { } -// if (i == gSaveBlock2.battleTower.curChallengeWins[levelType] - 1) +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) // { // break; // } @@ -468,18 +470,18 @@ bool8 sub_81346F4(void) // } // else // { -// if (gSaveBlock2.battleTower.curChallengeWins[levelType] == 7) +// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] == 7) // { // while (1) // { // s32 i; // u32 temp = ((Random() & 0xFF) * 5); -// u32 temp2 = (((gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] - 1) * 10) + 20); +// u32 temp2 = (((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10) + 20); // var1 = temp / 128 + temp2; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeWins[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // TODO: [i + 1]???? +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // TODO: [i + 1]???? // { } -// if (i == gSaveBlock2.battleTower.curChallengeWins[levelType] - 1) +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) // { // break; // } @@ -491,12 +493,12 @@ bool8 sub_81346F4(void) // { // s32 i; // u32 temp = ((Random() & 0xFF) * 320); -// u32 temp2 = ((gSaveBlock2.battleTower.curStreakChallengesCompleted[levelType] - 1) * 10); +// u32 temp2 = ((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10); // var1 = temp + temp2; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeWins[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // { } -// if (i == gSaveBlock2.battleTower.curChallengeWins[levelType] - 1) +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) // { // break; // } @@ -505,11 +507,11 @@ bool8 sub_81346F4(void) // } // gSaveBlock2.battleTower.battleTowerTrainerId = var1; -// sub_81349FC(gSaveBlock2.battleTower.battleTowerTrainerId); +// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); -// if (gSaveBlock2.battleTower.curChallengeWins[levelType] < 7) +// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] < 7) // { -// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeWins[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; +// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; // } // } // } @@ -536,7 +538,7 @@ void sub_81347F8(void) ldr r2, _08134840 @ =0x00000564\n\ adds r4, r5, r2\n\ ldrb r0, [r4]\n\ - bl sub_81349FC\n\ + bl SetBattleTowerTrainerGfxId\n\ lsls r0, r6, 1\n\ movs r3, 0xAB\n\ lsls r3, 3\n\ @@ -748,7 +750,7 @@ _081349B6:\n\ ldr r2, _081349F4 @ =0x00000564\n\ adds r5, r4, r2\n\ ldrb r0, [r5]\n\ - bl sub_81349FC\n\ + bl SetBattleTowerTrainerGfxId\n\ movs r3, 0xAB\n\ lsls r3, 3\n\ adds r0, r4, r3\n\ @@ -778,7 +780,7 @@ _081349F8: .4byte 0x00000569\n\ .syntax divided\n"); } -void sub_81349FC(u8 trainerIndex) +void SetBattleTowerTrainerGfxId(u8 trainerIndex) { u32 i; u8 trainerClass; @@ -796,18 +798,18 @@ void sub_81349FC(u8 trainerIndex) trainerClass = gSaveBlock2.battleTower.ereaderTrainer.trainerClass; } - for (i = 0; i < 30 && gUnknown_08405E60[i] != trainerClass; i++); + for (i = 0; i < 30 && sMaleTrainerClasses[i] != trainerClass; i++); if (i != 30) { - u8 trainerObjectGfxId = gUnknown_08405E92[i]; + u8 trainerObjectGfxId = sMaleTrainerGfxIds[i]; VarSet(0x4010, trainerObjectGfxId); return; } - for (i = 0; i < 20 && gUnknown_08405E7E[i] != trainerClass; i++); + for (i = 0; i < 20 && sFemaleTrainerClasses[i] != trainerClass; i++); if (i != 20) { - u8 trainerObjectGfxId = gUnknown_08405EB0[i]; + u8 trainerObjectGfxId = sFemaleTrainerGfxIds[i]; VarSet(0x4010, trainerObjectGfxId); return; } @@ -815,9 +817,9 @@ void sub_81349FC(u8 trainerIndex) VarSet(0x4010, MAP_OBJ_GFX_BOY_1); } -void sub_8134AB4() +void SetEReaderTrainerGfxId() { - sub_81349FC(200); + SetBattleTowerTrainerGfxId(200); } // void sub_8134AC0(struct BattleTowerRecord *record) @@ -858,7 +860,7 @@ void sub_8134AB4() // i = 0; // while (i < 5) // { -// if (gSaveBlock2.battleTower.records[i].var_2 == 0) +// if (gSaveBlock2.battleTower.records[i].winStreak == 0) // { // if (i > 4) // { @@ -872,7 +874,7 @@ void sub_8134AB4() // i++; // } -// var1[0] = gSaveBlock2.battleTower.records[0].var_2; +// var1[0] = gSaveBlock2.battleTower.records[0].winStreak; // var2[0] = 0; // l++; @@ -881,13 +883,13 @@ void sub_8134AB4() // j = 0; // if (j < l) // { -// for (; gSaveBlock2.battleTower.records[i].var_2 <= var1[j]; j++) +// for (; gSaveBlock2.battleTower.records[i].winStreak <= var1[j]; j++) // { -// if (gSaveBlock2.battleTower.records[i].var_2 < var1[j]) +// if (gSaveBlock2.battleTower.records[i].winStreak < var1[j]) // { // j = 0; // l = 1; -// var1[0] = gSaveBlock2.battleTower.records[i].var_2; +// var1[0] = gSaveBlock2.battleTower.records[i].winStreak; // var2[0] = i; // break; // } @@ -896,7 +898,7 @@ void sub_8134AB4() // if (j == l) // { -// var1[l] = gSaveBlock2.battleTower.records[i].var_2; +// var1[l] = gSaveBlock2.battleTower.records[i].winStreak; // var2[l] = i; // l++; // } @@ -1329,7 +1331,7 @@ void FillBattleTowerTrainerParty(void) for (i = 0; i < partyIndex; i++) { if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != 0 - && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == gBattleTowerHeldItems[battleTowerMons[battleMonIndex].item]) + && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]) { break; } @@ -1368,7 +1370,7 @@ void FillBattleTowerTrainerParty(void) } SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship); - SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, (u8 *)&gBattleTowerHeldItems[battleTowerMons[battleMonIndex].item]); + SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, (u8 *)&sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]); // The pokemon was successfully added to the trainer's party, so it's safe to move on to // the next party slot. @@ -1383,9 +1385,9 @@ u32 CountBattleTowerBanlistCaught() s32 i; u32 numCaught = 0; - for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++) + for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) { - if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBanlist[i]), FLAG_GET_CAUGHT)) + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBannedSpecies[i]), FLAG_GET_CAUGHT)) { numCaught++; } @@ -1463,16 +1465,16 @@ void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowe while (1) { - if (gBattleTowerBanlist[counter] == 0xFFFF) - goto EXIT2; + if (gBattleTowerBannedSpecies[counter] == 0xFFFF) + goto EXIT2; // Couldn't get the code to match without this GOTO - if (gBattleTowerBanlist[counter] == species) + if (gBattleTowerBannedSpecies[counter] == species) break; counter++; } - if (gBattleTowerBanlist[counter] != 0xFFFF) + if (gBattleTowerBannedSpecies[counter] != 0xFFFF) return; EXIT2: @@ -1527,9 +1529,9 @@ void CheckPartyBattleTowerBanlist(void) numBanlistCaught = CountBattleTowerBanlistCaught(); - for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++) + for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) { - counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBanlist[i], counter, numBanlistCaught); + counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBannedSpecies[i], counter, numBanlistCaught); } if (counter == 0) @@ -1553,24 +1555,24 @@ void CheckPartyBattleTowerBanlist(void) } } -void sub_813545C(u16 *easyChat) +void PrintBattleTowerTrainerMessage(u16 *easyChat) { sub_80EB544(gStringVar4, easyChat, 2, 3); } -void sub_8135474(void) +void PrintBattleTowerTrainerGreeting(void) { if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) { - sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); } else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) { - sub_813545C((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); + PrintBattleTowerTrainerMessage((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); } else { - sub_813545C(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].greeting.easyChat); + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].greeting.easyChat); } } @@ -1591,7 +1593,7 @@ void sub_81354CC(void) } break; case 2: - sub_81360D0(); + PrintEReaderTrainerFarewellMessage(); break; } @@ -1673,10 +1675,10 @@ void sub_8135668(void) gSaveBlock2.battleTower.battleTowerLevelType = gSpecialVar_0x8005; break; case 2: - gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType] = gSpecialVar_0x8005; + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] = gSpecialVar_0x8005; break; case 3: - gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] = gSpecialVar_0x8005; + gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] = gSpecialVar_0x8005; break; case 4: gSaveBlock2.battleTower.battleTowerTrainerId = gSpecialVar_0x8005; @@ -1698,21 +1700,21 @@ void sub_8135668(void) gSaveBlock2.battleTower.totalBattleTowerWins++; } - gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]++; + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]++; sub_8135A3C(); - gScriptResult = gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; - gStringVar1[0] = gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType] + 0xA1; + gStringVar1[0] = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1; gStringVar1[1] = 0xFF; break; case 7: - if (gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] < 1430) + if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] < 1430) { - gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType]++; + gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]++; } sub_8135A3C(); - gScriptResult = gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; break; case 8: gSaveBlock2.battleTower.unk_554 = gSpecialVar_0x8005; @@ -1725,14 +1727,14 @@ void sub_8135668(void) case 11: if (gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] != 3) { - sub_813461C(battleTowerLevelType); + ResetBattleTowerStreak(battleTowerLevelType); } break; case 12: gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; break; case 13: - gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); + gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); break; case 14: gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; @@ -1753,10 +1755,10 @@ void sub_81358A4(void) gScriptResult = gSaveBlock2.battleTower.battleTowerLevelType; break; case 2: - gScriptResult = gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; break; case 3: - gScriptResult = gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType]; + gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; break; case 4: gScriptResult = gSaveBlock2.battleTower.battleTowerTrainerId; @@ -1769,19 +1771,19 @@ void sub_81358A4(void) gScriptResult = gSaveBlock2.battleTower.unk_554; break; case 9: - gScriptResult = sub_8135D3C(battleTowerLevelType); + gScriptResult = GetCurrentBattleTowerWinStreak(battleTowerLevelType); break; case 10: SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); break; case 11: - sub_813461C(battleTowerLevelType); + ResetBattleTowerStreak(battleTowerLevelType); break; case 12: gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; break; case 13: - gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = sub_8135D3C(battleTowerLevelType); + gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); break; case 14: gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; @@ -1805,7 +1807,7 @@ void sub_8135A14(void) void sub_8135A3C(void) { u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - u16 winStreak = sub_8135D3C(battleTowerLevelType); + u16 winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); if (gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] < winStreak) { @@ -1852,7 +1854,7 @@ void sub_8135A3C(void) lsls r4, 31\n\ lsrs r4, 31\n\ adds r0, r4, 0\n\ - bl sub_8135D3C\n\ + bl GetCurrentBattleTowerWinStreak\n\ lsls r0, 16\n\ lsrs r5, r0, 16\n\ lsls r4, 1\n\ @@ -1923,22 +1925,22 @@ void sub_8135AC4(void) if (gSaveBlock2.playerGender != MALE) { - trainerClass = gUnknown_08405E7E[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; } else { - trainerClass = gUnknown_08405E60[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; } - playerRecord->var_0 = battleTowerLevelType; + playerRecord->battleTowerLevelType = battleTowerLevelType; playerRecord->trainerClass = trainerClass; copy_word_to_mem(playerRecord->trainerId, gSaveBlock2.playerTrainerId); StringCopy8(playerRecord->name, gSaveBlock2.playerName); - playerRecord->var_2 = sub_8135D3C(battleTowerLevelType); + playerRecord->winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); for (i = 0; i < 6; i++) { @@ -1960,8 +1962,8 @@ void sub_8135BA0(void) if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) { - if (gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] > 1 - || gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType] > 1) + if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] > 1 + || gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] > 1) { sub_8135AC4(); } @@ -1981,7 +1983,7 @@ void sub_8135BA0(void) TrySavingData(EREADER_SAVE); } -void sub_8135C38(void) +void BattleTower_SoftReset(void) { DoSoftReset(); } @@ -2055,39 +2057,39 @@ void sub_8135CFC(void) } } -u16 sub_8135D3C(u8 battleTowerLevelType) +u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) { - u16 var2 = ((gSaveBlock2.battleTower.curStreakChallengesCompleted[battleTowerLevelType] - 1) * 7 - 1) + gSaveBlock2.battleTower.curChallengeWins[battleTowerLevelType]; + u16 winStreak = ((gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; - if (var2 > 9999) + if (winStreak > 9999) { return 9999; } - return var2; + return winStreak; } #ifdef NONMATCHING -void sub_8135D84(void) +void DetermineBattleTowerPrize(void) { u16 prizeItem; struct SaveBlock2 *saveBlock = &gSaveBlock2; u8 battleTowerLevelType = saveBlock->battleTower.battleTowerLevelType; - if (saveBlock->battleTower.curStreakChallengesCompleted[battleTowerLevelType] - 1 > 5) + if (saveBlock->battleTower.curStreakChallengesNum[battleTowerLevelType] - 1 > 5) { - prizeItem = LongStreakPrizes[Random() % ARRAY_COUNT(LongStreakPrizes)]; + prizeItem = sLongStreakPrizes[Random() % ARRAY_COUNT(sLongStreakPrizes)]; } else { - prizeItem = ShortStreakPrizes[Random() % ARRAY_COUNT(ShortStreakPrizes)]; + prizeItem = sShortStreakPrizes[Random() % ARRAY_COUNT(sShortStreakPrizes)]; } saveBlock->battleTower.prizeItem = prizeItem; } #else __attribute__((naked)) -void sub_8135D84(void) +void DetermineBattleTowerPrize(void) { asm(".syntax unified\n\ push {r4,r5,lr}\n\ @@ -2106,7 +2108,7 @@ void sub_8135D84(void) cmp r0, 0x5\n\ ble _08135DC0\n\ bl Random\n\ - ldr r4, _08135DBC @ =LongStreakPrizes\n\ + ldr r4, _08135DBC @ =sLongStreakPrizes\n\ lsls r0, 16\n\ lsrs r0, 16\n\ movs r1, 0x9\n\ @@ -2115,10 +2117,10 @@ void sub_8135D84(void) _08135DB0: .4byte gSaveBlock2\n\ _08135DB4: .4byte 0x00000554\n\ _08135DB8: .4byte 0x0000055c\n\ -_08135DBC: .4byte LongStreakPrizes\n\ +_08135DBC: .4byte sLongStreakPrizes\n\ _08135DC0:\n\ bl Random\n\ - ldr r4, _08135DE8 @ =ShortStreakPrizes\n\ + ldr r4, _08135DE8 @ =sShortStreakPrizes\n\ lsls r0, 16\n\ lsrs r0, 16\n\ movs r1, 0x6\n\ @@ -2136,12 +2138,12 @@ _08135DCC:\n\ pop {r0}\n\ bx r0\n\ .align 2, 0\n\ -_08135DE8: .4byte ShortStreakPrizes\n\ +_08135DE8: .4byte sShortStreakPrizes\n\ .syntax divided\n"); } #endif // NONMATCHING -void sub_8135DEC(void) +void GiveBattleTowerPrize(void) { u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; @@ -2157,7 +2159,7 @@ void sub_8135DEC(void) } } -void sub_8135E50() +void AwardBattleTowerRibbons() { s32 i; u32 partyIndex; @@ -2173,7 +2175,7 @@ void sub_8135E50() gScriptResult = 0; - if (sub_8135D3C(battleTowerLevelType) > 55) + if (GetCurrentBattleTowerWinStreak(battleTowerLevelType) > 55) { for (i = 0; i < 3; i++) { @@ -2205,19 +2207,19 @@ void Debug_FillEReaderTrainerWithPlayerData(void) if (gSaveBlock2.playerGender != MALE) { - ereaderTrainer->trainerClass = gUnknown_08405E7E[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + ereaderTrainer->trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; } else { - ereaderTrainer->trainerClass = gUnknown_08405E60[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + ereaderTrainer->trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; } copy_word_to_mem(ereaderTrainer->trainerId, gSaveBlock2.playerTrainerId); StringCopy8(ereaderTrainer->name, gSaveBlock2.playerName); - ereaderTrainer->var_2 = 1; + ereaderTrainer->winStreak = 1; j = 7; for (i = 0; i < 6; i++) @@ -2236,29 +2238,30 @@ void Debug_FillEReaderTrainerWithPlayerData(void) SetEReaderTrainerChecksum(ereaderTrainer); } -u8 sub_8135FBC(void) +u8 GetEReaderTrainerPicIndex(void) { return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } -u8 sub_8135FD8(void) +u8 GetEReaderTrainerClassNameIndex(void) { return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } -void sub_8135FF4(u8 *text) +void SetEReaderTrainerName(u8 *trainerName) { s32 i; for (i = 0; i < 7; i++) { - text[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; + trainerName[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; } - text[i] = 0xFF; + trainerName[i] = 0xFF; } -void sub_813601C(void) +// Checks if the saved E-Reader trainer is valid. +void ValidateEReaderTrainer(void) { u32 i; u32 checksum; @@ -2313,12 +2316,12 @@ void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) } } -void sub_81360C0(void) +void PrintEReaderTrainerGreeting(void) { - sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); } -void sub_81360D0(void) +void PrintEReaderTrainerFarewellMessage(void) { if (gBattleOutcome == BATTLE_DREW) { @@ -2326,11 +2329,11 @@ void sub_81360D0(void) } else if (gBattleOutcome == BATTLE_WON) { - sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon.easyChat); + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon.easyChat); } else { - sub_813545C(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost.easyChat); + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost.easyChat); } } diff --git a/src/data/battle_tower/level_100_mons.h b/src/data/battle_tower/level_100_mons.h index fff34ff1f..4f2b711ee 100644 --- a/src/data/battle_tower/level_100_mons.h +++ b/src/data/battle_tower/level_100_mons.h @@ -2,7 +2,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = { { .species = SPECIES_LINOONE, - .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .heldItem = BATTLE_TOWER_ITEM_RAWST_BERRY, .teamFlags = 0x42, .moves = { MOVE_SLASH, @@ -15,7 +15,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MIGHTYENA, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x41, .moves = { MOVE_BITE, @@ -28,7 +28,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BEAUTIFLY, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x41, .moves = { MOVE_GIGA_DRAIN, @@ -41,7 +41,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DUSTOX, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x41, .moves = { MOVE_PSYBEAM, @@ -54,7 +54,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LOMBRE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x03, .moves = { MOVE_ASTONISH, @@ -67,7 +67,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NUZLEAF, - .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .heldItem = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x01, .moves = { MOVE_BULLET_SEED, @@ -80,7 +80,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWELLOW, - .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .heldItem = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x42, .moves = { MOVE_AERIAL_ACE, @@ -93,7 +93,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_PELIPPER, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x02, .moves = { MOVE_SURF, @@ -106,7 +106,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x42, .moves = { MOVE_MACH_PUNCH, @@ -119,7 +119,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NINJASK, - .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .heldItem = BATTLE_TOWER_ITEM_RAWST_BERRY, .teamFlags = 0x41, .moves = { MOVE_SCRATCH, @@ -132,7 +132,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x01, .moves = { MOVE_BITE, @@ -145,7 +145,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAWILE, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x03, .moves = { MOVE_VICE_GRIP, @@ -158,7 +158,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NOSEPASS, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x01, .moves = { MOVE_ROCK_THROW, @@ -171,7 +171,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DELCATTY, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x42, .moves = { MOVE_DOUBLE_SLAP, @@ -184,7 +184,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CAMERUPT, - .item = BATTLE_TOWER_ITEM_CHARCOAL, + .heldItem = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x01, .moves = { MOVE_EMBER, @@ -197,7 +197,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_ORAN_BERRY, + .heldItem = BATTLE_TOWER_ITEM_ORAN_BERRY, .teamFlags = 0x01, .moves = { MOVE_POISON_GAS, @@ -210,7 +210,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SANDSLASH, - .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .heldItem = BATTLE_TOWER_ITEM_SOFT_SAND, .teamFlags = 0x03, .moves = { MOVE_SLASH, @@ -223,7 +223,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SPINDA, - .item = BATTLE_TOWER_ITEM_SILK_SCARF, + .heldItem = BATTLE_TOWER_ITEM_SILK_SCARF, .teamFlags = 0x42, .moves = { MOVE_UPROAR, @@ -236,7 +236,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WHISCASH, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x01, .moves = { MOVE_TICKLE, @@ -249,7 +249,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CACTURNE, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x01, .moves = { MOVE_POISON_STING, @@ -262,7 +262,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_JIGGLYPUFF, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x42, .moves = { MOVE_SING, @@ -275,7 +275,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MARILL, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x42, .moves = { MOVE_BUBBLE_BEAM, @@ -288,7 +288,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAGNETON, - .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .heldItem = BATTLE_TOWER_ITEM_RAWST_BERRY, .teamFlags = 0x01, .moves = { MOVE_THUNDER_SHOCK, @@ -301,7 +301,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CARVANHA, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x01, .moves = { MOVE_BITE, @@ -314,7 +314,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KECLEON, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x03, .moves = { MOVE_THIEF, @@ -327,7 +327,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NINETALES, - .item = BATTLE_TOWER_ITEM_CHARCOAL, + .heldItem = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x02, .moves = { MOVE_EMBER, @@ -340,7 +340,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_RAICHU, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x42, .moves = { MOVE_SHOCK_WAVE, @@ -353,7 +353,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SEALEO, - .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .heldItem = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, .teamFlags = 0x01, .moves = { MOVE_ICE_BALL, @@ -366,7 +366,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GRAVELER, - .item = BATTLE_TOWER_ITEM_HARD_STONE, + .heldItem = BATTLE_TOWER_ITEM_HARD_STONE, .teamFlags = 0x01, .moves = { MOVE_ROCK_THROW, @@ -379,7 +379,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHUPPET, - .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .heldItem = BATTLE_TOWER_ITEM_SPELL_TAG, .teamFlags = 0x03, .moves = { MOVE_NIGHT_SHADE, @@ -392,7 +392,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LUVDISC, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0A, .moves = { MOVE_ATTRACT, @@ -405,7 +405,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LANTURN, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x0A, .moves = { MOVE_THUNDER_WAVE, @@ -418,7 +418,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CORSOLA, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0A, .moves = { MOVE_MIRROR_COAT, @@ -431,7 +431,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WAILMER, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x05, .moves = { MOVE_SURF, @@ -444,7 +444,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_RHYDON, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x05, .moves = { MOVE_TAKE_DOWN, @@ -457,7 +457,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DODRIO, - .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .heldItem = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x05, .moves = { MOVE_FURY_ATTACK, @@ -470,7 +470,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x05, .moves = { MOVE_FURY_SWIPES, @@ -483,7 +483,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BELLOSSOM, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x0A, .moves = { MOVE_GIGA_DRAIN, @@ -496,7 +496,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_TROPIUS, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x05, .moves = { MOVE_STOMP, @@ -509,7 +509,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SABLEYE, - .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .heldItem = BATTLE_TOWER_ITEM_SPELL_TAG, .teamFlags = 0x0A, .moves = { MOVE_NIGHT_SHADE, @@ -522,7 +522,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x03, .moves = { MOVE_SONIC_BOOM, @@ -535,7 +535,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_TENTACRUEL, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x01, .moves = { MOVE_ACID, @@ -548,7 +548,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CLAYDOL, - .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .heldItem = BATTLE_TOWER_ITEM_SOFT_SAND, .teamFlags = 0x05, .moves = { MOVE_ANCIENT_POWER, @@ -561,7 +561,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GRUMPIG, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0A, .moves = { MOVE_PSYBEAM, @@ -574,7 +574,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CRAWDAUNT, - .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .heldItem = BATTLE_TOWER_ITEM_MENTAL_HERB, .teamFlags = 0x05, .moves = { MOVE_CRABHAMMER, @@ -587,7 +587,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SEVIPER, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x01, .moves = { MOVE_POISON_TAIL, @@ -600,7 +600,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ZANGOOSE, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x05, .moves = { MOVE_FURY_CUTTER, @@ -613,7 +613,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALTARIA, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x03, .moves = { MOVE_DRAGON_BREATH, @@ -626,7 +626,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ROSELIA, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x0A, .moves = { MOVE_LEECH_SEED, @@ -639,7 +639,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_VOLBEAT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x09, .moves = { MOVE_SIGNAL_BEAM, @@ -652,7 +652,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ILLUMISE, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x09, .moves = { MOVE_CHARM, @@ -665,7 +665,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_MAGNET, + .heldItem = BATTLE_TOWER_ITEM_MAGNET, .teamFlags = 0x03, .moves = { MOVE_BITE, @@ -678,7 +678,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAWILE, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0A, .moves = { MOVE_CRUNCH, @@ -691,7 +691,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x05, .moves = { MOVE_ARM_THRUST, @@ -704,7 +704,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SKARMORY, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x01, .moves = { MOVE_STEEL_WING, @@ -717,7 +717,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_TORKOAL, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x03, .moves = { MOVE_FIRE_SPIN, @@ -730,7 +730,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GYARADOS, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x05, .moves = { MOVE_THRASH, @@ -743,7 +743,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MIGHTYENA, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x05, .moves = { MOVE_CRUNCH, @@ -756,7 +756,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LINOONE, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x06, .moves = { MOVE_SLASH, @@ -769,7 +769,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MASQUERAIN, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0A, .moves = { MOVE_TOXIC, @@ -782,7 +782,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x06, .moves = { MOVE_BULLET_SEED, @@ -795,7 +795,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x06, .moves = { MOVE_DOUBLE_KICK, @@ -808,7 +808,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x49, .moves = { MOVE_SURF, @@ -821,7 +821,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x49, .moves = { MOVE_DRAGON_BREATH, @@ -834,7 +834,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x49, .moves = { MOVE_SURF, @@ -847,7 +847,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CORSOLA, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x03, .moves = { MOVE_ANCIENT_POWER, @@ -860,7 +860,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_RHYDON, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x41, .moves = { MOVE_EARTHQUAKE, @@ -873,7 +873,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x06, .moves = { MOVE_MEGAHORN, @@ -886,7 +886,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GIRAFARIG, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x09, .moves = { MOVE_PSYCHIC, @@ -899,7 +899,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_XATU, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x09, .moves = { MOVE_PSYCHIC, @@ -912,7 +912,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DODRIO, - .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .heldItem = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x03, .moves = { MOVE_DRILL_PECK, @@ -925,7 +925,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_VILEPLUME, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x89, .moves = { MOVE_POISON_POWDER, @@ -938,7 +938,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MEDICHAM, - .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .heldItem = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x06, .moves = { MOVE_FOCUS_PUNCH, @@ -951,7 +951,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ABSOL, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x06, .moves = { MOVE_SLASH, @@ -964,7 +964,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DUSCLOPS, - .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .heldItem = BATTLE_TOWER_ITEM_SPELL_TAG, .teamFlags = 0x4B, .moves = { MOVE_CONFUSE_RAY, @@ -977,7 +977,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHUPPET, - .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .heldItem = BATTLE_TOWER_ITEM_SPELL_TAG, .teamFlags = 0x43, .moves = { MOVE_GRUDGE, @@ -990,7 +990,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CASTFORM, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x82, .moves = { MOVE_WEATHER_BALL, @@ -1003,7 +1003,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x02, .moves = { MOVE_SURF, @@ -1016,7 +1016,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHARPEDO, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x01, .moves = { MOVE_CRUNCH, @@ -1029,7 +1029,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x06, .moves = { MOVE_EARTHQUAKE, @@ -1042,7 +1042,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_TRAPINCH, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x09, .moves = { MOVE_TOXIC, @@ -1055,7 +1055,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LUNATONE, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x43, .moves = { MOVE_PSYCHIC, @@ -1068,7 +1068,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SOLROCK, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x43, .moves = { MOVE_SOLAR_BEAM, @@ -1081,7 +1081,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BALTOY, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x43, .moves = { MOVE_PSYCHIC, @@ -1094,7 +1094,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CRAWDAUNT, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x06, .moves = { MOVE_CRABHAMMER, @@ -1107,7 +1107,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WHISCASH, - .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .heldItem = BATTLE_TOWER_ITEM_ASPEAR_BERRY, .teamFlags = 0x06, .moves = { MOVE_EARTHQUAKE, @@ -1120,7 +1120,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SEVIPER, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x09, .moves = { MOVE_POISON_TAIL, @@ -1133,7 +1133,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAGCARGO, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x89, .moves = { MOVE_FLAMETHROWER, @@ -1146,7 +1146,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .heldItem = BATTLE_TOWER_ITEM_BLACK_BELT, .teamFlags = 0x09, .moves = { MOVE_KARATE_CHOP, @@ -1159,7 +1159,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWALOT, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x86, .moves = { MOVE_YAWN, @@ -1172,7 +1172,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0C, .moves = { MOVE_LEAF_BLADE, @@ -1185,7 +1185,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x0C, .moves = { MOVE_BLAZE_KICK, @@ -1198,7 +1198,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x4C, .moves = { MOVE_SURF, @@ -1211,7 +1211,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MIGHTYENA, - .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .heldItem = BATTLE_TOWER_ITEM_BLACK_GLASSES, .teamFlags = 0x04, .moves = { MOVE_CRUNCH, @@ -1224,7 +1224,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LINOONE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x04, .moves = { MOVE_SLASH, @@ -1237,7 +1237,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BEAUTIFLY, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x08, .moves = { MOVE_GIGA_DRAIN, @@ -1250,7 +1250,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DUSTOX, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x08, .moves = { MOVE_PSYCHIC, @@ -1263,7 +1263,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x0C, .moves = { MOVE_FAKE_OUT, @@ -1276,7 +1276,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHIFTRY, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x0C, .moves = { MOVE_FRUSTRATION, @@ -1289,7 +1289,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWELLOW, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x88, .moves = { MOVE_FLY, @@ -1302,7 +1302,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .heldItem = BATTLE_TOWER_ITEM_BLACK_GLASSES, .teamFlags = 0x4A, .moves = { MOVE_HYPNOSIS, @@ -1315,7 +1315,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x0C, .moves = { MOVE_DYNAMIC_PUNCH, @@ -1328,7 +1328,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_VIGOROTH, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x04, .moves = { MOVE_SLASH, @@ -1341,7 +1341,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NINJASK, - .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .heldItem = BATTLE_TOWER_ITEM_SILVER_POWDER, .teamFlags = 0x04, .moves = { MOVE_FURY_CUTTER, @@ -1354,7 +1354,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHEDINJA, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0xCA, .moves = { MOVE_CONFUSE_RAY, @@ -1367,7 +1367,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LOUDRED, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x04, .moves = { MOVE_HYPER_VOICE, @@ -1380,7 +1380,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x04, .moves = { MOVE_ARM_THRUST, @@ -1393,7 +1393,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .heldItem = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x88, .moves = { MOVE_PSYCHIC, @@ -1406,7 +1406,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x88, .moves = { MOVE_CONFUSE_RAY, @@ -1419,7 +1419,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAWILE, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x04, .moves = { MOVE_CRUNCH, @@ -1432,7 +1432,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_AGGRON, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x45, .moves = { MOVE_METAL_CLAW, @@ -1445,7 +1445,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GOLEM, - .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .heldItem = BATTLE_TOWER_ITEM_SOFT_SAND, .teamFlags = 0xC5, .moves = { MOVE_ROLLOUT, @@ -1458,7 +1458,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_MAGNET, + .heldItem = BATTLE_TOWER_ITEM_MAGNET, .teamFlags = 0x04, .moves = { MOVE_THUNDER, @@ -1471,7 +1471,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_VOLBEAT, - .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .heldItem = BATTLE_TOWER_ITEM_SILVER_POWDER, .teamFlags = 0x08, .moves = { MOVE_CONFUSE_RAY, @@ -1484,7 +1484,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ILLUMISE, - .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .heldItem = BATTLE_TOWER_ITEM_SILVER_POWDER, .teamFlags = 0x08, .moves = { MOVE_THUNDERBOLT, @@ -1497,7 +1497,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MASQUERAIN, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x88, .moves = { MOVE_GIGA_DRAIN, @@ -1510,7 +1510,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ROSELIA, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x08, .moves = { MOVE_PETAL_DANCE, @@ -1523,7 +1523,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DELCATTY, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x08, .moves = { MOVE_SING, @@ -1536,7 +1536,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SEAKING, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x88, .moves = { MOVE_RAIN_DANCE, @@ -1549,7 +1549,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GYARADOS, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x8C, .moves = { MOVE_HYDRO_PUMP, @@ -1562,7 +1562,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWALOT, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x42, .moves = { MOVE_STOCKPILE, @@ -1575,7 +1575,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAGCARGO, - .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .heldItem = BATTLE_TOWER_ITEM_ASPEAR_BERRY, .teamFlags = 0x41, .moves = { MOVE_ROCK_SLIDE, @@ -1588,7 +1588,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0xC3, .moves = { MOVE_SLUDGE_BOMB, @@ -1601,7 +1601,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SPINDA, - .item = BATTLE_TOWER_ITEM_SILK_SCARF, + .heldItem = BATTLE_TOWER_ITEM_SILK_SCARF, .teamFlags = 0x42, .moves = { MOVE_DIZZY_PUNCH, @@ -1614,7 +1614,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALTARIA, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x03, .moves = { MOVE_DRAGON_CLAW, @@ -1627,7 +1627,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ZANGOOSE, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x03, .moves = { MOVE_CRUSH_CLAW, @@ -1640,7 +1640,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SEVIPER, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x41, .moves = { MOVE_SWAGGER, @@ -1653,7 +1653,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GRUMPIG, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x42, .moves = { MOVE_TOXIC, @@ -1666,7 +1666,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CACTURNE, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x41, .moves = { MOVE_NEEDLE_ARM, @@ -1679,7 +1679,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CLAYDOL, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x03, .moves = { MOVE_EARTHQUAKE, @@ -1692,7 +1692,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_TENTACRUEL, - .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .heldItem = BATTLE_TOWER_ITEM_MENTAL_HERB, .teamFlags = 0xC1, .moves = { MOVE_SLUDGE_BOMB, @@ -1705,7 +1705,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WIGGLYTUFF, - .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .heldItem = BATTLE_TOWER_ITEM_RAWST_BERRY, .teamFlags = 0xC3, .moves = { MOVE_SING, @@ -1718,7 +1718,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_AZUMARILL, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0xC2, .moves = { MOVE_SURF, @@ -1731,7 +1731,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0xC3, .moves = { MOVE_THUNDERBOLT, @@ -1744,7 +1744,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x42, .moves = { MOVE_HYDRO_PUMP, @@ -1757,7 +1757,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KECLEON, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x43, .moves = { MOVE_SKILL_SWAP, @@ -1770,7 +1770,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DUSCLOPS, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x43, .moves = { MOVE_CONFUSE_RAY, @@ -1783,7 +1783,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ABSOL, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x41, .moves = { MOVE_SLASH, @@ -1796,7 +1796,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NINETALES, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0xC2, .moves = { MOVE_FLAMETHROWER, @@ -1809,7 +1809,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_PIKACHU, - .item = BATTLE_TOWER_ITEM_LIGHT_BALL, + .heldItem = BATTLE_TOWER_ITEM_LIGHT_BALL, .teamFlags = 0xC2, .moves = { MOVE_THUNDER_WAVE, @@ -1822,7 +1822,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_VILEPLUME, - .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .heldItem = BATTLE_TOWER_ITEM_ASPEAR_BERRY, .teamFlags = 0xC3, .moves = { MOVE_GIGA_DRAIN, @@ -1835,7 +1835,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DONPHAN, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x41, .moves = { MOVE_EARTHQUAKE, @@ -1848,7 +1848,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0xC3, .moves = { MOVE_CONFUSE_RAY, @@ -1861,7 +1861,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .heldItem = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, .teamFlags = 0x43, .moves = { MOVE_ICE_BEAM, @@ -1874,7 +1874,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_RELICANTH, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x41, .moves = { MOVE_YAWN, @@ -1887,7 +1887,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x43, .moves = { MOVE_RAIN_DANCE, @@ -1900,7 +1900,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CRADILY, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x43, .moves = { MOVE_CONFUSE_RAY, @@ -1913,7 +1913,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ARMALDO, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x43, .moves = { MOVE_SLASH, @@ -1926,7 +1926,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x41, .moves = { MOVE_METAL_CLAW, @@ -1939,7 +1939,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x42, .moves = { MOVE_DRAGON_BREATH, @@ -1952,7 +1952,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MIGHTYENA, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x01, .moves = { MOVE_CRUNCH, @@ -1965,7 +1965,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LINOONE, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x02, .moves = { MOVE_HYPER_BEAM, @@ -1978,7 +1978,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x03, .moves = { MOVE_SURF, @@ -1991,7 +1991,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_EXPLOUD, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x01, .moves = { MOVE_UPROAR, @@ -2004,7 +2004,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWELLOW, - .item = BATTLE_TOWER_ITEM_LANSAT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LANSAT_BERRY, .teamFlags = 0x02, .moves = { MOVE_FACADE, @@ -2017,7 +2017,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_PELIPPER, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x82, .moves = { MOVE_STOCKPILE, @@ -2030,7 +2030,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x01, .moves = { MOVE_DYNAMIC_PUNCH, @@ -2043,7 +2043,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHEDINJA, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x01, .moves = { MOVE_RETURN, @@ -2056,7 +2056,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_EXPLOUD, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x01, .moves = { MOVE_HYPER_BEAM, @@ -2069,7 +2069,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x01, .moves = { MOVE_CROSS_CHOP, @@ -2082,7 +2082,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x83, .moves = { MOVE_PSYCHIC, @@ -2095,7 +2095,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x81, .moves = { MOVE_CONFUSE_RAY, @@ -2108,7 +2108,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SABLEYE, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x83, .moves = { MOVE_TOXIC, @@ -2121,7 +2121,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAWILE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x02, .moves = { MOVE_CRUNCH, @@ -2134,7 +2134,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_AGGRON, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x01, .moves = { MOVE_DOUBLE_EDGE, @@ -2147,7 +2147,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GOLEM, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x01, .moves = { MOVE_EARTHQUAKE, @@ -2160,7 +2160,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NOSEPASS, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x81, .moves = { MOVE_THUNDER_WAVE, @@ -2173,7 +2173,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x02, .moves = { MOVE_THUNDER, @@ -2186,7 +2186,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ROSELIA, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x82, .moves = { MOVE_GRASS_WHISTLE, @@ -2199,7 +2199,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DELCATTY, - .item = BATTLE_TOWER_ITEM_STARF_BERRY, + .heldItem = BATTLE_TOWER_ITEM_STARF_BERRY, .teamFlags = 0x02, .moves = { MOVE_ASSIST, @@ -2212,7 +2212,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_TROPIUS, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0xC2, .moves = { MOVE_RAZOR_LEAF, @@ -2225,7 +2225,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWALOT, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x03, .moves = { MOVE_YAWN, @@ -2238,7 +2238,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .heldItem = BATTLE_TOWER_ITEM_BLACK_BELT, .teamFlags = 0x01, .moves = { MOVE_CROSS_CHOP, @@ -2251,7 +2251,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CAMERUPT, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x40, .moves = { MOVE_ERUPTION, @@ -2264,7 +2264,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MAGCARGO, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x03, .moves = { MOVE_FLAMETHROWER, @@ -2277,7 +2277,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WEEZING, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x81, .moves = { MOVE_WILL_O_WISP, @@ -2290,7 +2290,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SPINDA, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x82, .moves = { MOVE_TRICK, @@ -2303,7 +2303,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SKARMORY, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x01, .moves = { MOVE_DRILL_PECK, @@ -2316,7 +2316,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALTARIA, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x02, .moves = { MOVE_SING, @@ -2329,7 +2329,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GRUMPIG, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x82, .moves = { MOVE_PSYCHIC, @@ -2342,7 +2342,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHIFTRY, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x20, .moves = { MOVE_SWAGGER, @@ -2355,7 +2355,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CLAYDOL, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x20, .moves = { MOVE_COSMIC_POWER, @@ -2368,7 +2368,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x33, .moves = { MOVE_EARTHQUAKE, @@ -2381,7 +2381,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NOSEPASS, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x20, .moves = { MOVE_ROCK_SLIDE, @@ -2394,7 +2394,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DUSCLOPS, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x33, .moves = { MOVE_SHADOW_PUNCH, @@ -2407,7 +2407,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SEAKING, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x20, .moves = { MOVE_HORN_DRILL, @@ -2420,7 +2420,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CAMERUPT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x73, .moves = { MOVE_EARTHQUAKE, @@ -2433,7 +2433,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LANTURN, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x13, .moves = { MOVE_THUNDERBOLT, @@ -2446,7 +2446,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WEEZING, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x33, .moves = { MOVE_SLUDGE_BOMB, @@ -2459,7 +2459,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WHISCASH, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x20, .moves = { MOVE_EARTHQUAKE, @@ -2472,7 +2472,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_AGGRON, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x51, .moves = { MOVE_DOUBLE_EDGE, @@ -2485,7 +2485,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KECLEON, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x12, .moves = { MOVE_TRICK, @@ -2498,7 +2498,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHARPEDO, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x11, .moves = { MOVE_CRUNCH, @@ -2511,7 +2511,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ABSOL, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x12, .moves = { MOVE_DOUBLE_EDGE, @@ -2524,7 +2524,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WAILORD, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x72, .moves = { MOVE_HYDRO_PUMP, @@ -2537,7 +2537,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_TENTACRUEL, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x20, .moves = { MOVE_HYDRO_PUMP, @@ -2550,7 +2550,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SABLEYE, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x32, .moves = { MOVE_SHADOW_BALL, @@ -2563,7 +2563,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WOBBUFFET, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x20, .moves = { MOVE_ENCORE, @@ -2576,7 +2576,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_RHYDON, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x71, .moves = { MOVE_EARTHQUAKE, @@ -2589,7 +2589,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GLALIE, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x31, .moves = { MOVE_CRUNCH, @@ -2602,7 +2602,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x8C, .moves = { MOVE_LEAF_BLADE, @@ -2615,7 +2615,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x8C, .moves = { MOVE_BLAZE_KICK, @@ -2628,7 +2628,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x8C, .moves = { MOVE_SURF, @@ -2641,7 +2641,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x1A, .moves = { MOVE_PSYCHIC, @@ -2654,7 +2654,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x15, .moves = { MOVE_SPORE, @@ -2667,7 +2667,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x58, .moves = { MOVE_PSYCHIC, @@ -2680,7 +2680,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x15, .moves = { MOVE_CROSS_CHOP, @@ -2693,7 +2693,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GYARADOS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x55, .moves = { MOVE_HYPER_BEAM, @@ -2706,7 +2706,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x58, .moves = { MOVE_SLUDGE_BOMB, @@ -2719,7 +2719,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x5D, .moves = { MOVE_CROSS_CHOP, @@ -2732,7 +2732,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x1A, .moves = { MOVE_THUNDERBOLT, @@ -2745,7 +2745,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x60, .moves = { MOVE_THUNDERBOLT, @@ -2758,7 +2758,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x64, .moves = { MOVE_SLUDGE_BOMB, @@ -2771,7 +2771,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x1C, .moves = { MOVE_DRAGON_CLAW, @@ -2784,7 +2784,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x5C, .moves = { MOVE_SURF, @@ -2797,7 +2797,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_NINETALES, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x4A, .moves = { MOVE_CONFUSE_RAY, @@ -2810,7 +2810,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_RAICHU, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x5A, .moves = { MOVE_THUNDERBOLT, @@ -2823,7 +2823,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x55, .moves = { MOVE_SURF, @@ -2836,7 +2836,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x5D, .moves = { MOVE_MEGAHORN, @@ -2849,7 +2849,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x26, .moves = { MOVE_SURF, @@ -2862,7 +2862,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x5B, .moves = { MOVE_SURF, @@ -2875,7 +2875,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x0D, .moves = { MOVE_DRAGON_CLAW, @@ -2888,7 +2888,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x3D, .moves = { MOVE_METEOR_MASH, @@ -2901,7 +2901,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGIROCK, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x3C, .moves = { MOVE_EARTHQUAKE, @@ -2914,7 +2914,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGICE, - .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .heldItem = BATTLE_TOWER_ITEM_LAX_INCENSE, .teamFlags = 0x3C, .moves = { MOVE_ICE_BEAM, @@ -2927,7 +2927,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGISTEEL, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x3C, .moves = { MOVE_METAL_CLAW, @@ -2940,7 +2940,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x0E, .moves = { MOVE_MIST_BALL, @@ -2953,7 +2953,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x0D, .moves = { MOVE_LUSTER_PURGE, @@ -2966,7 +2966,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x1A, .moves = { MOVE_SURF, @@ -2979,7 +2979,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SLAKING, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x15, .moves = { MOVE_YAWN, @@ -2992,7 +2992,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x8C, .moves = { MOVE_GIGA_DRAIN, @@ -3005,7 +3005,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x8C, .moves = { MOVE_BLAZE_KICK, @@ -3018,7 +3018,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x8C, .moves = { MOVE_MUDDY_WATER, @@ -3031,7 +3031,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x0A, .moves = { MOVE_PSYCHIC, @@ -3044,7 +3044,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x05, .moves = { MOVE_SPORE, @@ -3057,7 +3057,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x58, .moves = { MOVE_PSYCHIC, @@ -3070,7 +3070,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x04, .moves = { MOVE_CROSS_CHOP, @@ -3083,7 +3083,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GYARADOS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x44, .moves = { MOVE_HYPER_BEAM, @@ -3096,7 +3096,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x48, .moves = { MOVE_TOXIC, @@ -3109,7 +3109,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x5D, .moves = { MOVE_CROSS_CHOP, @@ -3122,7 +3122,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x0A, .moves = { MOVE_THUNDER, @@ -3135,7 +3135,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x60, .moves = { MOVE_THUNDERBOLT, @@ -3148,7 +3148,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x64, .moves = { MOVE_SLUDGE_BOMB, @@ -3161,7 +3161,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x1C, .moves = { MOVE_DRAGON_CLAW, @@ -3174,7 +3174,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x5C, .moves = { MOVE_BLIZZARD, @@ -3187,7 +3187,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_DODRIO, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x5A, .moves = { MOVE_DRILL_PECK, @@ -3200,7 +3200,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_RAICHU, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x4A, .moves = { MOVE_THUNDERBOLT, @@ -3213,7 +3213,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x45, .moves = { MOVE_HYDRO_PUMP, @@ -3226,7 +3226,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x5D, .moves = { MOVE_MEGAHORN, @@ -3239,7 +3239,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x26, .moves = { MOVE_SURF, @@ -3252,7 +3252,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x5C, .moves = { MOVE_HYDRO_PUMP, @@ -3265,7 +3265,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x1D, .moves = { MOVE_DRAGON_CLAW, @@ -3278,7 +3278,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x3D, .moves = { MOVE_METEOR_MASH, @@ -3291,7 +3291,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGIROCK, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x3C, .moves = { MOVE_EARTHQUAKE, @@ -3304,7 +3304,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGICE, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x3C, .moves = { MOVE_ICE_BEAM, @@ -3317,7 +3317,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGISTEEL, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x3C, .moves = { MOVE_METAL_CLAW, @@ -3330,7 +3330,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x1E, .moves = { MOVE_MIST_BALL, @@ -3343,7 +3343,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .heldItem = BATTLE_TOWER_ITEM_LAX_INCENSE, .teamFlags = 0x1D, .moves = { MOVE_LUSTER_PURGE, @@ -3356,7 +3356,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x1A, .moves = { MOVE_HYDRO_PUMP, @@ -3369,7 +3369,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SLAKING, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x15, .moves = { MOVE_YAWN, @@ -3382,7 +3382,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x8C, .moves = { MOVE_LEAF_BLADE, @@ -3395,7 +3395,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .heldItem = BATTLE_TOWER_ITEM_GANLON_BERRY, .teamFlags = 0x8C, .moves = { MOVE_FOCUS_PUNCH, @@ -3408,7 +3408,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x8C, .moves = { MOVE_SURF, @@ -3421,7 +3421,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .heldItem = BATTLE_TOWER_ITEM_LAX_INCENSE, .teamFlags = 0x0A, .moves = { MOVE_PSYCHIC, @@ -3434,7 +3434,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x05, .moves = { MOVE_SPORE, @@ -3447,7 +3447,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x58, .moves = { MOVE_PSYCHIC, @@ -3460,7 +3460,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x05, .moves = { MOVE_REVENGE, @@ -3473,7 +3473,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x0A, .moves = { MOVE_RAIN_DANCE, @@ -3486,7 +3486,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x48, .moves = { MOVE_SLUDGE_BOMB, @@ -3499,7 +3499,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x5D, .moves = { MOVE_CROSS_CHOP, @@ -3512,7 +3512,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x08, .moves = { MOVE_THUNDERBOLT, @@ -3525,7 +3525,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x60, .moves = { MOVE_THUNDER, @@ -3538,7 +3538,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x64, .moves = { MOVE_SLUDGE_BOMB, @@ -3551,7 +3551,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .heldItem = BATTLE_TOWER_ITEM_LAX_INCENSE, .teamFlags = 0x0C, .moves = { MOVE_DRAGON_CLAW, @@ -3564,7 +3564,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x4C, .moves = { MOVE_SURF, @@ -3577,7 +3577,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x4A, .moves = { MOVE_LEECH_SEED, @@ -3590,7 +3590,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SKARMORY, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x4B, .moves = { MOVE_DRILL_PECK, @@ -3603,7 +3603,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x49, .moves = { MOVE_SURF, @@ -3616,7 +3616,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x5D, .moves = { MOVE_MEGAHORN, @@ -3629,7 +3629,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x26, .moves = { MOVE_SURF, @@ -3642,7 +3642,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x5C, .moves = { MOVE_SURF, @@ -3655,7 +3655,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x1D, .moves = { MOVE_DRAGON_CLAW, @@ -3668,7 +3668,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x3D, .moves = { MOVE_METEOR_MASH, @@ -3681,7 +3681,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGIROCK, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x3C, .moves = { MOVE_EARTHQUAKE, @@ -3694,7 +3694,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGICE, - .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .heldItem = BATTLE_TOWER_ITEM_LAX_INCENSE, .teamFlags = 0x3C, .moves = { MOVE_ICE_BEAM, @@ -3707,7 +3707,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_REGISTEEL, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x3C, .moves = { MOVE_METAL_CLAW, @@ -3720,7 +3720,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x1E, .moves = { MOVE_MIST_BALL, @@ -3733,7 +3733,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .heldItem = BATTLE_TOWER_ITEM_GANLON_BERRY, .teamFlags = 0x1D, .moves = { MOVE_LUSTER_PURGE, @@ -3746,7 +3746,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x1A, .moves = { MOVE_SURF, @@ -3759,7 +3759,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALTARIA, - .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .heldItem = BATTLE_TOWER_ITEM_GANLON_BERRY, .teamFlags = 0x0A, .moves = { MOVE_DRAGON_CLAW, @@ -3772,7 +3772,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x9C, .moves = { MOVE_LEAF_BLADE, @@ -3785,7 +3785,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x9C, .moves = { MOVE_BLAZE_KICK, @@ -3798,7 +3798,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x9C, .moves = { MOVE_SURF, @@ -3811,7 +3811,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SHEDINJA, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x20, .moves = { MOVE_CONFUSE_RAY, @@ -3824,7 +3824,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x1D, .moves = { MOVE_METEOR_MASH, @@ -3837,7 +3837,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x58, .moves = { MOVE_PSYCHIC, @@ -3850,7 +3850,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x1E, .moves = { MOVE_MIST_BALL, @@ -3863,7 +3863,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x1D, .moves = { MOVE_LUSTER_PURGE, @@ -3876,7 +3876,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x1D, .moves = { MOVE_DRAGON_CLAW, @@ -3889,7 +3889,7 @@ const struct BattleTowerPokemon gBattleTowerLevel100Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x5D, .moves = { MOVE_CROSS_CHOP, diff --git a/src/data/battle_tower/level_50_mons.h b/src/data/battle_tower/level_50_mons.h index 8e1463a86..c61f840af 100644 --- a/src/data/battle_tower/level_50_mons.h +++ b/src/data/battle_tower/level_50_mons.h @@ -2,7 +2,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = { { .species = SPECIES_PIKACHU, - .item = BATTLE_TOWER_ITEM_ORAN_BERRY, + .heldItem = BATTLE_TOWER_ITEM_ORAN_BERRY, .teamFlags = 0x42, .moves = { MOVE_QUICK_ATTACK, @@ -15,7 +15,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BEAUTIFLY, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x41, .moves = { MOVE_ABSORB, @@ -28,7 +28,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWELLOW, - .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .heldItem = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x07, .moves = { MOVE_PECK, @@ -41,7 +41,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x0B, .moves = { MOVE_HAIL, @@ -54,7 +54,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SEAKING, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x07, .moves = { MOVE_PECK, @@ -67,7 +67,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TORCHIC, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x42, .moves = { MOVE_FIRE_SPIN, @@ -80,7 +80,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MASQUERAIN, - .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .heldItem = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x41, .moves = { MOVE_STUN_SPORE, @@ -93,7 +93,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ILLUMISE, - .item = BATTLE_TOWER_ITEM_NONE, + .heldItem = BATTLE_TOWER_ITEM_NONE, .teamFlags = 0x41, .moves = { MOVE_FLATTER, @@ -106,7 +106,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DELCATTY, - .item = BATTLE_TOWER_ITEM_SILK_SCARF, + .heldItem = BATTLE_TOWER_ITEM_SILK_SCARF, .teamFlags = 0x42, .moves = { MOVE_ATTRACT, @@ -119,7 +119,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KECLEON, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x0B, .moves = { MOVE_TAIL_WHIP, @@ -132,7 +132,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MIGHTYENA, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x05, .moves = { MOVE_BITE, @@ -145,7 +145,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SLAKING, - .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .heldItem = BATTLE_TOWER_ITEM_BLACK_GLASSES, .teamFlags = 0x05, .moves = { MOVE_FAINT_ATTACK, @@ -158,7 +158,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MACHOKE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x05, .moves = { MOVE_LEER, @@ -171,7 +171,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RHYDON, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x05, .moves = { MOVE_STRENGTH, @@ -184,7 +184,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CACTURNE, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x0B, .moves = { MOVE_POISON_STING, @@ -197,7 +197,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ZIGZAGOON, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x0A, .moves = { MOVE_FLAIL, @@ -210,7 +210,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DODRIO, - .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .heldItem = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x03, .moves = { MOVE_PURSUIT, @@ -223,7 +223,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WHISCASH, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x0B, .moves = { MOVE_WATER_GUN, @@ -236,7 +236,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_NINJASK, - .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .heldItem = BATTLE_TOWER_ITEM_SILVER_POWDER, .teamFlags = 0x41, .moves = { MOVE_SAND_ATTACK, @@ -249,7 +249,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DUSCLOPS, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x01, .moves = { MOVE_PROTECT, @@ -262,7 +262,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CAMERUPT, - .item = BATTLE_TOWER_ITEM_CHARCOAL, + .heldItem = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x07, .moves = { MOVE_DIG, @@ -275,7 +275,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SPINDA, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x4A, .moves = { MOVE_TEETER_DANCE, @@ -288,7 +288,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SEVIPER, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x09, .moves = { MOVE_SCREECH, @@ -301,7 +301,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x49, .moves = { MOVE_SAND_ATTACK, @@ -314,7 +314,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_AZUMARILL, - .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .heldItem = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x42, .moves = { MOVE_BUBBLE_BEAM, @@ -327,7 +327,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ZANGOOSE, - .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .heldItem = BATTLE_TOWER_ITEM_MENTAL_HERB, .teamFlags = 0x07, .moves = { MOVE_STRENGTH, @@ -340,7 +340,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MEDICHAM, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x07, .moves = { MOVE_REVERSAL, @@ -353,7 +353,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ROSELIA, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x0A, .moves = { MOVE_GROWTH, @@ -366,7 +366,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWALOT, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x0B, .moves = { MOVE_STOCKPILE, @@ -379,7 +379,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MAGNETON, - .item = BATTLE_TOWER_ITEM_MAGNET, + .heldItem = BATTLE_TOWER_ITEM_MAGNET, .teamFlags = 0x0B, .moves = { MOVE_SUPERSONIC, @@ -392,7 +392,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .heldItem = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x09, .moves = { MOVE_CONFUSION, @@ -405,7 +405,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RELICANTH, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x01, .moves = { MOVE_SURF, @@ -418,7 +418,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_NINETALES, - .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .heldItem = BATTLE_TOWER_ITEM_RAWST_BERRY, .teamFlags = 0x03, .moves = { MOVE_CONFUSE_RAY, @@ -431,7 +431,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHARPEDO, - .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .heldItem = BATTLE_TOWER_ITEM_BLACK_GLASSES, .teamFlags = 0x05, .moves = { MOVE_BITE, @@ -444,7 +444,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GIRAFARIG, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x03, .moves = { MOVE_STRENGTH, @@ -457,7 +457,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_PELIPPER, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0B, .moves = { MOVE_MIST, @@ -470,7 +470,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SABLEYE, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x09, .moves = { MOVE_SHADOW_BALL, @@ -483,7 +483,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LUNATONE, - .item = BATTLE_TOWER_ITEM_HARD_STONE, + .heldItem = BATTLE_TOWER_ITEM_HARD_STONE, .teamFlags = 0x0B, .moves = { MOVE_COSMIC_POWER, @@ -496,7 +496,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_NONE, + .heldItem = BATTLE_TOWER_ITEM_NONE, .teamFlags = 0x0B, .moves = { MOVE_THIEF, @@ -509,7 +509,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GRUMPIG, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x0B, .moves = { MOVE_ODOR_SLEUTH, @@ -522,7 +522,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x0B, .moves = { MOVE_CUT, @@ -535,7 +535,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WAILORD, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x03, .moves = { MOVE_WATER_SPOUT, @@ -548,7 +548,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WEEZING, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x05, .moves = { MOVE_SMOG, @@ -561,7 +561,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KADABRA, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x0B, .moves = { MOVE_FUTURE_SIGHT, @@ -574,7 +574,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_MAGNET, + .heldItem = BATTLE_TOWER_ITEM_MAGNET, .teamFlags = 0x07, .moves = { MOVE_THUNDER_WAVE, @@ -587,7 +587,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RAICHU, - .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .heldItem = BATTLE_TOWER_ITEM_ASPEAR_BERRY, .teamFlags = 0x03, .moves = { MOVE_QUICK_ATTACK, @@ -600,7 +600,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_XATU, - .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .heldItem = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x03, .moves = { MOVE_NIGHT_SHADE, @@ -613,7 +613,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LOUDRED, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x05, .moves = { MOVE_UPROAR, @@ -626,7 +626,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SOLROCK, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x03, .moves = { MOVE_ROCK_THROW, @@ -639,7 +639,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CLAYDOL, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x03, .moves = { MOVE_SANDSTORM, @@ -652,7 +652,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CRAWDAUNT, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x03, .moves = { MOVE_WATER_PULSE, @@ -665,7 +665,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLBAT, - .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .heldItem = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x09, .moves = { MOVE_CONFUSE_RAY, @@ -678,7 +678,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BELLOSSOM, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x0A, .moves = { MOVE_SOLAR_BEAM, @@ -691,7 +691,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DONPHAN, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x05, .moves = { MOVE_ROCK_SMASH, @@ -704,7 +704,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_NOSEPASS, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x0B, .moves = { MOVE_SANDSTORM, @@ -717,7 +717,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_PINSIR, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x05, .moves = { MOVE_SWORDS_DANCE, @@ -730,7 +730,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x0B, .moves = { MOVE_DISABLE, @@ -743,7 +743,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHIFTRY, - .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .heldItem = BATTLE_TOWER_ITEM_MENTAL_HERB, .teamFlags = 0x07, .moves = { MOVE_TORMENT, @@ -756,7 +756,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DUSTOX, - .item = BATTLE_TOWER_ITEM_SILVER_POWDER, + .heldItem = BATTLE_TOWER_ITEM_SILVER_POWDER, .teamFlags = 0x01, .moves = { MOVE_CONFUSION, @@ -769,7 +769,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHUPPET, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x03, .moves = { MOVE_WILL_O_WISP, @@ -782,7 +782,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SEAKING, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x07, .moves = { MOVE_RAIN_DANCE, @@ -795,7 +795,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SKARMORY, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x07, .moves = { MOVE_STEEL_WING, @@ -808,7 +808,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TORKOAL, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x43, .moves = { MOVE_FLAMETHROWER, @@ -821,7 +821,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLEM, - .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .heldItem = BATTLE_TOWER_ITEM_SOFT_SAND, .teamFlags = 0x05, .moves = { MOVE_MAGNITUDE, @@ -834,7 +834,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .heldItem = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x41, .moves = { MOVE_REFLECT, @@ -847,7 +847,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SANDSLASH, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x07, .moves = { MOVE_SANDSTORM, @@ -860,7 +860,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WOBBUFFET, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x0B, .moves = { MOVE_COUNTER, @@ -873,7 +873,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TENTACRUEL, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x05, .moves = { MOVE_CONSTRICT, @@ -886,7 +886,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TROPIUS, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x05, .moves = { MOVE_SUNNY_DAY, @@ -899,7 +899,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MAWILE, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x43, .moves = { MOVE_IRON_DEFENSE, @@ -912,7 +912,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .heldItem = BATTLE_TOWER_ITEM_RAWST_BERRY, .teamFlags = 0x09, .moves = { MOVE_SLUDGE, @@ -925,7 +925,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MAGCARGO, - .item = BATTLE_TOWER_ITEM_CHARCOAL, + .heldItem = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x0D, .moves = { MOVE_FLAMETHROWER, @@ -938,7 +938,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LINOONE, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x07, .moves = { MOVE_HEADBUTT, @@ -951,7 +951,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_ASPEAR_BERRY, + .heldItem = BATTLE_TOWER_ITEM_ASPEAR_BERRY, .teamFlags = 0x05, .moves = { MOVE_LIGHT_SCREEN, @@ -964,7 +964,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DUSCLOPS, - .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .heldItem = BATTLE_TOWER_ITEM_SPELL_TAG, .teamFlags = 0x09, .moves = { MOVE_MEAN_LOOK, @@ -977,7 +977,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_VILEPLUME, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x0A, .moves = { MOVE_TOXIC, @@ -990,7 +990,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x05, .moves = { MOVE_BITE, @@ -1003,7 +1003,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CORSOLA, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x0A, .moves = { MOVE_RECOVER, @@ -1016,7 +1016,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x0B, .moves = { MOVE_RAPID_SPIN, @@ -1029,7 +1029,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_EXPLOUD, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x41, .moves = { MOVE_HYPER_BEAM, @@ -1042,7 +1042,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .heldItem = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x0B, .moves = { MOVE_PSYBEAM, @@ -1055,7 +1055,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x05, .moves = { MOVE_HORN_ATTACK, @@ -1068,7 +1068,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CASTFORM, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0B, .moves = { MOVE_WEATHER_BALL, @@ -1081,7 +1081,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_VIGOROTH, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x05, .moves = { MOVE_FOCUS_PUNCH, @@ -1094,7 +1094,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DUSKULL, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x09, .moves = { MOVE_TOXIC, @@ -1107,7 +1107,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LANTURN, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x07, .moves = { MOVE_FLAIL, @@ -1120,7 +1120,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x05, .moves = { MOVE_STRENGTH, @@ -1133,7 +1133,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x43, .moves = { MOVE_AGILITY, @@ -1146,7 +1146,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GYARADOS, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x41, .moves = { MOVE_RAIN_DANCE, @@ -1159,7 +1159,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_AGGRON, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x45, .moves = { MOVE_EARTHQUAKE, @@ -1172,7 +1172,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ABSOL, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0xC7, .moves = { MOVE_SWORDS_DANCE, @@ -1185,7 +1185,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWELLOW, - .item = BATTLE_TOWER_ITEM_SHARP_BEAK, + .heldItem = BATTLE_TOWER_ITEM_SHARP_BEAK, .teamFlags = 0x0F, .moves = { MOVE_DOUBLE_TEAM, @@ -1198,7 +1198,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .heldItem = BATTLE_TOWER_ITEM_BLACK_BELT, .teamFlags = 0x05, .moves = { MOVE_STRENGTH, @@ -1211,7 +1211,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .heldItem = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, .teamFlags = 0x41, .moves = { MOVE_PROTECT, @@ -1224,7 +1224,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_MIRACLE_SEED, + .heldItem = BATTLE_TOWER_ITEM_MIRACLE_SEED, .teamFlags = 0x41, .moves = { MOVE_LEAF_BLADE, @@ -1237,7 +1237,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_CHARCOAL, + .heldItem = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x41, .moves = { MOVE_BLAZE_KICK, @@ -1250,7 +1250,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALTARIA, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x43, .moves = { MOVE_DRAGON_CLAW, @@ -1263,7 +1263,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .heldItem = BATTLE_TOWER_ITEM_BLACK_BELT, .teamFlags = 0x43, .moves = { MOVE_BRICK_BREAK, @@ -1276,7 +1276,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SABLEYE, - .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .heldItem = BATTLE_TOWER_ITEM_SPELL_TAG, .teamFlags = 0x49, .moves = { MOVE_SHADOW_BALL, @@ -1289,7 +1289,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ZANGOOSE, - .item = BATTLE_TOWER_ITEM_BLACK_GLASSES, + .heldItem = BATTLE_TOWER_ITEM_BLACK_GLASSES, .teamFlags = 0x0F, .moves = { MOVE_FACADE, @@ -1302,7 +1302,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LINOONE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x0F, .moves = { MOVE_IRON_TAIL, @@ -1315,7 +1315,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WHISCASH, - .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .heldItem = BATTLE_TOWER_ITEM_SOFT_SAND, .teamFlags = 0x07, .moves = { MOVE_MUD_SLAP, @@ -1328,7 +1328,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SOLROCK, - .item = BATTLE_TOWER_ITEM_HARD_STONE, + .heldItem = BATTLE_TOWER_ITEM_HARD_STONE, .teamFlags = 0x43, .moves = { MOVE_EARTHQUAKE, @@ -1341,7 +1341,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x03, .moves = { MOVE_RECOVER, @@ -1354,7 +1354,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CACTURNE, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x0F, .moves = { MOVE_INGRAIN, @@ -1367,7 +1367,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHIFTRY, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x05, .moves = { MOVE_FRUSTRATION, @@ -1380,7 +1380,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_MAGNET, + .heldItem = BATTLE_TOWER_ITEM_MAGNET, .teamFlags = 0x0F, .moves = { MOVE_THUNDER, @@ -1393,7 +1393,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KECLEON, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0xC3, .moves = { MOVE_THUNDERBOLT, @@ -1406,7 +1406,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_PINSIR, - .item = BATTLE_TOWER_ITEM_SOFT_SAND, + .heldItem = BATTLE_TOWER_ITEM_SOFT_SAND, .teamFlags = 0x8D, .moves = { MOVE_GUILLOTINE, @@ -1419,7 +1419,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_METANG, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x05, .moves = { MOVE_EARTHQUAKE, @@ -1432,7 +1432,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CLAYDOL, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x43, .moves = { MOVE_EARTHQUAKE, @@ -1445,7 +1445,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MASQUERAIN, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x0A, .moves = { MOVE_TOXIC, @@ -1458,7 +1458,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RELICANTH, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0xC5, .moves = { MOVE_ROCK_TOMB, @@ -1471,7 +1471,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x0D, .moves = { MOVE_SURF, @@ -1484,7 +1484,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WAILORD, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x0B, .moves = { MOVE_WATER_SPOUT, @@ -1497,7 +1497,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GIRAFARIG, - .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .heldItem = BATTLE_TOWER_ITEM_GANLON_BERRY, .teamFlags = 0x4F, .moves = { MOVE_DOUBLE_TEAM, @@ -1510,7 +1510,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MEDICHAM, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x4B, .moves = { MOVE_CALM_MIND, @@ -1523,7 +1523,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TROPIUS, - .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .heldItem = BATTLE_TOWER_ITEM_MENTAL_HERB, .teamFlags = 0xC7, .moves = { MOVE_EARTHQUAKE, @@ -1536,7 +1536,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_NINJASK, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x05, .moves = { MOVE_DOUBLE_TEAM, @@ -1549,7 +1549,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CAMERUPT, - .item = BATTLE_TOWER_ITEM_CHARCOAL, + .heldItem = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x0D, .moves = { MOVE_EARTHQUAKE, @@ -1562,7 +1562,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHARPEDO, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x05, .moves = { MOVE_CRUNCH, @@ -1575,7 +1575,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WIGGLYTUFF, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x0E, .moves = { MOVE_PROTECT, @@ -1588,7 +1588,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SEVIPER, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x05, .moves = { MOVE_SLUDGE_BOMB, @@ -1601,7 +1601,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CRADILY, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0xC1, .moves = { MOVE_ROCK_TOMB, @@ -1614,7 +1614,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ARMALDO, - .item = BATTLE_TOWER_ITEM_RAWST_BERRY, + .heldItem = BATTLE_TOWER_ITEM_RAWST_BERRY, .teamFlags = 0xC1, .moves = { MOVE_EARTHQUAKE, @@ -1627,7 +1627,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MAGNETON, - .item = BATTLE_TOWER_ITEM_PERSIM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PERSIM_BERRY, .teamFlags = 0x0D, .moves = { MOVE_ZAP_CANNON, @@ -1640,7 +1640,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LANTURN, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x06, .moves = { MOVE_THUNDER, @@ -1653,7 +1653,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWALOT, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x8B, .moves = { MOVE_SLUDGE_BOMB, @@ -1666,7 +1666,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SKARMORY, - .item = BATTLE_TOWER_ITEM_METAL_COAT, + .heldItem = BATTLE_TOWER_ITEM_METAL_COAT, .teamFlags = 0x81, .moves = { MOVE_STEEL_WING, @@ -1679,7 +1679,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DONPHAN, - .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .heldItem = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x0D, .moves = { MOVE_EARTHQUAKE, @@ -1692,7 +1692,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x41, .moves = { MOVE_FACADE, @@ -1705,7 +1705,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BANETTE, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x83, .moves = { MOVE_SHADOW_BALL, @@ -1718,7 +1718,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SANDSLASH, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x0F, .moves = { MOVE_SANDSTORM, @@ -1731,7 +1731,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CRAWDAUNT, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x05, .moves = { MOVE_GUILLOTINE, @@ -1744,7 +1744,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GRUMPIG, - .item = BATTLE_TOWER_ITEM_TWISTED_SPOON, + .heldItem = BATTLE_TOWER_ITEM_TWISTED_SPOON, .teamFlags = 0x8B, .moves = { MOVE_MAGIC_COAT, @@ -1757,7 +1757,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RHYDON, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x45, .moves = { MOVE_IRON_TAIL, @@ -1770,7 +1770,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x8B, .moves = { MOVE_PSYCHIC, @@ -1783,7 +1783,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DUSCLOPS, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x41, .moves = { MOVE_SHADOW_BALL, @@ -1796,7 +1796,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TORKOAL, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x09, .moves = { MOVE_FLAMETHROWER, @@ -1809,7 +1809,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x09, .moves = { MOVE_SCREECH, @@ -1822,7 +1822,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x0B, .moves = { MOVE_IRON_TAIL, @@ -1835,7 +1835,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_POISON_BARB, + .heldItem = BATTLE_TOWER_ITEM_POISON_BARB, .teamFlags = 0x05, .moves = { MOVE_SLUDGE_BOMB, @@ -1848,7 +1848,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WEEZING, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x05, .moves = { MOVE_EXPLOSION, @@ -1861,7 +1861,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RAICHU, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x4E, .moves = { MOVE_THUNDERBOLT, @@ -1874,7 +1874,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TENTACRUEL, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0x09, .moves = { MOVE_DOUBLE_TEAM, @@ -1887,7 +1887,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_EXPLOUD, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x05, .moves = { MOVE_BLIZZARD, @@ -1900,7 +1900,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_XATU, - .item = BATTLE_TOWER_ITEM_WHITE_HERB, + .heldItem = BATTLE_TOWER_ITEM_WHITE_HERB, .teamFlags = 0x43, .moves = { MOVE_PSYCHIC, @@ -1913,7 +1913,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLEM, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x05, .moves = { MOVE_EXPLOSION, @@ -1926,7 +1926,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x83, .moves = { MOVE_SURF, @@ -1939,7 +1939,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_NINETALES, - .item = BATTLE_TOWER_ITEM_CHARCOAL, + .heldItem = BATTLE_TOWER_ITEM_CHARCOAL, .teamFlags = 0x4A, .moves = { MOVE_FLAMETHROWER, @@ -1952,7 +1952,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x13, .moves = { MOVE_DOUBLE_TEAM, @@ -1965,7 +1965,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SLAKING, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x03, .moves = { MOVE_CURSE, @@ -1978,7 +1978,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GYARADOS, - .item = BATTLE_TOWER_ITEM_CHERI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHERI_BERRY, .teamFlags = 0x03, .moves = { MOVE_THUNDER, @@ -1991,7 +1991,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x21, .moves = { MOVE_BELLY_DRUM, @@ -2004,7 +2004,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ABSOL, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0xC3, .moves = { MOVE_FAINT_ATTACK, @@ -2017,7 +2017,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALTARIA, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x83, .moves = { MOVE_DRAGON_DANCE, @@ -2030,7 +2030,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_BLACK_BELT, + .heldItem = BATTLE_TOWER_ITEM_BLACK_BELT, .teamFlags = 0x11, .moves = { MOVE_CROSS_CHOP, @@ -2043,7 +2043,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_DRAGON_FANG, + .heldItem = BATTLE_TOWER_ITEM_DRAGON_FANG, .teamFlags = 0x43, .moves = { MOVE_CRUNCH, @@ -2056,7 +2056,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x33, .moves = { MOVE_COUNTER, @@ -2069,7 +2069,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GLALIE, - .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .heldItem = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, .teamFlags = 0x81, .moves = { MOVE_BLIZZARD, @@ -2082,7 +2082,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HUNTAIL, - .item = BATTLE_TOWER_ITEM_MYSTIC_WATER, + .heldItem = BATTLE_TOWER_ITEM_MYSTIC_WATER, .teamFlags = 0xA1, .moves = { MOVE_RAIN_DANCE, @@ -2095,7 +2095,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .heldItem = BATTLE_TOWER_ITEM_GANLON_BERRY, .teamFlags = 0xD3, .moves = { MOVE_SURF, @@ -2108,7 +2108,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOREBYSS, - .item = BATTLE_TOWER_ITEM_PECHA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PECHA_BERRY, .teamFlags = 0x83, .moves = { MOVE_PSYCHIC, @@ -2121,7 +2121,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x53, .moves = { MOVE_LEAF_BLADE, @@ -2134,7 +2134,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x53, .moves = { MOVE_EARTHQUAKE, @@ -2147,7 +2147,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_AGGRON, - .item = BATTLE_TOWER_ITEM_MENTAL_HERB, + .heldItem = BATTLE_TOWER_ITEM_MENTAL_HERB, .teamFlags = 0x41, .moves = { MOVE_DOUBLE_EDGE, @@ -2160,7 +2160,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CRADILY, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0xE1, .moves = { MOVE_STOCKPILE, @@ -2173,7 +2173,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ARMALDO, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0xC1, .moves = { MOVE_EARTHQUAKE, @@ -2186,7 +2186,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x82, .moves = { MOVE_FOCUS_PUNCH, @@ -2199,7 +2199,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x83, .moves = { MOVE_RAIN_DANCE, @@ -2212,7 +2212,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHIFTRY, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x03, .moves = { MOVE_TORMENT, @@ -2225,7 +2225,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TROPIUS, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0xC3, .moves = { MOVE_SUNNY_DAY, @@ -2238,7 +2238,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GRUMPIG, - .item = BATTLE_TOWER_ITEM_MACHO_BRACE, + .heldItem = BATTLE_TOWER_ITEM_MACHO_BRACE, .teamFlags = 0x23, .moves = { MOVE_TRICK, @@ -2251,7 +2251,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TORKOAL, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x81, .moves = { MOVE_IRON_DEFENSE, @@ -2264,7 +2264,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_NONE, + .heldItem = BATTLE_TOWER_ITEM_NONE, .teamFlags = 0x03, .moves = { MOVE_THUNDERBOLT, @@ -2277,7 +2277,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_PINSIR, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x61, .moves = { MOVE_GUILLOTINE, @@ -2290,7 +2290,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x93, .moves = { MOVE_LIGHT_SCREEN, @@ -2303,7 +2303,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x51, .moves = { MOVE_MEGAHORN, @@ -2316,7 +2316,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + .heldItem = BATTLE_TOWER_ITEM_NEVER_MELT_ICE, .teamFlags = 0x83, .moves = { MOVE_BLIZZARD, @@ -2329,7 +2329,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x13, .moves = { MOVE_PSYCHIC, @@ -2342,7 +2342,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x93, .moves = { MOVE_SURF, @@ -2355,7 +2355,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGICE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x11, .moves = { MOVE_REST, @@ -2368,7 +2368,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGISTEEL, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x11, .moves = { MOVE_REST, @@ -2381,7 +2381,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGIROCK, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x91, .moves = { MOVE_ROCK_TOMB, @@ -2394,7 +2394,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DUSCLOPS, - .item = BATTLE_TOWER_ITEM_SPELL_TAG, + .heldItem = BATTLE_TOWER_ITEM_SPELL_TAG, .teamFlags = 0x20, .moves = { MOVE_SHADOW_BALL, @@ -2407,7 +2407,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SEAKING, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0xB2, .moves = { MOVE_HORN_DRILL, @@ -2420,7 +2420,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CAMERUPT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x00, .moves = { MOVE_EARTHQUAKE, @@ -2433,7 +2433,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LANTURN, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x82, .moves = { MOVE_THUNDERBOLT, @@ -2446,7 +2446,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WEEZING, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x20, .moves = { MOVE_SLUDGE_BOMB, @@ -2459,7 +2459,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WHISCASH, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x41, .moves = { MOVE_EARTHQUAKE, @@ -2472,7 +2472,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_AGGRON, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x11, .moves = { MOVE_DOUBLE_EDGE, @@ -2485,7 +2485,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CACTURNE, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x63, .moves = { MOVE_DYNAMIC_PUNCH, @@ -2498,7 +2498,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHARPEDO, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x01, .moves = { MOVE_CRUNCH, @@ -2511,7 +2511,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ABSOL, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x82, .moves = { MOVE_DOUBLE_EDGE, @@ -2524,7 +2524,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WAILORD, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x23, .moves = { MOVE_HYDRO_PUMP, @@ -2537,7 +2537,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_TENTACRUEL, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x21, .moves = { MOVE_HYDRO_PUMP, @@ -2550,7 +2550,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0xA2, .moves = { MOVE_RAIN_DANCE, @@ -2563,7 +2563,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WOBBUFFET, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x23, .moves = { MOVE_ENCORE, @@ -2576,7 +2576,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RHYDON, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x21, .moves = { MOVE_EARTHQUAKE, @@ -2589,7 +2589,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GLALIE, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x21, .moves = { MOVE_CRUNCH, @@ -2602,7 +2602,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x13, .moves = { MOVE_LEAF_BLADE, @@ -2615,7 +2615,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x17, .moves = { MOVE_BLAZE_KICK, @@ -2628,7 +2628,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x17, .moves = { MOVE_SURF, @@ -2641,7 +2641,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x19, .moves = { MOVE_PSYCHIC, @@ -2654,7 +2654,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0xF6, .moves = { MOVE_SPORE, @@ -2667,7 +2667,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_GANLON_BERRY, + .heldItem = BATTLE_TOWER_ITEM_GANLON_BERRY, .teamFlags = 0x1B, .moves = { MOVE_PSYCHIC, @@ -2680,7 +2680,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHIFTRY, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x89, .moves = { MOVE_FAINT_ATTACK, @@ -2693,7 +2693,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x85, .moves = { MOVE_CROSS_CHOP, @@ -2706,7 +2706,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x49, .moves = { MOVE_ATTRACT, @@ -2719,7 +2719,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x15, .moves = { MOVE_CROSS_CHOP, @@ -2732,7 +2732,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x0B, .moves = { MOVE_THUNDERBOLT, @@ -2745,7 +2745,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x27, .moves = { MOVE_THUNDERBOLT, @@ -2758,7 +2758,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x05, .moves = { MOVE_SLUDGE_BOMB, @@ -2771,7 +2771,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x4D, .moves = { MOVE_DRAGON_CLAW, @@ -2784,7 +2784,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x1B, .moves = { MOVE_SURF, @@ -2797,7 +2797,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_DODRIO, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x2B, .moves = { MOVE_DRILL_PECK, @@ -2810,7 +2810,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RAICHU, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x0A, .moves = { MOVE_THUNDERBOLT, @@ -2823,7 +2823,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x0A, .moves = { MOVE_SURF, @@ -2836,7 +2836,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x54, .moves = { MOVE_MEGAHORN, @@ -2849,7 +2849,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x06, .moves = { MOVE_SURF, @@ -2862,7 +2862,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x1D, .moves = { MOVE_SURF, @@ -2875,7 +2875,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x9C, .moves = { MOVE_DRAGON_CLAW, @@ -2888,7 +2888,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x15, .moves = { MOVE_METEOR_MASH, @@ -2901,7 +2901,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGIROCK, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0xB5, .moves = { MOVE_EARTHQUAKE, @@ -2914,7 +2914,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGICE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x96, .moves = { MOVE_ICE_BEAM, @@ -2927,7 +2927,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGISTEEL, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x94, .moves = { MOVE_METAL_CLAW, @@ -2940,7 +2940,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x96, .moves = { MOVE_MIST_BALL, @@ -2953,7 +2953,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x95, .moves = { MOVE_LUSTER_PURGE, @@ -2966,7 +2966,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x96, .moves = { MOVE_SURF, @@ -2979,7 +2979,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SLAKING, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x05, .moves = { MOVE_HYPER_BEAM, @@ -2992,7 +2992,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x1F, .moves = { MOVE_GIGA_DRAIN, @@ -3005,7 +3005,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x17, .moves = { MOVE_BLAZE_KICK, @@ -3018,7 +3018,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x17, .moves = { MOVE_MUDDY_WATER, @@ -3031,7 +3031,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x7B, .moves = { MOVE_PSYCHIC, @@ -3044,7 +3044,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x56, .moves = { MOVE_SPORE, @@ -3057,7 +3057,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x0A, .moves = { MOVE_PSYCHIC, @@ -3070,7 +3070,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_FOCUS_BAND, + .heldItem = BATTLE_TOWER_ITEM_FOCUS_BAND, .teamFlags = 0x05, .moves = { MOVE_CROSS_CHOP, @@ -3083,7 +3083,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GYARADOS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x0C, .moves = { MOVE_HYPER_BEAM, @@ -3096,7 +3096,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x49, .moves = { MOVE_TOXIC, @@ -3109,7 +3109,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x15, .moves = { MOVE_CROSS_CHOP, @@ -3122,7 +3122,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x63, .moves = { MOVE_THUNDER, @@ -3135,7 +3135,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x07, .moves = { MOVE_THUNDERBOLT, @@ -3148,7 +3148,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x45, .moves = { MOVE_SLUDGE_BOMB, @@ -3161,7 +3161,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x4D, .moves = { MOVE_DRAGON_CLAW, @@ -3174,7 +3174,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x1B, .moves = { MOVE_LIGHT_SCREEN, @@ -3187,7 +3187,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_NINETALES, - .item = BATTLE_TOWER_ITEM_SITRUS_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SITRUS_BERRY, .teamFlags = 0x0A, .moves = { MOVE_CONFUSE_RAY, @@ -3200,7 +3200,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLEM, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x25, .moves = { MOVE_EARTHQUAKE, @@ -3213,7 +3213,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x27, .moves = { MOVE_HYDRO_PUMP, @@ -3226,7 +3226,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x55, .moves = { MOVE_MEGAHORN, @@ -3239,7 +3239,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x36, .moves = { MOVE_SURF, @@ -3252,7 +3252,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x5C, .moves = { MOVE_HYDRO_PUMP, @@ -3265,7 +3265,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x9D, .moves = { MOVE_DRAGON_CLAW, @@ -3278,7 +3278,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x15, .moves = { MOVE_METEOR_MASH, @@ -3291,7 +3291,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGIROCK, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x95, .moves = { MOVE_EARTHQUAKE, @@ -3304,7 +3304,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGICE, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x96, .moves = { MOVE_BLIZZARD, @@ -3317,7 +3317,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGISTEEL, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x94, .moves = { MOVE_METAL_CLAW, @@ -3330,7 +3330,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x96, .moves = { MOVE_MIST_BALL, @@ -3343,7 +3343,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x95, .moves = { MOVE_LUSTER_PURGE, @@ -3356,7 +3356,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0xD6, .moves = { MOVE_SURF, @@ -3369,7 +3369,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KECLEON, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x69, .moves = { MOVE_TRICK, @@ -3382,7 +3382,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x5F, .moves = { MOVE_LEAF_BLADE, @@ -3395,7 +3395,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x7F, .moves = { MOVE_FOCUS_PUNCH, @@ -3408,7 +3408,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x57, .moves = { MOVE_IRON_TAIL, @@ -3421,7 +3421,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GARDEVOIR, - .item = BATTLE_TOWER_ITEM_CHESTO_BERRY, + .heldItem = BATTLE_TOWER_ITEM_CHESTO_BERRY, .teamFlags = 0x3B, .moves = { MOVE_SHADOW_BALL, @@ -3434,7 +3434,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BRELOOM, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x56, .moves = { MOVE_SPORE, @@ -3447,7 +3447,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ALAKAZAM, - .item = BATTLE_TOWER_ITEM_CHOICE_BAND, + .heldItem = BATTLE_TOWER_ITEM_CHOICE_BAND, .teamFlags = 0x1A, .moves = { MOVE_PSYCHIC, @@ -3460,7 +3460,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HARIYAMA, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x65, .moves = { MOVE_REVENGE, @@ -3473,7 +3473,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x54, .moves = { MOVE_RAIN_DANCE, @@ -3486,7 +3486,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_CROBAT, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0x4B, .moves = { MOVE_SLUDGE_BOMB, @@ -3499,7 +3499,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x75, .moves = { MOVE_CROSS_CHOP, @@ -3512,7 +3512,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MANECTRIC, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x0A, .moves = { MOVE_THUNDERBOLT, @@ -3525,7 +3525,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_ELECTRODE, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x64, .moves = { MOVE_THUNDER, @@ -3538,7 +3538,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MUK, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x49, .moves = { MOVE_SLUDGE_BOMB, @@ -3551,7 +3551,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_FLYGON, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0xCD, .moves = { MOVE_PROTECT, @@ -3564,7 +3564,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x5B, .moves = { MOVE_SURF, @@ -3577,7 +3577,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LUDICOLO, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0x1A, .moves = { MOVE_RAIN_DANCE, @@ -3590,7 +3590,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_RAICHU, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x4A, .moves = { MOVE_THUNDER, @@ -3603,7 +3603,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GOLDUCK, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x0A, .moves = { MOVE_SURF, @@ -3616,7 +3616,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_HERACROSS, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0x15, .moves = { MOVE_MEGAHORN, @@ -3629,7 +3629,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_WALREIN, - .item = BATTLE_TOWER_ITEM_LEPPA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LEPPA_BERRY, .teamFlags = 0x26, .moves = { MOVE_SURF, @@ -3642,7 +3642,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_KINGDRA, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x4D, .moves = { MOVE_HYDRO_PUMP, @@ -3655,7 +3655,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SALAMENCE, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x9C, .moves = { MOVE_DRAGON_CLAW, @@ -3668,7 +3668,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_LIECHI_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LIECHI_BERRY, .teamFlags = 0xB5, .moves = { MOVE_METEOR_MASH, @@ -3681,7 +3681,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGIROCK, - .item = BATTLE_TOWER_ITEM_APICOT_BERRY, + .heldItem = BATTLE_TOWER_ITEM_APICOT_BERRY, .teamFlags = 0x95, .moves = { MOVE_EARTHQUAKE, @@ -3694,7 +3694,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGICE, - .item = BATTLE_TOWER_ITEM_LAX_INCENSE, + .heldItem = BATTLE_TOWER_ITEM_LAX_INCENSE, .teamFlags = 0x96, .moves = { MOVE_ICE_BEAM, @@ -3707,7 +3707,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_REGISTEEL, - .item = BATTLE_TOWER_ITEM_LEFTOVERS, + .heldItem = BATTLE_TOWER_ITEM_LEFTOVERS, .teamFlags = 0xB4, .moves = { MOVE_CURSE, @@ -3720,7 +3720,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x92, .moves = { MOVE_MIST_BALL, @@ -3733,7 +3733,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0x91, .moves = { MOVE_LUSTER_PURGE, @@ -3746,7 +3746,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MILOTIC, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0xB2, .moves = { MOVE_SURF, @@ -3759,7 +3759,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SLAKING, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0x65, .moves = { MOVE_YAWN, @@ -3772,7 +3772,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SCEPTILE, - .item = BATTLE_TOWER_ITEM_SHELL_BELL, + .heldItem = BATTLE_TOWER_ITEM_SHELL_BELL, .teamFlags = 0xDF, .moves = { MOVE_LEAF_BLADE, @@ -3785,7 +3785,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_BLAZIKEN, - .item = BATTLE_TOWER_ITEM_SALAC_BERRY, + .heldItem = BATTLE_TOWER_ITEM_SALAC_BERRY, .teamFlags = 0xD7, .moves = { MOVE_BLAZE_KICK, @@ -3798,7 +3798,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SWAMPERT, - .item = BATTLE_TOWER_ITEM_PETAYA_BERRY, + .heldItem = BATTLE_TOWER_ITEM_PETAYA_BERRY, .teamFlags = 0x5F, .moves = { MOVE_SURF, @@ -3811,7 +3811,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_SHEDINJA, - .item = BATTLE_TOWER_ITEM_BRIGHT_POWDER, + .heldItem = BATTLE_TOWER_ITEM_BRIGHT_POWDER, .teamFlags = 0xDB, .moves = { MOVE_CONFUSE_RAY, @@ -3824,7 +3824,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_METAGROSS, - .item = BATTLE_TOWER_ITEM_QUICK_CLAW, + .heldItem = BATTLE_TOWER_ITEM_QUICK_CLAW, .teamFlags = 0x94, .moves = { MOVE_METEOR_MASH, @@ -3837,7 +3837,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_GRUMPIG, - .item = BATTLE_TOWER_ITEM_MACHO_BRACE, + .heldItem = BATTLE_TOWER_ITEM_MACHO_BRACE, .teamFlags = 0x4B, .moves = { MOVE_PSYCHIC, @@ -3850,7 +3850,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIAS, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x92, .moves = { MOVE_MIST_BALL, @@ -3863,7 +3863,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_LATIOS, - .item = BATTLE_TOWER_ITEM_KINGS_ROCK, + .heldItem = BATTLE_TOWER_ITEM_KINGS_ROCK, .teamFlags = 0x91, .moves = { MOVE_LUSTER_PURGE, @@ -3876,7 +3876,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_STARMIE, - .item = BATTLE_TOWER_ITEM_LUM_BERRY, + .heldItem = BATTLE_TOWER_ITEM_LUM_BERRY, .teamFlags = 0x1A, .moves = { MOVE_SURF, @@ -3889,7 +3889,7 @@ const struct BattleTowerPokemon gBattleTowerLevel50Mons[] = }, { .species = SPECIES_MACHAMP, - .item = BATTLE_TOWER_ITEM_SCOPE_LENS, + .heldItem = BATTLE_TOWER_ITEM_SCOPE_LENS, .teamFlags = 0x14, .moves = { MOVE_CROSS_CHOP, diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c index 953871c8b..5acdc3859 100644 --- a/src/de_rom_8040FE0.c +++ b/src/de_rom_8040FE0.c @@ -94,7 +94,7 @@ u8 *de_sub_8041024(s32 arg0, u32 arg1) { case 0x800: trainerClass = de_sub_81364F8(); - nameIndex = sub_8135FD8(); + nameIndex = GetEReaderTrainerNameIndex(); if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F) { return de_sub_8040FE0(FEMALE); @@ -196,7 +196,7 @@ _08041086:\n\ bl de_sub_81364F8\n\ lsls r0, 24\n\ lsrs r4, r0, 24\n\ - bl sub_8135FD8\n\ + bl GetEReaderTrainerNameIndex\n\ b _08041070\n\ _08041094:\n\ movs r0, 0x1\n\ diff --git a/src/debug/unknown_debug_menu.c b/src/debug/unknown_debug_menu.c index 9cc24fc62..429f43766 100644 --- a/src/debug/unknown_debug_menu.c +++ b/src/debug/unknown_debug_menu.c @@ -44,10 +44,10 @@ u8 sub_814A4B8(void) { gSaveBlock2.battleTower.var_4AE[0] = 3; gSaveBlock2.battleTower.var_4AE[1] = 3; - gSaveBlock2.battleTower.curStreakChallengesCompleted[0] = gBattleCommunication[0] + 1; - gSaveBlock2.battleTower.curStreakChallengesCompleted[1] = gBattleCommunication[0] + 1; - gSaveBlock2.battleTower.curChallengeWins[0] = 1; - gSaveBlock2.battleTower.curChallengeWins[1] = 1; + gSaveBlock2.battleTower.curStreakChallengesNum[0] = gBattleCommunication[0] + 1; + gSaveBlock2.battleTower.curStreakChallengesNum[1] = gBattleCommunication[0] + 1; + gSaveBlock2.battleTower.curChallengeBattleNum[0] = 1; + gSaveBlock2.battleTower.curChallengeBattleNum[1] = 1; CloseMenu(); return 1; } diff --git a/src/engine/mystery_event_script.c b/src/engine/mystery_event_script.c index 0fb3a21cd..69434710f 100644 --- a/src/engine/mystery_event_script.c +++ b/src/engine/mystery_event_script.c @@ -421,7 +421,7 @@ bool8 MEScrCmd_addtrainer(struct ScriptContext *ctx) { u32 data = ScriptReadWord(ctx) - ctx->data[1] + ctx->data[0]; memcpy(&gSaveBlock2.battleTower.ereaderTrainer, (void *)data, sizeof(gSaveBlock2.battleTower.ereaderTrainer)); - sub_813601C(); + ValidateEReaderTrainer(); StringExpandPlaceholders(gStringVar4, gOtherText_NewTrainerInHoenn); ctx->data[2] = 2; return FALSE; diff --git a/src/field/choose_party.c b/src/field/choose_party.c index fd90a9199..adb210e7b 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -24,7 +24,7 @@ extern u8 gUnknown_020384F0; extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; extern u8 gUnknown_0202E8F6; extern struct Pokemon gUnknown_030042FC[]; -extern const u16 gBattleTowerBanlist[]; +extern const u16 gBattleTowerBannedSpecies[]; EWRAM_DATA u8 gSelectedOrderFromParty[3] = {0}; @@ -182,9 +182,9 @@ static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn) // Check if the pkmn is in the ban list species = GetMonData(pkmn, MON_DATA_SPECIES); - while (gBattleTowerBanlist[i] != 0xFFFF) + while (gBattleTowerBannedSpecies[i] != 0xFFFF) { - if (gBattleTowerBanlist[i] == species) + if (gBattleTowerBannedSpecies[i] == species) return FALSE; i++; } diff --git a/src/field/field_specials.c b/src/field/field_specials.c index 36362d098..ea0c2bd6a 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -1789,7 +1789,7 @@ u16 sub_810F404(void) void sub_810F414(void) { - sub_8135FF4(gStringVar1); + SetEReaderTrainerName(gStringVar1); } const u8 gUnknown_083F83E0[] = {12, 2, 4, 5, 1, 8, 7, 11, 3, 10, 9, 6}; diff --git a/src/field/tv.c b/src/field/tv.c index fcbd734a9..87fc03065 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -123,7 +123,6 @@ void ClearTVShowData(void) bool8 sub_80BF1B4(u8); void sub_80BF20C(void); -extern u16 sub_8135D3C(u8); extern u8 gScriptContestCategory; extern u8 gScriptContestRank; extern u8 gUnknown_03004316[11]; @@ -677,7 +676,7 @@ void sub_80BE320(void) StringCopy(bravoTrainerTower->pokemonName, gSaveBlock2.battleTower.defeatedByTrainerName); bravoTrainerTower->species = gSaveBlock2.battleTower.firstMonSpecies; bravoTrainerTower->defeatedSpecies = gSaveBlock2.battleTower.defeatedBySpecies; - bravoTrainerTower->var16 = sub_8135D3C(gSaveBlock2.battleTower.lastStreakLevelType); + bravoTrainerTower->var16 = GetCurrentBattleTowerWinStreak(gSaveBlock2.battleTower.lastStreakLevelType); bravoTrainerTower->var1c = gSaveBlock2.battleTower.battleOutcome; if (gSaveBlock2.battleTower.lastStreakLevelType == 0) bravoTrainerTower->btLevel = 50; -- cgit v1.2.3 From 2a682aec81c9de708d19e0ade1efef0a4f9db245 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 2 Nov 2017 17:55:40 -0700 Subject: Define constants for special battle_tower trainer ids --- src/battle_tower.c | 53 +++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 91e223216..c85e1b8f5 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -399,7 +399,7 @@ bool8 sub_81346F4(void) winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); if (ShouldBattleEReaderTrainer(battleTowerLevelType, winStreak)) { - gSaveBlock2.battleTower.battleTowerTrainerId = 200; + gSaveBlock2.battleTower.battleTowerTrainerId = BATTLE_TOWER_EREADER_TRAINER_ID; retVal = TRUE; } else @@ -432,7 +432,7 @@ bool8 sub_81346F4(void) } else { - gSaveBlock2.battleTower.battleTowerTrainerId = trainerIds[Random() % numCandidates] + 100; + gSaveBlock2.battleTower.battleTowerTrainerId = trainerIds[Random() % numCandidates] + BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID; retVal = TRUE; } } @@ -785,13 +785,13 @@ void SetBattleTowerTrainerGfxId(u8 trainerIndex) u32 i; u8 trainerClass; - if (trainerIndex < 100) + if (trainerIndex < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { trainerClass = gBattleTowerTrainers[trainerIndex].trainerClass; } - else if (trainerIndex < 200) + else if (trainerIndex < BATTLE_TOWER_EREADER_TRAINER_ID) { - trainerClass = gSaveBlock2.battleTower.records[trainerIndex - 100].trainerClass; + trainerClass = gSaveBlock2.battleTower.records[trainerIndex - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; } else { @@ -819,7 +819,7 @@ void SetBattleTowerTrainerGfxId(u8 trainerIndex) void SetEReaderTrainerGfxId() { - SetBattleTowerTrainerGfxId(200); + SetBattleTowerTrainerGfxId(BATTLE_TOWER_EREADER_TRAINER_ID); } // void sub_8134AC0(struct BattleTowerRecord *record) @@ -1144,29 +1144,29 @@ _08134C70: .4byte gSaveBlock2\n\ u8 get_trainer_class_pic_index(void) { - if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; } else { - return gTrainerClassToPicIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].trainerClass]; + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; } } u8 get_trainer_class_name_index(void) { - if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; } - else if (gSaveBlock2.battleTower.battleTowerTrainerId >= 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { - return gTrainerClassToNameIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].trainerClass]; + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; } else { @@ -1178,14 +1178,14 @@ void get_trainer_name(u8* dest) { s32 i; - if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { for (i = 0; i < 7; i++) { dest[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; } } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { for (i = 0; i < 7; i++) { @@ -1196,7 +1196,7 @@ void get_trainer_name(u8* dest) { for (i = 0; i < 7; i++) { - dest[i] = gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].name[i]; + dest[i] = gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].name[i]; } } @@ -1258,13 +1258,13 @@ void FillBattleTowerTrainerParty(void) fixedIV = 31; battleMonsOffset = 180; } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { fixedIV = 31; battleMonsOffset = 200; monPoolSize = 100; } - else if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + else if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { // Load E-Reader trainer's party. for (partyIndex = 0; partyIndex < 3; partyIndex++) @@ -1281,7 +1281,7 @@ void FillBattleTowerTrainerParty(void) { sub_803ADE8( &gEnemyParty[partyIndex], - &gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].party[partyIndex]); + &gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].party[partyIndex]); } return; @@ -1562,17 +1562,17 @@ void PrintBattleTowerTrainerMessage(u16 *easyChat) void PrintBattleTowerTrainerGreeting(void) { - if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { PrintBattleTowerTrainerMessage((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); } else { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].greeting.easyChat); + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting.easyChat); } } @@ -1690,7 +1690,7 @@ void sub_8135668(void) } break; case 6: - if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); } @@ -2059,7 +2059,8 @@ void sub_8135CFC(void) u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) { - u16 winStreak = ((gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; + u16 winStreak = ((gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) + + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; if (winStreak > 9999) { @@ -2353,13 +2354,13 @@ void sub_813610C(void) #if GERMAN u8 de_sub_81364AC(void) { - if (gSaveBlock2.battleTower.battleTowerTrainerId == 200) + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) { return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; } - else if (gSaveBlock2.battleTower.battleTowerTrainerId >= 100) + else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) { - return gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - 100].trainerClass; + return gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; } else { -- cgit v1.2.3 From 5b8afc1ed70969fc93bce6aa43ded9929e5a2636 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 2 Nov 2017 18:02:40 -0700 Subject: Move battle_tower.c to src/field/ --- src/battle_tower.c | 2375 ---------------------------------------------- src/field/battle_tower.c | 2375 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2375 insertions(+), 2375 deletions(-) delete mode 100644 src/battle_tower.c create mode 100644 src/field/battle_tower.c (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c deleted file mode 100644 index c85e1b8f5..000000000 --- a/src/battle_tower.c +++ /dev/null @@ -1,2375 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_setup.h" -#include "battle_tower.h" -#include "battle_transition.h" -#include "data2.h" -#include "easy_chat.h" -#include "event_data.h" -#include "item.h" -#include "items.h" -#include "main.h" -#include "map_object_constants.h" -#include "moves.h" -#include "new_game.h" -#include "overworld.h" -#include "pokedex.h" -#include "rng.h" -#include "save.h" -#include "script_pokemon_80C4.h" -#include "species.h" -#include "string_util.h" -#include "task.h" -#include "text.h" -#include "trainer.h" -#include "tv.h" -#include "vars.h" - -#if ENGLISH -#include "data/battle_tower/trainers.h" -#elif GERMAN -#include "data/battle_tower/trainers_de.h" -#endif - -static const u16 sBattleTowerHeldItems[] = { - ITEM_NONE, - ITEM_KINGS_ROCK, - ITEM_SITRUS_BERRY, - ITEM_ORAN_BERRY, - ITEM_CHESTO_BERRY, - ITEM_HARD_STONE, - ITEM_FOCUS_BAND, - ITEM_PERSIM_BERRY, - ITEM_MIRACLE_SEED, - ITEM_BERRY_JUICE, - ITEM_MACHO_BRACE, - ITEM_SILVER_POWDER, - ITEM_CHERI_BERRY, - ITEM_BLACK_GLASSES, - ITEM_BLACK_BELT, - ITEM_SOUL_DEW, - ITEM_CHOICE_BAND, - ITEM_MAGNET, - ITEM_SILK_SCARF, - ITEM_WHITE_HERB, - ITEM_DEEP_SEA_SCALE, - ITEM_DEEP_SEA_TOOTH, - ITEM_MYSTIC_WATER, - ITEM_SHARP_BEAK, - ITEM_QUICK_CLAW, - ITEM_LEFTOVERS, - ITEM_RAWST_BERRY, - ITEM_LIGHT_BALL, - ITEM_POISON_BARB, - ITEM_NEVER_MELT_ICE, - ITEM_ASPEAR_BERRY, - ITEM_SPELL_TAG, - ITEM_BRIGHT_POWDER, - ITEM_LEPPA_BERRY, - ITEM_SCOPE_LENS, - ITEM_TWISTED_SPOON, - ITEM_METAL_COAT, - ITEM_MENTAL_HERB, - ITEM_CHARCOAL, - ITEM_PECHA_BERRY, - ITEM_SOFT_SAND, - ITEM_LUM_BERRY, - ITEM_DRAGON_SCALE, - ITEM_DRAGON_FANG, - ITEM_IAPAPA_BERRY, - ITEM_WIKI_BERRY, - ITEM_SEA_INCENSE, - ITEM_SHELL_BELL, - ITEM_SALAC_BERRY, - ITEM_LANSAT_BERRY, - ITEM_APICOT_BERRY, - ITEM_STARF_BERRY, - ITEM_LIECHI_BERRY, - ITEM_STICK, - ITEM_LAX_INCENSE, - ITEM_AGUAV_BERRY, - ITEM_FIGY_BERRY, - ITEM_THICK_CLUB, - ITEM_MAGO_BERRY, - ITEM_METAL_POWDER, - ITEM_PETAYA_BERRY, - ITEM_LUCKY_PUNCH, - ITEM_GANLON_BERRY, -}; - -#include "data/battle_tower/level_50_mons.h" -#include "data/battle_tower/level_100_mons.h" - -static const u8 sMaleTrainerClasses[] = { - TRAINER_CLASS_RUIN_MANIAC, - TRAINER_CLASS_TUBER_M, - TRAINER_CLASS_COOL_TRAINER_M, - TRAINER_CLASS_RICH_BOY, - TRAINER_CLASS_POKEMANIAC, - TRAINER_CLASS_SWIMMER_M, - TRAINER_CLASS_BLACK_BELT, - TRAINER_CLASS_GUITARIST, - TRAINER_CLASS_KINDLER, - TRAINER_CLASS_CAMPER, - TRAINER_CLASS_BUG_MANIAC, - TRAINER_CLASS_PSYCHIC_M, - TRAINER_CLASS_GENTLEMAN, - TRAINER_CLASS_SCHOOL_KID_M, - TRAINER_CLASS_POKEFAN_M, - TRAINER_CLASS_EXPERT_M, - TRAINER_CLASS_YOUNGSTER, - TRAINER_CLASS_FISHERMAN, - TRAINER_CLASS_CYCLING_TRIATHLETE_M, - TRAINER_CLASS_RUNNING_TRIATHLETE_M, - TRAINER_CLASS_SWIMMING_TRIATHLETE_M, - TRAINER_CLASS_DRAGON_TAMER, - TRAINER_CLASS_BIRD_KEEPER, - TRAINER_CLASS_NINJA_BOY, - TRAINER_CLASS_SAILOR, - TRAINER_CLASS_COLLECTOR, - TRAINER_CLASS_POKEMON_BREEDER_M, - TRAINER_CLASS_POKEMON_RANGER_M, - TRAINER_CLASS_BUG_CATCHER, - TRAINER_CLASS_HIKER, -}; - -static const u8 sFemaleTrainerClasses[] = { - TRAINER_CLASS_AROMA_LADY, - TRAINER_CLASS_TUBER_F, - TRAINER_CLASS_COOL_TRAINER_F, - TRAINER_CLASS_HEX_MANIAC, - TRAINER_CLASS_LADY, - TRAINER_CLASS_BEAUTY, - TRAINER_CLASS_PSYCHIC_F, - TRAINER_CLASS_SCHOOL_KID_F, - TRAINER_CLASS_POKEFAN_F, - TRAINER_CLASS_EXPERT_F, - TRAINER_CLASS_CYCLING_TRIATHLETE_F, - TRAINER_CLASS_RUNNING_TRIATHLETE_F, - TRAINER_CLASS_SWIMMING_TRIATHLETE_F, - TRAINER_CLASS_BATTLE_GIRL, - TRAINER_CLASS_PARASOL_LADY, - TRAINER_CLASS_SWIMMER_F, - TRAINER_CLASS_PICNICKER, - TRAINER_CLASS_POKEMON_BREEDER_F, - TRAINER_CLASS_POKEMON_RANGER_F, - TRAINER_CLASS_LASS, -}; - -static const u8 sMaleTrainerGfxIds[] = { - MAP_OBJ_GFX_HIKER, - MAP_OBJ_GFX_TUBER_M, - MAP_OBJ_GFX_MAN_4, - MAP_OBJ_GFX_BOY_4, - MAP_OBJ_GFX_MANIAC, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, - MAP_OBJ_GFX_BLACK_BELT, - MAP_OBJ_GFX_MAN_6, - MAP_OBJ_GFX_MAN_6, - MAP_OBJ_GFX_CAMPER, - MAP_OBJ_GFX_MANIAC, - MAP_OBJ_GFX_PSYCHIC_M, - MAP_OBJ_GFX_GENTLEMAN, - MAP_OBJ_GFX_SCHOOL_KID_M, - MAP_OBJ_GFX_MAN_3, - MAP_OBJ_GFX_OLD_MAN_1, - MAP_OBJ_GFX_YOUNGSTER, - MAP_OBJ_GFX_FISHERMAN, - MAP_OBJ_GFX_CYCLING_TRIATHLETE_M, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, - MAP_OBJ_GFX_MAN_4, - MAP_OBJ_GFX_MAN_6, - MAP_OBJ_GFX_LITTLE_BOY_1, - MAP_OBJ_GFX_SAILOR, - MAP_OBJ_GFX_MANIAC, - MAP_OBJ_GFX_MAN_5, - MAP_OBJ_GFX_CAMPER, - MAP_OBJ_GFX_BUG_CATCHER, - MAP_OBJ_GFX_HIKER, -}; - -static const u8 sFemaleTrainerGfxIds[] = { - MAP_OBJ_GFX_WOMAN_3, - MAP_OBJ_GFX_TUBER_F, - MAP_OBJ_GFX_WOMAN_7, - MAP_OBJ_GFX_WOMAN_1, - MAP_OBJ_GFX_WOMAN_3, - MAP_OBJ_GFX_BEAUTY, - MAP_OBJ_GFX_LASS, - MAP_OBJ_GFX_GIRL_3, - MAP_OBJ_GFX_WOMAN_2, - MAP_OBJ_GFX_OLD_WOMAN_1, - MAP_OBJ_GFX_CYCLING_TRIATHLETE_F, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, - MAP_OBJ_GFX_GIRL_3, - MAP_OBJ_GFX_WOMAN_7, - MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, - MAP_OBJ_GFX_PICNICKER, - MAP_OBJ_GFX_WOMAN_3, - MAP_OBJ_GFX_PICNICKER, - MAP_OBJ_GFX_LASS, -}; - -const u16 gBattleTowerBannedSpecies[] = { - SPECIES_MEW, - SPECIES_MEWTWO, - SPECIES_HO_OH, - SPECIES_LUGIA, - SPECIES_CELEBI, - SPECIES_KYOGRE, - SPECIES_GROUDON, - SPECIES_RAYQUAZA, - SPECIES_JIRACHI, - SPECIES_DEOXYS, - 0xFFFF, -}; - -// Item prizes for battle tower streaks of 5 or fewer sets. -/*static*/ const u16 sShortStreakPrizes[] = { - ITEM_HP_UP, - ITEM_PROTEIN, - ITEM_IRON, - ITEM_CALCIUM, - ITEM_CARBOS, - ITEM_ZINC, -}; - -// Item prizes for battle tower streaks of greater than 5 sets. -/*static*/ const u16 sLongStreakPrizes[] = { - ITEM_BRIGHT_POWDER, - ITEM_WHITE_HERB, - ITEM_QUICK_CLAW, - ITEM_LEFTOVERS, - ITEM_MENTAL_HERB, - ITEM_KINGS_ROCK, - ITEM_FOCUS_BAND, - ITEM_SCOPE_LENS, - ITEM_CHOICE_BAND, -}; - -static void ResetBattleTowerStreak(u8 levelType); -static void ValidateBattleTowerRecordChecksums(void); -static void PrintEReaderTrainerFarewellMessage(void); -extern void SetBattleTowerTrainerGfxId(u8); -extern void sub_8135A3C(void); -static void sub_8135CFC(void); -static void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); -static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); -static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); -static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); -static void ClearBattleTowerRecord(struct BattleTowerRecord *); - -extern const u8 gUnknown_08400E23[]; -extern const u8 gUnknown_08400E29[]; -extern const u8 gUnknown_08400E2C[]; -extern const u8 gUnknown_08400E2E[]; -extern const u8 gUnknown_08400E30[]; -extern const u8 gUnknown_08400E32[]; -extern const u8 gUnknown_08400E36[]; -extern u16 gSpecialVar_0x8004; -extern u8 gTrainerClassToPicIndex[]; -extern u8 gTrainerClassToNameIndex[]; -extern u16 gTrainerBattleOpponent; -extern u16 gBattleTypeFlags; -extern u8 gSelectedOrderFromParty[]; -extern u8 gBattleOutcome; -extern struct Pokemon gUnknown_030042FC[]; -extern struct BattlePokemon gBattleMons[]; - -#define ewram160FB (ewram[0x160FB]) - - -void sub_8134548(void) -{ - u8 var1 = 0; - s32 levelType; - - for (levelType = 0; levelType < 2; levelType++) - { - switch (gSaveBlock2.battleTower.var_4AE[levelType]) - { - case 0: - default: - ResetBattleTowerStreak(levelType); - if (!var1) - { - VarSet(VAR_0x4000, 5); - } - break; - case 1: - ResetBattleTowerStreak(levelType); - VarSet(VAR_0x4000, 1); - var1++; - break; - case 4: - VarSet(VAR_0x4000, 2); - var1++; - break; - case 5: - VarSet(VAR_0x4000, 3); - var1++; - break; - case 2: - VarSet(VAR_0x4000, 4); - var1++; - break; - case 3: - case 6: - break; - } - } - - if ((gSaveBlock2.battleTower.var_4AE[0] == 3 || gSaveBlock2.battleTower.var_4AE[0] == 6) - && (gSaveBlock2.battleTower.var_4AE[1] == 3 || gSaveBlock2.battleTower.var_4AE[1] == 6)) - { - VarSet(VAR_0x4000, 5); - } - - ValidateBattleTowerRecordChecksums(); -} - -void ResetBattleTowerStreak(u8 levelType) -{ - gSaveBlock2.battleTower.var_4AE[levelType] = 0; - gSaveBlock2.battleTower.curChallengeBattleNum[levelType] = 1; - gSaveBlock2.battleTower.curStreakChallengesNum[levelType] = 1; -} - -// Checks if the next trainer in Battle Tower should be the E-Reader trainer. -bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak) -{ - u8 trainerTeamLevel; - u8 monLevel; - s32 i; - u16 validPartySpecies[6]; - u16 validPartyHeldItems[6]; - u8 numValid; - - numValid = 0; - - ValidateEReaderTrainer(); - - if (gScriptResult != 0 || gSaveBlock2.battleTower.ereaderTrainer.winStreak != winStreak) - { - return FALSE; - } - - trainerTeamLevel = 50; - if (levelType != 0) - { - trainerTeamLevel = 100; - } - - for (i = 0; i < 3; i++) - { - monLevel = gSaveBlock2.battleTower.ereaderTrainer.party[i].level; - if (gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) - { - return FALSE; - } - - CheckMonBattleTowerBanlist( - gSaveBlock2.battleTower.ereaderTrainer.party[i].species, - gSaveBlock2.battleTower.ereaderTrainer.party[i].heldItem, - 1, - levelType, - monLevel, - validPartySpecies, - validPartyHeldItems, - &numValid); - } - - return numValid == 3; -} - -bool8 sub_81346F4(void) -{ - s32 recordIndex, i; - u8 battleTowerLevelType; - u16 winStreak; - bool8 retVal; - s32 numCandidates; - u32 trainerIds[5]; - - numCandidates = 0; - battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - if (ShouldBattleEReaderTrainer(battleTowerLevelType, winStreak)) - { - gSaveBlock2.battleTower.battleTowerTrainerId = BATTLE_TOWER_EREADER_TRAINER_ID; - retVal = TRUE; - } - else - { - // Check if one of the battle tower trainers from record mixing should be the next trainer. - for (recordIndex = 0; recordIndex < 5; recordIndex++) - { - struct BattleTowerRecord *record = &gSaveBlock2.battleTower.records[recordIndex]; - u32 recordHasData = 0; - u32 checksum = 0; - for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; i++) - { - recordHasData |= ((u32 *)record)[i]; - checksum += ((u32 *)record)[i]; - } - - if (gSaveBlock2.battleTower.records[recordIndex].winStreak == winStreak - && gSaveBlock2.battleTower.records[recordIndex].battleTowerLevelType == battleTowerLevelType - && recordHasData - && gSaveBlock2.battleTower.records[recordIndex].checksum == checksum) - { - trainerIds[numCandidates] = recordIndex; - numCandidates++; - } - } - - if (numCandidates == 0) - { - retVal = FALSE; - } - else - { - gSaveBlock2.battleTower.battleTowerTrainerId = trainerIds[Random() % numCandidates] + BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID; - retVal = TRUE; - } - } - - return retVal; -} - -// void sub_81347F8(void) -// { -// bool8 levelType = gSaveBlock2.battleTower.battleTowerLevelType; -// if (sub_81346F4()) -// { -// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); -// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; -// } -// else -// { -// u16 var1; - -// if (gSaveBlock2.battleTower.curStreakChallengesNum[levelType] > 7) -// { -// while (1) -// { -// s32 i; -// u32 temp = ((Random() & 0xFF) * 30) >> 8; -// var1 = temp + 70; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && var1 != gSaveBlock2.battleTower.var_4C1[i]; i++) // TODO: [i + 1]??? -// { } - -// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) -// { -// break; -// } -// } -// } -// else -// { -// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] == 7) -// { -// while (1) -// { -// s32 i; -// u32 temp = ((Random() & 0xFF) * 5); -// u32 temp2 = (((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10) + 20); -// var1 = temp / 128 + temp2; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // TODO: [i + 1]???? -// { } - -// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) -// { -// break; -// } -// } -// } -// else -// { -// while (1) -// { -// s32 i; -// u32 temp = ((Random() & 0xFF) * 320); -// u32 temp2 = ((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10); -// var1 = temp + temp2; -// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) -// { } - -// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) -// { -// break; -// } -// } -// } -// } - -// gSaveBlock2.battleTower.battleTowerTrainerId = var1; -// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); - -// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] < 7) -// { -// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; -// } -// } -// } - -__attribute__((naked)) -void sub_81347F8(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - ldr r5, _08134838 @ =gSaveBlock2\n\ - ldr r1, _0813483C @ =0x00000554\n\ - adds r0, r5, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 31\n\ - lsrs r6, r0, 31\n\ - bl sub_81346F4\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08134848\n\ - ldr r2, _08134840 @ =0x00000564\n\ - adds r4, r5, r2\n\ - ldrb r0, [r4]\n\ - bl SetBattleTowerTrainerGfxId\n\ - lsls r0, r6, 1\n\ - movs r3, 0xAB\n\ - lsls r3, 3\n\ - adds r1, r5, r3\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - adds r0, r5, r0\n\ - ldr r1, _08134844 @ =0x00000569\n\ - adds r0, r1\n\ - ldrb r1, [r4]\n\ - b _081349DC\n\ - .align 2, 0\n\ -_08134838: .4byte gSaveBlock2\n\ -_0813483C: .4byte 0x00000554\n\ -_08134840: .4byte 0x00000564\n\ -_08134844: .4byte 0x00000569\n\ -_08134848:\n\ - lsls r0, r6, 1\n\ - ldr r2, _081348D8 @ =0x0000055c\n\ - adds r1, r5, r2\n\ - adds r1, r0, r1\n\ - ldrh r1, [r1]\n\ - adds r7, r0, 0\n\ - cmp r1, 0x7\n\ - bls _0813485A\n\ - b _0813495C\n\ -_0813485A:\n\ - movs r3, 0xAB\n\ - lsls r3, 3\n\ - adds r0, r5, r3\n\ - adds r1, r7, r0\n\ - ldrh r0, [r1]\n\ - cmp r0, 0x7\n\ - bne _081348E4\n\ - adds r6, r5, 0\n\ - mov r9, r7\n\ - adds r5, r1, 0\n\ - ldr r0, _081348DC @ =0x0000056a\n\ - adds r0, r6\n\ - mov r10, r0\n\ - mov r8, r5\n\ -_08134876:\n\ - bl Random\n\ - movs r1, 0xFF\n\ - ands r1, r0\n\ - lsls r2, r1, 2\n\ - adds r2, r1\n\ - ldr r1, _081348D8 @ =0x0000055c\n\ - adds r4, r6, r1\n\ - mov r3, r9\n\ - adds r0, r3, r4\n\ - ldrh r1, [r0]\n\ - subs r1, 0x1\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 1\n\ - adds r0, 0x14\n\ - lsrs r2, 7\n\ - adds r2, r0\n\ - lsls r2, 16\n\ - lsrs r2, 16\n\ - movs r1, 0\n\ - ldrh r0, [r5]\n\ - subs r0, 0x1\n\ - cmp r1, r0\n\ - bge _081348C8\n\ - mov r3, r10\n\ - ldrb r0, [r3]\n\ - cmp r0, r2\n\ - beq _081348C8\n\ - subs r0, r4, 0x4\n\ - adds r0, r7, r0\n\ - ldrh r0, [r0]\n\ - subs r3, r0, 0x1\n\ - adds r4, 0xE\n\ -_081348BA:\n\ - adds r1, 0x1\n\ - cmp r1, r3\n\ - bge _081348C8\n\ - adds r0, r1, r4\n\ - ldrb r0, [r0]\n\ - cmp r0, r2\n\ - bne _081348BA\n\ -_081348C8:\n\ - mov r3, r8\n\ - ldrh r0, [r3]\n\ - subs r0, 0x1\n\ - ldr r4, _081348E0 @ =gSaveBlock2\n\ - cmp r1, r0\n\ - bne _08134876\n\ - b _081349B6\n\ - .align 2, 0\n\ -_081348D8: .4byte 0x0000055c\n\ -_081348DC: .4byte 0x0000056a\n\ -_081348E0: .4byte gSaveBlock2\n\ -_081348E4:\n\ - adds r6, r5, 0\n\ - mov r9, r7\n\ - adds r5, r1, 0\n\ - ldr r2, _08134950 @ =0x0000056a\n\ - adds r2, r6\n\ - mov r10, r2\n\ - mov r8, r5\n\ -_081348F2:\n\ - bl Random\n\ - movs r1, 0xFF\n\ - ands r1, r0\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsrs r2, r0, 6\n\ - ldr r3, _08134954 @ =0x0000055c\n\ - adds r4, r6, r3\n\ - mov r1, r9\n\ - adds r0, r1, r4\n\ - ldrh r1, [r0]\n\ - subs r1, 0x1\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 1\n\ - adds r0, r2, r0\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - movs r1, 0\n\ - ldrh r0, [r5]\n\ - subs r0, 0x1\n\ - cmp r1, r0\n\ - bge _08134942\n\ - mov r3, r10\n\ - ldrb r0, [r3]\n\ - cmp r0, r2\n\ - beq _08134942\n\ - subs r0, r4, 0x4\n\ - adds r0, r7, r0\n\ - ldrh r0, [r0]\n\ - subs r3, r0, 0x1\n\ - adds r4, 0xE\n\ -_08134934:\n\ - adds r1, 0x1\n\ - cmp r1, r3\n\ - bge _08134942\n\ - adds r0, r1, r4\n\ - ldrb r0, [r0]\n\ - cmp r0, r2\n\ - bne _08134934\n\ -_08134942:\n\ - mov r3, r8\n\ - ldrh r0, [r3]\n\ - subs r0, 0x1\n\ - ldr r4, _08134958 @ =gSaveBlock2\n\ - cmp r1, r0\n\ - bne _081348F2\n\ - b _081349B6\n\ - .align 2, 0\n\ -_08134950: .4byte 0x0000056a\n\ -_08134954: .4byte 0x0000055c\n\ -_08134958: .4byte gSaveBlock2\n\ -_0813495C:\n\ - movs r2, 0xAB\n\ - lsls r2, 3\n\ - adds r0, r5, r2\n\ - adds r6, r7, r0\n\ - ldr r3, _081349EC @ =0x0000056a\n\ - adds r3, r5\n\ - mov r8, r3\n\ - adds r5, r6, 0\n\ -_0813496C:\n\ - bl Random\n\ - movs r1, 0xFF\n\ - ands r1, r0\n\ - lsls r0, r1, 4\n\ - subs r0, r1\n\ - lsls r0, 1\n\ - asrs r0, 8\n\ - adds r0, 0x46\n\ - lsls r0, 16\n\ - lsrs r2, r0, 16\n\ - movs r1, 0\n\ - ldrh r0, [r6]\n\ - subs r0, 0x1\n\ - cmp r1, r0\n\ - bge _081349AC\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - ldr r4, _081349F0 @ =gSaveBlock2\n\ - cmp r0, r2\n\ - beq _081349AC\n\ - ldrh r0, [r5]\n\ - subs r3, r0, 0x1\n\ - ldr r0, _081349EC @ =0x0000056a\n\ - adds r4, r0\n\ -_0813499E:\n\ - adds r1, 0x1\n\ - cmp r1, r3\n\ - bge _081349AC\n\ - adds r0, r1, r4\n\ - ldrb r0, [r0]\n\ - cmp r0, r2\n\ - bne _0813499E\n\ -_081349AC:\n\ - ldrh r0, [r6]\n\ - subs r0, 0x1\n\ - ldr r4, _081349F0 @ =gSaveBlock2\n\ - cmp r1, r0\n\ - bne _0813496C\n\ -_081349B6:\n\ - ldr r1, _081349F4 @ =0x00000564\n\ - adds r0, r4, r1\n\ - strb r2, [r0]\n\ - ldr r2, _081349F4 @ =0x00000564\n\ - adds r5, r4, r2\n\ - ldrb r0, [r5]\n\ - bl SetBattleTowerTrainerGfxId\n\ - movs r3, 0xAB\n\ - lsls r3, 3\n\ - adds r0, r4, r3\n\ - adds r1, r7, r0\n\ - ldrh r0, [r1]\n\ - cmp r0, 0x6\n\ - bhi _081349DE\n\ - adds r0, r4, r0\n\ - ldr r1, _081349F8 @ =0x00000569\n\ - adds r0, r1\n\ - ldrb r1, [r5]\n\ -_081349DC:\n\ - strb r1, [r0]\n\ -_081349DE:\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_081349EC: .4byte 0x0000056a\n\ -_081349F0: .4byte gSaveBlock2\n\ -_081349F4: .4byte 0x00000564\n\ -_081349F8: .4byte 0x00000569\n\ -.syntax divided\n"); -} - -void SetBattleTowerTrainerGfxId(u8 trainerIndex) -{ - u32 i; - u8 trainerClass; - - if (trainerIndex < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - trainerClass = gBattleTowerTrainers[trainerIndex].trainerClass; - } - else if (trainerIndex < BATTLE_TOWER_EREADER_TRAINER_ID) - { - trainerClass = gSaveBlock2.battleTower.records[trainerIndex - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; - } - else - { - trainerClass = gSaveBlock2.battleTower.ereaderTrainer.trainerClass; - } - - for (i = 0; i < 30 && sMaleTrainerClasses[i] != trainerClass; i++); - if (i != 30) - { - u8 trainerObjectGfxId = sMaleTrainerGfxIds[i]; - VarSet(0x4010, trainerObjectGfxId); - return; - } - - for (i = 0; i < 20 && sFemaleTrainerClasses[i] != trainerClass; i++); - if (i != 20) - { - u8 trainerObjectGfxId = sFemaleTrainerGfxIds[i]; - VarSet(0x4010, trainerObjectGfxId); - return; - } - - VarSet(0x4010, MAP_OBJ_GFX_BOY_1); -} - -void SetEReaderTrainerGfxId() -{ - SetBattleTowerTrainerGfxId(BATTLE_TOWER_EREADER_TRAINER_ID); -} - -// void sub_8134AC0(struct BattleTowerRecord *record) -// { -// u16 var1[6]; -// u16 var2[6]; -// s32 i, j, k; -// s16 l = 0; - -// for (i = 0; i < 5; i++) -// { -// k = 0; -// for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].trainerId[j] == record->trainerId[j]; j++); -// if (j == 4) -// { -// for (; k < 7 && gSaveBlock2.battleTower.records[i].name[4] == record->name[4]; k++) -// { -// if (record->name[4] == 0xFF) -// { -// k = 7; -// break; -// } -// } -// } - -// if (k == 7) -// { -// break; -// } -// } - -// if (i < 5) -// { -// gSaveBlock2.battleTower.records[i] = *record; -// return; -// } - -// i = 0; -// while (i < 5) -// { -// if (gSaveBlock2.battleTower.records[i].winStreak == 0) -// { -// if (i > 4) -// { -// break; -// } - -// gSaveBlock2.battleTower.records[i] = *record; -// return; -// } - -// i++; -// } - -// var1[0] = gSaveBlock2.battleTower.records[0].winStreak; -// var2[0] = 0; -// l++; - -// for (i = 1; i < 5; i++) -// { -// j = 0; -// if (j < l) -// { -// for (; gSaveBlock2.battleTower.records[i].winStreak <= var1[j]; j++) -// { -// if (gSaveBlock2.battleTower.records[i].winStreak < var1[j]) -// { -// j = 0; -// l = 1; -// var1[0] = gSaveBlock2.battleTower.records[i].winStreak; -// var2[0] = i; -// break; -// } -// } -// } - -// if (j == l) -// { -// var1[l] = gSaveBlock2.battleTower.records[i].winStreak; -// var2[l] = i; -// l++; -// } -// } - -// gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; -// } -__attribute__((naked)) -void sub_8134AC0(struct BattleTowerRecord *record) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x1C\n\ - movs r7, 0\n\ - mov r8, r0\n\ - movs r5, 0\n\ - ldr r0, _08134B3C @ =gSaveBlock2\n\ - mov r12, r0\n\ - mov r1, r8\n\ - ldrb r1, [r1, 0xC]\n\ - str r1, [sp, 0x18]\n\ - movs r2, 0xAA\n\ - lsls r2, 1\n\ - add r2, r12\n\ - mov r10, r2\n\ - mov r9, r5\n\ -_08134AE6:\n\ - movs r6, 0\n\ - movs r3, 0\n\ - ldr r0, _08134B40 @ =gSaveBlock2 + 0x158\n\ - add r0, r9\n\ - ldrb r0, [r0]\n\ - ldr r1, [sp, 0x18]\n\ - cmp r0, r1\n\ - bne _08134B14\n\ - movs r0, 0xA4\n\ - muls r0, r5\n\ - ldr r1, _08134B40 @ =gSaveBlock2 + 0x158\n\ - adds r2, r0, r1\n\ - mov r4, r8\n\ - adds r4, 0xC\n\ -_08134B02:\n\ - adds r2, 0x1\n\ - adds r3, 0x1\n\ - cmp r3, 0x3\n\ - bgt _08134B14\n\ - adds r1, r4, r3\n\ - ldrb r0, [r2]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - beq _08134B02\n\ -_08134B14:\n\ - cmp r3, 0x4\n\ - bne _08134B54\n\ - movs r6, 0\n\ - mov r2, r10\n\ - ldrb r0, [r2]\n\ - mov r3, r8\n\ - ldrb r3, [r3, 0x8]\n\ - cmp r0, r3\n\ - bne _08134B54\n\ - adds r1, r0, 0\n\ - movs r0, 0xA4\n\ - muls r0, r5\n\ - adds r0, 0x4\n\ - ldr r3, _08134B44 @ =gSaveBlock2 + 0x150\n\ - adds r2, r0, r3\n\ -_08134B32:\n\ - cmp r1, 0xFF\n\ - bne _08134B48\n\ - movs r6, 0x7\n\ - b _08134B54\n\ - .align 2, 0\n\ -_08134B3C: .4byte gSaveBlock2\n\ -_08134B40: .4byte gSaveBlock2 + 0x158\n\ -_08134B44: .4byte gSaveBlock2 + 0x150\n\ -_08134B48:\n\ - adds r6, 0x1\n\ - cmp r6, 0x6\n\ - bgt _08134B54\n\ - ldrb r0, [r2]\n\ - cmp r0, r1\n\ - beq _08134B32\n\ -_08134B54:\n\ - cmp r6, 0x7\n\ - beq _08134B64\n\ - movs r0, 0xA4\n\ - add r10, r0\n\ - add r9, r0\n\ - adds r5, 0x1\n\ - cmp r5, 0x4\n\ - ble _08134AE6\n\ -\n\ -_08134B64:\n\ - cmp r5, 0x4\n\ - bgt _08134B76\n\ - movs r0, 0xA4\n\ - muls r0, r5\n\ - add r0, r12\n\ - movs r1, 0xA6\n\ - lsls r1, 1\n\ - adds r0, r1\n\ - b _08134B9E\n\ -_08134B76:\n\ - movs r5, 0\n\ - movs r1, 0xA7\n\ - lsls r1, 1\n\ - add r1, r12\n\ - b _08134B88\n\ -_08134B80:\n\ - adds r1, 0xA4\n\ - adds r5, 0x1\n\ - cmp r5, 0x4\n\ - bgt _08134BA8\n\ -_08134B88:\n\ - ldrh r0, [r1]\n\ - cmp r0, 0\n\ - bne _08134B80\n\ - cmp r5, 0x4\n\ - bgt _08134BA8\n\ - movs r0, 0xA4\n\ - muls r0, r5\n\ - add r0, r12\n\ - movs r2, 0xA6\n\ - lsls r2, 1\n\ - adds r0, r2\n\ -_08134B9E:\n\ - mov r1, r8\n\ - movs r2, 0xA4\n\ - bl memcpy\n\ - b _08134C5E\n\ -\n\ -_08134BA8:\n\ - mov r2, sp\n\ - movs r3, 0xA7\n\ - lsls r3, 1\n\ - mov r1, r12\n\ - adds r0, r1, r3\n\ - ldrh r0, [r0]\n\ - movs r1, 0\n\ - strh r0, [r2]\n\ - add r0, sp, 0xC\n\ - strh r1, [r0]\n\ - adds r7, 0x1\n\ - movs r5, 0x1\n\ - add r2, sp, 0xC @var2 = r2\n\ - mov r9, r2\n\ - mov r10, r3\n\ -_08134BC6:\n\ - movs r3, 0\n\ - adds r0, r5, 0x1\n\ - mov r12, r0\n\ - cmp r3, r7\n\ - bge _08134C0A @ j < l\n\ - movs r1, 0xA4\n\ - adds r0, r5, 0\n\ - muls r0, r1\n\ - ldr r2, _08134BFC @ =gSaveBlock2\n\ - adds r0, r2\n\ - mov r1, r10\n\ - adds r4, r0, r1\n\ - mov r6, sp\n\ -_08134BE0:\n\ - lsls r0, r3, 1\n\ - add r0, sp\n\ - ldrh r2, [r4]\n\ - adds r1, r2, 0\n\ - ldrh r0, [r0]\n\ - cmp r1, r0\n\ - bcs _08134C00\n\ - movs r3, 0\n\ - movs r7, 0x1\n\ - strh r2, [r6]\n\ - mov r2, r9\n\ - strh r5, [r2]\n\ - b _08134C0A\n\ - .align 2, 0\n\ -_08134BFC: .4byte gSaveBlock2\n\ -_08134C00:\n\ - cmp r1, r0\n\ - bhi _08134C0A\n\ - adds r3, 0x1\n\ - cmp r3, r7\n\ - blt _08134BE0\n\ -_08134C0A:\n\ - cmp r3, r7\n\ - bne _08134C2A\n\ - lsls r1, r7, 1\n\ - mov r3, sp\n\ - adds r2, r3, r1\n\ - movs r3, 0xA4\n\ - adds r0, r5, 0\n\ - muls r0, r3\n\ - ldr r3, _08134C70 @ =gSaveBlock2\n\ - adds r0, r3\n\ - add r0, r10\n\ - ldrh r0, [r0]\n\ - strh r0, [r2]\n\ - add r1, r9\n\ - strh r5, [r1]\n\ - adds r7, 0x1\n\ -_08134C2A:\n\ - mov r5, r12\n\ - cmp r5, 0x4\n\ - ble _08134BC6\n\ - bl Random\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - adds r1, r7, 0\n\ - bl __modsi3\n\ - adds r5, r0, 0\n\ - ldr r2, _08134C70 @ =gSaveBlock2\n\ - lsls r0, r5, 1\n\ - add r0, sp\n\ - adds r0, 0xC\n\ - ldrh r1, [r0]\n\ - movs r0, 0xA4\n\ - muls r0, r1\n\ - adds r0, r2\n\ - movs r1, 0xA6\n\ - lsls r1, 1\n\ - adds r0, r1\n\ - mov r1, r8\n\ - movs r2, 0xA4\n\ - bl memcpy\n\ -_08134C5E:\n\ - add sp, 0x1C\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08134C70: .4byte gSaveBlock2\n\ - .syntax divided\n"); -} - -u8 get_trainer_class_pic_index(void) -{ - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; - } - else - { - return gTrainerClassToPicIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; - } -} - -u8 get_trainer_class_name_index(void) -{ - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - return gTrainerClassToNameIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; - } - else - { - return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; - } -} - -void get_trainer_name(u8* dest) -{ - s32 i; - - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - for (i = 0; i < 7; i++) - { - dest[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; - } - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - for (i = 0; i < 7; i++) - { - dest[i] = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].name[i]; - } - } - else - { - for (i = 0; i < 7; i++) - { - dest[i] = gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].name[i]; - } - } - - dest[i] = 0xFF; -} - -void FillBattleTowerTrainerParty(void) -{ - s32 partyIndex, i; - u16 chosenMonIndices[3]; - u8 friendship; - u8 level; - u8 fixedIV; - u8 battleMonsOffset; - u8 monPoolSize; - u8 teamFlags; - const struct BattleTowerPokemon *battleTowerMons; - - battleMonsOffset = 0; - monPoolSize = 60; - friendship = 255; - - ZeroEnemyPartyMons(); - - // Different trainers have access to different sets of pokemon to use in battle. - // The pokemon later in gBattleTowerLevel100Mons or gBattleTowerLevel50Mons are - // stronger. Additionally, the later trainers' pokemon are granted higher IVs. - if (gSaveBlock2.battleTower.battleTowerTrainerId < 20) - { - fixedIV = 6; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 30) - { - fixedIV = 9; - battleMonsOffset = 30; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 40) - { - fixedIV = 12; - battleMonsOffset = 60; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 50) - { - fixedIV = 15; - battleMonsOffset = 90; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 60) - { - fixedIV = 18; - battleMonsOffset = 120; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 70) - { - fixedIV = 21; - battleMonsOffset = 150; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < 80) - { - fixedIV = 31; - battleMonsOffset = 180; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - fixedIV = 31; - battleMonsOffset = 200; - monPoolSize = 100; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - // Load E-Reader trainer's party. - for (partyIndex = 0; partyIndex < 3; partyIndex++) - { - sub_803ADE8(&gEnemyParty[partyIndex], &gSaveBlock2.battleTower.ereaderTrainer.party[partyIndex]); - } - - return; - } - else - { - // Load a battle tower record's party. (From record mixing) - for (partyIndex = 0; partyIndex < 3; partyIndex++) - { - sub_803ADE8( - &gEnemyParty[partyIndex], - &gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].party[partyIndex]); - } - - return; - } - - // Use the appropriate list of pokemon and level depending on the - // current challenge type. (level 50 or level 100 challenge) - if (gSaveBlock2.battleTower.battleTowerLevelType != 0) - { - battleTowerMons = gBattleTowerLevel100Mons; - level = 100; - } - else - { - battleTowerMons = gBattleTowerLevel50Mons; - level = 50; - } - - teamFlags = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].teamFlags; - - // Attempt to fill the trainer's party with random Pokemon until 3 have been - // successfully chosen. The trainer's party may not have duplicate pokemon species - // or duplicate held items. Each pokemon must have all of the trainer's team flags - // set, as well. If any of those conditions are not met, then the loop starts over - // and another pokemon is chosen at random. - partyIndex = 0; - while (partyIndex != 3) - { - // Pick a random pokemon index based on the number of pokemon available to choose from - // and the starting offset in the battle tower pokemon array. - s32 battleMonIndex = ((Random() & 0xFF) * monPoolSize) / 256 + battleMonsOffset; - - // Ensure the chosen pokemon has compatible team flags with the trainer. - if (teamFlags == 0 || (battleTowerMons[battleMonIndex].teamFlags & teamFlags) == teamFlags) - { - // Ensure this pokemon species isn't a duplicate. - for (i = 0; i < partyIndex; i++) - { - if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL) == battleTowerMons[battleMonIndex].species) - break; - } - - if (i != partyIndex) - continue; - - // Ensure this pokemon's held item isn't a duplicate. - for (i = 0; i < partyIndex; i++) - { - if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != 0 - && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]) - { - break; - } - } - - if (i != partyIndex) - continue; - - // Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary - // because the species and held items were already checked directly above. Perhaps this - // is leftover code before the logic for duplicate species and held items was added. - for (i = 0; i < partyIndex && chosenMonIndices[i] != battleMonIndex; i++); - - if (i != partyIndex) - continue; - - chosenMonIndices[partyIndex] = battleMonIndex; - - // Place the chosen pokemon into the trainer's party. - CreateMonWithEVSpread( - &gEnemyParty[partyIndex], - battleTowerMons[battleMonIndex].species, - level, - fixedIV, - battleTowerMons[battleMonIndex].evSpread); - - // Give the chosen pokemon its specified moves. - for (i = 0; i < 4; i++) - { - SetMonMoveSlot(&gEnemyParty[partyIndex], battleTowerMons[battleMonIndex].moves[i], i); - if (battleTowerMons[battleMonIndex].moves[i] == MOVE_FRUSTRATION) - { - // MOVE_FRUSTRATION is more powerful the lower the pokemon's friendship is. - friendship = 0; - } - } - - SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship); - SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, (u8 *)&sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]); - - // The pokemon was successfully added to the trainer's party, so it's safe to move on to - // the next party slot. - partyIndex++; - } - } - -} - -u32 CountBattleTowerBanlistCaught() -{ - s32 i; - u32 numCaught = 0; - - for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) - { - if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBannedSpecies[i]), FLAG_GET_CAUGHT)) - { - numCaught++; - } - } - - return numCaught; -} - -u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numToAppend) -{ - if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) - { - curIndexToAppend++; - - switch (curIndexToAppend - 1) - { - case 0: - case 2: - case 4: - case 6: - case 8: - case 10: - if (numToAppend == curIndexToAppend) - { - StringAppend(gStringVar1, gUnknown_08400E23); - } - else if (numToAppend > curIndexToAppend) - { - StringAppend(gStringVar1, gUnknown_08400E29); - } - break; - case 1: - if (curIndexToAppend == numToAppend) - { - StringAppend(gStringVar1, gUnknown_08400E23); - } - else - { - StringAppend(gStringVar1, gUnknown_08400E29); - } - - StringAppend(gStringVar1, gUnknown_08400E30); - break; - case 3: - case 5: - case 7: - case 9: - default: - if (curIndexToAppend == numToAppend) - { - StringAppend(gStringVar1, gUnknown_08400E23); - } - else - { - StringAppend(gStringVar1, gUnknown_08400E29); - } - - StringAppend(gStringVar1, gUnknown_08400E2E); - break; - } - - StringAppend(gStringVar1, gSpeciesNames[species]); - } - - return curIndexToAppend; -} - -void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid) -{ - s32 i; - u32 counter = 0; - - if (species == SPECIES_EGG || species == SPECIES_NONE) - return; - - while (1) - { - if (gBattleTowerBannedSpecies[counter] == 0xFFFF) - goto EXIT2; // Couldn't get the code to match without this GOTO - - if (gBattleTowerBannedSpecies[counter] == species) - break; - - counter++; - } - - if (gBattleTowerBannedSpecies[counter] != 0xFFFF) - return; - - EXIT2: - if (battleTowerLevelType == 0 && monLevel > 50) - return; - - for (i = 0; i < *numValid && validPartySpecies[i] != species ; i++); - if (i != *numValid) - return; - - if (heldItem != 0) - { - for (i = 0; i < *numValid && validPartyHeldItems[i] != heldItem ; i++); - if (i != *numValid) - return; - } - - validPartySpecies[*numValid] = species; - validPartyHeldItems[*numValid] = heldItem; - *numValid = *numValid + 1; -} - -void CheckPartyBattleTowerBanlist(void) -{ - s32 i; - u16 species2; - u16 heldItem; - u8 level; - u16 hp; - u32 numBanlistCaught; - u16 validPartySpecies[6]; - u16 validPartyHeldItems[6]; - u8 counter; - - counter = 0; - - for (i = 0; i < PARTY_SIZE; i++) - { - species2 = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); - hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); - - CheckMonBattleTowerBanlist(species2, heldItem, hp, gScriptResult, level, validPartySpecies, validPartyHeldItems, &counter); - } - - if (counter < 3) - { - gStringVar1[0] = 0xFF; - gSpecialVar_0x8004 = 1; - counter = 0; - - numBanlistCaught = CountBattleTowerBanlistCaught(); - - for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) - { - counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBannedSpecies[i], counter, numBanlistCaught); - } - - if (counter == 0) - { - StringAppend(gStringVar1, gUnknown_08400E2C); - StringAppend(gStringVar1, gUnknown_08400E32); - return; - } - - if (1 & counter) - StringAppend(gStringVar1, gUnknown_08400E2E); - else - StringAppend(gStringVar1, gUnknown_08400E2C); - - StringAppend(gStringVar1, gUnknown_08400E36); - } - else - { - gSpecialVar_0x8004 = 0; - gSaveBlock2.battleTower.battleTowerLevelType = gScriptResult; - } -} - -void PrintBattleTowerTrainerMessage(u16 *easyChat) -{ - sub_80EB544(gStringVar4, easyChat, 2, 3); -} - -void PrintBattleTowerTrainerGreeting(void) -{ - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - PrintBattleTowerTrainerMessage((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); - } - else - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting.easyChat); - } -} - -void sub_81354CC(void) -{ - s32 i; - u16 heldItem; - - switch (gSpecialVar_0x8004) - { - case 0: - break; - case 1: - for (i = 0; i < PARTY_SIZE; i++) - { - heldItem = GetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM); - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); - } - break; - case 2: - PrintEReaderTrainerFarewellMessage(); - break; - } - - SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); -} - -void sub_8135534(u8 taskId) -{ - if (IsBattleTransitionDone() == TRUE) - { - gMain.savedCallback = sub_81354CC; - SetMainCallback2(sub_800E7C4); - DestroyTask(taskId); - } -} - -void sub_813556C(void) -{ - s32 i; - u16 heldItem; - u8 transition; - - switch (gSpecialVar_0x8004) - { - case 0: - gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); - gTrainerBattleOpponent = 0; - - FillBattleTowerTrainerParty(); - - CreateTask(sub_8135534, 1); - current_map_music_set__default_for_battle(0); - transition = BattleSetup_GetBattleTowerBattleTransition(); - BattleTransition_StartOnField(transition); - break; - case 1: - for (i = 0; i < PARTY_SIZE; i++) - { - heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); - SetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); - } - - CreateTask(sub_8135534, 1); - current_map_music_set__default_for_battle(0); - transition = BattleSetup_GetBattleTowerBattleTransition(); - BattleTransition_StartOnField(transition); - break; - case 2: - ZeroEnemyPartyMons(); - - for (i = 0; i < 3; i++) - { - sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.battleTower.ereaderTrainer.party[i]); - } - - gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); - gTrainerBattleOpponent = 0; - - CreateTask(sub_8135534, 1); - current_map_music_set__default_for_battle(0); - transition = BattleSetup_GetBattleTowerBattleTransition(); - BattleTransition_StartOnField(transition); - break; - } -} - -void sub_8135668(void) -{ - s32 i; - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - switch (gSpecialVar_0x8004) - { - case 0: - ewram160FB = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; - break; - case 1: - gSaveBlock2.battleTower.battleTowerLevelType = gSpecialVar_0x8005; - break; - case 2: - gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] = gSpecialVar_0x8005; - break; - case 3: - gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] = gSpecialVar_0x8005; - break; - case 4: - gSaveBlock2.battleTower.battleTowerTrainerId = gSpecialVar_0x8005; - break; - case 5: - for (i = 0; i < 3; i++) - { - gSaveBlock2.battleTower.selectedPartyMons[i] = gSelectedOrderFromParty[i]; - } - break; - case 6: - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); - } - - if (gSaveBlock2.battleTower.totalBattleTowerWins < 9999) - { - gSaveBlock2.battleTower.totalBattleTowerWins++; - } - - gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]++; - sub_8135A3C(); - gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; - - gStringVar1[0] = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1; - gStringVar1[1] = 0xFF; - break; - case 7: - if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] < 1430) - { - gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]++; - } - - sub_8135A3C(); - gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; - break; - case 8: - gSaveBlock2.battleTower.unk_554 = gSpecialVar_0x8005; - break; - case 9: - break; - case 10: - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); - break; - case 11: - if (gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] != 3) - { - ResetBattleTowerStreak(battleTowerLevelType); - } - break; - case 12: - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; - break; - case 13: - gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - break; - case 14: - gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - break; - } -} - -void sub_81358A4(void) -{ - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - switch (gSpecialVar_0x8004) - { - case 0: - gScriptResult = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; - break; - case 1: - gScriptResult = gSaveBlock2.battleTower.battleTowerLevelType; - break; - case 2: - gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; - break; - case 3: - gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; - break; - case 4: - gScriptResult = gSaveBlock2.battleTower.battleTowerTrainerId; - break; - case 5: - case 6: - case 7: - break; - case 8: - gScriptResult = gSaveBlock2.battleTower.unk_554; - break; - case 9: - gScriptResult = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - break; - case 10: - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); - break; - case 11: - ResetBattleTowerStreak(battleTowerLevelType); - break; - case 12: - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; - break; - case 13: - gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - break; - case 14: - gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - break; - } -} - -void sub_8135A14(void) -{ - s32 i; - - for (i = 0; i < 3; i++) - { - gSelectedOrderFromParty[i] = gSaveBlock2.battleTower.selectedPartyMons[i]; - } - - ReducePlayerPartyToThree(); -} - -#ifdef NONMATCHING -void sub_8135A3C(void) -{ - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - u16 winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - - if (gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] < winStreak) - { - gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] = winStreak; - } - - if (gSaveBlock2.battleTower.recordWinStreaks[0] > gSaveBlock2.battleTower.recordWinStreaks[1]) - { - u16 streak = gSaveBlock2.battleTower.recordWinStreaks[0]; - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); - if (streak > 9999) - { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; - } - else - { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; - } - } - else - { - u16 streak = gSaveBlock2.battleTower.recordWinStreaks[1]; - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); - if (streak > 9999) - { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; - } - else - { - gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; - } - } -} -#else -__attribute__((naked)) -void sub_8135A3C(void) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - ldr r6, _08135A84 @ =gSaveBlock2\n\ - ldr r1, _08135A88 @ =0x00000554\n\ - adds r0, r6, r1\n\ - ldrb r4, [r0]\n\ - lsls r4, 31\n\ - lsrs r4, 31\n\ - adds r0, r4, 0\n\ - bl GetCurrentBattleTowerWinStreak\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - lsls r4, 1\n\ - movs r3, 0xAC\n\ - lsls r3, 3\n\ - adds r2, r6, r3\n\ - adds r4, r2\n\ - ldrh r0, [r4]\n\ - cmp r0, r5\n\ - bcs _08135A66\n\ - strh r5, [r4]\n\ -_08135A66:\n\ - ldr r0, _08135A8C @ =0x00000562\n\ - adds r1, r6, r0\n\ - ldrh r0, [r2]\n\ - ldrh r3, [r1]\n\ - cmp r0, r3\n\ - bls _08135A94\n\ - adds r5, r0, 0\n\ - movs r0, 0x20\n\ - adds r1, r5, 0\n\ - bl SetGameStat\n\ - ldr r1, _08135A90 @ =0x0000270f\n\ - cmp r5, r1\n\ - bhi _08135AA4\n\ - b _08135AB4\n\ - .align 2, 0\n\ -_08135A84: .4byte gSaveBlock2\n\ -_08135A88: .4byte 0x00000554\n\ -_08135A8C: .4byte 0x00000562\n\ -_08135A90: .4byte 0x0000270f\n\ -_08135A94:\n\ - ldrh r5, [r1]\n\ - movs r0, 0x20\n\ - adds r1, r5, 0\n\ - bl SetGameStat\n\ - ldr r1, _08135AAC @ =0x0000270f\n\ - cmp r5, r1\n\ - bls _08135AB4\n\ -_08135AA4:\n\ - ldr r2, _08135AB0 @ =0x00000572\n\ - adds r0, r6, r2\n\ - strh r1, [r0]\n\ - b _08135ABA\n\ - .align 2, 0\n\ -_08135AAC: .4byte 0x0000270f\n\ -_08135AB0: .4byte 0x00000572\n\ -_08135AB4:\n\ - ldr r3, _08135AC0 @ =0x00000572\n\ - adds r0, r6, r3\n\ - strh r5, [r0]\n\ -_08135ABA:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08135AC0: .4byte 0x00000572\n\ - .syntax divided\n"); -} -#endif // NONMATCHING - -void sub_8135AC4(void) -{ - s32 i; - u8 trainerClass; - struct BattleTowerRecord *playerRecord = &gSaveBlock2.battleTower.playerRecord; - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - if (gSaveBlock2.playerGender != MALE) - { - trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] - + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; - } - else - { - trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] - + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; - } - - playerRecord->battleTowerLevelType = battleTowerLevelType; - playerRecord->trainerClass = trainerClass; - - copy_word_to_mem(playerRecord->trainerId, gSaveBlock2.playerTrainerId); - StringCopy8(playerRecord->name, gSaveBlock2.playerName); - - playerRecord->winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); - - for (i = 0; i < 6; i++) - { - playerRecord->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; - } - - for (i = 0; i < 3; i++) - { - sub_803AF78(&gUnknown_030042FC[gSaveBlock2.battleTower.selectedPartyMons[i]], &playerRecord->party[i]); - } - - SetBattleTowerRecordChecksum(&gSaveBlock2.battleTower.playerRecord); - sub_8135A3C(); -} - -void sub_8135BA0(void) -{ - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) - { - if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] > 1 - || gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] > 1) - { - sub_8135AC4(); - } - } - - sub_8135CFC(); - - gSaveBlock2.battleTower.battleOutcome = gBattleOutcome; - - if (gSpecialVar_0x8004 != 3) - { - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; - } - - VarSet(VAR_0x4000, 0); - gSaveBlock2.battleTower.unk_554 = 1; - TrySavingData(EREADER_SAVE); -} - -void BattleTower_SoftReset(void) -{ - DoSoftReset(); -} - -void ValidateBattleTowerRecordChecksums(void) -{ - u32 i; - s32 recordIndex; - struct BattleTowerRecord *record; - u32 checksum; - - checksum = 0; - for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) - { - checksum += ((u32 *)&gSaveBlock2.battleTower.playerRecord)[i]; - } - - if (gSaveBlock2.battleTower.playerRecord.checksum != checksum) - { - ClearBattleTowerRecord(&gSaveBlock2.battleTower.playerRecord); - } - - for (recordIndex = 0; recordIndex < 5; recordIndex++) - { - record = &gSaveBlock2.battleTower.records[recordIndex]; - checksum = 0; - for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) - { - checksum += ((u32 *)record)[i]; - } - - if (gSaveBlock2.battleTower.records[recordIndex].checksum != checksum) - { - ClearBattleTowerRecord(&gSaveBlock2.battleTower.records[recordIndex]); - } - } -} - -void SetBattleTowerRecordChecksum(struct BattleTowerRecord *record) -{ - u32 i; - - record->checksum = 0; - for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) - { - record->checksum += ((u32 *)record)[i]; - } -} - -void ClearBattleTowerRecord(struct BattleTowerRecord *record) -{ - u32 i; - - for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32); i++) - { - ((u32 *)record)[i] = 0; - } -} - -void sub_8135CFC(void) -{ - s32 i; - - get_trainer_name(gSaveBlock2.battleTower.defeatedByTrainerName); - gSaveBlock2.battleTower.defeatedBySpecies = gBattleMons[1].species; - gSaveBlock2.battleTower.firstMonSpecies = gBattleMons[0].species; - - for (i = 0; i < POKEMON_NAME_LENGTH; i++) - { - gSaveBlock2.battleTower.firstMonNickname[i] = gBattleMons[0].nickname[i]; - } -} - -u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) -{ - u16 winStreak = ((gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) - + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; - - if (winStreak > 9999) - { - return 9999; - } - - return winStreak; -} - -#ifdef NONMATCHING -void DetermineBattleTowerPrize(void) -{ - u16 prizeItem; - struct SaveBlock2 *saveBlock = &gSaveBlock2; - u8 battleTowerLevelType = saveBlock->battleTower.battleTowerLevelType; - - if (saveBlock->battleTower.curStreakChallengesNum[battleTowerLevelType] - 1 > 5) - { - prizeItem = sLongStreakPrizes[Random() % ARRAY_COUNT(sLongStreakPrizes)]; - } - else - { - prizeItem = sShortStreakPrizes[Random() % ARRAY_COUNT(sShortStreakPrizes)]; - } - - saveBlock->battleTower.prizeItem = prizeItem; -} -#else -__attribute__((naked)) -void DetermineBattleTowerPrize(void) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - ldr r5, _08135DB0 @ =gSaveBlock2\n\ - ldr r1, _08135DB4 @ =0x00000554\n\ - adds r0, r5, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 31\n\ - lsrs r0, 31\n\ - lsls r0, 1\n\ - ldr r2, _08135DB8 @ =0x0000055c\n\ - adds r1, r5, r2\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - subs r0, 0x1\n\ - cmp r0, 0x5\n\ - ble _08135DC0\n\ - bl Random\n\ - ldr r4, _08135DBC @ =sLongStreakPrizes\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x9\n\ - b _08135DCC\n\ - .align 2, 0\n\ -_08135DB0: .4byte gSaveBlock2\n\ -_08135DB4: .4byte 0x00000554\n\ -_08135DB8: .4byte 0x0000055c\n\ -_08135DBC: .4byte sLongStreakPrizes\n\ -_08135DC0:\n\ - bl Random\n\ - ldr r4, _08135DE8 @ =sShortStreakPrizes\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - movs r1, 0x6\n\ -_08135DCC:\n\ - bl __umodsi3\n\ - lsls r0, 16\n\ - lsrs r0, 15\n\ - adds r0, r4\n\ - ldrh r1, [r0]\n\ - movs r2, 0xAD\n\ - lsls r2, 3\n\ - adds r0, r5, r2\n\ - strh r1, [r0]\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08135DE8: .4byte sShortStreakPrizes\n\ - .syntax divided\n"); -} -#endif // NONMATCHING - -void GiveBattleTowerPrize(void) -{ - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - if (AddBagItem(gSaveBlock2.battleTower.prizeItem, 1) == TRUE) - { - CopyItemName(gSaveBlock2.battleTower.prizeItem, gStringVar1); - gScriptResult = 1; - } - else - { - gScriptResult = 0; - gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = 6; - } -} - -void AwardBattleTowerRibbons() -{ - s32 i; - u32 partyIndex; - struct Pokemon *pokemon; - u8 ribbonType; - u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; - - ribbonType = MON_DATA_WINNING_RIBBON; - if (battleTowerLevelType != 0) - { - ribbonType = MON_DATA_VICTORY_RIBBON; - } - - gScriptResult = 0; - - if (GetCurrentBattleTowerWinStreak(battleTowerLevelType) > 55) - { - for (i = 0; i < 3; i++) - { - partyIndex = gSaveBlock2.battleTower.selectedPartyMons[i] - 1; - pokemon = &gPlayerParty[partyIndex]; - if (!GetMonData(pokemon, ribbonType)) - { - gScriptResult = 1; - SetMonData(pokemon, ribbonType, (u8 *)&gScriptResult); - } - } - } - - if (gScriptResult != 0) - { - IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); - } -} - -// This is a leftover debugging function that is used to populate the E-Reader -// trainer with the player's current data. -void Debug_FillEReaderTrainerWithPlayerData(void) -{ - struct BattleTowerEReaderTrainer *ereaderTrainer; - s32 i; - s32 j; - - ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; - - if (gSaveBlock2.playerGender != MALE) - { - ereaderTrainer->trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] - + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; - } - else - { - ereaderTrainer->trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] - + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; - } - - copy_word_to_mem(ereaderTrainer->trainerId, gSaveBlock2.playerTrainerId); - StringCopy8(ereaderTrainer->name, gSaveBlock2.playerName); - - ereaderTrainer->winStreak = 1; - - j = 7; - for (i = 0; i < 6; i++) - { - ereaderTrainer->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; - ereaderTrainer->farewellPlayerLost.easyChat[i] = j; - ereaderTrainer->farewellPlayerWon.easyChat[i] = j + 6; - j++; - } - - for (i = 0; i < 3; i++) - { - sub_803AF78(&gPlayerParty[i], &ereaderTrainer->party[i]); - } - - SetEReaderTrainerChecksum(ereaderTrainer); -} - -u8 GetEReaderTrainerPicIndex(void) -{ - return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; -} - -u8 GetEReaderTrainerClassNameIndex(void) -{ - return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; -} - -void SetEReaderTrainerName(u8 *trainerName) -{ - s32 i; - - for (i = 0; i < 7; i++) - { - trainerName[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; - } - - trainerName[i] = 0xFF; -} - -// Checks if the saved E-Reader trainer is valid. -void ValidateEReaderTrainer(void) -{ - u32 i; - u32 checksum; - struct BattleTowerEReaderTrainer *ereaderTrainer; - - gScriptResult = 0; - ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; - - checksum = 0; - for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) - { - checksum |= ((u32 *)ereaderTrainer)[i]; - } - - if (checksum == 0) - { - gScriptResult = 1; - return; - } - - checksum = 0; - for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) - { - checksum += ((u32 *)ereaderTrainer)[i]; - } - - if (gSaveBlock2.battleTower.ereaderTrainer.checksum != checksum) - { - ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); - gScriptResult = 1; - } -} - -void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer) -{ - s32 i; - - ereaderTrainer->checksum = 0; - for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) - { - ereaderTrainer->checksum += ((u32 *)ereaderTrainer)[i]; - } -} - -void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) -{ - u32 i; - - for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32); i++) - { - ((u32 *)ereaderTrainer)[i] = 0; - } -} - -void PrintEReaderTrainerGreeting(void) -{ - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); -} - -void PrintEReaderTrainerFarewellMessage(void) -{ - if (gBattleOutcome == BATTLE_DREW) - { - gStringVar4[0] = 0xFF; - } - else if (gBattleOutcome == BATTLE_WON) - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon.easyChat); - } - else - { - PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost.easyChat); - } -} - -void sub_813610C(void) -{ - s32 i; - - for (i = 0; i < 2; i++) - { - if (gSaveBlock2.battleTower.var_4AE[i] == 1) - { - sub_80BFD20(); - } - } -} - -#if GERMAN -u8 de_sub_81364AC(void) -{ - if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) - { - return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; - } - else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) - { - return gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; - } - else - { - return gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass; - } -} - -u8 de_sub_81364F8(void) -{ - return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; -} -#endif diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c new file mode 100644 index 000000000..90ecc457a --- /dev/null +++ b/src/field/battle_tower.c @@ -0,0 +1,2375 @@ +#include "global.h" +#include "battle.h" +#include "battle_setup.h" +#include "battle_tower.h" +#include "battle_transition.h" +#include "data2.h" +#include "easy_chat.h" +#include "event_data.h" +#include "item.h" +#include "items.h" +#include "main.h" +#include "map_object_constants.h" +#include "moves.h" +#include "new_game.h" +#include "overworld.h" +#include "pokedex.h" +#include "rng.h" +#include "save.h" +#include "script_pokemon_80C4.h" +#include "species.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "trainer.h" +#include "tv.h" +#include "vars.h" + +#if ENGLISH +#include "../data/battle_tower/trainers.h" +#elif GERMAN +#include "../data/battle_tower/trainers_de.h" +#endif + +static const u16 sBattleTowerHeldItems[] = { + ITEM_NONE, + ITEM_KINGS_ROCK, + ITEM_SITRUS_BERRY, + ITEM_ORAN_BERRY, + ITEM_CHESTO_BERRY, + ITEM_HARD_STONE, + ITEM_FOCUS_BAND, + ITEM_PERSIM_BERRY, + ITEM_MIRACLE_SEED, + ITEM_BERRY_JUICE, + ITEM_MACHO_BRACE, + ITEM_SILVER_POWDER, + ITEM_CHERI_BERRY, + ITEM_BLACK_GLASSES, + ITEM_BLACK_BELT, + ITEM_SOUL_DEW, + ITEM_CHOICE_BAND, + ITEM_MAGNET, + ITEM_SILK_SCARF, + ITEM_WHITE_HERB, + ITEM_DEEP_SEA_SCALE, + ITEM_DEEP_SEA_TOOTH, + ITEM_MYSTIC_WATER, + ITEM_SHARP_BEAK, + ITEM_QUICK_CLAW, + ITEM_LEFTOVERS, + ITEM_RAWST_BERRY, + ITEM_LIGHT_BALL, + ITEM_POISON_BARB, + ITEM_NEVER_MELT_ICE, + ITEM_ASPEAR_BERRY, + ITEM_SPELL_TAG, + ITEM_BRIGHT_POWDER, + ITEM_LEPPA_BERRY, + ITEM_SCOPE_LENS, + ITEM_TWISTED_SPOON, + ITEM_METAL_COAT, + ITEM_MENTAL_HERB, + ITEM_CHARCOAL, + ITEM_PECHA_BERRY, + ITEM_SOFT_SAND, + ITEM_LUM_BERRY, + ITEM_DRAGON_SCALE, + ITEM_DRAGON_FANG, + ITEM_IAPAPA_BERRY, + ITEM_WIKI_BERRY, + ITEM_SEA_INCENSE, + ITEM_SHELL_BELL, + ITEM_SALAC_BERRY, + ITEM_LANSAT_BERRY, + ITEM_APICOT_BERRY, + ITEM_STARF_BERRY, + ITEM_LIECHI_BERRY, + ITEM_STICK, + ITEM_LAX_INCENSE, + ITEM_AGUAV_BERRY, + ITEM_FIGY_BERRY, + ITEM_THICK_CLUB, + ITEM_MAGO_BERRY, + ITEM_METAL_POWDER, + ITEM_PETAYA_BERRY, + ITEM_LUCKY_PUNCH, + ITEM_GANLON_BERRY, +}; + +#include "../data/battle_tower/level_50_mons.h" +#include "../data/battle_tower/level_100_mons.h" + +static const u8 sMaleTrainerClasses[] = { + TRAINER_CLASS_RUIN_MANIAC, + TRAINER_CLASS_TUBER_M, + TRAINER_CLASS_COOL_TRAINER_M, + TRAINER_CLASS_RICH_BOY, + TRAINER_CLASS_POKEMANIAC, + TRAINER_CLASS_SWIMMER_M, + TRAINER_CLASS_BLACK_BELT, + TRAINER_CLASS_GUITARIST, + TRAINER_CLASS_KINDLER, + TRAINER_CLASS_CAMPER, + TRAINER_CLASS_BUG_MANIAC, + TRAINER_CLASS_PSYCHIC_M, + TRAINER_CLASS_GENTLEMAN, + TRAINER_CLASS_SCHOOL_KID_M, + TRAINER_CLASS_POKEFAN_M, + TRAINER_CLASS_EXPERT_M, + TRAINER_CLASS_YOUNGSTER, + TRAINER_CLASS_FISHERMAN, + TRAINER_CLASS_CYCLING_TRIATHLETE_M, + TRAINER_CLASS_RUNNING_TRIATHLETE_M, + TRAINER_CLASS_SWIMMING_TRIATHLETE_M, + TRAINER_CLASS_DRAGON_TAMER, + TRAINER_CLASS_BIRD_KEEPER, + TRAINER_CLASS_NINJA_BOY, + TRAINER_CLASS_SAILOR, + TRAINER_CLASS_COLLECTOR, + TRAINER_CLASS_POKEMON_BREEDER_M, + TRAINER_CLASS_POKEMON_RANGER_M, + TRAINER_CLASS_BUG_CATCHER, + TRAINER_CLASS_HIKER, +}; + +static const u8 sFemaleTrainerClasses[] = { + TRAINER_CLASS_AROMA_LADY, + TRAINER_CLASS_TUBER_F, + TRAINER_CLASS_COOL_TRAINER_F, + TRAINER_CLASS_HEX_MANIAC, + TRAINER_CLASS_LADY, + TRAINER_CLASS_BEAUTY, + TRAINER_CLASS_PSYCHIC_F, + TRAINER_CLASS_SCHOOL_KID_F, + TRAINER_CLASS_POKEFAN_F, + TRAINER_CLASS_EXPERT_F, + TRAINER_CLASS_CYCLING_TRIATHLETE_F, + TRAINER_CLASS_RUNNING_TRIATHLETE_F, + TRAINER_CLASS_SWIMMING_TRIATHLETE_F, + TRAINER_CLASS_BATTLE_GIRL, + TRAINER_CLASS_PARASOL_LADY, + TRAINER_CLASS_SWIMMER_F, + TRAINER_CLASS_PICNICKER, + TRAINER_CLASS_POKEMON_BREEDER_F, + TRAINER_CLASS_POKEMON_RANGER_F, + TRAINER_CLASS_LASS, +}; + +static const u8 sMaleTrainerGfxIds[] = { + MAP_OBJ_GFX_HIKER, + MAP_OBJ_GFX_TUBER_M, + MAP_OBJ_GFX_MAN_4, + MAP_OBJ_GFX_BOY_4, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_BLACK_BELT, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_CAMPER, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_PSYCHIC_M, + MAP_OBJ_GFX_GENTLEMAN, + MAP_OBJ_GFX_SCHOOL_KID_M, + MAP_OBJ_GFX_MAN_3, + MAP_OBJ_GFX_OLD_MAN_1, + MAP_OBJ_GFX_YOUNGSTER, + MAP_OBJ_GFX_FISHERMAN, + MAP_OBJ_GFX_CYCLING_TRIATHLETE_M, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, + MAP_OBJ_GFX_MAN_4, + MAP_OBJ_GFX_MAN_6, + MAP_OBJ_GFX_LITTLE_BOY_1, + MAP_OBJ_GFX_SAILOR, + MAP_OBJ_GFX_MANIAC, + MAP_OBJ_GFX_MAN_5, + MAP_OBJ_GFX_CAMPER, + MAP_OBJ_GFX_BUG_CATCHER, + MAP_OBJ_GFX_HIKER, +}; + +static const u8 sFemaleTrainerGfxIds[] = { + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_TUBER_F, + MAP_OBJ_GFX_WOMAN_7, + MAP_OBJ_GFX_WOMAN_1, + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_BEAUTY, + MAP_OBJ_GFX_LASS, + MAP_OBJ_GFX_GIRL_3, + MAP_OBJ_GFX_WOMAN_2, + MAP_OBJ_GFX_OLD_WOMAN_1, + MAP_OBJ_GFX_CYCLING_TRIATHLETE_F, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_GIRL_3, + MAP_OBJ_GFX_WOMAN_7, + MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, + MAP_OBJ_GFX_PICNICKER, + MAP_OBJ_GFX_WOMAN_3, + MAP_OBJ_GFX_PICNICKER, + MAP_OBJ_GFX_LASS, +}; + +const u16 gBattleTowerBannedSpecies[] = { + SPECIES_MEW, + SPECIES_MEWTWO, + SPECIES_HO_OH, + SPECIES_LUGIA, + SPECIES_CELEBI, + SPECIES_KYOGRE, + SPECIES_GROUDON, + SPECIES_RAYQUAZA, + SPECIES_JIRACHI, + SPECIES_DEOXYS, + 0xFFFF, +}; + +// Item prizes for battle tower streaks of 5 or fewer sets. +/*static*/ const u16 sShortStreakPrizes[] = { + ITEM_HP_UP, + ITEM_PROTEIN, + ITEM_IRON, + ITEM_CALCIUM, + ITEM_CARBOS, + ITEM_ZINC, +}; + +// Item prizes for battle tower streaks of greater than 5 sets. +/*static*/ const u16 sLongStreakPrizes[] = { + ITEM_BRIGHT_POWDER, + ITEM_WHITE_HERB, + ITEM_QUICK_CLAW, + ITEM_LEFTOVERS, + ITEM_MENTAL_HERB, + ITEM_KINGS_ROCK, + ITEM_FOCUS_BAND, + ITEM_SCOPE_LENS, + ITEM_CHOICE_BAND, +}; + +static void ResetBattleTowerStreak(u8 levelType); +static void ValidateBattleTowerRecordChecksums(void); +static void PrintEReaderTrainerFarewellMessage(void); +extern void SetBattleTowerTrainerGfxId(u8); +extern void sub_8135A3C(void); +static void sub_8135CFC(void); +static void CheckMonBattleTowerBanlist(u16, u16, u16, u8, u8, u16 *, u16 *, u8 *); +static void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *); +static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer); +static void SetBattleTowerRecordChecksum(struct BattleTowerRecord *); +static void ClearBattleTowerRecord(struct BattleTowerRecord *); + +extern const u8 gUnknown_08400E23[]; +extern const u8 gUnknown_08400E29[]; +extern const u8 gUnknown_08400E2C[]; +extern const u8 gUnknown_08400E2E[]; +extern const u8 gUnknown_08400E30[]; +extern const u8 gUnknown_08400E32[]; +extern const u8 gUnknown_08400E36[]; +extern u16 gSpecialVar_0x8004; +extern u8 gTrainerClassToPicIndex[]; +extern u8 gTrainerClassToNameIndex[]; +extern u16 gTrainerBattleOpponent; +extern u16 gBattleTypeFlags; +extern u8 gSelectedOrderFromParty[]; +extern u8 gBattleOutcome; +extern struct Pokemon gUnknown_030042FC[]; +extern struct BattlePokemon gBattleMons[]; + +#define ewram160FB (ewram[0x160FB]) + + +void sub_8134548(void) +{ + u8 var1 = 0; + s32 levelType; + + for (levelType = 0; levelType < 2; levelType++) + { + switch (gSaveBlock2.battleTower.var_4AE[levelType]) + { + case 0: + default: + ResetBattleTowerStreak(levelType); + if (!var1) + { + VarSet(VAR_0x4000, 5); + } + break; + case 1: + ResetBattleTowerStreak(levelType); + VarSet(VAR_0x4000, 1); + var1++; + break; + case 4: + VarSet(VAR_0x4000, 2); + var1++; + break; + case 5: + VarSet(VAR_0x4000, 3); + var1++; + break; + case 2: + VarSet(VAR_0x4000, 4); + var1++; + break; + case 3: + case 6: + break; + } + } + + if ((gSaveBlock2.battleTower.var_4AE[0] == 3 || gSaveBlock2.battleTower.var_4AE[0] == 6) + && (gSaveBlock2.battleTower.var_4AE[1] == 3 || gSaveBlock2.battleTower.var_4AE[1] == 6)) + { + VarSet(VAR_0x4000, 5); + } + + ValidateBattleTowerRecordChecksums(); +} + +void ResetBattleTowerStreak(u8 levelType) +{ + gSaveBlock2.battleTower.var_4AE[levelType] = 0; + gSaveBlock2.battleTower.curChallengeBattleNum[levelType] = 1; + gSaveBlock2.battleTower.curStreakChallengesNum[levelType] = 1; +} + +// Checks if the next trainer in Battle Tower should be the E-Reader trainer. +bool8 ShouldBattleEReaderTrainer(u8 levelType, u16 winStreak) +{ + u8 trainerTeamLevel; + u8 monLevel; + s32 i; + u16 validPartySpecies[6]; + u16 validPartyHeldItems[6]; + u8 numValid; + + numValid = 0; + + ValidateEReaderTrainer(); + + if (gScriptResult != 0 || gSaveBlock2.battleTower.ereaderTrainer.winStreak != winStreak) + { + return FALSE; + } + + trainerTeamLevel = 50; + if (levelType != 0) + { + trainerTeamLevel = 100; + } + + for (i = 0; i < 3; i++) + { + monLevel = gSaveBlock2.battleTower.ereaderTrainer.party[i].level; + if (gSaveBlock2.battleTower.ereaderTrainer.party[i].level != trainerTeamLevel) + { + return FALSE; + } + + CheckMonBattleTowerBanlist( + gSaveBlock2.battleTower.ereaderTrainer.party[i].species, + gSaveBlock2.battleTower.ereaderTrainer.party[i].heldItem, + 1, + levelType, + monLevel, + validPartySpecies, + validPartyHeldItems, + &numValid); + } + + return numValid == 3; +} + +bool8 sub_81346F4(void) +{ + s32 recordIndex, i; + u8 battleTowerLevelType; + u16 winStreak; + bool8 retVal; + s32 numCandidates; + u32 trainerIds[5]; + + numCandidates = 0; + battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + if (ShouldBattleEReaderTrainer(battleTowerLevelType, winStreak)) + { + gSaveBlock2.battleTower.battleTowerTrainerId = BATTLE_TOWER_EREADER_TRAINER_ID; + retVal = TRUE; + } + else + { + // Check if one of the battle tower trainers from record mixing should be the next trainer. + for (recordIndex = 0; recordIndex < 5; recordIndex++) + { + struct BattleTowerRecord *record = &gSaveBlock2.battleTower.records[recordIndex]; + u32 recordHasData = 0; + u32 checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32) - 1; i++) + { + recordHasData |= ((u32 *)record)[i]; + checksum += ((u32 *)record)[i]; + } + + if (gSaveBlock2.battleTower.records[recordIndex].winStreak == winStreak + && gSaveBlock2.battleTower.records[recordIndex].battleTowerLevelType == battleTowerLevelType + && recordHasData + && gSaveBlock2.battleTower.records[recordIndex].checksum == checksum) + { + trainerIds[numCandidates] = recordIndex; + numCandidates++; + } + } + + if (numCandidates == 0) + { + retVal = FALSE; + } + else + { + gSaveBlock2.battleTower.battleTowerTrainerId = trainerIds[Random() % numCandidates] + BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID; + retVal = TRUE; + } + } + + return retVal; +} + +// void sub_81347F8(void) +// { +// bool8 levelType = gSaveBlock2.battleTower.battleTowerLevelType; +// if (sub_81346F4()) +// { +// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); +// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; +// } +// else +// { +// u16 var1; + +// if (gSaveBlock2.battleTower.curStreakChallengesNum[levelType] > 7) +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 30) >> 8; +// var1 = temp + 70; +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && var1 != gSaveBlock2.battleTower.var_4C1[i]; i++) // TODO: [i + 1]??? +// { } + +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) +// { +// break; +// } +// } +// } +// else +// { +// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] == 7) +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 5); +// u32 temp2 = (((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10) + 20); +// var1 = temp / 128 + temp2; +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) // TODO: [i + 1]???? +// { } + +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) +// { +// break; +// } +// } +// } +// else +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 320); +// u32 temp2 = ((gSaveBlock2.battleTower.curStreakChallengesNum[levelType] - 1) * 10); +// var1 = temp + temp2; +// for (i = 0; i < gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1 && gSaveBlock2.battleTower.var_4C1[i] != var1; i++) +// { } + +// if (i == gSaveBlock2.battleTower.curChallengeBattleNum[levelType] - 1) +// { +// break; +// } +// } +// } +// } + +// gSaveBlock2.battleTower.battleTowerTrainerId = var1; +// SetBattleTowerTrainerGfxId(gSaveBlock2.battleTower.battleTowerTrainerId); + +// if (gSaveBlock2.battleTower.curChallengeBattleNum[levelType] < 7) +// { +// gSaveBlock2.battleTower.var_4C1[gSaveBlock2.battleTower.curChallengeBattleNum[levelType]] = gSaveBlock2.battleTower.battleTowerTrainerId; +// } +// } +// } + +__attribute__((naked)) +void sub_81347F8(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + ldr r5, _08134838 @ =gSaveBlock2\n\ + ldr r1, _0813483C @ =0x00000554\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 31\n\ + lsrs r6, r0, 31\n\ + bl sub_81346F4\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08134848\n\ + ldr r2, _08134840 @ =0x00000564\n\ + adds r4, r5, r2\n\ + ldrb r0, [r4]\n\ + bl SetBattleTowerTrainerGfxId\n\ + lsls r0, r6, 1\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r1, r5, r3\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + adds r0, r5, r0\n\ + ldr r1, _08134844 @ =0x00000569\n\ + adds r0, r1\n\ + ldrb r1, [r4]\n\ + b _081349DC\n\ + .align 2, 0\n\ +_08134838: .4byte gSaveBlock2\n\ +_0813483C: .4byte 0x00000554\n\ +_08134840: .4byte 0x00000564\n\ +_08134844: .4byte 0x00000569\n\ +_08134848:\n\ + lsls r0, r6, 1\n\ + ldr r2, _081348D8 @ =0x0000055c\n\ + adds r1, r5, r2\n\ + adds r1, r0, r1\n\ + ldrh r1, [r1]\n\ + adds r7, r0, 0\n\ + cmp r1, 0x7\n\ + bls _0813485A\n\ + b _0813495C\n\ +_0813485A:\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r0, r5, r3\n\ + adds r1, r7, r0\n\ + ldrh r0, [r1]\n\ + cmp r0, 0x7\n\ + bne _081348E4\n\ + adds r6, r5, 0\n\ + mov r9, r7\n\ + adds r5, r1, 0\n\ + ldr r0, _081348DC @ =0x0000056a\n\ + adds r0, r6\n\ + mov r10, r0\n\ + mov r8, r5\n\ +_08134876:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r2, r1, 2\n\ + adds r2, r1\n\ + ldr r1, _081348D8 @ =0x0000055c\n\ + adds r4, r6, r1\n\ + mov r3, r9\n\ + adds r0, r3, r4\n\ + ldrh r1, [r0]\n\ + subs r1, 0x1\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 1\n\ + adds r0, 0x14\n\ + lsrs r2, 7\n\ + adds r2, r0\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + movs r1, 0\n\ + ldrh r0, [r5]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _081348C8\n\ + mov r3, r10\n\ + ldrb r0, [r3]\n\ + cmp r0, r2\n\ + beq _081348C8\n\ + subs r0, r4, 0x4\n\ + adds r0, r7, r0\n\ + ldrh r0, [r0]\n\ + subs r3, r0, 0x1\n\ + adds r4, 0xE\n\ +_081348BA:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _081348C8\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _081348BA\n\ +_081348C8:\n\ + mov r3, r8\n\ + ldrh r0, [r3]\n\ + subs r0, 0x1\n\ + ldr r4, _081348E0 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _08134876\n\ + b _081349B6\n\ + .align 2, 0\n\ +_081348D8: .4byte 0x0000055c\n\ +_081348DC: .4byte 0x0000056a\n\ +_081348E0: .4byte gSaveBlock2\n\ +_081348E4:\n\ + adds r6, r5, 0\n\ + mov r9, r7\n\ + adds r5, r1, 0\n\ + ldr r2, _08134950 @ =0x0000056a\n\ + adds r2, r6\n\ + mov r10, r2\n\ + mov r8, r5\n\ +_081348F2:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsrs r2, r0, 6\n\ + ldr r3, _08134954 @ =0x0000055c\n\ + adds r4, r6, r3\n\ + mov r1, r9\n\ + adds r0, r1, r4\n\ + ldrh r1, [r0]\n\ + subs r1, 0x1\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 1\n\ + adds r0, r2, r0\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + movs r1, 0\n\ + ldrh r0, [r5]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _08134942\n\ + mov r3, r10\n\ + ldrb r0, [r3]\n\ + cmp r0, r2\n\ + beq _08134942\n\ + subs r0, r4, 0x4\n\ + adds r0, r7, r0\n\ + ldrh r0, [r0]\n\ + subs r3, r0, 0x1\n\ + adds r4, 0xE\n\ +_08134934:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _08134942\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _08134934\n\ +_08134942:\n\ + mov r3, r8\n\ + ldrh r0, [r3]\n\ + subs r0, 0x1\n\ + ldr r4, _08134958 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _081348F2\n\ + b _081349B6\n\ + .align 2, 0\n\ +_08134950: .4byte 0x0000056a\n\ +_08134954: .4byte 0x0000055c\n\ +_08134958: .4byte gSaveBlock2\n\ +_0813495C:\n\ + movs r2, 0xAB\n\ + lsls r2, 3\n\ + adds r0, r5, r2\n\ + adds r6, r7, r0\n\ + ldr r3, _081349EC @ =0x0000056a\n\ + adds r3, r5\n\ + mov r8, r3\n\ + adds r5, r6, 0\n\ +_0813496C:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r0, r1, 4\n\ + subs r0, r1\n\ + lsls r0, 1\n\ + asrs r0, 8\n\ + adds r0, 0x46\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + movs r1, 0\n\ + ldrh r0, [r6]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _081349AC\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + ldr r4, _081349F0 @ =gSaveBlock2\n\ + cmp r0, r2\n\ + beq _081349AC\n\ + ldrh r0, [r5]\n\ + subs r3, r0, 0x1\n\ + ldr r0, _081349EC @ =0x0000056a\n\ + adds r4, r0\n\ +_0813499E:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _081349AC\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _0813499E\n\ +_081349AC:\n\ + ldrh r0, [r6]\n\ + subs r0, 0x1\n\ + ldr r4, _081349F0 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _0813496C\n\ +_081349B6:\n\ + ldr r1, _081349F4 @ =0x00000564\n\ + adds r0, r4, r1\n\ + strb r2, [r0]\n\ + ldr r2, _081349F4 @ =0x00000564\n\ + adds r5, r4, r2\n\ + ldrb r0, [r5]\n\ + bl SetBattleTowerTrainerGfxId\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r0, r4, r3\n\ + adds r1, r7, r0\n\ + ldrh r0, [r1]\n\ + cmp r0, 0x6\n\ + bhi _081349DE\n\ + adds r0, r4, r0\n\ + ldr r1, _081349F8 @ =0x00000569\n\ + adds r0, r1\n\ + ldrb r1, [r5]\n\ +_081349DC:\n\ + strb r1, [r0]\n\ +_081349DE:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_081349EC: .4byte 0x0000056a\n\ +_081349F0: .4byte gSaveBlock2\n\ +_081349F4: .4byte 0x00000564\n\ +_081349F8: .4byte 0x00000569\n\ +.syntax divided\n"); +} + +void SetBattleTowerTrainerGfxId(u8 trainerIndex) +{ + u32 i; + u8 trainerClass; + + if (trainerIndex < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + trainerClass = gBattleTowerTrainers[trainerIndex].trainerClass; + } + else if (trainerIndex < BATTLE_TOWER_EREADER_TRAINER_ID) + { + trainerClass = gSaveBlock2.battleTower.records[trainerIndex - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; + } + else + { + trainerClass = gSaveBlock2.battleTower.ereaderTrainer.trainerClass; + } + + for (i = 0; i < 30 && sMaleTrainerClasses[i] != trainerClass; i++); + if (i != 30) + { + u8 trainerObjectGfxId = sMaleTrainerGfxIds[i]; + VarSet(0x4010, trainerObjectGfxId); + return; + } + + for (i = 0; i < 20 && sFemaleTrainerClasses[i] != trainerClass; i++); + if (i != 20) + { + u8 trainerObjectGfxId = sFemaleTrainerGfxIds[i]; + VarSet(0x4010, trainerObjectGfxId); + return; + } + + VarSet(0x4010, MAP_OBJ_GFX_BOY_1); +} + +void SetEReaderTrainerGfxId() +{ + SetBattleTowerTrainerGfxId(BATTLE_TOWER_EREADER_TRAINER_ID); +} + +// void sub_8134AC0(struct BattleTowerRecord *record) +// { +// u16 var1[6]; +// u16 var2[6]; +// s32 i, j, k; +// s16 l = 0; + +// for (i = 0; i < 5; i++) +// { +// k = 0; +// for (j = 0; j < 4 && gSaveBlock2.battleTower.records[i].trainerId[j] == record->trainerId[j]; j++); +// if (j == 4) +// { +// for (; k < 7 && gSaveBlock2.battleTower.records[i].name[4] == record->name[4]; k++) +// { +// if (record->name[4] == 0xFF) +// { +// k = 7; +// break; +// } +// } +// } + +// if (k == 7) +// { +// break; +// } +// } + +// if (i < 5) +// { +// gSaveBlock2.battleTower.records[i] = *record; +// return; +// } + +// i = 0; +// while (i < 5) +// { +// if (gSaveBlock2.battleTower.records[i].winStreak == 0) +// { +// if (i > 4) +// { +// break; +// } + +// gSaveBlock2.battleTower.records[i] = *record; +// return; +// } + +// i++; +// } + +// var1[0] = gSaveBlock2.battleTower.records[0].winStreak; +// var2[0] = 0; +// l++; + +// for (i = 1; i < 5; i++) +// { +// j = 0; +// if (j < l) +// { +// for (; gSaveBlock2.battleTower.records[i].winStreak <= var1[j]; j++) +// { +// if (gSaveBlock2.battleTower.records[i].winStreak < var1[j]) +// { +// j = 0; +// l = 1; +// var1[0] = gSaveBlock2.battleTower.records[i].winStreak; +// var2[0] = i; +// break; +// } +// } +// } + +// if (j == l) +// { +// var1[l] = gSaveBlock2.battleTower.records[i].winStreak; +// var2[l] = i; +// l++; +// } +// } + +// gSaveBlock2.battleTower.records[var2[(Random() % l)]] = *record; +// } +__attribute__((naked)) +void sub_8134AC0(struct BattleTowerRecord *record) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x1C\n\ + movs r7, 0\n\ + mov r8, r0\n\ + movs r5, 0\n\ + ldr r0, _08134B3C @ =gSaveBlock2\n\ + mov r12, r0\n\ + mov r1, r8\n\ + ldrb r1, [r1, 0xC]\n\ + str r1, [sp, 0x18]\n\ + movs r2, 0xAA\n\ + lsls r2, 1\n\ + add r2, r12\n\ + mov r10, r2\n\ + mov r9, r5\n\ +_08134AE6:\n\ + movs r6, 0\n\ + movs r3, 0\n\ + ldr r0, _08134B40 @ =gSaveBlock2 + 0x158\n\ + add r0, r9\n\ + ldrb r0, [r0]\n\ + ldr r1, [sp, 0x18]\n\ + cmp r0, r1\n\ + bne _08134B14\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + ldr r1, _08134B40 @ =gSaveBlock2 + 0x158\n\ + adds r2, r0, r1\n\ + mov r4, r8\n\ + adds r4, 0xC\n\ +_08134B02:\n\ + adds r2, 0x1\n\ + adds r3, 0x1\n\ + cmp r3, 0x3\n\ + bgt _08134B14\n\ + adds r1, r4, r3\n\ + ldrb r0, [r2]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + beq _08134B02\n\ +_08134B14:\n\ + cmp r3, 0x4\n\ + bne _08134B54\n\ + movs r6, 0\n\ + mov r2, r10\n\ + ldrb r0, [r2]\n\ + mov r3, r8\n\ + ldrb r3, [r3, 0x8]\n\ + cmp r0, r3\n\ + bne _08134B54\n\ + adds r1, r0, 0\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + adds r0, 0x4\n\ + ldr r3, _08134B44 @ =gSaveBlock2 + 0x150\n\ + adds r2, r0, r3\n\ +_08134B32:\n\ + cmp r1, 0xFF\n\ + bne _08134B48\n\ + movs r6, 0x7\n\ + b _08134B54\n\ + .align 2, 0\n\ +_08134B3C: .4byte gSaveBlock2\n\ +_08134B40: .4byte gSaveBlock2 + 0x158\n\ +_08134B44: .4byte gSaveBlock2 + 0x150\n\ +_08134B48:\n\ + adds r6, 0x1\n\ + cmp r6, 0x6\n\ + bgt _08134B54\n\ + ldrb r0, [r2]\n\ + cmp r0, r1\n\ + beq _08134B32\n\ +_08134B54:\n\ + cmp r6, 0x7\n\ + beq _08134B64\n\ + movs r0, 0xA4\n\ + add r10, r0\n\ + add r9, r0\n\ + adds r5, 0x1\n\ + cmp r5, 0x4\n\ + ble _08134AE6\n\ +\n\ +_08134B64:\n\ + cmp r5, 0x4\n\ + bgt _08134B76\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + add r0, r12\n\ + movs r1, 0xA6\n\ + lsls r1, 1\n\ + adds r0, r1\n\ + b _08134B9E\n\ +_08134B76:\n\ + movs r5, 0\n\ + movs r1, 0xA7\n\ + lsls r1, 1\n\ + add r1, r12\n\ + b _08134B88\n\ +_08134B80:\n\ + adds r1, 0xA4\n\ + adds r5, 0x1\n\ + cmp r5, 0x4\n\ + bgt _08134BA8\n\ +_08134B88:\n\ + ldrh r0, [r1]\n\ + cmp r0, 0\n\ + bne _08134B80\n\ + cmp r5, 0x4\n\ + bgt _08134BA8\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + add r0, r12\n\ + movs r2, 0xA6\n\ + lsls r2, 1\n\ + adds r0, r2\n\ +_08134B9E:\n\ + mov r1, r8\n\ + movs r2, 0xA4\n\ + bl memcpy\n\ + b _08134C5E\n\ +\n\ +_08134BA8:\n\ + mov r2, sp\n\ + movs r3, 0xA7\n\ + lsls r3, 1\n\ + mov r1, r12\n\ + adds r0, r1, r3\n\ + ldrh r0, [r0]\n\ + movs r1, 0\n\ + strh r0, [r2]\n\ + add r0, sp, 0xC\n\ + strh r1, [r0]\n\ + adds r7, 0x1\n\ + movs r5, 0x1\n\ + add r2, sp, 0xC @var2 = r2\n\ + mov r9, r2\n\ + mov r10, r3\n\ +_08134BC6:\n\ + movs r3, 0\n\ + adds r0, r5, 0x1\n\ + mov r12, r0\n\ + cmp r3, r7\n\ + bge _08134C0A @ j < l\n\ + movs r1, 0xA4\n\ + adds r0, r5, 0\n\ + muls r0, r1\n\ + ldr r2, _08134BFC @ =gSaveBlock2\n\ + adds r0, r2\n\ + mov r1, r10\n\ + adds r4, r0, r1\n\ + mov r6, sp\n\ +_08134BE0:\n\ + lsls r0, r3, 1\n\ + add r0, sp\n\ + ldrh r2, [r4]\n\ + adds r1, r2, 0\n\ + ldrh r0, [r0]\n\ + cmp r1, r0\n\ + bcs _08134C00\n\ + movs r3, 0\n\ + movs r7, 0x1\n\ + strh r2, [r6]\n\ + mov r2, r9\n\ + strh r5, [r2]\n\ + b _08134C0A\n\ + .align 2, 0\n\ +_08134BFC: .4byte gSaveBlock2\n\ +_08134C00:\n\ + cmp r1, r0\n\ + bhi _08134C0A\n\ + adds r3, 0x1\n\ + cmp r3, r7\n\ + blt _08134BE0\n\ +_08134C0A:\n\ + cmp r3, r7\n\ + bne _08134C2A\n\ + lsls r1, r7, 1\n\ + mov r3, sp\n\ + adds r2, r3, r1\n\ + movs r3, 0xA4\n\ + adds r0, r5, 0\n\ + muls r0, r3\n\ + ldr r3, _08134C70 @ =gSaveBlock2\n\ + adds r0, r3\n\ + add r0, r10\n\ + ldrh r0, [r0]\n\ + strh r0, [r2]\n\ + add r1, r9\n\ + strh r5, [r1]\n\ + adds r7, 0x1\n\ +_08134C2A:\n\ + mov r5, r12\n\ + cmp r5, 0x4\n\ + ble _08134BC6\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + adds r1, r7, 0\n\ + bl __modsi3\n\ + adds r5, r0, 0\n\ + ldr r2, _08134C70 @ =gSaveBlock2\n\ + lsls r0, r5, 1\n\ + add r0, sp\n\ + adds r0, 0xC\n\ + ldrh r1, [r0]\n\ + movs r0, 0xA4\n\ + muls r0, r1\n\ + adds r0, r2\n\ + movs r1, 0xA6\n\ + lsls r1, 1\n\ + adds r0, r1\n\ + mov r1, r8\n\ + movs r2, 0xA4\n\ + bl memcpy\n\ +_08134C5E:\n\ + add sp, 0x1C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08134C70: .4byte gSaveBlock2\n\ + .syntax divided\n"); +} + +u8 get_trainer_class_pic_index(void) +{ + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; + } + else + { + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; + } +} + +u8 get_trainer_class_name_index(void) +{ + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass]; + } + else + { + return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass]; + } +} + +void get_trainer_name(u8* dest) +{ + s32 i; + + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + for (i = 0; i < 7; i++) + { + dest[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; + } + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + for (i = 0; i < 7; i++) + { + dest[i] = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].name[i]; + } + } + else + { + for (i = 0; i < 7; i++) + { + dest[i] = gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].name[i]; + } + } + + dest[i] = 0xFF; +} + +void FillBattleTowerTrainerParty(void) +{ + s32 partyIndex, i; + u16 chosenMonIndices[3]; + u8 friendship; + u8 level; + u8 fixedIV; + u8 battleMonsOffset; + u8 monPoolSize; + u8 teamFlags; + const struct BattleTowerPokemon *battleTowerMons; + + battleMonsOffset = 0; + monPoolSize = 60; + friendship = 255; + + ZeroEnemyPartyMons(); + + // Different trainers have access to different sets of pokemon to use in battle. + // The pokemon later in gBattleTowerLevel100Mons or gBattleTowerLevel50Mons are + // stronger. Additionally, the later trainers' pokemon are granted higher IVs. + if (gSaveBlock2.battleTower.battleTowerTrainerId < 20) + { + fixedIV = 6; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 30) + { + fixedIV = 9; + battleMonsOffset = 30; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 40) + { + fixedIV = 12; + battleMonsOffset = 60; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 50) + { + fixedIV = 15; + battleMonsOffset = 90; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 60) + { + fixedIV = 18; + battleMonsOffset = 120; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 70) + { + fixedIV = 21; + battleMonsOffset = 150; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < 80) + { + fixedIV = 31; + battleMonsOffset = 180; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + fixedIV = 31; + battleMonsOffset = 200; + monPoolSize = 100; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + // Load E-Reader trainer's party. + for (partyIndex = 0; partyIndex < 3; partyIndex++) + { + sub_803ADE8(&gEnemyParty[partyIndex], &gSaveBlock2.battleTower.ereaderTrainer.party[partyIndex]); + } + + return; + } + else + { + // Load a battle tower record's party. (From record mixing) + for (partyIndex = 0; partyIndex < 3; partyIndex++) + { + sub_803ADE8( + &gEnemyParty[partyIndex], + &gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].party[partyIndex]); + } + + return; + } + + // Use the appropriate list of pokemon and level depending on the + // current challenge type. (level 50 or level 100 challenge) + if (gSaveBlock2.battleTower.battleTowerLevelType != 0) + { + battleTowerMons = gBattleTowerLevel100Mons; + level = 100; + } + else + { + battleTowerMons = gBattleTowerLevel50Mons; + level = 50; + } + + teamFlags = gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].teamFlags; + + // Attempt to fill the trainer's party with random Pokemon until 3 have been + // successfully chosen. The trainer's party may not have duplicate pokemon species + // or duplicate held items. Each pokemon must have all of the trainer's team flags + // set, as well. If any of those conditions are not met, then the loop starts over + // and another pokemon is chosen at random. + partyIndex = 0; + while (partyIndex != 3) + { + // Pick a random pokemon index based on the number of pokemon available to choose from + // and the starting offset in the battle tower pokemon array. + s32 battleMonIndex = ((Random() & 0xFF) * monPoolSize) / 256 + battleMonsOffset; + + // Ensure the chosen pokemon has compatible team flags with the trainer. + if (teamFlags == 0 || (battleTowerMons[battleMonIndex].teamFlags & teamFlags) == teamFlags) + { + // Ensure this pokemon species isn't a duplicate. + for (i = 0; i < partyIndex; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL) == battleTowerMons[battleMonIndex].species) + break; + } + + if (i != partyIndex) + continue; + + // Ensure this pokemon's held item isn't a duplicate. + for (i = 0; i < partyIndex; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) != 0 + && GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, NULL) == sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]) + { + break; + } + } + + if (i != partyIndex) + continue; + + // Ensure this exact pokemon index isn't a duplicate. This check doesn't seem necessary + // because the species and held items were already checked directly above. Perhaps this + // is leftover code before the logic for duplicate species and held items was added. + for (i = 0; i < partyIndex && chosenMonIndices[i] != battleMonIndex; i++); + + if (i != partyIndex) + continue; + + chosenMonIndices[partyIndex] = battleMonIndex; + + // Place the chosen pokemon into the trainer's party. + CreateMonWithEVSpread( + &gEnemyParty[partyIndex], + battleTowerMons[battleMonIndex].species, + level, + fixedIV, + battleTowerMons[battleMonIndex].evSpread); + + // Give the chosen pokemon its specified moves. + for (i = 0; i < 4; i++) + { + SetMonMoveSlot(&gEnemyParty[partyIndex], battleTowerMons[battleMonIndex].moves[i], i); + if (battleTowerMons[battleMonIndex].moves[i] == MOVE_FRUSTRATION) + { + // MOVE_FRUSTRATION is more powerful the lower the pokemon's friendship is. + friendship = 0; + } + } + + SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship); + SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, (u8 *)&sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]); + + // The pokemon was successfully added to the trainer's party, so it's safe to move on to + // the next party slot. + partyIndex++; + } + } + +} + +u32 CountBattleTowerBanlistCaught() +{ + s32 i; + u32 numCaught = 0; + + for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) + { + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBannedSpecies[i]), FLAG_GET_CAUGHT)) + { + numCaught++; + } + } + + return numCaught; +} + +u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numToAppend) +{ + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) + { + curIndexToAppend++; + + switch (curIndexToAppend - 1) + { + case 0: + case 2: + case 4: + case 6: + case 8: + case 10: + if (numToAppend == curIndexToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else if (numToAppend > curIndexToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + break; + case 1: + if (curIndexToAppend == numToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + + StringAppend(gStringVar1, gUnknown_08400E30); + break; + case 3: + case 5: + case 7: + case 9: + default: + if (curIndexToAppend == numToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + + StringAppend(gStringVar1, gUnknown_08400E2E); + break; + } + + StringAppend(gStringVar1, gSpeciesNames[species]); + } + + return curIndexToAppend; +} + +void CheckMonBattleTowerBanlist(u16 species, u16 heldItem, u16 hp, u8 battleTowerLevelType, u8 monLevel, u16 *validPartySpecies, u16 *validPartyHeldItems, u8 *numValid) +{ + s32 i; + u32 counter = 0; + + if (species == SPECIES_EGG || species == SPECIES_NONE) + return; + + while (1) + { + if (gBattleTowerBannedSpecies[counter] == 0xFFFF) + goto EXIT2; // Couldn't get the code to match without this GOTO + + if (gBattleTowerBannedSpecies[counter] == species) + break; + + counter++; + } + + if (gBattleTowerBannedSpecies[counter] != 0xFFFF) + return; + + EXIT2: + if (battleTowerLevelType == 0 && monLevel > 50) + return; + + for (i = 0; i < *numValid && validPartySpecies[i] != species ; i++); + if (i != *numValid) + return; + + if (heldItem != 0) + { + for (i = 0; i < *numValid && validPartyHeldItems[i] != heldItem ; i++); + if (i != *numValid) + return; + } + + validPartySpecies[*numValid] = species; + validPartyHeldItems[*numValid] = heldItem; + *numValid = *numValid + 1; +} + +void CheckPartyBattleTowerBanlist(void) +{ + s32 i; + u16 species2; + u16 heldItem; + u8 level; + u16 hp; + u32 numBanlistCaught; + u16 validPartySpecies[6]; + u16 validPartyHeldItems[6]; + u8 counter; + + counter = 0; + + for (i = 0; i < PARTY_SIZE; i++) + { + species2 = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + level = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + + CheckMonBattleTowerBanlist(species2, heldItem, hp, gScriptResult, level, validPartySpecies, validPartyHeldItems, &counter); + } + + if (counter < 3) + { + gStringVar1[0] = 0xFF; + gSpecialVar_0x8004 = 1; + counter = 0; + + numBanlistCaught = CountBattleTowerBanlistCaught(); + + for (i = 0; gBattleTowerBannedSpecies[i] != 0xFFFF; i++) + { + counter = AppendBattleTowerBannedSpeciesName(gBattleTowerBannedSpecies[i], counter, numBanlistCaught); + } + + if (counter == 0) + { + StringAppend(gStringVar1, gUnknown_08400E2C); + StringAppend(gStringVar1, gUnknown_08400E32); + return; + } + + if (1 & counter) + StringAppend(gStringVar1, gUnknown_08400E2E); + else + StringAppend(gStringVar1, gUnknown_08400E2C); + + StringAppend(gStringVar1, gUnknown_08400E36); + } + else + { + gSpecialVar_0x8004 = 0; + gSaveBlock2.battleTower.battleTowerLevelType = gScriptResult; + } +} + +void PrintBattleTowerTrainerMessage(u16 *easyChat) +{ + sub_80EB544(gStringVar4, easyChat, 2, 3); +} + +void PrintBattleTowerTrainerGreeting(void) +{ + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId < BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + PrintBattleTowerTrainerMessage((u16 *)gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].greeting.easyChat); + } + else + { + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].greeting.easyChat); + } +} + +void sub_81354CC(void) +{ + s32 i; + u16 heldItem; + + switch (gSpecialVar_0x8004) + { + case 0: + break; + case 1: + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); + } + break; + case 2: + PrintEReaderTrainerFarewellMessage(); + break; + } + + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void sub_8135534(u8 taskId) +{ + if (IsBattleTransitionDone() == TRUE) + { + gMain.savedCallback = sub_81354CC; + SetMainCallback2(sub_800E7C4); + DestroyTask(taskId); + } +} + +void sub_813556C(void) +{ + s32 i; + u16 heldItem; + u8 transition; + + switch (gSpecialVar_0x8004) + { + case 0: + gBattleTypeFlags = (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent = 0; + + FillBattleTowerTrainerParty(); + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + case 1: + for (i = 0; i < PARTY_SIZE; i++) + { + heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + SetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); + } + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + case 2: + ZeroEnemyPartyMons(); + + for (i = 0; i < 3; i++) + { + sub_803ADE8(&gEnemyParty[i], &gSaveBlock2.battleTower.ereaderTrainer.party[i]); + } + + gBattleTypeFlags = (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TRAINER); + gTrainerBattleOpponent = 0; + + CreateTask(sub_8135534, 1); + current_map_music_set__default_for_battle(0); + transition = BattleSetup_GetBattleTowerBattleTransition(); + BattleTransition_StartOnField(transition); + break; + } +} + +void sub_8135668(void) +{ + s32 i; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + ewram160FB = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 1: + gSaveBlock2.battleTower.battleTowerLevelType = gSpecialVar_0x8005; + break; + case 2: + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 3: + gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] = gSpecialVar_0x8005; + break; + case 4: + gSaveBlock2.battleTower.battleTowerTrainerId = gSpecialVar_0x8005; + break; + case 5: + for (i = 0; i < 3; i++) + { + gSaveBlock2.battleTower.selectedPartyMons[i] = gSelectedOrderFromParty[i]; + } + break; + case 6: + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); + } + + if (gSaveBlock2.battleTower.totalBattleTowerWins < 9999) + { + gSaveBlock2.battleTower.totalBattleTowerWins++; + } + + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]++; + sub_8135A3C(); + gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; + + gStringVar1[0] = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] + 0xA1; + gStringVar1[1] = 0xFF; + break; + case 7: + if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] < 1430) + { + gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]++; + } + + sub_8135A3C(); + gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; + break; + case 8: + gSaveBlock2.battleTower.unk_554 = gSpecialVar_0x8005; + break; + case 9: + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); + break; + case 11: + if (gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] != 3) + { + ResetBattleTowerStreak(battleTowerLevelType); + } + break; + case 12: + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; + break; + case 13: + gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 14: + gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + break; + } +} + +void sub_81358A4(void) +{ + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + switch (gSpecialVar_0x8004) + { + case 0: + gScriptResult = gSaveBlock2.battleTower.var_4AE[battleTowerLevelType]; + break; + case 1: + gScriptResult = gSaveBlock2.battleTower.battleTowerLevelType; + break; + case 2: + gScriptResult = gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; + break; + case 3: + gScriptResult = gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType]; + break; + case 4: + gScriptResult = gSaveBlock2.battleTower.battleTowerTrainerId; + break; + case 5: + case 6: + case 7: + break; + case 8: + gScriptResult = gSaveBlock2.battleTower.unk_554; + break; + case 9: + gScriptResult = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 10: + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2.battleTower.bestBattleTowerWinStreak); + break; + case 11: + ResetBattleTowerStreak(battleTowerLevelType); + break; + case 12: + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = ewram160FB; + break; + case 13: + gSaveBlock2.battleTower.currentWinStreaks[battleTowerLevelType] = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + break; + case 14: + gSaveBlock2.battleTower.lastStreakLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + break; + } +} + +void sub_8135A14(void) +{ + s32 i; + + for (i = 0; i < 3; i++) + { + gSelectedOrderFromParty[i] = gSaveBlock2.battleTower.selectedPartyMons[i]; + } + + ReducePlayerPartyToThree(); +} + +#ifdef NONMATCHING +void sub_8135A3C(void) +{ + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + u16 winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + + if (gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] < winStreak) + { + gSaveBlock2.battleTower.recordWinStreaks[battleTowerLevelType] = winStreak; + } + + if (gSaveBlock2.battleTower.recordWinStreaks[0] > gSaveBlock2.battleTower.recordWinStreaks[1]) + { + u16 streak = gSaveBlock2.battleTower.recordWinStreaks[0]; + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + if (streak > 9999) + { + gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; + } + else + { + gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; + } + } + else + { + u16 streak = gSaveBlock2.battleTower.recordWinStreaks[1]; + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, streak); + if (streak > 9999) + { + gSaveBlock2.battleTower.bestBattleTowerWinStreak = 9999; + } + else + { + gSaveBlock2.battleTower.bestBattleTowerWinStreak = streak; + } + } +} +#else +__attribute__((naked)) +void sub_8135A3C(void) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + ldr r6, _08135A84 @ =gSaveBlock2\n\ + ldr r1, _08135A88 @ =0x00000554\n\ + adds r0, r6, r1\n\ + ldrb r4, [r0]\n\ + lsls r4, 31\n\ + lsrs r4, 31\n\ + adds r0, r4, 0\n\ + bl GetCurrentBattleTowerWinStreak\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + lsls r4, 1\n\ + movs r3, 0xAC\n\ + lsls r3, 3\n\ + adds r2, r6, r3\n\ + adds r4, r2\n\ + ldrh r0, [r4]\n\ + cmp r0, r5\n\ + bcs _08135A66\n\ + strh r5, [r4]\n\ +_08135A66:\n\ + ldr r0, _08135A8C @ =0x00000562\n\ + adds r1, r6, r0\n\ + ldrh r0, [r2]\n\ + ldrh r3, [r1]\n\ + cmp r0, r3\n\ + bls _08135A94\n\ + adds r5, r0, 0\n\ + movs r0, 0x20\n\ + adds r1, r5, 0\n\ + bl SetGameStat\n\ + ldr r1, _08135A90 @ =0x0000270f\n\ + cmp r5, r1\n\ + bhi _08135AA4\n\ + b _08135AB4\n\ + .align 2, 0\n\ +_08135A84: .4byte gSaveBlock2\n\ +_08135A88: .4byte 0x00000554\n\ +_08135A8C: .4byte 0x00000562\n\ +_08135A90: .4byte 0x0000270f\n\ +_08135A94:\n\ + ldrh r5, [r1]\n\ + movs r0, 0x20\n\ + adds r1, r5, 0\n\ + bl SetGameStat\n\ + ldr r1, _08135AAC @ =0x0000270f\n\ + cmp r5, r1\n\ + bls _08135AB4\n\ +_08135AA4:\n\ + ldr r2, _08135AB0 @ =0x00000572\n\ + adds r0, r6, r2\n\ + strh r1, [r0]\n\ + b _08135ABA\n\ + .align 2, 0\n\ +_08135AAC: .4byte 0x0000270f\n\ +_08135AB0: .4byte 0x00000572\n\ +_08135AB4:\n\ + ldr r3, _08135AC0 @ =0x00000572\n\ + adds r0, r6, r3\n\ + strh r5, [r0]\n\ +_08135ABA:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08135AC0: .4byte 0x00000572\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_8135AC4(void) +{ + s32 i; + u8 trainerClass; + struct BattleTowerRecord *playerRecord = &gSaveBlock2.battleTower.playerRecord; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + if (gSaveBlock2.playerGender != MALE) + { + trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; + } + else + { + trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; + } + + playerRecord->battleTowerLevelType = battleTowerLevelType; + playerRecord->trainerClass = trainerClass; + + copy_word_to_mem(playerRecord->trainerId, gSaveBlock2.playerTrainerId); + StringCopy8(playerRecord->name, gSaveBlock2.playerName); + + playerRecord->winStreak = GetCurrentBattleTowerWinStreak(battleTowerLevelType); + + for (i = 0; i < 6; i++) + { + playerRecord->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; + } + + for (i = 0; i < 3; i++) + { + sub_803AF78(&gUnknown_030042FC[gSaveBlock2.battleTower.selectedPartyMons[i]], &playerRecord->party[i]); + } + + SetBattleTowerRecordChecksum(&gSaveBlock2.battleTower.playerRecord); + sub_8135A3C(); +} + +void sub_8135BA0(void) +{ + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + if (gSpecialVar_0x8004 == 3 || gSpecialVar_0x8004 == 0) + { + if (gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] > 1 + || gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType] > 1) + { + sub_8135AC4(); + } + } + + sub_8135CFC(); + + gSaveBlock2.battleTower.battleOutcome = gBattleOutcome; + + if (gSpecialVar_0x8004 != 3) + { + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = gSpecialVar_0x8004; + } + + VarSet(VAR_0x4000, 0); + gSaveBlock2.battleTower.unk_554 = 1; + TrySavingData(EREADER_SAVE); +} + +void BattleTower_SoftReset(void) +{ + DoSoftReset(); +} + +void ValidateBattleTowerRecordChecksums(void) +{ + u32 i; + s32 recordIndex; + struct BattleTowerRecord *record; + u32 checksum; + + checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + checksum += ((u32 *)&gSaveBlock2.battleTower.playerRecord)[i]; + } + + if (gSaveBlock2.battleTower.playerRecord.checksum != checksum) + { + ClearBattleTowerRecord(&gSaveBlock2.battleTower.playerRecord); + } + + for (recordIndex = 0; recordIndex < 5; recordIndex++) + { + record = &gSaveBlock2.battleTower.records[recordIndex]; + checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + checksum += ((u32 *)record)[i]; + } + + if (gSaveBlock2.battleTower.records[recordIndex].checksum != checksum) + { + ClearBattleTowerRecord(&gSaveBlock2.battleTower.records[recordIndex]); + } + } +} + +void SetBattleTowerRecordChecksum(struct BattleTowerRecord *record) +{ + u32 i; + + record->checksum = 0; + for (i = 0; i < (sizeof(struct BattleTowerRecord) / sizeof(u32)) - 1; i++) + { + record->checksum += ((u32 *)record)[i]; + } +} + +void ClearBattleTowerRecord(struct BattleTowerRecord *record) +{ + u32 i; + + for (i = 0; i < sizeof(struct BattleTowerRecord) / sizeof(u32); i++) + { + ((u32 *)record)[i] = 0; + } +} + +void sub_8135CFC(void) +{ + s32 i; + + get_trainer_name(gSaveBlock2.battleTower.defeatedByTrainerName); + gSaveBlock2.battleTower.defeatedBySpecies = gBattleMons[1].species; + gSaveBlock2.battleTower.firstMonSpecies = gBattleMons[0].species; + + for (i = 0; i < POKEMON_NAME_LENGTH; i++) + { + gSaveBlock2.battleTower.firstMonNickname[i] = gBattleMons[0].nickname[i]; + } +} + +u16 GetCurrentBattleTowerWinStreak(u8 battleTowerLevelType) +{ + u16 winStreak = ((gSaveBlock2.battleTower.curStreakChallengesNum[battleTowerLevelType] - 1) * 7 - 1) + + gSaveBlock2.battleTower.curChallengeBattleNum[battleTowerLevelType]; + + if (winStreak > 9999) + { + return 9999; + } + + return winStreak; +} + +#ifdef NONMATCHING +void DetermineBattleTowerPrize(void) +{ + u16 prizeItem; + struct SaveBlock2 *saveBlock = &gSaveBlock2; + u8 battleTowerLevelType = saveBlock->battleTower.battleTowerLevelType; + + if (saveBlock->battleTower.curStreakChallengesNum[battleTowerLevelType] - 1 > 5) + { + prizeItem = sLongStreakPrizes[Random() % ARRAY_COUNT(sLongStreakPrizes)]; + } + else + { + prizeItem = sShortStreakPrizes[Random() % ARRAY_COUNT(sShortStreakPrizes)]; + } + + saveBlock->battleTower.prizeItem = prizeItem; +} +#else +__attribute__((naked)) +void DetermineBattleTowerPrize(void) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + ldr r5, _08135DB0 @ =gSaveBlock2\n\ + ldr r1, _08135DB4 @ =0x00000554\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 31\n\ + lsrs r0, 31\n\ + lsls r0, 1\n\ + ldr r2, _08135DB8 @ =0x0000055c\n\ + adds r1, r5, r2\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + subs r0, 0x1\n\ + cmp r0, 0x5\n\ + ble _08135DC0\n\ + bl Random\n\ + ldr r4, _08135DBC @ =sLongStreakPrizes\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x9\n\ + b _08135DCC\n\ + .align 2, 0\n\ +_08135DB0: .4byte gSaveBlock2\n\ +_08135DB4: .4byte 0x00000554\n\ +_08135DB8: .4byte 0x0000055c\n\ +_08135DBC: .4byte sLongStreakPrizes\n\ +_08135DC0:\n\ + bl Random\n\ + ldr r4, _08135DE8 @ =sShortStreakPrizes\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x6\n\ +_08135DCC:\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r0, 15\n\ + adds r0, r4\n\ + ldrh r1, [r0]\n\ + movs r2, 0xAD\n\ + lsls r2, 3\n\ + adds r0, r5, r2\n\ + strh r1, [r0]\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08135DE8: .4byte sShortStreakPrizes\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void GiveBattleTowerPrize(void) +{ + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + if (AddBagItem(gSaveBlock2.battleTower.prizeItem, 1) == TRUE) + { + CopyItemName(gSaveBlock2.battleTower.prizeItem, gStringVar1); + gScriptResult = 1; + } + else + { + gScriptResult = 0; + gSaveBlock2.battleTower.var_4AE[battleTowerLevelType] = 6; + } +} + +void AwardBattleTowerRibbons() +{ + s32 i; + u32 partyIndex; + struct Pokemon *pokemon; + u8 ribbonType; + u8 battleTowerLevelType = gSaveBlock2.battleTower.battleTowerLevelType; + + ribbonType = MON_DATA_WINNING_RIBBON; + if (battleTowerLevelType != 0) + { + ribbonType = MON_DATA_VICTORY_RIBBON; + } + + gScriptResult = 0; + + if (GetCurrentBattleTowerWinStreak(battleTowerLevelType) > 55) + { + for (i = 0; i < 3; i++) + { + partyIndex = gSaveBlock2.battleTower.selectedPartyMons[i] - 1; + pokemon = &gPlayerParty[partyIndex]; + if (!GetMonData(pokemon, ribbonType)) + { + gScriptResult = 1; + SetMonData(pokemon, ribbonType, (u8 *)&gScriptResult); + } + } + } + + if (gScriptResult != 0) + { + IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); + } +} + +// This is a leftover debugging function that is used to populate the E-Reader +// trainer with the player's current data. +void Debug_FillEReaderTrainerWithPlayerData(void) +{ + struct BattleTowerEReaderTrainer *ereaderTrainer; + s32 i; + s32 j; + + ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; + + if (gSaveBlock2.playerGender != MALE) + { + ereaderTrainer->trainerClass = sFemaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 20u]; + } + else + { + ereaderTrainer->trainerClass = sMaleTrainerClasses[(gSaveBlock2.playerTrainerId[0] + gSaveBlock2.playerTrainerId[1] + + gSaveBlock2.playerTrainerId[2] + gSaveBlock2.playerTrainerId[3]) % 30u]; + } + + copy_word_to_mem(ereaderTrainer->trainerId, gSaveBlock2.playerTrainerId); + StringCopy8(ereaderTrainer->name, gSaveBlock2.playerName); + + ereaderTrainer->winStreak = 1; + + j = 7; + for (i = 0; i < 6; i++) + { + ereaderTrainer->greeting.easyChat[i] = gSaveBlock1.easyChats.unk2B28[i]; + ereaderTrainer->farewellPlayerLost.easyChat[i] = j; + ereaderTrainer->farewellPlayerWon.easyChat[i] = j + 6; + j++; + } + + for (i = 0; i < 3; i++) + { + sub_803AF78(&gPlayerParty[i], &ereaderTrainer->party[i]); + } + + SetEReaderTrainerChecksum(ereaderTrainer); +} + +u8 GetEReaderTrainerPicIndex(void) +{ + return gTrainerClassToPicIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; +} + +u8 GetEReaderTrainerClassNameIndex(void) +{ + return gTrainerClassToNameIndex[gSaveBlock2.battleTower.ereaderTrainer.trainerClass]; +} + +void SetEReaderTrainerName(u8 *trainerName) +{ + s32 i; + + for (i = 0; i < 7; i++) + { + trainerName[i] = gSaveBlock2.battleTower.ereaderTrainer.name[i]; + } + + trainerName[i] = 0xFF; +} + +// Checks if the saved E-Reader trainer is valid. +void ValidateEReaderTrainer(void) +{ + u32 i; + u32 checksum; + struct BattleTowerEReaderTrainer *ereaderTrainer; + + gScriptResult = 0; + ereaderTrainer = &gSaveBlock2.battleTower.ereaderTrainer; + + checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + checksum |= ((u32 *)ereaderTrainer)[i]; + } + + if (checksum == 0) + { + gScriptResult = 1; + return; + } + + checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + checksum += ((u32 *)ereaderTrainer)[i]; + } + + if (gSaveBlock2.battleTower.ereaderTrainer.checksum != checksum) + { + ClearEReaderTrainer(&gSaveBlock2.battleTower.ereaderTrainer); + gScriptResult = 1; + } +} + +void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderTrainer) +{ + s32 i; + + ereaderTrainer->checksum = 0; + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32) - 1; i++) + { + ereaderTrainer->checksum += ((u32 *)ereaderTrainer)[i]; + } +} + +void ClearEReaderTrainer(struct BattleTowerEReaderTrainer *ereaderTrainer) +{ + u32 i; + + for (i = 0; i < sizeof(struct BattleTowerEReaderTrainer) / sizeof(u32); i++) + { + ((u32 *)ereaderTrainer)[i] = 0; + } +} + +void PrintEReaderTrainerGreeting(void) +{ + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.greeting.easyChat); +} + +void PrintEReaderTrainerFarewellMessage(void) +{ + if (gBattleOutcome == BATTLE_DREW) + { + gStringVar4[0] = 0xFF; + } + else if (gBattleOutcome == BATTLE_WON) + { + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerWon.easyChat); + } + else + { + PrintBattleTowerTrainerMessage(gSaveBlock2.battleTower.ereaderTrainer.farewellPlayerLost.easyChat); + } +} + +void sub_813610C(void) +{ + s32 i; + + for (i = 0; i < 2; i++) + { + if (gSaveBlock2.battleTower.var_4AE[i] == 1) + { + sub_80BFD20(); + } + } +} + +#if GERMAN +u8 de_sub_81364AC(void) +{ + if (gSaveBlock2.battleTower.battleTowerTrainerId == BATTLE_TOWER_EREADER_TRAINER_ID) + { + return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; + } + else if (gSaveBlock2.battleTower.battleTowerTrainerId >= BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID) + { + return gSaveBlock2.battleTower.records[gSaveBlock2.battleTower.battleTowerTrainerId - BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID].trainerClass; + } + else + { + return gBattleTowerTrainers[gSaveBlock2.battleTower.battleTowerTrainerId].trainerClass; + } +} + +u8 de_sub_81364F8(void) +{ + return gSaveBlock2.battleTower.ereaderTrainer.trainerClass; +} +#endif -- cgit v1.2.3 From 8082038e62f72be7b741eade0a3be200fb50827a Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 2 Nov 2017 18:23:34 -0700 Subject: Fix german build --- src/de_rom_8040FE0.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c index 5acdc3859..8cf510d6f 100644 --- a/src/de_rom_8040FE0.c +++ b/src/de_rom_8040FE0.c @@ -94,7 +94,7 @@ u8 *de_sub_8041024(s32 arg0, u32 arg1) { case 0x800: trainerClass = de_sub_81364F8(); - nameIndex = GetEReaderTrainerNameIndex(); + nameIndex = GetEReaderTrainerClassNameIndex(); if (trainerClass == TRAINER_CLASS_SCHOOL_KID_F) { return de_sub_8040FE0(FEMALE); @@ -196,7 +196,7 @@ _08041086:\n\ bl de_sub_81364F8\n\ lsls r0, 24\n\ lsrs r4, r0, 24\n\ - bl GetEReaderTrainerNameIndex\n\ + bl GetEReaderTrainerClassNameIndex\n\ b _08041070\n\ _08041094:\n\ movs r0, 0x1\n\ -- cgit v1.2.3 From 24b1dee67f5d91272f432cd2aee4ee92125fcbcb Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 2 Nov 2017 19:42:01 -0700 Subject: Use void for functions that have no args --- src/field/battle_tower.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 90ecc457a..06d692eae 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -817,7 +817,7 @@ void SetBattleTowerTrainerGfxId(u8 trainerIndex) VarSet(0x4010, MAP_OBJ_GFX_BOY_1); } -void SetEReaderTrainerGfxId() +void SetEReaderTrainerGfxId(void) { SetBattleTowerTrainerGfxId(BATTLE_TOWER_EREADER_TRAINER_ID); } @@ -1380,7 +1380,7 @@ void FillBattleTowerTrainerParty(void) } -u32 CountBattleTowerBanlistCaught() +u32 CountBattleTowerBanlistCaught(void) { s32 i; u32 numCaught = 0; @@ -2160,7 +2160,7 @@ void GiveBattleTowerPrize(void) } } -void AwardBattleTowerRibbons() +void AwardBattleTowerRibbons(void) { s32 i; u32 partyIndex; -- cgit v1.2.3