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 --- asm/battle_tower.s | 105 ----------------------------------------------------- ld_script.txt | 1 + src/battle_tower.c | 58 +++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 105 deletions(-) create mode 100644 src/battle_tower.c diff --git a/asm/battle_tower.s b/asm/battle_tower.s index cd8eede60..973486f64 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -6,111 +6,6 @@ .text - thumb_func_start sub_8134548 -sub_8134548: @ 8134548 - push {r4,r5,lr} - movs r4, 0 - movs r5, 0 -_0813454E: - ldr r0, _08134568 @ =gSaveBlock2 - ldr r1, _0813456C @ =0x00000556 - adds r0, r1 - adds r0, r5, r0 - ldrb r0, [r0] - cmp r0, 0x6 - bhi _08134590 - lsls r0, 2 - ldr r1, _08134570 @ =_08134574 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08134568: .4byte gSaveBlock2 -_0813456C: .4byte 0x00000556 -_08134570: .4byte _08134574 - .align 2, 0 -_08134574: - .4byte _08134590 - .4byte _081345A8 - .4byte _081345C8 - .4byte _081345D8 - .4byte _081345B8 - .4byte _081345C0 - .4byte _081345D8 -_08134590: - lsls r0, r5, 24 - lsrs r0, 24 - bl sub_813461C - cmp r4, 0 - bne _081345D8 - movs r0, 0x80 - lsls r0, 7 - movs r1, 0x5 - bl VarSet - b _081345D8 -_081345A8: - lsls r0, r5, 24 - lsrs r0, 24 - bl sub_813461C - movs r0, 0x80 - lsls r0, 7 - movs r1, 0x1 - b _081345CE -_081345B8: - movs r0, 0x80 - lsls r0, 7 - movs r1, 0x2 - b _081345CE -_081345C0: - movs r0, 0x80 - lsls r0, 7 - movs r1, 0x3 - b _081345CE -_081345C8: - movs r0, 0x80 - lsls r0, 7 - movs r1, 0x4 -_081345CE: - bl VarSet - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 -_081345D8: - adds r5, 0x1 - cmp r5, 0x1 - ble _0813454E - ldr r1, _08134610 @ =gSaveBlock2 - ldr r2, _08134614 @ =0x00000556 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x3 - beq _081345EE - cmp r0, 0x6 - bne _08134606 -_081345EE: - ldr r2, _08134618 @ =0x00000557 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x3 - beq _081345FC - cmp r0, 0x6 - bne _08134606 -_081345FC: - movs r0, 0x80 - lsls r0, 7 - movs r1, 0x5 - bl VarSet -_08134606: - bl sub_8135C44 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08134610: .4byte gSaveBlock2 -_08134614: .4byte 0x00000556 -_08134618: .4byte 0x00000557 - thumb_func_end sub_8134548 - thumb_func_start sub_813461C sub_813461C: @ 813461C lsls r0, 24 diff --git a/ld_script.txt b/ld_script.txt index a72a43f17..cf443f78c 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -231,6 +231,7 @@ SECTIONS { src/field/fldeff_softboiled.o(.text); src/field/decoration_inventory.o(.text); src/field/roamer.o(.text); + src/battle_tower.o(.text); asm/battle_tower.o(.text); src/field/use_pokeblock.o(.text); src/battle/battle_controller_wally.o(.text); 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 --- asm/battle_tower.s | 1028 ----------------------------------- include/battle_tower.h | 3 +- include/global.h | 85 ++- include/record_mixing.h | 2 +- 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 +- 12 files changed, 1180 insertions(+), 1093 deletions(-) diff --git a/asm/battle_tower.s b/asm/battle_tower.s index 973486f64..8339d8e21 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -6,1034 +6,6 @@ .text - thumb_func_start sub_813461C -sub_813461C: @ 813461C - lsls r0, 24 - lsrs r0, 24 - ldr r3, _08134644 @ =gSaveBlock2 - ldr r2, _08134648 @ =0x00000556 - adds r1, r3, r2 - adds r1, r0, r1 - movs r2, 0 - strb r2, [r1] - lsls r0, 1 - movs r2, 0xAB - lsls r2, 3 - adds r1, r3, r2 - adds r1, r0, r1 - movs r2, 0x1 - strh r2, [r1] - ldr r1, _0813464C @ =0x0000055c - adds r3, r1 - adds r0, r3 - strh r2, [r0] - bx lr - .align 2, 0 -_08134644: .4byte gSaveBlock2 -_08134648: .4byte 0x00000556 -_0813464C: .4byte 0x0000055c - thumb_func_end sub_813461C - - thumb_func_start sub_8134650 -sub_8134650: @ 8134650 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x2C - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 16 - lsrs r6, r1, 16 - add r4, sp, 0x28 - movs r0, 0 - strb r0, [r4] - bl sub_813601C - ldr r0, _08134684 @ =gScriptResult - ldrh r0, [r0] - adds r7, r4, 0 - cmp r0, 0 - bne _08134680 - ldr r1, _08134688 @ =gSaveBlock2 - ldr r2, _0813468C @ =0x0000049a - adds r0, r1, r2 - ldrh r0, [r0] - cmp r0, r6 - beq _08134690 -_08134680: - movs r0, 0 - b _081346E2 - .align 2, 0 -_08134684: .4byte gScriptResult -_08134688: .4byte gSaveBlock2 -_0813468C: .4byte 0x0000049a -_08134690: - movs r6, 0x32 - cmp r5, 0 - beq _08134698 - movs r6, 0x64 -_08134698: - movs r4, 0 - mov r8, r1 -_0813469C: - movs r0, 0x2C - muls r0, r4 - mov r3, r8 - adds r1, r0, r3 - movs r2, 0x9B - lsls r2, 3 - adds r0, r1, r2 - ldrb r2, [r0] - cmp r2, r6 - bne _08134680 - ldr r3, _081346F0 @ =0x000004cc - adds r0, r1, r3 - ldrh r0, [r0] - adds r3, 0x2 - adds r1, r3 - ldrh r1, [r1] - str r2, [sp] - add r2, sp, 0x10 - str r2, [sp, 0x4] - add r2, sp, 0x1C - str r2, [sp, 0x8] - str r7, [sp, 0xC] - movs r2, 0x1 - adds r3, r5, 0 - bl CheckMonBattleTowerBanlist - adds r4, 0x1 - cmp r4, 0x2 - ble _0813469C - movs r1, 0 - ldrb r0, [r7] - cmp r0, 0x3 - bne _081346E0 - movs r1, 0x1 -_081346E0: - adds r0, r1, 0 -_081346E2: - add sp, 0x2C - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081346F0: .4byte 0x000004cc - thumb_func_end sub_8134650 - - thumb_func_start sub_81346F4 -sub_81346F4: @ 81346F4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - movs r0, 0 - mov r9, r0 - ldr r4, _08134738 @ =gSaveBlock2 - ldr r1, _0813473C @ =0x00000554 - adds r0, r4, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r7, r0, 31 - adds r0, r7, 0 - bl sub_8135D3C - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - adds r0, r7, 0 - mov r1, r8 - bl sub_8134650 - lsls r0, 24 - adds r1, r4, 0 - cmp r0, 0 - beq _08134744 - ldr r2, _08134740 @ =0x00000564 - adds r1, r2 - movs r0, 0xC8 - strb r0, [r1] - b _081347DE - .align 2, 0 -_08134738: .4byte gSaveBlock2 -_0813473C: .4byte 0x00000554 -_08134740: .4byte 0x00000564 -_08134744: - movs r5, 0 - movs r3, 0xA4 - mov r12, r3 - mov r10, sp -_0813474C: - mov r0, r12 - muls r0, r5 - movs r4, 0 - movs r1, 0 - movs r2, 0 - adds r6, r5, 0x1 - str r6, [sp, 0x14] - ldr r6, _081347B4 @ =gSaveBlock2 + 0x14C - adds r3, r0, r6 -_0813475E: - ldm r3!, {r0} - orrs r4, r0 - adds r1, r0 - adds r2, 0x1 - cmp r2, 0x27 - bls _0813475E - mov r3, r12 - muls r3, r5 - ldr r0, _081347B8 @ =gSaveBlock2 - adds r2, r3, r0 - movs r6, 0xA7 - lsls r6, 1 - adds r0, r2, r6 - ldrh r0, [r0] - cmp r0, r8 - bne _081347A4 - subs r6, 0x2 - adds r0, r2, r6 - ldrb r0, [r0] - cmp r0, r7 - bne _081347A4 - cmp r4, 0 - beq _081347A4 - ldr r2, _081347BC @ =gSaveBlock2 + 0x1EC - adds r0, r3, r2 - ldr r0, [r0] - cmp r0, r1 - bne _081347A4 - mov r3, r10 - adds r3, 0x4 - mov r10, r3 - subs r3, 0x4 - stm r3!, {r5} - movs r6, 0x1 - add r9, r6 -_081347A4: - ldr r5, [sp, 0x14] - cmp r5, 0x4 - ble _0813474C - mov r0, r9 - cmp r0, 0 - bne _081347C0 - movs r0, 0 - b _081347E0 - .align 2, 0 -_081347B4: .4byte gSaveBlock2 + 0x14C -_081347B8: .4byte gSaveBlock2 -_081347BC: .4byte gSaveBlock2 + 0x1EC -_081347C0: - bl Random - ldr r4, _081347F0 @ =gSaveBlock2 - lsls r0, 16 - lsrs r0, 16 - mov r1, r9 - bl __modsi3 - lsls r0, 2 - add r0, sp - ldr r0, [r0] - adds r0, 0x64 - ldr r1, _081347F4 @ =0x00000564 - adds r4, r1 - strb r0, [r4] -_081347DE: - movs r0, 0x1 -_081347E0: - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_081347F0: .4byte gSaveBlock2 -_081347F4: .4byte 0x00000564 - thumb_func_end sub_81346F4 - - thumb_func_start sub_81347F8 -sub_81347F8: @ 81347F8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r5, _08134838 @ =gSaveBlock2 - ldr r1, _0813483C @ =0x00000554 - adds r0, r5, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r6, r0, 31 - bl sub_81346F4 - lsls r0, 24 - cmp r0, 0 - beq _08134848 - ldr r2, _08134840 @ =0x00000564 - adds r4, r5, r2 - ldrb r0, [r4] - bl sub_81349FC - lsls r0, r6, 1 - movs r3, 0xAB - lsls r3, 3 - adds r1, r5, r3 - adds r0, r1 - ldrh r0, [r0] - adds r0, r5, r0 - ldr r1, _08134844 @ =0x00000569 - adds r0, r1 - ldrb r1, [r4] - b _081349DC - .align 2, 0 -_08134838: .4byte gSaveBlock2 -_0813483C: .4byte 0x00000554 -_08134840: .4byte 0x00000564 -_08134844: .4byte 0x00000569 -_08134848: - lsls r0, r6, 1 - ldr r2, _081348D8 @ =0x0000055c - adds r1, r5, r2 - adds r1, r0, r1 - ldrh r1, [r1] - adds r7, r0, 0 - cmp r1, 0x7 - bls _0813485A - b _0813495C -_0813485A: - movs r3, 0xAB - lsls r3, 3 - adds r0, r5, r3 - adds r1, r7, r0 - ldrh r0, [r1] - cmp r0, 0x7 - bne _081348E4 - adds r6, r5, 0 - mov r9, r7 - adds r5, r1, 0 - ldr r0, _081348DC @ =0x0000056a - adds r0, r6 - mov r10, r0 - mov r8, r5 -_08134876: - bl Random - movs r1, 0xFF - ands r1, r0 - lsls r2, r1, 2 - adds r2, r1 - ldr r1, _081348D8 @ =0x0000055c - adds r4, r6, r1 - mov r3, r9 - adds r0, r3, r4 - ldrh r1, [r0] - subs r1, 0x1 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - adds r0, 0x14 - lsrs r2, 7 - adds r2, r0 - lsls r2, 16 - lsrs r2, 16 - movs r1, 0 - ldrh r0, [r5] - subs r0, 0x1 - cmp r1, r0 - bge _081348C8 - mov r3, r10 - ldrb r0, [r3] - cmp r0, r2 - beq _081348C8 - subs r0, r4, 0x4 - adds r0, r7, r0 - ldrh r0, [r0] - subs r3, r0, 0x1 - adds r4, 0xE -_081348BA: - adds r1, 0x1 - cmp r1, r3 - bge _081348C8 - adds r0, r1, r4 - ldrb r0, [r0] - cmp r0, r2 - bne _081348BA -_081348C8: - mov r3, r8 - ldrh r0, [r3] - subs r0, 0x1 - ldr r4, _081348E0 @ =gSaveBlock2 - cmp r1, r0 - bne _08134876 - b _081349B6 - .align 2, 0 -_081348D8: .4byte 0x0000055c -_081348DC: .4byte 0x0000056a -_081348E0: .4byte gSaveBlock2 -_081348E4: - adds r6, r5, 0 - mov r9, r7 - adds r5, r1, 0 - ldr r2, _08134950 @ =0x0000056a - adds r2, r6 - mov r10, r2 - mov r8, r5 -_081348F2: - bl Random - movs r1, 0xFF - ands r1, r0 - lsls r0, r1, 2 - adds r0, r1 - lsrs r2, r0, 6 - ldr r3, _08134954 @ =0x0000055c - adds r4, r6, r3 - mov r1, r9 - adds r0, r1, r4 - ldrh r1, [r0] - subs r1, 0x1 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 1 - adds r0, r2, r0 - lsls r0, 16 - lsrs r2, r0, 16 - movs r1, 0 - ldrh r0, [r5] - subs r0, 0x1 - cmp r1, r0 - bge _08134942 - mov r3, r10 - ldrb r0, [r3] - cmp r0, r2 - beq _08134942 - subs r0, r4, 0x4 - adds r0, r7, r0 - ldrh r0, [r0] - subs r3, r0, 0x1 - adds r4, 0xE -_08134934: - adds r1, 0x1 - cmp r1, r3 - bge _08134942 - adds r0, r1, r4 - ldrb r0, [r0] - cmp r0, r2 - bne _08134934 -_08134942: - mov r3, r8 - ldrh r0, [r3] - subs r0, 0x1 - ldr r4, _08134958 @ =gSaveBlock2 - cmp r1, r0 - bne _081348F2 - b _081349B6 - .align 2, 0 -_08134950: .4byte 0x0000056a -_08134954: .4byte 0x0000055c -_08134958: .4byte gSaveBlock2 -_0813495C: - movs r2, 0xAB - lsls r2, 3 - adds r0, r5, r2 - adds r6, r7, r0 - ldr r3, _081349EC @ =0x0000056a - adds r3, r5 - mov r8, r3 - adds r5, r6, 0 -_0813496C: - bl Random - movs r1, 0xFF - ands r1, r0 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 1 - asrs r0, 8 - adds r0, 0x46 - lsls r0, 16 - lsrs r2, r0, 16 - movs r1, 0 - ldrh r0, [r6] - subs r0, 0x1 - cmp r1, r0 - bge _081349AC - mov r3, r8 - ldrb r0, [r3] - ldr r4, _081349F0 @ =gSaveBlock2 - cmp r0, r2 - beq _081349AC - ldrh r0, [r5] - subs r3, r0, 0x1 - ldr r0, _081349EC @ =0x0000056a - adds r4, r0 -_0813499E: - adds r1, 0x1 - cmp r1, r3 - bge _081349AC - adds r0, r1, r4 - ldrb r0, [r0] - cmp r0, r2 - bne _0813499E -_081349AC: - ldrh r0, [r6] - subs r0, 0x1 - ldr r4, _081349F0 @ =gSaveBlock2 - cmp r1, r0 - bne _0813496C -_081349B6: - ldr r1, _081349F4 @ =0x00000564 - adds r0, r4, r1 - strb r2, [r0] - ldr r2, _081349F4 @ =0x00000564 - adds r5, r4, r2 - ldrb r0, [r5] - bl sub_81349FC - movs r3, 0xAB - lsls r3, 3 - adds r0, r4, r3 - adds r1, r7, r0 - ldrh r0, [r1] - cmp r0, 0x6 - bhi _081349DE - adds r0, r4, r0 - ldr r1, _081349F8 @ =0x00000569 - adds r0, r1 - ldrb r1, [r5] -_081349DC: - strb r1, [r0] -_081349DE: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081349EC: .4byte 0x0000056a -_081349F0: .4byte gSaveBlock2 -_081349F4: .4byte 0x00000564 -_081349F8: .4byte 0x00000569 - thumb_func_end sub_81347F8 - - thumb_func_start sub_81349FC -sub_81349FC: @ 81349FC - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - adds r1, r2, 0 - cmp r2, 0x63 - bhi _08134A18 - ldr r1, _08134A14 @ =gBattleTowerTrainers - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - b _08134A38 - .align 2, 0 -_08134A14: .4byte gBattleTowerTrainers -_08134A18: - cmp r1, 0xC7 - bhi _08134A34 - ldr r2, _08134A2C @ =gSaveBlock2 - subs r1, 0x64 - movs r0, 0xA4 - muls r0, r1 - adds r0, r2 - ldr r1, _08134A30 @ =0x0000014d - b _08134A38 - .align 2, 0 -_08134A2C: .4byte gSaveBlock2 -_08134A30: .4byte 0x0000014d -_08134A34: - ldr r0, _08134A5C @ =gSaveBlock2 - ldr r1, _08134A60 @ =0x00000499 -_08134A38: - adds r0, r1 - ldrb r1, [r0] - movs r2, 0 - ldr r3, _08134A64 @ =gUnknown_08405E60 - ldrb r0, [r3] - cmp r0, r1 - beq _08134A54 -_08134A46: - adds r2, 0x1 - cmp r2, 0x1D - bhi _08134A54 - adds r0, r2, r3 - ldrb r0, [r0] - cmp r0, r1 - bne _08134A46 -_08134A54: - cmp r2, 0x1E - beq _08134A6C - ldr r0, _08134A68 @ =gUnknown_08405E92 - b _08134A8A - .align 2, 0 -_08134A5C: .4byte gSaveBlock2 -_08134A60: .4byte 0x00000499 -_08134A64: .4byte gUnknown_08405E60 -_08134A68: .4byte gUnknown_08405E92 -_08134A6C: - movs r2, 0 - ldr r3, _08134A98 @ =gUnknown_08405E7E - ldrb r0, [r3] - cmp r0, r1 - beq _08134A84 -_08134A76: - adds r2, 0x1 - cmp r2, 0x13 - bhi _08134A84 - adds r0, r2, r3 - ldrb r0, [r0] - cmp r0, r1 - bne _08134A76 -_08134A84: - cmp r2, 0x14 - beq _08134AA4 - ldr r0, _08134A9C @ =gUnknown_08405EB0 -_08134A8A: - adds r0, r2, r0 - ldrb r1, [r0] - ldr r0, _08134AA0 @ =0x00004010 - bl VarSet - b _08134AAC - .align 2, 0 -_08134A98: .4byte gUnknown_08405E7E -_08134A9C: .4byte gUnknown_08405EB0 -_08134AA0: .4byte 0x00004010 -_08134AA4: - ldr r0, _08134AB0 @ =0x00004010 - movs r1, 0x7 - bl VarSet -_08134AAC: - pop {r0} - bx r0 - .align 2, 0 -_08134AB0: .4byte 0x00004010 - thumb_func_end sub_81349FC - - thumb_func_start sub_8134AB4 -sub_8134AB4: @ 8134AB4 - push {lr} - movs r0, 0xC8 - bl sub_81349FC - pop {r0} - bx r0 - thumb_func_end sub_8134AB4 - - thumb_func_start sub_8134AC0 -sub_8134AC0: @ 8134AC0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - movs r7, 0 - mov r8, r0 - movs r5, 0 - ldr r0, _08134B3C @ =gSaveBlock2 - mov r12, r0 - mov r1, r8 - ldrb r1, [r1, 0xC] - str r1, [sp, 0x18] - movs r2, 0xAA - lsls r2, 1 - add r2, r12 - mov r10, r2 - mov r9, r5 -_08134AE6: - movs r6, 0 - movs r3, 0 - ldr r0, _08134B40 @ =gSaveBlock2 + 0x158 - add r0, r9 - ldrb r0, [r0] - ldr r1, [sp, 0x18] - cmp r0, r1 - bne _08134B14 - movs r0, 0xA4 - muls r0, r5 - ldr r1, _08134B40 @ =gSaveBlock2 + 0x158 - adds r2, r0, r1 - mov r4, r8 - adds r4, 0xC -_08134B02: - adds r2, 0x1 - adds r3, 0x1 - cmp r3, 0x3 - bgt _08134B14 - adds r1, r4, r3 - ldrb r0, [r2] - ldrb r1, [r1] - cmp r0, r1 - beq _08134B02 -_08134B14: - cmp r3, 0x4 - bne _08134B54 - movs r6, 0 - mov r2, r10 - ldrb r0, [r2] - mov r3, r8 - ldrb r3, [r3, 0x8] - cmp r0, r3 - bne _08134B54 - adds r1, r0, 0 - movs r0, 0xA4 - muls r0, r5 - adds r0, 0x4 - ldr r3, _08134B44 @ =gSaveBlock2 + 0x150 - adds r2, r0, r3 -_08134B32: - cmp r1, 0xFF - bne _08134B48 - movs r6, 0x7 - b _08134B54 - .align 2, 0 -_08134B3C: .4byte gSaveBlock2 -_08134B40: .4byte gSaveBlock2 + 0x158 -_08134B44: .4byte gSaveBlock2 + 0x150 -_08134B48: - adds r6, 0x1 - cmp r6, 0x6 - bgt _08134B54 - ldrb r0, [r2] - cmp r0, r1 - beq _08134B32 -_08134B54: - cmp r6, 0x7 - beq _08134B64 - movs r0, 0xA4 - add r10, r0 - add r9, r0 - adds r5, 0x1 - cmp r5, 0x4 - ble _08134AE6 -_08134B64: - cmp r5, 0x4 - bgt _08134B76 - movs r0, 0xA4 - muls r0, r5 - add r0, r12 - movs r1, 0xA6 - lsls r1, 1 - adds r0, r1 - b _08134B9E -_08134B76: - movs r5, 0 - movs r1, 0xA7 - lsls r1, 1 - add r1, r12 - b _08134B88 -_08134B80: - adds r1, 0xA4 - adds r5, 0x1 - cmp r5, 0x4 - bgt _08134BA8 -_08134B88: - ldrh r0, [r1] - cmp r0, 0 - bne _08134B80 - cmp r5, 0x4 - bgt _08134BA8 - movs r0, 0xA4 - muls r0, r5 - add r0, r12 - movs r2, 0xA6 - lsls r2, 1 - adds r0, r2 -_08134B9E: - mov r1, r8 - movs r2, 0xA4 - bl memcpy - b _08134C5E -_08134BA8: - mov r2, sp - movs r3, 0xA7 - lsls r3, 1 - mov r1, r12 - adds r0, r1, r3 - ldrh r0, [r0] - movs r1, 0 - strh r0, [r2] - add r0, sp, 0xC - strh r1, [r0] - adds r7, 0x1 - movs r5, 0x1 - add r2, sp, 0xC - mov r9, r2 - mov r10, r3 -_08134BC6: - movs r3, 0 - adds r0, r5, 0x1 - mov r12, r0 - cmp r3, r7 - bge _08134C0A - movs r1, 0xA4 - adds r0, r5, 0 - muls r0, r1 - ldr r2, _08134BFC @ =gSaveBlock2 - adds r0, r2 - mov r1, r10 - adds r4, r0, r1 - mov r6, sp -_08134BE0: - lsls r0, r3, 1 - add r0, sp - ldrh r2, [r4] - adds r1, r2, 0 - ldrh r0, [r0] - cmp r1, r0 - bcs _08134C00 - movs r3, 0 - movs r7, 0x1 - strh r2, [r6] - mov r2, r9 - strh r5, [r2] - b _08134C0A - .align 2, 0 -_08134BFC: .4byte gSaveBlock2 -_08134C00: - cmp r1, r0 - bhi _08134C0A - adds r3, 0x1 - cmp r3, r7 - blt _08134BE0 -_08134C0A: - cmp r3, r7 - bne _08134C2A - lsls r1, r7, 1 - mov r3, sp - adds r2, r3, r1 - movs r3, 0xA4 - adds r0, r5, 0 - muls r0, r3 - ldr r3, _08134C70 @ =gSaveBlock2 - adds r0, r3 - add r0, r10 - ldrh r0, [r0] - strh r0, [r2] - add r1, r9 - strh r5, [r1] - adds r7, 0x1 -_08134C2A: - mov r5, r12 - cmp r5, 0x4 - ble _08134BC6 - bl Random - lsls r0, 16 - lsrs r0, 16 - adds r1, r7, 0 - bl __modsi3 - adds r5, r0, 0 - ldr r2, _08134C70 @ =gSaveBlock2 - lsls r0, r5, 1 - add r0, sp - adds r0, 0xC - ldrh r1, [r0] - movs r0, 0xA4 - muls r0, r1 - adds r0, r2 - movs r1, 0xA6 - lsls r1, 1 - adds r0, r1 - mov r1, r8 - movs r2, 0xA4 - bl memcpy -_08134C5E: - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08134C70: .4byte gSaveBlock2 - thumb_func_end sub_8134AC0 - - thumb_func_start get_trainer_class_pic_index -get_trainer_class_pic_index: @ 8134C74 - push {lr} - ldr r3, _08134C90 @ =gSaveBlock2 - ldr r0, _08134C94 @ =0x00000564 - adds r1, r3, r0 - ldrb r0, [r1] - cmp r0, 0xC8 - bne _08134CA0 - ldr r1, _08134C98 @ =gTrainerClassToPicIndex - ldr r2, _08134C9C @ =0x00000499 - adds r0, r3, r2 - ldrb r0, [r0] - adds r0, r1 - b _08134CD2 - .align 2, 0 -_08134C90: .4byte gSaveBlock2 -_08134C94: .4byte 0x00000564 -_08134C98: .4byte gTrainerClassToPicIndex -_08134C9C: .4byte 0x00000499 -_08134CA0: - cmp r0, 0x63 - bls _08134CC0 - ldr r2, _08134CBC @ =gTrainerClassToPicIndex - ldrb r0, [r1] - subs r0, 0x64 - movs r1, 0xA4 - muls r0, r1 - adds r0, r3 - adds r1, 0xA9 - adds r0, r1 - ldrb r0, [r0] - adds r0, r2 - b _08134CD2 - .align 2, 0 -_08134CBC: .4byte gTrainerClassToPicIndex -_08134CC0: - ldr r3, _08134CD8 @ =gTrainerClassToPicIndex - ldr r2, _08134CDC @ =gBattleTowerTrainers - ldrb r1, [r1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r0, [r0] - adds r0, r3 -_08134CD2: - ldrb r0, [r0] - pop {r1} - bx r1 - .align 2, 0 -_08134CD8: .4byte gTrainerClassToPicIndex -_08134CDC: .4byte gBattleTowerTrainers - thumb_func_end get_trainer_class_pic_index - - thumb_func_start get_trainer_class_name_index -get_trainer_class_name_index: @ 8134CE0 - push {lr} - ldr r3, _08134CFC @ =gSaveBlock2 - ldr r0, _08134D00 @ =0x00000564 - adds r1, r3, r0 - ldrb r0, [r1] - cmp r0, 0xC8 - bne _08134D0C - ldr r1, _08134D04 @ =gTrainerClassToNameIndex - ldr r2, _08134D08 @ =0x00000499 - adds r0, r3, r2 - ldrb r0, [r0] - adds r0, r1 - b _08134D40 - .align 2, 0 -_08134CFC: .4byte gSaveBlock2 -_08134D00: .4byte 0x00000564 -_08134D04: .4byte gTrainerClassToNameIndex -_08134D08: .4byte 0x00000499 -_08134D0C: - cmp r0, 0x63 - bhi _08134D2C - ldr r3, _08134D24 @ =gTrainerClassToNameIndex - ldr r2, _08134D28 @ =gBattleTowerTrainers - ldrb r1, [r1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r0, [r0] - adds r0, r3 - b _08134D40 - .align 2, 0 -_08134D24: .4byte gTrainerClassToNameIndex -_08134D28: .4byte gBattleTowerTrainers -_08134D2C: - ldr r2, _08134D48 @ =gTrainerClassToNameIndex - ldrb r0, [r1] - subs r0, 0x64 - movs r1, 0xA4 - muls r0, r1 - adds r0, r3 - adds r1, 0xA9 - adds r0, r1 - ldrb r0, [r0] - adds r0, r2 -_08134D40: - ldrb r0, [r0] - pop {r1} - bx r1 - .align 2, 0 -_08134D48: .4byte gTrainerClassToNameIndex - thumb_func_end get_trainer_class_name_index - - thumb_func_start get_trainer_name -get_trainer_name: @ 8134D4C - push {r4,r5,lr} - adds r4, r0, 0 - ldr r2, _08134D74 @ =gSaveBlock2 - ldr r0, _08134D78 @ =0x00000564 - adds r1, r2, r0 - ldrb r0, [r1] - cmp r0, 0xC8 - bne _08134D80 - movs r3, 0 - ldr r5, _08134D7C @ =0x0000049c - adds r2, r5 -_08134D62: - adds r0, r4, r3 - adds r1, r3, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r3, 0x1 - cmp r3, 0x6 - ble _08134D62 - b _08134DC8 - .align 2, 0 -_08134D74: .4byte gSaveBlock2 -_08134D78: .4byte 0x00000564 -_08134D7C: .4byte 0x0000049c -_08134D80: - cmp r0, 0x63 - bhi _08134DA8 - movs r3, 0 - ldr r2, _08134DA4 @ =gBattleTowerTrainers - ldrb r1, [r1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r2, 0x1 - adds r2, r0, r2 -_08134D94: - adds r1, r4, r3 - ldrb r0, [r2] - strb r0, [r1] - adds r2, 0x1 - adds r3, 0x1 - cmp r3, 0x6 - ble _08134D94 - b _08134DC8 - .align 2, 0 -_08134DA4: .4byte gBattleTowerTrainers -_08134DA8: - movs r3, 0 - ldrb r0, [r1] - subs r0, 0x64 - movs r1, 0xA4 - muls r1, r0 - movs r5, 0xA8 - lsls r5, 1 - adds r0, r2, r5 - adds r2, r1, r0 -_08134DBA: - adds r1, r4, r3 - ldrb r0, [r2] - strb r0, [r1] - adds r2, 0x1 - adds r3, 0x1 - cmp r3, 0x6 - ble _08134DBA -_08134DC8: - adds r1, r4, r3 - movs r0, 0xFF - strb r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end get_trainer_name - thumb_func_start sub_8134DD4 sub_8134DD4: @ 8134DD4 push {r4-r7,lr} diff --git a/include/battle_tower.h b/include/battle_tower.h index 75ea405ab..e70930faa 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -1,7 +1,8 @@ #ifndef GUARD_BATTLE_TOWER_H #define GUARD_BATTLE_TOWER_H -void sub_8134AC0(void *); +void sub_813461C(u8 levelType); +void sub_8134AC0(struct BattleTowerRecord *); u16 sub_8135D3C(u8); void sub_8135FF4(u8*); diff --git a/include/global.h b/include/global.h index 7c1ac9c68..6a7f6396c 100644 --- a/include/global.h +++ b/include/global.h @@ -727,26 +727,79 @@ struct Pokedex /*0x44*/ u8 seen[DEX_FLAGS_NO]; }; +// struct EReaderTrainerPokemon +// { +// /*0x00, 0x4CC*/u16 unk0; +// /*0x02, 0x4CE*/u16 unk2; +// /*0x04, 0x4D0*/u8 unk4[0x8]; +// /*0x0C, 0x4D8*/u8 level; +// /*0x0D, 0x4D9*/u8 unk9[0x1F]; +// }; + +// struct EReaderTrainer +// { +// /*0x00, 0x498*/u8 filler_0[2]; +// /*0x02, 0x49A*/u16 unk2; +// /*0x04, 0x49C*/u8 filler_4[0x30]; +// /*0x34, 0x4CC*/struct EReaderTrainerPokemon party[3]; +// /*0xB8, 0x550*/u32 unkB8; +// }; + +struct SaveBlock2_1 +{ + u32 filler_0[0x29]; +}; + +struct BattleTowerTrainer +{ + u8 trainerClass; + u8 name[8]; + u8 teamFlags; + u16 padding; + u16 easyChat[6]; +}; + +struct BattleTowerRecord // record mixing +{ + /*0x00*/u8 var_0; + /*0x01*/u8 trainerClass; + /*0x02*/u16 var_2; + /*0x04*/u8 name[8]; + /*0x0C*/u8 var_C[5]; + u8 filler[0x93]; +}; + +struct BattleTowerEReaderTrainer +{ + /*0x00*/u8 unk0; + /*0x01*/u8 trainerClass; + /*0x02*/u16 filler_2; + /*0x04*/u8 name[8]; + /*0x0B*/u8 ereaderTrainer[0xB0]; +}; + struct SaveBlock2_Sub { - /*0x0000, 0x00A8*/ u8 filler_000[0x3D8]; - /*0x03D8, 0x0480*/ u16 var_480; - /*0x03DA, 0x0482*/ u16 var_482; + /*0x0000, 0x00A8*/ struct BattleTowerRecord var_A8; + /*0x00A4, 0x014C*/ struct BattleTowerRecord var_14C[5]; + /*0x03D8, 0x0480*/ u16 firstMonSpecies; // species of the first pokemon in the player's battle tower party + /*0x03DA, 0x0482*/ u16 defeatedBySpecies; // species of the pokemon that defated the player in their battle tower streak. /*0x03DC, 0x0484*/ u8 filler_3DC[0x14]; - /*0x03F0, 0x0498*/ u8 ereaderTrainer[0xBC]; - /*0x04AC, 0x0554*/ u8 var_4AC; - /*0x04AD, 0x0555*/ u8 var_4AD; + /*0x03F0, 0x0498*/ struct BattleTowerEReaderTrainer ereaderTrainer; + /*0x04AC, 0x0554*/ u8 battleTowerLevelType:1; // 0 = level 50; 1 = level 100 + /*0x04AD, 0x0555*/ u8 var_4AD; // used by tv, but ultimately does nothing, since both code paths are identical /*0x04AE, 0x0556*/ u8 var_4AE[2]; - /*0x04B0, 0x0558*/ u16 var_4B0; - /*0x04B2, 0x055A*/ u16 var_4B2; - /*0x04B4, 0x055C*/ u16 var_4B4; - /*0x04B6, 0x055E*/ u16 var_4B6; - /*0x04B8, 0x0560*/ u16 recordWinStreak[2]; - /*0x04BC, 0x0564*/ u8 filler_4BC[0xC]; - /*0x04C8, 0x0570*/ u16 var_4C8; - /*0x04CA, 0x0572*/ u16 var_4CA; - /*0x04CC, 0x0574*/ u16 winStreak[2]; - /*0x04D0, 0x0578*/ u8 var_4D0; + /*0x04B0, 0x0558*/ u16 var_4B0[2]; + /*0x04B4, 0x055C*/ u16 var_4B4[2]; + /*0x04B8, 0x0560*/ u16 recordWinStreaks[2]; + /*0x04BC, 0x0564*/ u8 battleTowerTrainerId; // index for gBattleTowerTrainers table + /*0x04BD, 0x0565*/ u8 var_4BD[0x3]; + /*0x04C0, 0x0568*/ u8 var_4C0; + /*0x04C1, 0x0569*/ u8 var_4C1[0x7]; + /*0x04C8, 0x0570*/ u16 totalBattleTowerWins; + /*0x04CA, 0x0572*/ u16 bestBattleTowerWinStreak; + /*0x04CC, 0x0574*/ u16 currentWinStreaks[2]; + /*0x04D0, 0x0578*/ u8 lastStreakLevelType; // 0 = level 50, 1 = level 100. level type of the last streak. Used by tv to report the level mode. /*0x04D1, 0x0579*/ u8 filler_4D1[0x317]; }; diff --git a/include/record_mixing.h b/include/record_mixing.h index ca60b04a7..96105f3f7 100644 --- a/include/record_mixing.h +++ b/include/record_mixing.h @@ -21,7 +21,7 @@ u16 *GetPlayerRecvBuffer(u8 player); void sub_80B9A78(void); void sub_80B9A88(u8 *a); void sub_80B9B1C(u8 *a, size_t size, u8 index); -void sub_80B9B70(u8 *a, size_t size, u8 index); +void sub_80B9B70(void *a, u32 size, u8 index); u8 sub_80B9BBC(u16 *a); void sub_80B9BC4(u8 *, size_t, u8[][2], u8 d, u8 e); u8 sub_80B9C4C(u8 *a); 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 --- asm/battle_tower.s | 528 +---------------------------------------------------- src/battle_tower.c | 454 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 455 insertions(+), 527 deletions(-) diff --git a/asm/battle_tower.s b/asm/battle_tower.s index 8339d8e21..9c574eeb4 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -6,532 +6,6 @@ .text - thumb_func_start sub_8134DD4 -sub_8134DD4: @ 8134DD4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x28 - movs r0, 0 - str r0, [sp, 0x18] - movs r1, 0x3C - str r1, [sp, 0x1C] - add r4, sp, 0xC - movs r0, 0xFF - strb r0, [r4] - bl ZeroEnemyPartyMons - ldr r1, _08134E04 @ =gSaveBlock2 - ldr r2, _08134E08 @ =0x00000564 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0x13 - bhi _08134E0C - movs r3, 0x6 - str r3, [sp, 0x14] - b _08134ED8 - .align 2, 0 -_08134E04: .4byte gSaveBlock2 -_08134E08: .4byte 0x00000564 -_08134E0C: - cmp r0, 0x1D - bhi _08134E1A - movs r0, 0x9 - str r0, [sp, 0x14] - movs r1, 0x1E - str r1, [sp, 0x18] - b _08134ED8 -_08134E1A: - cmp r0, 0x27 - bhi _08134E28 - movs r2, 0xC - str r2, [sp, 0x14] - movs r3, 0x3C - str r3, [sp, 0x18] - b _08134ED8 -_08134E28: - cmp r0, 0x31 - bhi _08134E36 - movs r0, 0xF - str r0, [sp, 0x14] - movs r1, 0x5A - str r1, [sp, 0x18] - b _08134ED8 -_08134E36: - cmp r0, 0x3B - bhi _08134E44 - movs r2, 0x12 - str r2, [sp, 0x14] - movs r3, 0x78 - str r3, [sp, 0x18] - b _08134ED8 -_08134E44: - cmp r0, 0x45 - bhi _08134E52 - movs r0, 0x15 - str r0, [sp, 0x14] - movs r1, 0x96 - str r1, [sp, 0x18] - b _08134ED8 -_08134E52: - cmp r0, 0x4F - bhi _08134E60 - movs r2, 0x1F - str r2, [sp, 0x14] - movs r3, 0xB4 - str r3, [sp, 0x18] - b _08134ED8 -_08134E60: - cmp r0, 0x63 - bhi _08134E72 - movs r0, 0x1F - str r0, [sp, 0x14] - movs r1, 0xC8 - str r1, [sp, 0x18] - movs r2, 0x64 - str r2, [sp, 0x1C] - b _08134ED8 -_08134E72: - cmp r0, 0xC8 - bne _08134E9C - movs r6, 0 -_08134E78: - movs r0, 0x64 - muls r0, r6 - ldr r1, _08134E94 @ =gEnemyParty - adds r0, r1 - movs r1, 0x2C - muls r1, r6 - ldr r2, _08134E98 @ =gSaveBlock2 + 0x4CC - adds r1, r2 - bl sub_803ADE8 - adds r6, 0x1 - cmp r6, 0x2 - ble _08134E78 - b _08135082 - .align 2, 0 -_08134E94: .4byte gEnemyParty -_08134E98: .4byte gSaveBlock2 + 0x4CC -_08134E9C: - movs r6, 0 - adds r4, r1, 0 - ldr r3, _08134ECC @ =0xffffc158 - adds r5, r4, r3 -_08134EA4: - movs r0, 0x64 - muls r0, r6 - ldr r1, _08134ED0 @ =gEnemyParty - adds r0, r1 - ldr r2, _08134ED4 @ =0x00000564 - adds r1, r4, r2 - ldrb r2, [r1] - movs r1, 0xA4 - muls r1, r2 - adds r1, r5 - movs r2, 0x2C - muls r2, r6 - adds r1, r2 - bl sub_803ADE8 - adds r6, 0x1 - cmp r6, 0x2 - ble _08134EA4 - b _08135082 - .align 2, 0 -_08134ECC: .4byte 0xffffc158 -_08134ED0: .4byte gEnemyParty -_08134ED4: .4byte 0x00000564 -_08134ED8: - ldr r2, _08134EF4 @ =gSaveBlock2 - ldr r3, _08134EF8 @ =0x00000554 - adds r0, r2, r3 - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - adds r1, r2, 0 - cmp r0, 0 - beq _08134F00 - ldr r0, _08134EFC @ =gBattleTowerLevel100Mons - mov r10, r0 - movs r2, 0x64 - str r2, [sp, 0x10] - b _08134F08 - .align 2, 0 -_08134EF4: .4byte gSaveBlock2 -_08134EF8: .4byte 0x00000554 -_08134EFC: .4byte gBattleTowerLevel100Mons -_08134F00: - ldr r3, _08134F54 @ =gBattleTowerLevel50Mons - mov r10, r3 - movs r0, 0x32 - str r0, [sp, 0x10] -_08134F08: - ldr r2, _08134F58 @ =gBattleTowerTrainers - ldr r3, _08134F5C @ =0x00000564 - adds r0, r1, r3 - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrb r0, [r0, 0x9] - str r0, [sp, 0x20] - movs r6, 0 -_08134F1E: - bl Random - movs r1, 0xFF - ands r1, r0 - ldr r2, [sp, 0x1C] - adds r0, r1, 0 - muls r0, r2 - asrs r0, 8 - ldr r3, [sp, 0x18] - adds r7, r0, r3 - ldr r0, [sp, 0x20] - cmp r0, 0 - beq _08134F48 - lsls r0, r7, 4 - add r0, r10 - ldrb r0, [r0, 0x3] - ldr r1, [sp, 0x20] - ands r0, r1 - cmp r0, r1 - beq _08134F48 - b _0813507C -_08134F48: - movs r5, 0 - lsls r0, r7, 4 - mov r2, r10 - adds r3, r0, r2 - movs r4, 0 - b _08134F64 - .align 2, 0 -_08134F54: .4byte gBattleTowerLevel50Mons -_08134F58: .4byte gBattleTowerTrainers -_08134F5C: .4byte 0x00000564 -_08134F60: - adds r4, 0x64 - adds r5, 0x1 -_08134F64: - cmp r5, r6 - bge _08134F7E - ldr r1, _08135094 @ =gEnemyParty - adds r0, r4, r1 - movs r1, 0xB - movs r2, 0 - str r3, [sp, 0x24] - bl GetMonData - ldr r3, [sp, 0x24] - ldrh r2, [r3] - cmp r0, r2 - bne _08134F60 -_08134F7E: - cmp r5, r6 - bne _0813507C - movs r5, 0 - cmp r5, r6 - bge _08134FCC - ldr r3, _08135098 @ =gBattleTowerHeldItems - mov r9, r3 - lsls r0, r7, 4 - add r0, r10 - mov r8, r0 - movs r3, 0 -_08134F94: - ldr r0, _08135094 @ =gEnemyParty - adds r4, r3, r0 - adds r0, r4, 0 - movs r1, 0xC - movs r2, 0 - str r3, [sp, 0x24] - bl GetMonData - ldr r3, [sp, 0x24] - cmp r0, 0 - beq _08134FC4 - adds r0, r4, 0 - movs r1, 0xC - movs r2, 0 - bl GetMonData - mov r2, r8 - ldrb r1, [r2, 0x2] - lsls r1, 1 - add r1, r9 - ldr r3, [sp, 0x24] - ldrh r1, [r1] - cmp r0, r1 - beq _08134FCC -_08134FC4: - adds r3, 0x64 - adds r5, 0x1 - cmp r5, r6 - blt _08134F94 -_08134FCC: - cmp r5, r6 - bne _0813507C - movs r5, 0 - cmp r5, r6 - bge _08134FEE - add r0, sp, 0x4 - ldrh r0, [r0] - cmp r0, r7 - beq _08134FEE - add r1, sp, 0x4 -_08134FE0: - adds r1, 0x2 - adds r5, 0x1 - cmp r5, r6 - bge _08134FEE - ldrh r0, [r1] - cmp r0, r7 - bne _08134FE0 -_08134FEE: - cmp r5, r6 - bne _0813507C - lsls r0, r6, 1 - add r0, sp - adds r0, 0x4 - strh r7, [r0] - movs r3, 0x64 - adds r0, r6, 0 - muls r0, r3 - ldr r1, _08135094 @ =gEnemyParty - adds r0, r1 - lsls r4, r7, 4 - mov r3, r10 - adds r2, r4, r3 - ldrh r1, [r2] - ldrb r2, [r2, 0xC] - str r2, [sp] - ldr r2, [sp, 0x10] - ldr r3, [sp, 0x14] - bl CreateMonWithEVSpread - movs r5, 0 - adds r0, r6, 0x1 - mov r9, r0 - mov r8, r4 - movs r0, 0x64 - adds r7, r6, 0 - muls r7, r0 - mov r0, r10 - adds r0, 0x4 - adds r4, r0 - ldr r3, _08135094 @ =gEnemyParty -_0813502E: - ldrh r1, [r4] - lsls r2, r5, 24 - lsrs r2, 24 - adds r0, r7, r3 - str r3, [sp, 0x24] - bl SetMonMoveSlot - ldrh r0, [r4] - ldr r3, [sp, 0x24] - cmp r0, 0xDA - bne _0813504A - movs r0, 0 - mov r1, sp - strb r0, [r1, 0xC] -_0813504A: - adds r4, 0x2 - adds r5, 0x1 - cmp r5, 0x3 - ble _0813502E - movs r2, 0x64 - adds r4, r6, 0 - muls r4, r2 - ldr r3, _08135094 @ =gEnemyParty - adds r4, r3 - adds r0, r4, 0 - movs r1, 0x20 - add r2, sp, 0xC - bl SetMonData - mov r0, r8 - add r0, r10 - ldrb r2, [r0, 0x2] - lsls r2, 1 - ldr r0, _08135098 @ =gBattleTowerHeldItems - adds r2, r0 - adds r0, r4, 0 - movs r1, 0xC - bl SetMonData - mov r6, r9 -_0813507C: - cmp r6, 0x3 - beq _08135082 - b _08134F1E -_08135082: - add sp, 0x28 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08135094: .4byte gEnemyParty -_08135098: .4byte gBattleTowerHeldItems - thumb_func_end sub_8134DD4 - - thumb_func_start CalcBattleTowerBanlistSeenCount -CalcBattleTowerBanlistSeenCount: @ 813509C - push {r4-r6,lr} - movs r5, 0 - ldr r2, _081350D8 @ =gBattleTowerBanlist - ldrh r0, [r2] - ldr r1, _081350DC @ =0x0000ffff - cmp r0, r1 - beq _081350CE - adds r6, r1, 0 - adds r4, r2, 0 -_081350AE: - ldrh r0, [r4] - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl GetSetPokedexFlag - lsls r0, 24 - cmp r0, 0 - beq _081350C6 - adds r5, 0x1 -_081350C6: - adds r4, 0x2 - ldrh r0, [r4] - cmp r0, r6 - bne _081350AE -_081350CE: - adds r0, r5, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_081350D8: .4byte gBattleTowerBanlist -_081350DC: .4byte 0x0000ffff - thumb_func_end CalcBattleTowerBanlistSeenCount - - thumb_func_start AppendBattleTowerBannedSpeciesName -AppendBattleTowerBannedSpeciesName: @ 81350E0 - push {r4-r6,lr} - adds r5, r2, 0 - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 24 - lsrs r4, r1, 24 - adds r0, r6, 0 - bl SpeciesToNationalPokedexNum - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - bl GetSetPokedexFlag - lsls r0, 24 - cmp r0, 0 - beq _081351E6 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - subs r0, r4, 0x1 - cmp r0, 0xA - bhi _081351B0 - lsls r0, 2 - ldr r1, _08135118 @ =_0813511C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08135118: .4byte _0813511C - .align 2, 0 -_0813511C: - .4byte _08135148 - .4byte _08135178 - .4byte _08135148 - .4byte _081351B0 - .4byte _08135148 - .4byte _081351B0 - .4byte _08135148 - .4byte _081351B0 - .4byte _08135148 - .4byte _081351B0 - .4byte _08135148 -_08135148: - cmp r5, r4 - bne _08135160 - ldr r0, _08135158 @ =gStringVar1 - ldr r1, _0813515C @ =gUnknown_08400E23 - bl StringAppend - b _081351D8 - .align 2, 0 -_08135158: .4byte gStringVar1 -_0813515C: .4byte gUnknown_08400E23 -_08135160: - cmp r5, r4 - ble _081351D8 - ldr r0, _08135170 @ =gStringVar1 - ldr r1, _08135174 @ =gUnknown_08400E29 - bl StringAppend - b _081351D8 - .align 2, 0 -_08135170: .4byte gStringVar1 -_08135174: .4byte gUnknown_08400E29 -_08135178: - cmp r4, r5 - bne _08135190 - ldr r0, _08135188 @ =gStringVar1 - ldr r1, _0813518C @ =gUnknown_08400E23 - bl StringAppend - b _08135198 - .align 2, 0 -_08135188: .4byte gStringVar1 -_0813518C: .4byte gUnknown_08400E23 -_08135190: - ldr r0, _081351A4 @ =gStringVar1 - ldr r1, _081351A8 @ =gUnknown_08400E29 - bl StringAppend -_08135198: - ldr r0, _081351A4 @ =gStringVar1 - ldr r1, _081351AC @ =gUnknown_08400E30 - bl StringAppend - b _081351D8 - .align 2, 0 -_081351A4: .4byte gStringVar1 -_081351A8: .4byte gUnknown_08400E29 -_081351AC: .4byte gUnknown_08400E30 -_081351B0: - cmp r4, r5 - bne _081351C8 - ldr r0, _081351C0 @ =gStringVar1 - ldr r1, _081351C4 @ =gUnknown_08400E23 - bl StringAppend - b _081351D0 - .align 2, 0 -_081351C0: .4byte gStringVar1 -_081351C4: .4byte gUnknown_08400E23 -_081351C8: - ldr r0, _081351F0 @ =gStringVar1 - ldr r1, _081351F4 @ =gUnknown_08400E29 - bl StringAppend -_081351D0: - ldr r0, _081351F0 @ =gStringVar1 - ldr r1, _081351F8 @ =gUnknown_08400E2E - bl StringAppend -_081351D8: - ldr r0, _081351F0 @ =gStringVar1 - movs r1, 0xB - muls r1, r6 - ldr r2, _081351FC @ =gSpeciesNames - adds r1, r2 - bl StringAppend -_081351E6: - adds r0, r4, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_081351F0: .4byte gStringVar1 -_081351F4: .4byte gUnknown_08400E29 -_081351F8: .4byte gUnknown_08400E2E -_081351FC: .4byte gSpeciesNames - thumb_func_end AppendBattleTowerBannedSpeciesName - thumb_func_start CheckMonBattleTowerBanlist CheckMonBattleTowerBanlist: @ 8135200 push {r4-r7,lr} @@ -734,7 +208,7 @@ _081352FE: movs r0, 0 mov r1, r9 strb r0, [r1] - bl CalcBattleTowerBanlistSeenCount + bl CountBattleTowerBanlistCaught adds r6, r0, 0 ldr r2, _081353D4 @ =gBattleTowerBanlist ldrh r0, [r2] 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/ --- data/battle_tower.s | 3 - data/battle_tower/trainers.inc | 1301 ----------------------------------- ld_script.txt | 1 + src/battle_tower.c | 6 +- src/data/battle_tower/trainers.h | 1403 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 1409 insertions(+), 1305 deletions(-) delete mode 100644 data/battle_tower/trainers.inc create mode 100644 src/data/battle_tower/trainers.h diff --git a/data/battle_tower.s b/data/battle_tower.s index a45dcf72c..ac0810eb7 100644 --- a/data/battle_tower.s +++ b/data/battle_tower.s @@ -3,9 +3,6 @@ .section .rodata -@ 8402F00 - .include "data/battle_tower/trainers.inc" - @ 8403860 .include "data/battle_tower/held_items.inc" diff --git a/data/battle_tower/trainers.inc b/data/battle_tower/trainers.inc deleted file mode 100644 index 05fadc320..000000000 --- a/data/battle_tower/trainers.inc +++ /dev/null @@ -1,1301 +0,0 @@ - .align 2 -gBattleTowerTrainers:: @ 8402F00 -@ 0 - .byte TRAINER_CLASS_YOUNGSTER - .string "ALVIN$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word ARE - ec_word YOU - ec_word READY - ec_word QUES - ec_word HERE_I_COME - ec_word EXCL - -@ 1 - .byte TRAINER_CLASS_BIRD_KEEPER - .string "DIRK$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word OKAY - ec_word I_AM - ec_word GOING - ec_word FOR - ec_word IT - ec_word EXCL - -@ 2 - .byte TRAINER_CLASS_LADY - .string "CYBIL$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOU_RE - ec_word A - ec_word PUSHOVER - ec_word LET_S - ec_word GET - ec_word GOING - -@ 3 - .byte TRAINER_CLASS_BLACK_BELT - .string "CHEN$", 8 - .byte 0x05 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word MY - ec_word SPIRIT - ec_word IS - ec_word ENOUGH - ec_word SNORT - ec_word ARRGH - -@ 4 - .byte TRAINER_CLASS_NINJA_BOY - .string "YOSHI$", 8 - .byte 0x05 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word GO - ec_word MY - ec_word POKEMON - ec_word FIGHT - ec_word THE - ec_word BATTLE - -@ 5 - .byte TRAINER_CLASS_SCHOOL_KID_F - .string "TINA$", 8 - .byte 0x0A @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word STUDY - ec_word IS - ec_word BORING - ec_word LET_S - ec_word BATTLE - ec_word NOW - -@ 6 - .byte TRAINER_CLASS_BUG_MANIAC - .string "COREY$", 8 - .byte 0x41 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word HEY - ec_word I - ec_word WILL - ec_move2 TRANSFORM - ec_word FOR - ec_move1 STRENGTH - -@ 7 - .byte TRAINER_CLASS_FISHERMAN - .string "GORDON$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word NEED - ec_word A - ec_word VACATION - ec_word RIGHT - ec_word NOW - -@ 8 - .byte TRAINER_CLASS_TUBER_F - .string "ANN$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WE - ec_word ALL - ec_word ADORE - ec_word POKEMON - ec_word ABSOLUTELY - ec_word TRULY - -@ 9 - .byte TRAINER_CLASS_POKEFAN_F - .string "JULIA$", 8 - .byte 0x42 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_AM - ec_word A - ec_word CUTE - ec_word LADY - ec_word YES - ec_word I_AM - -@ 10 - .byte TRAINER_CLASS_GENTLEMAN - .string "GREGORY$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word THINK - ec_word WE - ec_word SHOULD - ec_word START - ec_word TODAY - -@ 11 - .byte TRAINER_CLASS_CAMPER - .string "KEITH$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOU_RE - ec_word MY - ec_word FRIEND - ec_word FROM - ec_word NOW - ec_word ON - -@ 12 - .byte TRAINER_CLASS_RUNNING_TRIATHLETE_F - .string "KENDRA$", 8 - .byte 0x0A @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_AM - ec_move1 SWIFT - ec_word HOW - ec_word ABOUT - ec_word YOU - ec_word QUES - -@ 13 - .byte TRAINER_CLASS_HIKER - .string "DEV$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WAHAHAHA - ec_word I_AM - ec_word FEELING - ec_word LIKE - ec_word IT_S - ec_move2 PAY_DAY - -@ 14 - .byte TRAINER_CLASS_BATTLE_GIRL - .string "CASSIE$", 8 - .byte 0x0A @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOU_RE - ec_word STRONG - ec_word AREN_T - .2byte -1 - ec_word YOU - ec_word QUES - -@ 15 - .byte TRAINER_CLASS_PSYCHIC_M - .string "JULIAN$", 8 - .byte 0x05 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word FUFUFU - .2byte -1 - ec_word YOU - ec_word CAN_T - ec_word WIN - ec_word KID - -@ 16 - .byte TRAINER_CLASS_LASS - .string "JOYCE$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word BE - ec_word KIND - ec_word TO - ec_word THE - ec_word DIGITAL - ec_word IDOL - -@ 17 - .byte TRAINER_CLASS_GUITARIST - .string "LES$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_AM - ec_word GREAT - ec_word YOU_RE - ec_word JUST - ec_word RATHER - ec_word OKAY - -@ 18 - .byte TRAINER_CLASS_RICH_BOY - .string "CLINTON$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word HAVE - ec_word ROUGH_SKIN - ec_word I - ec_word NEED - ec_word NATURAL_CURE - -@ 19 - .byte TRAINER_CLASS_BUG_CATCHER - .string "LEWIS$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word THIS - ec_word IS - ec_word EXCITING - ec_word CAN - ec_word I - ec_word WIN - -@ 20 - .byte TRAINER_CLASS_PICNICKER - .string "RACHAEL$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word LIKE - ec_word WALKING - ec_word WITH - ec_word MY - ec_word POKEMON - -@ 21 - .byte TRAINER_CLASS_COLLECTOR - .string "HAROLD$", 8 - .byte 0x09 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word HERE - ec_word THEY - ec_word COME - ec_word MY - ec_move2 SUPERPOWER - ec_word POKEMON - -@ 22 - .byte TRAINER_CLASS_TUBER_M - .string "KIPP$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_AM - ec_word A - ec_word GENIUS - ec_word I - ec_word SHOULD - ec_word WIN - -@ 23 - .byte TRAINER_CLASS_KINDLER - .string "IRWIN$", 8 - .byte 0x05 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOU - ec_word WILL - ec_word BE - ec_word FEELING - ec_word MY - ec_word FIRE - -@ 24 - .byte TRAINER_CLASS_PSYCHIC_F - .string "EILEEN$", 8 - .byte 0x0A @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word WILL - ec_move1 ASTONISH - ec_word YOU - ec_word IN - ec_word BATTLE - -@ 25 - .byte TRAINER_CLASS_SWIMMER_F - .string "ANNE$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word SORRY - ec_word BUT - ec_word YOU - ec_word WILL - ec_word NOT - ec_word WIN - -@ 26 - .byte TRAINER_CLASS_CYCLING_TRIATHLETE_F - .string "RUTH$", 8 - .byte 0x06 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word A - ec_word STRONG - ec_word GIRL - ec_word WANTS - ec_word TOUGH - ec_word POKEMON - -@ 27 - .byte TRAINER_CLASS_POKEMANIAC - .string "JEREMY$", 8 - .byte 0x40 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word MY - ec_word POKEMON - ec_word ARE - ec_word COOL - ec_word YOURS - ec_word CAN_T_WIN - -@ 28 - .byte TRAINER_CLASS_SAILOR - .string "TREVOR$", 8 - .byte 0x09 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word MY - ec_word OPPONENT - ec_word IS - ec_word FINALLY - ec_word HERE - ec_word EXCELLENT - -@ 29 - .byte TRAINER_CLASS_POKEMON_BREEDER_F - .string "COLETTE$", 8 - .byte 0x06 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word AM - ec_word HUNGRY - ec_move2 POUND - ec_word MY - ec_move2 BELLY_DRUM - -@ 30 - .byte TRAINER_CLASS_HEX_MANIAC - .string "PAULA$", 8 - .byte 0x42 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word IT_S - ec_word HARD - ec_word TO - ec_word TAKE - ec_word UGLY - ec_move1 SPITE - -@ 31 - .byte TRAINER_CLASS_RUIN_MANIAC - .string "STANLY$", 8 - .byte 0x41 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word ADVENTURE - ec_word AND - ec_word BATTLE - ec_word ARE - ec_word MY - ec_word LIKES - -@ 32 - .byte TRAINER_CLASS_SWIMMING_TRIATHLETE_M - .string "TROY$", 8 - .byte 0x09 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOU - ec_word CAN_T - ec_word LOSE - ec_word TO - ec_word A - ec_word KID - -@ 33 - .byte TRAINER_CLASS_SCHOOL_KID_M - .string "ED$", 8 - .byte 0x08 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word POKEMON - ec_word DAILY - ec_word AT - ec_word SCHOOL - ec_word IT_S - ec_word AWESOME - -@ 34 - .byte TRAINER_CLASS_POKEMON_RANGER_F - .string "ELLEN$", 8 - .byte 0x04 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word ARE - ec_word YOU - ec_word KIND - ec_word TO - ec_word YOUR - ec_word POKEMON - -@ 35 - .byte TRAINER_CLASS_SWIMMER_M - .string "ARNIE$", 8 - .byte 0x09 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word BATTLE - ec_word SERIOUSLY - ec_word BEAUTIFUL - ec_word YOU - ec_move1 DIG - -@ 36 - .byte TRAINER_CLASS_RUNNING_TRIATHLETE_M - .string "HAL$", 8 - .byte 0x09 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word BOY - ec_word I_AM - ec_word TIRED - ec_word READY - ec_word FOR - ec_word SLEEP - -@ 37 - .byte TRAINER_CLASS_BEAUTY - .string "LAUREN$", 8 - .byte 0x06 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word A - ec_word TRAINER - ec_word LIKE - ec_word YOU - ec_word IS - ec_word EXCITING - -@ 38 - .byte TRAINER_CLASS_AROMA_LADY - .string "STACY$", 8 - .byte 0x06 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word HAVE - ec_word YOU - ec_word A - ec_word STENCH - ec_word OR - ec_move1 SWEET_SCENT - -@ 39 - .byte TRAINER_CLASS_COLLECTOR - .string "DARYL$", 8 - .byte 0x81 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOUR - ec_word POKEMON - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - ec_word I - ec_word WANT - ec_word IT - -@ 40 - .byte TRAINER_CLASS_SWIMMING_TRIATHLETE_F - .string "KATHY$", 8 - .byte 0x04 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word WILL - ec_word TRY - ec_word MY - ec_word BEST - ec_word TODAY - -@ 41 - .byte TRAINER_CLASS_POKEMON_RANGER_M - .string "HARRIS$", 8 - .byte 0x0C @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WAAAH - ec_word WAAAH - ec_word WAAAH - ec_word WAAAH - ec_word EHEHE - ec_move1 FAKE_TEARS - -@ 42 - .byte TRAINER_CLASS_POKEFAN_M - .string "GLENN$", 8 - .byte 0x80 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word LISTEN - ec_word TO - ec_word MY - ec_word LOUSY - ec_word ANIME - ec_word SONG - -@ 43 - .byte TRAINER_CLASS_CYCLING_TRIATHLETE_M - .string "NICO$", 8 - .byte 0x04 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word DON_T - ec_word JUST - ec_word BATTLE - ec_word DO - ec_word SOMETHING - ec_word ELSE - -@ 44 - .byte TRAINER_CLASS_POKEMON_BREEDER_M - .string "BAILEY$", 8 - .byte 0x41 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word ARE - ec_word YOU - ec_word BUSY - ec_word GET - ec_word WITH - ec_word IT - -@ 45 - .byte TRAINER_CLASS_PARASOL_LADY - .string "ABBIE$", 8 - .byte 0x08 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word THE - ec_move1 MORNING_SUN - ec_word HAS - ec_word SO - ec_word MUCH - ec_move1 COSMIC_POWER - -@ 46 - .byte TRAINER_CLASS_CAMPER - .string "AL$", 8 - .byte 0x0C @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word LET_S - ec_word HAVE - ec_word AN - ec_word EXCITING - ec_word BATTLE - ec_word YEEHAW_EXCL - -@ 47 - .byte TRAINER_CLASS_SCHOOL_KID_F - .string "PEGGY$", 8 - .byte 0x42 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word WANT - ec_word TO - ec_word SEE - ec_word SOME - ec_move1 GROWTH - -@ 48 - .byte TRAINER_CLASS_BEAUTY - .string "NAOMI$", 8 - .byte 0x04 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word IT - ec_word WAS - ec_word GREAT - ec_word TO - ec_word BE - ec_word YOUNG - -@ 49 - .byte TRAINER_CLASS_NINJA_BOY - .string "KENJI$", 8 - .byte 0x0C @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word PLEASE - .2byte -1 - ec_word DON_T - ec_word BE - ec_word MEAN - ec_word TO_ME - -@ 50 - .byte TRAINER_CLASS_CYCLING_TRIATHLETE_M - .string "ROSS$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WAKE_UP - ec_word MY - ec_move2 HIDDEN_POWER - ec_word AND - ec_move1 ASTONISH - ec_word ME - -@ 51 - .byte TRAINER_CLASS_POKEMON_RANGER_F - .string "EDNA$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word BATTLE_TOWER - ec_word IS - ec_word SO - ec_word ENTERTAINING - ec_word IT_S - ec_word AWESOME - -@ 52 - .byte TRAINER_CLASS_RUIN_MANIAC - .string "ANTON$", 8 - .byte 0x41 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word BLEND - ec_word THICK_FAT - ec_word AND - ec_word CHLOROPHYLL - ec_word IT_S - ec_word TASTY - -@ 53 - .byte TRAINER_CLASS_SWIMMER_M - .string "MITCH$", 8 - .byte 0x81 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word NEXT - ec_word A - ec_word GIRL - ec_word WITH - ec_word A - ec_move1 SCARY_FACE - -@ 54 - .byte TRAINER_CLASS_HEX_MANIAC - .string "ROD$", 8 - .byte 0x42 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word GIMME - ec_word A - ec_word TOUGH - ec_word BATTLE - ec_word NOT - ec_word WIMPY - -@ 55 - .byte TRAINER_CLASS_RUNNING_TRIATHLETE_M - .string "RICH$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word TASTY - ec_word WATER - ec_word IS - ec_word HIP_AND - ec_word HAPPENING - ec_word YES_SIR_EXCL - -@ 56 - .byte TRAINER_CLASS_POKEFAN_M - .string "DANIEL$", 8 - .byte 0x80 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word GO - ec_word FOR - ec_word IT - ec_word MY - ec_word LOVEY_DOVEY - ec_word POKEMON - -@ 57 - .byte TRAINER_CLASS_PSYCHIC_F - .string "GLORIA$", 8 - .byte 0x82 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word LET_S - ec_word GET - ec_word THIS - ec_word FIERY - ec_word BATTLE - ec_word HAPPENING - -@ 58 - .byte TRAINER_CLASS_GUITARIST - .string "NELSON$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word MUSIC - ec_word IS - ec_word MY - ec_word ALL - ec_word MY - ec_word DESTINY - -@ 59 - .byte TRAINER_CLASS_KINDLER - .string "FERRIS$", 8 - .byte 0x41 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word GOOD - ec_word IT - ec_word IS - ec_word SO - ec_word VERY - ec_word GOOD - -@ 60 - .byte TRAINER_CLASS_AROMA_LADY - .string "AMANDA$", 8 - .byte 0x82 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WHAT - ec_word KIND - ec_word OF - ec_word TRAINER - ec_word ARE - ec_word YOU - -@ 61 - .byte TRAINER_CLASS_SWIMMING_TRIATHLETE_M - .string "MASON$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word DON_T - ec_word KNOW - ec_word HOW - ec_word TO - ec_word LOSE - -@ 62 - .byte TRAINER_CLASS_DRAGON_TAMER - .string "NATE$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word DRAGON - ec_word POKEMON - ec_word ARE - ec_word ALL - ec_word THE - ec_move1 RAGE - -@ 63 - .byte TRAINER_CLASS_LASS - .string "MIRIAM$", 8 - .byte 0x82 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOU_RE - ec_word TOO_STRONG - ec_word SERIOUSLY - ec_word IT_S - ec_word BAD - ec_word NEWS - -@ 64 - .byte TRAINER_CLASS_POKEMANIAC - .string "THEO$", 8 - .byte 0x40 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word ADORE - ec_word MY - ec_word MEGA - ec_word CUTE - ec_word PLUSH_DOLL - -@ 65 - .byte TRAINER_CLASS_SWIMMING_TRIATHLETE_F - .string "PAMELA$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word HERE_I_COME - ec_word I_AM - ec_word THE - ec_word CUTE - ec_move2 WATER_SPORT - ec_word IDOL - -@ 66 - .byte TRAINER_CLASS_POKEFAN_F - .string "ALISSA$", 8 - .byte 0x20 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word IT_S - ec_word A - ec_word PREPOSTEROUS - ec_word MATCH - ec_word I_AM - ec_word SHOCKED - -@ 67 - .byte TRAINER_CLASS_GENTLEMAN - .string "ARTHUR$", 8 - .byte 0x20 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word PLEASE - ec_word GIVE - ec_word ME - ec_word A - ec_word GOOD - ec_word BATTLE - -@ 68 - .byte TRAINER_CLASS_SWIMMER_F - .string "MARCY$", 8 - .byte 0x82 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_AM - ec_word BEAUTIFUL - ec_word YOU - ec_word CAN_T - ec_word BEAT - ec_word ME - -@ 69 - .byte TRAINER_CLASS_COOL_TRAINER_M - .string "MILLER$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word BATTLE - ec_word DAILY - ec_word I - ec_word WON_T - ec_word LOSE - -@ 70 - .byte TRAINER_CLASS_BIRD_KEEPER - .string "OLIVER$", 8 - .byte 0x11 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - ec_word GIGGLE - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - .2byte -1 - .2byte -1 - .2byte -1 - -@ 71 - .byte TRAINER_CLASS_CYCLING_TRIATHLETE_F - .string "MOLLY$", 8 - .byte 0x12 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word HOW - ec_word ARE - ec_word YOU - ec_word ON - ec_word MONDAY - ec_word MORNING - -@ 72 - .byte TRAINER_CLASS_BUG_MANIAC - .string "JASON$", 8 - .byte 0x40 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WATER - ec_word AND - ec_word BUG - ec_word POKEMON - ec_word ARE - ec_word GREAT - -@ 73 - .byte TRAINER_CLASS_BATTLE_GIRL - .string "AVA$", 8 - .byte 0x20 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WHAT - ec_word IS - ec_word THIS - ec_word PRESSURE - ec_word ELLIPSIS - ec_word STATIC - -@ 74 - .byte TRAINER_CLASS_FISHERMAN - .string "HANK$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOU_RE - ec_word A - ec_word KID - ec_word YOU - ec_word CAN_T - ec_word WIN - -@ 75 - .byte TRAINER_CLASS_SAILOR - .string "PETER$", 8 - .byte 0x20 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word IT_S - ec_word SERIOUSLY - ec_word TERRIBLE - ec_word I - ec_word REALLY - ec_word THINK - -@ 76 - .byte TRAINER_CLASS_EXPERT_F - .string "MINDY$", 8 - .byte 0x20 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOU - ec_word APPEAR - ec_word TO - ec_word TRAIN - ec_word VERY - ec_word WELL - -@ 77 - .byte TRAINER_CLASS_BUG_MANIAC - .string "DWIGHT$", 8 - .byte 0x11 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word ARE - ec_word YOU - ec_word STRONG - ec_word YOU - ec_word ARE - ec_word SCARY - -@ 78 - .byte TRAINER_CLASS_POKEMON_BREEDER_F - .string "REENA$", 8 - .byte 0x12 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word ALWAYS - ec_word LOSE - ec_word MAYBE - ec_word TODAY - ec_word ELLIPSIS - -@ 79 - .byte TRAINER_CLASS_PARASOL_LADY - .string "MEGAN$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word DON_T - ec_word MAKE - ec_word THAT - ec_move1 SCARY_FACE - ec_word AT - ec_word ME - -@ 80 - .byte TRAINER_CLASS_RUNNING_TRIATHLETE_F - .string "SIERRA$", 8 - .byte 0x04 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_VE - ec_word RUN - ec_word A_LOT - ec_word SO - ec_word I_AM - ec_word HEALTHY - -@ 81 - .byte TRAINER_CLASS_POKEMON_RANGER_M - .string "ARNOLD$", 8 - .byte 0x08 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_AM - ec_word FEELING - ec_word AWESOME - ec_word MY - ec_word POKEMON - ec_word ROCK - -@ 82 - .byte TRAINER_CLASS_BLACK_BELT - .string "XIN$", 8 - .byte 0x04 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word HOO_HAH - ec_word ARE - ec_word YOU - ec_word READY - ec_word TO - ec_word ROCK - -@ 83 - .byte TRAINER_CLASS_COOL_TRAINER_F - .string "KELLY$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOU - ec_word COULDN_T - ec_word BEAT - ec_word ME - ec_word EVER - ec_word KID - -@ 84 - .byte TRAINER_CLASS_COLLECTOR - .string "VANCE$", 8 - .byte 0x80 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word POKEMON - ec_word ALL - ec_word OVER - ec_word THE - ec_word PLACE - ec_word WOWEE - -@ 85 - .byte TRAINER_CLASS_SWIMMING_TRIATHLETE_M - .string "TOBY$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word THIS - ec_word ISN_T - ec_word SPORTS - ec_word IT_S - ec_word A - ec_word BATTLE - -@ 86 - .byte TRAINER_CLASS_GENTLEMAN - .string "NORTON$", 8 - .byte 0x20 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word HAVE - ec_word TO - ec_word WIN - ec_word PLEASE - ec_word LOSE - -@ 87 - .byte TRAINER_CLASS_BATTLE_GIRL - .string "ZOE$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word THIS - ec_word IS - ec_word SCARY - ec_word PLEASE - ec_word BE - ec_word NICE - -@ 88 - .byte TRAINER_CLASS_BEAUTY - .string "EMMA$", 8 - .byte 0x20 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word DON_T - ec_word YOU - ec_move1 FLAIL - ec_word YOU - ec_word CAN_T - ec_move1 WITHDRAW - -@ 89 - .byte TRAINER_CLASS_HIKER - .string "VINCE$", 8 - .byte 0x04 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YAHOO - ec_word YAHOO - ec_word ARE - ec_word YOU - ec_word LISTENING - ec_word QUES - -@ 90 - .byte TRAINER_CLASS_EXPERT_M - .string "MARV$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word LEARN - ec_word TO - ec_word BATTLE - ec_word THE - ec_word CORRECT - ec_word WAY - -@ 91 - .byte TRAINER_CLASS_POKEMON_BREEDER_M - .string "TODD$", 8 - .byte 0x40 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word THE - ec_word WAY - ec_word YOU - ec_word BATTLE - ec_word IT_S - ec_word CHILD_S_PLAY - -@ 92 - .byte TRAINER_CLASS_GUITARIST - .string "GAVIN$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word BABY - ec_word BABY - ec_word BABY - ec_word ROCK - ec_word ME - ec_word HARD - -@ 93 - .byte TRAINER_CLASS_PSYCHIC_M - .string "QUINN$", 8 - .byte 0x08 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word HAVE - ec_word A - ec_word STICKY_HOLD - ec_word ON - ec_word YOU - -@ 94 - .byte TRAINER_CLASS_COOL_TRAINER_F - .string "JENN$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_AM - ec_word ON - ec_word A - ec_word TOUGH - ec_word TRAINER - ec_word SEARCH - -@ 95 - .byte TRAINER_CLASS_EXPERT_M - .string "JOEL$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word BELIEVE - ec_word IN - ec_word YOUR - ec_word POKEMON - ec_word AND - ec_word WIN - -@ 96 - .byte TRAINER_CLASS_DRAGON_TAMER - .string "KYLE$", 8 - .byte 0x0C @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word LIKE - ec_word A - ec_word GIRL - ec_word WITH - ec_move2 FORESIGHT - -@ 97 - .byte TRAINER_CLASS_COOL_TRAINER_M - .string "BRET$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word TAKE - ec_word MY - ec_word OVERWHELMING - ec_word POWER - ec_word AND - ec_word DISAPPEAR - -@ 98 - .byte TRAINER_CLASS_EXPERT_F - .string "CARRIE$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word TRAINER - ec_word I - ec_word SEE - ec_word YOU - ec_word ARE - ec_word CAPABLE - -@ 99 - .byte TRAINER_CLASS_LADY - .string "GILLIAN$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word COME_ON - ec_word SHOW - ec_word ME - ec_word AN - ec_word EXCELLENT - ec_word TIME diff --git a/ld_script.txt b/ld_script.txt index cf443f78c..7d4259136 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -445,6 +445,7 @@ SECTIONS { src/pokemon/learn_move.o(.rodata); src/field/decoration_inventory.o(.rodata); src/field/roamer.o(.rodata); + src/battle_tower.o(.rodata); data/battle_tower.o(.rodata); src/field/use_pokeblock.o(.rodata); src/battle/battle_controller_wally.o(.rodata); 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/ --- data/battle_tower.s | 3 -- data/battle_tower/held_items.inc | 65 -------------------------------------- src/battle_tower.c | 68 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 68 deletions(-) delete mode 100644 data/battle_tower/held_items.inc diff --git a/data/battle_tower.s b/data/battle_tower.s index ac0810eb7..a135d68c5 100644 --- a/data/battle_tower.s +++ b/data/battle_tower.s @@ -3,9 +3,6 @@ .section .rodata -@ 8403860 - .include "data/battle_tower/held_items.inc" - @ 84038E0 .include "data/battle_tower/level_50_mons.inc" diff --git a/data/battle_tower/held_items.inc b/data/battle_tower/held_items.inc deleted file mode 100644 index 6c4f0838b..000000000 --- a/data/battle_tower/held_items.inc +++ /dev/null @@ -1,65 +0,0 @@ - .align 1 -gBattleTowerHeldItems:: @ 8403860 - .2byte ITEM_NONE - .2byte ITEM_KINGS_ROCK - .2byte ITEM_SITRUS_BERRY - .2byte ITEM_ORAN_BERRY - .2byte ITEM_CHESTO_BERRY - .2byte ITEM_HARD_STONE - .2byte ITEM_FOCUS_BAND - .2byte ITEM_PERSIM_BERRY - .2byte ITEM_MIRACLE_SEED - .2byte ITEM_BERRY_JUICE - .2byte ITEM_MACHO_BRACE - .2byte ITEM_SILVER_POWDER - .2byte ITEM_CHERI_BERRY - .2byte ITEM_BLACK_GLASSES - .2byte ITEM_BLACK_BELT - .2byte ITEM_SOUL_DEW - .2byte ITEM_CHOICE_BAND - .2byte ITEM_MAGNET - .2byte ITEM_SILK_SCARF - .2byte ITEM_WHITE_HERB - .2byte ITEM_DEEP_SEA_SCALE - .2byte ITEM_DEEP_SEA_TOOTH - .2byte ITEM_MYSTIC_WATER - .2byte ITEM_SHARP_BEAK - .2byte ITEM_QUICK_CLAW - .2byte ITEM_LEFTOVERS - .2byte ITEM_RAWST_BERRY - .2byte ITEM_LIGHT_BALL - .2byte ITEM_POISON_BARB - .2byte ITEM_NEVER_MELT_ICE - .2byte ITEM_ASPEAR_BERRY - .2byte ITEM_SPELL_TAG - .2byte ITEM_BRIGHT_POWDER - .2byte ITEM_LEPPA_BERRY - .2byte ITEM_SCOPE_LENS - .2byte ITEM_TWISTED_SPOON - .2byte ITEM_METAL_COAT - .2byte ITEM_MENTAL_HERB - .2byte ITEM_CHARCOAL - .2byte ITEM_PECHA_BERRY - .2byte ITEM_SOFT_SAND - .2byte ITEM_LUM_BERRY - .2byte ITEM_DRAGON_SCALE - .2byte ITEM_DRAGON_FANG - .2byte ITEM_IAPAPA_BERRY - .2byte ITEM_WIKI_BERRY - .2byte ITEM_SEA_INCENSE - .2byte ITEM_SHELL_BELL - .2byte ITEM_SALAC_BERRY - .2byte ITEM_LANSAT_BERRY - .2byte ITEM_APICOT_BERRY - .2byte ITEM_STARF_BERRY - .2byte ITEM_LIECHI_BERRY - .2byte ITEM_STICK - .2byte ITEM_LAX_INCENSE - .2byte ITEM_AGUAV_BERRY - .2byte ITEM_FIGY_BERRY - .2byte ITEM_THICK_CLUB - .2byte ITEM_MAGO_BERRY - .2byte ITEM_METAL_POWDER - .2byte ITEM_PETAYA_BERRY - .2byte ITEM_LUCKY_PUNCH - .2byte ITEM_GANLON_BERRY 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/ --- constants/battle_tower_constants.inc | 70 - data/battle_tower.s | 3 - data/battle_tower/level_50_mons.inc | 2701 ----------------------- include/battle_tower.h | 87 + src/battle_tower.c | 2 + src/data/battle_tower/level_50_mons.h | 3903 +++++++++++++++++++++++++++++++++ 6 files changed, 3992 insertions(+), 2774 deletions(-) delete mode 100644 constants/battle_tower_constants.inc delete mode 100644 data/battle_tower/level_50_mons.inc create mode 100644 src/data/battle_tower/level_50_mons.h diff --git a/constants/battle_tower_constants.inc b/constants/battle_tower_constants.inc deleted file mode 100644 index 136b43bd7..000000000 --- a/constants/battle_tower_constants.inc +++ /dev/null @@ -1,70 +0,0 @@ - .set F_EV_SPREAD_HP, 1 << 0 - .set F_EV_SPREAD_ATTACK, 1 << 1 - .set F_EV_SPREAD_DEFENSE, 1 << 2 - .set F_EV_SPREAD_SPEED, 1 << 3 - .set F_EV_SPREAD_SP_ATTACK, 1 << 4 - .set F_EV_SPREAD_SP_DEFENSE, 1 << 5 - - .set BATTLE_TOWER_ITEM_NONE, 0 - .set BATTLE_TOWER_ITEM_KINGS_ROCK, 1 - .set BATTLE_TOWER_ITEM_SITRUS_BERRY, 2 - .set BATTLE_TOWER_ITEM_ORAN_BERRY, 3 - .set BATTLE_TOWER_ITEM_CHESTO_BERRY, 4 - .set BATTLE_TOWER_ITEM_HARD_STONE, 5 - .set BATTLE_TOWER_ITEM_FOCUS_BAND, 6 - .set BATTLE_TOWER_ITEM_PERSIM_BERRY, 7 - .set BATTLE_TOWER_ITEM_MIRACLE_SEED, 8 - .set BATTLE_TOWER_ITEM_BERRY_JUICE, 9 - .set BATTLE_TOWER_ITEM_MACHO_BRACE, 10 - .set BATTLE_TOWER_ITEM_SILVER_POWDER, 11 - .set BATTLE_TOWER_ITEM_CHERI_BERRY, 12 - .set BATTLE_TOWER_ITEM_BLACK_GLASSES, 13 - .set BATTLE_TOWER_ITEM_BLACK_BELT, 14 - .set BATTLE_TOWER_ITEM_SOUL_DEW, 15 - .set BATTLE_TOWER_ITEM_CHOICE_BAND, 16 - .set BATTLE_TOWER_ITEM_MAGNET, 17 - .set BATTLE_TOWER_ITEM_SILK_SCARF, 18 - .set BATTLE_TOWER_ITEM_WHITE_HERB, 19 - .set BATTLE_TOWER_ITEM_DEEP_SEA_SCALE, 20 - .set BATTLE_TOWER_ITEM_DEEP_SEA_TOOTH, 21 - .set BATTLE_TOWER_ITEM_MYSTIC_WATER, 22 - .set BATTLE_TOWER_ITEM_SHARP_BEAK, 23 - .set BATTLE_TOWER_ITEM_QUICK_CLAW, 24 - .set BATTLE_TOWER_ITEM_LEFTOVERS, 25 - .set BATTLE_TOWER_ITEM_RAWST_BERRY, 26 - .set BATTLE_TOWER_ITEM_LIGHT_BALL, 27 - .set BATTLE_TOWER_ITEM_POISON_BARB, 28 - .set BATTLE_TOWER_ITEM_NEVER_MELT_ICE, 29 - .set BATTLE_TOWER_ITEM_ASPEAR_BERRY, 30 - .set BATTLE_TOWER_ITEM_SPELL_TAG, 31 - .set BATTLE_TOWER_ITEM_BRIGHT_POWDER, 32 - .set BATTLE_TOWER_ITEM_LEPPA_BERRY, 33 - .set BATTLE_TOWER_ITEM_SCOPE_LENS, 34 - .set BATTLE_TOWER_ITEM_TWISTED_SPOON, 35 - .set BATTLE_TOWER_ITEM_METAL_COAT, 36 - .set BATTLE_TOWER_ITEM_MENTAL_HERB, 37 - .set BATTLE_TOWER_ITEM_CHARCOAL, 38 - .set BATTLE_TOWER_ITEM_PECHA_BERRY, 39 - .set BATTLE_TOWER_ITEM_SOFT_SAND, 40 - .set BATTLE_TOWER_ITEM_LUM_BERRY, 41 - .set BATTLE_TOWER_ITEM_DRAGON_SCALE, 42 - .set BATTLE_TOWER_ITEM_DRAGON_FANG, 43 - .set BATTLE_TOWER_ITEM_IAPAPA_BERRY, 44 - .set BATTLE_TOWER_ITEM_WIKI_BERRY, 45 - .set BATTLE_TOWER_ITEM_SEA_INCENSE, 46 - .set BATTLE_TOWER_ITEM_SHELL_BELL, 47 - .set BATTLE_TOWER_ITEM_SALAC_BERRY, 48 - .set BATTLE_TOWER_ITEM_LANSAT_BERRY, 49 - .set BATTLE_TOWER_ITEM_APICOT_BERRY, 50 - .set BATTLE_TOWER_ITEM_STARF_BERRY, 51 - .set BATTLE_TOWER_ITEM_LIECHI_BERRY, 52 - .set BATTLE_TOWER_ITEM_STICK, 53 - .set BATTLE_TOWER_ITEM_LAX_INCENSE, 54 - .set BATTLE_TOWER_ITEM_AGUAV_BERRY, 55 - .set BATTLE_TOWER_ITEM_FIGY_BERRY, 56 - .set BATTLE_TOWER_ITEM_THICK_CLUB, 57 - .set BATTLE_TOWER_ITEM_MAGO_BERRY, 58 - .set BATTLE_TOWER_ITEM_METAL_POWDER, 59 - .set BATTLE_TOWER_ITEM_PETAYA_BERRY, 60 - .set BATTLE_TOWER_ITEM_LUCKY_PUNCH, 61 - .set BATTLE_TOWER_ITEM_GANLON_BERRY, 62 diff --git a/data/battle_tower.s b/data/battle_tower.s index a135d68c5..79a7e4f2d 100644 --- a/data/battle_tower.s +++ b/data/battle_tower.s @@ -3,9 +3,6 @@ .section .rodata -@ 84038E0 - .include "data/battle_tower/level_50_mons.inc" - @ 8404BA0 .include "data/battle_tower/level_100_mons.inc" diff --git a/data/battle_tower/level_50_mons.inc b/data/battle_tower/level_50_mons.inc deleted file mode 100644 index 3dfc269a8..000000000 --- a/data/battle_tower/level_50_mons.inc +++ /dev/null @@ -1,2701 +0,0 @@ - .align 2 -gBattleTowerLevel50Mons:: @ 84038E0 -@ 0 - .2byte SPECIES_PIKACHU - .byte BATTLE_TOWER_ITEM_ORAN_BERRY - .byte 0x42 @ team flags - .2byte MOVE_QUICK_ATTACK, MOVE_THUNDER_WAVE, MOVE_THUNDER_SHOCK, MOVE_GROWL - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 1 - .2byte SPECIES_BEAUTIFLY - .byte BATTLE_TOWER_ITEM_MIRACLE_SEED - .byte 0x41 @ team flags - .2byte MOVE_ABSORB, MOVE_STUN_SPORE, MOVE_GUST, MOVE_SAFEGUARD - .byte 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 - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 2 - .2byte SPECIES_SWELLOW - .byte BATTLE_TOWER_ITEM_SHARP_BEAK - .byte 0x07 @ team flags - .2byte MOVE_PECK, MOVE_WING_ATTACK, MOVE_AERIAL_ACE, MOVE_AGILITY - .byte F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 3 - .2byte SPECIES_WALREIN - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x0B @ team flags - .2byte MOVE_HAIL, MOVE_ENCORE, MOVE_ICE_BALL, MOVE_TOXIC - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 4 - .2byte SPECIES_SEAKING - .byte BATTLE_TOWER_ITEM_MYSTIC_WATER - .byte 0x07 @ team flags - .2byte MOVE_PECK, MOVE_FLAIL, MOVE_FURY_ATTACK, MOVE_SURF - .byte F_EV_SPREAD_SPEED - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 5 - .2byte SPECIES_TORCHIC - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x42 @ team flags - .2byte MOVE_FIRE_SPIN, MOVE_PROTECT, MOVE_SAND_ATTACK, MOVE_SLASH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 6 - .2byte SPECIES_MASQUERAIN - .byte BATTLE_TOWER_ITEM_WHITE_HERB - .byte 0x41 @ team flags - .2byte MOVE_STUN_SPORE, MOVE_WATER_SPORT, MOVE_QUICK_ATTACK, MOVE_GUST - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_IMPISH - .2byte 0 @ padding - -@ 7 - .2byte SPECIES_ILLUMISE - .byte BATTLE_TOWER_ITEM_NONE - .byte 0x41 @ team flags - .2byte MOVE_FLATTER, MOVE_COVET, MOVE_WISH, MOVE_FACADE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 8 - .2byte SPECIES_DELCATTY - .byte BATTLE_TOWER_ITEM_SILK_SCARF - .byte 0x42 @ team flags - .2byte MOVE_ATTRACT, MOVE_TAIL_WHIP, MOVE_FAINT_ATTACK, MOVE_DIG - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LONELY - .2byte 0 @ padding - -@ 9 - .2byte SPECIES_KECLEON - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x0B @ team flags - .2byte MOVE_TAIL_WHIP, MOVE_SLASH, MOVE_LICK, MOVE_SCREECH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 10 - .2byte SPECIES_MIGHTYENA - .byte BATTLE_TOWER_ITEM_PECHA_BERRY - .byte 0x05 @ team flags - .2byte MOVE_BITE, MOVE_TAKE_DOWN, MOVE_ROAR, MOVE_HOWL - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 11 - .2byte SPECIES_SLAKING - .byte BATTLE_TOWER_ITEM_BLACK_GLASSES - .byte 0x05 @ team flags - .2byte MOVE_FAINT_ATTACK, MOVE_COUNTER, MOVE_SCRATCH, MOVE_TAUNT - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 12 - .2byte SPECIES_MACHOKE - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x05 @ team flags - .2byte MOVE_LEER, MOVE_DIG, MOVE_LOW_KICK, MOVE_FOCUS_PUNCH - .byte F_EV_SPREAD_SPEED - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 13 - .2byte SPECIES_RHYDON - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x05 @ team flags - .2byte MOVE_STRENGTH, MOVE_ROCK_TOMB, MOVE_STOMP, MOVE_ROCK_SMASH - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_QUIRKY - .2byte 0 @ padding - -@ 14 - .2byte SPECIES_CACTURNE - .byte BATTLE_TOWER_ITEM_POISON_BARB - .byte 0x0B @ team flags - .2byte MOVE_POISON_STING, MOVE_GROWTH, MOVE_ABSORB, MOVE_SOLAR_BEAM - .byte F_EV_SPREAD_SP_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 15 - .2byte SPECIES_ZIGZAGOON - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x0A @ team flags - .2byte MOVE_FLAIL, MOVE_SAND_ATTACK, MOVE_REST, MOVE_SURF - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 16 - .2byte SPECIES_DODRIO - .byte BATTLE_TOWER_ITEM_SHARP_BEAK - .byte 0x03 @ team flags - .2byte MOVE_PURSUIT, MOVE_TRI_ATTACK, MOVE_GROWL, MOVE_AGILITY - .byte 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 - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 17 - .2byte SPECIES_WHISCASH - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x0B @ team flags - .2byte MOVE_WATER_GUN, MOVE_AMNESIA, MOVE_MAGNITUDE, MOVE_MUD_SLAP - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_LAX - .2byte 0 @ padding - -@ 18 - .2byte SPECIES_NINJASK - .byte BATTLE_TOWER_ITEM_SILVER_POWDER - .byte 0x41 @ team flags - .2byte MOVE_SAND_ATTACK, MOVE_FURY_CUTTER, MOVE_AGILITY, MOVE_HARDEN - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 19 - .2byte SPECIES_DUSCLOPS - .byte BATTLE_TOWER_ITEM_PECHA_BERRY - .byte 0x01 @ team flags - .2byte MOVE_PROTECT, MOVE_NIGHT_SHADE, MOVE_ASTONISH, MOVE_WILL_O_WISP - .byte F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 20 - .2byte SPECIES_CAMERUPT - .byte BATTLE_TOWER_ITEM_CHARCOAL - .byte 0x07 @ team flags - .2byte MOVE_DIG, MOVE_EMBER, MOVE_GROWL, MOVE_ROCK_SMASH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_BOLD - .2byte 0 @ padding - -@ 21 - .2byte SPECIES_SPINDA - .byte BATTLE_TOWER_ITEM_CHERI_BERRY - .byte 0x4A @ team flags - .2byte MOVE_TEETER_DANCE, MOVE_FLAIL, MOVE_PSYCH_UP, MOVE_DOUBLE_EDGE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_CALM - .2byte 0 @ padding - -@ 22 - .2byte SPECIES_SEVIPER - .byte BATTLE_TOWER_ITEM_POISON_BARB - .byte 0x09 @ team flags - .2byte MOVE_SCREECH, MOVE_GLARE, MOVE_DIG, MOVE_POISON_FANG - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 23 - .2byte SPECIES_FLYGON - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x49 @ team flags - .2byte MOVE_SAND_ATTACK, MOVE_SAND_TOMB, MOVE_FACADE, MOVE_TOXIC - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 24 - .2byte SPECIES_AZUMARILL - .byte BATTLE_TOWER_ITEM_WHITE_HERB - .byte 0x42 @ team flags - .2byte MOVE_BUBBLE_BEAM, MOVE_TAIL_WHIP, MOVE_RAIN_DANCE, MOVE_ROLLOUT - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 25 - .2byte SPECIES_ZANGOOSE - .byte BATTLE_TOWER_ITEM_MENTAL_HERB - .byte 0x07 @ team flags - .2byte MOVE_STRENGTH, MOVE_TAUNT, MOVE_CRUSH_CLAW, MOVE_DETECT - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 26 - .2byte SPECIES_MEDICHAM - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x07 @ team flags - .2byte MOVE_REVERSAL, MOVE_MEDITATE, MOVE_CONFUSION, MOVE_FACADE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 27 - .2byte SPECIES_ROSELIA - .byte BATTLE_TOWER_ITEM_MIRACLE_SEED - .byte 0x0A @ team flags - .2byte MOVE_GROWTH, MOVE_MEGA_DRAIN, MOVE_TOXIC, MOVE_CUT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_NAUGHTY - .2byte 0 @ padding - -@ 28 - .2byte SPECIES_SWALOT - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x0B @ team flags - .2byte MOVE_STOCKPILE, MOVE_SPIT_UP, MOVE_SLUDGE, MOVE_POISON_GAS - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 29 - .2byte SPECIES_MAGNETON - .byte BATTLE_TOWER_ITEM_MAGNET - .byte 0x0B @ team flags - .2byte MOVE_SUPERSONIC, MOVE_THUNDER_WAVE, MOVE_SCREECH, MOVE_TRI_ATTACK - .byte F_EV_SPREAD_SPEED - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 30 - .2byte SPECIES_GARDEVOIR - .byte BATTLE_TOWER_ITEM_TWISTED_SPOON - .byte 0x09 @ team flags - .2byte MOVE_CONFUSION, MOVE_TOXIC, MOVE_TORMENT, MOVE_PROTECT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_BOLD - .2byte 0 @ padding - -@ 31 - .2byte SPECIES_RELICANTH - .byte BATTLE_TOWER_ITEM_MYSTIC_WATER - .byte 0x01 @ team flags - .2byte MOVE_SURF, MOVE_ANCIENT_POWER, MOVE_ROCK_TOMB, MOVE_HARDEN - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 32 - .2byte SPECIES_NINETALES - .byte BATTLE_TOWER_ITEM_RAWST_BERRY - .byte 0x03 @ team flags - .2byte MOVE_CONFUSE_RAY, MOVE_FIRE_SPIN, MOVE_QUICK_ATTACK, MOVE_FLAMETHROWER - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 33 - .2byte SPECIES_SHARPEDO - .byte BATTLE_TOWER_ITEM_BLACK_GLASSES - .byte 0x05 @ team flags - .2byte MOVE_BITE, MOVE_SKULL_BASH, MOVE_RAIN_DANCE, MOVE_SURF - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 34 - .2byte SPECIES_GIRAFARIG - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x03 @ team flags - .2byte MOVE_STRENGTH, MOVE_PSYBEAM, MOVE_AGILITY, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_IMPISH - .2byte 0 @ padding - -@ 35 - .2byte SPECIES_PELIPPER - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x0B @ team flags - .2byte MOVE_MIST, MOVE_STOCKPILE, MOVE_SWALLOW, MOVE_SPIT_UP - .byte F_EV_SPREAD_DEFENSE - .byte NATURE_QUIRKY - .2byte 0 @ padding - -@ 36 - .2byte SPECIES_SABLEYE - .byte BATTLE_TOWER_ITEM_CHERI_BERRY - .byte 0x09 @ team flags - .2byte MOVE_SHADOW_BALL, MOVE_NIGHT_SHADE, MOVE_SNATCH, MOVE_FAKE_OUT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 37 - .2byte SPECIES_LUNATONE - .byte BATTLE_TOWER_ITEM_HARD_STONE - .byte 0x0B @ team flags - .2byte MOVE_COSMIC_POWER, MOVE_SANDSTORM, MOVE_PSYCHIC, MOVE_ROCK_THROW - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 38 - .2byte SPECIES_LUDICOLO - .byte BATTLE_TOWER_ITEM_NONE - .byte 0x0B @ team flags - .2byte MOVE_THIEF, MOVE_FAKE_OUT, MOVE_SURF, MOVE_RAIN_DANCE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 39 - .2byte SPECIES_GRUMPIG - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x0B @ team flags - .2byte MOVE_ODOR_SLEUTH, MOVE_CONFUSE_RAY, MOVE_MAGIC_COAT, MOVE_PSYCHIC - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 40 - .2byte SPECIES_BRELOOM - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x0B @ team flags - .2byte MOVE_CUT, MOVE_LEECH_SEED, MOVE_MEGA_DRAIN, MOVE_STUN_SPORE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 41 - .2byte SPECIES_WAILORD - .byte BATTLE_TOWER_ITEM_MYSTIC_WATER - .byte 0x03 @ team flags - .2byte MOVE_WATER_SPOUT, MOVE_ROLLOUT, MOVE_MIST, MOVE_RAIN_DANCE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 42 - .2byte SPECIES_WEEZING - .byte BATTLE_TOWER_ITEM_POISON_BARB - .byte 0x05 @ team flags - .2byte MOVE_SMOG, MOVE_SELF_DESTRUCT, MOVE_TOXIC, MOVE_SLUDGE_BOMB - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 43 - .2byte SPECIES_KADABRA - .byte BATTLE_TOWER_ITEM_LEPPA_BERRY - .byte 0x0B @ team flags - .2byte MOVE_FUTURE_SIGHT, MOVE_FOCUS_PUNCH, MOVE_SKILL_SWAP, MOVE_SNATCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 44 - .2byte SPECIES_MANECTRIC - .byte BATTLE_TOWER_ITEM_MAGNET - .byte 0x07 @ team flags - .2byte MOVE_THUNDER_WAVE, MOVE_BITE, MOVE_SPARK, MOVE_QUICK_ATTACK - .byte F_EV_SPREAD_SP_ATTACK - .byte NATURE_RASH - .2byte 0 @ padding - -@ 45 - .2byte SPECIES_RAICHU - .byte BATTLE_TOWER_ITEM_ASPEAR_BERRY - .byte 0x03 @ team flags - .2byte MOVE_QUICK_ATTACK, MOVE_AGILITY, MOVE_LIGHT_SCREEN, MOVE_THUNDERBOLT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 46 - .2byte SPECIES_XATU - .byte BATTLE_TOWER_ITEM_TWISTED_SPOON - .byte 0x03 @ team flags - .2byte MOVE_NIGHT_SHADE, MOVE_PECK, MOVE_CONFUSE_RAY, MOVE_FUTURE_SIGHT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 47 - .2byte SPECIES_LOUDRED - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x05 @ team flags - .2byte MOVE_UPROAR, MOVE_STOMP, MOVE_SCREECH, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_MODEST - .2byte 0 @ padding - -@ 48 - .2byte SPECIES_SOLROCK - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x03 @ team flags - .2byte MOVE_ROCK_THROW, MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_SANDSTORM - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_MILD - .2byte 0 @ padding - -@ 49 - .2byte SPECIES_CLAYDOL - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x03 @ team flags - .2byte MOVE_SANDSTORM, MOVE_REFLECT, MOVE_ROCK_TOMB, MOVE_STRENGTH - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 50 - .2byte SPECIES_CRAWDAUNT - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x03 @ team flags - .2byte MOVE_WATER_PULSE, MOVE_KNOCK_OFF, MOVE_HARDEN, MOVE_CUT - .byte F_EV_SPREAD_HP - .byte NATURE_JOLLY - .2byte 0 @ padding - -@ 51 - .2byte SPECIES_GOLBAT - .byte BATTLE_TOWER_ITEM_WHITE_HERB - .byte 0x09 @ team flags - .2byte MOVE_CONFUSE_RAY, MOVE_WING_ATTACK, MOVE_MEAN_LOOK, MOVE_BITE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 52 - .2byte SPECIES_BELLOSSOM - .byte BATTLE_TOWER_ITEM_MIRACLE_SEED - .byte 0x0A @ team flags - .2byte MOVE_SOLAR_BEAM, MOVE_PETAL_DANCE, MOVE_SWEET_SCENT, MOVE_BULLET_SEED - .byte 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 - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 53 - .2byte SPECIES_DONPHAN - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x05 @ team flags - .2byte MOVE_ROCK_SMASH, MOVE_RAPID_SPIN, MOVE_FLAIL, MOVE_HORN_ATTACK - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_IMPISH - .2byte 0 @ padding - -@ 54 - .2byte SPECIES_NOSEPASS - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x0B @ team flags - .2byte MOVE_SANDSTORM, MOVE_ROCK_SLIDE, MOVE_BLOCK, MOVE_THUNDER_WAVE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_JOLLY - .2byte 0 @ padding - -@ 55 - .2byte SPECIES_PINSIR - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x05 @ team flags - .2byte MOVE_SWORDS_DANCE, MOVE_HARDEN, MOVE_CUT, MOVE_SEISMIC_TOSS - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 56 - .2byte SPECIES_GOLDUCK - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x0B @ team flags - .2byte MOVE_DISABLE, MOVE_PSYCH_UP, MOVE_WATER_PULSE, MOVE_BRICK_BREAK - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 57 - .2byte SPECIES_SHIFTRY - .byte BATTLE_TOWER_ITEM_MENTAL_HERB - .byte 0x07 @ team flags - .2byte MOVE_TORMENT, MOVE_EXTRASENSORY, MOVE_SOLAR_BEAM, MOVE_AERIAL_ACE - .byte F_EV_SPREAD_DEFENSE - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 58 - .2byte SPECIES_DUSTOX - .byte BATTLE_TOWER_ITEM_SILVER_POWDER - .byte 0x01 @ team flags - .2byte MOVE_CONFUSION, MOVE_SILVER_WIND, MOVE_PSYBEAM, MOVE_WHIRLWIND - .byte F_EV_SPREAD_SPEED - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 59 - .2byte SPECIES_SHUPPET - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x03 @ team flags - .2byte MOVE_WILL_O_WISP, MOVE_NIGHT_SHADE, MOVE_FAINT_ATTACK, MOVE_CURSE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 60 - .2byte SPECIES_SEAKING - .byte BATTLE_TOWER_ITEM_MYSTIC_WATER - .byte 0x07 @ team flags - .2byte MOVE_RAIN_DANCE, MOVE_SURF, MOVE_HORN_ATTACK, MOVE_HORN_DRILL - .byte F_EV_SPREAD_SP_DEFENSE - .byte NATURE_LONELY - .2byte 0 @ padding - -@ 61 - .2byte SPECIES_SKARMORY - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x07 @ team flags - .2byte MOVE_STEEL_WING, MOVE_SAND_ATTACK, MOVE_SWIFT, MOVE_AGILITY - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 62 - .2byte SPECIES_TORKOAL - .byte BATTLE_TOWER_ITEM_FOCUS_BAND - .byte 0x43 @ team flags - .2byte MOVE_FLAMETHROWER, MOVE_IRON_DEFENSE, MOVE_BODY_SLAM, MOVE_PROTECT - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_NAUGHTY - .2byte 0 @ padding - -@ 63 - .2byte SPECIES_GOLEM - .byte BATTLE_TOWER_ITEM_SOFT_SAND - .byte 0x05 @ team flags - .2byte MOVE_MAGNITUDE, MOVE_EXPLOSION, MOVE_STRENGTH, MOVE_SANDSTORM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 64 - .2byte SPECIES_GARDEVOIR - .byte BATTLE_TOWER_ITEM_TWISTED_SPOON - .byte 0x41 @ team flags - .2byte MOVE_REFLECT, MOVE_PSYCHIC, MOVE_IMPRISON, MOVE_TOXIC - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 65 - .2byte SPECIES_SANDSLASH - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x07 @ team flags - .2byte MOVE_SANDSTORM, MOVE_SLASH, MOVE_EARTHQUAKE, MOVE_SWIFT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 66 - .2byte SPECIES_WOBBUFFET - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x0B @ team flags - .2byte MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_SAFEGUARD, MOVE_DESTINY_BOND - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_CALM - .2byte 0 @ padding - -@ 67 - .2byte SPECIES_TENTACRUEL - .byte BATTLE_TOWER_ITEM_CHERI_BERRY - .byte 0x05 @ team flags - .2byte MOVE_CONSTRICT, MOVE_SURF, MOVE_HYPER_BEAM, MOVE_SCREECH - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_IMPISH - .2byte 0 @ padding - -@ 68 - .2byte SPECIES_TROPIUS - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x05 @ team flags - .2byte MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_SYNTHESIS, MOVE_RAZOR_LEAF - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 69 - .2byte SPECIES_MAWILE - .byte BATTLE_TOWER_ITEM_METAL_COAT - .byte 0x43 @ team flags - .2byte MOVE_IRON_DEFENSE, MOVE_SLUDGE_BOMB, MOVE_CRUNCH, MOVE_STRENGTH - .byte F_EV_SPREAD_ATTACK - .byte NATURE_CALM - .2byte 0 @ padding - -@ 70 - .2byte SPECIES_MUK - .byte BATTLE_TOWER_ITEM_RAWST_BERRY - .byte 0x09 @ team flags - .2byte MOVE_SLUDGE, MOVE_ACID_ARMOR, MOVE_GIGA_DRAIN, MOVE_DISABLE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 71 - .2byte SPECIES_MAGCARGO - .byte BATTLE_TOWER_ITEM_CHARCOAL - .byte 0x0D @ team flags - .2byte MOVE_FLAMETHROWER, MOVE_ROCK_THROW, MOVE_HARDEN, MOVE_AMNESIA - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_NAUGHTY - .2byte 0 @ padding - -@ 72 - .2byte SPECIES_LINOONE - .byte BATTLE_TOWER_ITEM_PECHA_BERRY - .byte 0x07 @ team flags - .2byte MOVE_HEADBUTT, MOVE_TAIL_WHIP, MOVE_SURF, MOVE_DIG - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_QUIRKY - .2byte 0 @ padding - -@ 73 - .2byte SPECIES_ELECTRODE - .byte BATTLE_TOWER_ITEM_ASPEAR_BERRY - .byte 0x05 @ team flags - .2byte MOVE_LIGHT_SCREEN, MOVE_THUNDERBOLT, MOVE_SWIFT, MOVE_ROLLOUT - .byte F_EV_SPREAD_SPEED - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 74 - .2byte SPECIES_DUSCLOPS - .byte BATTLE_TOWER_ITEM_SPELL_TAG - .byte 0x09 @ team flags - .2byte MOVE_MEAN_LOOK, MOVE_NIGHT_SHADE, MOVE_SKILL_SWAP, MOVE_SHADOW_BALL - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 75 - .2byte SPECIES_VILEPLUME - .byte BATTLE_TOWER_ITEM_MIRACLE_SEED - .byte 0x0A @ team flags - .2byte MOVE_TOXIC, MOVE_MOONLIGHT, MOVE_GIGA_DRAIN, MOVE_STUN_SPORE - .byte F_EV_SPREAD_HP - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 76 - .2byte SPECIES_CROBAT - .byte BATTLE_TOWER_ITEM_LEPPA_BERRY - .byte 0x05 @ team flags - .2byte MOVE_BITE, MOVE_HAZE, MOVE_WING_ATTACK, MOVE_STEEL_WING - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 77 - .2byte SPECIES_CORSOLA - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x0A @ team flags - .2byte MOVE_RECOVER, MOVE_MIRROR_COAT, MOVE_HAIL, MOVE_SURF - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 78 - .2byte SPECIES_STARMIE - .byte BATTLE_TOWER_ITEM_MYSTIC_WATER - .byte 0x0B @ team flags - .2byte MOVE_RAPID_SPIN, MOVE_WATER_PULSE, MOVE_REFLECT, MOVE_SKILL_SWAP - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 79 - .2byte SPECIES_EXPLOUD - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x41 @ team flags - .2byte MOVE_HYPER_BEAM, MOVE_HOWL, MOVE_UPROAR, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 80 - .2byte SPECIES_ALAKAZAM - .byte BATTLE_TOWER_ITEM_TWISTED_SPOON - .byte 0x0B @ team flags - .2byte MOVE_PSYBEAM, MOVE_SNATCH, MOVE_REFLECT, MOVE_HYPER_BEAM - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 81 - .2byte SPECIES_HERACROSS - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x05 @ team flags - .2byte MOVE_HORN_ATTACK, MOVE_COUNTER, MOVE_REVERSAL, MOVE_LEER - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_BOLD - .2byte 0 @ padding - -@ 82 - .2byte SPECIES_CASTFORM - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x0B @ team flags - .2byte MOVE_WEATHER_BALL, MOVE_SUNNY_DAY, MOVE_RAIN_DANCE, MOVE_HAIL - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 83 - .2byte SPECIES_VIGOROTH - .byte BATTLE_TOWER_ITEM_FOCUS_BAND - .byte 0x05 @ team flags - .2byte MOVE_FOCUS_PUNCH, MOVE_REVERSAL, MOVE_COUNTER, MOVE_TAUNT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 84 - .2byte SPECIES_DUSKULL - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x09 @ team flags - .2byte MOVE_TOXIC, MOVE_CONFUSE_RAY, MOVE_SHADOW_BALL, MOVE_WILL_O_WISP - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 85 - .2byte SPECIES_LANTURN - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x07 @ team flags - .2byte MOVE_FLAIL, MOVE_SURF, MOVE_SPARK, MOVE_TAKE_DOWN - .byte F_EV_SPREAD_SPEED - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 86 - .2byte SPECIES_HARIYAMA - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x05 @ team flags - .2byte MOVE_STRENGTH, MOVE_FAKE_OUT, MOVE_FACADE, MOVE_SAND_ATTACK - .byte F_EV_SPREAD_SPEED - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 87 - .2byte SPECIES_KINGDRA - .byte BATTLE_TOWER_ITEM_MYSTIC_WATER - .byte 0x43 @ team flags - .2byte MOVE_AGILITY, MOVE_DIVE, MOVE_ICE_BEAM, MOVE_PROTECT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 88 - .2byte SPECIES_GYARADOS - .byte BATTLE_TOWER_ITEM_DRAGON_FANG - .byte 0x41 @ team flags - .2byte MOVE_RAIN_DANCE, MOVE_SURF, MOVE_WATER_PULSE, MOVE_HYPER_BEAM - .byte 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 - .byte NATURE_IMPISH - .2byte 0 @ padding - -@ 89 - .2byte SPECIES_AGGRON - .byte BATTLE_TOWER_ITEM_METAL_COAT - .byte 0x45 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_METAL_CLAW, MOVE_ROAR - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 90 - .2byte SPECIES_ABSOL - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0xC7 @ team flags - .2byte MOVE_SWORDS_DANCE, MOVE_IRON_TAIL, MOVE_SLASH, MOVE_FACADE - .byte F_EV_SPREAD_ATTACK - .byte NATURE_LAX - .2byte 0 @ padding - -@ 91 - .2byte SPECIES_SWELLOW - .byte BATTLE_TOWER_ITEM_SHARP_BEAK - .byte 0x0F @ team flags - .2byte MOVE_DOUBLE_TEAM, MOVE_FLY, MOVE_TOXIC, MOVE_STEEL_WING - .byte 0 - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 92 - .2byte SPECIES_MACHAMP - .byte BATTLE_TOWER_ITEM_BLACK_BELT - .byte 0x05 @ team flags - .2byte MOVE_STRENGTH, MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 93 - .2byte SPECIES_SWAMPERT - .byte BATTLE_TOWER_ITEM_NEVER_MELT_ICE - .byte 0x41 @ team flags - .2byte MOVE_PROTECT, MOVE_ICE_BEAM, MOVE_HYPER_BEAM, MOVE_SURF - .byte 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 - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 94 - .2byte SPECIES_SCEPTILE - .byte BATTLE_TOWER_ITEM_MIRACLE_SEED - .byte 0x41 @ team flags - .2byte MOVE_LEAF_BLADE, MOVE_DRAGON_CLAW, MOVE_AGILITY, MOVE_PROTECT - .byte 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 - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 95 - .2byte SPECIES_BLAZIKEN - .byte BATTLE_TOWER_ITEM_CHARCOAL - .byte 0x41 @ team flags - .2byte MOVE_BLAZE_KICK, MOVE_MIRROR_MOVE, MOVE_EARTHQUAKE, MOVE_PROTECT - .byte 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 - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 96 - .2byte SPECIES_ALTARIA - .byte BATTLE_TOWER_ITEM_DRAGON_FANG - .byte 0x43 @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_DRAGON_DANCE, MOVE_TOXIC, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 97 - .2byte SPECIES_LUDICOLO - .byte BATTLE_TOWER_ITEM_BLACK_BELT - .byte 0x43 @ team flags - .2byte MOVE_BRICK_BREAK, MOVE_WATER_PULSE, MOVE_RAIN_DANCE, MOVE_FOCUS_PUNCH - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 98 - .2byte SPECIES_SABLEYE - .byte BATTLE_TOWER_ITEM_SPELL_TAG - .byte 0x49 @ team flags - .2byte MOVE_SHADOW_BALL, MOVE_SNATCH, MOVE_DIG, MOVE_CONFUSE_RAY - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 99 - .2byte SPECIES_ZANGOOSE - .byte BATTLE_TOWER_ITEM_BLACK_GLASSES - .byte 0x0F @ team flags - .2byte MOVE_FACADE, MOVE_THUNDERBOLT, MOVE_CRUSH_CLAW, MOVE_DETECT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_CALM - .2byte 0 @ padding - -@ 100 - .2byte SPECIES_LINOONE - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x0F @ team flags - .2byte MOVE_IRON_TAIL, MOVE_HEADBUTT, MOVE_ATTRACT, MOVE_ICE_BEAM - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 101 - .2byte SPECIES_WHISCASH - .byte BATTLE_TOWER_ITEM_SOFT_SAND - .byte 0x07 @ team flags - .2byte MOVE_MUD_SLAP, MOVE_EARTHQUAKE, MOVE_SURF, MOVE_AMNESIA - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_BOLD - .2byte 0 @ padding - -@ 102 - .2byte SPECIES_SOLROCK - .byte BATTLE_TOWER_ITEM_HARD_STONE - .byte 0x43 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_LIGHT_SCREEN, MOVE_ROCK_SLIDE, MOVE_CONFUSION - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 103 - .2byte SPECIES_STARMIE - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x03 @ team flags - .2byte MOVE_RECOVER, MOVE_RAIN_DANCE, MOVE_SURF, MOVE_CONFUSE_RAY - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 104 - .2byte SPECIES_CACTURNE - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x0F @ team flags - .2byte MOVE_INGRAIN, MOVE_LEECH_SEED, MOVE_PROTECT, MOVE_FRUSTRATION - .byte 0 - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 105 - .2byte SPECIES_SHIFTRY - .byte BATTLE_TOWER_ITEM_FOCUS_BAND - .byte 0x05 @ team flags - .2byte MOVE_FRUSTRATION, MOVE_HYPER_BEAM, MOVE_GIGA_DRAIN, MOVE_TORMENT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 106 - .2byte SPECIES_MANECTRIC - .byte BATTLE_TOWER_ITEM_MAGNET - .byte 0x0F @ team flags - .2byte MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_IRON_TAIL, MOVE_ROAR - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 107 - .2byte SPECIES_KECLEON - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0xC3 @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_FOCUS_PUNCH, MOVE_IRON_TAIL, MOVE_FLAMETHROWER - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 108 - .2byte SPECIES_PINSIR - .byte BATTLE_TOWER_ITEM_SOFT_SAND - .byte 0x8D @ team flags - .2byte MOVE_GUILLOTINE, MOVE_SUBMISSION, MOVE_EARTHQUAKE, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 109 - .2byte SPECIES_METANG - .byte BATTLE_TOWER_ITEM_METAL_COAT - .byte 0x05 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_METEOR_MASH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_IMPISH - .2byte 0 @ padding - -@ 110 - .2byte SPECIES_CLAYDOL - .byte BATTLE_TOWER_ITEM_PECHA_BERRY - .byte 0x43 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_SELF_DESTRUCT, MOVE_SANDSTORM, MOVE_PROTECT - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 111 - .2byte SPECIES_MASQUERAIN - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x0A @ team flags - .2byte MOVE_TOXIC, MOVE_SILVER_WIND, MOVE_ATTRACT, MOVE_ICE_BEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 112 - .2byte SPECIES_RELICANTH - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0xC5 @ team flags - .2byte MOVE_ROCK_TOMB, MOVE_DOUBLE_EDGE, MOVE_SURF, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 113 - .2byte SPECIES_WALREIN - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x0D @ team flags - .2byte MOVE_SURF, MOVE_ENCORE, MOVE_BLIZZARD, MOVE_HYPER_BEAM - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 114 - .2byte SPECIES_WAILORD - .byte BATTLE_TOWER_ITEM_APICOT_BERRY - .byte 0x0B @ team flags - .2byte MOVE_WATER_SPOUT, MOVE_REST, MOVE_AMNESIA, MOVE_HAIL - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 115 - .2byte SPECIES_GIRAFARIG - .byte BATTLE_TOWER_ITEM_GANLON_BERRY - .byte 0x4F @ team flags - .2byte MOVE_DOUBLE_TEAM, MOVE_CRUNCH, MOVE_PSYCHIC, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 116 - .2byte SPECIES_MEDICHAM - .byte BATTLE_TOWER_ITEM_APICOT_BERRY - .byte 0x4B @ team flags - .2byte MOVE_CALM_MIND, MOVE_REVERSAL, MOVE_ROCK_TOMB, MOVE_PSYCHIC - .byte 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 - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 117 - .2byte SPECIES_TROPIUS - .byte BATTLE_TOWER_ITEM_MENTAL_HERB - .byte 0xC7 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_SYNTHESIS, MOVE_RAZOR_LEAF, MOVE_HYPER_BEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_BOLD - .2byte 0 @ padding - -@ 118 - .2byte SPECIES_NINJASK - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x05 @ team flags - .2byte MOVE_DOUBLE_TEAM, MOVE_SLASH, MOVE_SWORDS_DANCE, MOVE_LEECH_LIFE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 119 - .2byte SPECIES_CAMERUPT - .byte BATTLE_TOWER_ITEM_CHARCOAL - .byte 0x0D @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_ROCK_SLIDE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 120 - .2byte SPECIES_SHARPEDO - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x05 @ team flags - .2byte MOVE_CRUNCH, MOVE_SURF, MOVE_EARTHQUAKE, MOVE_PROTECT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 121 - .2byte SPECIES_WIGGLYTUFF - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x0E @ team flags - .2byte MOVE_PROTECT, MOVE_TOXIC, MOVE_DOUBLE_TEAM, MOVE_DIG - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_LAX - .2byte 0 @ padding - -@ 122 - .2byte SPECIES_SEVIPER - .byte BATTLE_TOWER_ITEM_POISON_BARB - .byte 0x05 @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_HAZE, MOVE_CRUNCH, MOVE_FLAMETHROWER - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 123 - .2byte SPECIES_CRADILY - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0xC1 @ team flags - .2byte MOVE_ROCK_TOMB, MOVE_CONFUSE_RAY, MOVE_INGRAIN, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 124 - .2byte SPECIES_ARMALDO - .byte BATTLE_TOWER_ITEM_RAWST_BERRY - .byte 0xC1 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_SANDSTORM, MOVE_PROTECT, MOVE_SLASH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 125 - .2byte SPECIES_MAGNETON - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x0D @ team flags - .2byte MOVE_ZAP_CANNON, MOVE_SUPERSONIC, MOVE_TOXIC, MOVE_PROTECT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 126 - .2byte SPECIES_LANTURN - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x06 @ team flags - .2byte MOVE_THUNDER, MOVE_SURF, MOVE_ICE_BEAM, MOVE_RAIN_DANCE - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 127 - .2byte SPECIES_SWALOT - .byte BATTLE_TOWER_ITEM_CHERI_BERRY - .byte 0x8B @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_SNATCH, MOVE_ENCORE, MOVE_BODY_SLAM - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 128 - .2byte SPECIES_SKARMORY - .byte BATTLE_TOWER_ITEM_METAL_COAT - .byte 0x81 @ team flags - .2byte MOVE_STEEL_WING, MOVE_AGILITY, MOVE_TORMENT, MOVE_FACADE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 129 - .2byte SPECIES_DONPHAN - .byte BATTLE_TOWER_ITEM_WHITE_HERB - .byte 0x0D @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_FLAIL, MOVE_ROAR, MOVE_IRON_TAIL - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 130 - .2byte SPECIES_HERACROSS - .byte BATTLE_TOWER_ITEM_FOCUS_BAND - .byte 0x41 @ team flags - .2byte MOVE_FACADE, MOVE_REVERSAL, MOVE_MEGAHORN, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 131 - .2byte SPECIES_BANETTE - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x83 @ team flags - .2byte MOVE_SHADOW_BALL, MOVE_HYPER_BEAM, MOVE_THUNDERBOLT, MOVE_SKILL_SWAP - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 132 - .2byte SPECIES_SANDSLASH - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x0F @ team flags - .2byte MOVE_SANDSTORM, MOVE_TOXIC, MOVE_SLASH, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 133 - .2byte SPECIES_CRAWDAUNT - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x05 @ team flags - .2byte MOVE_GUILLOTINE, MOVE_CRABHAMMER, MOVE_BLIZZARD, MOVE_SLUDGE_BOMB - .byte 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 - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 134 - .2byte SPECIES_GRUMPIG - .byte BATTLE_TOWER_ITEM_TWISTED_SPOON - .byte 0x8B @ team flags - .2byte MOVE_MAGIC_COAT, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_CONFUSE_RAY - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_LONELY - .2byte 0 @ padding - -@ 135 - .2byte SPECIES_RHYDON - .byte BATTLE_TOWER_ITEM_CHOICE_BAND - .byte 0x45 @ team flags - .2byte MOVE_IRON_TAIL, MOVE_EARTHQUAKE, MOVE_SURF, MOVE_FIRE_BLAST - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_RASH - .2byte 0 @ padding - -@ 136 - .2byte SPECIES_ALAKAZAM - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x8B @ team flags - .2byte MOVE_PSYCHIC, MOVE_REFLECT, MOVE_RECOVER, MOVE_SKILL_SWAP - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 137 - .2byte SPECIES_DUSCLOPS - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x41 @ team flags - .2byte MOVE_SHADOW_BALL, MOVE_WILL_O_WISP, MOVE_BLIZZARD, MOVE_PSYCHIC - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 138 - .2byte SPECIES_TORKOAL - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x09 @ team flags - .2byte MOVE_FLAMETHROWER, MOVE_AMNESIA, MOVE_IRON_TAIL, MOVE_REST - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 139 - .2byte SPECIES_ELECTRODE - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x09 @ team flags - .2byte MOVE_SCREECH, MOVE_EXPLOSION, MOVE_MIRROR_COAT, MOVE_PROTECT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_RASH - .2byte 0 @ padding - -@ 140 - .2byte SPECIES_BRELOOM - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x0B @ team flags - .2byte MOVE_IRON_TAIL, MOVE_FOCUS_PUNCH, MOVE_DOUBLE_TEAM, MOVE_LEECH_SEED - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 141 - .2byte SPECIES_MUK - .byte BATTLE_TOWER_ITEM_POISON_BARB - .byte 0x05 @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_THUNDERBOLT, MOVE_FLAMETHROWER, MOVE_FOCUS_PUNCH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 142 - .2byte SPECIES_WEEZING - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x05 @ team flags - .2byte MOVE_EXPLOSION, MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_FLAMETHROWER - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 143 - .2byte SPECIES_RAICHU - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x4E @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_DOUBLE_TEAM, MOVE_FOCUS_PUNCH, MOVE_ATTRACT - .byte 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 - .byte NATURE_JOLLY - .2byte 0 @ padding - -@ 144 - .2byte SPECIES_TENTACRUEL - .byte BATTLE_TOWER_ITEM_MYSTIC_WATER - .byte 0x09 @ team flags - .2byte MOVE_DOUBLE_TEAM, MOVE_TOXIC, MOVE_SURF, MOVE_SLUDGE_BOMB - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_BOLD - .2byte 0 @ padding - -@ 145 - .2byte SPECIES_EXPLOUD - .byte BATTLE_TOWER_ITEM_CHOICE_BAND - .byte 0x05 @ team flags - .2byte MOVE_BLIZZARD, MOVE_FLAMETHROWER, MOVE_EARTHQUAKE, MOVE_RETURN - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 146 - .2byte SPECIES_XATU - .byte BATTLE_TOWER_ITEM_WHITE_HERB - .byte 0x43 @ team flags - .2byte MOVE_PSYCHIC, MOVE_REST, MOVE_CONFUSE_RAY, MOVE_TOXIC - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 147 - .2byte SPECIES_GOLEM - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x05 @ team flags - .2byte MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ROCK_TOMB, MOVE_FLAMETHROWER - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_IMPISH - .2byte 0 @ padding - -@ 148 - .2byte SPECIES_GOLDUCK - .byte BATTLE_TOWER_ITEM_PECHA_BERRY - .byte 0x83 @ team flags - .2byte MOVE_SURF, MOVE_ATTRACT, MOVE_CALM_MIND, MOVE_BLIZZARD - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 149 - .2byte SPECIES_NINETALES - .byte BATTLE_TOWER_ITEM_CHARCOAL - .byte 0x4A @ team flags - .2byte MOVE_FLAMETHROWER, MOVE_ATTRACT, MOVE_TOXIC, MOVE_CONFUSE_RAY - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 150 - .2byte SPECIES_KINGDRA - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x13 @ team flags - .2byte MOVE_DOUBLE_TEAM, MOVE_REST, MOVE_SURF, MOVE_DRAGON_BREATH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 151 - .2byte SPECIES_SLAKING - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x03 @ team flags - .2byte MOVE_CURSE, MOVE_AMNESIA, MOVE_YAWN, MOVE_FOCUS_PUNCH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_LAX - .2byte 0 @ padding - -@ 152 - .2byte SPECIES_GYARADOS - .byte BATTLE_TOWER_ITEM_CHERI_BERRY - .byte 0x03 @ team flags - .2byte MOVE_THUNDER, MOVE_EARTHQUAKE, MOVE_HYDRO_PUMP, MOVE_RAIN_DANCE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_NAUGHTY - .2byte 0 @ padding - -@ 153 - .2byte SPECIES_HARIYAMA - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x21 @ team flags - .2byte MOVE_BELLY_DRUM, MOVE_ENDURE, MOVE_EARTHQUAKE, MOVE_REVERSAL - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 154 - .2byte SPECIES_ABSOL - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0xC3 @ team flags - .2byte MOVE_FAINT_ATTACK, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_FLAMETHROWER - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 155 - .2byte SPECIES_ALTARIA - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x83 @ team flags - .2byte MOVE_DRAGON_DANCE, MOVE_MIRROR_MOVE, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_RASH - .2byte 0 @ padding - -@ 156 - .2byte SPECIES_MACHAMP - .byte BATTLE_TOWER_ITEM_BLACK_BELT - .byte 0x11 @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB, MOVE_ENCORE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 157 - .2byte SPECIES_FLYGON - .byte BATTLE_TOWER_ITEM_DRAGON_FANG - .byte 0x43 @ team flags - .2byte MOVE_CRUNCH, MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 158 - .2byte SPECIES_BLAZIKEN - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x33 @ team flags - .2byte MOVE_COUNTER, MOVE_ROCK_SLIDE, MOVE_FOCUS_PUNCH, MOVE_FLAMETHROWER - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 159 - .2byte SPECIES_GLALIE - .byte BATTLE_TOWER_ITEM_NEVER_MELT_ICE - .byte 0x81 @ team flags - .2byte MOVE_BLIZZARD, MOVE_CRUNCH, MOVE_ICY_WIND, MOVE_DOUBLE_TEAM - .byte 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 - .byte NATURE_JOLLY - .2byte 0 @ padding - -@ 160 - .2byte SPECIES_HUNTAIL - .byte BATTLE_TOWER_ITEM_MYSTIC_WATER - .byte 0xA1 @ team flags - .2byte MOVE_RAIN_DANCE, MOVE_HYDRO_PUMP, MOVE_CRUNCH, MOVE_BLIZZARD - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 161 - .2byte SPECIES_MILOTIC - .byte BATTLE_TOWER_ITEM_GANLON_BERRY - .byte 0xD3 @ team flags - .2byte MOVE_SURF, MOVE_ATTRACT, MOVE_RECOVER, MOVE_TOXIC - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 162 - .2byte SPECIES_GOREBYSS - .byte BATTLE_TOWER_ITEM_PECHA_BERRY - .byte 0x83 @ team flags - .2byte MOVE_PSYCHIC, MOVE_SURF, MOVE_BLIZZARD, MOVE_SHADOW_BALL - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 163 - .2byte SPECIES_SCEPTILE - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x53 @ team flags - .2byte MOVE_LEAF_BLADE, MOVE_ENDEAVOR, MOVE_EARTHQUAKE, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 164 - .2byte SPECIES_SWAMPERT - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x53 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_SURF, MOVE_MUD_SHOT, MOVE_BLIZZARD - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 165 - .2byte SPECIES_AGGRON - .byte BATTLE_TOWER_ITEM_MENTAL_HERB - .byte 0x41 @ team flags - .2byte MOVE_DOUBLE_EDGE, MOVE_FLAMETHROWER, MOVE_IRON_TAIL, MOVE_BLIZZARD - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_BOLD - .2byte 0 @ padding - -@ 166 - .2byte SPECIES_CRADILY - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0xE1 @ team flags - .2byte MOVE_STOCKPILE, MOVE_SPIT_UP, MOVE_SWALLOW, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 167 - .2byte SPECIES_ARMALDO - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0xC1 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_HYPER_BEAM, MOVE_SLASH, MOVE_SWORDS_DANCE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 168 - .2byte SPECIES_BRELOOM - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x82 @ team flags - .2byte MOVE_FOCUS_PUNCH, MOVE_COUNTER, MOVE_MACH_PUNCH, MOVE_SNATCH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 169 - .2byte SPECIES_LUDICOLO - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x83 @ team flags - .2byte MOVE_RAIN_DANCE, MOVE_SURF, MOVE_PROTECT, MOVE_TOXIC - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 170 - .2byte SPECIES_SHIFTRY - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x03 @ team flags - .2byte MOVE_TORMENT, MOVE_FAINT_ATTACK, MOVE_SHADOW_BALL, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 171 - .2byte SPECIES_TROPIUS - .byte BATTLE_TOWER_ITEM_APICOT_BERRY - .byte 0xC3 @ team flags - .2byte MOVE_SUNNY_DAY, MOVE_SYNTHESIS, MOVE_SOLAR_BEAM, MOVE_LEECH_SEED - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 172 - .2byte SPECIES_GRUMPIG - .byte BATTLE_TOWER_ITEM_MACHO_BRACE - .byte 0x23 @ team flags - .2byte MOVE_TRICK, MOVE_SKILL_SWAP, MOVE_PSYCHIC, MOVE_REST - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 173 - .2byte SPECIES_TORKOAL - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x81 @ team flags - .2byte MOVE_IRON_DEFENSE, MOVE_TOXIC, MOVE_REST, MOVE_FLAMETHROWER - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 174 - .2byte SPECIES_MANECTRIC - .byte BATTLE_TOWER_ITEM_NONE - .byte 0x03 @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_CRUNCH, MOVE_ROAR, MOVE_THIEF - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 175 - .2byte SPECIES_PINSIR - .byte BATTLE_TOWER_ITEM_LEPPA_BERRY - .byte 0x61 @ team flags - .2byte MOVE_GUILLOTINE, MOVE_EARTHQUAKE, MOVE_DOUBLE_TEAM, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 176 - .2byte SPECIES_STARMIE - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x93 @ team flags - .2byte MOVE_LIGHT_SCREEN, MOVE_THUNDERBOLT, MOVE_SURF, MOVE_REST - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 177 - .2byte SPECIES_HERACROSS - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x51 @ team flags - .2byte MOVE_MEGAHORN, MOVE_REVERSAL, MOVE_EARTHQUAKE, MOVE_COUNTER - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 178 - .2byte SPECIES_WALREIN - .byte BATTLE_TOWER_ITEM_NEVER_MELT_ICE - .byte 0x83 @ team flags - .2byte MOVE_BLIZZARD, MOVE_EARTHQUAKE, MOVE_SURF, MOVE_ROCK_SLIDE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 179 - .2byte SPECIES_ALAKAZAM - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x13 @ team flags - .2byte MOVE_PSYCHIC, MOVE_RECOVER, MOVE_ENCORE, MOVE_SNATCH - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 180 - .2byte SPECIES_MILOTIC - .byte BATTLE_TOWER_ITEM_APICOT_BERRY - .byte 0x93 @ team flags - .2byte MOVE_SURF, MOVE_BLIZZARD, MOVE_RECOVER, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 181 - .2byte SPECIES_REGICE - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x11 @ team flags - .2byte MOVE_REST, MOVE_CURSE, MOVE_BLIZZARD, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_MILD - .2byte 0 @ padding - -@ 182 - .2byte SPECIES_REGISTEEL - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x11 @ team flags - .2byte MOVE_REST, MOVE_IRON_DEFENSE, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_MILD - .2byte 0 @ padding - -@ 183 - .2byte SPECIES_REGIROCK - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x91 @ team flags - .2byte MOVE_ROCK_TOMB, MOVE_EARTHQUAKE, MOVE_THUNDERBOLT, MOVE_EXPLOSION - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 184 - .2byte SPECIES_DUSCLOPS - .byte BATTLE_TOWER_ITEM_SPELL_TAG - .byte 0x20 @ team flags - .2byte MOVE_SHADOW_BALL, MOVE_EARTHQUAKE, MOVE_BLIZZARD, MOVE_DESTINY_BOND - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_NAUGHTY - .2byte 0 @ padding - -@ 185 - .2byte SPECIES_SEAKING - .byte BATTLE_TOWER_ITEM_LEPPA_BERRY - .byte 0xB2 @ team flags - .2byte MOVE_HORN_DRILL, MOVE_AGILITY, MOVE_SLEEP_TALK, MOVE_REST - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 186 - .2byte SPECIES_CAMERUPT - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x00 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_ERUPTION, MOVE_ROCK_SLIDE, MOVE_FLAMETHROWER - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 187 - .2byte SPECIES_LANTURN - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x82 @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_SURF, MOVE_THUNDER_WAVE, MOVE_BLIZZARD - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 188 - .2byte SPECIES_WEEZING - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x20 @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_THUNDERBOLT, MOVE_FIRE_BLAST, MOVE_EXPLOSION - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 189 - .2byte SPECIES_WHISCASH - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x41 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_SURF, MOVE_ROCK_TOMB, MOVE_ATTRACT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 190 - .2byte SPECIES_AGGRON - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x11 @ team flags - .2byte MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_SURF, MOVE_DRAGON_CLAW - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 191 - .2byte SPECIES_CACTURNE - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x63 @ team flags - .2byte MOVE_DYNAMIC_PUNCH, MOVE_COUNTER, MOVE_FAINT_ATTACK, MOVE_GIGA_DRAIN - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 192 - .2byte SPECIES_SHARPEDO - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x01 @ team flags - .2byte MOVE_CRUNCH, MOVE_DOUBLE_EDGE, MOVE_SURF, MOVE_SWAGGER - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 193 - .2byte SPECIES_ABSOL - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x82 @ team flags - .2byte MOVE_DOUBLE_EDGE, MOVE_FACADE, MOVE_SWORDS_DANCE, MOVE_QUICK_ATTACK - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 194 - .2byte SPECIES_WAILORD - .byte BATTLE_TOWER_ITEM_LEPPA_BERRY - .byte 0x23 @ team flags - .2byte MOVE_HYDRO_PUMP, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_FISSURE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 195 - .2byte SPECIES_TENTACRUEL - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x21 @ team flags - .2byte MOVE_HYDRO_PUMP, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN, MOVE_MIRROR_COAT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_RASH - .2byte 0 @ padding - -@ 196 - .2byte SPECIES_LUDICOLO - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0xA2 @ team flags - .2byte MOVE_RAIN_DANCE, MOVE_SURF, MOVE_TOXIC, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 197 - .2byte SPECIES_WOBBUFFET - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x23 @ team flags - .2byte MOVE_ENCORE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 198 - .2byte SPECIES_RHYDON - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x21 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_MEGAHORN, MOVE_HORN_DRILL, MOVE_ROCK_SLIDE - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 199 - .2byte SPECIES_GLALIE - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x21 @ team flags - .2byte MOVE_CRUNCH, MOVE_BLIZZARD, MOVE_HAIL, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 200 - .2byte SPECIES_SCEPTILE - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x13 @ team flags - .2byte MOVE_LEAF_BLADE, MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_CRUNCH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 201 - .2byte SPECIES_BLAZIKEN - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x17 @ team flags - .2byte MOVE_BLAZE_KICK, MOVE_ROCK_TOMB, MOVE_ENDURE, MOVE_REVERSAL - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_RASH - .2byte 0 @ padding - -@ 202 - .2byte SPECIES_SWAMPERT - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x17 @ team flags - .2byte MOVE_SURF, MOVE_EARTHQUAKE, MOVE_MUD_SHOT, MOVE_BLIZZARD - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 203 - .2byte SPECIES_GARDEVOIR - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x19 @ team flags - .2byte MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_DESTINY_BOND, MOVE_WILL_O_WISP - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 204 - .2byte SPECIES_BRELOOM - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0xF6 @ team flags - .2byte MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_BRICK_BREAK, MOVE_SLUDGE_BOMB - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 205 - .2byte SPECIES_ALAKAZAM - .byte BATTLE_TOWER_ITEM_GANLON_BERRY - .byte 0x1B @ team flags - .2byte MOVE_PSYCHIC, MOVE_THUNDER_PUNCH, MOVE_REFLECT, MOVE_RECOVER - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 206 - .2byte SPECIES_SHIFTRY - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x89 @ team flags - .2byte MOVE_FAINT_ATTACK, MOVE_SHADOW_BALL, MOVE_DOUBLE_TEAM, MOVE_REST - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 207 - .2byte SPECIES_HARIYAMA - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x85 @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_FACADE, MOVE_FAKE_OUT - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 208 - .2byte SPECIES_CROBAT - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x49 @ team flags - .2byte MOVE_ATTRACT, MOVE_CONFUSE_RAY, MOVE_BITE, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 209 - .2byte SPECIES_MACHAMP - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x15 @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_FLAMETHROWER, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 210 - .2byte SPECIES_MANECTRIC - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x0B @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ROAR, MOVE_CRUNCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 211 - .2byte SPECIES_ELECTRODE - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x27 @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_MIRROR_COAT, MOVE_EXPLOSION - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 212 - .2byte SPECIES_MUK - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x05 @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_EXPLOSION - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 213 - .2byte SPECIES_FLYGON - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x4D @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_CRUNCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 214 - .2byte SPECIES_STARMIE - .byte BATTLE_TOWER_ITEM_APICOT_BERRY - .byte 0x1B @ team flags - .2byte MOVE_SURF, MOVE_THUNDERBOLT, MOVE_RECOVER, MOVE_CONFUSE_RAY - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 215 - .2byte SPECIES_DODRIO - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x2B @ team flags - .2byte MOVE_DRILL_PECK, MOVE_TRI_ATTACK, MOVE_AGILITY, MOVE_FACADE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 216 - .2byte SPECIES_RAICHU - .byte BATTLE_TOWER_ITEM_FOCUS_BAND - .byte 0x0A @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_REVERSAL, MOVE_ATTRACT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 217 - .2byte SPECIES_GOLDUCK - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x0A @ team flags - .2byte MOVE_SURF, MOVE_CROSS_CHOP, MOVE_ICE_BEAM, MOVE_HYPER_BEAM - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 218 - .2byte SPECIES_HERACROSS - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x54 @ team flags - .2byte MOVE_MEGAHORN, MOVE_ROCK_TOMB, MOVE_ENDURE, MOVE_REVERSAL - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 219 - .2byte SPECIES_WALREIN - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x06 @ team flags - .2byte MOVE_SURF, MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_REST - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 220 - .2byte SPECIES_KINGDRA - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x1D @ team flags - .2byte MOVE_SURF, MOVE_TOXIC, MOVE_PROTECT, MOVE_REST - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 221 - .2byte SPECIES_SALAMENCE - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x9C @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_REST - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 222 - .2byte SPECIES_METAGROSS - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x15 @ team flags - .2byte MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_LIGHT_SCREEN - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 223 - .2byte SPECIES_REGIROCK - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0xB5 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_FOCUS_PUNCH, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 224 - .2byte SPECIES_REGICE - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x96 @ team flags - .2byte MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_DOUBLE_TEAM, MOVE_REST - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 225 - .2byte SPECIES_REGISTEEL - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x94 @ team flags - .2byte MOVE_METAL_CLAW, MOVE_EARTHQUAKE, MOVE_THUNDERBOLT, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 226 - .2byte SPECIES_LATIAS - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x96 @ team flags - .2byte MOVE_MIST_BALL, MOVE_THUNDERBOLT, MOVE_REST, MOVE_DRAGON_CLAW - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_MILD - .2byte 0 @ padding - -@ 227 - .2byte SPECIES_LATIOS - .byte BATTLE_TOWER_ITEM_APICOT_BERRY - .byte 0x95 @ team flags - .2byte MOVE_LUSTER_PURGE, MOVE_REFLECT, MOVE_RECOVER, MOVE_DRAGON_CLAW - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 228 - .2byte SPECIES_MILOTIC - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x96 @ team flags - .2byte MOVE_SURF, MOVE_TOXIC, MOVE_RECOVER, MOVE_MIRROR_COAT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 229 - .2byte SPECIES_SLAKING - .byte BATTLE_TOWER_ITEM_CHOICE_BAND - .byte 0x05 @ team flags - .2byte MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_NONE, MOVE_NONE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 230 - .2byte SPECIES_SCEPTILE - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x1F @ team flags - .2byte MOVE_GIGA_DRAIN, MOVE_DOUBLE_TEAM, MOVE_LEECH_SEED, MOVE_ATTRACT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 231 - .2byte SPECIES_BLAZIKEN - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x17 @ team flags - .2byte MOVE_BLAZE_KICK, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_REST - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 232 - .2byte SPECIES_SWAMPERT - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x17 @ team flags - .2byte MOVE_MUDDY_WATER, MOVE_MUD_SHOT, MOVE_MIRROR_COAT, MOVE_ICE_BEAM - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 233 - .2byte SPECIES_GARDEVOIR - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x7B @ team flags - .2byte MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_DESTINY_BOND, MOVE_SNATCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 234 - .2byte SPECIES_BRELOOM - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x56 @ team flags - .2byte MOVE_SPORE, MOVE_COUNTER, MOVE_IRON_TAIL, MOVE_GIGA_DRAIN - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 235 - .2byte SPECIES_ALAKAZAM - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x0A @ team flags - .2byte MOVE_PSYCHIC, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_RECOVER - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 236 - .2byte SPECIES_HARIYAMA - .byte BATTLE_TOWER_ITEM_FOCUS_BAND - .byte 0x05 @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_ROCK_TOMB, MOVE_ENDURE, MOVE_REVERSAL - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 237 - .2byte SPECIES_GYARADOS - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x0C @ team flags - .2byte MOVE_HYPER_BEAM, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, MOVE_ICE_BEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_BOLD - .2byte 0 @ padding - -@ 238 - .2byte SPECIES_CROBAT - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x49 @ team flags - .2byte MOVE_TOXIC, MOVE_CONFUSE_RAY, MOVE_ATTRACT, MOVE_PROTECT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 239 - .2byte SPECIES_MACHAMP - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x15 @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_COUNTER, MOVE_EARTHQUAKE, MOVE_FACADE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 240 - .2byte SPECIES_MANECTRIC - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x63 @ team flags - .2byte MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_REST, MOVE_CRUNCH - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 241 - .2byte SPECIES_ELECTRODE - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x07 @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_SCREECH, MOVE_MIRROR_COAT, MOVE_EXPLOSION - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_MODEST - .2byte 0 @ padding - -@ 242 - .2byte SPECIES_MUK - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x45 @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN, MOVE_ROCK_TOMB, MOVE_EXPLOSION - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_RASH - .2byte 0 @ padding - -@ 243 - .2byte SPECIES_FLYGON - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x4D @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_IRON_TAIL, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_IMPISH - .2byte 0 @ padding - -@ 244 - .2byte SPECIES_STARMIE - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x1B @ team flags - .2byte MOVE_LIGHT_SCREEN, MOVE_THUNDERBOLT, MOVE_SURF, MOVE_REST - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 245 - .2byte SPECIES_NINETALES - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x0A @ team flags - .2byte MOVE_CONFUSE_RAY, MOVE_OVERHEAT, MOVE_FLAMETHROWER, MOVE_IRON_TAIL - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 246 - .2byte SPECIES_GOLEM - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x25 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_ROAR, MOVE_FIRE_BLAST, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 247 - .2byte SPECIES_GOLDUCK - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x27 @ team flags - .2byte MOVE_HYDRO_PUMP, MOVE_CROSS_CHOP, MOVE_BLIZZARD, MOVE_PSYCH_UP - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 248 - .2byte SPECIES_HERACROSS - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x55 @ team flags - .2byte MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_REVERSAL - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 249 - .2byte SPECIES_WALREIN - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x36 @ team flags - .2byte MOVE_SURF, MOVE_BLIZZARD, MOVE_ROCK_SLIDE, MOVE_SHEER_COLD - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 250 - .2byte SPECIES_KINGDRA - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x5C @ team flags - .2byte MOVE_HYDRO_PUMP, MOVE_PROTECT, MOVE_DRAGON_BREATH, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 251 - .2byte SPECIES_SALAMENCE - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x9D @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 252 - .2byte SPECIES_METAGROSS - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x15 @ team flags - .2byte MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_HYPER_BEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 253 - .2byte SPECIES_REGIROCK - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x95 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_ROCK_TOMB, MOVE_FACADE, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 254 - .2byte SPECIES_REGICE - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x96 @ team flags - .2byte MOVE_BLIZZARD, MOVE_THUNDERBOLT, MOVE_HAIL, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 255 - .2byte SPECIES_REGISTEEL - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x94 @ team flags - .2byte MOVE_METAL_CLAW, MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 256 - .2byte SPECIES_LATIAS - .byte BATTLE_TOWER_ITEM_APICOT_BERRY - .byte 0x96 @ team flags - .2byte MOVE_MIST_BALL, MOVE_REFLECT, MOVE_RECOVER, MOVE_DRAGON_CLAW - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 257 - .2byte SPECIES_LATIOS - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x95 @ team flags - .2byte MOVE_LUSTER_PURGE, MOVE_ICE_BEAM, MOVE_RECOVER, MOVE_DRAGON_CLAW - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 258 - .2byte SPECIES_MILOTIC - .byte BATTLE_TOWER_ITEM_APICOT_BERRY - .byte 0xD6 @ team flags - .2byte MOVE_SURF, MOVE_ICE_BEAM, MOVE_RECOVER, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 259 - .2byte SPECIES_KECLEON - .byte BATTLE_TOWER_ITEM_CHOICE_BAND - .byte 0x69 @ team flags - .2byte MOVE_TRICK, MOVE_REST, MOVE_IRON_TAIL, MOVE_DISABLE - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_QUIRKY - .2byte 0 @ padding - -@ 260 - .2byte SPECIES_SCEPTILE - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x5F @ team flags - .2byte MOVE_LEAF_BLADE, MOVE_EARTHQUAKE, MOVE_REST, MOVE_CRUNCH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 261 - .2byte SPECIES_BLAZIKEN - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x7F @ team flags - .2byte MOVE_FOCUS_PUNCH, MOVE_COUNTER, MOVE_SWAGGER, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 262 - .2byte SPECIES_SWAMPERT - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x57 @ team flags - .2byte MOVE_IRON_TAIL, MOVE_CURSE, MOVE_DOUBLE_TEAM, MOVE_REST - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 263 - .2byte SPECIES_GARDEVOIR - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x3B @ team flags - .2byte MOVE_SHADOW_BALL, MOVE_PSYCHIC, MOVE_REST, MOVE_IMPRISON - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 264 - .2byte SPECIES_BRELOOM - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x56 @ team flags - .2byte MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_SLUDGE_BOMB, MOVE_IRON_TAIL - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 265 - .2byte SPECIES_ALAKAZAM - .byte BATTLE_TOWER_ITEM_CHOICE_BAND - .byte 0x1A @ team flags - .2byte MOVE_PSYCHIC, MOVE_TRICK, MOVE_RECOVER, MOVE_SNATCH - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 266 - .2byte SPECIES_HARIYAMA - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x65 @ team flags - .2byte MOVE_REVENGE, MOVE_COUNTER, MOVE_FOCUS_PUNCH, MOVE_REVERSAL - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 267 - .2byte SPECIES_LUDICOLO - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x54 @ team flags - .2byte MOVE_RAIN_DANCE, MOVE_PROTECT, MOVE_TOXIC, MOVE_SURF - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 268 - .2byte SPECIES_CROBAT - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x4B @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_BITE, MOVE_AIR_CUTTER, MOVE_SHADOW_BALL - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 269 - .2byte SPECIES_MACHAMP - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x75 @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_DYNAMIC_PUNCH, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 270 - .2byte SPECIES_MANECTRIC - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x0A @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_CRUNCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 271 - .2byte SPECIES_ELECTRODE - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x64 @ team flags - .2byte MOVE_THUNDER, MOVE_DOUBLE_TEAM, MOVE_MIRROR_COAT, MOVE_EXPLOSION - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 272 - .2byte SPECIES_MUK - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x49 @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_SHADOW_PUNCH - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 273 - .2byte SPECIES_FLYGON - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0xCD @ team flags - .2byte MOVE_PROTECT, MOVE_DIG, MOVE_TOXIC, MOVE_SANDSTORM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 274 - .2byte SPECIES_STARMIE - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x5B @ team flags - .2byte MOVE_SURF, MOVE_THUNDERBOLT, MOVE_BLIZZARD, MOVE_PSYCHIC - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 275 - .2byte SPECIES_LUDICOLO - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x1A @ team flags - .2byte MOVE_RAIN_DANCE, MOVE_LEECH_SEED, MOVE_DIVE, MOVE_PROTECT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 276 - .2byte SPECIES_RAICHU - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x4A @ team flags - .2byte MOVE_THUNDER, MOVE_REVERSAL, MOVE_FACADE, MOVE_IRON_TAIL - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 277 - .2byte SPECIES_GOLDUCK - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x0A @ team flags - .2byte MOVE_SURF, MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_IRON_TAIL - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 278 - .2byte SPECIES_HERACROSS - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x15 @ team flags - .2byte MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_FACADE, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 279 - .2byte SPECIES_WALREIN - .byte BATTLE_TOWER_ITEM_LEPPA_BERRY - .byte 0x26 @ team flags - .2byte MOVE_SURF, MOVE_ICE_BEAM, MOVE_FISSURE, MOVE_SHEER_COLD - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 280 - .2byte SPECIES_KINGDRA - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x4D @ team flags - .2byte MOVE_HYDRO_PUMP, MOVE_BLIZZARD, MOVE_HYPER_BEAM, MOVE_DISABLE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 281 - .2byte SPECIES_SALAMENCE - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x9C @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_FIRE_BLAST, MOVE_HYDRO_PUMP - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_NAUGHTY - .2byte 0 @ padding - -@ 282 - .2byte SPECIES_METAGROSS - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0xB5 @ team flags - .2byte MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_PURSUIT, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 283 - .2byte SPECIES_REGIROCK - .byte BATTLE_TOWER_ITEM_APICOT_BERRY - .byte 0x95 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_TOXIC, MOVE_SUPERPOWER, MOVE_REST - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 284 - .2byte SPECIES_REGICE - .byte BATTLE_TOWER_ITEM_LAX_INCENSE - .byte 0x96 @ team flags - .2byte MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_ANCIENT_POWER, MOVE_EXPLOSION - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_RASH - .2byte 0 @ padding - -@ 285 - .2byte SPECIES_REGISTEEL - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0xB4 @ team flags - .2byte MOVE_CURSE, MOVE_AMNESIA, MOVE_RETURN, MOVE_REST - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 286 - .2byte SPECIES_LATIAS - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x92 @ team flags - .2byte MOVE_MIST_BALL, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, MOVE_ICE_BEAM - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 287 - .2byte SPECIES_LATIOS - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x91 @ team flags - .2byte MOVE_LUSTER_PURGE, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, MOVE_SURF - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 288 - .2byte SPECIES_MILOTIC - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0xB2 @ team flags - .2byte MOVE_SURF, MOVE_ICE_BEAM, MOVE_RECOVER, MOVE_ATTRACT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 289 - .2byte SPECIES_SLAKING - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x65 @ team flags - .2byte MOVE_YAWN, MOVE_SLASH, MOVE_COUNTER, MOVE_HYPER_BEAM - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 290 - .2byte SPECIES_SCEPTILE - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0xDF @ team flags - .2byte MOVE_LEAF_BLADE, MOVE_DETECT, MOVE_DRAGON_CLAW, MOVE_CRUNCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 291 - .2byte SPECIES_BLAZIKEN - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0xD7 @ team flags - .2byte MOVE_BLAZE_KICK, MOVE_SKY_UPPERCUT, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 292 - .2byte SPECIES_SWAMPERT - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x5F @ team flags - .2byte MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 293 - .2byte SPECIES_SHEDINJA - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0xDB @ team flags - .2byte MOVE_CONFUSE_RAY, MOVE_SHADOW_BALL, MOVE_TOXIC, MOVE_HYPER_BEAM - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 294 - .2byte SPECIES_METAGROSS - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x94 @ team flags - .2byte MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 295 - .2byte SPECIES_GRUMPIG - .byte BATTLE_TOWER_ITEM_MACHO_BRACE - .byte 0x4B @ team flags - .2byte MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_TRICK, MOVE_REFLECT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 296 - .2byte SPECIES_LATIAS - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x92 @ team flags - .2byte MOVE_MIST_BALL, MOVE_RECOVER, MOVE_ATTRACT, MOVE_DRAGON_CLAW - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 297 - .2byte SPECIES_LATIOS - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x91 @ team flags - .2byte MOVE_LUSTER_PURGE, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_DRAGON_CLAW - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 298 - .2byte SPECIES_STARMIE - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x1A @ team flags - .2byte MOVE_SURF, MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_ICE_BEAM - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 299 - .2byte SPECIES_MACHAMP - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x14 @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_COUNTER, MOVE_ROCK_TOMB, MOVE_FLAMETHROWER - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding diff --git a/include/battle_tower.h b/include/battle_tower.h index e70930faa..2f3be2763 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -1,6 +1,93 @@ #ifndef GUARD_BATTLE_TOWER_H #define GUARD_BATTLE_TOWER_H +enum +{ + F_EV_SPREAD_HP = 1 << 0, + F_EV_SPREAD_ATTACK = 1 << 1, + F_EV_SPREAD_DEFENSE = 1 << 2, + F_EV_SPREAD_SPEED = 1 << 3, + F_EV_SPREAD_SP_ATTACK = 1 << 4, + F_EV_SPREAD_SP_DEFENSE = 1 << 5, +}; + +enum +{ + BATTLE_TOWER_ITEM_NONE, + BATTLE_TOWER_ITEM_KINGS_ROCK, + BATTLE_TOWER_ITEM_SITRUS_BERRY, + BATTLE_TOWER_ITEM_ORAN_BERRY, + BATTLE_TOWER_ITEM_CHESTO_BERRY, + BATTLE_TOWER_ITEM_HARD_STONE, + BATTLE_TOWER_ITEM_FOCUS_BAND, + BATTLE_TOWER_ITEM_PERSIM_BERRY, + BATTLE_TOWER_ITEM_MIRACLE_SEED, + BATTLE_TOWER_ITEM_BERRY_JUICE, + BATTLE_TOWER_ITEM_MACHO_BRACE, + BATTLE_TOWER_ITEM_SILVER_POWDER, + BATTLE_TOWER_ITEM_CHERI_BERRY, + BATTLE_TOWER_ITEM_BLACK_GLASSES, + BATTLE_TOWER_ITEM_BLACK_BELT, + BATTLE_TOWER_ITEM_SOUL_DEW, + BATTLE_TOWER_ITEM_CHOICE_BAND, + BATTLE_TOWER_ITEM_MAGNET, + BATTLE_TOWER_ITEM_SILK_SCARF, + BATTLE_TOWER_ITEM_WHITE_HERB, + BATTLE_TOWER_ITEM_DEEP_SEA_SCALE, + BATTLE_TOWER_ITEM_DEEP_SEA_TOOTH, + BATTLE_TOWER_ITEM_MYSTIC_WATER, + BATTLE_TOWER_ITEM_SHARP_BEAK, + BATTLE_TOWER_ITEM_QUICK_CLAW, + BATTLE_TOWER_ITEM_LEFTOVERS, + BATTLE_TOWER_ITEM_RAWST_BERRY, + BATTLE_TOWER_ITEM_LIGHT_BALL, + BATTLE_TOWER_ITEM_POISON_BARB, + BATTLE_TOWER_ITEM_NEVER_MELT_ICE, + BATTLE_TOWER_ITEM_ASPEAR_BERRY, + BATTLE_TOWER_ITEM_SPELL_TAG, + BATTLE_TOWER_ITEM_BRIGHT_POWDER, + BATTLE_TOWER_ITEM_LEPPA_BERRY, + BATTLE_TOWER_ITEM_SCOPE_LENS, + BATTLE_TOWER_ITEM_TWISTED_SPOON, + BATTLE_TOWER_ITEM_METAL_COAT, + BATTLE_TOWER_ITEM_MENTAL_HERB, + BATTLE_TOWER_ITEM_CHARCOAL, + BATTLE_TOWER_ITEM_PECHA_BERRY, + BATTLE_TOWER_ITEM_SOFT_SAND, + BATTLE_TOWER_ITEM_LUM_BERRY, + BATTLE_TOWER_ITEM_DRAGON_SCALE, + BATTLE_TOWER_ITEM_DRAGON_FANG, + BATTLE_TOWER_ITEM_IAPAPA_BERRY, + BATTLE_TOWER_ITEM_WIKI_BERRY, + BATTLE_TOWER_ITEM_SEA_INCENSE, + BATTLE_TOWER_ITEM_SHELL_BELL, + BATTLE_TOWER_ITEM_SALAC_BERRY, + BATTLE_TOWER_ITEM_LANSAT_BERRY, + BATTLE_TOWER_ITEM_APICOT_BERRY, + BATTLE_TOWER_ITEM_STARF_BERRY, + BATTLE_TOWER_ITEM_LIECHI_BERRY, + BATTLE_TOWER_ITEM_STICK, + BATTLE_TOWER_ITEM_LAX_INCENSE, + BATTLE_TOWER_ITEM_AGUAV_BERRY, + BATTLE_TOWER_ITEM_FIGY_BERRY, + BATTLE_TOWER_ITEM_THICK_CLUB, + BATTLE_TOWER_ITEM_MAGO_BERRY, + BATTLE_TOWER_ITEM_METAL_POWDER, + BATTLE_TOWER_ITEM_PETAYA_BERRY, + BATTLE_TOWER_ITEM_LUCKY_PUNCH, + BATTLE_TOWER_ITEM_GANLON_BERRY, +}; + +struct BattleTowerPokemon +{ + /*0x00*/u16 species; + /*0x02*/u8 item; + /*0x03*/u8 teamFlags; + /*0x04*/u16 moves[4]; + /*0x0C*/u8 evSpread; + /*0x0D*/u8 nature; +}; + void sub_813461C(u8 levelType); void sub_8134AC0(struct BattleTowerRecord *); u16 sub_8135D3C(u8); 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/ --- constants/constants.inc | 1 - data/battle_tower.s | 3 - data/battle_tower/level_100_mons.inc | 2701 ---------------------- src/battle_tower.c | 1 + src/data/battle_tower/level_100_mons.h | 3903 ++++++++++++++++++++++++++++++++ src/data/battle_tower/level_50_mons.h | 310 +-- 6 files changed, 4059 insertions(+), 2860 deletions(-) delete mode 100644 data/battle_tower/level_100_mons.inc create mode 100644 src/data/battle_tower/level_100_mons.h diff --git a/constants/constants.inc b/constants/constants.inc index 81d3b72fe..bc55f6723 100644 --- a/constants/constants.inc +++ b/constants/constants.inc @@ -14,7 +14,6 @@ .include "constants/map_constants.inc" .include "constants/berry_constants.inc" .include "constants/map_object_constants.inc" - .include "constants/battle_tower_constants.inc" .include "constants/opponent_constants.inc" .include "constants/decorations.inc" .include "constants/songs.inc" diff --git a/data/battle_tower.s b/data/battle_tower.s index 79a7e4f2d..b8ada3c36 100644 --- a/data/battle_tower.s +++ b/data/battle_tower.s @@ -3,9 +3,6 @@ .section .rodata -@ 8404BA0 - .include "data/battle_tower/level_100_mons.inc" - gUnknown_08405E60:: @ 8405E60 .byte 4 .byte 7 diff --git a/data/battle_tower/level_100_mons.inc b/data/battle_tower/level_100_mons.inc deleted file mode 100644 index 9e678153e..000000000 --- a/data/battle_tower/level_100_mons.inc +++ /dev/null @@ -1,2701 +0,0 @@ - .align 2 -gBattleTowerLevel100Mons:: @ 8404BA0 -@ 0 - .2byte SPECIES_LINOONE - .byte BATTLE_TOWER_ITEM_RAWST_BERRY - .byte 0x42 @ team flags - .2byte MOVE_SLASH, MOVE_GROWL, MOVE_TAIL_WHIP, MOVE_SAND_ATTACK - .byte F_EV_SPREAD_SPEED - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 1 - .2byte SPECIES_MIGHTYENA - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x41 @ team flags - .2byte MOVE_BITE, MOVE_HOWL, MOVE_ODOR_SLEUTH, MOVE_SCARY_FACE - .byte F_EV_SPREAD_ATTACK - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 2 - .2byte SPECIES_BEAUTIFLY - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x41 @ team flags - .2byte MOVE_GIGA_DRAIN, MOVE_GUST, MOVE_STUN_SPORE, MOVE_PROTECT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 3 - .2byte SPECIES_DUSTOX - .byte BATTLE_TOWER_ITEM_PECHA_BERRY - .byte 0x41 @ team flags - .2byte MOVE_PSYBEAM, MOVE_GUST, MOVE_DOUBLE_TEAM, MOVE_SILVER_WIND - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 4 - .2byte SPECIES_LOMBRE - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x03 @ team flags - .2byte MOVE_ASTONISH, MOVE_GROWL, MOVE_MEGA_DRAIN, MOVE_SURF - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_LONELY - .2byte 0 @ padding - -@ 5 - .2byte SPECIES_NUZLEAF - .byte BATTLE_TOWER_ITEM_WHITE_HERB - .byte 0x01 @ team flags - .2byte MOVE_BULLET_SEED, MOVE_RAZOR_WIND, MOVE_FAINT_ATTACK, MOVE_GROWTH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 6 - .2byte SPECIES_SWELLOW - .byte BATTLE_TOWER_ITEM_SHARP_BEAK - .byte 0x42 @ team flags - .2byte MOVE_AERIAL_ACE, MOVE_GROWL, MOVE_ENDEAVOR, MOVE_FOCUS_ENERGY - .byte F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 7 - .2byte SPECIES_PELIPPER - .byte BATTLE_TOWER_ITEM_MYSTIC_WATER - .byte 0x02 @ team flags - .2byte MOVE_SURF, MOVE_WATER_SPORT, MOVE_PROTECT, MOVE_SUPERSONIC - .byte F_EV_SPREAD_SP_ATTACK - .byte NATURE_MILD - .2byte 0 @ padding - -@ 8 - .2byte SPECIES_BRELOOM - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x42 @ team flags - .2byte MOVE_MACH_PUNCH, MOVE_MEGA_DRAIN, MOVE_HEADBUTT, MOVE_STUN_SPORE - .byte F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 9 - .2byte SPECIES_NINJASK - .byte BATTLE_TOWER_ITEM_RAWST_BERRY - .byte 0x41 @ team flags - .2byte MOVE_SCRATCH, MOVE_SCREECH, MOVE_LEECH_LIFE, MOVE_FLASH - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 10 - .2byte SPECIES_CROBAT - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x01 @ team flags - .2byte MOVE_BITE, MOVE_FLY, MOVE_SUPERSONIC, MOVE_HAZE - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_IMPISH - .2byte 0 @ padding - -@ 11 - .2byte SPECIES_MAWILE - .byte BATTLE_TOWER_ITEM_METAL_COAT - .byte 0x03 @ team flags - .2byte MOVE_VICE_GRIP, MOVE_SWEET_SCENT, MOVE_ASTONISH, MOVE_STRENGTH - .byte F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 12 - .2byte SPECIES_NOSEPASS - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x01 @ team flags - .2byte MOVE_ROCK_THROW, MOVE_SANDSTORM, MOVE_HARDEN, MOVE_PROTECT - .byte F_EV_SPREAD_ATTACK - .byte NATURE_IMPISH - .2byte 0 @ padding - -@ 13 - .2byte SPECIES_DELCATTY - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x42 @ team flags - .2byte MOVE_DOUBLE_SLAP, MOVE_TAIL_WHIP, MOVE_ATTRACT, MOVE_CHARM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_BOLD - .2byte 0 @ padding - -@ 14 - .2byte SPECIES_CAMERUPT - .byte BATTLE_TOWER_ITEM_CHARCOAL - .byte 0x01 @ team flags - .2byte MOVE_EMBER, MOVE_TAKE_DOWN, MOVE_GROWL, MOVE_SANDSTORM - .byte F_EV_SPREAD_SP_DEFENSE - .byte NATURE_RASH - .2byte 0 @ padding - -@ 15 - .2byte SPECIES_MUK - .byte BATTLE_TOWER_ITEM_ORAN_BERRY - .byte 0x01 @ team flags - .2byte MOVE_POISON_GAS, MOVE_MINIMIZE, MOVE_SLUDGE, MOVE_SCREECH - .byte F_EV_SPREAD_HP - .byte NATURE_CALM - .2byte 0 @ padding - -@ 16 - .2byte SPECIES_SANDSLASH - .byte BATTLE_TOWER_ITEM_SOFT_SAND - .byte 0x03 @ team flags - .2byte MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_DEFENSE_CURL, MOVE_SWIFT - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 17 - .2byte SPECIES_SPINDA - .byte BATTLE_TOWER_ITEM_SILK_SCARF - .byte 0x42 @ team flags - .2byte MOVE_UPROAR, MOVE_WATER_PULSE, MOVE_THRASH, MOVE_SAFEGUARD - .byte F_EV_SPREAD_SPEED - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 18 - .2byte SPECIES_WHISCASH - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x01 @ team flags - .2byte MOVE_TICKLE, MOVE_MUD_SPORT, MOVE_WATER_GUN, MOVE_WATER_SPORT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 19 - .2byte SPECIES_CACTURNE - .byte BATTLE_TOWER_ITEM_POISON_BARB - .byte 0x01 @ team flags - .2byte MOVE_POISON_STING, MOVE_PIN_MISSILE, MOVE_ABSORB, MOVE_COTTON_SPORE - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 20 - .2byte SPECIES_JIGGLYPUFF - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x42 @ team flags - .2byte MOVE_SING, MOVE_ROLLOUT, MOVE_POUND, MOVE_LIGHT_SCREEN - .byte F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 21 - .2byte SPECIES_MARILL - .byte BATTLE_TOWER_ITEM_MYSTIC_WATER - .byte 0x42 @ team flags - .2byte MOVE_BUBBLE_BEAM, MOVE_DEFENSE_CURL, MOVE_RAIN_DANCE, MOVE_IRON_TAIL - .byte F_EV_SPREAD_SP_DEFENSE - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 22 - .2byte SPECIES_MAGNETON - .byte BATTLE_TOWER_ITEM_RAWST_BERRY - .byte 0x01 @ team flags - .2byte MOVE_THUNDER_SHOCK, MOVE_SUPERSONIC, MOVE_FLASH, MOVE_SCREECH - .byte F_EV_SPREAD_SPEED - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 23 - .2byte SPECIES_CARVANHA - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x01 @ team flags - .2byte MOVE_BITE, MOVE_RAGE, MOVE_SCARY_FACE, MOVE_LEER - .byte F_EV_SPREAD_ATTACK - .byte NATURE_QUIRKY - .2byte 0 @ padding - -@ 24 - .2byte SPECIES_KECLEON - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x03 @ team flags - .2byte MOVE_THIEF, MOVE_LICK, MOVE_BIND, MOVE_FURY_SWIPES - .byte F_EV_SPREAD_DEFENSE - .byte NATURE_JOLLY - .2byte 0 @ padding - -@ 25 - .2byte SPECIES_NINETALES - .byte BATTLE_TOWER_ITEM_CHARCOAL - .byte 0x02 @ team flags - .2byte MOVE_EMBER, MOVE_CONFUSE_RAY, MOVE_FIRE_SPIN, MOVE_SAFEGUARD - .byte F_EV_SPREAD_SP_ATTACK - .byte NATURE_LONELY - .2byte 0 @ padding - -@ 26 - .2byte SPECIES_RAICHU - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x42 @ team flags - .2byte MOVE_SHOCK_WAVE, MOVE_GROWL, MOVE_DOUBLE_TEAM, MOVE_LIGHT_SCREEN - .byte F_EV_SPREAD_DEFENSE - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 27 - .2byte SPECIES_SEALEO - .byte BATTLE_TOWER_ITEM_NEVER_MELT_ICE - .byte 0x01 @ team flags - .2byte MOVE_ICE_BALL, MOVE_WATER_GUN, MOVE_ENCORE, MOVE_HAIL - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_LAX - .2byte 0 @ padding - -@ 28 - .2byte SPECIES_GRAVELER - .byte BATTLE_TOWER_ITEM_HARD_STONE - .byte 0x01 @ team flags - .2byte MOVE_ROCK_THROW, MOVE_MUD_SPORT, MOVE_SANDSTORM, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 29 - .2byte SPECIES_SHUPPET - .byte BATTLE_TOWER_ITEM_SPELL_TAG - .byte 0x03 @ team flags - .2byte MOVE_NIGHT_SHADE, MOVE_WILL_O_WISP, MOVE_SCREECH, MOVE_KNOCK_OFF - .byte F_EV_SPREAD_SP_ATTACK - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 30 - .2byte SPECIES_LUVDISC - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x0A @ team flags - .2byte MOVE_ATTRACT, MOVE_FLAIL, MOVE_SWEET_KISS, MOVE_WATER_PULSE - .byte F_EV_SPREAD_SP_ATTACK - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 31 - .2byte SPECIES_LANTURN - .byte BATTLE_TOWER_ITEM_CHERI_BERRY - .byte 0x0A @ team flags - .2byte MOVE_THUNDER_WAVE, MOVE_SUPERSONIC, MOVE_WATER_GUN, MOVE_SPARK - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_BOLD - .2byte 0 @ padding - -@ 32 - .2byte SPECIES_CORSOLA - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x0A @ team flags - .2byte MOVE_MIRROR_COAT, MOVE_BUBBLE, MOVE_HARDEN, MOVE_LIGHT_SCREEN - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 33 - .2byte SPECIES_WAILMER - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x05 @ team flags - .2byte MOVE_SURF, MOVE_ROAR, MOVE_GROWL, MOVE_MIST - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 34 - .2byte SPECIES_RHYDON - .byte BATTLE_TOWER_ITEM_FOCUS_BAND - .byte 0x05 @ team flags - .2byte MOVE_TAKE_DOWN, MOVE_SCARY_FACE, MOVE_TAIL_WHIP, MOVE_ROAR - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 35 - .2byte SPECIES_DODRIO - .byte BATTLE_TOWER_ITEM_SHARP_BEAK - .byte 0x05 @ team flags - .2byte MOVE_FURY_ATTACK, MOVE_PURSUIT, MOVE_AERIAL_ACE, MOVE_AGILITY - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 36 - .2byte SPECIES_GOLDUCK - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x05 @ team flags - .2byte MOVE_FURY_SWIPES, MOVE_TAIL_WHIP, MOVE_DISABLE, MOVE_PSYCH_UP - .byte F_EV_SPREAD_ATTACK - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 37 - .2byte SPECIES_BELLOSSOM - .byte BATTLE_TOWER_ITEM_MIRACLE_SEED - .byte 0x0A @ team flags - .2byte MOVE_GIGA_DRAIN, MOVE_POISON_POWDER, MOVE_STUN_SPORE, MOVE_ACID - .byte F_EV_SPREAD_SP_ATTACK - .byte NATURE_BOLD - .2byte 0 @ padding - -@ 38 - .2byte SPECIES_TROPIUS - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x05 @ team flags - .2byte MOVE_STOMP, MOVE_RAZOR_LEAF, MOVE_GUST, MOVE_SYNTHESIS - .byte F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 39 - .2byte SPECIES_SABLEYE - .byte BATTLE_TOWER_ITEM_SPELL_TAG - .byte 0x0A @ team flags - .2byte MOVE_NIGHT_SHADE, MOVE_FAKE_OUT, MOVE_PSYCH_UP, MOVE_DETECT - .byte F_EV_SPREAD_SPEED - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 40 - .2byte SPECIES_ELECTRODE - .byte BATTLE_TOWER_ITEM_FOCUS_BAND - .byte 0x03 @ team flags - .2byte MOVE_SONIC_BOOM, MOVE_SCREECH, MOVE_SPARK, MOVE_SELF_DESTRUCT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE - .byte NATURE_QUIRKY - .2byte 0 @ padding - -@ 41 - .2byte SPECIES_TENTACRUEL - .byte BATTLE_TOWER_ITEM_POISON_BARB - .byte 0x01 @ team flags - .2byte MOVE_ACID, MOVE_WATER_PULSE, MOVE_BARRIER, MOVE_WRAP - .byte F_EV_SPREAD_SPEED - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 42 - .2byte SPECIES_CLAYDOL - .byte BATTLE_TOWER_ITEM_SOFT_SAND - .byte 0x05 @ team flags - .2byte MOVE_ANCIENT_POWER, MOVE_MUD_SLAP, MOVE_RAPID_SPIN, MOVE_CONFUSION - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 43 - .2byte SPECIES_GRUMPIG - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x0A @ team flags - .2byte MOVE_PSYBEAM, MOVE_PSYCH_UP, MOVE_BOUNCE, MOVE_MAGIC_COAT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE - .byte NATURE_NAUGHTY - .2byte 0 @ padding - -@ 44 - .2byte SPECIES_CRAWDAUNT - .byte BATTLE_TOWER_ITEM_MENTAL_HERB - .byte 0x05 @ team flags - .2byte MOVE_CRABHAMMER, MOVE_BUBBLE_BEAM, MOVE_BRICK_BREAK, MOVE_PROTECT - .byte F_EV_SPREAD_ATTACK - .byte NATURE_CALM - .2byte 0 @ padding - -@ 45 - .2byte SPECIES_SEVIPER - .byte BATTLE_TOWER_ITEM_POISON_BARB - .byte 0x01 @ team flags - .2byte MOVE_POISON_TAIL, MOVE_GLARE, MOVE_WRAP, MOVE_THIEF - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 46 - .2byte SPECIES_ZANGOOSE - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x05 @ team flags - .2byte MOVE_FURY_CUTTER, MOVE_LEER, MOVE_QUICK_ATTACK, MOVE_DETECT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 47 - .2byte SPECIES_ALTARIA - .byte BATTLE_TOWER_ITEM_DRAGON_FANG - .byte 0x03 @ team flags - .2byte MOVE_DRAGON_BREATH, MOVE_SING, MOVE_SAFEGUARD, MOVE_TAKE_DOWN - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 48 - .2byte SPECIES_ROSELIA - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x0A @ team flags - .2byte MOVE_LEECH_SEED, MOVE_MEGA_DRAIN, MOVE_GROWTH, MOVE_STUN_SPORE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_NAUGHTY - .2byte 0 @ padding - -@ 49 - .2byte SPECIES_VOLBEAT - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x09 @ team flags - .2byte MOVE_SIGNAL_BEAM, MOVE_CONFUSE_RAY, MOVE_DOUBLE_TEAM, MOVE_LIGHT_SCREEN - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 50 - .2byte SPECIES_ILLUMISE - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x09 @ team flags - .2byte MOVE_CHARM, MOVE_ENCORE, MOVE_SOLAR_BEAM, MOVE_ATTRACT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 51 - .2byte SPECIES_MANECTRIC - .byte BATTLE_TOWER_ITEM_MAGNET - .byte 0x03 @ team flags - .2byte MOVE_BITE, MOVE_HOWL, MOVE_THUNDER_WAVE, MOVE_SPARK - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 52 - .2byte SPECIES_MAWILE - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x0A @ team flags - .2byte MOVE_CRUNCH, MOVE_IRON_DEFENSE, MOVE_TORMENT, MOVE_SANDSTORM - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_RASH - .2byte 0 @ padding - -@ 53 - .2byte SPECIES_HARIYAMA - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x05 @ team flags - .2byte MOVE_ARM_THRUST, MOVE_FAKE_OUT, MOVE_WHIRLWIND, MOVE_REVERSAL - .byte F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 54 - .2byte SPECIES_SKARMORY - .byte BATTLE_TOWER_ITEM_METAL_COAT - .byte 0x01 @ team flags - .2byte MOVE_STEEL_WING, MOVE_AGILITY, MOVE_TAUNT, MOVE_FLY - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 55 - .2byte SPECIES_TORKOAL - .byte BATTLE_TOWER_ITEM_PECHA_BERRY - .byte 0x03 @ team flags - .2byte MOVE_FIRE_SPIN, MOVE_SMOKESCREEN, MOVE_BODY_SLAM, MOVE_AMNESIA - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_MILD - .2byte 0 @ padding - -@ 56 - .2byte SPECIES_GYARADOS - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x05 @ team flags - .2byte MOVE_THRASH, MOVE_DRAGON_RAGE, MOVE_TWISTER, MOVE_HYDRO_PUMP - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_QUIRKY - .2byte 0 @ padding - -@ 57 - .2byte SPECIES_MIGHTYENA - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x05 @ team flags - .2byte MOVE_CRUNCH, MOVE_HOWL, MOVE_IRON_TAIL, MOVE_TORMENT - .byte F_EV_SPREAD_SP_ATTACK - .byte NATURE_QUIRKY - .2byte 0 @ padding - -@ 58 - .2byte SPECIES_LINOONE - .byte BATTLE_TOWER_ITEM_CHERI_BERRY - .byte 0x06 @ team flags - .2byte MOVE_SLASH, MOVE_ATTRACT, MOVE_SHOCK_WAVE, MOVE_TOXIC - .byte F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 59 - .2byte SPECIES_MASQUERAIN - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x0A @ team flags - .2byte MOVE_TOXIC, MOVE_STUN_SPORE, MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_LAX - .2byte 0 @ padding - -@ 60 - .2byte SPECIES_SCEPTILE - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x06 @ team flags - .2byte MOVE_BULLET_SEED, MOVE_SLAM, MOVE_SCREECH, MOVE_DETECT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 61 - .2byte SPECIES_BLAZIKEN - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x06 @ team flags - .2byte MOVE_DOUBLE_KICK, MOVE_FLAMETHROWER, MOVE_DOUBLE_TEAM, MOVE_ROAR - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 62 - .2byte SPECIES_SWAMPERT - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x49 @ team flags - .2byte MOVE_SURF, MOVE_MUD_SHOT, MOVE_MUD_SPORT, MOVE_RAIN_DANCE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 63 - .2byte SPECIES_SALAMENCE - .byte BATTLE_TOWER_ITEM_DRAGON_FANG - .byte 0x49 @ team flags - .2byte MOVE_DRAGON_BREATH, MOVE_FLY, MOVE_TOXIC, MOVE_FACADE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_CALM - .2byte 0 @ padding - -@ 64 - .2byte SPECIES_KINGDRA - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x49 @ team flags - .2byte MOVE_SURF, MOVE_ICE_BEAM, MOVE_SMOKESCREEN, MOVE_RAIN_DANCE - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 65 - .2byte SPECIES_CORSOLA - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x03 @ team flags - .2byte MOVE_ANCIENT_POWER, MOVE_MIRROR_COAT, MOVE_SAFEGUARD, MOVE_REFLECT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_BOLD - .2byte 0 @ padding - -@ 66 - .2byte SPECIES_RHYDON - .byte BATTLE_TOWER_ITEM_FOCUS_BAND - .byte 0x41 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_IRON_TAIL, MOVE_ROAR, MOVE_THUNDERBOLT - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 67 - .2byte SPECIES_HERACROSS - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x06 @ team flags - .2byte MOVE_MEGAHORN, MOVE_COUNTER, MOVE_PROTECT, MOVE_LEER - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 68 - .2byte SPECIES_GIRAFARIG - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x09 @ team flags - .2byte MOVE_PSYCHIC, MOVE_CRUNCH, MOVE_BATON_PASS, MOVE_AGILITY - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 69 - .2byte SPECIES_XATU - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x09 @ team flags - .2byte MOVE_PSYCHIC, MOVE_FLY, MOVE_CONFUSE_RAY, MOVE_TOXIC - .byte F_EV_SPREAD_SPEED - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 70 - .2byte SPECIES_DODRIO - .byte BATTLE_TOWER_ITEM_SHARP_BEAK - .byte 0x03 @ team flags - .2byte MOVE_DRILL_PECK, MOVE_TRI_ATTACK, MOVE_PURSUIT, MOVE_TORMENT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_SERIOUS - .2byte 0 @ padding - -@ 71 - .2byte SPECIES_VILEPLUME - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x89 @ team flags - .2byte MOVE_POISON_POWDER, MOVE_STUN_SPORE, MOVE_SLEEP_POWDER, MOVE_PETAL_DANCE - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_MODEST - .2byte 0 @ padding - -@ 72 - .2byte SPECIES_MEDICHAM - .byte BATTLE_TOWER_ITEM_TWISTED_SPOON - .byte 0x06 @ team flags - .2byte MOVE_FOCUS_PUNCH, MOVE_LIGHT_SCREEN, MOVE_BULK_UP, MOVE_PSYCHIC - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_JOLLY - .2byte 0 @ padding - -@ 73 - .2byte SPECIES_ABSOL - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x06 @ team flags - .2byte MOVE_SLASH, MOVE_SWORDS_DANCE, MOVE_DOUBLE_TEAM, MOVE_ATTRACT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 74 - .2byte SPECIES_DUSCLOPS - .byte BATTLE_TOWER_ITEM_SPELL_TAG - .byte 0x4B @ team flags - .2byte MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP, MOVE_NIGHT_SHADE, MOVE_DISABLE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_LAX - .2byte 0 @ padding - -@ 75 - .2byte SPECIES_SHUPPET - .byte BATTLE_TOWER_ITEM_SPELL_TAG - .byte 0x43 @ team flags - .2byte MOVE_GRUDGE, MOVE_SHADOW_BALL, MOVE_CURSE, MOVE_KNOCK_OFF - .byte F_EV_SPREAD_SP_ATTACK - .byte NATURE_IMPISH - .2byte 0 @ padding - -@ 76 - .2byte SPECIES_CASTFORM - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x82 @ team flags - .2byte MOVE_WEATHER_BALL, MOVE_HAIL, MOVE_SUNNY_DAY, MOVE_RAIN_DANCE - .byte F_EV_SPREAD_SPEED - .byte NATURE_MODEST - .2byte 0 @ padding - -@ 77 - .2byte SPECIES_MILOTIC - .byte BATTLE_TOWER_ITEM_DRAGON_FANG - .byte 0x02 @ team flags - .2byte MOVE_SURF, MOVE_REFRESH, MOVE_RECOVER, MOVE_RAIN_DANCE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 78 - .2byte SPECIES_SHARPEDO - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x01 @ team flags - .2byte MOVE_CRUNCH, MOVE_FOCUS_ENERGY, MOVE_SCARY_FACE, MOVE_SCREECH - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_LAX - .2byte 0 @ padding - -@ 79 - .2byte SPECIES_FLYGON - .byte BATTLE_TOWER_ITEM_CHERI_BERRY - .byte 0x06 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_SAND_ATTACK, MOVE_DRAGON_BREATH, MOVE_SAND_TOMB - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_NAUGHTY - .2byte 0 @ padding - -@ 80 - .2byte SPECIES_TRAPINCH - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x09 @ team flags - .2byte MOVE_TOXIC, MOVE_SAND_TOMB, MOVE_CRUNCH, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_ATTACK - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 81 - .2byte SPECIES_LUNATONE - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x43 @ team flags - .2byte MOVE_PSYCHIC, MOVE_ROCK_THROW, MOVE_HYPNOSIS, MOVE_LIGHT_SCREEN - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 82 - .2byte SPECIES_SOLROCK - .byte BATTLE_TOWER_ITEM_PECHA_BERRY - .byte 0x43 @ team flags - .2byte MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_COSMIC_POWER, MOVE_CALM_MIND - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 83 - .2byte SPECIES_BALTOY - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x43 @ team flags - .2byte MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_REFLECT, MOVE_SELF_DESTRUCT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 84 - .2byte SPECIES_CRAWDAUNT - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x06 @ team flags - .2byte MOVE_CRABHAMMER, MOVE_SURF, MOVE_PROTECT, MOVE_BRICK_BREAK - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_RASH - .2byte 0 @ padding - -@ 85 - .2byte SPECIES_WHISCASH - .byte BATTLE_TOWER_ITEM_ASPEAR_BERRY - .byte 0x06 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_TICKLE, MOVE_AMNESIA, MOVE_SURF - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 86 - .2byte SPECIES_SEVIPER - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x09 @ team flags - .2byte MOVE_POISON_TAIL, MOVE_CRUNCH, MOVE_GIGA_DRAIN, MOVE_HAZE - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 87 - .2byte SPECIES_MAGCARGO - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x89 @ team flags - .2byte MOVE_FLAMETHROWER, MOVE_LIGHT_SCREEN, MOVE_AMNESIA, MOVE_ROCK_SLIDE - .byte F_EV_SPREAD_ATTACK - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 88 - .2byte SPECIES_MACHAMP - .byte BATTLE_TOWER_ITEM_BLACK_BELT - .byte 0x09 @ team flags - .2byte MOVE_KARATE_CHOP, MOVE_SEISMIC_TOSS, MOVE_BRICK_BREAK, MOVE_LOW_KICK - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 89 - .2byte SPECIES_SWALOT - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x86 @ team flags - .2byte MOVE_YAWN, MOVE_WATER_PULSE, MOVE_SHADOW_BALL, MOVE_SLUDGE_BOMB - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAUGHTY - .2byte 0 @ padding - -@ 90 - .2byte SPECIES_SCEPTILE - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x0C @ team flags - .2byte MOVE_LEAF_BLADE, MOVE_GIGA_DRAIN, MOVE_FURY_CUTTER, MOVE_DETECT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 91 - .2byte SPECIES_BLAZIKEN - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x0C @ team flags - .2byte MOVE_BLAZE_KICK, MOVE_FLAMETHROWER, MOVE_PROTECT, MOVE_QUICK_ATTACK - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 92 - .2byte SPECIES_SWAMPERT - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x4C @ team flags - .2byte MOVE_SURF, MOVE_MUD_SHOT, MOVE_MUD_SLAP, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 93 - .2byte SPECIES_MIGHTYENA - .byte BATTLE_TOWER_ITEM_BLACK_GLASSES - .byte 0x04 @ team flags - .2byte MOVE_CRUNCH, MOVE_HOWL, MOVE_SWAGGER, MOVE_SHADOW_BALL - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_CALM - .2byte 0 @ padding - -@ 94 - .2byte SPECIES_LINOONE - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x04 @ team flags - .2byte MOVE_SLASH, MOVE_REST, MOVE_BELLY_DRUM, MOVE_THUNDERBOLT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_MILD - .2byte 0 @ padding - -@ 95 - .2byte SPECIES_BEAUTIFLY - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x08 @ team flags - .2byte MOVE_GIGA_DRAIN, MOVE_ATTRACT, MOVE_MORNING_SUN, MOVE_STUN_SPORE - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 96 - .2byte SPECIES_DUSTOX - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x08 @ team flags - .2byte MOVE_PSYCHIC, MOVE_SILVER_WIND, MOVE_MOONLIGHT, MOVE_TOXIC - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 97 - .2byte SPECIES_LUDICOLO - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x0C @ team flags - .2byte MOVE_FAKE_OUT, MOVE_HYDRO_PUMP, MOVE_ICE_BEAM, MOVE_UPROAR - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 98 - .2byte SPECIES_SHIFTRY - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x0C @ team flags - .2byte MOVE_FRUSTRATION, MOVE_GIGA_DRAIN, MOVE_TORMENT, MOVE_SWAGGER - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 99 - .2byte SPECIES_SWELLOW - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x88 @ team flags - .2byte MOVE_FLY, MOVE_ENDEAVOR, MOVE_AERIAL_ACE, MOVE_TOXIC - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 100 - .2byte SPECIES_GARDEVOIR - .byte BATTLE_TOWER_ITEM_BLACK_GLASSES - .byte 0x4A @ team flags - .2byte MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_PSYCHIC, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 101 - .2byte SPECIES_BRELOOM - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x0C @ team flags - .2byte MOVE_DYNAMIC_PUNCH, MOVE_MIND_READER, MOVE_SNATCH, MOVE_MEGA_DRAIN - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 102 - .2byte SPECIES_VIGOROTH - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x04 @ team flags - .2byte MOVE_SLASH, MOVE_UPROAR, MOVE_ENCORE, MOVE_FACADE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_CALM - .2byte 0 @ padding - -@ 103 - .2byte SPECIES_NINJASK - .byte BATTLE_TOWER_ITEM_SILVER_POWDER - .byte 0x04 @ team flags - .2byte MOVE_FURY_CUTTER, MOVE_GIGA_DRAIN, MOVE_SWORDS_DANCE, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 104 - .2byte SPECIES_SHEDINJA - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0xCA @ team flags - .2byte MOVE_CONFUSE_RAY, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_GRUDGE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_JOLLY - .2byte 0 @ padding - -@ 105 - .2byte SPECIES_LOUDRED - .byte BATTLE_TOWER_ITEM_PECHA_BERRY - .byte 0x04 @ team flags - .2byte MOVE_HYPER_VOICE, MOVE_HOWL, MOVE_SHADOW_BALL, MOVE_TORMENT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 106 - .2byte SPECIES_HARIYAMA - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x04 @ team flags - .2byte MOVE_ARM_THRUST, MOVE_BULK_UP, MOVE_BRICK_BREAK, MOVE_HIDDEN_POWER - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 107 - .2byte SPECIES_ALAKAZAM - .byte BATTLE_TOWER_ITEM_TWISTED_SPOON - .byte 0x88 @ team flags - .2byte MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_FUTURE_SIGHT, MOVE_DISABLE - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 108 - .2byte SPECIES_CROBAT - .byte BATTLE_TOWER_ITEM_CHERI_BERRY - .byte 0x88 @ team flags - .2byte MOVE_CONFUSE_RAY, MOVE_TOXIC, MOVE_MEAN_LOOK, MOVE_SNATCH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 109 - .2byte SPECIES_MAWILE - .byte BATTLE_TOWER_ITEM_METAL_COAT - .byte 0x04 @ team flags - .2byte MOVE_CRUNCH, MOVE_IRON_DEFENSE, MOVE_FAKE_TEARS, MOVE_POISON_FANG - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 110 - .2byte SPECIES_AGGRON - .byte BATTLE_TOWER_ITEM_METAL_COAT - .byte 0x45 @ team flags - .2byte MOVE_METAL_CLAW, MOVE_FLAMETHROWER, MOVE_METAL_SOUND, MOVE_ICE_BEAM - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 111 - .2byte SPECIES_GOLEM - .byte BATTLE_TOWER_ITEM_SOFT_SAND - .byte 0xC5 @ team flags - .2byte MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_DOUBLE_TEAM, MOVE_SELF_DESTRUCT - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 112 - .2byte SPECIES_MANECTRIC - .byte BATTLE_TOWER_ITEM_MAGNET - .byte 0x04 @ team flags - .2byte MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_THUNDER_WAVE, MOVE_CHARGE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 113 - .2byte SPECIES_VOLBEAT - .byte BATTLE_TOWER_ITEM_SILVER_POWDER - .byte 0x08 @ team flags - .2byte MOVE_CONFUSE_RAY, MOVE_SIGNAL_BEAM, MOVE_MOONLIGHT, MOVE_TAIL_GLOW - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 114 - .2byte SPECIES_ILLUMISE - .byte BATTLE_TOWER_ITEM_SILVER_POWDER - .byte 0x08 @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_FLATTER, MOVE_WISH, MOVE_ENCORE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 115 - .2byte SPECIES_MASQUERAIN - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x88 @ team flags - .2byte MOVE_GIGA_DRAIN, MOVE_SILVER_WIND, MOVE_STUN_SPORE, MOVE_TOXIC - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 116 - .2byte SPECIES_ROSELIA - .byte BATTLE_TOWER_ITEM_MIRACLE_SEED - .byte 0x08 @ team flags - .2byte MOVE_PETAL_DANCE, MOVE_GROWTH, MOVE_SYNTHESIS, MOVE_GRASS_WHISTLE - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_IMPISH - .2byte 0 @ padding - -@ 117 - .2byte SPECIES_DELCATTY - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x08 @ team flags - .2byte MOVE_SING, MOVE_ATTRACT, MOVE_DOUBLE_SLAP, MOVE_HEAL_BELL - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 118 - .2byte SPECIES_SEAKING - .byte BATTLE_TOWER_ITEM_MYSTIC_WATER - .byte 0x88 @ team flags - .2byte MOVE_RAIN_DANCE, MOVE_SURF, MOVE_ATTRACT, MOVE_ICE_BEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 119 - .2byte SPECIES_GYARADOS - .byte BATTLE_TOWER_ITEM_DRAGON_FANG - .byte 0x8C @ team flags - .2byte MOVE_HYDRO_PUMP, MOVE_EARTHQUAKE, MOVE_DRAGON_RAGE, MOVE_PROTECT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_CALM - .2byte 0 @ padding - -@ 120 - .2byte SPECIES_SWALOT - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x42 @ team flags - .2byte MOVE_STOCKPILE, MOVE_SWALLOW, MOVE_SPIT_UP, MOVE_YAWN - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAUGHTY - .2byte 0 @ padding - -@ 121 - .2byte SPECIES_MAGCARGO - .byte BATTLE_TOWER_ITEM_ASPEAR_BERRY - .byte 0x41 @ team flags - .2byte MOVE_ROCK_SLIDE, MOVE_FIRE_BLAST, MOVE_BODY_SLAM, MOVE_LIGHT_SCREEN - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_LONELY - .2byte 0 @ padding - -@ 122 - .2byte SPECIES_MUK - .byte BATTLE_TOWER_ITEM_POISON_BARB - .byte 0xC3 @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_FLAMETHROWER, MOVE_ACID_ARMOR, MOVE_DISABLE - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 123 - .2byte SPECIES_SPINDA - .byte BATTLE_TOWER_ITEM_SILK_SCARF - .byte 0x42 @ team flags - .2byte MOVE_DIZZY_PUNCH, MOVE_TEETER_DANCE, MOVE_PSYCH_UP, MOVE_FACADE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_MODEST - .2byte 0 @ padding - -@ 124 - .2byte SPECIES_ALTARIA - .byte BATTLE_TOWER_ITEM_DRAGON_FANG - .byte 0x03 @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE, MOVE_REFRESH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_RASH - .2byte 0 @ padding - -@ 125 - .2byte SPECIES_ZANGOOSE - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x03 @ team flags - .2byte MOVE_CRUSH_CLAW, MOVE_TAUNT, MOVE_SWORDS_DANCE, MOVE_DETECT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_QUIRKY - .2byte 0 @ padding - -@ 126 - .2byte SPECIES_SEVIPER - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x41 @ team flags - .2byte MOVE_SWAGGER, MOVE_TAUNT, MOVE_GLARE, MOVE_POISON_TAIL - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 127 - .2byte SPECIES_GRUMPIG - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x42 @ team flags - .2byte MOVE_TOXIC, MOVE_BOUNCE, MOVE_CONFUSE_RAY, MOVE_ATTRACT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 128 - .2byte SPECIES_CACTURNE - .byte BATTLE_TOWER_ITEM_MIRACLE_SEED - .byte 0x41 @ team flags - .2byte MOVE_NEEDLE_ARM, MOVE_INGRAIN, MOVE_SPIKES, MOVE_COTTON_SPORE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 129 - .2byte SPECIES_CLAYDOL - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x03 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_SANDSTORM, MOVE_COSMIC_POWER, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 130 - .2byte SPECIES_TENTACRUEL - .byte BATTLE_TOWER_ITEM_MENTAL_HERB - .byte 0xC1 @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_HYDRO_PUMP, MOVE_BARRIER, MOVE_SUPERSONIC - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 131 - .2byte SPECIES_WIGGLYTUFF - .byte BATTLE_TOWER_ITEM_RAWST_BERRY - .byte 0xC3 @ team flags - .2byte MOVE_SING, MOVE_FOCUS_PUNCH, MOVE_DISABLE, MOVE_FACADE - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_ADAMANT - .2byte 0 @ padding - -@ 132 - .2byte SPECIES_AZUMARILL - .byte BATTLE_TOWER_ITEM_CHERI_BERRY - .byte 0xC2 @ team flags - .2byte MOVE_SURF, MOVE_ATTRACT, MOVE_DEFENSE_CURL, MOVE_ROLLOUT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_RASH - .2byte 0 @ padding - -@ 133 - .2byte SPECIES_ELECTRODE - .byte BATTLE_TOWER_ITEM_CHERI_BERRY - .byte 0xC3 @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_MIRROR_COAT, MOVE_LIGHT_SCREEN, MOVE_SELF_DESTRUCT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 134 - .2byte SPECIES_MILOTIC - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x42 @ team flags - .2byte MOVE_HYDRO_PUMP, MOVE_ATTRACT, MOVE_RECOVER, MOVE_REFRESH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_JOLLY - .2byte 0 @ padding - -@ 135 - .2byte SPECIES_KECLEON - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x43 @ team flags - .2byte MOVE_SKILL_SWAP, MOVE_ANCIENT_POWER, MOVE_WATER_PULSE, MOVE_THUNDERBOLT - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAUGHTY - .2byte 0 @ padding - -@ 136 - .2byte SPECIES_DUSCLOPS - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x43 @ team flags - .2byte MOVE_CONFUSE_RAY, MOVE_CURSE, MOVE_REST, MOVE_MEAN_LOOK - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 137 - .2byte SPECIES_ABSOL - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x41 @ team flags - .2byte MOVE_SLASH, MOVE_SWORDS_DANCE, MOVE_DOUBLE_TEAM, MOVE_SNATCH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 138 - .2byte SPECIES_NINETALES - .byte BATTLE_TOWER_ITEM_APICOT_BERRY - .byte 0xC2 @ team flags - .2byte MOVE_FLAMETHROWER, MOVE_CONFUSE_RAY, MOVE_DOUBLE_TEAM, MOVE_WILL_O_WISP - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 139 - .2byte SPECIES_PIKACHU - .byte BATTLE_TOWER_ITEM_LIGHT_BALL - .byte 0xC2 @ team flags - .2byte MOVE_THUNDER_WAVE, MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_ATTRACT - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 140 - .2byte SPECIES_VILEPLUME - .byte BATTLE_TOWER_ITEM_ASPEAR_BERRY - .byte 0xC3 @ team flags - .2byte MOVE_GIGA_DRAIN, MOVE_SLEEP_POWDER, MOVE_MOONLIGHT, MOVE_SLUDGE_BOMB - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 141 - .2byte SPECIES_DONPHAN - .byte BATTLE_TOWER_ITEM_PERSIM_BERRY - .byte 0x41 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_IRON_TAIL, MOVE_FISSURE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_QUIRKY - .2byte 0 @ padding - -@ 142 - .2byte SPECIES_STARMIE - .byte BATTLE_TOWER_ITEM_CHERI_BERRY - .byte 0xC3 @ team flags - .2byte MOVE_CONFUSE_RAY, MOVE_ICE_BEAM, MOVE_RECOVER, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 143 - .2byte SPECIES_WALREIN - .byte BATTLE_TOWER_ITEM_NEVER_MELT_ICE - .byte 0x43 @ team flags - .2byte MOVE_ICE_BEAM, MOVE_BODY_SLAM, MOVE_ENCORE, MOVE_HAIL - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 144 - .2byte SPECIES_RELICANTH - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x41 @ team flags - .2byte MOVE_YAWN, MOVE_MUD_SPORT, MOVE_DOUBLE_EDGE, MOVE_SANDSTORM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_LONELY - .2byte 0 @ padding - -@ 145 - .2byte SPECIES_KINGDRA - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x43 @ team flags - .2byte MOVE_RAIN_DANCE, MOVE_ICE_BEAM, MOVE_HYDRO_PUMP, MOVE_AGILITY - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 146 - .2byte SPECIES_CRADILY - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x43 @ team flags - .2byte MOVE_CONFUSE_RAY, MOVE_INGRAIN, MOVE_ANCIENT_POWER, MOVE_GIGA_DRAIN - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_MILD - .2byte 0 @ padding - -@ 147 - .2byte SPECIES_ARMALDO - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x43 @ team flags - .2byte MOVE_SLASH, MOVE_ROCK_SLIDE, MOVE_EARTHQUAKE, MOVE_WATER_PULSE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 148 - .2byte SPECIES_METAGROSS - .byte BATTLE_TOWER_ITEM_METAL_COAT - .byte 0x41 @ team flags - .2byte MOVE_METAL_CLAW, MOVE_PSYCHIC, MOVE_LIGHT_SCREEN, MOVE_AGILITY - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 149 - .2byte SPECIES_SALAMENCE - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x42 @ team flags - .2byte MOVE_DRAGON_BREATH, MOVE_CRUNCH, MOVE_FLAMETHROWER, MOVE_AERIAL_ACE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 150 - .2byte SPECIES_MIGHTYENA - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x01 @ team flags - .2byte MOVE_CRUNCH, MOVE_YAWN, MOVE_FACADE, MOVE_HOWL - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 151 - .2byte SPECIES_LINOONE - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x02 @ team flags - .2byte MOVE_HYPER_BEAM, MOVE_FACADE, MOVE_ATTRACT, MOVE_TRICK - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 152 - .2byte SPECIES_LUDICOLO - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x03 @ team flags - .2byte MOVE_SURF, MOVE_FOCUS_PUNCH, MOVE_FAKE_OUT, MOVE_SYNTHESIS - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 153 - .2byte SPECIES_EXPLOUD - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x01 @ team flags - .2byte MOVE_UPROAR, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_FLAMETHROWER - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 154 - .2byte SPECIES_SWELLOW - .byte BATTLE_TOWER_ITEM_LANSAT_BERRY - .byte 0x02 @ team flags - .2byte MOVE_FACADE, MOVE_SUPERSONIC, MOVE_WING_ATTACK, MOVE_ENDEAVOR - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 155 - .2byte SPECIES_PELIPPER - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x82 @ team flags - .2byte MOVE_STOCKPILE, MOVE_SWALLOW, MOVE_SPIT_UP, MOVE_ATTRACT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 156 - .2byte SPECIES_BRELOOM - .byte BATTLE_TOWER_ITEM_FOCUS_BAND - .byte 0x01 @ team flags - .2byte MOVE_DYNAMIC_PUNCH, MOVE_COUNTER, MOVE_BULK_UP, MOVE_MIND_READER - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 157 - .2byte SPECIES_SHEDINJA - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x01 @ team flags - .2byte MOVE_RETURN, MOVE_DOUBLE_TEAM, MOVE_TOXIC, MOVE_SHADOW_BALL - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 158 - .2byte SPECIES_EXPLOUD - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x01 @ team flags - .2byte MOVE_HYPER_BEAM, MOVE_SUPERSONIC, MOVE_FLAMETHROWER, MOVE_ICE_BEAM - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 159 - .2byte SPECIES_HARIYAMA - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x01 @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_COUNTER, MOVE_FACADE, MOVE_FAKE_OUT - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 160 - .2byte SPECIES_ALAKAZAM - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x83 @ team flags - .2byte MOVE_PSYCHIC, MOVE_ENCORE, MOVE_DISABLE, MOVE_RECOVER - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 161 - .2byte SPECIES_CROBAT - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x81 @ team flags - .2byte MOVE_CONFUSE_RAY, MOVE_AIR_CUTTER, MOVE_TORMENT, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 162 - .2byte SPECIES_SABLEYE - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x83 @ team flags - .2byte MOVE_TOXIC, MOVE_DETECT, MOVE_RECOVER, MOVE_TORMENT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 163 - .2byte SPECIES_MAWILE - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x02 @ team flags - .2byte MOVE_CRUNCH, MOVE_SWORDS_DANCE, MOVE_IRON_DEFENSE, MOVE_REST - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 164 - .2byte SPECIES_AGGRON - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x01 @ team flags - .2byte MOVE_DOUBLE_EDGE, MOVE_IRON_DEFENSE, MOVE_ROAR, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 165 - .2byte SPECIES_GOLEM - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x01 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_FLAMETHROWER, MOVE_FACADE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 166 - .2byte SPECIES_NOSEPASS - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x81 @ team flags - .2byte MOVE_THUNDER_WAVE, MOVE_ROCK_SLIDE, MOVE_TORMENT, MOVE_ATTRACT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 167 - .2byte SPECIES_MANECTRIC - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x02 @ team flags - .2byte MOVE_THUNDER, MOVE_CRUNCH, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_JOLLY - .2byte 0 @ padding - -@ 168 - .2byte SPECIES_ROSELIA - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x82 @ team flags - .2byte MOVE_GRASS_WHISTLE, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_GROWTH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 169 - .2byte SPECIES_DELCATTY - .byte BATTLE_TOWER_ITEM_STARF_BERRY - .byte 0x02 @ team flags - .2byte MOVE_ASSIST, MOVE_SING, MOVE_ATTRACT, MOVE_SUBSTITUTE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 170 - .2byte SPECIES_TROPIUS - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0xC2 @ team flags - .2byte MOVE_RAZOR_LEAF, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_SYNTHESIS - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_JOLLY - .2byte 0 @ padding - -@ 171 - .2byte SPECIES_SWALOT - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x03 @ team flags - .2byte MOVE_YAWN, MOVE_SLUDGE_BOMB, MOVE_ATTRACT, MOVE_ICE_BEAM - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 172 - .2byte SPECIES_MACHAMP - .byte BATTLE_TOWER_ITEM_BLACK_BELT - .byte 0x01 @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_BULK_UP, MOVE_LOW_KICK, MOVE_BRICK_BREAK - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 173 - .2byte SPECIES_CAMERUPT - .byte BATTLE_TOWER_ITEM_SITRUS_BERRY - .byte 0x40 @ team flags - .2byte MOVE_ERUPTION, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_OVERHEAT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 174 - .2byte SPECIES_MAGCARGO - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x03 @ team flags - .2byte MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE, MOVE_EARTHQUAKE, MOVE_REFLECT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 175 - .2byte SPECIES_WEEZING - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x81 @ team flags - .2byte MOVE_WILL_O_WISP, MOVE_HYPER_BEAM, MOVE_THUNDERBOLT, MOVE_DESTINY_BOND - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 176 - .2byte SPECIES_SPINDA - .byte BATTLE_TOWER_ITEM_CHOICE_BAND - .byte 0x82 @ team flags - .2byte MOVE_TRICK, MOVE_TEETER_DANCE, MOVE_FOCUS_PUNCH, MOVE_FACADE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 177 - .2byte SPECIES_SKARMORY - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x01 @ team flags - .2byte MOVE_DRILL_PECK, MOVE_STEEL_WING, MOVE_TORMENT, MOVE_PROTECT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 178 - .2byte SPECIES_ALTARIA - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x02 @ team flags - .2byte MOVE_SING, MOVE_DRAGON_CLAW, MOVE_ICE_BEAM, MOVE_EARTHQUAKE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 179 - .2byte SPECIES_GRUMPIG - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x82 @ team flags - .2byte MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_CALM_MIND, MOVE_REST - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 180 - .2byte SPECIES_SHIFTRY - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x20 @ team flags - .2byte MOVE_SWAGGER, MOVE_FRUSTRATION, MOVE_ATTRACT, MOVE_EXPLOSION - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 181 - .2byte SPECIES_CLAYDOL - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x20 @ team flags - .2byte MOVE_COSMIC_POWER, MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 182 - .2byte SPECIES_HARIYAMA - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x33 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_BELLY_DRUM, MOVE_REST - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 183 - .2byte SPECIES_NOSEPASS - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x20 @ team flags - .2byte MOVE_ROCK_SLIDE, MOVE_THUNDER_WAVE, MOVE_EARTHQUAKE, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_LAX - .2byte 0 @ padding - -@ 184 - .2byte SPECIES_DUSCLOPS - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x33 @ team flags - .2byte MOVE_SHADOW_PUNCH, MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_DESTINY_BOND - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 185 - .2byte SPECIES_SEAKING - .byte BATTLE_TOWER_ITEM_LEPPA_BERRY - .byte 0x20 @ team flags - .2byte MOVE_HORN_DRILL, MOVE_AGILITY, MOVE_SLEEP_TALK, MOVE_REST - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 186 - .2byte SPECIES_CAMERUPT - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x73 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_ERUPTION, MOVE_ROCK_SLIDE, MOVE_FISSURE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 187 - .2byte SPECIES_LANTURN - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x13 @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_SURF, MOVE_THUNDER_WAVE, MOVE_CONFUSE_RAY - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 188 - .2byte SPECIES_WEEZING - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x33 @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_THUNDERBOLT, MOVE_FIRE_BLAST, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 189 - .2byte SPECIES_WHISCASH - .byte BATTLE_TOWER_ITEM_LEPPA_BERRY - .byte 0x20 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_SURF, MOVE_SPARK, MOVE_FISSURE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 190 - .2byte SPECIES_AGGRON - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x51 @ team flags - .2byte MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_SURF, MOVE_DRAGON_CLAW - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 191 - .2byte SPECIES_KECLEON - .byte BATTLE_TOWER_ITEM_CHOICE_BAND - .byte 0x12 @ team flags - .2byte MOVE_TRICK, MOVE_FOCUS_PUNCH, MOVE_ATTRACT, MOVE_SNATCH - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_MILD - .2byte 0 @ padding - -@ 192 - .2byte SPECIES_SHARPEDO - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x11 @ team flags - .2byte MOVE_CRUNCH, MOVE_DOUBLE_EDGE, MOVE_SURF, MOVE_SWAGGER - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 193 - .2byte SPECIES_ABSOL - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x12 @ team flags - .2byte MOVE_DOUBLE_EDGE, MOVE_FACADE, MOVE_SWORDS_DANCE, MOVE_QUICK_ATTACK - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 194 - .2byte SPECIES_WAILORD - .byte BATTLE_TOWER_ITEM_LEPPA_BERRY - .byte 0x72 @ team flags - .2byte MOVE_HYDRO_PUMP, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_FISSURE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 195 - .2byte SPECIES_TENTACRUEL - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x20 @ team flags - .2byte MOVE_HYDRO_PUMP, MOVE_SLUDGE_BOMB, MOVE_BARRIER, MOVE_MIRROR_COAT - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_JOLLY - .2byte 0 @ padding - -@ 196 - .2byte SPECIES_SABLEYE - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x32 @ team flags - .2byte MOVE_SHADOW_BALL, MOVE_TOXIC, MOVE_RECOVER, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 197 - .2byte SPECIES_WOBBUFFET - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x20 @ team flags - .2byte MOVE_ENCORE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_DESTINY_BOND - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_MILD - .2byte 0 @ padding - -@ 198 - .2byte SPECIES_RHYDON - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x71 @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_MEGAHORN, MOVE_BRICK_BREAK, MOVE_HORN_DRILL - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 199 - .2byte SPECIES_GLALIE - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x31 @ team flags - .2byte MOVE_CRUNCH, MOVE_BLIZZARD, MOVE_HAIL, MOVE_SHEER_COLD - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 200 - .2byte SPECIES_SCEPTILE - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x8C @ team flags - .2byte MOVE_LEAF_BLADE, MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_CRUNCH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 201 - .2byte SPECIES_BLAZIKEN - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x8C @ team flags - .2byte MOVE_BLAZE_KICK, MOVE_COUNTER, MOVE_ENDURE, MOVE_REVERSAL - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 202 - .2byte SPECIES_SWAMPERT - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x8C @ team flags - .2byte MOVE_SURF, MOVE_EARTHQUAKE, MOVE_MIRROR_COAT, MOVE_BLIZZARD - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 203 - .2byte SPECIES_GARDEVOIR - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x1A @ team flags - .2byte MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_DESTINY_BOND, MOVE_SNATCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 204 - .2byte SPECIES_BRELOOM - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x15 @ team flags - .2byte MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_MACH_PUNCH, MOVE_ATTRACT - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 205 - .2byte SPECIES_ALAKAZAM - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x58 @ team flags - .2byte MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_RECOVER - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 206 - .2byte SPECIES_HARIYAMA - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x15 @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_FACADE, MOVE_FAKE_OUT - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 207 - .2byte SPECIES_GYARADOS - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x55 @ team flags - .2byte MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_SURF, MOVE_ICE_BEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_BOLD - .2byte 0 @ padding - -@ 208 - .2byte SPECIES_CROBAT - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x58 @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_CONFUSE_RAY, MOVE_AIR_CUTTER, MOVE_DOUBLE_TEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 209 - .2byte SPECIES_MACHAMP - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x5D @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_FLAMETHROWER, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 210 - .2byte SPECIES_MANECTRIC - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x1A @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ROAR, MOVE_CRUNCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 211 - .2byte SPECIES_ELECTRODE - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x60 @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_MIRROR_COAT, MOVE_EXPLOSION - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 212 - .2byte SPECIES_MUK - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x64 @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_EXPLOSION - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 213 - .2byte SPECIES_FLYGON - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x1C @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_CRUNCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 214 - .2byte SPECIES_STARMIE - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x5C @ team flags - .2byte MOVE_SURF, MOVE_THUNDERBOLT, MOVE_RECOVER, MOVE_CONFUSE_RAY - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 215 - .2byte SPECIES_NINETALES - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x4A @ team flags - .2byte MOVE_CONFUSE_RAY, MOVE_TOXIC, MOVE_FIRE_SPIN, MOVE_HEAT_WAVE - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 216 - .2byte SPECIES_RAICHU - .byte BATTLE_TOWER_ITEM_FOCUS_BAND - .byte 0x5A @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_REVERSAL, MOVE_IRON_TAIL - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 217 - .2byte SPECIES_GOLDUCK - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x55 @ team flags - .2byte MOVE_SURF, MOVE_CROSS_CHOP, MOVE_ICE_BEAM, MOVE_DIG - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_JOLLY - .2byte 0 @ padding - -@ 218 - .2byte SPECIES_HERACROSS - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x5D @ team flags - .2byte MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_ENDURE, MOVE_REVERSAL - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 219 - .2byte SPECIES_WALREIN - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x26 @ team flags - .2byte MOVE_SURF, MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_SHEER_COLD - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 220 - .2byte SPECIES_KINGDRA - .byte BATTLE_TOWER_ITEM_CHESTO_BERRY - .byte 0x5B @ team flags - .2byte MOVE_SURF, MOVE_ICE_BEAM, MOVE_DRAGON_BREATH, MOVE_REST - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 221 - .2byte SPECIES_SALAMENCE - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x0D @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_FIRE_BLAST - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_NAUGHTY - .2byte 0 @ padding - -@ 222 - .2byte SPECIES_METAGROSS - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x3D @ team flags - .2byte MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 223 - .2byte SPECIES_REGIROCK - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x3C @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_THUNDERBOLT, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 224 - .2byte SPECIES_REGICE - .byte BATTLE_TOWER_ITEM_LAX_INCENSE - .byte 0x3C @ team flags - .2byte MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 225 - .2byte SPECIES_REGISTEEL - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x3C @ team flags - .2byte MOVE_METAL_CLAW, MOVE_EARTHQUAKE, MOVE_THUNDERBOLT, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 226 - .2byte SPECIES_LATIAS - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x0E @ team flags - .2byte MOVE_MIST_BALL, MOVE_THUNDERBOLT, MOVE_RECOVER, MOVE_DRAGON_CLAW - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 227 - .2byte SPECIES_LATIOS - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x0D @ team flags - .2byte MOVE_LUSTER_PURGE, MOVE_THUNDERBOLT, MOVE_RECOVER, MOVE_DRAGON_CLAW - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 228 - .2byte SPECIES_MILOTIC - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x1A @ team flags - .2byte MOVE_SURF, MOVE_TOXIC, MOVE_RECOVER, MOVE_MIRROR_COAT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 229 - .2byte SPECIES_SLAKING - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x15 @ team flags - .2byte MOVE_YAWN, MOVE_FOCUS_PUNCH, MOVE_COUNTER, MOVE_SLACK_OFF - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 230 - .2byte SPECIES_SCEPTILE - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x8C @ team flags - .2byte MOVE_GIGA_DRAIN, MOVE_DOUBLE_TEAM, MOVE_LEECH_SEED, MOVE_ATTRACT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 231 - .2byte SPECIES_BLAZIKEN - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x8C @ team flags - .2byte MOVE_BLAZE_KICK, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_QUICK_ATTACK - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 232 - .2byte SPECIES_SWAMPERT - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x8C @ team flags - .2byte MOVE_MUDDY_WATER, MOVE_MUD_SHOT, MOVE_MIRROR_COAT, MOVE_ICE_BEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 233 - .2byte SPECIES_GARDEVOIR - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x0A @ team flags - .2byte MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_HYPNOSIS, MOVE_DREAM_EATER - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 234 - .2byte SPECIES_BRELOOM - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x05 @ team flags - .2byte MOVE_SPORE, MOVE_COUNTER, MOVE_SKY_UPPERCUT, MOVE_GIGA_DRAIN - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 235 - .2byte SPECIES_ALAKAZAM - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x58 @ team flags - .2byte MOVE_PSYCHIC, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_RECOVER - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 236 - .2byte SPECIES_HARIYAMA - .byte BATTLE_TOWER_ITEM_FOCUS_BAND - .byte 0x04 @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_COUNTER, MOVE_ENDURE, MOVE_REVERSAL - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 237 - .2byte SPECIES_GYARADOS - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x44 @ team flags - .2byte MOVE_HYPER_BEAM, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, MOVE_ICE_BEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_BOLD - .2byte 0 @ padding - -@ 238 - .2byte SPECIES_CROBAT - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x48 @ team flags - .2byte MOVE_TOXIC, MOVE_CONFUSE_RAY, MOVE_ATTRACT, MOVE_FLY - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 239 - .2byte SPECIES_MACHAMP - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x5D @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_COUNTER, MOVE_EARTHQUAKE, MOVE_FACADE - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 240 - .2byte SPECIES_MANECTRIC - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x0A @ team flags - .2byte MOVE_THUNDER, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK, MOVE_CRUNCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 241 - .2byte SPECIES_ELECTRODE - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x60 @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_LIGHT_SCREEN, MOVE_MIRROR_COAT, MOVE_EXPLOSION - .byte F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 242 - .2byte SPECIES_MUK - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x64 @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN, MOVE_FLAMETHROWER, MOVE_EXPLOSION - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 243 - .2byte SPECIES_FLYGON - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x1C @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_IRON_TAIL, MOVE_CRUNCH - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 244 - .2byte SPECIES_STARMIE - .byte BATTLE_TOWER_ITEM_APICOT_BERRY - .byte 0x5C @ team flags - .2byte MOVE_BLIZZARD, MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_RECOVER - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 245 - .2byte SPECIES_DODRIO - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x5A @ team flags - .2byte MOVE_DRILL_PECK, MOVE_TRI_ATTACK, MOVE_AGILITY, MOVE_FACADE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 246 - .2byte SPECIES_RAICHU - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x4A @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_FOCUS_PUNCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 247 - .2byte SPECIES_GOLDUCK - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x45 @ team flags - .2byte MOVE_HYDRO_PUMP, MOVE_CROSS_CHOP, MOVE_BLIZZARD, MOVE_ATTRACT - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 248 - .2byte SPECIES_HERACROSS - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x5D @ team flags - .2byte MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_REVERSAL - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 249 - .2byte SPECIES_WALREIN - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x26 @ team flags - .2byte MOVE_SURF, MOVE_BLIZZARD, MOVE_ROCK_SLIDE, MOVE_SHEER_COLD - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 250 - .2byte SPECIES_KINGDRA - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x5C @ team flags - .2byte MOVE_HYDRO_PUMP, MOVE_ICE_BEAM, MOVE_DRAGON_BREATH, MOVE_ATTRACT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 251 - .2byte SPECIES_SALAMENCE - .byte BATTLE_TOWER_ITEM_KINGS_ROCK - .byte 0x1D @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 252 - .2byte SPECIES_METAGROSS - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x3D @ team flags - .2byte MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 253 - .2byte SPECIES_REGIROCK - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x3C @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_THUNDERBOLT, MOVE_FOCUS_PUNCH, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 254 - .2byte SPECIES_REGICE - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x3C @ team flags - .2byte MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_HAIL, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 255 - .2byte SPECIES_REGISTEEL - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x3C @ team flags - .2byte MOVE_METAL_CLAW, MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 256 - .2byte SPECIES_LATIAS - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x1E @ team flags - .2byte MOVE_MIST_BALL, MOVE_ICE_BEAM, MOVE_RECOVER, MOVE_DRAGON_CLAW - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 257 - .2byte SPECIES_LATIOS - .byte BATTLE_TOWER_ITEM_LAX_INCENSE - .byte 0x1D @ team flags - .2byte MOVE_LUSTER_PURGE, MOVE_ICE_BEAM, MOVE_RECOVER, MOVE_DRAGON_CLAW - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 258 - .2byte SPECIES_MILOTIC - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x1A @ team flags - .2byte MOVE_HYDRO_PUMP, MOVE_ICE_BEAM, MOVE_RECOVER, MOVE_MIRROR_COAT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 259 - .2byte SPECIES_SLAKING - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x15 @ team flags - .2byte MOVE_YAWN, MOVE_FOCUS_PUNCH, MOVE_COUNTER, MOVE_PURSUIT - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 260 - .2byte SPECIES_SCEPTILE - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x8C @ team flags - .2byte MOVE_LEAF_BLADE, MOVE_ROCK_TOMB, MOVE_DRAGON_CLAW, MOVE_CRUNCH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 261 - .2byte SPECIES_BLAZIKEN - .byte BATTLE_TOWER_ITEM_GANLON_BERRY - .byte 0x8C @ team flags - .2byte MOVE_FOCUS_PUNCH, MOVE_COUNTER, MOVE_SWAGGER, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 262 - .2byte SPECIES_SWAMPERT - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x8C @ team flags - .2byte MOVE_SURF, MOVE_ICE_BEAM, MOVE_ATTRACT, MOVE_REST - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 263 - .2byte SPECIES_GARDEVOIR - .byte BATTLE_TOWER_ITEM_LAX_INCENSE - .byte 0x0A @ team flags - .2byte MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ATTRACT, MOVE_WILL_O_WISP - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 264 - .2byte SPECIES_BRELOOM - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x05 @ team flags - .2byte MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_MACH_PUNCH, MOVE_COUNTER - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 265 - .2byte SPECIES_ALAKAZAM - .byte BATTLE_TOWER_ITEM_CHOICE_BAND - .byte 0x58 @ team flags - .2byte MOVE_PSYCHIC, MOVE_TRICK, MOVE_RECOVER, MOVE_SNATCH - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 266 - .2byte SPECIES_HARIYAMA - .byte BATTLE_TOWER_ITEM_FOCUS_BAND - .byte 0x05 @ team flags - .2byte MOVE_REVENGE, MOVE_COUNTER, MOVE_FOCUS_PUNCH, MOVE_REVERSAL - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 267 - .2byte SPECIES_LUDICOLO - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x0A @ team flags - .2byte MOVE_RAIN_DANCE, MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_DIVE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 268 - .2byte SPECIES_CROBAT - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x48 @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_CONFUSE_RAY, MOVE_SHADOW_BALL, MOVE_SNATCH - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 269 - .2byte SPECIES_MACHAMP - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x5D @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_FIRE_BLAST, MOVE_LOW_KICK, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 270 - .2byte SPECIES_MANECTRIC - .byte BATTLE_TOWER_ITEM_LUM_BERRY - .byte 0x08 @ team flags - .2byte MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_CRUNCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 271 - .2byte SPECIES_ELECTRODE - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x60 @ team flags - .2byte MOVE_THUNDER, MOVE_SWIFT, MOVE_MIRROR_COAT, MOVE_EXPLOSION - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_BASHFUL - .2byte 0 @ padding - -@ 272 - .2byte SPECIES_MUK - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x64 @ team flags - .2byte MOVE_SLUDGE_BOMB, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT, MOVE_SHADOW_PUNCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 273 - .2byte SPECIES_FLYGON - .byte BATTLE_TOWER_ITEM_LAX_INCENSE - .byte 0x0C @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_FIRE_BLAST, MOVE_SANDSTORM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_TIMID - .2byte 0 @ padding - -@ 274 - .2byte SPECIES_STARMIE - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x4C @ team flags - .2byte MOVE_SURF, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_PSYCHIC - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 275 - .2byte SPECIES_LUDICOLO - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x4A @ team flags - .2byte MOVE_LEECH_SEED, MOVE_ATTRACT, MOVE_DOUBLE_TEAM, MOVE_PROTECT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 276 - .2byte SPECIES_SKARMORY - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x4B @ team flags - .2byte MOVE_DRILL_PECK, MOVE_STEEL_WING, MOVE_ATTRACT, MOVE_PURSUIT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED - .byte NATURE_SASSY - .2byte 0 @ padding - -@ 277 - .2byte SPECIES_GOLDUCK - .byte BATTLE_TOWER_ITEM_SCOPE_LENS - .byte 0x49 @ team flags - .2byte MOVE_SURF, MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_CROSS_CHOP - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_JOLLY - .2byte 0 @ padding - -@ 278 - .2byte SPECIES_HERACROSS - .byte BATTLE_TOWER_ITEM_QUICK_CLAW - .byte 0x5D @ team flags - .2byte MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_FOCUS_PUNCH, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 279 - .2byte SPECIES_WALREIN - .byte BATTLE_TOWER_ITEM_LEPPA_BERRY - .byte 0x26 @ team flags - .2byte MOVE_SURF, MOVE_ICE_BEAM, MOVE_FISSURE, MOVE_SHEER_COLD - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 280 - .2byte SPECIES_KINGDRA - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x5C @ team flags - .2byte MOVE_SURF, MOVE_BLIZZARD, MOVE_HYPER_BEAM, MOVE_FLAIL - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 281 - .2byte SPECIES_SALAMENCE - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x1D @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_FIRE_BLAST, MOVE_HYDRO_PUMP - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_NAUGHTY - .2byte 0 @ padding - -@ 282 - .2byte SPECIES_METAGROSS - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x3D @ team flags - .2byte MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_HYPER_BEAM - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 283 - .2byte SPECIES_REGIROCK - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x3C @ team flags - .2byte MOVE_EARTHQUAKE, MOVE_THUNDERBOLT, MOVE_SUPERPOWER, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 284 - .2byte SPECIES_REGICE - .byte BATTLE_TOWER_ITEM_LAX_INCENSE - .byte 0x3C @ team flags - .2byte MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_ANCIENT_POWER, MOVE_EXPLOSION - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK - .byte NATURE_CAREFUL - .2byte 0 @ padding - -@ 285 - .2byte SPECIES_REGISTEEL - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x3C @ team flags - .2byte MOVE_METAL_CLAW, MOVE_THUNDERBOLT, MOVE_HYPER_BEAM, MOVE_EXPLOSION - .byte F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP - .byte NATURE_GENTLE - .2byte 0 @ padding - -@ 286 - .2byte SPECIES_LATIAS - .byte BATTLE_TOWER_ITEM_APICOT_BERRY - .byte 0x1E @ team flags - .2byte MOVE_MIST_BALL, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, MOVE_ICE_BEAM - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 287 - .2byte SPECIES_LATIOS - .byte BATTLE_TOWER_ITEM_GANLON_BERRY - .byte 0x1D @ team flags - .2byte MOVE_LUSTER_PURGE, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE, MOVE_ICE_BEAM - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 288 - .2byte SPECIES_MILOTIC - .byte BATTLE_TOWER_ITEM_APICOT_BERRY - .byte 0x1A @ team flags - .2byte MOVE_SURF, MOVE_ICE_BEAM, MOVE_RECOVER, MOVE_ATTRACT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_BRAVE - .2byte 0 @ padding - -@ 289 - .2byte SPECIES_ALTARIA - .byte BATTLE_TOWER_ITEM_GANLON_BERRY - .byte 0x0A @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_ICE_BEAM, MOVE_SING, MOVE_FLAMETHROWER - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 290 - .2byte SPECIES_SCEPTILE - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x9C @ team flags - .2byte MOVE_LEAF_BLADE, MOVE_DETECT, MOVE_DRAGON_CLAW, MOVE_CRUNCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 291 - .2byte SPECIES_BLAZIKEN - .byte BATTLE_TOWER_ITEM_SALAC_BERRY - .byte 0x9C @ team flags - .2byte MOVE_BLAZE_KICK, MOVE_SKY_UPPERCUT, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK - .byte NATURE_DOCILE - .2byte 0 @ padding - -@ 292 - .2byte SPECIES_SWAMPERT - .byte BATTLE_TOWER_ITEM_PETAYA_BERRY - .byte 0x9C @ team flags - .2byte MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_ROCK_TOMB - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 293 - .2byte SPECIES_SHEDINJA - .byte BATTLE_TOWER_ITEM_BRIGHT_POWDER - .byte 0x20 @ team flags - .2byte MOVE_CONFUSE_RAY, MOVE_SHADOW_BALL, MOVE_TOXIC, MOVE_GRUDGE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 294 - .2byte SPECIES_METAGROSS - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x1D @ team flags - .2byte MOVE_METEOR_MASH, MOVE_EARTHQUAKE, MOVE_DOUBLE_TEAM, MOVE_PROTECT - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP - .byte NATURE_NAIVE - .2byte 0 @ padding - -@ 295 - .2byte SPECIES_ALAKAZAM - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x58 @ team flags - .2byte MOVE_PSYCHIC, MOVE_THUNDER_PUNCH, MOVE_ICE_PUNCH, MOVE_FIRE_PUNCH - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_HASTY - .2byte 0 @ padding - -@ 296 - .2byte SPECIES_LATIAS - .byte BATTLE_TOWER_ITEM_LEFTOVERS - .byte 0x1E @ team flags - .2byte MOVE_MIST_BALL, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_DRAGON_CLAW - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_QUIET - .2byte 0 @ padding - -@ 297 - .2byte SPECIES_LATIOS - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x1D @ team flags - .2byte MOVE_LUSTER_PURGE, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_DRAGON_CLAW - .byte F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED - .byte NATURE_HARDY - .2byte 0 @ padding - -@ 298 - .2byte SPECIES_SALAMENCE - .byte BATTLE_TOWER_ITEM_SHELL_BELL - .byte 0x1D @ team flags - .2byte MOVE_DRAGON_CLAW, MOVE_FLAMETHROWER, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE - .byte F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE - .byte NATURE_RELAXED - .2byte 0 @ padding - -@ 299 - .2byte SPECIES_MACHAMP - .byte BATTLE_TOWER_ITEM_LIECHI_BERRY - .byte 0x5D @ team flags - .2byte MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_LOW_KICK, MOVE_ROCK_SLIDE - .byte F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK - .byte NATURE_HARDY - .2byte 0 @ padding 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/ --- data/battle_tower.s | 147 ---- include/global.h | 5 +- ld_script.txt | 1 - src/battle_tower.c | 152 +++- src/data/battle_tower/trainers.h | 1700 ++++++++++++++++++++------------------ 5 files changed, 1050 insertions(+), 955 deletions(-) delete mode 100644 data/battle_tower.s diff --git a/data/battle_tower.s b/data/battle_tower.s deleted file mode 100644 index b8ada3c36..000000000 --- a/data/battle_tower.s +++ /dev/null @@ -1,147 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -gUnknown_08405E60:: @ 8405E60 - .byte 4 - .byte 7 - .byte 8 - .byte 13 - .byte 14 - .byte 15 - .byte 16 - .byte 17 - .byte 18 - .byte 19 - .byte 20 - .byte 21 - .byte 23 - .byte 29 - .byte 32 - .byte 34 - .byte 36 - .byte 38 - .byte 39 - .byte 41 - .byte 43 - .byte 45 - .byte 46 - .byte 47 - .byte 53 - .byte 56 - .byte 64 - .byte 66 - .byte 72 - .byte 73 - -gUnknown_08405E7E:: @ 8405E7E - .byte 3 - .byte 6 - .byte 9 - .byte 10 - .byte 11 - .byte 12 - .byte 22 - .byte 30 - .byte 33 - .byte 35 - .byte 40 - .byte 42 - .byte 44 - .byte 48 - .byte 49 - .byte 50 - .byte 51 - .byte 65 - .byte 67 - .byte 71 - -gUnknown_08405E92:: @ 8405E92 - .byte MAP_OBJ_GFX_HIKER - .byte MAP_OBJ_GFX_TUBER_M - .byte MAP_OBJ_GFX_MAN_4 - .byte MAP_OBJ_GFX_BOY_4 - .byte MAP_OBJ_GFX_MANIAC - .byte MAP_OBJ_GFX_RUNNING_TRIATHLETE_M - .byte MAP_OBJ_GFX_BLACK_BELT - .byte MAP_OBJ_GFX_MAN_6 - .byte MAP_OBJ_GFX_MAN_6 - .byte MAP_OBJ_GFX_CAMPER - .byte MAP_OBJ_GFX_MANIAC - .byte MAP_OBJ_GFX_PSYCHIC_M - .byte MAP_OBJ_GFX_GENTLEMAN - .byte MAP_OBJ_GFX_SCHOOL_KID_M - .byte MAP_OBJ_GFX_MAN_3 - .byte MAP_OBJ_GFX_OLD_MAN_1 - .byte MAP_OBJ_GFX_YOUNGSTER - .byte MAP_OBJ_GFX_FISHERMAN - .byte MAP_OBJ_GFX_CYCLING_TRIATHLETE_M - .byte MAP_OBJ_GFX_RUNNING_TRIATHLETE_M - .byte MAP_OBJ_GFX_RUNNING_TRIATHLETE_M - .byte MAP_OBJ_GFX_MAN_4 - .byte MAP_OBJ_GFX_MAN_6 - .byte MAP_OBJ_GFX_LITTLE_BOY_1 - .byte MAP_OBJ_GFX_SAILOR - .byte MAP_OBJ_GFX_MANIAC - .byte MAP_OBJ_GFX_MAN_5 - .byte MAP_OBJ_GFX_CAMPER - .byte MAP_OBJ_GFX_BUG_CATCHER - .byte MAP_OBJ_GFX_HIKER - -gUnknown_08405EB0:: @ 8405EB0 - .byte MAP_OBJ_GFX_WOMAN_3 - .byte MAP_OBJ_GFX_TUBER_F - .byte MAP_OBJ_GFX_WOMAN_7 - .byte MAP_OBJ_GFX_WOMAN_1 - .byte MAP_OBJ_GFX_WOMAN_3 - .byte MAP_OBJ_GFX_BEAUTY - .byte MAP_OBJ_GFX_LASS - .byte MAP_OBJ_GFX_GIRL_3 - .byte MAP_OBJ_GFX_WOMAN_2 - .byte MAP_OBJ_GFX_OLD_WOMAN_1 - .byte MAP_OBJ_GFX_CYCLING_TRIATHLETE_F - .byte MAP_OBJ_GFX_RUNNING_TRIATHLETE_F - .byte MAP_OBJ_GFX_RUNNING_TRIATHLETE_F - .byte MAP_OBJ_GFX_GIRL_3 - .byte MAP_OBJ_GFX_WOMAN_7 - .byte MAP_OBJ_GFX_RUNNING_TRIATHLETE_F - .byte MAP_OBJ_GFX_PICNICKER - .byte MAP_OBJ_GFX_WOMAN_3 - .byte MAP_OBJ_GFX_PICNICKER - .byte MAP_OBJ_GFX_LASS - - .align 1 -gBattleTowerBanlist:: @ 8405EC4 - .2byte SPECIES_MEW - .2byte SPECIES_MEWTWO - .2byte SPECIES_HO_OH - .2byte SPECIES_LUGIA - .2byte SPECIES_CELEBI - .2byte SPECIES_KYOGRE - .2byte SPECIES_GROUDON - .2byte SPECIES_RAYQUAZA - .2byte SPECIES_JIRACHI - .2byte SPECIES_DEOXYS - .2byte -1 - - .align 1 -gUnknown_08405EDA:: @ 8405EDA - .2byte ITEM_HP_UP - .2byte ITEM_PROTEIN - .2byte ITEM_IRON - .2byte ITEM_CALCIUM - .2byte ITEM_CARBOS - .2byte ITEM_ZINC - - .align 1 -gUnknown_08405EE6:: @ 8405EE6 - .2byte ITEM_BRIGHT_POWDER - .2byte ITEM_WHITE_HERB - .2byte ITEM_QUICK_CLAW - .2byte ITEM_LEFTOVERS - .2byte ITEM_MENTAL_HERB - .2byte ITEM_KINGS_ROCK - .2byte ITEM_FOCUS_BAND - .2byte ITEM_SCOPE_LENS - .2byte ITEM_CHOICE_BAND diff --git a/include/global.h b/include/global.h index 6a7f6396c..11611dc41 100644 --- a/include/global.h +++ b/include/global.h @@ -755,8 +755,9 @@ struct BattleTowerTrainer u8 trainerClass; u8 name[8]; u8 teamFlags; - u16 padding; - u16 easyChat[6]; + struct { + u16 easyChat[6]; + } greeting; }; struct BattleTowerRecord // record mixing diff --git a/ld_script.txt b/ld_script.txt index 7d4259136..a77356dd0 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -446,7 +446,6 @@ SECTIONS { src/field/decoration_inventory.o(.rodata); src/field/roamer.o(.rodata); src/battle_tower.o(.rodata); - data/battle_tower.o(.rodata); src/field/use_pokeblock.o(.rodata); src/battle/battle_controller_wally.o(.rodata); src/field/player_pc.o(.rodata); 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 --- asm/battle_tower.s | 823 ---------------------------------------------------- include/easy_chat.h | 1 + include/global.h | 18 +- include/pokemon.h | 46 +-- src/battle_tower.c | 508 ++++++++++++++++++++++++++++++++ 5 files changed, 546 insertions(+), 850 deletions(-) diff --git a/asm/battle_tower.s b/asm/battle_tower.s index 9c574eeb4..42cf56a7d 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -6,829 +6,6 @@ .text - thumb_func_start CheckMonBattleTowerBanlist -CheckMonBattleTowerBanlist: @ 8135200 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r2, [sp, 0x20] - ldr r4, [sp, 0x24] - mov r9, r4 - ldr r4, [sp, 0x28] - mov r10, r4 - ldr r7, [sp, 0x2C] - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r3, 24 - lsrs r3, 24 - mov r12, r3 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - movs r2, 0 - movs r0, 0xCE - lsls r0, 1 - cmp r4, r0 - beq _081352CE - cmp r4, 0 - beq _081352CE - ldr r0, _081352DC @ =gBattleTowerBanlist - ldrh r1, [r0] - ldr r5, _081352E0 @ =0x0000ffff - adds r3, r0, 0 - cmp r1, r5 - beq _08135264 - cmp r1, r4 - beq _08135258 - adds r1, r3, 0 -_0813524A: - adds r1, 0x2 - adds r2, 0x1 - ldrh r0, [r1] - cmp r0, r5 - beq _08135264 - cmp r0, r4 - bne _0813524A -_08135258: - lsls r0, r2, 1 - adds r0, r3 - ldrh r1, [r0] - ldr r0, _081352E0 @ =0x0000ffff - cmp r1, r0 - bne _081352CE -_08135264: - mov r0, r12 - cmp r0, 0 - bne _08135270 - mov r1, r8 - cmp r1, 0x32 - bhi _081352CE -_08135270: - movs r2, 0 - ldrb r3, [r7] - cmp r2, r3 - bge _08135290 - mov r1, r9 - ldrh r0, [r1] - cmp r0, r4 - beq _08135290 - adds r5, r3, 0 -_08135282: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, r5 - bge _08135290 - ldrh r0, [r1] - cmp r0, r4 - bne _08135282 -_08135290: - cmp r2, r3 - bne _081352CE - cmp r6, 0 - beq _081352BA - movs r2, 0 - cmp r2, r3 - bge _081352B6 - mov r1, r10 - ldrh r0, [r1] - cmp r0, r6 - beq _081352B6 - adds r5, r3, 0 -_081352A8: - adds r1, 0x2 - adds r2, 0x1 - cmp r2, r5 - bge _081352B6 - ldrh r0, [r1] - cmp r0, r6 - bne _081352A8 -_081352B6: - cmp r2, r3 - bne _081352CE -_081352BA: - lsls r0, r3, 1 - add r0, r9 - strh r4, [r0] - ldrb r0, [r7] - lsls r0, 1 - add r0, r10 - strh r6, [r0] - ldrb r0, [r7] - adds r0, 0x1 - strb r0, [r7] -_081352CE: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081352DC: .4byte gBattleTowerBanlist -_081352E0: .4byte 0x0000ffff - thumb_func_end CheckMonBattleTowerBanlist - - thumb_func_start CheckPartyBattleTowerBanlist -CheckPartyBattleTowerBanlist: @ 81352E4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x2C - add r1, sp, 0x28 - movs r0, 0 - strb r0, [r1] - movs r7, 0 - mov r9, r1 - add r0, sp, 0x1C - mov r10, r0 -_081352FE: - movs r0, 0x64 - adds r5, r7, 0 - muls r5, r0 - ldr r0, _081353C4 @ =gPlayerParty - adds r5, r0 - adds r0, r5, 0 - movs r1, 0x41 - bl GetMonData - mov r8, r0 - mov r1, r8 - lsls r1, 16 - lsrs r1, 16 - mov r8, r1 - adds r0, r5, 0 - movs r1, 0xC - bl GetMonData - adds r6, r0, 0 - lsls r6, 16 - lsrs r6, 16 - adds r0, r5, 0 - movs r1, 0x38 - bl GetMonData - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - movs r1, 0x39 - bl GetMonData - adds r2, r0, 0 - lsls r2, 16 - lsrs r2, 16 - ldr r5, _081353C8 @ =gScriptResult - ldrb r3, [r5] - str r4, [sp] - add r0, sp, 0x10 - str r0, [sp, 0x4] - mov r1, r10 - str r1, [sp, 0x8] - mov r0, r9 - str r0, [sp, 0xC] - mov r0, r8 - adds r1, r6, 0 - bl CheckMonBattleTowerBanlist - adds r7, 0x1 - cmp r7, 0x5 - ble _081352FE - mov r1, r9 - ldrb r0, [r1] - cmp r0, 0x2 - bhi _08135420 - ldr r1, _081353CC @ =gStringVar1 - movs r0, 0xFF - strb r0, [r1] - ldr r1, _081353D0 @ =gSpecialVar_0x8004 - movs r0, 0x1 - strh r0, [r1] - movs r0, 0 - mov r1, r9 - strb r0, [r1] - bl CountBattleTowerBanlistCaught - adds r6, r0, 0 - ldr r2, _081353D4 @ =gBattleTowerBanlist - ldrh r0, [r2] - ldr r1, _081353D8 @ =0x0000ffff - cmp r0, r1 - beq _081353A8 - mov r5, r9 - adds r7, r1, 0 - adds r4, r2, 0 -_08135394: - ldrh r0, [r4] - ldrb r1, [r5] - adds r2, r6, 0 - bl AppendBattleTowerBannedSpeciesName - strb r0, [r5] - adds r4, 0x2 - ldrh r0, [r4] - cmp r0, r7 - bne _08135394 -_081353A8: - mov r0, r9 - ldrb r1, [r0] - cmp r1, 0 - bne _081353E4 - ldr r4, _081353CC @ =gStringVar1 - ldr r1, _081353DC @ =gUnknown_08400E2C - adds r0, r4, 0 - bl StringAppend - ldr r1, _081353E0 @ =gUnknown_08400E32 - adds r0, r4, 0 - bl StringAppend - b _0813543E - .align 2, 0 -_081353C4: .4byte gPlayerParty -_081353C8: .4byte gScriptResult -_081353CC: .4byte gStringVar1 -_081353D0: .4byte gSpecialVar_0x8004 -_081353D4: .4byte gBattleTowerBanlist -_081353D8: .4byte 0x0000ffff -_081353DC: .4byte gUnknown_08400E2C -_081353E0: .4byte gUnknown_08400E32 -_081353E4: - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08135400 - ldr r0, _081353F8 @ =gStringVar1 - ldr r1, _081353FC @ =gUnknown_08400E2E - bl StringAppend - b _08135408 - .align 2, 0 -_081353F8: .4byte gStringVar1 -_081353FC: .4byte gUnknown_08400E2E -_08135400: - ldr r0, _08135414 @ =gStringVar1 - ldr r1, _08135418 @ =gUnknown_08400E2C - bl StringAppend -_08135408: - ldr r0, _08135414 @ =gStringVar1 - ldr r1, _0813541C @ =gUnknown_08400E36 - bl StringAppend - b _0813543E - .align 2, 0 -_08135414: .4byte gStringVar1 -_08135418: .4byte gUnknown_08400E2C -_0813541C: .4byte gUnknown_08400E36 -_08135420: - ldr r1, _08135450 @ =gSpecialVar_0x8004 - movs r0, 0 - strh r0, [r1] - ldr r2, _08135454 @ =gSaveBlock2 - ldrb r0, [r5] - ldr r1, _08135458 @ =0x00000554 - adds r2, r1 - movs r1, 0x1 - ands r1, r0 - ldrb r3, [r2] - movs r0, 0x2 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] -_0813543E: - add sp, 0x2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08135450: .4byte gSpecialVar_0x8004 -_08135454: .4byte gSaveBlock2 -_08135458: .4byte 0x00000554 - thumb_func_end CheckPartyBattleTowerBanlist - - thumb_func_start sub_813545C -sub_813545C: @ 813545C - push {lr} - adds r1, r0, 0 - ldr r0, _08135470 @ =gStringVar4 - movs r2, 0x2 - movs r3, 0x3 - bl sub_80EB544 - pop {r0} - bx r0 - .align 2, 0 -_08135470: .4byte gStringVar4 - thumb_func_end sub_813545C - - thumb_func_start sub_8135474 -sub_8135474: @ 8135474 - push {lr} - ldr r2, _08135490 @ =gSaveBlock2 - ldr r0, _08135494 @ =0x00000564 - adds r1, r2, r0 - ldrb r0, [r1] - cmp r0, 0xC8 - bne _08135498 - movs r1, 0x95 - lsls r1, 3 - adds r0, r2, r1 - bl sub_813545C - b _081354C4 - .align 2, 0 -_08135490: .4byte gSaveBlock2 -_08135494: .4byte 0x00000564 -_08135498: - cmp r0, 0x63 - bhi _081354B4 - ldrb r1, [r1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldr r1, _081354B0 @ =gBattleTowerTrainers + 0xC - adds r0, r1 - bl sub_813545C - b _081354C4 - .align 2, 0 -_081354B0: .4byte gBattleTowerTrainers + 0xC -_081354B4: - ldrb r1, [r1] - movs r0, 0xA4 - muls r0, r1 - ldr r3, _081354C8 @ =0xffffc14c - adds r1, r2, r3 - adds r0, r1 - bl sub_813545C -_081354C4: - pop {r0} - bx r0 - .align 2, 0 -_081354C8: .4byte 0xffffc14c - thumb_func_end sub_8135474 - - thumb_func_start sub_81354CC -sub_81354CC: @ 81354CC - push {r4,r5,lr} - sub sp, 0x4 - ldr r0, _081354E4 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x1 - beq _081354E8 - cmp r0, 0x1 - ble _08135520 - cmp r0, 0x2 - beq _0813551C - b _08135520 - .align 2, 0 -_081354E4: .4byte gSpecialVar_0x8004 -_081354E8: - movs r5, 0 -_081354EA: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _08135514 @ =gSaveBlock1 + 0x238 - adds r0, r4, r0 - movs r1, 0xC - bl GetMonData - mov r1, sp - strh r0, [r1] - ldr r0, _08135518 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData - adds r5, 0x1 - cmp r5, 0x5 - ble _081354EA - b _08135520 - .align 2, 0 -_08135514: .4byte gSaveBlock1 + 0x238 -_08135518: .4byte gPlayerParty -_0813551C: - bl sub_81360D0 -_08135520: - ldr r0, _08135530 @ =c2_exit_to_overworld_1_continue_scripts_restart_music - bl SetMainCallback2 - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08135530: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music - thumb_func_end sub_81354CC - - thumb_func_start sub_8135534 -sub_8135534: @ 8135534 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl IsBattleTransitionDone - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08135558 - ldr r0, _08135560 @ =gMain - ldr r1, _08135564 @ =sub_81354CC - str r1, [r0, 0x8] - ldr r0, _08135568 @ =sub_800E7C4 - bl SetMainCallback2 - adds r0, r4, 0 - bl DestroyTask -_08135558: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08135560: .4byte gMain -_08135564: .4byte sub_81354CC -_08135568: .4byte sub_800E7C4 - thumb_func_end sub_8135534 - - thumb_func_start sub_813556C -sub_813556C: @ 813556C - push {r4,r5,lr} - sub sp, 0x4 - ldr r0, _08135584 @ =gSpecialVar_0x8004 - ldrh r2, [r0] - cmp r2, 0x1 - beq _081355AC - cmp r2, 0x1 - bgt _08135588 - cmp r2, 0 - beq _0813558E - b _08135648 - .align 2, 0 -_08135584: .4byte gSpecialVar_0x8004 -_08135588: - cmp r2, 0x2 - beq _08135600 - b _08135648 -_0813558E: - ldr r1, _081355A4 @ =gBattleTypeFlags - movs r3, 0x84 - lsls r3, 1 - adds r0, r3, 0 - strh r0, [r1] - ldr r0, _081355A8 @ =gTrainerBattleOpponent - strh r2, [r0] - bl sub_8134DD4 - b _081355D6 - .align 2, 0 -_081355A4: .4byte gBattleTypeFlags -_081355A8: .4byte gTrainerBattleOpponent -_081355AC: - movs r5, 0 -_081355AE: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _081355F4 @ =gPlayerParty - adds r0, r4, r0 - movs r1, 0xC - bl GetMonData - mov r1, sp - strh r0, [r1] - ldr r0, _081355F8 @ =gSaveBlock1 + 0x238 - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xC - mov r2, sp - bl SetMonData - adds r5, 0x1 - cmp r5, 0x5 - ble _081355AE -_081355D6: - ldr r0, _081355FC @ =sub_8135534 - movs r1, 0x1 - bl CreateTask - movs r0, 0 - bl current_map_music_set__default_for_battle - bl BattleSetup_GetBattleTowerBattleTransition - lsls r0, 24 - lsrs r0, 24 - bl BattleTransition_StartOnField - b _08135648 - .align 2, 0 -_081355F4: .4byte gPlayerParty -_081355F8: .4byte gSaveBlock1 + 0x238 -_081355FC: .4byte sub_8135534 -_08135600: - bl ZeroEnemyPartyMons - movs r5, 0 -_08135606: - movs r0, 0x64 - muls r0, r5 - ldr r1, _08135650 @ =gEnemyParty - adds r0, r1 - movs r1, 0x2C - muls r1, r5 - ldr r2, _08135654 @ =gSaveBlock2 + 0x4CC - adds r1, r2 - bl sub_803ADE8 - adds r5, 0x1 - cmp r5, 0x2 - ble _08135606 - ldr r1, _08135658 @ =gBattleTypeFlags - ldr r2, _0813565C @ =0x00000808 - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08135660 @ =gTrainerBattleOpponent - movs r0, 0 - strh r0, [r1] - ldr r0, _08135664 @ =sub_8135534 - movs r1, 0x1 - bl CreateTask - movs r0, 0 - bl current_map_music_set__default_for_battle - bl BattleSetup_GetBattleTowerBattleTransition - lsls r0, 24 - lsrs r0, 24 - bl BattleTransition_StartOnField -_08135648: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08135650: .4byte gEnemyParty -_08135654: .4byte gSaveBlock2 + 0x4CC -_08135658: .4byte gBattleTypeFlags -_0813565C: .4byte 0x00000808 -_08135660: .4byte gTrainerBattleOpponent -_08135664: .4byte sub_8135534 - thumb_func_end sub_813556C - - thumb_func_start sub_8135668 -sub_8135668: @ 8135668 - push {r4,r5,lr} - ldr r1, _0813568C @ =gSaveBlock2 - ldr r2, _08135690 @ =0x00000554 - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r4, r0, 31 - ldr r0, _08135694 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - adds r5, r1, 0 - cmp r0, 0xE - bls _08135682 - b _0813589A -_08135682: - lsls r0, 2 - ldr r1, _08135698 @ =_0813569C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0813568C: .4byte gSaveBlock2 -_08135690: .4byte 0x00000554 -_08135694: .4byte gSpecialVar_0x8004 -_08135698: .4byte _0813569C - .align 2, 0 -_0813569C: - .4byte _081356D8 - .4byte _08135700 - .4byte _0813571C - .4byte _08135726 - .4byte _08135740 - .4byte _08135754 - .4byte _08135774 - .4byte _081357D0 - .4byte _081357FC - .4byte _0813589A - .4byte _08135820 - .4byte _08135834 - .4byte _0813584C - .4byte _0813586C - .4byte _08135888 -_081356D8: - ldr r0, _081356F0 @ =0x02000000 - ldr r3, _081356F4 @ =0x00000556 - adds r1, r5, r3 - adds r1, r4, r1 - ldrb r2, [r1] - ldr r3, _081356F8 @ =0x000160fb - adds r0, r3 - strb r2, [r0] - ldr r0, _081356FC @ =gSpecialVar_0x8005 - ldrh r0, [r0] - b _08135898 - .align 2, 0 -_081356F0: .4byte 0x02000000 -_081356F4: .4byte 0x00000556 -_081356F8: .4byte 0x000160fb -_081356FC: .4byte gSpecialVar_0x8005 -_08135700: - ldr r0, _08135714 @ =gSpecialVar_0x8005 - ldrb r0, [r0] - ldr r1, _08135718 @ =0x00000554 - adds r3, r5, r1 - movs r1, 0x1 - ands r1, r0 - ldrb r2, [r3] - movs r0, 0x2 - negs r0, r0 - b _08135810 - .align 2, 0 -_08135714: .4byte gSpecialVar_0x8005 -_08135718: .4byte 0x00000554 -_0813571C: - lsls r1, r4, 1 - movs r2, 0xAB - lsls r2, 3 - adds r0, r5, r2 - b _0813572C -_08135726: - lsls r1, r4, 1 - ldr r3, _08135738 @ =0x0000055c - adds r0, r5, r3 -_0813572C: - adds r1, r0 - ldr r0, _0813573C @ =gSpecialVar_0x8005 - ldrh r0, [r0] - strh r0, [r1] - b _0813589A - .align 2, 0 -_08135738: .4byte 0x0000055c -_0813573C: .4byte gSpecialVar_0x8005 -_08135740: - ldr r0, _0813574C @ =gSpecialVar_0x8005 - ldrh r1, [r0] - ldr r2, _08135750 @ =0x00000564 - adds r0, r5, r2 - strb r1, [r0] - b _0813589A - .align 2, 0 -_0813574C: .4byte gSpecialVar_0x8005 -_08135750: .4byte 0x00000564 -_08135754: - movs r2, 0 - ldr r4, _0813576C @ =gSaveBlock2 + 0x565 - ldr r3, _08135770 @ =gSelectedOrderFromParty -_0813575A: - adds r0, r2, r4 - adds r1, r2, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x2 - ble _0813575A - b _0813589A - .align 2, 0 -_0813576C: .4byte gSaveBlock2 + 0x565 -_08135770: .4byte gSelectedOrderFromParty -_08135774: - ldr r3, _081357C0 @ =0x00000564 - adds r0, r5, r3 - ldrb r0, [r0] - cmp r0, 0xC8 - bne _08135788 - movs r1, 0x93 - lsls r1, 3 - adds r0, r5, r1 - bl sub_81360AC -_08135788: - movs r3, 0xAE - lsls r3, 3 - adds r2, r5, r3 - ldrh r1, [r2] - ldr r0, _081357C4 @ =0x0000270e - cmp r1, r0 - bhi _0813579A - adds r0, r1, 0x1 - strh r0, [r2] -_0813579A: - lsls r4, 1 - movs r1, 0xAB - lsls r1, 3 - adds r0, r5, r1 - adds r4, r0 - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - bl sub_8135A3C - ldr r1, _081357C8 @ =gScriptResult - ldrh r0, [r4] - strh r0, [r1] - ldr r1, _081357CC @ =gStringVar1 - adds r0, 0xA1 - strb r0, [r1] - movs r0, 0xFF - strb r0, [r1, 0x1] - b _0813589A - .align 2, 0 -_081357C0: .4byte 0x00000564 -_081357C4: .4byte 0x0000270e -_081357C8: .4byte gScriptResult -_081357CC: .4byte gStringVar1 -_081357D0: - lsls r0, r4, 1 - ldr r2, _081357F0 @ =0x0000055c - adds r1, r5, r2 - adds r4, r0, r1 - ldrh r1, [r4] - ldr r0, _081357F4 @ =0x00000595 - cmp r1, r0 - bhi _081357E4 - adds r0, r1, 0x1 - strh r0, [r4] -_081357E4: - bl sub_8135A3C - ldr r1, _081357F8 @ =gScriptResult - ldrh r0, [r4] - strh r0, [r1] - b _0813589A - .align 2, 0 -_081357F0: .4byte 0x0000055c -_081357F4: .4byte 0x00000595 -_081357F8: .4byte gScriptResult -_081357FC: - ldr r0, _08135818 @ =gSpecialVar_0x8005 - ldrb r0, [r0] - ldr r1, _0813581C @ =0x00000554 - adds r3, r5, r1 - movs r1, 0x1 - ands r1, r0 - lsls r1, 1 - ldrb r2, [r3] - movs r0, 0x3 - negs r0, r0 -_08135810: - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - b _0813589A - .align 2, 0 -_08135818: .4byte gSpecialVar_0x8005 -_0813581C: .4byte 0x00000554 -_08135820: - ldr r2, _08135830 @ =0x00000572 - adds r0, r5, r2 - ldrh r1, [r0] - movs r0, 0x20 - bl SetGameStat - b _0813589A - .align 2, 0 -_08135830: .4byte 0x00000572 -_08135834: - ldr r3, _08135848 @ =0x00000556 - adds r0, r5, r3 - adds r0, r4, r0 - ldrb r0, [r0] - cmp r0, 0x3 - beq _0813589A - adds r0, r4, 0 - bl sub_813461C - b _0813589A - .align 2, 0 -_08135848: .4byte 0x00000556 -_0813584C: - ldr r1, _08135860 @ =0x00000556 - adds r0, r5, r1 - adds r0, r4, r0 - ldr r1, _08135864 @ =0x02000000 - ldr r2, _08135868 @ =0x000160fb - adds r1, r2 - ldrb r1, [r1] - strb r1, [r0] - b _0813589A - .align 2, 0 -_08135860: .4byte 0x00000556 -_08135864: .4byte 0x02000000 -_08135868: .4byte 0x000160fb -_0813586C: - adds r0, r4, 0 - bl sub_8135D3C - ldr r1, _08135880 @ =gSaveBlock2 - lsls r2, r4, 1 - ldr r3, _08135884 @ =0x00000574 - adds r1, r3 - adds r2, r1 - strh r0, [r2] - b _0813589A - .align 2, 0 -_08135880: .4byte gSaveBlock2 -_08135884: .4byte 0x00000574 -_08135888: - ldr r1, _081358A0 @ =0x00000554 - adds r0, r5, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - movs r2, 0xAF - lsls r2, 3 - adds r1, r5, r2 -_08135898: - strb r0, [r1] -_0813589A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_081358A0: .4byte 0x00000554 - thumb_func_end sub_8135668 - thumb_func_start sub_81358A4 sub_81358A4: @ 81358A4 push {r4,lr} diff --git a/include/easy_chat.h b/include/easy_chat.h index 8a820353f..b59adedd5 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -1080,6 +1080,7 @@ u8 sub_80EB868(u8); void sub_80EB890(u8); u8 sub_80EB8C0(void); u16 sub_80EB8EC(void); +u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3); #if GERMAN u32 de_sub_80EB748(u32, u32); diff --git a/include/global.h b/include/global.h index 11611dc41..1431bf772 100644 --- a/include/global.h +++ b/include/global.h @@ -766,8 +766,11 @@ struct BattleTowerRecord // record mixing /*0x01*/u8 trainerClass; /*0x02*/u16 var_2; /*0x04*/u8 name[8]; - /*0x0C*/u8 var_C[5]; - u8 filler[0x93]; + /*0x0C*/u8 var_C[4]; + /*0x10*/struct { + u16 easyChat[6]; + } greeting; + /*0x1C*/u8 filler[0x87]; }; struct BattleTowerEReaderTrainer @@ -775,8 +778,14 @@ struct BattleTowerEReaderTrainer /*0x00*/u8 unk0; /*0x01*/u8 trainerClass; /*0x02*/u16 filler_2; - /*0x04*/u8 name[8]; - /*0x0B*/u8 ereaderTrainer[0xB0]; + /*0x04*/u8 name[7]; + /*0x0B*/u8 filler_B[0x5]; + /*0x10*/struct { + u16 easyChat[6]; + } greeting; + /*0x1C*/u8 filler_1C[0x18]; + /*0x34*/struct UnknownPokemonStruct party[3]; + /*0xB8*/u32 unk_B0; }; struct SaveBlock2_Sub @@ -788,6 +797,7 @@ struct SaveBlock2_Sub /*0x03DC, 0x0484*/ u8 filler_3DC[0x14]; /*0x03F0, 0x0498*/ struct BattleTowerEReaderTrainer ereaderTrainer; /*0x04AC, 0x0554*/ u8 battleTowerLevelType:1; // 0 = level 50; 1 = level 100 + /*0x04AC, 0x0554*/ u8 unk_554:1; /*0x04AD, 0x0555*/ u8 var_4AD; // used by tv, but ultimately does nothing, since both code paths are identical /*0x04AE, 0x0556*/ u8 var_4AE[2]; /*0x04B0, 0x0558*/ u16 var_4B0[2]; diff --git a/include/pokemon.h b/include/pokemon.h index 4c3e27609..554d18aa6 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -288,29 +288,29 @@ struct Pokemon struct UnknownPokemonStruct { - u16 species; - u16 heldItem; - u16 moves[4]; - u8 level; - u8 ppBonuses; - u8 hpEV; - u8 attackEV; - u8 defenseEV; - u8 speedEV; - u8 spAttackEV; - u8 spDefenseEV; - u32 otId; - u32 hpIV:5; - u32 attackIV:5; - u32 defenseIV:5; - u32 speedIV:5; - u32 spAttackIV:5; - u32 spDefenseIV:5; - u32 gap:1; - u32 altAbility:1; - u32 personality; - u8 nickname[POKEMON_NAME_LENGTH + 1]; - u8 friendship; + /*0x00*/u16 species; + /*0x02*/u16 heldItem; + /*0x04*/u16 moves[4]; + /*0x0C*/u8 level; + /*0x0D*/u8 ppBonuses; + /*0x0E*/u8 hpEV; + /*0x0F*/u8 attackEV; + /*0x10*/u8 defenseEV; + /*0x11*/u8 speedEV; + /*0x12*/u8 spAttackEV; + /*0x13*/u8 spDefenseEV; + /*0x14*/u32 otId; + /*0x18*/u32 hpIV:5; + /*0x18*/u32 attackIV:5; + /*0x19*/u32 defenseIV:5; + /*0x19*/u32 speedIV:5; + /*0x1A*/u32 spAttackIV:5; + /*0x1A*/u32 spDefenseIV:5; + /*0x1B*/u32 gap:1; + /*0x1B*/u32 altAbility:1; + /*0x1C*/u32 personality; + /*0x20*/u8 nickname[POKEMON_NAME_LENGTH + 1]; + /*0x2B*/u8 friendship; }; struct BattlePokemon 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 --- asm/battle_tower.s | 801 ---------------------------------------------- include/global.h | 26 +- src/battle_tower.c | 470 ++++++++++++++++++++++++++- src/engine/trainer_card.c | 2 +- src/field/easy_chat.c | 10 +- src/field/tv.c | 2 +- 6 files changed, 488 insertions(+), 823 deletions(-) diff --git a/asm/battle_tower.s b/asm/battle_tower.s index 42cf56a7d..6d66a8849 100644 --- a/asm/battle_tower.s +++ b/asm/battle_tower.s @@ -6,807 +6,6 @@ .text - thumb_func_start sub_81358A4 -sub_81358A4: @ 81358A4 - push {r4,lr} - ldr r1, _081358C8 @ =gSaveBlock2 - ldr r2, _081358CC @ =0x00000554 - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 31 - lsrs r4, r0, 31 - ldr r0, _081358D0 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - adds r3, r1, 0 - cmp r0, 0xE - bls _081358BE - b _08135A0A -_081358BE: - lsls r0, 2 - ldr r1, _081358D4 @ =_081358D8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081358C8: .4byte gSaveBlock2 -_081358CC: .4byte 0x00000554 -_081358D0: .4byte gSpecialVar_0x8004 -_081358D4: .4byte _081358D8 - .align 2, 0 -_081358D8: - .4byte _08135914 - .4byte _08135928 - .4byte _0813593C - .4byte _0813594C - .4byte _08135964 - .4byte _08135A0A - .4byte _08135A0A - .4byte _08135A0A - .4byte _08135978 - .4byte _08135990 - .4byte _081359A0 - .4byte _081359B4 - .4byte _081359BC - .4byte _081359DC - .4byte _081359F8 -_08135914: - ldr r0, _08135920 @ =gScriptResult - ldr r2, _08135924 @ =0x00000556 - adds r1, r3, r2 - adds r1, r4, r1 - b _0813596A - .align 2, 0 -_08135920: .4byte gScriptResult -_08135924: .4byte 0x00000556 -_08135928: - ldr r1, _08135934 @ =gScriptResult - ldr r4, _08135938 @ =0x00000554 - adds r0, r3, r4 - ldrb r0, [r0] - lsls r0, 31 - b _08135982 - .align 2, 0 -_08135934: .4byte gScriptResult -_08135938: .4byte 0x00000554 -_0813593C: - ldr r2, _08135948 @ =gScriptResult - lsls r0, r4, 1 - movs r4, 0xAB - lsls r4, 3 - b _08135952 - .align 2, 0 -_08135948: .4byte gScriptResult -_0813594C: - ldr r2, _0813595C @ =gScriptResult - lsls r0, r4, 1 - ldr r4, _08135960 @ =0x0000055c -_08135952: - adds r1, r3, r4 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2] - b _08135A0A - .align 2, 0 -_0813595C: .4byte gScriptResult -_08135960: .4byte 0x0000055c -_08135964: - ldr r0, _08135970 @ =gScriptResult - ldr r2, _08135974 @ =0x00000564 - adds r1, r3, r2 -_0813596A: - ldrb r1, [r1] - strh r1, [r0] - b _08135A0A - .align 2, 0 -_08135970: .4byte gScriptResult -_08135974: .4byte 0x00000564 -_08135978: - ldr r1, _08135988 @ =gScriptResult - ldr r4, _0813598C @ =0x00000554 - adds r0, r3, r4 - ldrb r0, [r0] - lsls r0, 30 -_08135982: - lsrs r0, 31 - strh r0, [r1] - b _08135A0A - .align 2, 0 -_08135988: .4byte gScriptResult -_0813598C: .4byte 0x00000554 -_08135990: - adds r0, r4, 0 - bl sub_8135D3C - ldr r1, _0813599C @ =gScriptResult - strh r0, [r1] - b _08135A0A - .align 2, 0 -_0813599C: .4byte gScriptResult -_081359A0: - ldr r1, _081359B0 @ =0x00000572 - adds r0, r3, r1 - ldrh r1, [r0] - movs r0, 0x20 - bl SetGameStat - b _08135A0A - .align 2, 0 -_081359B0: .4byte 0x00000572 -_081359B4: - adds r0, r4, 0 - bl sub_813461C - b _08135A0A -_081359BC: - ldr r2, _081359D0 @ =0x00000556 - adds r0, r3, r2 - adds r0, r4, r0 - ldr r1, _081359D4 @ =0x02000000 - ldr r3, _081359D8 @ =0x000160fb - adds r1, r3 - ldrb r1, [r1] - strb r1, [r0] - b _08135A0A - .align 2, 0 -_081359D0: .4byte 0x00000556 -_081359D4: .4byte 0x02000000 -_081359D8: .4byte 0x000160fb -_081359DC: - adds r0, r4, 0 - bl sub_8135D3C - ldr r1, _081359F0 @ =gSaveBlock2 - lsls r2, r4, 1 - ldr r4, _081359F4 @ =0x00000574 - adds r1, r4 - adds r2, r1 - strh r0, [r2] - b _08135A0A - .align 2, 0 -_081359F0: .4byte gSaveBlock2 -_081359F4: .4byte 0x00000574 -_081359F8: - ldr r1, _08135A10 @ =0x00000554 - adds r0, r3, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - movs r2, 0xAF - lsls r2, 3 - adds r1, r3, r2 - strb r0, [r1] -_08135A0A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08135A10: .4byte 0x00000554 - thumb_func_end sub_81358A4 - - thumb_func_start sub_8135A14 -sub_8135A14: @ 8135A14 - push {r4,lr} - movs r2, 0 - ldr r4, _08135A34 @ =gSelectedOrderFromParty - ldr r3, _08135A38 @ =gSaveBlock2 + 0x565 -_08135A1C: - adds r0, r2, r4 - adds r1, r2, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x2 - ble _08135A1C - bl ReducePlayerPartyToThree - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08135A34: .4byte gSelectedOrderFromParty -_08135A38: .4byte gSaveBlock2 + 0x565 - thumb_func_end sub_8135A14 - - thumb_func_start sub_8135A3C -sub_8135A3C: @ 8135A3C - push {r4-r6,lr} - ldr r6, _08135A84 @ =gSaveBlock2 - ldr r1, _08135A88 @ =0x00000554 - adds r0, r6, r1 - ldrb r4, [r0] - lsls r4, 31 - lsrs r4, 31 - adds r0, r4, 0 - bl sub_8135D3C - lsls r0, 16 - lsrs r5, r0, 16 - lsls r4, 1 - movs r3, 0xAC - lsls r3, 3 - adds r2, r6, r3 - adds r4, r2 - ldrh r0, [r4] - cmp r0, r5 - bcs _08135A66 - strh r5, [r4] -_08135A66: - ldr r0, _08135A8C @ =0x00000562 - adds r1, r6, r0 - ldrh r0, [r2] - ldrh r3, [r1] - cmp r0, r3 - bls _08135A94 - adds r5, r0, 0 - movs r0, 0x20 - adds r1, r5, 0 - bl SetGameStat - ldr r1, _08135A90 @ =0x0000270f - cmp r5, r1 - bhi _08135AA4 - b _08135AB4 - .align 2, 0 -_08135A84: .4byte gSaveBlock2 -_08135A88: .4byte 0x00000554 -_08135A8C: .4byte 0x00000562 -_08135A90: .4byte 0x0000270f -_08135A94: - ldrh r5, [r1] - movs r0, 0x20 - adds r1, r5, 0 - bl SetGameStat - ldr r1, _08135AAC @ =0x0000270f - cmp r5, r1 - bls _08135AB4 -_08135AA4: - ldr r2, _08135AB0 @ =0x00000572 - adds r0, r6, r2 - strh r1, [r0] - b _08135ABA - .align 2, 0 -_08135AAC: .4byte 0x0000270f -_08135AB0: .4byte 0x00000572 -_08135AB4: - ldr r3, _08135AC0 @ =0x00000572 - adds r0, r6, r3 - strh r5, [r0] -_08135ABA: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08135AC0: .4byte 0x00000572 - thumb_func_end sub_8135A3C - - thumb_func_start sub_8135AC4 -sub_8135AC4: @ 8135AC4 - push {r4-r6,lr} - ldr r5, _08135AF0 @ =gSaveBlock2 + 0xA8 - adds r2, r5, 0 - subs r2, 0xA8 - ldr r1, _08135AF4 @ =0x000004ac - adds r0, r5, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r6, r0, 31 - ldrb r0, [r2, 0x8] - cmp r0, 0 - beq _08135AFC - ldr r4, _08135AF8 @ =gUnknown_08405E7E - ldrb r0, [r2, 0xA] - ldrb r1, [r2, 0xB] - adds r0, r1 - ldrb r1, [r2, 0xC] - adds r0, r1 - ldrb r1, [r2, 0xD] - adds r0, r1 - movs r1, 0x14 - b _08135B0E - .align 2, 0 -_08135AF0: .4byte gSaveBlock2 + 0xA8 -_08135AF4: .4byte 0x000004ac -_08135AF8: .4byte gUnknown_08405E7E -_08135AFC: - ldr r4, _08135B84 @ =gUnknown_08405E60 - ldrb r0, [r2, 0xA] - ldrb r1, [r2, 0xB] - adds r0, r1 - ldrb r1, [r2, 0xC] - adds r0, r1 - ldrb r1, [r2, 0xD] - adds r0, r1 - movs r1, 0x1E -_08135B0E: - bl __umodsi3 - adds r0, r4 - ldrb r0, [r0] - strb r6, [r5] - strb r0, [r5, 0x1] - adds r0, r5, 0 - adds r0, 0xC - ldr r4, _08135B88 @ =gSaveBlock2 + 0xA - adds r1, r4, 0 - bl copy_word_to_mem - adds r0, r5, 0x4 - subs r4, 0xA - adds r1, r4, 0 - bl StringCopy8 - adds r0, r6, 0 - bl sub_8135D3C - strh r0, [r5, 0x2] - ldr r0, _08135B8C @ =gSaveBlock1 - ldr r1, _08135B90 @ =0x00002b28 - adds r2, r0, r1 - adds r1, r5, 0 - adds r1, 0x10 - movs r4, 0x5 -_08135B44: - ldrh r0, [r2] - strh r0, [r1] - adds r2, 0x2 - adds r1, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _08135B44 - movs r4, 0 - ldr r6, _08135B94 @ =gSaveBlock2 + 0x565 -_08135B56: - adds r0, r4, r6 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _08135B98 @ =gUnknown_030042FC - adds r0, r1 - movs r1, 0x2C - muls r1, r4 - adds r1, 0x1C - adds r1, r5, r1 - bl sub_803AF78 - adds r4, 0x1 - cmp r4, 0x2 - ble _08135B56 - ldr r0, _08135B9C @ =gSaveBlock2 + 0xA8 - bl sub_8135CC4 - bl sub_8135A3C - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08135B84: .4byte gUnknown_08405E60 -_08135B88: .4byte gSaveBlock2 + 0xA -_08135B8C: .4byte gSaveBlock1 -_08135B90: .4byte 0x00002b28 -_08135B94: .4byte gSaveBlock2 + 0x565 -_08135B98: .4byte gUnknown_030042FC -_08135B9C: .4byte gSaveBlock2 + 0xA8 - thumb_func_end sub_8135AC4 - - thumb_func_start sub_8135BA0 -sub_8135BA0: @ 8135BA0 - push {r4,r5,lr} - ldr r2, _08135C1C @ =gSaveBlock2 - ldr r1, _08135C20 @ =0x00000554 - adds r0, r2, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r5, r0, 31 - ldr r0, _08135C24 @ =gSpecialVar_0x8004 - ldrh r0, [r0] - cmp r0, 0x3 - beq _08135BBA - cmp r0, 0 - bne _08135BD8 -_08135BBA: - lsls r1, r5, 1 - ldr r3, _08135C28 @ =0x0000055c - adds r0, r2, r3 - adds r0, r1, r0 - ldrh r0, [r0] - cmp r0, 0x1 - bhi _08135BD4 - subs r3, 0x4 - adds r0, r2, r3 - adds r0, r1, r0 - ldrh r0, [r0] - cmp r0, 0x1 - bls _08135BD8 -_08135BD4: - bl sub_8135AC4 -_08135BD8: - bl sub_8135CFC - ldr r4, _08135C1C @ =gSaveBlock2 - ldr r0, _08135C2C @ =gBattleOutcome - ldrb r1, [r0] - ldr r2, _08135C30 @ =0x00000555 - adds r0, r4, r2 - strb r1, [r0] - ldr r0, _08135C24 @ =gSpecialVar_0x8004 - ldrh r1, [r0] - cmp r1, 0x3 - beq _08135BF8 - ldr r3, _08135C34 @ =0x00000556 - adds r0, r4, r3 - adds r0, r5, r0 - strb r1, [r0] -_08135BF8: - movs r0, 0x80 - lsls r0, 7 - movs r1, 0 - bl VarSet - ldr r0, _08135C20 @ =0x00000554 - adds r2, r4, r0 - ldrb r0, [r2] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r2] - movs r0, 0x2 - bl TrySavingData - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08135C1C: .4byte gSaveBlock2 -_08135C20: .4byte 0x00000554 -_08135C24: .4byte gSpecialVar_0x8004 -_08135C28: .4byte 0x0000055c -_08135C2C: .4byte gBattleOutcome -_08135C30: .4byte 0x00000555 -_08135C34: .4byte 0x00000556 - thumb_func_end sub_8135BA0 - - thumb_func_start sub_8135C38 -sub_8135C38: @ 8135C38 - push {lr} - bl DoSoftReset - pop {r0} - bx r0 - thumb_func_end sub_8135C38 - - thumb_func_start sub_8135C44 -sub_8135C44: @ 8135C44 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r3, 0 - movs r1, 0 - ldr r2, _08135CBC @ =gSaveBlock2 + 0xA8 -_08135C50: - ldm r2!, {r0} - adds r3, r0 - adds r1, 0x1 - cmp r1, 0x27 - bls _08135C50 - ldr r5, _08135CC0 @ =gSaveBlock2 - movs r1, 0xA4 - lsls r1, 1 - adds r0, r5, r1 - ldr r0, [r0] - cmp r0, r3 - beq _08135C70 - adds r0, r5, 0 - adds r0, 0xA8 - bl sub_8135CE8 -_08135C70: - movs r4, 0 - movs r7, 0xA4 - movs r0, 0xA6 - lsls r0, 1 - adds r6, r5, r0 - mov r8, r5 -_08135C7C: - adds r0, r4, 0 - muls r0, r7 - movs r3, 0 - movs r1, 0 - adds r5, r4, 0x1 - adds r2, r0, r6 -_08135C88: - ldm r2!, {r0} - adds r3, r0 - adds r1, 0x1 - cmp r1, 0x27 - bls _08135C88 - adds r1, r4, 0 - muls r1, r7 - movs r0, 0xF6 - lsls r0, 1 - add r0, r8 - adds r0, r1, r0 - ldr r0, [r0] - cmp r0, r3 - beq _08135CAA - adds r0, r1, r6 - bl sub_8135CE8 -_08135CAA: - adds r4, r5, 0 - cmp r4, 0x4 - ble _08135C7C - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08135CBC: .4byte gSaveBlock2 + 0xA8 -_08135CC0: .4byte gSaveBlock2 - thumb_func_end sub_8135C44 - - thumb_func_start sub_8135CC4 -sub_8135CC4: @ 8135CC4 - push {r4,lr} - adds r2, r0, 0 - adds r2, 0xA0 - movs r1, 0 - str r1, [r2] - movs r3, 0 - adds r4, r0, 0 -_08135CD2: - ldr r0, [r2] - ldm r4!, {r1} - adds r0, r1 - str r0, [r2] - adds r3, 0x1 - cmp r3, 0x27 - bls _08135CD2 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8135CC4 - - thumb_func_start sub_8135CE8 -sub_8135CE8: @ 8135CE8 - push {lr} - movs r1, 0 - movs r2, 0 -_08135CEE: - stm r0!, {r2} - adds r1, 0x1 - cmp r1, 0x28 - bls _08135CEE - pop {r0} - bx r0 - thumb_func_end sub_8135CE8 - - thumb_func_start sub_8135CFC -sub_8135CFC: @ 8135CFC - push {r4,lr} - ldr r4, _08135D34 @ =gSaveBlock2 + 0x484 - adds r0, r4, 0 - bl get_trainer_name - ldr r2, _08135D38 @ =gBattleMons - adds r0, r2, 0 - adds r0, 0x58 - ldrh r1, [r0] - subs r0, r4, 0x2 - strh r1, [r0] - ldrh r1, [r2] - subs r0, r4, 0x4 - strh r1, [r0] - movs r3, 0 - adds r4, 0x8 - adds r2, 0x30 -_08135D1E: - adds r0, r3, r4 - adds r1, r3, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r3, 0x1 - cmp r3, 0x9 - ble _08135D1E - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08135D34: .4byte gSaveBlock2 + 0x484 -_08135D38: .4byte gBattleMons - thumb_func_end sub_8135CFC - - thumb_func_start sub_8135D3C -sub_8135D3C: @ 8135D3C - push {lr} - lsls r0, 24 - ldr r3, _08135D74 @ =gSaveBlock2 - lsrs r0, 23 - ldr r2, _08135D78 @ =0x0000055c - adds r1, r3, r2 - adds r1, r0, r1 - ldrh r2, [r1] - subs r2, 0x1 - lsls r1, r2, 3 - subs r1, r2 - movs r2, 0xAB - lsls r2, 3 - adds r3, r2 - adds r0, r3 - ldr r2, _08135D7C @ =0x0000ffff - adds r1, r2 - ldrh r0, [r0] - adds r1, r0 - lsls r1, 16 - lsrs r0, r1, 16 - ldr r1, _08135D80 @ =0x0000270f - cmp r0, r1 - bls _08135D6E - adds r0, r1, 0 -_08135D6E: - pop {r1} - bx r1 - .align 2, 0 -_08135D74: .4byte gSaveBlock2 -_08135D78: .4byte 0x0000055c -_08135D7C: .4byte 0x0000ffff -_08135D80: .4byte 0x0000270f - thumb_func_end sub_8135D3C - - thumb_func_start sub_8135D84 -sub_8135D84: @ 8135D84 - push {r4,r5,lr} - ldr r5, _08135DB0 @ =gSaveBlock2 - ldr r1, _08135DB4 @ =0x00000554 - adds r0, r5, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - lsls r0, 1 - ldr r2, _08135DB8 @ =0x0000055c - adds r1, r5, r2 - adds r0, r1 - ldrh r0, [r0] - subs r0, 0x1 - cmp r0, 0x5 - ble _08135DC0 - bl Random - ldr r4, _08135DBC @ =gUnknown_08405EE6 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x9 - b _08135DCC - .align 2, 0 -_08135DB0: .4byte gSaveBlock2 -_08135DB4: .4byte 0x00000554 -_08135DB8: .4byte 0x0000055c -_08135DBC: .4byte gUnknown_08405EE6 -_08135DC0: - bl Random - ldr r4, _08135DE8 @ =gUnknown_08405EDA - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x6 -_08135DCC: - bl __umodsi3 - lsls r0, 16 - lsrs r0, 15 - adds r0, r4 - ldrh r1, [r0] - movs r2, 0xAD - lsls r2, 3 - adds r0, r5, r2 - strh r1, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08135DE8: .4byte gUnknown_08405EDA - thumb_func_end sub_8135D84 - - thumb_func_start sub_8135DEC -sub_8135DEC: @ 8135DEC - push {r4-r7,lr} - ldr r5, _08135E20 @ =gSaveBlock2 - ldr r1, _08135E24 @ =0x00000554 - adds r0, r5, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r7, r0, 31 - movs r0, 0xAD - lsls r0, 3 - adds r6, r5, r0 - ldrh r0, [r6] - movs r1, 0x1 - bl AddBagItem - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x1 - bne _08135E30 - ldrh r0, [r6] - ldr r1, _08135E28 @ =gStringVar1 - bl CopyItemName - ldr r0, _08135E2C @ =gScriptResult - strh r4, [r0] - b _08135E40 - .align 2, 0 -_08135E20: .4byte gSaveBlock2 -_08135E24: .4byte 0x00000554 -_08135E28: .4byte gStringVar1 -_08135E2C: .4byte gScriptResult -_08135E30: - ldr r1, _08135E48 @ =gScriptResult - movs r0, 0 - strh r0, [r1] - ldr r1, _08135E4C @ =0x00000556 - adds r0, r5, r1 - adds r0, r7, r0 - movs r1, 0x6 - strb r1, [r0] -_08135E40: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08135E48: .4byte gScriptResult -_08135E4C: .4byte 0x00000556 - thumb_func_end sub_8135DEC - - thumb_func_start sub_8135E50 -sub_8135E50: @ 8135E50 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r6, _08135ED4 @ =gSaveBlock2 - ldr r1, _08135ED8 @ =0x00000554 - adds r0, r6, r1 - ldrb r0, [r0] - lsls r0, 31 - lsrs r0, 31 - adds r1, r0, 0 - movs r7, 0x44 - cmp r1, 0 - beq _08135E6C - movs r7, 0x45 -_08135E6C: - ldr r4, _08135EDC @ =gScriptResult - movs r0, 0 - strh r0, [r4] - adds r0, r1, 0 - bl sub_8135D3C - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x37 - bls _08135EBA - movs r5, 0 - ldr r0, _08135EE0 @ =0x00000565 - adds r0, r6 - mov r8, r0 - adds r6, r4, 0 -_08135E8A: - mov r1, r8 - adds r0, r5, r1 - ldrb r0, [r0] - subs r0, 0x1 - movs r1, 0x64 - muls r1, r0 - ldr r0, _08135EE4 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - adds r1, r7, 0 - bl GetMonData - cmp r0, 0 - bne _08135EB4 - movs r0, 0x1 - strh r0, [r6] - adds r0, r4, 0 - adds r1, r7, 0 - adds r2, r6, 0 - bl SetMonData -_08135EB4: - adds r5, 0x1 - cmp r5, 0x2 - ble _08135E8A -_08135EBA: - ldr r0, _08135EDC @ =gScriptResult - ldrh r0, [r0] - cmp r0, 0 - beq _08135EC8 - movs r0, 0x2A - bl IncrementGameStat -_08135EC8: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08135ED4: .4byte gSaveBlock2 -_08135ED8: .4byte 0x00000554 -_08135EDC: .4byte gScriptResult -_08135EE0: .4byte 0x00000565 -_08135EE4: .4byte gPlayerParty - thumb_func_end sub_8135E50 - thumb_func_start unref_sub_8135EE8 unref_sub_8135EE8: @ 8135EE8 push {r4-r7,lr} diff --git a/include/global.h b/include/global.h index 1431bf772..4cc5f6bcc 100644 --- a/include/global.h +++ b/include/global.h @@ -681,10 +681,12 @@ struct SaveBlock1 /* 0x02025734 */ /*0x2B0D*/ u8 outbreakPokemonProbability; /*0x2B0E*/ u16 outbreakUnk5; /*0x2B10*/ struct GabbyAndTyData gabbyAndTyData; - /*0x2B1C*/ u16 unk2B1C[6]; - /*0x2B28*/ u16 unk2B28[6]; - /*0x2B34*/ u16 unk2B34[6]; - /*0x2B40*/ u16 unk2B40[6]; + /*0x2B1C*/ struct { + /*0x2B1C*/ u16 unk2B1C[6]; + /*0x2B28*/ u16 unk2B28[6]; + /*0x2B34*/ u16 unk2B34[6]; + /*0x2B40*/ u16 unk2B40[6]; + } easyChats; /*0x2B4C*/ struct MailStruct mail[16]; /*0x2D8C*/ u8 unk2D8C[4]; /*0x2D90*/ u8 filler_2D90[0x4]; @@ -766,11 +768,12 @@ struct BattleTowerRecord // record mixing /*0x01*/u8 trainerClass; /*0x02*/u16 var_2; /*0x04*/u8 name[8]; - /*0x0C*/u8 var_C[4]; + /*0x0C*/u8 trainerId[4]; /*0x10*/struct { u16 easyChat[6]; } greeting; - /*0x1C*/u8 filler[0x87]; + /*0x1C*/struct UnknownPokemonStruct party[3]; + /*0xA0*/u32 checksum; }; struct BattleTowerEReaderTrainer @@ -785,7 +788,7 @@ struct BattleTowerEReaderTrainer } greeting; /*0x1C*/u8 filler_1C[0x18]; /*0x34*/struct UnknownPokemonStruct party[3]; - /*0xB8*/u32 unk_B0; + /*0xB8*/u32 checksum; }; struct SaveBlock2_Sub @@ -793,8 +796,9 @@ struct SaveBlock2_Sub /*0x0000, 0x00A8*/ struct BattleTowerRecord var_A8; /*0x00A4, 0x014C*/ struct BattleTowerRecord var_14C[5]; /*0x03D8, 0x0480*/ u16 firstMonSpecies; // species of the first pokemon in the player's battle tower party - /*0x03DA, 0x0482*/ u16 defeatedBySpecies; // species of the pokemon that defated the player in their battle tower streak. - /*0x03DC, 0x0484*/ u8 filler_3DC[0x14]; + /*0x03DA, 0x0482*/ u16 defeatedBySpecies; // species of the pokemon that defated the player + /*0x03DC, 0x0484*/ u8 defeatedByTrainerName[8]; + /*0x03E4, 0x048C*/ u8 firstMonNickname[POKEMON_NAME_LENGTH]; // nickname of the first pokemon in the player's battle tower party /*0x03F0, 0x0498*/ struct BattleTowerEReaderTrainer ereaderTrainer; /*0x04AC, 0x0554*/ u8 battleTowerLevelType:1; // 0 = level 50; 1 = level 100 /*0x04AC, 0x0554*/ u8 unk_554:1; @@ -805,8 +809,8 @@ struct SaveBlock2_Sub /*0x04B8, 0x0560*/ u16 recordWinStreaks[2]; /*0x04BC, 0x0564*/ u8 battleTowerTrainerId; // index for gBattleTowerTrainers table /*0x04BD, 0x0565*/ u8 var_4BD[0x3]; - /*0x04C0, 0x0568*/ u8 var_4C0; - /*0x04C1, 0x0569*/ u8 var_4C1[0x7]; + /*0x04C0, 0x0568*/ u16 prizeItem; + /*0x04C2, 0x056A*/ u8 var_4C2[0x6]; /*0x04C8, 0x0570*/ u16 totalBattleTowerWins; /*0x04CA, 0x0572*/ u16 bestBattleTowerWinStreak; /*0x04CC, 0x0574*/ u16 currentWinStreaks[2]; 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 --- asm/battle_tower.s | 380 -------------------------------- include/battle_tower.h | 3 + include/global.h | 7 +- include/tv.h | 1 + ld_script.txt | 1 - 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 +- 10 files changed, 297 insertions(+), 390 deletions(-) delete mode 100644 asm/battle_tower.s diff --git a/asm/battle_tower.s b/asm/battle_tower.s deleted file mode 100644 index 6d66a8849..000000000 --- a/asm/battle_tower.s +++ /dev/null @@ -1,380 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start unref_sub_8135EE8 -unref_sub_8135EE8: @ 8135EE8 - push {r4-r7,lr} - ldr r7, _08135F0C @ =gSaveBlock2 + 0x498 - ldr r0, _08135F10 @ =0xfffffb68 - adds r2, r7, r0 - ldrb r0, [r2, 0x8] - cmp r0, 0 - beq _08135F18 - ldr r4, _08135F14 @ =gUnknown_08405E7E - ldrb r0, [r2, 0xA] - ldrb r1, [r2, 0xB] - adds r0, r1 - ldrb r1, [r2, 0xC] - adds r0, r1 - ldrb r1, [r2, 0xD] - adds r0, r1 - movs r1, 0x14 - b _08135F2A - .align 2, 0 -_08135F0C: .4byte gSaveBlock2 + 0x498 -_08135F10: .4byte 0xfffffb68 -_08135F14: .4byte gUnknown_08405E7E -_08135F18: - ldr r4, _08135FA8 @ =gUnknown_08405E60 - ldrb r0, [r2, 0xA] - ldrb r1, [r2, 0xB] - adds r0, r1 - ldrb r1, [r2, 0xC] - adds r0, r1 - ldrb r1, [r2, 0xD] - adds r0, r1 - movs r1, 0x1E -_08135F2A: - bl __umodsi3 - adds r0, r4 - ldrb r0, [r0] - strb r0, [r7, 0x1] - adds r0, r7, 0 - adds r0, 0xC - ldr r4, _08135FAC @ =gSaveBlock2 + 0xA - adds r1, r4, 0 - bl copy_word_to_mem - adds r0, r7, 0x4 - subs r4, 0xA - adds r1, r4, 0 - bl StringCopy8 - movs r0, 0x1 - strh r0, [r7, 0x2] - movs r5, 0x7 - movs r4, 0 - ldr r0, _08135FB0 @ =gSaveBlock1 - ldr r1, _08135FB4 @ =0x00002b28 - adds r6, r0, r1 - adds r3, r7, 0 - adds r3, 0x10 - adds r2, r7, 0 - adds r2, 0x28 - adds r1, r7, 0 - adds r1, 0x1C -_08135F64: - ldrh r0, [r6] - strh r0, [r3] - strh r5, [r1] - adds r0, r5, 0x6 - strh r0, [r2] - adds r5, 0x1 - adds r6, 0x2 - adds r3, 0x2 - adds r2, 0x2 - adds r1, 0x2 - adds r4, 0x1 - cmp r4, 0x5 - ble _08135F64 - movs r4, 0 -_08135F80: - movs r0, 0x64 - muls r0, r4 - ldr r1, _08135FB8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2C - muls r1, r4 - adds r1, 0x34 - adds r1, r7, r1 - bl sub_803AF78 - adds r4, 0x1 - cmp r4, 0x2 - ble _08135F80 - adds r0, r7, 0 - bl sub_8136088 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08135FA8: .4byte gUnknown_08405E60 -_08135FAC: .4byte gSaveBlock2 + 0xA -_08135FB0: .4byte gSaveBlock1 -_08135FB4: .4byte 0x00002b28 -_08135FB8: .4byte gPlayerParty - thumb_func_end unref_sub_8135EE8 - - thumb_func_start sub_8135FBC -sub_8135FBC: @ 8135FBC - ldr r1, _08135FCC @ =gTrainerClassToPicIndex - ldr r0, _08135FD0 @ =gSaveBlock2 - ldr r2, _08135FD4 @ =0x00000499 - adds r0, r2 - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_08135FCC: .4byte gTrainerClassToPicIndex -_08135FD0: .4byte gSaveBlock2 -_08135FD4: .4byte 0x00000499 - thumb_func_end sub_8135FBC - - thumb_func_start sub_8135FD8 -sub_8135FD8: @ 8135FD8 - ldr r1, _08135FE8 @ =gTrainerClassToNameIndex - ldr r0, _08135FEC @ =gSaveBlock2 - ldr r2, _08135FF0 @ =0x00000499 - adds r0, r2 - ldrb r0, [r0] - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_08135FE8: .4byte gTrainerClassToNameIndex -_08135FEC: .4byte gSaveBlock2 -_08135FF0: .4byte 0x00000499 - thumb_func_end sub_8135FD8 - - thumb_func_start sub_8135FF4 -sub_8135FF4: @ 8135FF4 - push {r4,lr} - adds r3, r0, 0 - movs r2, 0 - ldr r4, _08136018 @ =gSaveBlock2 + 0x49C -_08135FFC: - adds r0, r3, r2 - adds r1, r2, r4 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x6 - ble _08135FFC - adds r1, r3, r2 - movs r0, 0xFF - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08136018: .4byte gSaveBlock2 + 0x49C - thumb_func_end sub_8135FF4 - - thumb_func_start sub_813601C -sub_813601C: @ 813601C - push {r4,r5,lr} - ldr r1, _08136044 @ =gScriptResult - movs r0, 0 - strh r0, [r1] - ldr r5, _08136048 @ =gSaveBlock2 + 0x498 - movs r3, 0 - movs r2, 0 - adds r4, r1, 0 - adds r1, r5, 0 -_0813602E: - ldm r1!, {r0} - orrs r3, r0 - adds r2, 0x1 - cmp r2, 0x2D - bls _0813602E - cmp r3, 0 - bne _0813604C - movs r0, 0x1 - strh r0, [r4] - b _08136078 - .align 2, 0 -_08136044: .4byte gScriptResult -_08136048: .4byte gSaveBlock2 + 0x498 -_0813604C: - movs r3, 0 - movs r2, 0 - ldr r4, _08136080 @ =gSaveBlock2 - adds r1, r5, 0 -_08136054: - ldm r1!, {r0} - adds r3, r0 - adds r2, 0x1 - cmp r2, 0x2D - bls _08136054 - movs r1, 0xAA - lsls r1, 3 - adds r0, r4, r1 - ldr r0, [r0] - cmp r0, r3 - beq _08136078 - subs r1, 0xB8 - adds r0, r4, r1 - bl sub_81360AC - ldr r1, _08136084 @ =gScriptResult - movs r0, 0x1 - strh r0, [r1] -_08136078: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08136080: .4byte gSaveBlock2 -_08136084: .4byte gScriptResult - thumb_func_end sub_813601C - - thumb_func_start sub_8136088 -sub_8136088: @ 8136088 - push {r4,lr} - adds r2, r0, 0 - adds r2, 0xB8 - movs r1, 0 - str r1, [r2] - movs r3, 0 - adds r4, r0, 0 -_08136096: - ldr r0, [r2] - ldm r4!, {r1} - adds r0, r1 - str r0, [r2] - adds r3, 0x1 - cmp r3, 0x2D - bls _08136096 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8136088 - - thumb_func_start sub_81360AC -sub_81360AC: @ 81360AC - push {lr} - movs r1, 0 - movs r2, 0 -_081360B2: - stm r0!, {r2} - adds r1, 0x1 - cmp r1, 0x2E - bls _081360B2 - pop {r0} - bx r0 - thumb_func_end sub_81360AC - - thumb_func_start sub_81360C0 -sub_81360C0: @ 81360C0 - push {lr} - ldr r0, _081360CC @ =gSaveBlock2 + 0x4A8 - bl sub_813545C - pop {r0} - bx r0 - .align 2, 0 -_081360CC: .4byte gSaveBlock2 + 0x4A8 - thumb_func_end sub_81360C0 - - thumb_func_start sub_81360D0 -sub_81360D0: @ 81360D0 - push {lr} - ldr r0, _081360E4 @ =gBattleOutcome - ldrb r0, [r0] - cmp r0, 0x3 - bne _081360EC - ldr r1, _081360E8 @ =gStringVar4 - movs r0, 0xFF - strb r0, [r1] - b _08136102 - .align 2, 0 -_081360E4: .4byte gBattleOutcome -_081360E8: .4byte gStringVar4 -_081360EC: - cmp r0, 0x1 - bne _081360FC - ldr r0, _081360F8 @ =gSaveBlock2 + 0x4C0 - bl sub_813545C - b _08136102 - .align 2, 0 -_081360F8: .4byte gSaveBlock2 + 0x4C0 -_081360FC: - ldr r0, _08136108 @ =gSaveBlock2 + 0x4B4 - bl sub_813545C -_08136102: - pop {r0} - bx r0 - .align 2, 0 -_08136108: .4byte gSaveBlock2 + 0x4B4 - thumb_func_end sub_81360D0 - - thumb_func_start sub_813610C -sub_813610C: @ 813610C - push {r4,r5,lr} - movs r4, 0 - ldr r5, _0813612C @ =gSaveBlock2 + 0x556 -_08136112: - adds r0, r4, r5 - ldrb r0, [r0] - cmp r0, 0x1 - bne _0813611E - bl sub_80BFD20 -_0813611E: - adds r4, 0x1 - cmp r4, 0x1 - ble _08136112 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813612C: .4byte gSaveBlock2 + 0x556 - thumb_func_end sub_813610C - -.ifdef GERMAN - thumb_func_start de_sub_81364AC -de_sub_81364AC: @ 81364AC - push {lr} - ldr r2, _DE_081364C0 @ =gSaveBlock2 - ldr r0, _DE_081364C4 @ =0x00000564 - adds r1, r2, r0 - ldrb r0, [r1] - cmp r0, 0xC8 - bne _DE_081364CC - ldr r1, _DE_081364C8 @ =0x00000499 - adds r0, r2, r1 - b _DE_081364F2 - .align 2, 0 -_DE_081364C0: .4byte gSaveBlock2 -_DE_081364C4: .4byte 0x00000564 -_DE_081364C8: .4byte 0x00000499 -_DE_081364CC: - cmp r0, 0x63 - bhi _DE_081364E4 - ldr r2, _DE_081364E0 @ =gBattleTowerTrainers - ldrb r1, [r1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - b _DE_081364F2 - .align 2, 0 -_DE_081364E0: .4byte gBattleTowerTrainers -_DE_081364E4: - ldrb r0, [r1] - subs r0, 0x64 - movs r1, 0xA4 - muls r0, r1 - adds r0, r2 - adds r1, 0xA9 - adds r0, r1 -_DE_081364F2: - ldrb r0, [r0] - pop {r1} - bx r1 - thumb_func_end de_sub_81364AC - - thumb_func_start de_sub_81364F8 -de_sub_81364F8: @ 81364F8 - ldr r0, _DE_08136504 @ =gSaveBlock2 - ldr r1, _DE_08136508 @ =0x00000499 - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_DE_08136504: .4byte gSaveBlock2 -_DE_08136508: .4byte 0x00000499 - thumb_func_end de_sub_81364F8 -.endif - - .align 2, 0 @ Don't pad with nop. diff --git a/include/battle_tower.h b/include/battle_tower.h index 2f3be2763..5f6cd3b87 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -92,5 +92,8 @@ void sub_813461C(u8 levelType); void sub_8134AC0(struct BattleTowerRecord *); u16 sub_8135D3C(u8); void sub_8135FF4(u8*); +u8 sub_8135FBC(void); +u8 sub_8135FD8(void); +void sub_813601C(void); #endif // GUARD_BATTLE_TOWER_H diff --git a/include/global.h b/include/global.h index 4cc5f6bcc..41cffe3c2 100644 --- a/include/global.h +++ b/include/global.h @@ -786,7 +786,12 @@ struct BattleTowerEReaderTrainer /*0x10*/struct { u16 easyChat[6]; } greeting; - /*0x1C*/u8 filler_1C[0x18]; + /*0x1C*/struct { + u16 easyChat[6]; + } farewellPlayerLost; + /*0x28*/struct { + u16 easyChat[6]; + } farewellPlayerWon; /*0x34*/struct UnknownPokemonStruct party[3]; /*0xB8*/u32 checksum; }; diff --git a/include/tv.h b/include/tv.h index 3243fff2c..a933e1779 100644 --- a/include/tv.h +++ b/include/tv.h @@ -107,5 +107,6 @@ void sub_80BE3BC(void); void UpdateTVShowsPerDay(u16); void sub_80C045C(); void sub_80BF088(u8, s32); +void sub_80BFD20(void); #endif // GUARD_TV_H diff --git a/ld_script.txt b/ld_script.txt index a77356dd0..16b09ed87 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -232,7 +232,6 @@ SECTIONS { src/field/decoration_inventory.o(.text); src/field/roamer.o(.text); src/battle_tower.o(.text); - asm/battle_tower.o(.text); src/field/use_pokeblock.o(.text); src/battle/battle_controller_wally.o(.text); src/field/player_pc.o(.text); 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 --- include/global.h | 18 +-- 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 +- 10 files changed, 192 insertions(+), 192 deletions(-) diff --git a/include/global.h b/include/global.h index 41cffe3c2..9b4320c81 100644 --- a/include/global.h +++ b/include/global.h @@ -780,7 +780,7 @@ struct BattleTowerEReaderTrainer { /*0x00*/u8 unk0; /*0x01*/u8 trainerClass; - /*0x02*/u16 filler_2; + /*0x02*/u16 filler_2; // TODO: this gets set in MEScrCmd_addtrainer /*0x04*/u8 name[7]; /*0x0B*/u8 filler_B[0x5]; /*0x10*/struct { @@ -796,10 +796,10 @@ struct BattleTowerEReaderTrainer /*0xB8*/u32 checksum; }; -struct SaveBlock2_Sub +struct BattleTowerData { - /*0x0000, 0x00A8*/ struct BattleTowerRecord var_A8; - /*0x00A4, 0x014C*/ struct BattleTowerRecord var_14C[5]; + /*0x0000, 0x00A8*/ struct BattleTowerRecord playerRecord; + /*0x00A4, 0x014C*/ struct BattleTowerRecord records[5]; // from record mixing /*0x03D8, 0x0480*/ u16 firstMonSpecies; // species of the first pokemon in the player's battle tower party /*0x03DA, 0x0482*/ u16 defeatedBySpecies; // species of the pokemon that defated the player /*0x03DC, 0x0484*/ u8 defeatedByTrainerName[8]; @@ -807,13 +807,13 @@ struct SaveBlock2_Sub /*0x03F0, 0x0498*/ struct BattleTowerEReaderTrainer ereaderTrainer; /*0x04AC, 0x0554*/ u8 battleTowerLevelType:1; // 0 = level 50; 1 = level 100 /*0x04AC, 0x0554*/ u8 unk_554:1; - /*0x04AD, 0x0555*/ u8 var_4AD; // used by tv, but ultimately does nothing, since both code paths are identical + /*0x04AD, 0x0555*/ u8 battleOutcome; /*0x04AE, 0x0556*/ u8 var_4AE[2]; - /*0x04B0, 0x0558*/ u16 var_4B0[2]; - /*0x04B4, 0x055C*/ u16 var_4B4[2]; + /*0x04B0, 0x0558*/ u16 curChallengeWins[2]; // number of wins in the current challenge. (challenges consist of 7 battles) + /*0x04B4, 0x055C*/ u16 curStreakChallengesCompleted[2]; // number of challenges completed in the current streak. /*0x04B8, 0x0560*/ u16 recordWinStreaks[2]; /*0x04BC, 0x0564*/ u8 battleTowerTrainerId; // index for gBattleTowerTrainers table - /*0x04BD, 0x0565*/ u8 var_4BD[0x3]; + /*0x04BD, 0x0565*/ u8 selectedPartyMons[0x3]; // indices of the 3 selected player party mons. /*0x04C0, 0x0568*/ u16 prizeItem; /*0x04C2, 0x056A*/ u8 var_4C2[0x6]; /*0x04C8, 0x0570*/ u16 totalBattleTowerWins; @@ -844,7 +844,7 @@ struct SaveBlock2 /* 0x02024EA4 */ /*0x90*/ u8 filler_90[0x8]; /*0x98*/ struct Time localTimeOffset; /*0xA0*/ struct Time lastBerryTreeUpdate; - /*0xA8*/ struct SaveBlock2_Sub filler_A8; + /*0xA8*/ struct BattleTowerData battleTower; }; struct MapPosition 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 --- include/global.h | 2 +- src/battle_tower.c | 758 +++++++++++++---------------------------------------- 2 files changed, 188 insertions(+), 572 deletions(-) diff --git a/include/global.h b/include/global.h index 9b4320c81..43ffcae0c 100644 --- a/include/global.h +++ b/include/global.h @@ -780,7 +780,7 @@ struct BattleTowerEReaderTrainer { /*0x00*/u8 unk0; /*0x01*/u8 trainerClass; - /*0x02*/u16 filler_2; // TODO: this gets set in MEScrCmd_addtrainer + /*0x02*/u16 var_2; // TODO: this gets set in MEScrCmd_addtrainer /*0x04*/u8 name[7]; /*0x0B*/u8 filler_B[0x5]; /*0x10*/struct { 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() --- include/battle_tower.h | 2 +- src/battle_tower.c | 696 ++++++++++++++++++------------------------------- 2 files changed, 256 insertions(+), 442 deletions(-) diff --git a/include/battle_tower.h b/include/battle_tower.h index 5f6cd3b87..4b5e66eac 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -81,7 +81,7 @@ enum struct BattleTowerPokemon { /*0x00*/u16 species; - /*0x02*/u8 item; + /*0x02*/u8 item; // entry in gBattleTowerHeldItems /*0x03*/u8 teamFlags; /*0x04*/u16 moves[4]; /*0x0C*/u8 evSpread; 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 --- include/global.h | 4 +- src/battle_tower.c | 160 +++++++++++++++++------------------------------------ 2 files changed, 53 insertions(+), 111 deletions(-) diff --git a/include/global.h b/include/global.h index 43ffcae0c..8461624cb 100644 --- a/include/global.h +++ b/include/global.h @@ -781,8 +781,8 @@ struct BattleTowerEReaderTrainer /*0x00*/u8 unk0; /*0x01*/u8 trainerClass; /*0x02*/u16 var_2; // TODO: this gets set in MEScrCmd_addtrainer - /*0x04*/u8 name[7]; - /*0x0B*/u8 filler_B[0x5]; + /*0x04*/u8 name[8]; + /*0x0C*/u8 trainerId[4]; /*0x10*/struct { u16 easyChat[6]; } greeting; 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 --- data-de/battle_tower/trainers.inc | 1301 ------------------------------ src/battle_tower.c | 4 + src/data/battle_tower/trainers_de.h | 1503 +++++++++++++++++++++++++++++++++++ 3 files changed, 1507 insertions(+), 1301 deletions(-) delete mode 100644 data-de/battle_tower/trainers.inc create mode 100644 src/data/battle_tower/trainers_de.h diff --git a/data-de/battle_tower/trainers.inc b/data-de/battle_tower/trainers.inc deleted file mode 100644 index 9791a08a6..000000000 --- a/data-de/battle_tower/trainers.inc +++ /dev/null @@ -1,1301 +0,0 @@ - .align 2 -gBattleTowerTrainers:: @ 8402F00 -@ 0 - .byte TRAINER_CLASS_YOUNGSTER - .string "ALWIN$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word ARE - ec_word YOU - ec_word READY - ec_word QUES - ec_word HERE_I_COME - ec_word EXCL - -@ 1 - .byte TRAINER_CLASS_BIRD_KEEPER - .string "DIRK$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word OH_KAY - ec_word I_AM - ec_word READY - ec_word EXCL - .2byte 0xFFFF - .2byte 0xFFFF - -@ 2 - .byte TRAINER_CLASS_LADY - .string "SIBILLE$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word THAT - ec_word BECOMES - ec_word A - ec_word CHILD_S_PLAY - ec_word GO - .2byte 0xFFFF - -@ 3 - .byte TRAINER_CLASS_BLACK_BELT - .string "OLAF$", 8 - .byte 0x05 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word MY - ec_word GHOST - ec_word IS - ec_word FULL - ec_word TOUGHNESS - ec_word SNORT - -@ 4 - .byte TRAINER_CLASS_NINJA_BOY - .string "JOST$", 8 - .byte 0x05 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word GO - ec_word WHO_WAS - ec_word POKEMON - ec_word FIGHT - ec_word FIGHT - ec_word FIGHT - -@ 5 - .byte TRAINER_CLASS_SCHOOL_KID_F - .string "TINA$", 8 - .byte 0x0A @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word STUDY - ec_word IS - ec_word BORING - ec_word LET_S - ec_word BETTER - ec_word FIGHT - -@ 6 - .byte TRAINER_CLASS_BUG_MANIAC - .string "HAJO$", 8 - .byte 0x41 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word TOUGHNESS - ec_word AND - ec_move2 TRANSFORM - ec_word WILL - ec_word BABE - ec_word FAINT - -@ 7 - .byte TRAINER_CLASS_FISHERMAN - .string "GEORG$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word IT - ec_word GOES - ec_word NOTHING - ec_word OVER - ec_word FISHING - .2byte 0xFFFF - -@ 8 - .byte TRAINER_CLASS_TUBER_F - .string "ANNE$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word POKEMON - ec_word MUST_BE - ec_word MAN - ec_word SIMPLE - ec_word ADORE - .2byte 0xFFFF - -@ 9 - .byte TRAINER_CLASS_POKEFAN_F - .string "JULIA$", 8 - .byte 0x42 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_AM - ec_word CUTE - ec_word I_AM - ec_word QUITE - ec_word AN - ec_word LADY - -@ 10 - .byte TRAINER_CLASS_GENTLEMAN - .string "JOHANN$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word THE - ec_word DAY - ec_word IS - ec_word PERFECT - ec_word FOR - ec_word BATTLE - -@ 11 - .byte TRAINER_CLASS_CAMPER - .string "KARL$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word NOW - ec_word ARE - ec_word YOU - ec_word MY - ec_word FRIEND - .2byte 0xFFFF - -@ 12 - .byte TRAINER_CLASS_RUNNING_TRIATHLETE_F - .string "KENDRA$", 8 - .byte 0x0A @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_AM - ec_word SMART - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - ec_word AND - ec_word YOU - ec_word QUES - -@ 13 - .byte TRAINER_CLASS_HIKER - .string "DAVID$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WAHAHAHA - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - ec_word TODAY - ec_word IS - ec_move2 PAY_DAY - .2byte 0xFFFF - -@ 14 - .byte TRAINER_CLASS_BATTLE_GIRL - .string "KEA$", 8 - .byte 0x0A @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOU_RE - ec_word TOUGH - ec_word OR - ec_word QUES - .2byte 0xFFFF - .2byte 0xFFFF - -@ 15 - .byte TRAINER_CLASS_PSYCHIC_M - .string "JULIAN$", 8 - .byte 0x05 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word FUFUFU - ec_word YOU - ec_word CAN_T - ec_word DON_T - ec_word WINS - ec_word KID - -@ 16 - .byte TRAINER_CLASS_LASS - .string "JOSI$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word BE - ec_word KIND - ec_word TO - ec_word GIRL - .2byte 0xFFFF - .2byte 0xFFFF - -@ 17 - .byte TRAINER_CLASS_GUITARIST - .string "LEIF$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_AM - ec_word GREAT - ec_word YOU_RE - ec_word RATHER - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - ec_word OKAY - -@ 18 - .byte TRAINER_CLASS_RICH_BOY - .string "INGO$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word HAVE - ec_word ROUGH_SKIN - ec_word NATURAL_CURE - ec_word IS - ec_word ALL_RIGHT - -@ 19 - .byte TRAINER_CLASS_BUG_CATCHER - .string "LUDWIG$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word IF_I_WIN - ec_word IS - ec_word THAT - ec_word EXCITING - .2byte 0xFFFF - .2byte 0xFFFF - -@ 20 - .byte TRAINER_CLASS_PICNICKER - .string "RAJA$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WITH - ec_word POKEMON - ec_word TO - ec_word WALKING - ec_word IS - ec_word GREAT - -@ 21 - .byte TRAINER_CLASS_COLLECTOR - .string "HARALD$", 8 - .byte 0x09 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word HERE_GOES - ec_word MY - ec_word HUGE_POWER - .2byte 0xFFFF - ec_word POKEMON - .2byte 0xFFFF - -@ 22 - .byte TRAINER_CLASS_TUBER_M - .string "KIM$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_AM - ec_word A - ec_word GENIUS - ec_word WE - ec_word WILL - ec_word WINS - -@ 23 - .byte TRAINER_CLASS_KINDLER - .string "ERWIN$", 8 - .byte 0x05 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word MY - ec_word FIRE - ec_word IS - ec_word VERY - ec_word HOT - .2byte 0xFFFF - -@ 24 - .byte TRAINER_CLASS_PSYCHIC_F - .string "EIKA$", 8 - .byte 0x0A @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word FIGHTING - ec_move1 ASTONISH - ec_word AND - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - .2byte 0xFFFF - .2byte 0xFFFF - -@ 25 - .byte TRAINER_CLASS_SWIMMER_F - .string "ANNINA$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word SORRY - ec_word YOURS - ec_word POKEMON - ec_word WILL - ec_word DON_T - ec_word WINS - -@ 26 - .byte TRAINER_CLASS_CYCLING_TRIATHLETE_F - .string "RUTH$", 8 - .byte 0x06 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_AM - ec_word TOUGH - ec_word WHO_WAS - ec_word POKEMON - ec_word TOO - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - -@ 27 - .byte TRAINER_CLASS_POKEMANIAC - .string "JENS$", 8 - .byte 0x40 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WHO_WAS - ec_word POKEMON - ec_word THOSE - ec_word COOL - ec_word YOURS - ec_word LOSE - -@ 28 - .byte TRAINER_CLASS_SAILOR - .string "TITUS$", 8 - .byte 0x09 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word MY - ec_word FOE - ec_word IS - ec_word FINALLY - ec_word HERE - ec_word EXCELLENT - -@ 29 - .byte TRAINER_CLASS_POKEMON_BREEDER_F - .string "NICOLA$", 8 - .byte 0x06 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_AM - ec_word VORACIOUS - ec_move2 POUND - ec_word AND - ec_move2 BELLY_DRUM - .2byte 0xFFFF - -@ 30 - .byte TRAINER_CLASS_HEX_MANIAC - .string "PAULA$", 8 - .byte 0x42 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word IS_IT_QUES - ec_word THOSE_ARE - ec_word UGLY - ec_move1 SPITE - ec_word TO - ec_word TAKE - -@ 31 - .byte TRAINER_CLASS_RUIN_MANIAC - .string "SÖREN$", 8 - .byte 0x41 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word ADVENTURE - ec_word AND - ec_word BATTLE - ec_word THOSE - ec_word WHO_WAS - ec_word LIKES - -@ 32 - .byte TRAINER_CLASS_SWIMMING_TRIATHLETE_M - .string "RAINER$", 8 - .byte 0x09 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WE - ec_word CAN - ec_word VERSUS - ec_word CHILDREN - ec_word DON_T - ec_word LOSE - -@ 33 - .byte TRAINER_CLASS_SCHOOL_KID_M - .string "FABIAN$", 8 - .byte 0x08 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word DAILY - ec_word POKEMON - ec_word IN - ec_word THE - ec_word SCHOOL - ec_word AWESOME - -@ 34 - .byte TRAINER_CLASS_POKEMON_RANGER_F - .string "ELLEN$", 8 - .byte 0x04 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word ARE - ec_word YOU - ec_word ALL_RIGHT - ec_word TO - ec_word POKEMON - ec_word QUES - -@ 35 - .byte TRAINER_CLASS_SWIMMER_M - .string "ARNIE$", 8 - .byte 0x09 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word MY - ec_word FIGHTING - ec_word IS - ec_word PERFECTION - ec_word YOUR - ec_word USELESS - -@ 36 - .byte TRAINER_CLASS_RUNNING_TRIATHLETE_M - .string "HARDI$", 8 - .byte 0x09 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word BOY - ec_word I_AM - ec_word MAYBE - ec_word TIRED - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - .2byte 0xFFFF - -@ 37 - .byte TRAINER_CLASS_BEAUTY - .string "LINA$", 8 - .byte 0x06 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word A - ec_word TRAINER - ec_word HOW_DO - ec_word YOU - ec_word IS - ec_word EXCITING - -@ 38 - .byte TRAINER_CLASS_AROMA_LADY - .string "SELINA$", 8 - .byte 0x06 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOU_VE - ec_word STENCH - ec_word OR - ec_move1 SWEET_SCENT - ec_word QUES - .2byte 0xFFFF - -@ 39 - .byte TRAINER_CLASS_COLLECTOR - .string "DANTE$", 8 - .byte 0x81 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOURS - ec_word POKEMON - ec_word I - ec_word WANTS - ec_word SHE - ec_word EXCL_EXCL - -@ 40 - .byte TRAINER_CLASS_SWIMMING_TRIATHLETE_F - .string "KATJA$", 8 - .byte 0x04 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word TODAY - ec_word WANTS - ec_word I - ec_word MY - ec_word BEST - ec_word GIVE - -@ 41 - .byte TRAINER_CLASS_POKEMON_RANGER_M - .string "HORST$", 8 - .byte 0x0C @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WAAAH - ec_word WAAAH - ec_word WAAAH - ec_word WAAAH - ec_word EHEHE - ec_move1 FAKE_TEARS - -@ 42 - .byte TRAINER_CLASS_POKEFAN_M - .string "GERRIT$", 8 - .byte 0x80 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word MY - ec_word ANIME - ec_word SONG - ec_word IS - ec_word DON_T - ec_word LOUSY - -@ 43 - .byte TRAINER_CLASS_CYCLING_TRIATHLETE_M - .string "NIKO$", 8 - .byte 0x04 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word BATTLE - ec_word DON_T - ec_word JUST - ec_word DO - ec_word SOMETHING - ec_word ELSE - -@ 44 - .byte TRAINER_CLASS_POKEMON_BREEDER_M - .string "BALDO$", 8 - .byte 0x41 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word ARE - ec_word YOU - ec_word BUSY - ec_word HAS - ec_word THAT - ec_word TIME - -@ 45 - .byte TRAINER_CLASS_PARASOL_LADY - .string "ALMA$", 8 - .byte 0x08 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word THAT - ec_move1 MORNING_SUN - ec_word HAS - ec_word SO - ec_word A_LOT - ec_move1 COSMIC_POWER - -@ 46 - .byte TRAINER_CLASS_CAMPER - .string "ADAM$", 8 - .byte 0x0C @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word EXCITING - ec_word BATTLE - ec_word THOSE - ec_word GREAT - ec_word YEEHAW_EXCL - .2byte 0xFFFF - -@ 47 - .byte TRAINER_CLASS_SCHOOL_KID_F - .string "GRETE$", 8 - .byte 0x42 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word WANTS - ec_word SOMETHING - ec_move1 GROWTH - ec_word WORKS - .2byte 0xFFFF - -@ 48 - .byte TRAINER_CLASS_BEAUTY - .string "NAOMI$", 8 - .byte 0x04 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word IT - ec_word WAS - ec_word GREAT - ec_word YOUNG - ec_word TO - ec_word HIS - -@ 49 - .byte TRAINER_CLASS_NINJA_BOY - .string "KENO$", 8 - .byte 0x0C @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word PLEASE - ec_word BE - ec_word DON_T - ec_word SO - ec_word MEAN - ec_word TO_ME - -@ 50 - .byte TRAINER_CLASS_CYCLING_TRIATHLETE_M - .string "REMUS$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WAKES_UP - ec_move2 HIDDEN_POWER - ec_word AND - ec_move1 ASTONISH - .2byte 0xFFFF - .2byte 0xFFFF - -@ 51 - .byte TRAINER_CLASS_POKEMON_RANGER_F - .string "EDITH$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word THE - ec_word BATTLE_TOWER - ec_word IS - ec_word SO - ec_word ENTERTAINING - ec_word AWESOME - -@ 52 - .byte TRAINER_CLASS_RUIN_MANIAC - .string "ANTON$", 8 - .byte 0x41 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word THICK_FAT - ec_word AND - ec_word CHLOROPHYLL - ec_word BLEND - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - ec_word TASTY - -@ 53 - .byte TRAINER_CLASS_SWIMMER_M - .string "MALTE$", 8 - .byte 0x81 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word AN - ec_move1 SCARY_FACE - ec_word IS - ec_word DON_T - ec_word QUITE - ec_word TERRIBLE - -@ 54 - .byte TRAINER_CLASS_HEX_MANIAC - .string "RAOUL$", 8 - .byte 0x42 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word RUN_AWAY - ec_word GIVE_ME - ec_word SON - ec_word BEST - .2byte 0xFFFF - .2byte 0xFFFF - -@ 55 - .byte TRAINER_CLASS_RUNNING_TRIATHLETE_M - .string "RICK$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WATER - ec_word IS - ec_word TASTY - ec_word HIP_AND - ec_word REFRESHING - ec_word YES_SIR_EXCL - -@ 56 - .byte TRAINER_CLASS_POKEFAN_M - .string "DENNIS$", 8 - .byte 0x80 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word GO - ec_word WHO_WAS - ec_word POKEMON - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - .2byte 0xFFFF - .2byte 0xFFFF - -@ 57 - .byte TRAINER_CLASS_PSYCHIC_F - .string "GLORIA$", 8 - .byte 0x82 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word THE - ec_word FIGHTING - ec_word MUST_BE - ec_word HOT - ec_word HIS - ec_word FIERY - -@ 58 - .byte TRAINER_CLASS_GUITARIST - .string "NINO$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word MUSIC - ec_word IS - ec_word MY - ec_word EVERY - ec_word MY - ec_word DESTINY - -@ 59 - .byte TRAINER_CLASS_KINDLER - .string "FIETE$", 8 - .byte 0x41 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word IT_S - ec_word ALL_RIGHT - ec_word VERY - ec_word ALL_RIGHT - .2byte 0xFFFF - .2byte 0xFFFF - -@ 60 - .byte TRAINER_CLASS_AROMA_LADY - .string "AMANDA$", 8 - .byte 0x82 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WHAT - ec_word FOR - ec_word A - ec_word TRAINER - ec_word ARE - ec_word YOU - -@ 61 - .byte TRAINER_CLASS_SWIMMING_TRIATHLETE_M - .string "MAREK$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WE_VE - ec_word UNTIL - ec_word NOW - ec_word TOTALLY - ec_word NEVER - ec_word LOST - -@ 62 - .byte TRAINER_CLASS_DRAGON_TAMER - .string "NATHAN$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word DRAGON - .2byte 0xFFFF - ec_word POKEMON - ec_word THOSE - ec_word FANTASTIC - .2byte 0xFFFF - -@ 63 - .byte TRAINER_CLASS_LASS - .string "MIRIAM$", 8 - .byte 0x82 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOU_RE - ec_word QUITE - ec_word TOO_STRONG - ec_word AM - ec_word BAD - ec_word NEWS - -@ 64 - .byte TRAINER_CLASS_POKEMANIAC - .string "THEO$", 8 - .byte 0x40 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word PLUSH_DOLL - ec_word MUST_BE - ec_word MAN - ec_word SIMPLE - ec_word ADORE - .2byte 0xFFFF - -@ 65 - .byte TRAINER_CLASS_SWIMMING_TRIATHLETE_F - .string "PIA$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word HERE_I_COME - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - ec_word CUTE - ec_word A - ec_word CHANNEL - ec_word IDOL - -@ 66 - .byte TRAINER_CLASS_POKEFAN_F - .string "ALISSA$", 8 - .byte 0x20 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOURS - ec_word POKEMON - ec_word THOSE - ec_word PREPOSTEROUS - ec_word I_AM - ec_word SHOCKED - -@ 67 - .byte TRAINER_CLASS_GENTLEMAN - .string "ARTUR$", 8 - .byte 0x20 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word PLEASE - ec_word ALL - ec_word BATTLE - ec_word WEREN_T - ec_word GREAT - ec_word HIS - -@ 68 - .byte TRAINER_CLASS_SWIMMER_F - .string "MAJA$", 8 - .byte 0x82 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I_AM - ec_word PRETTY - ec_word YOU - ec_word CAN_T - ec_word DON_T - ec_word WINS - -@ 69 - .byte TRAINER_CLASS_COOL_TRAINER_M - .string "MARIUS$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word BATTLE - ec_word DAILY - ec_word I - ec_word WON_T - ec_word LOSE - -@ 70 - .byte TRAINER_CLASS_BIRD_KEEPER - .string "OLIVER$", 8 - .byte 0x11 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word GIGGLE - ec_word GIGGLE - ec_word SNORT - ec_word HAPPILY - ec_word GIGGLE - ec_word MUFUFU - -@ 71 - .byte TRAINER_CLASS_CYCLING_TRIATHLETE_F - .string "MOLLY$", 8 - .byte 0x12 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word IS - ec_word TODAY - ec_word MONDAY - ec_word QUES - .2byte 0xFFFF - .2byte 0xFFFF - -@ 72 - .byte TRAINER_CLASS_BUG_MANIAC - .string "JÖRG$", 8 - .byte 0x40 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WATER - .2byte 0xFFFF - ec_word AND - ec_word BUG - .2byte 0xFFFF - ec_word POKEMON - -@ 73 - .byte TRAINER_CLASS_BATTLE_GIRL - .string "ANKE$", 8 - .byte 0x20 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WHAT - ec_word IS - ec_word PRESSURE - ec_word STATIC - ec_word IS - ec_word SUPER - -@ 74 - .byte TRAINER_CLASS_FISHERMAN - .string "HANS$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word KID - ec_word YOU - ec_word CAN_T - ec_word DON_T - ec_word WINS - .2byte 0xFFFF - -@ 75 - .byte TRAINER_CLASS_SAILOR - .string "PETER$", 8 - .byte 0x20 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word IT_S - ec_word QUITE - ec_word TERRIBLE - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - ec_word MODE - ec_word I - -@ 76 - .byte TRAINER_CLASS_EXPERT_F - .string "MARA$", 8 - .byte 0x20 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOU_RE - ec_word VERY - ec_word ALL_RIGHT - ec_word TRAINS - ec_word OR - ec_word QUES - -@ 77 - .byte TRAINER_CLASS_BUG_MANIAC - .string "DARIUS$", 8 - .byte 0x11 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word ARE - ec_word YOU - ec_word TOUGH - ec_word ARE - ec_word YOU - ec_word SCARY - -@ 78 - .byte TRAINER_CLASS_POKEMON_BREEDER_F - .string "REGINA$", 8 - .byte 0x12 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word TODAY - ec_word WIN - ec_word I - ec_word MAYBE - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - .2byte 0xFFFF - -@ 79 - .byte TRAINER_CLASS_PARASOL_LADY - .string "MAIKE$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word SO - ec_word AN - ec_move1 SCARY_FACE - ec_word IS - ec_word NOT_VERY - ec_word KIND - -@ 80 - .byte TRAINER_CLASS_RUNNING_TRIATHLETE_F - .string "SANDRA$", 8 - .byte 0x04 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word SPORTS - ec_word IS - ec_word HEALTHY - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - ec_word SPIRALING - .2byte 0xFFFF - -@ 81 - .byte TRAINER_CLASS_POKEMON_RANGER_M - .string "ARNOLD$", 8 - .byte 0x08 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word AWESOME - ec_word WHO_WAS - ec_word POKEMON - ec_word THOSE - ec_word ROCK_SOLID - .2byte 0xFFFF - -@ 82 - .byte TRAINER_CLASS_BLACK_BELT - .string "XENO$", 8 - .byte 0x04 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word HOO_HAH - ec_word ARE - ec_word YOU - ec_word READY - ec_word FOR - ec_word SHADY - -@ 83 - .byte TRAINER_CLASS_COOL_TRAINER_F - .string "KARLA$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YOU - ec_word CAN_T - ec_word ME - ec_word NEVER - ec_word SMITE - ec_word KID - -@ 84 - .byte TRAINER_CLASS_COLLECTOR - .string "VOLKER$", 8 - .byte 0x80 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word FROM - ec_word PLACE - ec_word TO - ec_word PLACE - ec_word POKEMON - ec_word WOWEE - -@ 85 - .byte TRAINER_CLASS_SWIMMING_TRIATHLETE_M - .string "TOBIAS$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word THAT - ec_word ISN_T - ec_word SPORTS - ec_word IT_S - ec_word A - ec_word FIGHTING - -@ 86 - .byte TRAINER_CLASS_GENTLEMAN - .string "NORBERT$", 8 - .byte 0x20 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word MUST_BE - ec_word WINS - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - ec_word PLEASE - ec_word PLEASE - -@ 87 - .byte TRAINER_CLASS_BATTLE_GIRL - .string "ZITA$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word THAT - ec_word IS - ec_word SCARY - ec_word PLEASE - ec_word BE - ec_word NICE - -@ 88 - .byte TRAINER_CLASS_BEAUTY - .string "ELKE$", 8 - .byte 0x20 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WITHOUT - ec_move1 FLAIL - ec_word NONE - ec_move1 WITHDRAW - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - .2byte 0xFFFF - -@ 89 - .byte TRAINER_CLASS_HIKER - .string "VITUS$", 8 - .byte 0x04 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word YAHOO - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - ec_word LISTENS - ec_word HER - ec_word TO - ec_word QUES - -@ 90 - .byte TRAINER_CLASS_EXPERT_M - .string "MALTE$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word LEARN - ec_word CORRECT - ec_word TO - ec_word FIGHT - .2byte 0xFFFF - .2byte 0xFFFF - -@ 91 - .byte TRAINER_CLASS_POKEMON_BREEDER_M - .string "TIM$", 8 - .byte 0x40 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word IT_S - ec_word A - ec_word FIGHTING - ec_word NONE - ec_word CHILD_S_PLAY - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - -@ 92 - .byte TRAINER_CLASS_GUITARIST - .string "GAVIN$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word SHADY - ec_word BABY - ec_word BABY - ec_word BABY - .2byte 0xFFFF - .2byte 0xFFFF - -@ 93 - .byte TRAINER_CLASS_PSYCHIC_M - .string "RALF$", 8 - .byte 0x08 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word STICKY_HOLD - ec_word THOSE - ec_word IMPORTANT - ec_word ISN_T_IT_QUES - .2byte 0xFFFF - .2byte 0xFFFF - -@ 94 - .byte TRAINER_CLASS_COOL_TRAINER_F - .string "JENNY$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word I - ec_word SEARCH - ec_word TRAINER - ec_word ABSOLUTELY - ec_word TOUGH - ec_word THOSE - -@ 95 - .byte TRAINER_CLASS_EXPERT_M - .string "JOEL$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word BELIEVE - ec_word ON - ec_word YOURS - ec_word POKEMON - ec_word AND - ec_word WIN - -@ 96 - .byte TRAINER_CLASS_DRAGON_TAMER - .string "KOLJA$", 8 - .byte 0x0C @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word GIRL - ec_word WITH - ec_move2 FORESIGHT - ec_word THOSE - ec_word NICE - .2byte 0xFFFF - -@ 97 - .byte TRAINER_CLASS_COOL_TRAINER_M - .string "BILL$", 8 - .byte 0x01 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word WHO_WAS - ec_word POWER - ec_word IS - ec_word OVERWHELMING - ec_word DISAPPEAR - ec_word BETTER - -@ 98 - .byte TRAINER_CLASS_EXPERT_F - .string "CALLA$", 8 - .byte 0x10 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word TRAINER - ec_word YOU - ec_word ARE - ec_word SEEMS - ec_word CAPABLE - ec_word ELLIPSIS_ELLIPSIS_ELLIPSIS - -@ 99 - .byte TRAINER_CLASS_LADY - .string "GESA$", 8 - .byte 0x02 @ team flags - .2byte 0 @ padding -@ pre-battle dialogue - ec_word COME_ON - ec_word ABSOLUTELY - ec_word TIME - ec_word BECOMES - ec_word EXCELLENT - .2byte 0xFFFF 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(-) 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 --- data/scripts/maps/BattleTower_BattleRoom.inc | 4 +- data/scripts/maps/BattleTower_Lobby.inc | 6 +- data/scripts/maps/MossdeepCity_GameCorner_1F.inc | 4 +- data/scripts/maps/MossdeepCity_GameCorner_B1F.inc | 4 +- data/specials.inc | 16 +- include/battle_tower.h | 12 +- include/global.h | 10 +- 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 +- 18 files changed, 841 insertions(+), 839 deletions(-) diff --git a/data/scripts/maps/BattleTower_BattleRoom.inc b/data/scripts/maps/BattleTower_BattleRoom.inc index 3f1aad4a0..dbab17a8b 100644 --- a/data/scripts/maps/BattleTower_BattleRoom.inc +++ b/data/scripts/maps/BattleTower_BattleRoom.inc @@ -16,7 +16,7 @@ BattleTower_BattleRoom_EventScript_1608FA:: @ 81608FA addobject 1 applymovement 1, BattleTower_BattleRoom_Movement_160AC0 waitmovement 0 - special sub_8135474 + special PrintBattleTowerTrainerGreeting msgbox 0x20234cc, 4 waitmessage closemessage @@ -116,7 +116,7 @@ BattleTower_BattleRoom_EventScript_160A94:: @ 8160A94 BattleTower_BattleRoom_EventScript_160AB1:: @ 8160AB1 fadescreen 1 - special sub_8135C38 + special BattleTower_SoftReset end BattleTower_BattleRoom_Movement_160AB7:: @ 8160AB7 diff --git a/data/scripts/maps/BattleTower_Lobby.inc b/data/scripts/maps/BattleTower_Lobby.inc index 3227df991..75d4f8731 100644 --- a/data/scripts/maps/BattleTower_Lobby.inc +++ b/data/scripts/maps/BattleTower_Lobby.inc @@ -79,7 +79,7 @@ BattleTower_Lobby_EventScript_160342:: @ 8160342 special sub_81358A4 compare RESULT, 6 goto_if_eq BattleTower_Lobby_EventScript_16037D - special sub_8135E50 + special AwardBattleTowerRibbons compare RESULT, 0 goto_if_eq BattleTower_Lobby_EventScript_16037D message BattleTower_Lobby_Text_19A6BE @@ -97,7 +97,7 @@ BattleTower_Lobby_EventScript_16037D:: @ 816037D waitmessage setvar 0x8004, 13 special sub_8135668 - special sub_8135D84 + special DetermineBattleTowerPrize setvar 0x8004, 3 special sub_8135BA0 playse 55 @@ -109,7 +109,7 @@ BattleTower_Lobby_EventScript_1603AD:: @ 81603AD special sub_8135668 message BattleTower_Lobby_Text_19A4BB waitmessage - special sub_8135DEC + special GiveBattleTowerPrize switch RESULT case 0, BattleTower_Lobby_EventScript_160408 message BattleTower_Lobby_Text_19A506 diff --git a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc index 66ad747f9..cef02df2c 100644 --- a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc +++ b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc @@ -5,7 +5,7 @@ MossdeepCity_GameCorner_1F_MapScripts:: @ 815AC52 .byte 0 MossdeepCity_GameCorner_1F_MapScript1_15AC62:: @ 815AC62 - special sub_813601C + special ValidateEReaderTrainer compare RESULT, 1 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AC71 end @@ -16,7 +16,7 @@ MossdeepCity_GameCorner_1F_EventScript_15AC71:: @ 815AC71 return MossdeepCity_GameCorner_1F_MapScript1_15AC84:: @ 815AC84 - special sub_813601C + special ValidateEReaderTrainer compare RESULT, 0 call_if 1, MossdeepCity_GameCorner_1F_EventScript_15AC9E compare 0x40c0, 0 diff --git a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc index 886c64d29..11b3ce7a3 100644 --- a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc +++ b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc @@ -4,7 +4,7 @@ MossdeepCity_GameCorner_B1F_MapScripts:: @ 815AE55 .byte 0 MossdeepCity_GameCorner_B1F_MapScript1_15AE60:: @ 815AE60 - special sub_8134AB4 + special SetEReaderTrainerGfxId end MossdeepCity_GameCorner_B1F_MapScript2_15AE64:: @ 815AE64 @@ -15,7 +15,7 @@ MossdeepCity_GameCorner_B1F_EventScript_15AE6E:: @ 815AE6E lockall applymovement 255, MossdeepCity_GameCorner_B1F_Movement_15AEF9 waitmovement 0 - special sub_81360C0 + special PrintEReaderTrainerGreeting msgbox 0x20234cc, 4 closemessage setvar 0x8004, 2 diff --git a/data/specials.inc b/data/specials.inc index 6ce9b5b1e..841385233 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -241,19 +241,19 @@ gSpecials:: def_special sub_8134548 def_special sub_81347F8 def_special CheckPartyBattleTowerBanlist - def_special sub_8135474 - def_special sub_81360C0 + def_special PrintBattleTowerTrainerGreeting + def_special PrintEReaderTrainerGreeting def_special sub_813556C def_special sub_8135668 def_special sub_81358A4 def_special sub_8135A14 def_special sub_8135BA0 - def_special sub_8135C38 - def_special sub_8135D84 - def_special sub_8135DEC - def_special sub_8135E50 + def_special BattleTower_SoftReset + def_special DetermineBattleTowerPrize + def_special GiveBattleTowerPrize + def_special AwardBattleTowerRibbons def_special ChooseBattleTowerPlayerParty - def_special sub_813601C + def_special ValidateEReaderTrainer def_special sub_810F404 def_special ReducePlayerPartyToThree def_special BedroomPC @@ -329,7 +329,7 @@ gSpecials:: def_special sp13F_fall_to_last_warp def_special ShowContestEntryMonPic def_special sub_80C5164 - def_special sub_8134AB4 + def_special SetEReaderTrainerGfxId def_special ScrSpecial_StartSouthernIslandBattle def_special SetRoute119Weather def_special SetRoute123Weather diff --git a/include/battle_tower.h b/include/battle_tower.h index 4b5e66eac..a54ae6bc7 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -81,19 +81,19 @@ enum struct BattleTowerPokemon { /*0x00*/u16 species; - /*0x02*/u8 item; // entry in gBattleTowerHeldItems + /*0x02*/u8 heldItem; // entry in sBattleTowerHeldItems /*0x03*/u8 teamFlags; /*0x04*/u16 moves[4]; /*0x0C*/u8 evSpread; /*0x0D*/u8 nature; }; -void sub_813461C(u8 levelType); +u16 GetCurrentBattleTowerWinStreak(u8); void sub_8134AC0(struct BattleTowerRecord *); u16 sub_8135D3C(u8); -void sub_8135FF4(u8*); -u8 sub_8135FBC(void); -u8 sub_8135FD8(void); -void sub_813601C(void); +void SetEReaderTrainerName(u8*); +u8 GetEReaderTrainerPicIndex(void); +u8 GetEReaderTrainerClassNameIndex(void); +void ValidateEReaderTrainer(void); #endif // GUARD_BATTLE_TOWER_H diff --git a/include/global.h b/include/global.h index 8461624cb..fcdd4109c 100644 --- a/include/global.h +++ b/include/global.h @@ -764,9 +764,9 @@ struct BattleTowerTrainer struct BattleTowerRecord // record mixing { - /*0x00*/u8 var_0; + /*0x00*/u8 battleTowerLevelType; // 0 = level 50, 1 = level 100 /*0x01*/u8 trainerClass; - /*0x02*/u16 var_2; + /*0x02*/u16 winStreak; /*0x04*/u8 name[8]; /*0x0C*/u8 trainerId[4]; /*0x10*/struct { @@ -780,7 +780,7 @@ struct BattleTowerEReaderTrainer { /*0x00*/u8 unk0; /*0x01*/u8 trainerClass; - /*0x02*/u16 var_2; // TODO: this gets set in MEScrCmd_addtrainer + /*0x02*/u16 winStreak; /*0x04*/u8 name[8]; /*0x0C*/u8 trainerId[4]; /*0x10*/struct { @@ -809,8 +809,8 @@ struct BattleTowerData /*0x04AC, 0x0554*/ u8 unk_554:1; /*0x04AD, 0x0555*/ u8 battleOutcome; /*0x04AE, 0x0556*/ u8 var_4AE[2]; - /*0x04B0, 0x0558*/ u16 curChallengeWins[2]; // number of wins in the current challenge. (challenges consist of 7 battles) - /*0x04B4, 0x055C*/ u16 curStreakChallengesCompleted[2]; // number of challenges completed in the current streak. + /*0x04B0, 0x0558*/ u16 curChallengeBattleNum[2]; // 1-based index of battle in the current challenge. (challenges consist of 7 battles) + /*0x04B4, 0x055C*/ u16 curStreakChallengesNum[2]; // 1-based index of the current challenge in the current streak. /*0x04B8, 0x0560*/ u16 recordWinStreaks[2]; /*0x04BC, 0x0564*/ u8 battleTowerTrainerId; // index for gBattleTowerTrainers table /*0x04BD, 0x0565*/ u8 selectedPartyMons[0x3]; // indices of the 3 selected player party mons. 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 --- include/battle_tower.h | 3 +++ include/global.h | 2 +- src/battle_tower.c | 53 +++++++++++++++++++++++++------------------------- 3 files changed, 31 insertions(+), 27 deletions(-) diff --git a/include/battle_tower.h b/include/battle_tower.h index a54ae6bc7..8f179a68c 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -1,6 +1,9 @@ #ifndef GUARD_BATTLE_TOWER_H #define GUARD_BATTLE_TOWER_H +#define BATTLE_TOWER_EREADER_TRAINER_ID 200 +#define BATTLE_TOWER_RECORD_MIXING_TRAINER_BASE_ID 100 + enum { F_EV_SPREAD_HP = 1 << 0, diff --git a/include/global.h b/include/global.h index fcdd4109c..d73cd5fdf 100644 --- a/include/global.h +++ b/include/global.h @@ -815,7 +815,7 @@ struct BattleTowerData /*0x04BC, 0x0564*/ u8 battleTowerTrainerId; // index for gBattleTowerTrainers table /*0x04BD, 0x0565*/ u8 selectedPartyMons[0x3]; // indices of the 3 selected player party mons. /*0x04C0, 0x0568*/ u16 prizeItem; - /*0x04C2, 0x056A*/ u8 var_4C2[0x6]; + /*0x04C2, 0x056A*/ u8 filler_4C2[0x6]; /*0x04C8, 0x0570*/ u16 totalBattleTowerWins; /*0x04CA, 0x0572*/ u16 bestBattleTowerWinStreak; /*0x04CC, 0x0574*/ u16 currentWinStreaks[2]; 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 0a95d8d97fde65213b31ed2e0412dde218b61590 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 2 Nov 2017 17:57:33 -0700 Subject: Cleanup unused structs --- include/global.h | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/include/global.h b/include/global.h index d73cd5fdf..29804a5a9 100644 --- a/include/global.h +++ b/include/global.h @@ -729,29 +729,6 @@ struct Pokedex /*0x44*/ u8 seen[DEX_FLAGS_NO]; }; -// struct EReaderTrainerPokemon -// { -// /*0x00, 0x4CC*/u16 unk0; -// /*0x02, 0x4CE*/u16 unk2; -// /*0x04, 0x4D0*/u8 unk4[0x8]; -// /*0x0C, 0x4D8*/u8 level; -// /*0x0D, 0x4D9*/u8 unk9[0x1F]; -// }; - -// struct EReaderTrainer -// { -// /*0x00, 0x498*/u8 filler_0[2]; -// /*0x02, 0x49A*/u16 unk2; -// /*0x04, 0x49C*/u8 filler_4[0x30]; -// /*0x34, 0x4CC*/struct EReaderTrainerPokemon party[3]; -// /*0xB8, 0x550*/u32 unkB8; -// }; - -struct SaveBlock2_1 -{ - u32 filler_0[0x29]; -}; - struct BattleTowerTrainer { u8 trainerClass; -- 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/ --- ld_script.txt | 4 +- src/battle_tower.c | 2375 ---------------------------------------------- src/field/battle_tower.c | 2375 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 2377 insertions(+), 2377 deletions(-) delete mode 100644 src/battle_tower.c create mode 100644 src/field/battle_tower.c diff --git a/ld_script.txt b/ld_script.txt index 16b09ed87..8bd51678a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -231,7 +231,7 @@ SECTIONS { src/field/fldeff_softboiled.o(.text); src/field/decoration_inventory.o(.text); src/field/roamer.o(.text); - src/battle_tower.o(.text); + src/field/battle_tower.o(.text); src/field/use_pokeblock.o(.text); src/battle/battle_controller_wally.o(.text); src/field/player_pc.o(.text); @@ -444,7 +444,7 @@ SECTIONS { src/pokemon/learn_move.o(.rodata); src/field/decoration_inventory.o(.rodata); src/field/roamer.o(.rodata); - src/battle_tower.o(.rodata); + src/field/battle_tower.o(.rodata); src/field/use_pokeblock.o(.rodata); src/battle/battle_controller_wally.o(.rodata); src/field/player_pc.o(.rodata); 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(-) 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(-) 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