diff options
231 files changed, 16956 insertions, 13283 deletions
diff --git a/asm/battle_9.s b/asm/battle_9.s index fc4cbcf4b..9dbb7c619 100644 --- a/asm/battle_9.s +++ b/asm/battle_9.s @@ -273,7 +273,7 @@ sub_80361E8: @ 80361E8 beq _08036214 b _08036400 _08036214: - ldr r1, _0803627C @ =gMoveHitWith + ldr r1, _0803627C @ =gLastLandedMoves ldr r5, _08036280 @ =gActiveBank ldrb r3, [r5] lsls r0, r3, 1 @@ -326,7 +326,7 @@ _08036242: ldrb r7, [r5] b _080362B2 .align 2, 0 -_0803627C: .4byte gMoveHitWith +_0803627C: .4byte gLastLandedMoves _08036280: .4byte gActiveBank _08036284: .4byte 0x0000ffff _08036288: .4byte gBattleMoves @@ -348,7 +348,7 @@ _080362AE: mov r8, r7 _080362B2: ldr r3, _080362D4 @ =gBattleMoves - ldr r1, _080362D8 @ =gMoveHitWith + ldr r1, _080362D8 @ =gLastLandedMoves ldr r2, _080362DC @ =gActiveBank ldrb r0, [r2] lsls r0, 1 @@ -366,7 +366,7 @@ _080362B2: b _080362F2 .align 2, 0 _080362D4: .4byte gBattleMoves -_080362D8: .4byte gMoveHitWith +_080362D8: .4byte gLastLandedMoves _080362DC: .4byte gActiveBank _080362E0: cmp r0, 0xB @@ -548,7 +548,7 @@ AI_SwitchIfNaturalCure: @ 8036410 lsrs r0, 1 cmp r1, r0 bcc _080364D8 - ldr r1, _08036470 @ =gMoveHitWith + ldr r1, _08036470 @ =gLastLandedMoves lsls r0, r4, 1 adds r0, r1 ldrh r1, [r0] @@ -568,11 +568,11 @@ _08036456: .align 2, 0 _08036468: .4byte gBattleMons _0803646C: .4byte gActiveBank -_08036470: .4byte gMoveHitWith +_08036470: .4byte gLastLandedMoves _08036474: .4byte 0x0000ffff _08036478: ldr r2, _080364A4 @ =gBattleMoves - ldr r1, _080364A8 @ =gMoveHitWith + ldr r1, _080364A8 @ =gLastLandedMoves ldr r4, _080364AC @ =gActiveBank ldrb r0, [r4] lsls r0, 1 @@ -594,7 +594,7 @@ _08036478: b _080364E0 .align 2, 0 _080364A4: .4byte gBattleMoves -_080364A8: .4byte gMoveHitWith +_080364A8: .4byte gLastLandedMoves _080364AC: .4byte gActiveBank _080364B0: movs r0, 0x8 @@ -863,7 +863,7 @@ sub_80366A4: @ 80366A4 lsls r1, 24 lsrs r1, 24 str r1, [sp, 0x4] - ldr r1, _08036730 @ =gMoveHitWith + ldr r1, _08036730 @ =gLastLandedMoves ldr r5, _08036734 @ =gActiveBank ldrb r3, [r5] lsls r0, r3, 1 @@ -924,7 +924,7 @@ _080366F6: mov r10, r5 b _0803679C .align 2, 0 -_08036730: .4byte gMoveHitWith +_08036730: .4byte gLastLandedMoves _08036734: .4byte gActiveBank _08036738: .4byte 0x0000ffff _0803673C: .4byte gUnknown_02024C5C @@ -1053,7 +1053,7 @@ _08036844: adds r0, r2 ldrb r2, [r0, 0x16] _08036850: - ldr r1, _080368F0 @ =gMoveHitWith + ldr r1, _080368F0 @ =gLastLandedMoves ldr r5, _080368F4 @ =gActiveBank ldrb r0, [r5] lsls r0, 1 @@ -1132,7 +1132,7 @@ _080368DA: bx r1 .align 2, 0 _080368EC: .4byte gBaseStats -_080368F0: .4byte gMoveHitWith +_080368F0: .4byte gLastLandedMoves _080368F4: .4byte gActiveBank _080368F8: .4byte gUnknown_02024C5C _080368FC: .4byte gBattleMons diff --git a/asm/contest_ai.s b/asm/contest_ai.s deleted file mode 100644 index 709b289c2..000000000 --- a/asm/contest_ai.s +++ /dev/null @@ -1,5292 +0,0 @@ - .include "constants/gba_constants.inc" - .include "include/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_81288F4 -sub_81288F4: @ 81288F4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r4, _0812893C @ =gSharedMem + 0x192E4 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x44 - bl memset - movs r3, 0x64 - adds r2, r4, 0 - movs r1, 0x3 - adds r0, r2, 0 - adds r0, 0x8 -_08128910: - strb r3, [r0] - subs r0, 0x1 - subs r1, 0x1 - cmp r1, 0 - bge _08128910 - adds r3, r2, 0 - adds r3, 0x41 - movs r1, 0 - strb r5, [r3] - adds r0, r2, 0 - adds r0, 0x40 - strb r1, [r0] - ldr r1, _08128940 @ =gContestMons - ldrb r0, [r3] - lsls r0, 6 - adds r1, 0x18 - adds r0, r1 - ldr r0, [r0] - str r0, [r2, 0x14] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812893C: .4byte gSharedMem + 0x192E4 -_08128940: .4byte gContestMons - thumb_func_end sub_81288F4 - - thumb_func_start sub_8128944 -sub_8128944: @ 8128944 - push {r4-r6,lr} - ldr r1, _081289A8 @ =gSharedMem + 0x192E4 - ldr r0, [r1, 0x14] - cmp r0, 0 - beq _08128974 - adds r4, r1, 0 - movs r5, 0 -_08128952: - ldr r0, [r4, 0x14] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08128962 - strb r5, [r4] - bl sub_81289AC -_08128962: - ldr r1, [r4, 0x14] - lsrs r1, 1 - str r1, [r4, 0x14] - ldrb r0, [r4, 0x10] - adds r0, 0x1 - strb r0, [r4, 0x10] - strb r5, [r4, 0x4] - cmp r1, 0 - bne _08128952 -_08128974: - movs r6, 0x3 - ldr r5, _081289A8 @ =gSharedMem + 0x192E4 -_08128978: - bl Random - adds r4, r0, 0 - ands r4, r6 - adds r3, r5, 0x5 - adds r0, r4, r3 - ldrb r2, [r0] - movs r1, 0 - ldrb r0, [r5, 0x5] - cmp r2, r0 - bcc _0812899C -_0812898E: - adds r1, 0x1 - cmp r1, 0x3 - bgt _0812899C - adds r0, r1, r3 - ldrb r0, [r0] - cmp r2, r0 - bcs _0812898E -_0812899C: - cmp r1, 0x4 - bne _08128978 - adds r0, r4, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_081289A8: .4byte gSharedMem + 0x192E4 - thumb_func_end sub_8128944 - - thumb_func_start sub_81289AC -sub_81289AC: @ 81289AC - push {r4-r6,lr} - ldr r1, _081289F4 @ =gSharedMem + 0x192E4 - ldrb r0, [r1] - adds r2, r1, 0 - cmp r0, 0x2 - beq _08128A76 - adds r4, r1, 0 - ldr r5, _081289F8 @ =gAIScriptPtr - ldr r6, _081289FC @ =gUnknown_0203858E -_081289BE: - ldrb r0, [r4] - cmp r0, 0x1 - beq _08128A0E - cmp r0, 0x1 - bgt _08128A6E - cmp r0, 0 - bne _08128A6E - ldr r1, _08128A00 @ =gContestAIs - ldrb r0, [r4, 0x10] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - str r0, [r5] - ldrb r1, [r4, 0x4] - lsls r1, 1 - adds r0, r4, 0 - adds r0, 0x41 - ldrb r0, [r0] - lsls r0, 6 - adds r1, r0 - adds r1, r6 - ldrh r1, [r1] - adds r0, r1, 0 - cmp r0, 0 - bne _08128A04 - strh r0, [r4, 0x2] - b _08128A06 - .align 2, 0 -_081289F4: .4byte gSharedMem + 0x192E4 -_081289F8: .4byte gAIScriptPtr -_081289FC: .4byte gUnknown_0203858E -_08128A00: .4byte gContestAIs -_08128A04: - strh r1, [r4, 0x2] -_08128A06: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08128A6E -_08128A0E: - ldrh r1, [r1, 0x2] - cmp r1, 0 - beq _08128A2C - ldr r1, _08128A28 @ =sContestAICmdTable - ldr r0, [r5] - ldrb r0, [r0] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 - b _08128A3C - .align 2, 0 -_08128A28: .4byte sContestAICmdTable -_08128A2C: - adds r0, r4, 0x5 - ldrb r2, [r4, 0x4] - adds r0, r2 - strb r1, [r0] - ldrb r1, [r4, 0x9] - movs r0, 0x1 - orrs r0, r1 - strb r0, [r4, 0x9] -_08128A3C: - ldr r2, _08128A5C @ =gSharedMem + 0x192E4 - ldrb r1, [r2, 0x9] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08128A6E - ldrb r0, [r2, 0x4] - adds r0, 0x1 - movs r1, 0 - strb r0, [r2, 0x4] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bhi _08128A60 - strb r1, [r2] - b _08128A66 - .align 2, 0 -_08128A5C: .4byte gSharedMem + 0x192E4 -_08128A60: - ldrb r0, [r2] - adds r0, 0x1 - strb r0, [r2] -_08128A66: - ldrb r1, [r4, 0x9] - movs r0, 0xFE - ands r0, r1 - strb r0, [r4, 0x9] -_08128A6E: - adds r1, r2, 0 - ldrb r0, [r1] - cmp r0, 0x2 - bne _081289BE -_08128A76: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_81289AC - - thumb_func_start sub_8128A7C -sub_8128A7C: @ 8128A7C - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - movs r1, 0 - ldr r3, _08128AA4 @ =gSharedMem + 0x192D0 - ldrb r0, [r3] - cmp r0, r2 - beq _08128A9A -_08128A8C: - adds r1, 0x1 - cmp r1, 0x3 - bgt _08128A9A - adds r0, r1, r3 - ldrb r0, [r0] - cmp r0, r2 - bne _08128A8C -_08128A9A: - lsls r0, r1, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08128AA4: .4byte gSharedMem + 0x192D0 - thumb_func_end sub_8128A7C - - thumb_func_start ContestAICmd_unk_00 -ContestAICmd_unk_00: @ 8128AA8 - push {lr} - ldr r2, _08128AD0 @ =gSharedMem + 0x192E4 - adds r1, r2, 0x5 - ldrb r0, [r2, 0x4] - adds r1, r0 - ldr r3, _08128AD4 @ =gAIScriptPtr - ldr r0, [r3] - ldrb r0, [r0, 0x1] - lsls r0, 24 - asrs r0, 24 - ldrb r1, [r1] - adds r0, r1 - lsls r0, 16 - lsrs r1, r0, 16 - asrs r0, 16 - cmp r0, 0xFF - ble _08128AD8 - movs r1, 0xFF - b _08128ADE - .align 2, 0 -_08128AD0: .4byte gSharedMem + 0x192E4 -_08128AD4: .4byte gAIScriptPtr -_08128AD8: - cmp r0, 0 - bge _08128ADE - movs r1, 0 -_08128ADE: - adds r0, r2, 0x5 - ldrb r2, [r2, 0x4] - adds r0, r2 - strb r1, [r0] - ldr r0, [r3] - adds r0, 0x2 - str r0, [r3] - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_00 - - thumb_func_start ContestAICmd_get_turn -ContestAICmd_get_turn: @ 8128AF0 - ldr r1, _08128B04 @ =gSharedMem + 0x192E4 - adds r0, r1, 0 - subs r0, 0xE0 - ldrb r0, [r0, 0x1] - strh r0, [r1, 0x18] - ldr r1, _08128B08 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_08128B04: .4byte gSharedMem + 0x192E4 -_08128B08: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_get_turn - - thumb_func_start ContestAICmd_unk_02 -ContestAICmd_unk_02: @ 8128B0C - push {lr} - bl ContestAICmd_get_turn - ldr r0, _08128B3C @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128B40 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bge _08128B44 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128B48 - .align 2, 0 -_08128B3C: .4byte gSharedMem + 0x192E4 -_08128B40: .4byte gAIScriptPtr -_08128B44: - adds r0, r2, 0x5 - str r0, [r3] -_08128B48: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_02 - - thumb_func_start ContestAICmd_unk_03 -ContestAICmd_unk_03: @ 8128B4C - push {lr} - bl ContestAICmd_get_turn - ldr r0, _08128B7C @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128B80 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - ble _08128B84 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128B88 - .align 2, 0 -_08128B7C: .4byte gSharedMem + 0x192E4 -_08128B80: .4byte gAIScriptPtr -_08128B84: - adds r0, r2, 0x5 - str r0, [r3] -_08128B88: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_03 - - thumb_func_start ContestAICmd_unk_04 -ContestAICmd_unk_04: @ 8128B8C - push {lr} - bl ContestAICmd_get_turn - ldr r0, _08128BBC @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128BC0 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _08128BC4 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128BC8 - .align 2, 0 -_08128BBC: .4byte gSharedMem + 0x192E4 -_08128BC0: .4byte gAIScriptPtr -_08128BC4: - adds r0, r2, 0x5 - str r0, [r3] -_08128BC8: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_04 - - thumb_func_start ContestAICmd_unk_05 -ContestAICmd_unk_05: @ 8128BCC - push {lr} - bl ContestAICmd_get_turn - ldr r0, _08128BFC @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128C00 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _08128C04 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128C08 - .align 2, 0 -_08128BFC: .4byte gSharedMem + 0x192E4 -_08128C00: .4byte gAIScriptPtr -_08128C04: - adds r0, r2, 0x5 - str r0, [r3] -_08128C08: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_05 - - thumb_func_start ContestAICmd_get_excitement -ContestAICmd_get_excitement: @ 8128C0C - ldr r1, _08128C24 @ =gSharedMem + 0x192E4 - adds r0, r1, 0 - subs r0, 0xE0 - ldrb r0, [r0, 0x13] - lsls r0, 24 - asrs r0, 24 - strh r0, [r1, 0x18] - ldr r1, _08128C28 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_08128C24: .4byte gSharedMem + 0x192E4 -_08128C28: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_get_excitement - - thumb_func_start ContestAICmd_unk_07 -ContestAICmd_unk_07: @ 8128C2C - push {lr} - bl ContestAICmd_get_excitement - ldr r0, _08128C5C @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128C60 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bge _08128C64 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128C68 - .align 2, 0 -_08128C5C: .4byte gSharedMem + 0x192E4 -_08128C60: .4byte gAIScriptPtr -_08128C64: - adds r0, r2, 0x5 - str r0, [r3] -_08128C68: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_07 - - thumb_func_start ContestAICmd_unk_08 -ContestAICmd_unk_08: @ 8128C6C - push {lr} - bl ContestAICmd_get_excitement - ldr r0, _08128C9C @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128CA0 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - ble _08128CA4 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128CA8 - .align 2, 0 -_08128C9C: .4byte gSharedMem + 0x192E4 -_08128CA0: .4byte gAIScriptPtr -_08128CA4: - adds r0, r2, 0x5 - str r0, [r3] -_08128CA8: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_08 - - thumb_func_start ContestAICmd_unk_09 -ContestAICmd_unk_09: @ 8128CAC - push {lr} - bl ContestAICmd_get_excitement - ldr r0, _08128CDC @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128CE0 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _08128CE4 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128CE8 - .align 2, 0 -_08128CDC: .4byte gSharedMem + 0x192E4 -_08128CE0: .4byte gAIScriptPtr -_08128CE4: - adds r0, r2, 0x5 - str r0, [r3] -_08128CE8: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_09 - - thumb_func_start ContestAICmd_unk_0A -ContestAICmd_unk_0A: @ 8128CEC - push {lr} - bl ContestAICmd_get_excitement - ldr r0, _08128D1C @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128D20 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _08128D24 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128D28 - .align 2, 0 -_08128D1C: .4byte gSharedMem + 0x192E4 -_08128D20: .4byte gAIScriptPtr -_08128D24: - adds r0, r2, 0x5 - str r0, [r3] -_08128D28: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_0A - - thumb_func_start ContestAICmd_get_user_order -ContestAICmd_get_user_order: @ 8128D2C - ldr r1, _08128D48 @ =gSharedMem + 0x192E4 - adds r2, r1, 0 - adds r2, 0x41 - adds r0, r1, 0 - subs r0, 0x14 - ldrb r2, [r2] - adds r0, r2 - ldrb r0, [r0] - strh r0, [r1, 0x18] - ldr r1, _08128D4C @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_08128D48: .4byte gSharedMem + 0x192E4 -_08128D4C: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_get_user_order - - thumb_func_start ContestAICmd_unk_0C -ContestAICmd_unk_0C: @ 8128D50 - push {lr} - bl ContestAICmd_get_user_order - ldr r0, _08128D80 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128D84 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bge _08128D88 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128D8C - .align 2, 0 -_08128D80: .4byte gSharedMem + 0x192E4 -_08128D84: .4byte gAIScriptPtr -_08128D88: - adds r0, r2, 0x5 - str r0, [r3] -_08128D8C: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_0C - - thumb_func_start ContestAICmd_unk_0D -ContestAICmd_unk_0D: @ 8128D90 - push {lr} - bl ContestAICmd_get_user_order - ldr r0, _08128DC0 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128DC4 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - ble _08128DC8 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128DCC - .align 2, 0 -_08128DC0: .4byte gSharedMem + 0x192E4 -_08128DC4: .4byte gAIScriptPtr -_08128DC8: - adds r0, r2, 0x5 - str r0, [r3] -_08128DCC: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_0D - - thumb_func_start ContestAICmd_unk_0E -ContestAICmd_unk_0E: @ 8128DD0 - push {lr} - bl ContestAICmd_get_user_order - ldr r0, _08128E00 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128E04 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _08128E08 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128E0C - .align 2, 0 -_08128E00: .4byte gSharedMem + 0x192E4 -_08128E04: .4byte gAIScriptPtr -_08128E08: - adds r0, r2, 0x5 - str r0, [r3] -_08128E0C: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_0E - - thumb_func_start ContestAICmd_unk_0F -ContestAICmd_unk_0F: @ 8128E10 - push {lr} - bl ContestAICmd_get_user_order - ldr r0, _08128E40 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128E44 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _08128E48 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128E4C - .align 2, 0 -_08128E40: .4byte gSharedMem + 0x192E4 -_08128E44: .4byte gAIScriptPtr -_08128E48: - adds r0, r2, 0x5 - str r0, [r3] -_08128E4C: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_0F - - thumb_func_start ContestAICmd_get_user_condition_maybe -ContestAICmd_get_user_condition_maybe: @ 8128E50 - push {r4,lr} - ldr r4, _08128E88 @ =gSharedMem + 0x192E4 - adds r0, r4, 0 - adds r0, 0x41 - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r1, r4, 0 - subs r1, 0x84 - adds r0, r1 - ldrb r0, [r0, 0xD] - lsls r0, 24 - asrs r0, 24 - movs r1, 0xA - bl __divsi3 - lsls r0, 24 - asrs r0, 24 - strh r0, [r4, 0x18] - ldr r1, _08128E8C @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08128E88: .4byte gSharedMem + 0x192E4 -_08128E8C: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_get_user_condition_maybe - - thumb_func_start ContestAICmd_unk_11 -ContestAICmd_unk_11: @ 8128E90 - push {lr} - bl ContestAICmd_get_user_condition_maybe - ldr r0, _08128EC0 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128EC4 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bge _08128EC8 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128ECC - .align 2, 0 -_08128EC0: .4byte gSharedMem + 0x192E4 -_08128EC4: .4byte gAIScriptPtr -_08128EC8: - adds r0, r2, 0x5 - str r0, [r3] -_08128ECC: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_11 - - thumb_func_start ContestAICmd_unk_12 -ContestAICmd_unk_12: @ 8128ED0 - push {lr} - bl ContestAICmd_get_user_condition_maybe - ldr r0, _08128F00 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128F04 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - ble _08128F08 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128F0C - .align 2, 0 -_08128F00: .4byte gSharedMem + 0x192E4 -_08128F04: .4byte gAIScriptPtr -_08128F08: - adds r0, r2, 0x5 - str r0, [r3] -_08128F0C: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_12 - - thumb_func_start ContestAICmd_unk_13 -ContestAICmd_unk_13: @ 8128F10 - push {lr} - bl ContestAICmd_get_user_condition_maybe - ldr r0, _08128F40 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128F44 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _08128F48 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128F4C - .align 2, 0 -_08128F40: .4byte gSharedMem + 0x192E4 -_08128F44: .4byte gAIScriptPtr -_08128F48: - adds r0, r2, 0x5 - str r0, [r3] -_08128F4C: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_13 - - thumb_func_start ContestAICmd_unk_14 -ContestAICmd_unk_14: @ 8128F50 - push {lr} - bl ContestAICmd_get_user_condition_maybe - ldr r0, _08128F80 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08128F84 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _08128F88 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08128F8C - .align 2, 0 -_08128F80: .4byte gSharedMem + 0x192E4 -_08128F84: .4byte gAIScriptPtr -_08128F88: - adds r0, r2, 0x5 - str r0, [r3] -_08128F8C: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_14 - - thumb_func_start ContestAICmd_unk_15 -ContestAICmd_unk_15: @ 8128F90 - ldr r2, _08128FB4 @ =gSharedMem + 0x192E4 - adds r0, r2, 0 - adds r0, 0x41 - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r1, r2, 0 - subs r1, 0x84 - adds r0, r1 - ldrh r0, [r0, 0x4] - strh r0, [r2, 0x18] - ldr r1, _08128FB8 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_08128FB4: .4byte gSharedMem + 0x192E4 -_08128FB8: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_15 - - thumb_func_start ContestAICmd_unk_16 -ContestAICmd_unk_16: @ 8128FBC - push {r4,r5,lr} - bl ContestAICmd_unk_15 - ldr r2, _08128FF4 @ =gSharedMem + 0x192E4 - ldr r4, _08128FF8 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r1, [r3] - ldrb r0, [r3, 0x1] - lsls r0, 8 - orrs r1, r0 - movs r5, 0x18 - ldrsh r0, [r2, r5] - lsls r1, 16 - asrs r1, 16 - cmp r0, r1 - bge _08128FFC - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _08129000 - .align 2, 0 -_08128FF4: .4byte gSharedMem + 0x192E4 -_08128FF8: .4byte gAIScriptPtr -_08128FFC: - adds r0, r3, 0x6 - str r0, [r4] -_08129000: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_16 - - thumb_func_start ContestAICmd_unk_17 -ContestAICmd_unk_17: @ 8129008 - push {r4,r5,lr} - bl ContestAICmd_unk_15 - ldr r2, _08129040 @ =gSharedMem + 0x192E4 - ldr r4, _08129044 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r1, [r3] - ldrb r0, [r3, 0x1] - lsls r0, 8 - orrs r1, r0 - movs r5, 0x18 - ldrsh r0, [r2, r5] - lsls r1, 16 - asrs r1, 16 - cmp r0, r1 - ble _08129048 - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _0812904C - .align 2, 0 -_08129040: .4byte gSharedMem + 0x192E4 -_08129044: .4byte gAIScriptPtr -_08129048: - adds r0, r3, 0x6 - str r0, [r4] -_0812904C: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_17 - - thumb_func_start ContestAICmd_unk_18 -ContestAICmd_unk_18: @ 8129054 - push {r4,r5,lr} - bl ContestAICmd_unk_15 - ldr r2, _0812908C @ =gSharedMem + 0x192E4 - ldr r4, _08129090 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r1, [r3] - ldrb r0, [r3, 0x1] - lsls r0, 8 - orrs r1, r0 - movs r5, 0x18 - ldrsh r0, [r2, r5] - lsls r1, 16 - asrs r1, 16 - cmp r0, r1 - bne _08129094 - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _08129098 - .align 2, 0 -_0812908C: .4byte gSharedMem + 0x192E4 -_08129090: .4byte gAIScriptPtr -_08129094: - adds r0, r3, 0x6 - str r0, [r4] -_08129098: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_18 - - thumb_func_start ContestAICmd_unk_19 -ContestAICmd_unk_19: @ 81290A0 - push {r4,r5,lr} - bl ContestAICmd_unk_15 - ldr r2, _081290D8 @ =gSharedMem + 0x192E4 - ldr r4, _081290DC @ =gAIScriptPtr - ldr r3, [r4] - ldrb r1, [r3] - ldrb r0, [r3, 0x1] - lsls r0, 8 - orrs r1, r0 - movs r5, 0x18 - ldrsh r0, [r2, r5] - lsls r1, 16 - asrs r1, 16 - cmp r0, r1 - beq _081290E0 - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _081290E4 - .align 2, 0 -_081290D8: .4byte gSharedMem + 0x192E4 -_081290DC: .4byte gAIScriptPtr -_081290E0: - adds r0, r3, 0x6 - str r0, [r4] -_081290E4: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_19 - - thumb_func_start ContestAICmd_unk_1A -ContestAICmd_unk_1A: @ 81290EC - ldr r2, _08129108 @ =gSharedMem + 0x192E4 - ldr r1, _0812910C @ =gUnknown_02038670 - adds r0, r2, 0 - adds r0, 0x41 - ldrb r0, [r0] - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] - strh r0, [r2, 0x18] - ldr r1, _08129110 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_08129108: .4byte gSharedMem + 0x192E4 -_0812910C: .4byte gUnknown_02038670 -_08129110: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_1A - - thumb_func_start ContestAICmd_unk_1B -ContestAICmd_unk_1B: @ 8129114 - push {r4,r5,lr} - bl ContestAICmd_unk_1A - ldr r2, _0812914C @ =gSharedMem + 0x192E4 - ldr r4, _08129150 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r1, [r3] - ldrb r0, [r3, 0x1] - lsls r0, 8 - orrs r1, r0 - movs r5, 0x18 - ldrsh r0, [r2, r5] - lsls r1, 16 - asrs r1, 16 - cmp r0, r1 - bge _08129154 - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _08129158 - .align 2, 0 -_0812914C: .4byte gSharedMem + 0x192E4 -_08129150: .4byte gAIScriptPtr -_08129154: - adds r0, r3, 0x6 - str r0, [r4] -_08129158: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_1B - - thumb_func_start ContestAICmd_unk_1C -ContestAICmd_unk_1C: @ 8129160 - push {r4,r5,lr} - bl ContestAICmd_unk_1A - ldr r2, _08129198 @ =gSharedMem + 0x192E4 - ldr r4, _0812919C @ =gAIScriptPtr - ldr r3, [r4] - ldrb r1, [r3] - ldrb r0, [r3, 0x1] - lsls r0, 8 - orrs r1, r0 - movs r5, 0x18 - ldrsh r0, [r2, r5] - lsls r1, 16 - asrs r1, 16 - cmp r0, r1 - ble _081291A0 - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _081291A4 - .align 2, 0 -_08129198: .4byte gSharedMem + 0x192E4 -_0812919C: .4byte gAIScriptPtr -_081291A0: - adds r0, r3, 0x6 - str r0, [r4] -_081291A4: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_1C - - thumb_func_start ContestAICmd_unk_1D -ContestAICmd_unk_1D: @ 81291AC - push {r4,r5,lr} - bl ContestAICmd_unk_1A - ldr r2, _081291E4 @ =gSharedMem + 0x192E4 - ldr r4, _081291E8 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r1, [r3] - ldrb r0, [r3, 0x1] - lsls r0, 8 - orrs r1, r0 - movs r5, 0x18 - ldrsh r0, [r2, r5] - lsls r1, 16 - asrs r1, 16 - cmp r0, r1 - bne _081291EC - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _081291F0 - .align 2, 0 -_081291E4: .4byte gSharedMem + 0x192E4 -_081291E8: .4byte gAIScriptPtr -_081291EC: - adds r0, r3, 0x6 - str r0, [r4] -_081291F0: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_1D - - thumb_func_start ContestAICmd_unk_1E -ContestAICmd_unk_1E: @ 81291F8 - push {r4,r5,lr} - bl ContestAICmd_unk_1A - ldr r2, _08129230 @ =gSharedMem + 0x192E4 - ldr r4, _08129234 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r1, [r3] - ldrb r0, [r3, 0x1] - lsls r0, 8 - orrs r1, r0 - movs r5, 0x18 - ldrsh r0, [r2, r5] - lsls r1, 16 - asrs r1, 16 - cmp r0, r1 - beq _08129238 - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _0812923C - .align 2, 0 -_08129230: .4byte gSharedMem + 0x192E4 -_08129234: .4byte gAIScriptPtr -_08129238: - adds r0, r3, 0x6 - str r0, [r4] -_0812923C: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_1E - - thumb_func_start ContestAICmd_get_contest_type -ContestAICmd_get_contest_type: @ 8129244 - ldr r1, _08129258 @ =gSharedMem + 0x192E4 - ldr r0, _0812925C @ =gSpecialVar_ContestCategory - ldrh r0, [r0] - strh r0, [r1, 0x18] - ldr r1, _08129260 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_08129258: .4byte gSharedMem + 0x192E4 -_0812925C: .4byte gSpecialVar_ContestCategory -_08129260: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_get_contest_type - - thumb_func_start ContestAICmd_unk_20 -ContestAICmd_unk_20: @ 8129264 - push {lr} - bl ContestAICmd_get_contest_type - ldr r0, _08129294 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08129298 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _0812929C - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _081292A0 - .align 2, 0 -_08129294: .4byte gSharedMem + 0x192E4 -_08129298: .4byte gAIScriptPtr -_0812929C: - adds r0, r2, 0x5 - str r0, [r3] -_081292A0: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_20 - - thumb_func_start ContestAICmd_unk_21 -ContestAICmd_unk_21: @ 81292A4 - push {lr} - bl ContestAICmd_get_contest_type - ldr r0, _081292D4 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _081292D8 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _081292DC - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _081292E0 - .align 2, 0 -_081292D4: .4byte gSharedMem + 0x192E4 -_081292D8: .4byte gAIScriptPtr -_081292DC: - adds r0, r2, 0x5 - str r0, [r3] -_081292E0: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_21 - - thumb_func_start ContestAICmd_get_move_excitement -ContestAICmd_get_move_excitement: @ 81292E4 - push {r4,lr} - ldr r2, _08129318 @ =gContestMons - ldr r4, _0812931C @ =gSharedMem + 0x192E4 - ldrb r1, [r4, 0x4] - lsls r1, 1 - adds r0, r4, 0 - adds r0, 0x41 - ldrb r0, [r0] - lsls r0, 6 - adds r1, r0 - adds r2, 0x1E - adds r1, r2 - ldrh r0, [r1] - bl Contest_GetMoveExcitement - lsls r0, 24 - asrs r0, 24 - strh r0, [r4, 0x18] - ldr r1, _08129320 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08129318: .4byte gContestMons -_0812931C: .4byte gSharedMem + 0x192E4 -_08129320: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_get_move_excitement - - thumb_func_start ContestAICmd_unk_23 -ContestAICmd_unk_23: @ 8129324 - push {r4,lr} - bl ContestAICmd_get_move_excitement - ldr r0, _08129354 @ =gSharedMem + 0x192E4 - ldr r3, _08129358 @ =gAIScriptPtr - ldr r2, [r3] - movs r4, 0x18 - ldrsh r1, [r0, r4] - movs r0, 0 - ldrsb r0, [r2, r0] - cmp r1, r0 - bge _0812935C - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129360 - .align 2, 0 -_08129354: .4byte gSharedMem + 0x192E4 -_08129358: .4byte gAIScriptPtr -_0812935C: - adds r0, r2, 0x5 - str r0, [r3] -_08129360: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_23 - - thumb_func_start ContestAICmd_unk_24 -ContestAICmd_unk_24: @ 8129368 - push {r4,lr} - bl ContestAICmd_get_move_excitement - ldr r0, _08129398 @ =gSharedMem + 0x192E4 - ldr r3, _0812939C @ =gAIScriptPtr - ldr r2, [r3] - movs r4, 0x18 - ldrsh r1, [r0, r4] - movs r0, 0 - ldrsb r0, [r2, r0] - cmp r1, r0 - ble _081293A0 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _081293A4 - .align 2, 0 -_08129398: .4byte gSharedMem + 0x192E4 -_0812939C: .4byte gAIScriptPtr -_081293A0: - adds r0, r2, 0x5 - str r0, [r3] -_081293A4: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_24 - - thumb_func_start ContestAICmd_unk_25 -ContestAICmd_unk_25: @ 81293AC - push {r4,lr} - bl ContestAICmd_get_move_excitement - ldr r0, _081293DC @ =gSharedMem + 0x192E4 - ldr r3, _081293E0 @ =gAIScriptPtr - ldr r2, [r3] - movs r4, 0x18 - ldrsh r1, [r0, r4] - movs r0, 0 - ldrsb r0, [r2, r0] - cmp r1, r0 - bne _081293E4 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _081293E8 - .align 2, 0 -_081293DC: .4byte gSharedMem + 0x192E4 -_081293E0: .4byte gAIScriptPtr -_081293E4: - adds r0, r2, 0x5 - str r0, [r3] -_081293E8: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_25 - - thumb_func_start ContestAICmd_unk_26 -ContestAICmd_unk_26: @ 81293F0 - push {r4,lr} - bl ContestAICmd_get_move_excitement - ldr r0, _08129420 @ =gSharedMem + 0x192E4 - ldr r3, _08129424 @ =gAIScriptPtr - ldr r2, [r3] - movs r4, 0x18 - ldrsh r1, [r0, r4] - movs r0, 0 - ldrsb r0, [r2, r0] - cmp r1, r0 - beq _08129428 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812942C - .align 2, 0 -_08129420: .4byte gSharedMem + 0x192E4 -_08129424: .4byte gAIScriptPtr -_08129428: - adds r0, r2, 0x5 - str r0, [r3] -_0812942C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_26 - - thumb_func_start ContestAICmd_get_move_effect -ContestAICmd_get_move_effect: @ 8129434 - ldr r2, _08129460 @ =gContestMons - ldr r3, _08129464 @ =gSharedMem + 0x192E4 - ldrb r1, [r3, 0x4] - lsls r1, 1 - adds r0, r3, 0 - adds r0, 0x41 - ldrb r0, [r0] - lsls r0, 6 - adds r1, r0 - adds r2, 0x1E - adds r1, r2 - ldrh r0, [r1] - ldr r1, _08129468 @ =gContestMoves - lsls r0, 3 - adds r0, r1 - ldrb r0, [r0] - strh r0, [r3, 0x18] - ldr r1, _0812946C @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_08129460: .4byte gContestMons -_08129464: .4byte gSharedMem + 0x192E4 -_08129468: .4byte gContestMoves -_0812946C: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_get_move_effect - - thumb_func_start ContestAICmd_unk_28 -ContestAICmd_unk_28: @ 8129470 - push {lr} - bl ContestAICmd_get_move_effect - ldr r0, _081294A0 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _081294A4 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _081294A8 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _081294AC - .align 2, 0 -_081294A0: .4byte gSharedMem + 0x192E4 -_081294A4: .4byte gAIScriptPtr -_081294A8: - adds r0, r2, 0x5 - str r0, [r3] -_081294AC: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_28 - - thumb_func_start ContestAICmd_unk_29 -ContestAICmd_unk_29: @ 81294B0 - push {lr} - bl ContestAICmd_get_move_effect - ldr r0, _081294E0 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _081294E4 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _081294E8 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _081294EC - .align 2, 0 -_081294E0: .4byte gSharedMem + 0x192E4 -_081294E4: .4byte gAIScriptPtr -_081294E8: - adds r0, r2, 0x5 - str r0, [r3] -_081294EC: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_29 - - thumb_func_start ContestAICmd_get_move_effect_type -ContestAICmd_get_move_effect_type: @ 81294F0 - ldr r2, _08129524 @ =gContestMons - ldr r3, _08129528 @ =gSharedMem + 0x192E4 - ldrb r1, [r3, 0x4] - lsls r1, 1 - adds r0, r3, 0 - adds r0, 0x41 - ldrb r0, [r0] - lsls r0, 6 - adds r1, r0 - adds r2, 0x1E - adds r1, r2 - ldrh r0, [r1] - ldr r2, _0812952C @ =gContestEffects - ldr r1, _08129530 @ =gContestMoves - lsls r0, 3 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0] - strh r0, [r3, 0x18] - ldr r1, _08129534 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - bx lr - .align 2, 0 -_08129524: .4byte gContestMons -_08129528: .4byte gSharedMem + 0x192E4 -_0812952C: .4byte gContestEffects -_08129530: .4byte gContestMoves -_08129534: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_get_move_effect_type - - thumb_func_start ContestAICmd_unk_2B -ContestAICmd_unk_2B: @ 8129538 - push {lr} - bl ContestAICmd_get_move_effect_type - ldr r0, _08129568 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812956C @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _08129570 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129574 - .align 2, 0 -_08129568: .4byte gSharedMem + 0x192E4 -_0812956C: .4byte gAIScriptPtr -_08129570: - adds r0, r2, 0x5 - str r0, [r3] -_08129574: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_2B - - thumb_func_start ContestAICmd_unk_2C -ContestAICmd_unk_2C: @ 8129578 - push {lr} - bl ContestAICmd_get_move_effect_type - ldr r0, _081295A8 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _081295AC @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _081295B0 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _081295B4 - .align 2, 0 -_081295A8: .4byte gSharedMem + 0x192E4 -_081295AC: .4byte gAIScriptPtr -_081295B0: - adds r0, r2, 0x5 - str r0, [r3] -_081295B4: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_2C - - thumb_func_start ContestAICmd_check_move_has_highest_appeal -ContestAICmd_check_move_has_highest_appeal: @ 81295B8 - push {r4-r7,lr} - ldr r2, _08129610 @ =gContestMons - ldr r3, _08129614 @ =gSharedMem + 0x192E4 - ldrb r0, [r3, 0x4] - lsls r0, 1 - adds r1, r3, 0 - adds r1, 0x41 - ldrb r1, [r1] - lsls r1, 6 - adds r0, r1 - adds r2, 0x1E - adds r0, r2 - ldrh r0, [r0] - ldr r4, _08129618 @ =gContestEffects - ldr r5, _0812961C @ =gContestMoves - lsls r0, 3 - adds r0, r5 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r4 - ldrb r7, [r0, 0x1] - movs r6, 0 - ldr r0, _08129620 @ =gAIScriptPtr - mov r12, r0 - adds r1, r2 -_081295EA: - ldrh r0, [r1] - cmp r0, 0 - beq _08129600 - lsls r0, 3 - adds r0, r5 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x1] - cmp r7, r0 - bcc _08129608 -_08129600: - adds r1, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _081295EA -_08129608: - cmp r6, 0x4 - bne _08129624 - movs r0, 0x1 - b _08129626 - .align 2, 0 -_08129610: .4byte gContestMons -_08129614: .4byte gSharedMem + 0x192E4 -_08129618: .4byte gContestEffects -_0812961C: .4byte gContestMoves -_08129620: .4byte gAIScriptPtr -_08129624: - movs r0, 0 -_08129626: - strh r0, [r3, 0x18] - mov r1, r12 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_check_move_has_highest_appeal - - thumb_func_start ContestAICmd_unk_2E -ContestAICmd_unk_2E: @ 8129638 - push {lr} - bl ContestAICmd_check_move_has_highest_appeal - ldr r0, _08129664 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _0812966C - ldr r3, _08129668 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129674 - .align 2, 0 -_08129664: .4byte gSharedMem + 0x192E4 -_08129668: .4byte gAIScriptPtr -_0812966C: - ldr r1, _08129678 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_08129674: - pop {r0} - bx r0 - .align 2, 0 -_08129678: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_2E - - thumb_func_start ContestAICmd_unk_2F -ContestAICmd_unk_2F: @ 812967C - push {r4-r7,lr} - ldr r2, _081296D4 @ =gContestMons - ldr r3, _081296D8 @ =gSharedMem + 0x192E4 - ldrb r0, [r3, 0x4] - lsls r0, 1 - adds r1, r3, 0 - adds r1, 0x41 - ldrb r1, [r1] - lsls r1, 6 - adds r0, r1 - adds r2, 0x1E - adds r0, r2 - ldrh r0, [r0] - ldr r4, _081296DC @ =gContestEffects - ldr r5, _081296E0 @ =gContestMoves - lsls r0, 3 - adds r0, r5 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r4 - ldrb r7, [r0, 0x2] - movs r6, 0 - ldr r0, _081296E4 @ =gAIScriptPtr - mov r12, r0 - adds r1, r2 -_081296AE: - ldrh r0, [r1] - cmp r0, 0 - beq _081296C4 - lsls r0, 3 - adds r0, r5 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0, 0x2] - cmp r7, r0 - bcc _081296CC -_081296C4: - adds r1, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _081296AE -_081296CC: - cmp r6, 0x4 - bne _081296E8 - movs r0, 0x1 - b _081296EA - .align 2, 0 -_081296D4: .4byte gContestMons -_081296D8: .4byte gSharedMem + 0x192E4 -_081296DC: .4byte gContestEffects -_081296E0: .4byte gContestMoves -_081296E4: .4byte gAIScriptPtr -_081296E8: - movs r0, 0 -_081296EA: - strh r0, [r3, 0x18] - mov r1, r12 - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_2F - - thumb_func_start ContestAICmd_unk_30 -ContestAICmd_unk_30: @ 81296FC - push {lr} - bl ContestAICmd_unk_2F - ldr r0, _08129728 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _08129730 - ldr r3, _0812972C @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129738 - .align 2, 0 -_08129728: .4byte gSharedMem + 0x192E4 -_0812972C: .4byte gAIScriptPtr -_08129730: - ldr r1, _0812973C @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x5 - str r0, [r1] -_08129738: - pop {r0} - bx r0 - .align 2, 0 -_0812973C: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_30 - - thumb_func_start ContestAICmd_unk_31 -ContestAICmd_unk_31: @ 8129740 - push {r4,lr} - ldr r2, _08129784 @ =gContestMons - ldr r4, _08129788 @ =gSharedMem + 0x192E4 - ldrb r1, [r4, 0x4] - lsls r1, 1 - adds r0, r4, 0 - adds r0, 0x41 - ldrb r0, [r0] - lsls r0, 6 - adds r1, r0 - adds r2, 0x1E - adds r1, r2 - ldrh r0, [r1] - ldr r2, _0812978C @ =gContestEffects - ldr r1, _08129790 @ =gContestMoves - lsls r0, 3 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1] - movs r1, 0xA - bl __udivsi3 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x18] - ldr r1, _08129794 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08129784: .4byte gContestMons -_08129788: .4byte gSharedMem + 0x192E4 -_0812978C: .4byte gContestEffects -_08129790: .4byte gContestMoves -_08129794: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_31 - - thumb_func_start ContestAICmd_unk_32 -ContestAICmd_unk_32: @ 8129798 - push {lr} - bl ContestAICmd_unk_31 - ldr r0, _081297C8 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _081297CC @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bge _081297D0 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _081297D4 - .align 2, 0 -_081297C8: .4byte gSharedMem + 0x192E4 -_081297CC: .4byte gAIScriptPtr -_081297D0: - adds r0, r2, 0x5 - str r0, [r3] -_081297D4: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_32 - - thumb_func_start ContestAICmd_unk_33 -ContestAICmd_unk_33: @ 81297D8 - push {lr} - bl ContestAICmd_unk_31 - ldr r0, _08129808 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812980C @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - ble _08129810 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129814 - .align 2, 0 -_08129808: .4byte gSharedMem + 0x192E4 -_0812980C: .4byte gAIScriptPtr -_08129810: - adds r0, r2, 0x5 - str r0, [r3] -_08129814: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_33 - - thumb_func_start ContestAICmd_unk_34 -ContestAICmd_unk_34: @ 8129818 - push {lr} - bl ContestAICmd_unk_31 - ldr r0, _08129848 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812984C @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _08129850 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129854 - .align 2, 0 -_08129848: .4byte gSharedMem + 0x192E4 -_0812984C: .4byte gAIScriptPtr -_08129850: - adds r0, r2, 0x5 - str r0, [r3] -_08129854: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_34 - - thumb_func_start ContestAICmd_unk_35 -ContestAICmd_unk_35: @ 8129858 - push {lr} - bl ContestAICmd_unk_31 - ldr r0, _08129888 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812988C @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _08129890 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129894 - .align 2, 0 -_08129888: .4byte gSharedMem + 0x192E4 -_0812988C: .4byte gAIScriptPtr -_08129890: - adds r0, r2, 0x5 - str r0, [r3] -_08129894: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_35 - - thumb_func_start ContestAICmd_unk_36 -ContestAICmd_unk_36: @ 8129898 - push {r4,lr} - ldr r2, _081298DC @ =gContestMons - ldr r4, _081298E0 @ =gSharedMem + 0x192E4 - ldrb r1, [r4, 0x4] - lsls r1, 1 - adds r0, r4, 0 - adds r0, 0x41 - ldrb r0, [r0] - lsls r0, 6 - adds r1, r0 - adds r2, 0x1E - adds r1, r2 - ldrh r0, [r1] - ldr r2, _081298E4 @ =gContestEffects - ldr r1, _081298E8 @ =gContestMoves - lsls r0, 3 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x2] - movs r1, 0xA - bl __udivsi3 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x18] - ldr r1, _081298EC @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081298DC: .4byte gContestMons -_081298E0: .4byte gSharedMem + 0x192E4 -_081298E4: .4byte gContestEffects -_081298E8: .4byte gContestMoves -_081298EC: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_36 - - thumb_func_start ContestAICmd_unk_37 -ContestAICmd_unk_37: @ 81298F0 - push {lr} - bl ContestAICmd_unk_36 - ldr r0, _08129920 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08129924 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bge _08129928 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812992C - .align 2, 0 -_08129920: .4byte gSharedMem + 0x192E4 -_08129924: .4byte gAIScriptPtr -_08129928: - adds r0, r2, 0x5 - str r0, [r3] -_0812992C: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_37 - - thumb_func_start ContestAICmd_unk_38 -ContestAICmd_unk_38: @ 8129930 - push {lr} - bl ContestAICmd_unk_36 - ldr r0, _08129960 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08129964 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - ble _08129968 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812996C - .align 2, 0 -_08129960: .4byte gSharedMem + 0x192E4 -_08129964: .4byte gAIScriptPtr -_08129968: - adds r0, r2, 0x5 - str r0, [r3] -_0812996C: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_38 - - thumb_func_start ContestAICmd_unk_39 -ContestAICmd_unk_39: @ 8129970 - push {lr} - bl ContestAICmd_unk_36 - ldr r0, _081299A0 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _081299A4 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _081299A8 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _081299AC - .align 2, 0 -_081299A0: .4byte gSharedMem + 0x192E4 -_081299A4: .4byte gAIScriptPtr -_081299A8: - adds r0, r2, 0x5 - str r0, [r3] -_081299AC: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_39 - - thumb_func_start ContestAICmd_unk_3A -ContestAICmd_unk_3A: @ 81299B0 - push {lr} - bl ContestAICmd_unk_36 - ldr r0, _081299E0 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _081299E4 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _081299E8 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _081299EC - .align 2, 0 -_081299E0: .4byte gSharedMem + 0x192E4 -_081299E4: .4byte gAIScriptPtr -_081299E8: - adds r0, r2, 0x5 - str r0, [r3] -_081299EC: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_3A - - thumb_func_start ContestAICmd_get_move_used_count -ContestAICmd_get_move_used_count: @ 81299F0 - push {r4,lr} - ldr r3, _08129A20 @ =gContestMons - ldr r4, _08129A24 @ =gSharedMem + 0x192E4 - ldrb r0, [r4, 0x4] - lsls r0, 1 - adds r1, r4, 0 - adds r1, 0x41 - ldrb r2, [r1] - lsls r1, r2, 6 - adds r0, r1 - adds r3, 0x1E - adds r0, r3 - ldrh r3, [r0] - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r1, r4, 0 - subs r1, 0x84 - adds r0, r1 - ldrh r1, [r0, 0x8] - cmp r3, r1 - beq _08129A28 - movs r0, 0 - b _08129A30 - .align 2, 0 -_08129A20: .4byte gContestMons -_08129A24: .4byte gSharedMem + 0x192E4 -_08129A28: - ldrb r0, [r0, 0xB] - lsls r0, 25 - lsrs r0, 29 - adds r0, 0x1 -_08129A30: - strh r0, [r4, 0x18] - ldr r1, _08129A40 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08129A40: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_get_move_used_count - - thumb_func_start ContestAICmd_unk_3C -ContestAICmd_unk_3C: @ 8129A44 - push {lr} - bl ContestAICmd_get_move_used_count - ldr r0, _08129A74 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08129A78 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bge _08129A7C - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129A80 - .align 2, 0 -_08129A74: .4byte gSharedMem + 0x192E4 -_08129A78: .4byte gAIScriptPtr -_08129A7C: - adds r0, r2, 0x5 - str r0, [r3] -_08129A80: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_3C - - thumb_func_start ContestAICmd_unk_3D -ContestAICmd_unk_3D: @ 8129A84 - push {lr} - bl ContestAICmd_get_move_used_count - ldr r0, _08129AB4 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08129AB8 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - ble _08129ABC - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129AC0 - .align 2, 0 -_08129AB4: .4byte gSharedMem + 0x192E4 -_08129AB8: .4byte gAIScriptPtr -_08129ABC: - adds r0, r2, 0x5 - str r0, [r3] -_08129AC0: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_3D - - thumb_func_start ContestAICmd_unk_3E -ContestAICmd_unk_3E: @ 8129AC4 - push {lr} - bl ContestAICmd_get_move_used_count - ldr r0, _08129AF4 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08129AF8 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _08129AFC - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129B00 - .align 2, 0 -_08129AF4: .4byte gSharedMem + 0x192E4 -_08129AF8: .4byte gAIScriptPtr -_08129AFC: - adds r0, r2, 0x5 - str r0, [r3] -_08129B00: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_3E - - thumb_func_start ContestAICmd_unk_3F -ContestAICmd_unk_3F: @ 8129B04 - push {lr} - bl ContestAICmd_get_move_used_count - ldr r0, _08129B34 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08129B38 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _08129B3C - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129B40 - .align 2, 0 -_08129B34: .4byte gSharedMem + 0x192E4 -_08129B38: .4byte gAIScriptPtr -_08129B3C: - adds r0, r2, 0x5 - str r0, [r3] -_08129B40: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_3F - - thumb_func_start ContestAICmd_check_combo_starter -ContestAICmd_check_combo_starter: @ 8129B44 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r5, 0 - ldr r3, _08129BAC @ =gContestMons - ldr r2, _08129BB0 @ =gSharedMem + 0x192E4 - ldrb r1, [r2, 0x4] - lsls r1, 1 - adds r2, 0x41 - ldrb r0, [r2] - lsls r0, 6 - adds r1, r0 - adds r3, 0x1E - adds r1, r3 - ldrh r6, [r1] - movs r4, 0 - mov r8, r2 - adds r7, r3, 0 -_08129B68: - lsls r0, r4, 1 - mov r2, r8 - ldrb r1, [r2] - lsls r1, 6 - adds r0, r1 - adds r1, r0, r7 - ldrh r0, [r1] - cmp r0, 0 - beq _08129B8A - adds r1, r0, 0 - adds r0, r6, 0 - bl AreMovesContestCombo - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _08129B94 -_08129B8A: - adds r4, 0x1 - cmp r4, 0x3 - ble _08129B68 - cmp r5, 0 - beq _08129B96 -_08129B94: - movs r5, 0x1 -_08129B96: - ldr r0, _08129BB0 @ =gSharedMem + 0x192E4 - strh r5, [r0, 0x18] - ldr r1, _08129BB4 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08129BAC: .4byte gContestMons -_08129BB0: .4byte gSharedMem + 0x192E4 -_08129BB4: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_check_combo_starter - - thumb_func_start ContestAICmd_unk_41 -ContestAICmd_unk_41: @ 8129BB8 - push {lr} - bl ContestAICmd_check_combo_starter - ldr r0, _08129BE4 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _08129BEC - ldr r3, _08129BE8 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129BF4 - .align 2, 0 -_08129BE4: .4byte gSharedMem + 0x192E4 -_08129BE8: .4byte gAIScriptPtr -_08129BEC: - ldr r1, _08129BF8 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_08129BF4: - pop {r0} - bx r0 - .align 2, 0 -_08129BF8: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_41 - - thumb_func_start ContestAICmd_unk_42 -ContestAICmd_unk_42: @ 8129BFC - push {lr} - bl ContestAICmd_check_combo_starter - ldr r0, _08129C28 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08129C30 - ldr r3, _08129C2C @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129C38 - .align 2, 0 -_08129C28: .4byte gSharedMem + 0x192E4 -_08129C2C: .4byte gAIScriptPtr -_08129C30: - ldr r1, _08129C3C @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_08129C38: - pop {r0} - bx r0 - .align 2, 0 -_08129C3C: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_42 - - thumb_func_start ContestAICmd_check_combo_finisher -ContestAICmd_check_combo_finisher: @ 8129C40 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r5, 0 - ldr r3, _08129CA8 @ =gContestMons - ldr r2, _08129CAC @ =gSharedMem + 0x192E4 - ldrb r1, [r2, 0x4] - lsls r1, 1 - adds r2, 0x41 - ldrb r0, [r2] - lsls r0, 6 - adds r1, r0 - adds r3, 0x1E - adds r1, r3 - ldrh r6, [r1] - movs r4, 0 - mov r8, r2 - adds r7, r3, 0 -_08129C64: - lsls r0, r4, 1 - mov r2, r8 - ldrb r1, [r2] - lsls r1, 6 - adds r0, r1 - adds r1, r0, r7 - ldrh r0, [r1] - cmp r0, 0 - beq _08129C84 - adds r1, r6, 0 - bl AreMovesContestCombo - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _08129C8E -_08129C84: - adds r4, 0x1 - cmp r4, 0x3 - ble _08129C64 - cmp r5, 0 - beq _08129C90 -_08129C8E: - movs r5, 0x1 -_08129C90: - ldr r0, _08129CAC @ =gSharedMem + 0x192E4 - strh r5, [r0, 0x18] - ldr r1, _08129CB0 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08129CA8: .4byte gContestMons -_08129CAC: .4byte gSharedMem + 0x192E4 -_08129CB0: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_check_combo_finisher - - thumb_func_start ContestAICmd_unk_44 -ContestAICmd_unk_44: @ 8129CB4 - push {lr} - bl ContestAICmd_check_combo_finisher - ldr r0, _08129CE0 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _08129CE8 - ldr r3, _08129CE4 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129CF0 - .align 2, 0 -_08129CE0: .4byte gSharedMem + 0x192E4 -_08129CE4: .4byte gAIScriptPtr -_08129CE8: - ldr r1, _08129CF4 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_08129CF0: - pop {r0} - bx r0 - .align 2, 0 -_08129CF4: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_44 - - thumb_func_start ContestAICmd_unk_45 -ContestAICmd_unk_45: @ 8129CF8 - push {lr} - bl ContestAICmd_check_combo_finisher - ldr r0, _08129D24 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08129D2C - ldr r3, _08129D28 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129D34 - .align 2, 0 -_08129D24: .4byte gSharedMem + 0x192E4 -_08129D28: .4byte gAIScriptPtr -_08129D2C: - ldr r1, _08129D38 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_08129D34: - pop {r0} - bx r0 - .align 2, 0 -_08129D38: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_45 - - thumb_func_start ContestAICmd_check_would_finish_combo -ContestAICmd_check_would_finish_combo: @ 8129D3C - push {r4,r5,lr} - movs r5, 0 - ldr r3, _08129D8C @ =gContestMons - ldr r4, _08129D90 @ =gSharedMem + 0x192E4 - ldrb r0, [r4, 0x4] - lsls r0, 1 - adds r1, r4, 0 - adds r1, 0x41 - ldrb r2, [r1] - lsls r1, r2, 6 - adds r0, r1 - adds r3, 0x1E - adds r0, r3 - ldrh r3, [r0] - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r1, r4, 0 - subs r1, 0x84 - adds r1, r0, r1 - ldrh r0, [r1, 0x8] - cmp r0, 0 - beq _08129D74 - adds r1, r3, 0 - bl AreMovesContestCombo - lsls r0, 24 - lsrs r5, r0, 24 -_08129D74: - cmp r5, 0 - beq _08129D7A - movs r5, 0x1 -_08129D7A: - strh r5, [r4, 0x18] - ldr r1, _08129D94 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08129D8C: .4byte gContestMons -_08129D90: .4byte gSharedMem + 0x192E4 -_08129D94: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_check_would_finish_combo - - thumb_func_start ContestAICmd_unk_47 -ContestAICmd_unk_47: @ 8129D98 - push {lr} - bl ContestAICmd_check_would_finish_combo - ldr r0, _08129DC4 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _08129DCC - ldr r3, _08129DC8 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129DD4 - .align 2, 0 -_08129DC4: .4byte gSharedMem + 0x192E4 -_08129DC8: .4byte gAIScriptPtr -_08129DCC: - ldr r1, _08129DD8 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_08129DD4: - pop {r0} - bx r0 - .align 2, 0 -_08129DD8: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_47 - - thumb_func_start ContestAICmd_unk_48 -ContestAICmd_unk_48: @ 8129DDC - push {lr} - bl ContestAICmd_check_would_finish_combo - ldr r0, _08129E08 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _08129E10 - ldr r3, _08129E0C @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129E18 - .align 2, 0 -_08129E08: .4byte gSharedMem + 0x192E4 -_08129E0C: .4byte gAIScriptPtr -_08129E10: - ldr r1, _08129E1C @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_08129E18: - pop {r0} - bx r0 - .align 2, 0 -_08129E1C: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_48 - - thumb_func_start ContestAICmd_get_condition -ContestAICmd_get_condition: @ 8129E20 - push {r4,r5,lr} - ldr r4, _08129E5C @ =gAIScriptPtr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8128A7C - lsls r0, 24 - lsrs r0, 24 - ldr r5, _08129E60 @ =gSharedMem + 0x192E4 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r0, r5, 0 - subs r0, 0x84 - adds r1, r0 - movs r0, 0xD - ldrsb r0, [r1, r0] - movs r1, 0xA - bl __divsi3 - lsls r0, 24 - asrs r0, 24 - strh r0, [r5, 0x18] - ldr r0, [r4] - adds r0, 0x2 - str r0, [r4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08129E5C: .4byte gAIScriptPtr -_08129E60: .4byte gSharedMem + 0x192E4 - thumb_func_end ContestAICmd_get_condition - - thumb_func_start ContestAICmd_unk_4A -ContestAICmd_unk_4A: @ 8129E64 - push {lr} - bl ContestAICmd_get_condition - ldr r0, _08129E94 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08129E98 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bge _08129E9C - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129EA0 - .align 2, 0 -_08129E94: .4byte gSharedMem + 0x192E4 -_08129E98: .4byte gAIScriptPtr -_08129E9C: - adds r0, r2, 0x5 - str r0, [r3] -_08129EA0: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_4A - - thumb_func_start ContestAICmd_unk_4B -ContestAICmd_unk_4B: @ 8129EA4 - push {lr} - bl ContestAICmd_get_condition - ldr r0, _08129ED4 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08129ED8 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - ble _08129EDC - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129EE0 - .align 2, 0 -_08129ED4: .4byte gSharedMem + 0x192E4 -_08129ED8: .4byte gAIScriptPtr -_08129EDC: - adds r0, r2, 0x5 - str r0, [r3] -_08129EE0: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_4B - - thumb_func_start ContestAICmd_unk_4C -ContestAICmd_unk_4C: @ 8129EE4 - push {lr} - bl ContestAICmd_get_condition - ldr r0, _08129F14 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08129F18 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _08129F1C - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129F20 - .align 2, 0 -_08129F14: .4byte gSharedMem + 0x192E4 -_08129F18: .4byte gAIScriptPtr -_08129F1C: - adds r0, r2, 0x5 - str r0, [r3] -_08129F20: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_4C - - thumb_func_start ContestAICmd_unk_4D -ContestAICmd_unk_4D: @ 8129F24 - push {lr} - bl ContestAICmd_get_condition - ldr r0, _08129F54 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08129F58 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _08129F5C - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129F60 - .align 2, 0 -_08129F54: .4byte gSharedMem + 0x192E4 -_08129F58: .4byte gAIScriptPtr -_08129F5C: - adds r0, r2, 0x5 - str r0, [r3] -_08129F60: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_4D - - thumb_func_start ContestAICmd_get_used_combo_starter -ContestAICmd_get_used_combo_starter: @ 8129F64 - push {r4-r6,lr} - movs r6, 0 - ldr r5, _08129FAC @ =gAIScriptPtr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl sub_8128A7C - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl sub_80B214C - lsls r0, 24 - cmp r0, 0 - beq _08129F9C - ldr r2, _08129FB0 @ =gContestMoves - lsls r0, r4, 3 - subs r0, r4 - lsls r0, 2 - ldr r1, _08129FB4 @ =gSharedMem + 0x19260 - adds r0, r1 - ldrh r0, [r0, 0x8] - lsls r0, 3 - adds r0, r2 - ldrb r1, [r0, 0x2] - negs r0, r1 - orrs r0, r1 - lsrs r6, r0, 31 -_08129F9C: - ldr r0, _08129FB8 @ =gSharedMem + 0x192E4 - strh r6, [r0, 0x18] - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08129FAC: .4byte gAIScriptPtr -_08129FB0: .4byte gContestMoves -_08129FB4: .4byte gSharedMem + 0x19260 -_08129FB8: .4byte gSharedMem + 0x192E4 - thumb_func_end ContestAICmd_get_used_combo_starter - - thumb_func_start ContestAICmd_unk_4F -ContestAICmd_unk_4F: @ 8129FBC - push {lr} - bl ContestAICmd_get_used_combo_starter - ldr r0, _08129FEC @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _08129FF0 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bge _08129FF4 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _08129FF8 - .align 2, 0 -_08129FEC: .4byte gSharedMem + 0x192E4 -_08129FF0: .4byte gAIScriptPtr -_08129FF4: - adds r0, r2, 0x5 - str r0, [r3] -_08129FF8: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_4F - - thumb_func_start ContestAICmd_unk_50 -ContestAICmd_unk_50: @ 8129FFC - push {lr} - bl ContestAICmd_get_used_combo_starter - ldr r0, _0812A02C @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812A030 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - ble _0812A034 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A038 - .align 2, 0 -_0812A02C: .4byte gSharedMem + 0x192E4 -_0812A030: .4byte gAIScriptPtr -_0812A034: - adds r0, r2, 0x5 - str r0, [r3] -_0812A038: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_50 - - thumb_func_start ContestAICmd_unk_51 -ContestAICmd_unk_51: @ 812A03C - push {lr} - bl ContestAICmd_get_used_combo_starter - ldr r0, _0812A06C @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812A070 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _0812A074 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A078 - .align 2, 0 -_0812A06C: .4byte gSharedMem + 0x192E4 -_0812A070: .4byte gAIScriptPtr -_0812A074: - adds r0, r2, 0x5 - str r0, [r3] -_0812A078: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_51 - - thumb_func_start ContestAICmd_unk_52 -ContestAICmd_unk_52: @ 812A07C - push {lr} - bl ContestAICmd_get_used_combo_starter - ldr r0, _0812A0AC @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812A0B0 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _0812A0B4 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A0B8 - .align 2, 0 -_0812A0AC: .4byte gSharedMem + 0x192E4 -_0812A0B0: .4byte gAIScriptPtr -_0812A0B4: - adds r0, r2, 0x5 - str r0, [r3] -_0812A0B8: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_52 - - thumb_func_start ContestAICmd_check_can_participate -ContestAICmd_check_can_participate: @ 812A0BC - push {lr} - ldr r0, _0812A0DC @ =gAIScriptPtr - ldr r0, [r0] - ldrb r0, [r0, 0x1] - bl sub_8128A7C - lsls r0, 24 - lsrs r0, 24 - bl Contest_IsMonsTurnDisabled - lsls r0, 24 - cmp r0, 0 - beq _0812A0E4 - ldr r1, _0812A0E0 @ =gSharedMem + 0x192E4 - movs r0, 0 - b _0812A0E8 - .align 2, 0 -_0812A0DC: .4byte gAIScriptPtr -_0812A0E0: .4byte gSharedMem + 0x192E4 -_0812A0E4: - ldr r1, _0812A0F8 @ =gSharedMem + 0x192E4 - movs r0, 0x1 -_0812A0E8: - strh r0, [r1, 0x18] - ldr r1, _0812A0FC @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x2 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0812A0F8: .4byte gSharedMem + 0x192E4 -_0812A0FC: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_check_can_participate - - thumb_func_start ContestAICmd_unk_54 -ContestAICmd_unk_54: @ 812A100 - push {lr} - bl ContestAICmd_check_can_participate - ldr r0, _0812A12C @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _0812A134 - ldr r3, _0812A130 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A13C - .align 2, 0 -_0812A12C: .4byte gSharedMem + 0x192E4 -_0812A130: .4byte gAIScriptPtr -_0812A134: - ldr r1, _0812A140 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812A13C: - pop {r0} - bx r0 - .align 2, 0 -_0812A140: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_54 - - thumb_func_start ContestAICmd_unk_55 -ContestAICmd_unk_55: @ 812A144 - push {lr} - bl ContestAICmd_check_can_participate - ldr r0, _0812A170 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _0812A178 - ldr r3, _0812A174 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A180 - .align 2, 0 -_0812A170: .4byte gSharedMem + 0x192E4 -_0812A174: .4byte gAIScriptPtr -_0812A178: - ldr r1, _0812A184 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812A180: - pop {r0} - bx r0 - .align 2, 0 -_0812A184: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_55 - - thumb_func_start ContestAICmd_get_val_812A188 -ContestAICmd_get_val_812A188: @ 812A188 - push {r4,lr} - ldr r4, _0812A1BC @ =gAIScriptPtr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8128A7C - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0812A1C0 @ =gSharedMem + 0x192E4 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r0, r2, 0 - subs r0, 0x84 - adds r1, r0 - ldrb r0, [r1, 0x15] - lsls r0, 28 - lsrs r0, 31 - strh r0, [r2, 0x18] - ldr r0, [r4] - adds r0, 0x2 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A1BC: .4byte gAIScriptPtr -_0812A1C0: .4byte gSharedMem + 0x192E4 - thumb_func_end ContestAICmd_get_val_812A188 - - thumb_func_start ContestAICmd_unk_57 -ContestAICmd_unk_57: @ 812A1C4 - push {lr} - bl ContestAICmd_get_val_812A188 - ldr r0, _0812A1F0 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _0812A1F8 - ldr r3, _0812A1F4 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A200 - .align 2, 0 -_0812A1F0: .4byte gSharedMem + 0x192E4 -_0812A1F4: .4byte gAIScriptPtr -_0812A1F8: - ldr r1, _0812A204 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812A200: - pop {r0} - bx r0 - .align 2, 0 -_0812A204: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_57 - - thumb_func_start ContestAICmd_unk_58 -ContestAICmd_unk_58: @ 812A208 - push {lr} - bl ContestAICmd_get_val_812A188 - ldr r0, _0812A234 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _0812A23C - ldr r3, _0812A238 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A244 - .align 2, 0 -_0812A234: .4byte gSharedMem + 0x192E4 -_0812A238: .4byte gAIScriptPtr -_0812A23C: - ldr r1, _0812A248 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812A244: - pop {r0} - bx r0 - .align 2, 0 -_0812A248: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_58 - - thumb_func_start ContestAICmd_unk_59 -ContestAICmd_unk_59: @ 812A24C - push {r4,r5,lr} - ldr r5, _0812A28C @ =gAIScriptPtr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl sub_8128A7C - lsls r0, 24 - lsrs r0, 24 - ldr r3, _0812A290 @ =gSharedMem + 0x192E4 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r4, r3, 0 - subs r4, 0x84 - adds r1, r4 - adds r0, r3, 0 - adds r0, 0x41 - ldrb r2, [r0] - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r4 - ldrh r1, [r1, 0x4] - ldrh r0, [r0, 0x4] - subs r1, r0 - strh r1, [r3, 0x18] - ldr r0, [r5] - adds r0, 0x2 - str r0, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812A28C: .4byte gAIScriptPtr -_0812A290: .4byte gSharedMem + 0x192E4 - thumb_func_end ContestAICmd_unk_59 - - thumb_func_start ContestAICmd_unk_5A -ContestAICmd_unk_5A: @ 812A294 - push {lr} - bl ContestAICmd_unk_59 - ldr r0, _0812A2C0 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - bge _0812A2C8 - ldr r3, _0812A2C4 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A2D0 - .align 2, 0 -_0812A2C0: .4byte gSharedMem + 0x192E4 -_0812A2C4: .4byte gAIScriptPtr -_0812A2C8: - ldr r1, _0812A2D4 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812A2D0: - pop {r0} - bx r0 - .align 2, 0 -_0812A2D4: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_5A - - thumb_func_start ContestAICmd_unk_5B -ContestAICmd_unk_5B: @ 812A2D8 - push {lr} - bl ContestAICmd_unk_59 - ldr r0, _0812A304 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - ble _0812A30C - ldr r3, _0812A308 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A314 - .align 2, 0 -_0812A304: .4byte gSharedMem + 0x192E4 -_0812A308: .4byte gAIScriptPtr -_0812A30C: - ldr r1, _0812A318 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812A314: - pop {r0} - bx r0 - .align 2, 0 -_0812A318: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_5B - - thumb_func_start ContestAICmd_unk_5C -ContestAICmd_unk_5C: @ 812A31C - push {lr} - bl ContestAICmd_unk_59 - ldr r0, _0812A348 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _0812A350 - ldr r3, _0812A34C @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A358 - .align 2, 0 -_0812A348: .4byte gSharedMem + 0x192E4 -_0812A34C: .4byte gAIScriptPtr -_0812A350: - ldr r1, _0812A35C @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812A358: - pop {r0} - bx r0 - .align 2, 0 -_0812A35C: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_5C - - thumb_func_start ContestAICmd_unk_5D -ContestAICmd_unk_5D: @ 812A360 - push {lr} - bl ContestAICmd_unk_59 - ldr r0, _0812A38C @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _0812A394 - ldr r3, _0812A390 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A39C - .align 2, 0 -_0812A38C: .4byte gSharedMem + 0x192E4 -_0812A390: .4byte gAIScriptPtr -_0812A394: - ldr r1, _0812A3A0 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812A39C: - pop {r0} - bx r0 - .align 2, 0 -_0812A3A0: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_5D - - thumb_func_start ContestAICmd_unk_5E -ContestAICmd_unk_5E: @ 812A3A4 - push {r4,lr} - ldr r4, _0812A3D8 @ =gAIScriptPtr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8128A7C - lsls r0, 24 - ldr r3, _0812A3DC @ =gSharedMem + 0x192E4 - ldr r2, _0812A3E0 @ =gUnknown_02038670 - lsrs r0, 23 - adds r0, r2 - adds r1, r3, 0 - adds r1, 0x41 - ldrb r1, [r1] - lsls r1, 1 - adds r1, r2 - ldrh r0, [r0] - ldrh r1, [r1] - subs r0, r1 - strh r0, [r3, 0x18] - ldr r0, [r4] - adds r0, 0x2 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A3D8: .4byte gAIScriptPtr -_0812A3DC: .4byte gSharedMem + 0x192E4 -_0812A3E0: .4byte gUnknown_02038670 - thumb_func_end ContestAICmd_unk_5E - - thumb_func_start ContestAICmd_unk_5F -ContestAICmd_unk_5F: @ 812A3E4 - push {lr} - bl ContestAICmd_unk_5E - ldr r0, _0812A410 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - bge _0812A418 - ldr r3, _0812A414 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A420 - .align 2, 0 -_0812A410: .4byte gSharedMem + 0x192E4 -_0812A414: .4byte gAIScriptPtr -_0812A418: - ldr r1, _0812A424 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812A420: - pop {r0} - bx r0 - .align 2, 0 -_0812A424: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_5F - - thumb_func_start ContestAICmd_unk_60 -ContestAICmd_unk_60: @ 812A428 - push {lr} - bl ContestAICmd_unk_5E - ldr r0, _0812A454 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - ble _0812A45C - ldr r3, _0812A458 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A464 - .align 2, 0 -_0812A454: .4byte gSharedMem + 0x192E4 -_0812A458: .4byte gAIScriptPtr -_0812A45C: - ldr r1, _0812A468 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812A464: - pop {r0} - bx r0 - .align 2, 0 -_0812A468: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_60 - - thumb_func_start ContestAICmd_unk_61 -ContestAICmd_unk_61: @ 812A46C - push {lr} - bl ContestAICmd_unk_5E - ldr r0, _0812A498 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _0812A4A0 - ldr r3, _0812A49C @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A4A8 - .align 2, 0 -_0812A498: .4byte gSharedMem + 0x192E4 -_0812A49C: .4byte gAIScriptPtr -_0812A4A0: - ldr r1, _0812A4AC @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812A4A8: - pop {r0} - bx r0 - .align 2, 0 -_0812A4AC: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_61 - - thumb_func_start ContestAICmd_unk_62 -ContestAICmd_unk_62: @ 812A4B0 - push {lr} - bl ContestAICmd_unk_5E - ldr r0, _0812A4DC @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _0812A4E4 - ldr r3, _0812A4E0 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A4EC - .align 2, 0 -_0812A4DC: .4byte gSharedMem + 0x192E4 -_0812A4E0: .4byte gAIScriptPtr -_0812A4E4: - ldr r1, _0812A4F0 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812A4EC: - pop {r0} - bx r0 - .align 2, 0 -_0812A4F0: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_62 - - thumb_func_start ContestAICmd_unk_63 -ContestAICmd_unk_63: @ 812A4F4 - push {r4,lr} - ldr r4, _0812A52C @ =gAIScriptPtr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8128A7C - lsls r0, 24 - ldr r3, [r4] - ldrb r1, [r3, 0x2] - ldr r2, _0812A530 @ =gSharedMem + 0x19204 - lsrs r0, 23 - lsls r1, 3 - adds r0, r1 - adds r1, r2, 0 - adds r1, 0x1C - adds r0, r1 - ldrh r0, [r0] - adds r2, 0xE0 - ldr r1, _0812A534 @ =gContestMoves - lsls r0, 3 - adds r0, r1 - ldrb r0, [r0] - strh r0, [r2, 0x18] - adds r3, 0x3 - str r3, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A52C: .4byte gAIScriptPtr -_0812A530: .4byte gSharedMem + 0x19204 -_0812A534: .4byte gContestMoves - thumb_func_end ContestAICmd_unk_63 - - thumb_func_start ContestAICmd_unk_64 -ContestAICmd_unk_64: @ 812A538 - push {lr} - bl ContestAICmd_unk_63 - ldr r0, _0812A568 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812A56C @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bge _0812A570 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A574 - .align 2, 0 -_0812A568: .4byte gSharedMem + 0x192E4 -_0812A56C: .4byte gAIScriptPtr -_0812A570: - adds r0, r2, 0x5 - str r0, [r3] -_0812A574: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_64 - - thumb_func_start ContestAICmd_unk_65 -ContestAICmd_unk_65: @ 812A578 - push {lr} - bl ContestAICmd_unk_63 - ldr r0, _0812A5A8 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812A5AC @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - ble _0812A5B0 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A5B4 - .align 2, 0 -_0812A5A8: .4byte gSharedMem + 0x192E4 -_0812A5AC: .4byte gAIScriptPtr -_0812A5B0: - adds r0, r2, 0x5 - str r0, [r3] -_0812A5B4: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_65 - - thumb_func_start ContestAICmd_unk_66 -ContestAICmd_unk_66: @ 812A5B8 - push {lr} - bl ContestAICmd_unk_63 - ldr r0, _0812A5E8 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812A5EC @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _0812A5F0 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A5F4 - .align 2, 0 -_0812A5E8: .4byte gSharedMem + 0x192E4 -_0812A5EC: .4byte gAIScriptPtr -_0812A5F0: - adds r0, r2, 0x5 - str r0, [r3] -_0812A5F4: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_66 - - thumb_func_start ContestAICmd_unk_67 -ContestAICmd_unk_67: @ 812A5F8 - push {lr} - bl ContestAICmd_unk_63 - ldr r0, _0812A628 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812A62C @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _0812A630 - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A634 - .align 2, 0 -_0812A628: .4byte gSharedMem + 0x192E4 -_0812A62C: .4byte gAIScriptPtr -_0812A630: - adds r0, r2, 0x5 - str r0, [r3] -_0812A634: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_67 - - thumb_func_start ContestAICmd_unk_68 -ContestAICmd_unk_68: @ 812A638 - push {r4,lr} - ldr r4, _0812A66C @ =gAIScriptPtr - ldr r0, [r4] - ldrb r0, [r0, 0x1] - bl sub_8128A7C - lsls r0, 24 - lsrs r0, 24 - ldr r3, [r4] - ldrb r1, [r3, 0x2] - ldr r2, _0812A670 @ =gSharedMem + 0x19204 - lsls r1, 2 - adds r0, r1 - adds r1, r2, 0 - adds r1, 0x44 - adds r0, r1 - adds r2, 0xE0 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - strh r0, [r2, 0x18] - adds r3, 0x3 - str r3, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A66C: .4byte gAIScriptPtr -_0812A670: .4byte gSharedMem + 0x19204 - thumb_func_end ContestAICmd_unk_68 - - thumb_func_start ContestAICmd_unk_69 -ContestAICmd_unk_69: @ 812A674 - push {lr} - bl ContestAICmd_unk_68 - ldr r0, _0812A6A4 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812A6A8 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bge _0812A6AC - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A6B0 - .align 2, 0 -_0812A6A4: .4byte gSharedMem + 0x192E4 -_0812A6A8: .4byte gAIScriptPtr -_0812A6AC: - adds r0, r2, 0x5 - str r0, [r3] -_0812A6B0: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_69 - - thumb_func_start ContestAICmd_unk_6A -ContestAICmd_unk_6A: @ 812A6B4 - push {lr} - bl ContestAICmd_unk_68 - ldr r0, _0812A6E4 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812A6E8 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - ble _0812A6EC - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A6F0 - .align 2, 0 -_0812A6E4: .4byte gSharedMem + 0x192E4 -_0812A6E8: .4byte gAIScriptPtr -_0812A6EC: - adds r0, r2, 0x5 - str r0, [r3] -_0812A6F0: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_6A - - thumb_func_start ContestAICmd_unk_6B -ContestAICmd_unk_6B: @ 812A6F4 - push {lr} - bl ContestAICmd_unk_68 - ldr r0, _0812A724 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812A728 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _0812A72C - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A730 - .align 2, 0 -_0812A724: .4byte gSharedMem + 0x192E4 -_0812A728: .4byte gAIScriptPtr -_0812A72C: - adds r0, r2, 0x5 - str r0, [r3] -_0812A730: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_6B - - thumb_func_start ContestAICmd_unk_6C -ContestAICmd_unk_6C: @ 812A734 - push {lr} - bl ContestAICmd_unk_68 - ldr r0, _0812A764 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812A768 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _0812A76C - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A770 - .align 2, 0 -_0812A764: .4byte gSharedMem + 0x192E4 -_0812A768: .4byte gAIScriptPtr -_0812A76C: - adds r0, r2, 0x5 - str r0, [r3] -_0812A770: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_6C - - thumb_func_start ContestAICmd_unk_6D -ContestAICmd_unk_6D: @ 812A774 - push {r4,r5,lr} - ldr r5, _0812A7B4 @ =gAIScriptPtr - ldr r0, [r5] - ldrb r0, [r0, 0x1] - bl sub_8128A7C - lsls r0, 24 - ldr r3, [r5] - ldrb r1, [r3, 0x2] - ldr r2, _0812A7B8 @ =gSharedMem + 0x19204 - lsrs r0, 23 - lsls r1, 3 - adds r0, r1 - adds r1, r2, 0 - adds r1, 0x1C - adds r0, r1 - ldrh r0, [r0] - adds r2, 0xE0 - ldr r4, _0812A7BC @ =gContestEffects - ldr r1, _0812A7C0 @ =gContestMoves - lsls r0, 3 - adds r0, r1 - ldrb r0, [r0] - lsls r0, 2 - adds r0, r4 - ldrb r0, [r0] - strh r0, [r2, 0x18] - adds r3, 0x3 - str r3, [r5] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812A7B4: .4byte gAIScriptPtr -_0812A7B8: .4byte gSharedMem + 0x19204 -_0812A7BC: .4byte gContestEffects -_0812A7C0: .4byte gContestMoves - thumb_func_end ContestAICmd_unk_6D - - thumb_func_start ContestAICmd_unk_6E -ContestAICmd_unk_6E: @ 812A7C4 - push {lr} - bl ContestAICmd_unk_6D - ldr r0, _0812A7F4 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812A7F8 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - bne _0812A7FC - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A800 - .align 2, 0 -_0812A7F4: .4byte gSharedMem + 0x192E4 -_0812A7F8: .4byte gAIScriptPtr -_0812A7FC: - adds r0, r2, 0x5 - str r0, [r3] -_0812A800: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_6E - - thumb_func_start ContestAICmd_unk_6F -ContestAICmd_unk_6F: @ 812A804 - push {lr} - bl ContestAICmd_unk_6D - ldr r0, _0812A834 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - ldr r3, _0812A838 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - cmp r0, r1 - beq _0812A83C - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812A840 - .align 2, 0 -_0812A834: .4byte gSharedMem + 0x192E4 -_0812A838: .4byte gAIScriptPtr -_0812A83C: - adds r0, r2, 0x5 - str r0, [r3] -_0812A840: - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_6F - - thumb_func_start ContestAICmd_unk_70 -ContestAICmd_unk_70: @ 812A844 - push {r4,lr} - ldr r3, _0812A864 @ =gSharedMem + 0x192E4 - ldr r4, _0812A868 @ =gAIScriptPtr - ldr r2, [r4] - ldrb r0, [r2, 0x1] - lsls r0, 1 - adds r1, r3, 0 - adds r1, 0x1A - adds r0, r1 - ldrh r1, [r3, 0x18] - strh r1, [r0] - adds r2, 0x2 - str r2, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A864: .4byte gSharedMem + 0x192E4 -_0812A868: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_70 - - thumb_func_start ContestAICmd_unk_71 -ContestAICmd_unk_71: @ 812A86C - push {r4,lr} - ldr r0, _0812A890 @ =gSharedMem + 0x192E4 - ldr r4, _0812A894 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r2, [r3, 0x1] - lsls r2, 1 - adds r0, 0x1A - adds r2, r0 - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - strh r1, [r2] - adds r3, 0x4 - str r3, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A890: .4byte gSharedMem + 0x192E4 -_0812A894: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_71 - - thumb_func_start ContestAICmd_unk_72 -ContestAICmd_unk_72: @ 812A898 - push {r4,lr} - ldr r0, _0812A8C4 @ =gSharedMem + 0x192E4 - ldr r4, _0812A8C8 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r2, [r3, 0x1] - lsls r2, 1 - adds r0, 0x1A - adds r2, r0 - movs r1, 0x2 - ldrsb r1, [r3, r1] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrh r0, [r2] - adds r1, r0 - strh r1, [r2] - adds r3, 0x4 - str r3, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A8C4: .4byte gSharedMem + 0x192E4 -_0812A8C8: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_72 - - thumb_func_start ContestAICmd_unk_73 -ContestAICmd_unk_73: @ 812A8CC - push {r4,lr} - ldr r2, _0812A8F4 @ =gSharedMem + 0x192E4 - ldr r4, _0812A8F8 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r1, [r3, 0x1] - lsls r1, 1 - adds r2, 0x1A - adds r1, r2 - ldrb r0, [r3, 0x2] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - ldrh r2, [r1] - adds r0, r2 - strh r0, [r1] - adds r3, 0x3 - str r3, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A8F4: .4byte gSharedMem + 0x192E4 -_0812A8F8: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_73 - - thumb_func_start ContestAICmd_unk_74 -ContestAICmd_unk_74: @ 812A8FC - push {r4,lr} - ldr r2, _0812A924 @ =gSharedMem + 0x192E4 - ldr r4, _0812A928 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r1, [r3, 0x1] - lsls r1, 1 - adds r2, 0x1A - adds r1, r2 - ldrb r0, [r3, 0x2] - lsls r0, 1 - adds r0, r2 - ldrh r0, [r0] - ldrh r2, [r1] - adds r0, r2 - strh r0, [r1] - adds r3, 0x3 - str r3, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A924: .4byte gSharedMem + 0x192E4 -_0812A928: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_74 - - thumb_func_start ContestAICmd_unk_75 -ContestAICmd_unk_75: @ 812A92C - push {r4,lr} - ldr r1, _0812A964 @ =gSharedMem + 0x192E4 - ldr r4, _0812A968 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r0, [r3, 0x1] - lsls r0, 1 - adds r1, 0x1A - adds r0, r1 - movs r1, 0 - ldrsh r2, [r0, r1] - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - cmp r2, r1 - bge _0812A96C - ldrb r1, [r3, 0x4] - ldrb r0, [r3, 0x5] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x6] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x7] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _0812A972 - .align 2, 0 -_0812A964: .4byte gSharedMem + 0x192E4 -_0812A968: .4byte gAIScriptPtr -_0812A96C: - adds r0, r3, 0 - adds r0, 0x8 - str r0, [r4] -_0812A972: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_75 - - thumb_func_start ContestAICmd_unk_76 -ContestAICmd_unk_76: @ 812A978 - push {r4,lr} - ldr r1, _0812A9B0 @ =gSharedMem + 0x192E4 - ldr r4, _0812A9B4 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r0, [r3, 0x1] - lsls r0, 1 - adds r1, 0x1A - adds r0, r1 - movs r1, 0 - ldrsh r2, [r0, r1] - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - cmp r2, r1 - ble _0812A9B8 - ldrb r1, [r3, 0x4] - ldrb r0, [r3, 0x5] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x6] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x7] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _0812A9BE - .align 2, 0 -_0812A9B0: .4byte gSharedMem + 0x192E4 -_0812A9B4: .4byte gAIScriptPtr -_0812A9B8: - adds r0, r3, 0 - adds r0, 0x8 - str r0, [r4] -_0812A9BE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_76 - - thumb_func_start ContestAICmd_unk_77 -ContestAICmd_unk_77: @ 812A9C4 - push {r4,lr} - ldr r1, _0812A9FC @ =gSharedMem + 0x192E4 - ldr r4, _0812AA00 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r0, [r3, 0x1] - lsls r0, 1 - adds r1, 0x1A - adds r0, r1 - movs r1, 0 - ldrsh r2, [r0, r1] - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - cmp r2, r1 - bne _0812AA04 - ldrb r1, [r3, 0x4] - ldrb r0, [r3, 0x5] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x6] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x7] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _0812AA0A - .align 2, 0 -_0812A9FC: .4byte gSharedMem + 0x192E4 -_0812AA00: .4byte gAIScriptPtr -_0812AA04: - adds r0, r3, 0 - adds r0, 0x8 - str r0, [r4] -_0812AA0A: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_77 - - thumb_func_start ContestAICmd_unk_78 -ContestAICmd_unk_78: @ 812AA10 - push {r4,lr} - ldr r1, _0812AA48 @ =gSharedMem + 0x192E4 - ldr r4, _0812AA4C @ =gAIScriptPtr - ldr r3, [r4] - ldrb r0, [r3, 0x1] - lsls r0, 1 - adds r1, 0x1A - adds r0, r1 - movs r1, 0 - ldrsh r2, [r0, r1] - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - cmp r2, r1 - beq _0812AA50 - ldrb r1, [r3, 0x4] - ldrb r0, [r3, 0x5] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x6] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x7] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _0812AA56 - .align 2, 0 -_0812AA48: .4byte gSharedMem + 0x192E4 -_0812AA4C: .4byte gAIScriptPtr -_0812AA50: - adds r0, r3, 0 - adds r0, 0x8 - str r0, [r4] -_0812AA56: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_78 - - thumb_func_start ContestAICmd_unk_79 -ContestAICmd_unk_79: @ 812AA5C - push {r4,lr} - ldr r2, _0812AA98 @ =gSharedMem + 0x192E4 - ldr r4, _0812AA9C @ =gAIScriptPtr - ldr r3, [r4] - ldrb r1, [r3, 0x1] - lsls r1, 1 - adds r2, 0x1A - adds r1, r2 - ldrb r0, [r3, 0x2] - lsls r0, 1 - adds r0, r2 - movs r2, 0 - ldrsh r1, [r1, r2] - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r1, r0 - bge _0812AAA0 - ldrb r1, [r3, 0x3] - ldrb r0, [r3, 0x4] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x6] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _0812AAA4 - .align 2, 0 -_0812AA98: .4byte gSharedMem + 0x192E4 -_0812AA9C: .4byte gAIScriptPtr -_0812AAA0: - adds r0, r3, 0x7 - str r0, [r4] -_0812AAA4: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_79 - - thumb_func_start ContestAICmd_unk_7A -ContestAICmd_unk_7A: @ 812AAAC - push {r4,lr} - ldr r2, _0812AAE8 @ =gSharedMem + 0x192E4 - ldr r4, _0812AAEC @ =gAIScriptPtr - ldr r3, [r4] - ldrb r1, [r3, 0x1] - lsls r1, 1 - adds r2, 0x1A - adds r1, r2 - ldrb r0, [r3, 0x2] - lsls r0, 1 - adds r0, r2 - movs r2, 0 - ldrsh r1, [r1, r2] - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r1, r0 - ble _0812AAF0 - ldrb r1, [r3, 0x3] - ldrb r0, [r3, 0x4] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x6] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _0812AAF4 - .align 2, 0 -_0812AAE8: .4byte gSharedMem + 0x192E4 -_0812AAEC: .4byte gAIScriptPtr -_0812AAF0: - adds r0, r3, 0x7 - str r0, [r4] -_0812AAF4: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_7A - - thumb_func_start ContestAICmd_unk_7B -ContestAICmd_unk_7B: @ 812AAFC - push {r4,lr} - ldr r2, _0812AB38 @ =gSharedMem + 0x192E4 - ldr r4, _0812AB3C @ =gAIScriptPtr - ldr r3, [r4] - ldrb r1, [r3, 0x1] - lsls r1, 1 - adds r2, 0x1A - adds r1, r2 - ldrb r0, [r3, 0x2] - lsls r0, 1 - adds r0, r2 - movs r2, 0 - ldrsh r1, [r1, r2] - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r1, r0 - bne _0812AB40 - ldrb r1, [r3, 0x3] - ldrb r0, [r3, 0x4] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x6] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _0812AB44 - .align 2, 0 -_0812AB38: .4byte gSharedMem + 0x192E4 -_0812AB3C: .4byte gAIScriptPtr -_0812AB40: - adds r0, r3, 0x7 - str r0, [r4] -_0812AB44: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_7B - - thumb_func_start ContestAICmd_unk_7C -ContestAICmd_unk_7C: @ 812AB4C - push {r4,lr} - ldr r2, _0812AB88 @ =gSharedMem + 0x192E4 - ldr r4, _0812AB8C @ =gAIScriptPtr - ldr r3, [r4] - ldrb r1, [r3, 0x1] - lsls r1, 1 - adds r2, 0x1A - adds r1, r2 - ldrb r0, [r3, 0x2] - lsls r0, 1 - adds r0, r2 - movs r2, 0 - ldrsh r1, [r1, r2] - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r1, r0 - beq _0812AB90 - ldrb r1, [r3, 0x3] - ldrb r0, [r3, 0x4] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x6] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _0812AB94 - .align 2, 0 -_0812AB88: .4byte gSharedMem + 0x192E4 -_0812AB8C: .4byte gAIScriptPtr -_0812AB90: - adds r0, r3, 0x7 - str r0, [r4] -_0812AB94: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_7C - - thumb_func_start ContestAICmd_unk_7D -ContestAICmd_unk_7D: @ 812AB9C - push {r4,lr} - bl Random - movs r2, 0xFF - ands r2, r0 - ldr r1, _0812ABD4 @ =gSharedMem + 0x192E4 - ldr r4, _0812ABD8 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r0, [r3, 0x1] - lsls r0, 1 - adds r1, 0x1A - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r2, r0 - bge _0812ABDC - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _0812ABE0 - .align 2, 0 -_0812ABD4: .4byte gSharedMem + 0x192E4 -_0812ABD8: .4byte gAIScriptPtr -_0812ABDC: - adds r0, r3, 0x6 - str r0, [r4] -_0812ABE0: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_7D - - thumb_func_start ContestAICmd_unk_7E -ContestAICmd_unk_7E: @ 812ABE8 - push {r4,lr} - bl Random - movs r2, 0xFF - ands r2, r0 - ldr r1, _0812AC20 @ =gSharedMem + 0x192E4 - ldr r4, _0812AC24 @ =gAIScriptPtr - ldr r3, [r4] - ldrb r0, [r3, 0x1] - lsls r0, 1 - adds r1, 0x1A - adds r0, r1 - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r2, r0 - ble _0812AC28 - ldrb r1, [r3, 0x2] - ldrb r0, [r3, 0x3] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r3, 0x4] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r3, 0x5] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - b _0812AC2C - .align 2, 0 -_0812AC20: .4byte gSharedMem + 0x192E4 -_0812AC24: .4byte gAIScriptPtr -_0812AC28: - adds r0, r3, 0x6 - str r0, [r4] -_0812AC2C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_7E - - thumb_func_start ContestAICmd_unk_7F -ContestAICmd_unk_7F: @ 812AC34 - ldr r3, _0812AC50 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - bx lr - .align 2, 0 -_0812AC50: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_7F - - thumb_func_start ContestAICmd_unk_80 -ContestAICmd_unk_80: @ 812AC54 - push {r4,lr} - ldr r4, _0812AC80 @ =gAIScriptPtr - ldr r0, [r4] - adds r0, 0x5 - bl sub_812ACA4 - ldr r2, [r4] - ldrb r1, [r2, 0x1] - ldrb r0, [r2, 0x2] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x4] - lsls r0, 24 - orrs r1, r0 - str r1, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812AC80: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_80 - - thumb_func_start ContestAICmd_unk_81 -ContestAICmd_unk_81: @ 812AC84 - push {lr} - bl sub_812ACC8 - lsls r0, 24 - cmp r0, 0 - bne _0812AC9A - ldr r2, _0812ACA0 @ =gSharedMem + 0x192E4 - ldrb r1, [r2, 0x9] - movs r0, 0x1 - orrs r0, r1 - strb r0, [r2, 0x9] -_0812AC9A: - pop {r0} - bx r0 - .align 2, 0 -_0812ACA0: .4byte gSharedMem + 0x192E4 - thumb_func_end ContestAICmd_unk_81 - - thumb_func_start sub_812ACA4 -sub_812ACA4: @ 812ACA4 - push {r4,lr} - ldr r3, _0812ACC4 @ =gSharedMem + 0x192E4 - adds r4, r3, 0 - adds r4, 0x40 - ldrb r1, [r4] - adds r2, r1, 0x1 - strb r2, [r4] - lsls r1, 24 - lsrs r1, 22 - adds r3, 0x20 - adds r1, r3 - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812ACC4: .4byte gSharedMem + 0x192E4 - thumb_func_end sub_812ACA4 - - thumb_func_start sub_812ACC8 -sub_812ACC8: @ 812ACC8 - push {lr} - ldr r1, _0812ACDC @ =gSharedMem + 0x192E4 - adds r3, r1, 0 - adds r3, 0x40 - ldrb r0, [r3] - cmp r0, 0 - bne _0812ACE0 - movs r0, 0 - b _0812ACF4 - .align 2, 0 -_0812ACDC: .4byte gSharedMem + 0x192E4 -_0812ACE0: - subs r0, 0x1 - strb r0, [r3] - ldr r2, _0812ACF8 @ =gAIScriptPtr - ldrb r0, [r3] - lsls r0, 2 - adds r1, 0x20 - adds r0, r1 - ldr r0, [r0] - str r0, [r2] - movs r0, 0x1 -_0812ACF4: - pop {r1} - bx r1 - .align 2, 0 -_0812ACF8: .4byte gAIScriptPtr - thumb_func_end sub_812ACC8 - - thumb_func_start ContestAICmd_check_for_exciting_move -ContestAICmd_check_for_exciting_move: @ 812ACFC - push {r4-r7,lr} - movs r5, 0 - movs r4, 0 - ldr r7, _0812AD28 @ =gSharedMem + 0x19325 - ldr r6, _0812AD2C @ =gUnknown_0203858E -_0812AD06: - lsls r0, r4, 1 - ldrb r1, [r7] - lsls r1, 6 - adds r0, r1 - adds r1, r0, r6 - ldrh r0, [r1] - cmp r0, 0 - beq _0812AD30 - bl Contest_GetMoveExcitement - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1 - bne _0812AD30 - movs r5, 0x1 - b _0812AD36 - .align 2, 0 -_0812AD28: .4byte gSharedMem + 0x19325 -_0812AD2C: .4byte gUnknown_0203858E -_0812AD30: - adds r4, 0x1 - cmp r4, 0x3 - ble _0812AD06 -_0812AD36: - ldr r0, _0812AD48 @ =gSharedMem + 0x192E4 - strh r5, [r0, 0x18] - ldr r1, _0812AD4C @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x1 - str r0, [r1] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812AD48: .4byte gSharedMem + 0x192E4 -_0812AD4C: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_check_for_exciting_move - - thumb_func_start ContestAICmd_unk_83 -ContestAICmd_unk_83: @ 812AD50 - push {lr} - bl ContestAICmd_check_for_exciting_move - ldr r0, _0812AD7C @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _0812AD84 - ldr r3, _0812AD80 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812AD8C - .align 2, 0 -_0812AD7C: .4byte gSharedMem + 0x192E4 -_0812AD80: .4byte gAIScriptPtr -_0812AD84: - ldr r1, _0812AD90 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812AD8C: - pop {r0} - bx r0 - .align 2, 0 -_0812AD90: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_83 - - thumb_func_start ContestAICmd_unk_84 -ContestAICmd_unk_84: @ 812AD94 - push {lr} - bl ContestAICmd_check_for_exciting_move - ldr r0, _0812ADC0 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _0812ADC8 - ldr r3, _0812ADC4 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812ADD0 - .align 2, 0 -_0812ADC0: .4byte gSharedMem + 0x192E4 -_0812ADC4: .4byte gAIScriptPtr -_0812ADC8: - ldr r1, _0812ADD4 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812ADD0: - pop {r0} - bx r0 - .align 2, 0 -_0812ADD4: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_84 - - thumb_func_start ContestAICmd_unk_85 -ContestAICmd_unk_85: @ 812ADD8 - push {r4-r7,lr} - movs r6, 0 - ldr r2, _0812AE08 @ =gAIScriptPtr - ldr r0, [r2] - ldrb r4, [r0, 0x1] - ldrb r0, [r0, 0x2] - lsls r0, 8 - orrs r4, r0 - movs r3, 0 - ldr r0, _0812AE0C @ =gContestMons - mov r12, r0 - ldr r5, _0812AE10 @ =gSharedMem + 0x192E4 - adds r0, r5, 0 - adds r0, 0x41 - ldrb r0, [r0] - lsls r0, 6 - mov r1, r12 - adds r1, 0x1E - adds r0, r1 - ldrh r0, [r0] - adds r7, r2, 0 - mov r2, r12 - mov r12, r5 - b _0812AE2E - .align 2, 0 -_0812AE08: .4byte gAIScriptPtr -_0812AE0C: .4byte gContestMons -_0812AE10: .4byte gSharedMem + 0x192E4 -_0812AE14: - adds r3, 0x1 - cmp r3, 0x3 - bgt _0812AE34 - lsls r1, r3, 1 - mov r0, r12 - adds r0, 0x41 - ldrb r0, [r0] - lsls r0, 6 - adds r1, r0 - adds r0, r2, 0 - adds r0, 0x1E - adds r1, r0 - ldrh r0, [r1] -_0812AE2E: - cmp r0, r4 - bne _0812AE14 - movs r6, 0x1 -_0812AE34: - mov r0, r12 - strh r6, [r0, 0x18] - ldr r0, [r7] - adds r0, 0x3 - str r0, [r7] - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end ContestAICmd_unk_85 - - thumb_func_start ContestAICmd_unk_86 -ContestAICmd_unk_86: @ 812AE44 - push {lr} - bl ContestAICmd_unk_85 - ldr r0, _0812AE70 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _0812AE78 - ldr r3, _0812AE74 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812AE80 - .align 2, 0 -_0812AE70: .4byte gSharedMem + 0x192E4 -_0812AE74: .4byte gAIScriptPtr -_0812AE78: - ldr r1, _0812AE84 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812AE80: - pop {r0} - bx r0 - .align 2, 0 -_0812AE84: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_86 - - thumb_func_start ContestAICmd_unk_87 -ContestAICmd_unk_87: @ 812AE88 - push {lr} - bl ContestAICmd_unk_85 - ldr r0, _0812AEB4 @ =gSharedMem + 0x192E4 - movs r1, 0x18 - ldrsh r0, [r0, r1] - cmp r0, 0 - bne _0812AEBC - ldr r3, _0812AEB8 @ =gAIScriptPtr - ldr r2, [r3] - ldrb r1, [r2] - ldrb r0, [r2, 0x1] - lsls r0, 8 - orrs r1, r0 - ldrb r0, [r2, 0x2] - lsls r0, 16 - orrs r1, r0 - ldrb r0, [r2, 0x3] - lsls r0, 24 - orrs r1, r0 - str r1, [r3] - b _0812AEC4 - .align 2, 0 -_0812AEB4: .4byte gSharedMem + 0x192E4 -_0812AEB8: .4byte gAIScriptPtr -_0812AEBC: - ldr r1, _0812AEC8 @ =gAIScriptPtr - ldr r0, [r1] - adds r0, 0x4 - str r0, [r1] -_0812AEC4: - pop {r0} - bx r0 - .align 2, 0 -_0812AEC8: .4byte gAIScriptPtr - thumb_func_end ContestAICmd_unk_87 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/contest_link_80C2020.s b/asm/contest_link_80C2020.s index af239f3f7..8a0f096f0 100644 --- a/asm/contest_link_80C2020.s +++ b/asm/contest_link_80C2020.s @@ -1202,7 +1202,7 @@ _080C29FC: .4byte gStringVar1 _080C2A00: .4byte gLinkPlayers + 0x8 _080C2A04: lsls r4, 6 - ldr r1, _080C2A54 @ =gUnknown_0203857D + ldr r1, _080C2A54 @ =gContestMons + 0xD adds r1, r4, r1 adds r0, r3, 0 bl StringCopy @@ -1238,7 +1238,7 @@ _080C2A4A: strh r0, [r1, 0x8] b _080C2A80 .align 2, 0 -_080C2A54: .4byte gUnknown_0203857D +_080C2A54: .4byte gContestMons + 0xD _080C2A58: .4byte gStringVar2 _080C2A5C: .4byte gContestMons + 0x2 _080C2A60: .4byte gContestText_PokeWon @@ -5201,7 +5201,7 @@ _080C4720: ldr r1, _080C4738 @ =gSpecialVar_0x8006 ldrh r1, [r1] lsls r1, 6 - ldr r2, _080C473C @ =gUnknown_0203857D + ldr r2, _080C473C @ =gContestMons + 0xD adds r1, r2 bl sub_80C4674 _080C4730: @@ -5210,7 +5210,7 @@ _080C4730: .align 2, 0 _080C4734: .4byte gStringVar1 _080C4738: .4byte gSpecialVar_0x8006 -_080C473C: .4byte gUnknown_0203857D +_080C473C: .4byte gContestMons + 0xD thumb_func_end sub_80C46EC thumb_func_start sub_80C4740 @@ -5352,7 +5352,7 @@ _080C4838: .4byte gStringVar3 _080C483C: .4byte gLinkPlayers + 0x8 _080C4840: lsls r1, r2, 6 - ldr r0, _080C4854 @ =gUnknown_0203857D + ldr r0, _080C4854 @ =gContestMons + 0xD adds r1, r0 adds r0, r4, 0 bl sub_80C4674 @@ -5361,7 +5361,7 @@ _080C484C: pop {r0} bx r0 .align 2, 0 -_080C4854: .4byte gUnknown_0203857D +_080C4854: .4byte gContestMons + 0xD thumb_func_end sub_80C47F0 thumb_func_start sub_80C4858 diff --git a/asm/contest_link_80C857C.s b/asm/contest_link_80C857C.s index b29e03583..6afcaec6d 100644 --- a/asm/contest_link_80C857C.s +++ b/asm/contest_link_80C857C.s @@ -402,7 +402,7 @@ _080C8838: mov r1, r8 strb r1, [r4, 0xA] _080C883E: - ldr r0, _080C886C @ =gUnknown_0203857D + ldr r0, _080C886C @ =gContestMons + 0xD adds r4, r5, r0 ldrh r0, [r6, 0x1A] cmp r0, 0x1 @@ -425,7 +425,7 @@ _080C883E: strb r0, [r4] b _080C8878 .align 2, 0 -_080C886C: .4byte gUnknown_0203857D +_080C886C: .4byte gContestMons + 0xD _080C8870: ldrb r0, [r4, 0x7] strb r0, [r4, 0x5] @@ -610,7 +610,7 @@ _080C886C: mov r2, r9 strb r2, [r4, 0xA] _080C8872: - ldr r0, _080C88A0 @ =gUnknown_0203857D + ldr r0, _080C88A0 @ =gContestMons + 0xD adds r4, r6, r0 ldrh r0, [r7, 0x1A] cmp r0, 0x1 @@ -633,7 +633,7 @@ _080C8872: strb r0, [r4] b _080C88AC .align 2, 0 -_080C88A0: .4byte gUnknown_0203857D +_080C88A0: .4byte gContestMons + 0xD _080C88A4: ldrb r0, [r4, 0x7] strb r0, [r4, 0x5] diff --git a/asm/current.s b/asm/current.s index 4ef537dc3..4ef537dc3 100755..100644 --- a/asm/current.s +++ b/asm/current.s diff --git a/asm/dark.s b/asm/dark.s index 9f6ad3278..9f6ad3278 100755..100644 --- a/asm/dark.s +++ b/asm/dark.s diff --git a/asm/fight.s b/asm/fight.s index e8e3299af..e8e3299af 100755..100644 --- a/asm/fight.s +++ b/asm/fight.s diff --git a/asm/flying.s b/asm/flying.s index ce3fb050b..ce3fb050b 100755..100644 --- a/asm/flying.s +++ b/asm/flying.s diff --git a/asm/ghost.s b/asm/ghost.s index 2934f6dbd..2934f6dbd 100755..100644 --- a/asm/ghost.s +++ b/asm/ghost.s diff --git a/asm/ground.s b/asm/ground.s index 3d4b69a9f..3d4b69a9f 100755..100644 --- a/asm/ground.s +++ b/asm/ground.s diff --git a/asm/ice.s b/asm/ice.s index 032da59c3..032da59c3 100755..100644 --- a/asm/ice.s +++ b/asm/ice.s diff --git a/asm/normal.s b/asm/normal.s index fffbc3870..fffbc3870 100755..100644 --- a/asm/normal.s +++ b/asm/normal.s diff --git a/asm/pc_screen_effect.s b/asm/pc_screen_effect.s index 9d36df66c..9d36df66c 100755..100644 --- a/asm/pc_screen_effect.s +++ b/asm/pc_screen_effect.s diff --git a/asm/pokemon_item_effect.s b/asm/pokemon_item_effect.s deleted file mode 100644 index 6995dc62b..000000000 --- a/asm/pokemon_item_effect.s +++ /dev/null @@ -1,1969 +0,0 @@ - .include "constants/gba_constants.inc" - .include "include/macros.inc" - - .syntax unified - - .text - - thumb_func_start ExecuteTableBasedItemEffect_ -ExecuteTableBasedItemEffect_: @ 803E18C - push {r4,lr} - sub sp, 0x4 - lsls r1, 16 - lsrs r1, 16 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - movs r4, 0 - str r4, [sp] - bl sub_803E1B0 - lsls r0, 24 - lsrs r0, 24 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end ExecuteTableBasedItemEffect_ - - thumb_func_start sub_803E1B0 -sub_803E1B0: @ 803E1B0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x3C - mov r8, r0 - ldr r0, [sp, 0x5C] - lsls r1, 16 - lsrs r1, 16 - str r1, [sp, 0x8] - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0xC] - lsls r3, 24 - lsrs r3, 24 - str r3, [sp, 0x10] - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x14] - movs r0, 0x1 - str r0, [sp, 0x1C] - movs r1, 0x6 - str r1, [sp, 0x24] - movs r2, 0 - str r2, [sp, 0x2C] - movs r3, 0x4 - str r3, [sp, 0x34] - mov r0, r8 - movs r1, 0xC - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xAF - bne _0803E240 - ldr r0, _0803E21C @ =gMain - ldr r4, _0803E220 @ =0x0000043d - adds r0, r4 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0803E22C - ldr r2, _0803E224 @ =gEnigmaBerries - ldr r0, _0803E228 @ =gBankInMenu - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x7] - b _0803E248 - .align 2, 0 -_0803E21C: .4byte gMain -_0803E220: .4byte 0x0000043d -_0803E224: .4byte gEnigmaBerries -_0803E228: .4byte gBankInMenu -_0803E22C: - ldr r0, _0803E238 @ =gSaveBlock1 - ldr r5, _0803E23C @ =0x00003688 - adds r0, r5 - ldrb r0, [r0] - b _0803E248 - .align 2, 0 -_0803E238: .4byte gSaveBlock1 -_0803E23C: .4byte 0x00003688 -_0803E240: - bl ItemId_GetHoldEffect - lsls r0, 24 - lsrs r0, 24 -_0803E248: - str r0, [sp, 0x30] - ldr r1, _0803E2A4 @ =gStringBank - ldr r0, _0803E2A8 @ =gBankInMenu - ldrb r2, [r0] - strb r2, [r1] - ldr r0, _0803E2AC @ =gMain - ldr r1, _0803E2B0 @ =0x0000043d - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _0803E2E8 - ldr r0, _0803E2B4 @ =gActiveBank - strb r2, [r0] - ldrb r0, [r0] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - negs r1, r0 - orrs r1, r0 - lsrs r1, 31 - str r1, [sp, 0x18] - ldr r0, _0803E2B8 @ =gNoOfAllBanks - ldr r4, [sp, 0x8] - subs r4, 0xD - ldrb r0, [r0] - cmp r1, r0 - bge _0803E2F4 - ldr r2, _0803E2BC @ =gBattlePartyID - lsls r0, r1, 1 - adds r0, r2 - ldrh r3, [r0] - ldr r5, [sp, 0xC] - lsls r0, r5, 16 - lsrs r1, r0, 16 - adds r5, r0, 0 - cmp r3, r1 - bne _0803E2C0 - ldr r0, [sp, 0x18] - str r0, [sp, 0x34] - b _0803E2F4 - .align 2, 0 -_0803E2A4: .4byte gStringBank -_0803E2A8: .4byte gBankInMenu -_0803E2AC: .4byte gMain -_0803E2B0: .4byte 0x0000043d -_0803E2B4: .4byte gActiveBank -_0803E2B8: .4byte gNoOfAllBanks -_0803E2BC: .4byte gBattlePartyID -_0803E2C0: - ldr r1, [sp, 0x18] - adds r1, 0x2 - str r1, [sp, 0x18] - ldr r0, _0803E2E4 @ =gNoOfAllBanks - ldrb r0, [r0] - cmp r1, r0 - bge _0803E2F4 - lsls r0, r1, 1 - adds r0, r2 - ldrh r1, [r0] - lsrs r0, r5, 16 - cmp r1, r0 - bne _0803E2C0 - ldr r2, [sp, 0x18] - lsls r0, r2, 24 - lsrs r0, 24 - str r0, [sp, 0x34] - b _0803E2F4 - .align 2, 0 -_0803E2E4: .4byte gNoOfAllBanks -_0803E2E8: - ldr r0, _0803E310 @ =gActiveBank - strb r1, [r0] - movs r3, 0x4 - str r3, [sp, 0x34] - ldr r4, [sp, 0x8] - subs r4, 0xD -_0803E2F4: - lsls r0, r4, 16 - lsrs r0, 16 - cmp r0, 0xA5 - bhi _0803E36C - ldr r1, _0803E314 @ =gItemEffectTable - lsls r0, r4, 2 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - bne _0803E318 - ldr r4, [sp, 0x8] - cmp r4, 0xAF - beq _0803E31E - b _0803E36C - .align 2, 0 -_0803E310: .4byte gActiveBank -_0803E314: .4byte gItemEffectTable -_0803E318: - ldr r5, [sp, 0x8] - cmp r5, 0xAF - bne _0803E372 -_0803E31E: - ldr r0, _0803E340 @ =gMain - ldr r1, _0803E344 @ =0x0000043d - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0803E350 - ldr r0, _0803E348 @ =gActiveBank - ldrb r1, [r0] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - ldr r1, _0803E34C @ =gUnknown_02024DF8 - adds r0, r1 - b _0803E372 - .align 2, 0 -_0803E340: .4byte gMain -_0803E344: .4byte 0x0000043d -_0803E348: .4byte gActiveBank -_0803E34C: .4byte gUnknown_02024DF8 -_0803E350: - ldr r2, _0803E358 @ =gSaveBlock1 + 0x3676 - str r2, [sp, 0x20] - b _0803E374 - .align 2, 0 -_0803E358: .4byte gSaveBlock1 + 0x3676 -_0803E35C: - mov r0, r8 - movs r2, 0 - ldr r3, [sp, 0xC] - bl BeginEvolutionScene - movs r0, 0 - bl _0803F15C -_0803E36C: - movs r0, 0x1 - bl _0803F15C -_0803E372: - str r0, [sp, 0x20] -_0803E374: - movs r3, 0 - str r3, [sp, 0x18] -_0803E378: - ldr r4, [sp, 0x18] - cmp r4, 0x5 - bls _0803E382 - bl _0803F14C -_0803E382: - lsls r0, r4, 2 - ldr r1, _0803E38C @ =_0803E390 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803E38C: .4byte _0803E390 - .align 2, 0 -_0803E390: - .4byte _0803E3A8 - .4byte _0803E474 - .4byte _0803E508 - .4byte _0803E59C - .4byte _0803E77C - .4byte _0803EE1E -_0803E3A8: - ldr r5, [sp, 0x20] - ldr r0, [sp, 0x18] - adds r2, r5, r0 - ldrb r1, [r2] - movs r0, 0x80 - ands r0, r1 - adds r6, r2, 0 - cmp r0, 0 - beq _0803E3F0 - ldr r0, _0803E460 @ =gMain - ldr r1, _0803E464 @ =0x0000043d - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0803E3F0 - ldr r2, [sp, 0x34] - cmp r2, 0x4 - beq _0803E3F0 - ldr r1, _0803E468 @ =gBattleMons - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r2, r0, r1 - ldr r1, [r2] - movs r0, 0xF0 - lsls r0, 12 - ands r0, r1 - cmp r0, 0 - beq _0803E3F0 - ldr r0, _0803E46C @ =0xfff0ffff - ands r1, r0 - str r1, [r2] - movs r3, 0 - str r3, [sp, 0x1C] -_0803E3F0: - ldrb r1, [r6] - movs r0, 0x30 - ands r0, r1 - cmp r0, 0 - beq _0803E41E - ldr r1, _0803E468 @ =gBattleMons - ldr r0, _0803E470 @ =gActiveBank - ldrb r2, [r0] - movs r0, 0x58 - muls r0, r2 - adds r1, 0x50 - adds r2, r0, r1 - ldr r1, [r2] - movs r3, 0x80 - lsls r3, 13 - adds r0, r1, 0 - ands r0, r3 - cmp r0, 0 - bne _0803E41E - orrs r1, r3 - str r1, [r2] - movs r4, 0 - str r4, [sp, 0x1C] -_0803E41E: - ldrb r0, [r6] - movs r3, 0xF - ands r3, r0 - cmp r3, 0 - bne _0803E42C - bl _0803F14C -_0803E42C: - ldr r6, _0803E468 @ =gBattleMons - ldr r5, _0803E470 @ =gActiveBank - ldrb r0, [r5] - movs r4, 0x58 - muls r0, r4 - adds r1, r0, r6 - ldrb r2, [r1, 0x19] - movs r0, 0x19 - ldrsb r0, [r1, r0] - cmp r0, 0xB - ble _0803E446 - bl _0803F14C -_0803E446: - adds r0, r2, r3 - strb r0, [r1, 0x19] - ldrb r0, [r5] - muls r0, r4 - adds r1, r0, r6 - movs r0, 0x19 - ldrsb r0, [r1, r0] - cmp r0, 0xC - bgt _0803E45A - b _0803E74E -_0803E45A: - movs r0, 0xC - strb r0, [r1, 0x19] - b _0803E74E - .align 2, 0 -_0803E460: .4byte gMain -_0803E464: .4byte 0x0000043d -_0803E468: .4byte gBattleMons -_0803E46C: .4byte 0xfff0ffff -_0803E470: .4byte gActiveBank -_0803E474: - ldr r0, [sp, 0x20] - ldr r1, [sp, 0x18] - adds r2, r0, r1 - ldrb r1, [r2] - movs r0, 0xF0 - ands r0, r1 - lsls r3, r0, 24 - adds r6, r2, 0 - cmp r3, 0 - beq _0803E4BA - ldr r7, _0803E500 @ =gBattleMons - ldr r5, _0803E504 @ =gActiveBank - ldrb r0, [r5] - movs r4, 0x58 - muls r0, r4 - adds r1, r0, r7 - ldrb r2, [r1, 0x1A] - movs r0, 0x1A - ldrsb r0, [r1, r0] - cmp r0, 0xB - bgt _0803E4BA - lsrs r0, r3, 28 - adds r0, r2, r0 - strb r0, [r1, 0x1A] - ldrb r0, [r5] - muls r0, r4 - adds r1, r0, r7 - movs r0, 0x1A - ldrsb r0, [r1, r0] - cmp r0, 0xC - ble _0803E4B6 - movs r0, 0xC - strb r0, [r1, 0x1A] -_0803E4B6: - movs r2, 0 - str r2, [sp, 0x1C] -_0803E4BA: - ldrb r0, [r6] - movs r3, 0xF - ands r3, r0 - cmp r3, 0 - bne _0803E4C8 - bl _0803F14C -_0803E4C8: - ldr r6, _0803E500 @ =gBattleMons - ldr r5, _0803E504 @ =gActiveBank - ldrb r0, [r5] - movs r4, 0x58 - muls r0, r4 - adds r1, r0, r6 - ldrb r2, [r1, 0x1B] - movs r0, 0x1B - ldrsb r0, [r1, r0] - cmp r0, 0xB - ble _0803E4E2 - bl _0803F14C -_0803E4E2: - adds r0, r2, r3 - strb r0, [r1, 0x1B] - ldrb r0, [r5] - muls r0, r4 - adds r1, r0, r6 - movs r0, 0x1B - ldrsb r0, [r1, r0] - cmp r0, 0xC - ble _0803E4F8 - movs r0, 0xC - strb r0, [r1, 0x1B] -_0803E4F8: - movs r3, 0 - str r3, [sp, 0x1C] - bl _0803F14C - .align 2, 0 -_0803E500: .4byte gBattleMons -_0803E504: .4byte gActiveBank -_0803E508: - ldr r4, [sp, 0x20] - ldr r5, [sp, 0x18] - adds r2, r4, r5 - ldrb r1, [r2] - movs r0, 0xF0 - ands r0, r1 - lsls r3, r0, 24 - adds r6, r2, 0 - cmp r3, 0 - beq _0803E54E - ldr r7, _0803E594 @ =gBattleMons - ldr r5, _0803E598 @ =gActiveBank - ldrb r0, [r5] - movs r4, 0x58 - muls r0, r4 - adds r1, r0, r7 - ldrb r2, [r1, 0x1E] - movs r0, 0x1E - ldrsb r0, [r1, r0] - cmp r0, 0xB - bgt _0803E54E - lsrs r0, r3, 28 - adds r0, r2, r0 - strb r0, [r1, 0x1E] - ldrb r0, [r5] - muls r0, r4 - adds r1, r0, r7 - movs r0, 0x1E - ldrsb r0, [r1, r0] - cmp r0, 0xC - ble _0803E54A - movs r0, 0xC - strb r0, [r1, 0x1E] -_0803E54A: - movs r0, 0 - str r0, [sp, 0x1C] -_0803E54E: - ldrb r0, [r6] - movs r3, 0xF - ands r3, r0 - cmp r3, 0 - bne _0803E55C - bl _0803F14C -_0803E55C: - ldr r6, _0803E594 @ =gBattleMons - ldr r5, _0803E598 @ =gActiveBank - ldrb r0, [r5] - movs r4, 0x58 - muls r0, r4 - adds r1, r0, r6 - ldrb r2, [r1, 0x1C] - movs r0, 0x1C - ldrsb r0, [r1, r0] - cmp r0, 0xB - ble _0803E576 - bl _0803F14C -_0803E576: - adds r0, r2, r3 - strb r0, [r1, 0x1C] - ldrb r0, [r5] - muls r0, r4 - adds r1, r0, r6 - movs r0, 0x1C - ldrsb r0, [r1, r0] - cmp r0, 0xC - ble _0803E58C - movs r0, 0xC - strb r0, [r1, 0x1C] -_0803E58C: - movs r1, 0 - str r1, [sp, 0x1C] - bl _0803F14C - .align 2, 0 -_0803E594: .4byte gBattleMons -_0803E598: .4byte gActiveBank -_0803E59C: - ldr r3, [sp, 0x20] - ldr r4, [sp, 0x18] - adds r2, r3, r4 - ldrb r1, [r2] - movs r0, 0x80 - ands r0, r1 - adds r6, r2, 0 - cmp r0, 0 - beq _0803E5E4 - ldr r5, _0803E758 @ =gSideTimers - ldr r4, _0803E75C @ =gActiveBank - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r0, [r1, 0x2] - cmp r0, 0 - bne _0803E5E4 - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - movs r0, 0x5 - strb r0, [r1, 0x2] - movs r5, 0 - str r5, [sp, 0x1C] -_0803E5E4: - ldrb r1, [r6] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0803E646 - mov r0, r8 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - cmp r0, 0x64 - beq _0803E646 - ldr r5, _0803E760 @ =gExperienceTables - mov r0, r8 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - mov r0, r8 - movs r1, 0xB - movs r2, 0 - bl GetMonData - adds r4, 0x1 - lsls r4, 2 - ldr r2, _0803E764 @ =gBaseStats - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r1, [r1, 0x13] - movs r0, 0xCA - lsls r0, 1 - muls r0, r1 - adds r4, r0 - adds r4, r5 - ldr r0, [r4] - str r0, [sp] - mov r0, r8 - movs r1, 0x19 - mov r2, sp - bl SetMonData - mov r0, r8 - bl CalculateMonStats - movs r0, 0 - str r0, [sp, 0x1C] -_0803E646: - ldrb r1, [r6] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0803E682 - mov r0, r8 - ldr r1, [sp, 0xC] - movs r2, 0x7 - ldr r3, [sp, 0x34] - bl HealStatusConditions - lsls r0, 24 - cmp r0, 0 - bne _0803E682 - ldr r1, [sp, 0x34] - cmp r1, 0x4 - beq _0803E67E - ldr r1, _0803E768 @ =gBattleMons - movs r0, 0x58 - ldr r3, [sp, 0x34] - adds r2, r3, 0 - muls r2, r0 - adds r1, 0x50 - adds r2, r1 - ldr r0, [r2] - ldr r1, _0803E76C @ =0xf7ffffff - ands r0, r1 - str r0, [r2] -_0803E67E: - movs r4, 0 - str r4, [sp, 0x1C] -_0803E682: - ldrb r1, [r6] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0803E6A2 - ldr r2, _0803E770 @ =0x00000f88 - mov r0, r8 - ldr r1, [sp, 0xC] - ldr r3, [sp, 0x34] - bl HealStatusConditions - lsls r0, 24 - cmp r0, 0 - bne _0803E6A2 - movs r5, 0 - str r5, [sp, 0x1C] -_0803E6A2: - ldrb r1, [r6] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0803E6C2 - mov r0, r8 - ldr r1, [sp, 0xC] - movs r2, 0x10 - ldr r3, [sp, 0x34] - bl HealStatusConditions - lsls r0, 24 - cmp r0, 0 - bne _0803E6C2 - movs r0, 0 - str r0, [sp, 0x1C] -_0803E6C2: - ldrb r1, [r6] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0803E6E2 - mov r0, r8 - ldr r1, [sp, 0xC] - movs r2, 0x20 - ldr r3, [sp, 0x34] - bl HealStatusConditions - lsls r0, 24 - cmp r0, 0 - bne _0803E6E2 - movs r1, 0 - str r1, [sp, 0x1C] -_0803E6E2: - ldrb r1, [r6] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0803E702 - mov r0, r8 - ldr r1, [sp, 0xC] - movs r2, 0x40 - ldr r3, [sp, 0x34] - bl HealStatusConditions - lsls r0, 24 - cmp r0, 0 - bne _0803E702 - movs r2, 0 - str r2, [sp, 0x1C] -_0803E702: - ldrb r1, [r6] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _0803E710 - bl _0803F14C -_0803E710: - ldr r0, _0803E774 @ =gMain - ldr r3, _0803E778 @ =0x0000043d - adds r0, r3 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _0803E724 - bl _0803F14C -_0803E724: - ldr r4, [sp, 0x34] - cmp r4, 0x4 - bne _0803E72E - bl _0803F14C -_0803E72E: - ldr r1, _0803E768 @ =gBattleMons - movs r0, 0x58 - muls r0, r4 - adds r1, 0x50 - adds r2, r0, r1 - ldr r1, [r2] - movs r0, 0x7 - ands r0, r1 - cmp r0, 0 - bne _0803E746 - bl _0803F14C -_0803E746: - movs r0, 0x8 - negs r0, r0 - ands r1, r0 - str r1, [r2] -_0803E74E: - movs r5, 0 - str r5, [sp, 0x1C] - bl _0803F14C - .align 2, 0 -_0803E758: .4byte gSideTimers -_0803E75C: .4byte gActiveBank -_0803E760: .4byte gExperienceTables -_0803E764: .4byte gBaseStats -_0803E768: .4byte gBattleMons -_0803E76C: .4byte 0xf7ffffff -_0803E770: .4byte 0x00000f88 -_0803E774: .4byte gMain -_0803E778: .4byte 0x0000043d -_0803E77C: - ldr r1, [sp, 0x20] - ldr r2, [sp, 0x18] - adds r0, r1, r2 - ldrb r0, [r0] - mov r10, r0 - movs r0, 0x20 - mov r3, r10 - ands r0, r3 - cmp r0, 0 - beq _0803E854 - movs r0, 0xDF - ands r3, r0 - mov r10, r3 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - ldr r1, _0803E880 @ =gUnknown_08208238 - ldr r4, [sp, 0x10] - adds r1, r4, r1 - ldrb r1, [r1] - ands r0, r1 - lsls r1, r4, 1 - lsrs r0, r1 - str r0, [sp] - adds r5, r4, 0 - adds r5, 0xD - mov r0, r8 - adds r1, r5, 0 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - ldr r2, [sp, 0x10] - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x28] - ldr r0, [sp] - cmp r0, 0x2 - bhi _0803E854 - ldr r0, [sp, 0x28] - cmp r0, 0x4 - bls _0803E854 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - ldr r1, _0803E884 @ =gUnknown_08208240 - ldr r2, [sp, 0x10] - adds r1, r2, r1 - ldrb r1, [r1] - adds r0, r1 - str r0, [sp] - mov r0, r8 - movs r1, 0x15 - mov r2, sp - bl SetMonData - mov r0, r8 - adds r1, r5, 0 - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - ldr r1, [sp] - lsls r1, 24 - lsrs r1, 24 - ldr r2, [sp, 0x10] - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r0, 24 - ldr r3, [sp, 0x28] - subs r0, r3 - str r0, [sp] - ldr r4, [sp, 0x10] - adds r4, 0x11 - mov r0, r8 - adds r1, r4, 0 - movs r2, 0 - bl GetMonData - ldr r1, [sp] - adds r0, r1 - str r0, [sp] - mov r0, r8 - adds r1, r4, 0 - mov r2, sp - bl SetMonData - movs r4, 0 - str r4, [sp, 0x1C] -_0803E854: - movs r5, 0 - str r5, [sp, 0x28] - mov r0, r10 - cmp r0, 0 - bne _0803E862 - bl _0803F14C -_0803E862: - movs r0, 0x1 - mov r1, r10 - ands r0, r1 - cmp r0, 0 - bne _0803E86E - b _0803EE0A -_0803E86E: - ldr r2, [sp, 0x28] - cmp r2, 0x7 - bls _0803E876 - b _0803EE0A -_0803E876: - lsls r0, r2, 2 - ldr r1, _0803E888 @ =_0803E88C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803E880: .4byte gUnknown_08208238 -_0803E884: .4byte gUnknown_08208240 -_0803E888: .4byte _0803E88C - .align 2, 0 -_0803E88C: - .4byte _0803E8AC - .4byte _0803E8AC - .4byte _0803E934 - .4byte _0803EB5C - .4byte _0803EE0A - .4byte _0803EE0A - .4byte _0803EE0A - .4byte _0803EDF4 -_0803E8AC: - mov r0, r8 - bl GetMonEVCount - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, _0803E8EC @ =0x000001fd - cmp r5, r0 - bls _0803E8BE - b _0803E36C -_0803E8BE: - ldr r0, _0803E8F0 @ =gUnknown_082082F2 - ldr r3, [sp, 0x28] - adds r0, r3, r0 - ldrb r1, [r0] - mov r0, r8 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - str r1, [sp] - cmp r1, 0x63 - bls _0803E8D8 - b _0803EE0A -_0803E8D8: - ldr r4, [sp, 0x20] - ldr r2, [sp, 0x24] - adds r0, r4, r2 - ldrb r0, [r0] - adds r1, r0 - cmp r1, 0x64 - bls _0803E8F4 - adds r0, 0x64 - subs r4, r0, r1 - b _0803E8F6 - .align 2, 0 -_0803E8EC: .4byte 0x000001fd -_0803E8F0: .4byte gUnknown_082082F2 -_0803E8F4: - adds r4, r0, 0 -_0803E8F6: - adds r1, r5, r4 - movs r0, 0xFF - lsls r0, 1 - cmp r1, r0 - bls _0803E904 - adds r0, r4, r0 - subs r4, r0, r1 -_0803E904: - ldr r0, [sp] - adds r0, r4 - str r0, [sp] - ldr r0, _0803E930 @ =gUnknown_082082F2 - ldr r3, [sp, 0x28] - adds r0, r3, r0 - ldrb r1, [r0] - mov r0, r8 - mov r2, sp - bl SetMonData - mov r0, r8 - bl CalculateMonStats - ldr r0, [sp, 0x24] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x24] - movs r4, 0 - str r4, [sp, 0x1C] - b _0803EE0A - .align 2, 0 -_0803E930: .4byte gUnknown_082082F2 -_0803E934: - movs r0, 0x10 - mov r5, r10 - ands r0, r5 - cmp r0, 0 - beq _0803E9F4 - mov r0, r8 - movs r1, 0x39 - movs r2, 0 - bl GetMonData - cmp r0, 0 - beq _0803E954 - ldr r0, [sp, 0x24] - adds r0, 0x1 - lsls r0, 24 - b _0803EC9E -_0803E954: - ldr r0, _0803E99C @ =gMain - ldr r1, _0803E9A0 @ =0x0000043d - adds r0, r1 - ldrb r1, [r0] - movs r4, 0x2 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0803EA0A - ldr r2, [sp, 0x34] - cmp r2, 0x4 - beq _0803E9B4 - ldr r2, _0803E9A4 @ =gAbsentBankFlags - ldr r1, _0803E9A8 @ =gBitTable - ldr r3, [sp, 0x34] - lsls r0, r3, 2 - adds r0, r1 - ldr r1, [r0] - ldrb r0, [r2] - bics r0, r1 - strb r0, [r2] - ldr r1, _0803E9AC @ =gBattlePartyID - lsls r0, r3, 1 - adds r0, r1 - ldrb r0, [r0] - bl pokemon_order_func - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r0, [sp, 0x34] - bl CopyPlayerPartyMonToBattleData - ldr r0, _0803E9B0 @ =gActiveBank - ldrb r0, [r0] - b _0803E9CC - .align 2, 0 -_0803E99C: .4byte gMain -_0803E9A0: .4byte 0x0000043d -_0803E9A4: .4byte gAbsentBankFlags -_0803E9A8: .4byte gBitTable -_0803E9AC: .4byte gBattlePartyID -_0803E9B0: .4byte gActiveBank -_0803E9B4: - ldr r3, _0803E9E4 @ =gAbsentBankFlags - ldr r1, _0803E9E8 @ =gBitTable - ldr r2, _0803E9EC @ =gActiveBank - ldrb r0, [r2] - eors r0, r4 - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - ldrb r0, [r3] - bics r0, r1 - strb r0, [r3] - ldrb r0, [r2] -_0803E9CC: - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _0803EA0A - ldr r1, _0803E9F0 @ =gBattleResults - ldrb r0, [r1, 0x4] - cmp r0, 0xFE - bhi _0803EA0A - adds r0, 0x1 - strb r0, [r1, 0x4] - b _0803EA0A - .align 2, 0 -_0803E9E4: .4byte gAbsentBankFlags -_0803E9E8: .4byte gBitTable -_0803E9EC: .4byte gActiveBank -_0803E9F0: .4byte gBattleResults -_0803E9F4: - mov r0, r8 - movs r1, 0x39 - movs r2, 0 - bl GetMonData - cmp r0, 0 - bne _0803EA0A - ldr r0, [sp, 0x24] - adds r0, 0x1 - lsls r0, 24 - b _0803EC9E -_0803EA0A: - ldr r1, [sp, 0x24] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x24] - ldr r4, [sp, 0x20] - adds r1, r4, r1 - ldrb r1, [r1] - str r1, [sp] - adds r0, r1, 0 - cmp r0, 0xFE - beq _0803EA4C - cmp r0, 0xFE - bhi _0803EA2C - cmp r0, 0xFD - beq _0803EA62 - b _0803EA6C -_0803EA2C: - cmp r1, 0xFF - bne _0803EA6C - mov r0, r8 - movs r1, 0x3A - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - mov r0, r8 - movs r1, 0x39 - movs r2, 0 - bl GetMonData - subs r4, r0 - str r4, [sp] - b _0803EA6C -_0803EA4C: - mov r0, r8 - movs r1, 0x3A - movs r2, 0 - bl GetMonData - lsrs r0, 1 - str r0, [sp] - cmp r0, 0 - bne _0803EA6C - movs r0, 0x1 - b _0803EA6A -_0803EA62: - ldr r0, _0803EB24 @ =gSharedMem - ldr r5, _0803EB28 @ =0x000160fa - adds r0, r5 - ldrb r0, [r0] -_0803EA6A: - str r0, [sp] -_0803EA6C: - mov r0, r8 - movs r1, 0x3A - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - mov r0, r8 - movs r1, 0x39 - movs r2, 0 - bl GetMonData - cmp r4, r0 - beq _0803EB4C - ldr r0, [sp, 0x14] - cmp r0, 0 - bne _0803EB40 - mov r0, r8 - movs r1, 0x39 - movs r2, 0 - bl GetMonData - ldr r1, [sp] - adds r0, r1 - str r0, [sp] - mov r0, r8 - movs r1, 0x3A - movs r2, 0 - bl GetMonData - ldr r1, [sp] - cmp r1, r0 - bls _0803EAB8 - mov r0, r8 - movs r1, 0x3A - movs r2, 0 - bl GetMonData - str r0, [sp] -_0803EAB8: - mov r0, r8 - movs r1, 0x39 - mov r2, sp - bl SetMonData - ldr r0, _0803EB2C @ =gMain - ldr r1, _0803EB30 @ =0x0000043d - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0803EB48 - ldr r2, [sp, 0x34] - cmp r2, 0x4 - beq _0803EB48 - ldr r1, _0803EB34 @ =gBattleMons - movs r0, 0x58 - muls r0, r2 - adds r0, r1 - ldr r1, [sp] - strh r1, [r0, 0x28] - movs r0, 0x10 - mov r3, r10 - ands r0, r3 - cmp r0, 0 - bne _0803EB48 - ldr r4, _0803EB38 @ =gActiveBank - ldrb r0, [r4] - bl GetBankSide - lsls r0, 24 - cmp r0, 0 - bne _0803EB48 - ldr r1, _0803EB3C @ =gBattleResults - ldrb r0, [r1, 0x3] - cmp r0, 0xFE - bhi _0803EB08 - adds r0, 0x1 - strb r0, [r1, 0x3] -_0803EB08: - ldrb r5, [r4] - add r0, sp, 0x34 - ldrb r0, [r0] - strb r0, [r4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl EmitGetAttributes - ldrb r0, [r4] - bl MarkBufferBankForExecution - strb r5, [r4] - b _0803EB48 - .align 2, 0 -_0803EB24: .4byte gSharedMem -_0803EB28: .4byte 0x000160fa -_0803EB2C: .4byte gMain -_0803EB30: .4byte 0x0000043d -_0803EB34: .4byte gBattleMons -_0803EB38: .4byte gActiveBank -_0803EB3C: .4byte gBattleResults -_0803EB40: - ldr r1, _0803EB58 @ =gBattleMoveDamage - ldr r0, [sp] - negs r0, r0 - str r0, [r1] -_0803EB48: - movs r1, 0 - str r1, [sp, 0x1C] -_0803EB4C: - movs r0, 0xEF - mov r2, r10 - ands r2, r0 - mov r10, r2 - b _0803EE0A - .align 2, 0 -_0803EB58: .4byte gBattleMoveDamage -_0803EB5C: - movs r7, 0x2 - mov r0, r10 - ands r0, r7 - cmp r0, 0 - beq _0803EB68 - b _0803ECB8 -_0803EB68: - movs r5, 0 - ldr r3, [sp, 0x24] - adds r3, 0x1 - str r3, [sp, 0x38] -_0803EB70: - movs r4, 0x11 - adds r4, r5 - mov r9, r4 - mov r0, r8 - mov r1, r9 - movs r2, 0 - bl GetMonData - str r0, [sp] - adds r7, r5, 0 - adds r7, 0xD - mov r0, r8 - adds r1, r7, 0 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r0, r5, 24 - lsrs r6, r0, 24 - adds r0, r4, 0 - adds r2, r6, 0 - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r0, 24 - ldr r1, [sp] - cmp r1, r0 - beq _0803EC92 - ldr r2, [sp, 0x20] - ldr r3, [sp, 0x24] - adds r0, r2, r3 - ldrb r0, [r0] - adds r0, r1, r0 - str r0, [sp] - mov r0, r8 - adds r1, r7, 0 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - adds r2, r6, 0 - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r0, 24 - ldr r1, [sp] - cmp r1, r0 - bls _0803EC28 - mov r0, r8 - adds r1, r7, 0 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - adds r2, r6, 0 - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] -_0803EC28: - mov r0, r8 - mov r1, r9 - mov r2, sp - bl SetMonData - ldr r0, _0803ECA4 @ =gMain - ldr r4, _0803ECA8 @ =0x0000043d - adds r0, r4 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0803EC8E - ldr r0, [sp, 0x34] - cmp r0, 0x4 - beq _0803EC8E - ldr r4, _0803ECAC @ =gBattleMons - movs r0, 0x58 - ldr r1, [sp, 0x34] - adds r3, r1, 0 - muls r3, r0 - adds r0, r4, 0 - adds r0, 0x50 - adds r0, r3, r0 - ldr r1, [r0] - movs r0, 0x80 - lsls r0, 14 - ands r1, r0 - cmp r1, 0 - bne _0803EC8E - ldr r1, _0803ECB0 @ =gDisableStructs - ldr r2, [sp, 0x34] - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x18] - lsrs r1, 4 - ldr r2, _0803ECB4 @ =gBitTable - lsls r0, r5, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _0803EC8E - adds r0, r5, r3 - adds r1, r4, 0 - adds r1, 0x24 - adds r0, r1 - ldr r1, [sp] - strb r1, [r0] -_0803EC8E: - movs r3, 0 - str r3, [sp, 0x1C] -_0803EC92: - adds r5, 0x1 - cmp r5, 0x3 - bgt _0803EC9A - b _0803EB70 -_0803EC9A: - ldr r4, [sp, 0x38] - lsls r0, r4, 24 -_0803EC9E: - lsrs r0, 24 - str r0, [sp, 0x24] - b _0803EE0A - .align 2, 0 -_0803ECA4: .4byte gMain -_0803ECA8: .4byte 0x0000043d -_0803ECAC: .4byte gBattleMons -_0803ECB0: .4byte gDisableStructs -_0803ECB4: .4byte gBitTable -_0803ECB8: - ldr r6, [sp, 0x10] - adds r6, 0x11 - mov r0, r8 - adds r1, r6, 0 - movs r2, 0 - bl GetMonData - str r0, [sp] - ldr r5, [sp, 0x10] - adds r5, 0xD - mov r0, r8 - adds r1, r5, 0 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - ldr r2, [sp, 0x10] - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r0, 24 - ldr r2, [sp] - cmp r2, r0 - bne _0803ED00 - b _0803EE0A -_0803ED00: - ldr r1, [sp, 0x24] - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x24] - ldr r0, [sp, 0x20] - adds r1, r0, r1 - ldrb r0, [r1] - adds r0, r2, r0 - str r0, [sp] - mov r0, r8 - adds r1, r5, 0 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - ldr r2, [sp, 0x10] - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r0, 24 - ldr r1, [sp] - cmp r1, r0 - bls _0803ED74 - mov r0, r8 - adds r1, r5, 0 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - ldr r2, [sp, 0x10] - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] -_0803ED74: - mov r0, r8 - adds r1, r6, 0 - mov r2, sp - bl SetMonData - ldr r0, _0803EDE0 @ =gMain - ldr r1, _0803EDE4 @ =0x0000043d - adds r0, r1 - ldrb r1, [r0] - adds r0, r7, 0 - ands r0, r1 - cmp r0, 0 - beq _0803EDD8 - ldr r2, [sp, 0x34] - cmp r2, 0x4 - beq _0803EDD8 - ldr r4, _0803EDE8 @ =gBattleMons - movs r0, 0x58 - adds r3, r2, 0 - muls r3, r0 - adds r0, r4, 0 - adds r0, 0x50 - adds r0, r3, r0 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 14 - ands r0, r1 - cmp r0, 0 - bne _0803EDD8 - ldr r1, _0803EDEC @ =gDisableStructs - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x18] - lsrs r1, 4 - ldr r2, _0803EDF0 @ =gBitTable - ldr r5, [sp, 0x10] - lsls r0, r5, 2 - adds r0, r2 - ldr r0, [r0] - ands r1, r0 - cmp r1, 0 - bne _0803EDD8 - adds r0, r5, r3 - adds r1, r4, 0 - adds r1, 0x24 - adds r0, r1 - ldr r1, [sp] - strb r1, [r0] -_0803EDD8: - movs r0, 0 - str r0, [sp, 0x1C] - b _0803EE0A - .align 2, 0 -_0803EDE0: .4byte gMain -_0803EDE4: .4byte 0x0000043d -_0803EDE8: .4byte gBattleMons -_0803EDEC: .4byte gDisableStructs -_0803EDF0: .4byte gBitTable -_0803EDF4: - mov r0, r8 - movs r1, 0x2 - ldr r2, [sp, 0x8] - bl GetEvolutionTargetSpecies - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - beq _0803EE0A - bl _0803E35C -_0803EE0A: - ldr r1, [sp, 0x28] - adds r1, 0x1 - str r1, [sp, 0x28] - mov r2, r10 - lsrs r2, 1 - mov r10, r2 - cmp r2, 0 - beq _0803EE1C - b _0803E862 -_0803EE1C: - b _0803F14C -_0803EE1E: - ldr r3, [sp, 0x20] - ldr r4, [sp, 0x18] - adds r0, r3, r4 - ldrb r0, [r0] - mov r10, r0 - movs r5, 0 - str r5, [sp, 0x28] - cmp r0, 0 - bne _0803EE32 - b _0803F14C -_0803EE32: - movs r0, 0x1 - mov r1, r10 - ands r0, r1 - cmp r0, 0 - bne _0803EE3E - b _0803F13A -_0803EE3E: - ldr r2, [sp, 0x28] - cmp r2, 0x7 - bls _0803EE46 - b _0803F13A -_0803EE46: - lsls r0, r2, 2 - ldr r1, _0803EE50 @ =_0803EE54 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0803EE50: .4byte _0803EE54 - .align 2, 0 -_0803EE54: - .4byte _0803EE74 - .4byte _0803EE74 - .4byte _0803EE74 - .4byte _0803EE74 - .4byte _0803EEF8 - .4byte _0803EFCC - .4byte _0803F026 - .4byte _0803F07C -_0803EE74: - mov r0, r8 - bl GetMonEVCount - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, _0803EEBC @ =0x000001fd - cmp r5, r0 - bls _0803EE88 - bl _0803E36C -_0803EE88: - ldr r0, _0803EEC0 @ =gUnknown_082082F2 - ldr r4, [sp, 0x28] - adds r4, 0x2 - adds r0, r4, r0 - ldrb r1, [r0] - mov r0, r8 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - str r1, [sp] - adds r2, r4, 0 - cmp r1, 0x63 - bls _0803EEA6 - b _0803F13A -_0803EEA6: - ldr r3, [sp, 0x20] - ldr r4, [sp, 0x24] - adds r0, r3, r4 - ldrb r0, [r0] - adds r1, r0 - cmp r1, 0x64 - bls _0803EEC4 - adds r0, 0x64 - subs r4, r0, r1 - b _0803EEC6 - .align 2, 0 -_0803EEBC: .4byte 0x000001fd -_0803EEC0: .4byte gUnknown_082082F2 -_0803EEC4: - adds r4, r0, 0 -_0803EEC6: - adds r1, r5, r4 - movs r0, 0xFF - lsls r0, 1 - cmp r1, r0 - bls _0803EED4 - adds r0, r4, r0 - subs r4, r0, r1 -_0803EED4: - ldr r0, [sp] - adds r0, r4 - str r0, [sp] - ldr r0, _0803EEF4 @ =gUnknown_082082F2 - adds r0, r2, r0 - ldrb r1, [r0] - mov r0, r8 - mov r2, sp - bl SetMonData - mov r0, r8 - bl CalculateMonStats - movs r5, 0 - str r5, [sp, 0x1C] - b _0803F130 - .align 2, 0 -_0803EEF4: .4byte gUnknown_082082F2 -_0803EEF8: - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - ldr r1, _0803EFC0 @ =gUnknown_08208238 - ldr r2, [sp, 0x10] - adds r1, r2, r1 - ldrb r1, [r1] - ands r0, r1 - lsls r1, r2, 1 - lsrs r0, r1 - str r0, [sp] - cmp r0, 0x2 - bls _0803EF18 - b _0803F13A -_0803EF18: - adds r5, r2, 0 - adds r5, 0xD - mov r0, r8 - adds r1, r5, 0 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - ldr r2, [sp, 0x10] - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r4, r0, 24 - mov r0, r8 - movs r1, 0x15 - movs r2, 0 - bl GetMonData - str r0, [sp] - ldr r1, _0803EFC4 @ =gUnknown_0820823C - ldr r3, [sp, 0x10] - adds r1, r3, r1 - ldrb r2, [r1] - ands r2, r0 - str r2, [sp] - ldr r0, _0803EFC8 @ =gUnknown_08208240 - adds r0, r3, r0 - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - adds r2, r0 - str r2, [sp] - mov r0, r8 - movs r1, 0x15 - mov r2, sp - bl SetMonData - mov r0, r8 - adds r1, r5, 0 - movs r2, 0 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - ldr r1, [sp] - lsls r1, 24 - lsrs r1, 24 - ldr r2, [sp, 0x10] - bl CalculatePPWithBonus - lsls r0, 24 - lsrs r0, 24 - subs r0, r4 - str r0, [sp] - ldr r4, [sp, 0x10] - adds r4, 0x11 - mov r0, r8 - adds r1, r4, 0 - movs r2, 0 - bl GetMonData - ldr r1, [sp] - adds r0, r1 - str r0, [sp] - mov r0, r8 - adds r1, r4, 0 - mov r2, sp - bl SetMonData - movs r4, 0 - str r4, [sp, 0x1C] - b _0803F13A - .align 2, 0 -_0803EFC0: .4byte gUnknown_08208238 -_0803EFC4: .4byte gUnknown_0820823C -_0803EFC8: .4byte gUnknown_08208240 -_0803EFCC: - mov r0, r8 - movs r1, 0x20 - movs r2, 0 - bl GetMonData - cmp r0, 0x63 - bls _0803EFDC - b _0803F130 -_0803EFDC: - ldr r5, [sp, 0x1C] - cmp r5, 0 - beq _0803EFE4 - b _0803F130 -_0803EFE4: - ldr r0, [sp, 0x2C] - cmp r0, 0 - beq _0803EFEC - b _0803F130 -_0803EFEC: - ldr r1, [sp, 0x20] - ldr r2, [sp, 0x24] - adds r0, r1, r2 - ldrb r0, [r0] - str r0, [sp, 0x2C] - mov r0, r8 - movs r1, 0x20 - movs r2, 0 - bl GetMonData - adds r5, r0, 0 - str r5, [sp, 0x4] - ldr r3, [sp, 0x2C] - lsls r4, r3, 24 - asrs r1, r4, 24 - cmp r1, 0 - ble _0803F0D0 - ldr r0, [sp, 0x30] - cmp r0, 0x1B - bne _0803F0D0 - movs r0, 0x96 - muls r0, r1 - movs r1, 0x64 - bl __divsi3 - adds r0, r5, r0 - str r0, [sp, 0x4] - adds r2, r4, 0 - b _0803F0DC -_0803F026: - mov r0, r8 - movs r1, 0x20 - movs r2, 0 - bl GetMonData - cmp r0, 0x63 - bls _0803F130 - mov r0, r8 - movs r1, 0x20 - movs r2, 0 - bl GetMonData - cmp r0, 0xC7 - bhi _0803F130 - ldr r2, [sp, 0x1C] - cmp r2, 0 - bne _0803F130 - ldr r3, [sp, 0x2C] - cmp r3, 0 - bne _0803F130 - ldr r4, [sp, 0x20] - ldr r5, [sp, 0x24] - adds r0, r4, r5 - ldrb r0, [r0] - str r0, [sp, 0x2C] - mov r0, r8 - movs r1, 0x20 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - str r4, [sp, 0x4] - ldr r0, [sp, 0x2C] - lsls r5, r0, 24 - asrs r1, r5, 24 - cmp r1, 0 - ble _0803F076 - ldr r2, [sp, 0x30] - cmp r2, 0x1B - beq _0803F0BE -_0803F076: - ldr r3, [sp, 0x2C] - lsls r2, r3, 24 - b _0803F0D4 -_0803F07C: - mov r0, r8 - movs r1, 0x20 - movs r2, 0 - bl GetMonData - cmp r0, 0xC7 - bls _0803F130 - ldr r4, [sp, 0x1C] - cmp r4, 0 - bne _0803F130 - ldr r5, [sp, 0x2C] - cmp r5, 0 - bne _0803F130 - ldr r1, [sp, 0x20] - ldr r2, [sp, 0x24] - adds r0, r1, r2 - ldrb r0, [r0] - str r0, [sp, 0x2C] - mov r0, r8 - movs r1, 0x20 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - str r4, [sp, 0x4] - ldr r3, [sp, 0x2C] - lsls r5, r3, 24 - asrs r1, r5, 24 - cmp r1, 0 - ble _0803F0D0 - ldr r0, [sp, 0x30] - cmp r0, 0x1B - bne _0803F0D0 -_0803F0BE: - movs r0, 0x96 - muls r0, r1 - movs r1, 0x64 - bl __divsi3 - adds r0, r4, r0 - str r0, [sp, 0x4] - adds r2, r5, 0 - b _0803F0DC -_0803F0D0: - ldr r1, [sp, 0x2C] - lsls r2, r1, 24 -_0803F0D4: - asrs r1, r2, 24 - ldr r0, [sp, 0x4] - adds r0, r1 - str r0, [sp, 0x4] -_0803F0DC: - cmp r2, 0 - ble _0803F112 - mov r0, r8 - movs r1, 0x26 - movs r2, 0 - bl GetMonData - cmp r0, 0xB - bne _0803F0F4 - ldr r0, [sp, 0x4] - adds r0, 0x1 - str r0, [sp, 0x4] -_0803F0F4: - mov r0, r8 - movs r1, 0x23 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - bl sav1_map_get_name - lsls r0, 24 - lsrs r0, 24 - cmp r4, r0 - bne _0803F112 - ldr r0, [sp, 0x4] - adds r0, 0x1 - str r0, [sp, 0x4] -_0803F112: - ldr r0, [sp, 0x4] - cmp r0, 0 - bge _0803F11C - movs r0, 0 - str r0, [sp, 0x4] -_0803F11C: - ldr r0, [sp, 0x4] - cmp r0, 0xFF - ble _0803F126 - movs r0, 0xFF - str r0, [sp, 0x4] -_0803F126: - add r2, sp, 0x4 - mov r0, r8 - movs r1, 0x20 - bl SetMonData -_0803F130: - ldr r0, [sp, 0x24] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x24] -_0803F13A: - ldr r2, [sp, 0x28] - adds r2, 0x1 - str r2, [sp, 0x28] - mov r3, r10 - lsrs r3, 1 - mov r10, r3 - cmp r3, 0 - beq _0803F14C - b _0803EE32 -_0803F14C: - ldr r4, [sp, 0x18] - adds r4, 0x1 - str r4, [sp, 0x18] - cmp r4, 0x5 - bgt _0803F15A - bl _0803E378 -_0803F15A: - ldr r0, [sp, 0x1C] -_0803F15C: - add sp, 0x3C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_803E1B0 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/psychic.s b/asm/psychic.s index f91ce950e..f91ce950e 100755..100644 --- a/asm/psychic.s +++ b/asm/psychic.s diff --git a/asm/rock.s b/asm/rock.s index 98afb53e6..98afb53e6 100755..100644 --- a/asm/rock.s +++ b/asm/rock.s diff --git a/asm/unk_text_8095904.s b/asm/unk_text_8095904.s index 00c81faca..00c81faca 100755..100644 --- a/asm/unk_text_8095904.s +++ b/asm/unk_text_8095904.s diff --git a/asm/water.s b/asm/water.s index 45fb7f82a..45fb7f82a 100755..100644 --- a/asm/water.s +++ b/asm/water.s diff --git a/common_syms/engine/save.txt b/common_syms/engine/save.txt index d09a52bcf..4824255bf 100644 --- a/common_syms/engine/save.txt +++ b/common_syms/engine/save.txt @@ -1,5 +1,5 @@ -gLastWrittenSector -gLastSaveCounter +gFirstSaveSector +gPrevSaveCounter gLastKnownGoodSector gDamagedSaveSectors gSaveCounter diff --git a/data/battle_anim.s b/data/battle_anim.s deleted file mode 100644 index 270ba818a..000000000 --- a/data/battle_anim.s +++ /dev/null @@ -1,1051 +0,0 @@ - .include "include/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gOamData_837DF24:: @ 837DF24 - .2byte 0x0000 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837DF2C:: @ 837DF2C - .2byte 0x0000 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837DF34:: @ 837DF34 - .2byte 0x0000 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837DF3C:: @ 837DF3C - .2byte 0x0000 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837DF44:: @ 837DF44 - .2byte 0x4000 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837DF4C:: @ 837DF4C - .2byte 0x4000 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837DF54:: @ 837DF54 - .2byte 0x4000 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837DF5C:: @ 837DF5C - .2byte 0x4000 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837DF64:: @ 837DF64 - .2byte 0x8000 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837DF6C:: @ 837DF6C - .2byte 0x8000 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837DF74:: @ 837DF74 - .2byte 0x8000 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837DF7C:: @ 837DF7C - .2byte 0x8000 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837DF84:: @ 837DF84 - .2byte 0x0100 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837DF8C:: @ 837DF8C - .2byte 0x0100 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837DF94:: @ 837DF94 - .2byte 0x0100 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837DF9C:: @ 837DF9C - .2byte 0x0100 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837DFA4:: @ 837DFA4 - .2byte 0x4100 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837DFAC:: @ 837DFAC - .2byte 0x4100 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837DFB4:: @ 837DFB4 - .2byte 0x4100 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837DFBC:: @ 837DFBC - .2byte 0x4100 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837DFC4:: @ 837DFC4 - .2byte 0x8100 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837DFCC:: @ 837DFCC - .2byte 0x8100 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837DFD4:: @ 837DFD4 - .2byte 0x8100 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837DFDC:: @ 837DFDC - .2byte 0x8100 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837DFE4:: @ 837DFE4 - .2byte 0x0300 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837DFEC:: @ 837DFEC - .2byte 0x0300 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837DFF4:: @ 837DFF4 - .2byte 0x0300 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837DFFC:: @ 837DFFC - .2byte 0x0300 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837D004:: @ 837D004 - .2byte 0x4300 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837D00C:: @ 837D00C - .2byte 0x4300 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837E014:: @ 837E014 - .2byte 0x4300 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837E01C:: @ 837E01C - .2byte 0x4300 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837E024:: @ 837E024 - .2byte 0x8300 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837E02C:: @ 837E02C - .2byte 0x8300 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837E034:: @ 837E034 - .2byte 0x8300 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837E03C:: @ 837E03C - .2byte 0x8300 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837E044:: @ 837E044 - .2byte 0x0400 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837E04C:: @ 837E04C - .2byte 0x0400 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837E054:: @ 837E054 - .2byte 0x0400 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837E05C:: @ 837E05C - .2byte 0x0400 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837E064:: @ 837E064 - .2byte 0x4400 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837E06C:: @ 837E06C - .2byte 0x4400 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837E074:: @ 837E074 - .2byte 0x4400 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837E07C:: @ 837E07C - .2byte 0x4400 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837E084:: @ 837E084 - .2byte 0x8400 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837E08C:: @ 837E08C - .2byte 0x8400 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837E094:: @ 837E094 - .2byte 0x8400 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837E09C:: @ 837E09C - .2byte 0x8400 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837E0A4:: @ 837E0A4 - .2byte 0x0500 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837E0AC:: @ 837E0AC - .2byte 0x0500 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837E0B4:: @ 837E0B4 - .2byte 0x0500 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837E0BC:: @ 837E0BC - .2byte 0x0500 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837E0C4:: @ 837E0C4 - .2byte 0x4500 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837E0CC:: @ 837E0CC - .2byte 0x4500 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837E0D4:: @ 837E0D4 - .2byte 0x4500 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837E0DC:: @ 837E0DC - .2byte 0x4500 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837E0E4:: @ 837E0E4 - .2byte 0x8500 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837E0EC:: @ 837E0EC - .2byte 0x8500 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837E0F4:: @ 837E0F4 - .2byte 0x8500 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837E0FC:: @ 837E0FC - .2byte 0x8500 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837E104:: @ 837E104 - .2byte 0x0700 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837E10C:: @ 837E10C - .2byte 0x0700 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837E114:: @ 837E114 - .2byte 0x0700 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837E11C:: @ 837E11C - .2byte 0x0700 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837E124:: @ 837E124 - .2byte 0x4700 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837E12C:: @ 837E12C - .2byte 0x4700 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837E134:: @ 837E134 - .2byte 0x4700 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837E13C:: @ 837E13C - .2byte 0x4700 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gOamData_837E144:: @ 837E144 - .2byte 0x8700 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gOamData_837E14C:: @ 837E14C - .2byte 0x8700 - .2byte 0x4000 - .2byte 0x0800 - - .align 2 -gOamData_837E154:: @ 837E154 - .2byte 0x8700 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gOamData_837E15C:: @ 837E15C - .2byte 0x8700 - .2byte 0xC000 - .2byte 0x0800 - - .align 2 -gBattleAnimPicTable:: @ 837E164 - obj_tiles gBattleAnimSpriteSheet_000, 0x200, 10000 - obj_tiles gBattleAnimSpriteSheet_001, 0x300, 10001 - obj_tiles gBattleAnimSpriteSheet_002, 0x200, 10002 - obj_tiles gBattleAnimSpriteSheet_003, 0x100, 10003 - obj_tiles gBattleAnimSpriteSheet_004, 0x200, 10004 - obj_tiles gBattleAnimSpriteSheet_005, 0x400, 10005 - obj_tiles gBattleAnimSpriteSheet_006, 0x180, 10006 - obj_tiles gBattleAnimSpriteSheet_007, 0x800, 10007 - obj_tiles gBattleAnimSpriteSheet_008, 0x20, 10008 - obj_tiles gBattleAnimSpriteSheet_009, 0x400, 10009 - obj_tiles gBattleAnimSpriteSheet_010, 0x1200, 10010 - obj_tiles gBattleAnimSpriteSheet_011, 0x180, 10011 - obj_tiles gBattleAnimSpriteSheet_012, 0x80, 10012 - obj_tiles gBattleAnimSpriteSheet_013, 0x80, 10013 - obj_tiles gBattleAnimSpriteSheet_014, 0x280, 10014 - obj_tiles gBattleAnimSpriteSheet_015, 0x80, 10015 - obj_tiles gBattleAnimSpriteSheet_016, 0x100, 10016 - obj_tiles gBattleAnimSpriteSheet_017, 0x20, 10017 - obj_tiles gBattleAnimSpriteSheet_018, 0x80, 10018 - obj_tiles gBattleAnimSpriteSheet_019, 0x400, 10019 - obj_tiles gBattleAnimSpriteSheet_020, 0x200, 10020 - obj_tiles gBattleAnimSpriteSheet_021, 0xA00, 10021 - obj_tiles gBattleAnimSpriteSheet_021, 0xA00, 10022 - obj_tiles gBattleAnimSpriteSheet_023, 0x380, 10023 - obj_tiles gBattleAnimSpriteSheet_024, 0x300, 10024 - obj_tiles gBattleAnimSpriteSheet_025, 0xA00, 10025 - obj_tiles gBattleAnimSpriteSheet_026, 0xA00, 10026 - obj_tiles gBattleAnimSpriteSheet_027, 0xA00, 10027 - obj_tiles gBattleAnimSpriteSheet_028, 0xA00, 10028 - obj_tiles gBattleAnimSpriteSheet_029, 0xA00, 10029 - obj_tiles gBattleAnimSpriteSheet_030, 0xA00, 10030 - obj_tiles gBattleAnimSpriteSheet_031, 0xE00, 10031 - obj_tiles gBattleAnimSpriteSheet_032, 0x380, 10032 - obj_tiles gBattleAnimSpriteSheet_033, 0x1000, 10033 - obj_tiles gBattleAnimSpriteSheet_034, 0x800, 10034 - obj_tiles gBattleAnimSpriteSheet_035, 0xA00, 10035 - obj_tiles gBattleAnimSpriteSheet_036, 0x800, 10036 - obj_tiles gBattleAnimSpriteSheet_037, 0xA00, 10037 - obj_tiles gBattleAnimSpriteSheet_038, 0xA00, 10038 - obj_tiles gBattleAnimSpriteSheet_039, 0xA00, 10039 - obj_tiles gBattleAnimSpriteSheet_040, 0xA00, 10040 - obj_tiles gBattleAnimSpriteSheet_041, 0xA00, 10041 - obj_tiles gBattleAnimSpriteSheet_042, 0xA00, 10042 - obj_tiles gBattleAnimSpriteSheet_043, 0xA00, 10043 - obj_tiles gBattleAnimSpriteSheet_044, 0xA00, 10044 - obj_tiles gBattleAnimSpriteSheet_045, 0xA00, 10045 - obj_tiles gBattleAnimSpriteSheet_046, 0x1000, 10046 - obj_tiles gBattleAnimSpriteSheet_046, 0x1000, 10047 - obj_tiles gBattleAnimSpriteSheet_048, 0x1000, 10048 - obj_tiles gBattleAnimSpriteSheet_048, 0x1000, 10049 - obj_tiles gBattleAnimSpriteSheet_050, 0x200, 10050 - obj_tiles gBattleAnimSpriteSheet_051, 0x200, 10051 - obj_tiles gBattleAnimSpriteSheet_052, 0x200, 10052 - obj_tiles gBattleAnimSpriteSheet_053, 0x800, 10053 - obj_tiles gBattleAnimSpriteSheet_054, 0x80, 10054 - obj_tiles gBattleAnimSpriteSheet_055, 0x200, 10055 - obj_tiles gBattleAnimSpriteSheet_056, 0x1000, 10056 - obj_tiles gBattleAnimSpriteSheet_057, 0x180, 10057 - obj_tiles gBattleAnimSpriteSheet_058, 0xC00, 10058 - obj_tiles gBattleAnimSpriteSheet_059, 0x100, 10059 - obj_tiles gBattleAnimSpriteSheet_060, 0x40, 10060 - obj_tiles gBattleAnimSpriteSheet_061, 0x180, 10061 - obj_tiles gBattleAnimSpriteSheet_062, 0x800, 10062 - obj_tiles gBattleAnimSpriteSheet_063, 0x480, 10063 - obj_tiles gBattleAnimSpriteSheet_064, 0x200, 10064 - obj_tiles gBattleAnimSpriteSheet_065, 0x200, 10065 - obj_tiles gBattleAnimSpriteSheet_066, 0x100, 10066 - obj_tiles gBattleAnimSpriteSheet_065, 0x200, 10067 - obj_tiles gBattleAnimSpriteSheet_065, 0x200, 10068 - obj_tiles gBattleAnimSpriteSheet_065, 0x200, 10069 - obj_tiles gBattleAnimSpriteSheet_070, 0x200, 10070 - obj_tiles gBattleAnimSpriteSheet_071, 0xA00, 10071 - obj_tiles gBattleAnimSpriteSheet_072, 0x300, 10072 - obj_tiles gBattleAnimSpriteSheet_073, 0x180, 10073 - obj_tiles gBattleAnimSpriteSheet_074, 0xA0, 10074 - obj_tiles gBattleAnimSpriteSheet_075, 0x700, 10075 - obj_tiles gBattleAnimSpriteSheet_076, 0x400, 10076 - obj_tiles gBattleAnimSpriteSheet_077, 0x200, 10077 - obj_tiles gBattleAnimSpriteSheet_078, 0x300, 10078 - obj_tiles gBattleAnimSpriteSheet_079, 0xC00, 10079 - obj_tiles gBattleAnimSpriteSheet_080, 0xA00, 10080 - obj_tiles gBattleAnimSpriteSheet_081, 0x80, 10081 - obj_tiles gBattleAnimSpriteSheet_082, 0x40, 10082 - obj_tiles gBattleAnimSpriteSheet_083, 0xE00, 10083 - obj_tiles gBattleAnimSpriteSheet_084, 0xE00, 10084 - obj_tiles gBattleAnimSpriteSheet_085, 0x280, 10085 - obj_tiles gBattleAnimSpriteSheet_086, 0x200, 10086 - obj_tiles gBattleAnimSpriteSheet_087, 0x80, 10087 - obj_tiles gBattleAnimSpriteSheet_088, 0xC0, 10088 - obj_tiles gBattleAnimSpriteSheet_089, 0xA00, 10089 - obj_tiles gBattleAnimSpriteSheet_090, 0x200, 10090 - obj_tiles gBattleAnimSpriteSheet_091, 0x180, 10091 - obj_tiles gBattleAnimSpriteSheet_092, 0x80, 10092 - obj_tiles gBattleAnimSpriteSheet_093, 0x1000, 10093 - obj_tiles gBattleAnimSpriteSheet_094, 0xA00, 10094 - obj_tiles gBattleAnimSpriteSheet_095, 0x180, 10095 - obj_tiles gBattleAnimSpriteSheet_096, 0x380, 10096 - obj_tiles gBattleAnimSpriteSheet_097, 0xC00, 10097 - obj_tiles gBattleAnimSpriteSheet_098, 0x200, 10098 - obj_tiles gBattleAnimSpriteSheet_099, 0x200, 10099 - obj_tiles gBattleAnimSpriteSheet_100, 0x200, 10100 - obj_tiles gBattleAnimSpriteSheet_101, 0x200, 10101 - obj_tiles gBattleAnimSpriteSheet_102, 0x400, 10102 - obj_tiles gBattleAnimSpriteSheet_103, 0x80, 10103 - obj_tiles gBattleAnimSpriteSheet_104, 0x400, 10104 - obj_tiles gBattleAnimSpriteSheet_105, 0xC00, 10105 - obj_tiles gBattleAnimSpriteSheet_106, 0x200, 10106 - obj_tiles gBattleAnimSpriteSheet_107, 0x1000, 10107 - obj_tiles gBattleAnimSpriteSheet_108, 0xA00, 10108 - obj_tiles gBattleAnimSpriteSheet_109, 0x20, 10109 - obj_tiles gBattleAnimSpriteSheet_110, 0xE00, 10110 - obj_tiles gBattleAnimSpriteSheet_111, 0x80, 10111 - obj_tiles gBattleAnimSpriteSheet_112, 0xA00, 10112 - obj_tiles gBattleAnimSpriteSheet_113, 0x400, 10113 - obj_tiles gBattleAnimSpriteSheet_114, 0x200, 10114 - obj_tiles gBattleAnimSpriteSheet_115, 0x700, 10115 - obj_tiles gBattleAnimSpriteSheet_116, 0x800, 10116 - obj_tiles gBattleAnimSpriteSheet_117, 0xA00, 10117 - obj_tiles gBattleAnimSpriteSheet_118, 0x600, 10118 - obj_tiles gBattleAnimSpriteSheet_119, 0x800, 10119 - obj_tiles gBattleAnimSpriteSheet_120, 0x200, 10120 - obj_tiles gBattleAnimSpriteSheet_121, 0x40, 10121 - obj_tiles gBattleAnimSpriteSheet_122, 0x180, 10122 - obj_tiles gBattleAnimSpriteSheet_123, 0x600, 10123 - obj_tiles gBattleAnimSpriteSheet_124, 0x600, 10124 - obj_tiles gBattleAnimSpriteSheet_125, 0x200, 10125 - obj_tiles gBattleAnimSpriteSheet_126, 0x80, 10126 - obj_tiles gBattleAnimSpriteSheet_127, 0x200, 10127 - obj_tiles gBattleAnimSpriteSheet_128, 0x800, 10128 - obj_tiles gBattleAnimSpriteSheet_129, 0x80, 10129 - obj_tiles gBattleAnimSpriteSheet_130, 0xA00, 10130 - obj_tiles gBattleAnimSpriteSheet_131, 0x280, 10131 - obj_tiles gBattleAnimSpriteSheet_132, 0x280, 10132 - obj_tiles gBattleAnimSpriteSheet_133, 0x100, 10133 - obj_tiles gBattleAnimSpriteSheet_134, 0x200, 10134 - obj_tiles gBattleAnimSpriteSheet_135, 0x200, 10135 - obj_tiles gBattleAnimSpriteSheet_136, 0x20, 10136 - obj_tiles gBattleAnimSpriteSheet_137, 0xA00, 10137 - obj_tiles gBattleAnimSpriteSheet_138, 0x800, 10138 - obj_tiles gBattleAnimSpriteSheet_139, 0x800, 10139 - obj_tiles gBattleAnimSpriteSheet_140, 0xC0, 10140 - obj_tiles gBattleAnimSpriteSheet_141, 0x1C0, 10141 - obj_tiles gBattleAnimSpriteSheet_142, 0x100, 10142 - obj_tiles gBattleAnimSpriteSheet_143, 0x800, 10143 - obj_tiles gBattleAnimSpriteSheet_144, 0x200, 10144 - obj_tiles gBattleAnimSpriteSheet_145, 0x800, 10145 - obj_tiles gBattleAnimSpriteSheet_146, 0x180, 10146 - obj_tiles gBattleAnimSpriteSheet_147, 0x180, 10147 - obj_tiles gBattleAnimSpriteSheet_148, 0x200, 10148 - obj_tiles gBattleAnimSpriteSheet_149, 0x200, 10149 - obj_tiles gBattleAnimSpriteSheet_150, 0x180, 10150 - obj_tiles gBattleAnimSpriteSheet_151, 0x400, 10151 - obj_tiles gBattleAnimSpriteSheet_152, 0x80, 10152 - obj_tiles gBattleAnimSpriteSheet_153, 0x100, 10153 - obj_tiles gBattleAnimSpriteSheet_154, 0x100, 10154 - obj_tiles gBattleAnimSpriteSheet_155, 0x140, 10155 - obj_tiles gBattleAnimSpriteSheet_156, 0x800, 10156 - obj_tiles gBattleAnimSpriteSheet_157, 0x200, 10157 - obj_tiles gBattleAnimSpriteSheet_158, 0x100, 10158 - obj_tiles gBattleAnimSpriteSheet_159, 0xA0, 10159 - obj_tiles gBattleAnimSpriteSheet_160, 0x100, 10160 - obj_tiles gBattleAnimSpriteSheet_161, 0x80, 10161 - obj_tiles gBattleAnimSpriteSheet_162, 0x300, 10162 - obj_tiles gBattleAnimSpriteSheet_163, 0x100, 10163 - obj_tiles gBattleAnimSpriteSheet_163, 0x100, 10164 - obj_tiles gBattleAnimSpriteSheet_163, 0x100, 10165 - obj_tiles gBattleAnimSpriteSheet_166, 0x800, 10166 - obj_tiles gBattleAnimSpriteSheet_166, 0x800, 10167 - obj_tiles gBattleAnimSpriteSheet_166, 0x800, 10168 - obj_tiles gBattleAnimSpriteSheet_166, 0x800, 10169 - obj_tiles gBattleAnimSpriteSheet_166, 0x800, 10170 - obj_tiles gBattleAnimSpriteSheet_171, 0x80, 10171 - obj_tiles gBattleAnimSpriteSheet_144, 0x200, 10172 - obj_tiles gBattleAnimSpriteSheet_173, 0x200, 10173 - obj_tiles gBattleAnimSpriteSheet_174, 0x200, 10174 - obj_tiles gBattleAnimSpriteSheet_175, 0x80, 10175 - obj_tiles gBattleAnimSpriteSheet_176, 0x200, 10176 - obj_tiles gBattleAnimSpriteSheet_177, 0x500, 10177 - obj_tiles gBattleAnimSpriteSheet_178, 0x800, 10178 - obj_tiles gBattleAnimSpriteSheet_179, 0x400, 10179 - obj_tiles gBattleAnimSpriteSheet_180, 0x20, 10180 - obj_tiles gBattleAnimSpriteSheet_181, 0x800, 10181 - obj_tiles gBattleAnimSpriteSheet_182, 0x100, 10182 - obj_tiles gBattleAnimSpriteSheet_183, 0x800, 10183 - obj_tiles gBattleAnimSpriteSheet_184, 0x400, 10184 - obj_tiles gBattleAnimSpriteSheet_185, 0xA00, 10185 - obj_tiles gBattleAnimSpriteSheet_186, 0x1000, 10186 - obj_tiles gBattleAnimSpriteSheet_187, 0x800, 10187 - obj_tiles gBattleAnimSpriteSheet_188, 0x400, 10188 - obj_tiles gBattleAnimSpriteSheet_189, 0x200, 10189 - obj_tiles gBattleAnimSpriteSheet_190, 0x800, 10190 - obj_tiles gBattleAnimSpriteSheet_191, 0x800, 10191 - obj_tiles gBattleAnimSpriteSheet_192, 0x800, 10192 - obj_tiles gBattleAnimSpriteSheet_193, 0x200, 10193 - obj_tiles gBattleAnimSpriteSheet_194, 0x800, 10194 - obj_tiles gBattleAnimSpriteSheet_195, 0x200, 10195 - obj_tiles gBattleAnimSpriteSheet_196, 0x800, 10196 - obj_tiles gBattleAnimSpriteSheet_197, 0x200, 10197 - obj_tiles gBattleAnimSpriteSheet_198, 0x800, 10198 - obj_tiles gBattleAnimSpriteSheet_199, 0x400, 10199 - obj_tiles gBattleAnimSpriteSheet_200, 0x200, 10200 - obj_tiles gBattleAnimSpriteSheet_201, 0xA80, 10201 - obj_tiles gBattleAnimSpriteSheet_202, 0x600, 10202 - obj_tiles gBattleAnimSpriteSheet_203, 0x800, 10203 - obj_tiles gBattleAnimSpriteSheet_204, 0x200, 10204 - obj_tiles gBattleAnimSpriteSheet_205, 0x600, 10205 - obj_tiles gBattleAnimSpriteSheet_206, 0x800, 10206 - obj_tiles gBattleAnimSpriteSheet_207, 0x180, 10207 - obj_tiles gBattleAnimSpriteSheet_208, 0x800, 10208 - obj_tiles gBattleAnimSpriteSheet_209, 0x800, 10209 - obj_tiles gBattleAnimSpriteSheet_210, 0x80, 10210 - obj_tiles gBattleAnimSpriteSheet_211, 0x80, 10211 - obj_tiles gBattleAnimSpriteSheet_212, 0x800, 10212 - obj_tiles gBattleAnimSpriteSheet_213, 0x800, 10213 - obj_tiles gBattleAnimSpriteSheet_214, 0x600, 10214 - obj_tiles gBattleAnimSpriteSheet_215, 0x600, 10215 - obj_tiles gBattleAnimSpriteSheet_210, 0x80, 10216 - obj_tiles gBattleAnimSpriteSheet_217, 0x80, 10217 - obj_tiles gBattleAnimSpriteSheet_218, 0x180, 10218 - obj_tiles gBattleAnimSpriteSheet_210, 0x80, 10219 - obj_tiles gBattleAnimSpriteSheet_220, 0x200, 10220 - obj_tiles gBattleAnimSpriteSheet_221, 0x400, 10221 - obj_tiles gBattleAnimSpriteSheet_222, 0xA00, 10222 - obj_tiles gBattleAnimSpriteSheet_223, 0x800, 10223 - obj_tiles gBattleAnimSpriteSheet_224, 0x200, 10224 - obj_tiles gBattleAnimSpriteSheet_225, 0x400, 10225 - obj_tiles gBattleAnimSpriteSheet_226, 0x80, 10226 - obj_tiles gBattleAnimSpriteSheet_227, 0x800, 10227 - obj_tiles gBattleAnimSpriteSheet_228, 0x200, 10228 - obj_tiles gBattleAnimSpriteSheet_229, 0x300, 10229 - obj_tiles gBattleAnimSpriteSheet_230, 0x800, 10230 - obj_tiles gBattleAnimSpriteSheet_231, 0x380, 10231 - obj_tiles gBattleAnimSpriteSheet_232, 0x800, 10232 - obj_tiles gBattleAnimSpriteSheet_233, 0xC0, 10233 - obj_tiles gBattleAnimSpriteSheet_234, 0x800, 10234 - obj_tiles gBattleAnimSpriteSheet_235, 0x60, 10235 - obj_tiles gBattleAnimSpriteSheet_235, 0x60, 10236 - obj_tiles gBattleAnimSpriteSheet_235, 0x60, 10237 - obj_tiles gBattleAnimSpriteSheet_238, 0x80, 10238 - obj_tiles gBattleAnimSpriteSheet_239, 0x180, 10239 - obj_tiles gBattleAnimSpriteSheet_240, 0x180, 10240 - obj_tiles gBattleAnimSpriteSheet_241, 0x200, 10241 - obj_tiles gBattleAnimSpriteSheet_242, 0x200, 10242 - obj_tiles gBattleAnimSpriteSheet_243, 0x20, 10243 - obj_tiles gBattleAnimSpriteSheet_244, 0x400, 10244 - obj_tiles gBattleAnimSpriteSheet_245, 0x600, 10245 - obj_tiles gBattleAnimSpriteSheet_246, 0x1000, 10246 - obj_tiles gBattleAnimSpriteSheet_247, 0x400, 10247 - obj_tiles gBattleAnimSpriteSheet_248, 0x20, 10248 - obj_tiles gBattleAnimSpriteSheet_249, 0x80, 10249 - obj_tiles gBattleAnimSpriteSheet_250, 0x800, 10250 - obj_tiles gBattleAnimSpriteSheet_251, 0x80, 10251 - obj_tiles gBattleAnimSpriteSheet_252, 0x200, 10252 - obj_tiles gBattleAnimSpriteSheet_253, 0x400, 10253 - obj_tiles gBattleAnimSpriteSheet_254, 0x200, 10254 - obj_tiles gBattleAnimSpriteSheet_255, 0x200, 10255 - obj_tiles gBattleAnimSpriteSheet_256, 0x800, 10256 - obj_tiles gBattleAnimSpriteSheet_257, 0x280, 10257 - obj_tiles gBattleAnimSpriteSheet_258, 0x200, 10258 - obj_tiles gBattleAnimSpriteSheet_149, 0x200, 10259 - obj_tiles gBattleAnimSpriteSheet_260, 0x400, 10260 - obj_tiles gBattleAnimSpriteSheet_261, 0x200, 10261 - obj_tiles gBattleAnimSpriteSheet_262, 0x200, 10262 - obj_tiles gBattleAnimSpriteSheet_263, 0x80, 10263 - obj_tiles gBattleAnimSpriteSheet_264, 0x20, 10264 - obj_tiles gBattleAnimSpriteSheet_264, 0x20, 10265 - obj_tiles gBattleAnimSpriteSheet_266, 0x80, 10266 - obj_tiles gBattleAnimSpriteSheet_212, 0x800, 10267 - obj_tiles gBattleAnimSpriteSheet_264, 0x20, 10268 - obj_tiles gBattleAnimSpriteSheet_269, 0x80, 10269 - obj_tiles gBattleAnimSpriteSheet_270, 0x400, 10270 - obj_tiles gBattleAnimSpriteSheet_271, 0x80, 10271 - obj_tiles gBattleAnimSpriteSheet_272, 0x800, 10272 - obj_tiles gBattleAnimSpriteSheet_273, 0x20, 10273 - obj_tiles gBattleAnimSpriteSheet_274, 0x800, 10274 - obj_tiles gBattleAnimSpriteSheet_275, 0x800, 10275 - obj_tiles gBattleAnimSpriteSheet_276, 0x800, 10276 - obj_tiles gBattleAnimSpriteSheet_277, 0x1000, 10277 - obj_tiles gBattleAnimSpriteSheet_278, 0x800, 10278 - obj_tiles gBattleAnimSpriteSheet_279, 0xA0, 10279 - obj_tiles gBattleAnimSpriteSheet_280, 0x800, 10280 - obj_tiles gBattleAnimSpriteSheet_281, 0x200, 10281 - obj_tiles gBattleAnimSpriteSheet_282, 0x600, 10282 - obj_tiles gBattleAnimSpriteSheet_283, 0x200, 10283 - obj_tiles gBattleAnimSpriteSheet_284, 0x800, 10284 - obj_tiles gBattleAnimSpriteSheet_285, 0x200, 10285 - obj_tiles gBattleAnimSpriteSheet_183, 0x800, 10286 - obj_tiles gBattleAnimSpriteSheet_056, 0x1000, 10287 - obj_tiles gBattleAnimSpriteSheet_163, 0x100, 10288 - - .align 2 -gBattleAnimPaletteTable:: @ 837EA6C - obj_pal gBattleAnimSpritePalette_000, 10000 - obj_pal gBattleAnimSpritePalette_001, 10001 - obj_pal gBattleAnimSpritePalette_002, 10002 - obj_pal gBattleAnimSpritePalette_003, 10003 - obj_pal gBattleAnimSpritePalette_004, 10004 - obj_pal gBattleAnimSpritePalette_005, 10005 - obj_pal gBattleAnimSpritePalette_006, 10006 - obj_pal gBattleAnimSpritePalette_007, 10007 - obj_pal gBattleAnimSpritePalette_008, 10008 - obj_pal gBattleAnimSpritePalette_009, 10009 - obj_pal gBattleAnimSpritePalette_010, 10010 - obj_pal gBattleAnimSpritePalette_011, 10011 - obj_pal gBattleAnimSpritePalette_012, 10012 - obj_pal gBattleAnimSpritePalette_013, 10013 - obj_pal gBattleAnimSpritePalette_014, 10014 - obj_pal gBattleAnimSpritePalette_015, 10015 - obj_pal gBattleAnimSpritePalette_016, 10016 - obj_pal gBattleAnimSpritePalette_016, 10017 - obj_pal gBattleAnimSpritePalette_018, 10018 - obj_pal gBattleAnimSpritePalette_019, 10019 - obj_pal gBattleAnimSpritePalette_020, 10020 - obj_pal gBattleAnimSpritePalette_021, 10021 - obj_pal gBattleAnimSpritePalette_022, 10022 - obj_pal gBattleAnimSpritePalette_023, 10023 - obj_pal gBattleAnimSpritePalette_024, 10024 - obj_pal gBattleAnimSpritePalette_025, 10025 - obj_pal gBattleAnimSpritePalette_026, 10026 - obj_pal gBattleAnimSpritePalette_027, 10027 - obj_pal gBattleAnimSpritePalette_028, 10028 - obj_pal gBattleAnimSpritePalette_029, 10029 - obj_pal gBattleAnimSpritePalette_030, 10030 - obj_pal gBattleAnimSpritePalette_031, 10031 - obj_pal gBattleAnimSpritePalette_032, 10032 - obj_pal gBattleAnimSpritePalette_033, 10033 - obj_pal gBattleAnimSpritePalette_033, 10034 - obj_pal gBattleAnimSpritePalette_033, 10035 - obj_pal gBattleAnimSpritePalette_036, 10036 - obj_pal gBattleAnimSpritePalette_036, 10037 - obj_pal gBattleAnimSpritePalette_038, 10038 - obj_pal gBattleAnimSpritePalette_039, 10039 - obj_pal gBattleAnimSpritePalette_038, 10040 - obj_pal gBattleAnimSpritePalette_038, 10041 - obj_pal gBattleAnimSpritePalette_042, 10042 - obj_pal gBattleAnimSpritePalette_043, 10043 - obj_pal gBattleAnimSpritePalette_044, 10044 - obj_pal gBattleAnimSpritePalette_045, 10045 - obj_pal gBattleAnimSpritePalette_046, 10046 - obj_pal gBattleAnimSpritePalette_047, 10046 - obj_pal gBattleAnimSpritePalette_048, 10048 - obj_pal gBattleAnimSpritePalette_049, 10049 - obj_pal gBattleAnimSpritePalette_050, 10050 - obj_pal gBattleAnimSpritePalette_050, 10051 - obj_pal gBattleAnimSpritePalette_050, 10052 - obj_pal gBattleAnimSpritePalette_026, 10053 - obj_pal gBattleAnimSpritePalette_054, 10054 - obj_pal gBattleAnimSpritePalette_050, 10055 - obj_pal gBattleAnimSpritePalette_056, 10056 - obj_pal gBattleAnimSpritePalette_057, 10057 - obj_pal gBattleAnimSpritePalette_058, 10058 - obj_pal gBattleAnimSpritePalette_059, 10059 - obj_pal gBattleAnimSpritePalette_060, 10060 - obj_pal gBattleAnimSpritePalette_061, 10061 - obj_pal gBattleAnimSpritePalette_062, 10062 - obj_pal gBattleAnimSpritePalette_063, 10063 - obj_pal gBattleAnimSpritePalette_064, 10064 - obj_pal gBattleAnimSpritePalette_065, 10065 - obj_pal gBattleAnimSpritePalette_066, 10066 - obj_pal gBattleAnimSpritePalette_067, 10067 - obj_pal gBattleAnimSpritePalette_068, 10068 - obj_pal gBattleAnimSpritePalette_065, 10069 - obj_pal gBattleAnimSpritePalette_070, 10070 - obj_pal gBattleAnimSpritePalette_070, 10071 - obj_pal gBattleAnimSpritePalette_072, 10072 - obj_pal gBattleAnimSpritePalette_073, 10073 - obj_pal gBattleAnimSpritePalette_074, 10074 - obj_pal gBattleAnimSpritePalette_075, 10075 - obj_pal gBattleAnimSpritePalette_076, 10076 - obj_pal gBattleAnimSpritePalette_076, 10077 - obj_pal gBattleAnimSpritePalette_078, 10078 - obj_pal gBattleAnimSpritePalette_078, 10079 - obj_pal gBattleAnimSpritePalette_080, 10080 - obj_pal gBattleAnimSpritePalette_081, 10081 - obj_pal gBattleAnimSpritePalette_082, 10082 - obj_pal gBattleAnimSpritePalette_083, 10083 - obj_pal gBattleAnimSpritePalette_084, 10084 - obj_pal gBattleAnimSpritePalette_085, 10085 - obj_pal gBattleAnimSpritePalette_086, 10086 - obj_pal gBattleAnimSpritePalette_087, 10087 - obj_pal gBattleAnimSpritePalette_088, 10088 - obj_pal gBattleAnimSpritePalette_089, 10089 - obj_pal gBattleAnimSpritePalette_090, 10090 - obj_pal gBattleAnimSpritePalette_091, 10091 - obj_pal gBattleAnimSpritePalette_092, 10092 - obj_pal gBattleAnimSpritePalette_093, 10093 - obj_pal gBattleAnimSpritePalette_094, 10094 - obj_pal gBattleAnimSpritePalette_095, 10095 - obj_pal gBattleAnimSpritePalette_096, 10096 - obj_pal gBattleAnimSpritePalette_097, 10097 - obj_pal gBattleAnimSpritePalette_094, 10098 - obj_pal gBattleAnimSpritePalette_099, 10099 - obj_pal gBattleAnimSpritePalette_100, 10100 - obj_pal gBattleAnimSpritePalette_101, 10101 - obj_pal gBattleAnimSpritePalette_101, 10102 - obj_pal gBattleAnimSpritePalette_103, 10103 - obj_pal gBattleAnimSpritePalette_104, 10104 - obj_pal gBattleAnimSpritePalette_105, 10105 - obj_pal gBattleAnimSpritePalette_105, 10106 - obj_pal gBattleAnimSpritePalette_107, 10107 - obj_pal gBattleAnimSpritePalette_107, 10108 - obj_pal gBattleAnimSpritePalette_109, 10109 - obj_pal gBattleAnimSpritePalette_109, 10110 - obj_pal gBattleAnimSpritePalette_111, 10111 - obj_pal gBattleAnimSpritePalette_112, 10112 - obj_pal gBattleAnimSpritePalette_113, 10113 - obj_pal gBattleAnimSpritePalette_114, 10114 - obj_pal gBattleAnimSpritePalette_115, 10115 - obj_pal gBattleAnimSpritePalette_116, 10116 - obj_pal gBattleAnimSpritePalette_117, 10117 - obj_pal gBattleAnimSpritePalette_118, 10118 - obj_pal gBattleAnimSpritePalette_119, 10119 - obj_pal gBattleAnimSpritePalette_120, 10120 - obj_pal gBattleAnimSpritePalette_121, 10121 - obj_pal gBattleAnimSpritePalette_122, 10122 - obj_pal gBattleAnimSpritePalette_122, 10123 - obj_pal gBattleAnimSpritePalette_124, 10124 - obj_pal gBattleAnimSpritePalette_125, 10125 - obj_pal gBattleAnimSpritePalette_126, 10126 - obj_pal gBattleAnimSpritePalette_127, 10127 - obj_pal gBattleAnimSpritePalette_128, 10128 - obj_pal gBattleAnimSpritePalette_128, 10129 - obj_pal gBattleAnimSpritePalette_130, 10130 - obj_pal gBattleAnimSpritePalette_130, 10131 - obj_pal gBattleAnimSpritePalette_132, 10132 - obj_pal gBattleAnimSpritePalette_133, 10133 - obj_pal gBattleAnimSpritePalette_133, 10134 - obj_pal gBattleAnimSpritePalette_135, 10135 - obj_pal gBattleAnimSpritePalette_136, 10136 - obj_pal gBattleAnimSpritePalette_135, 10137 - obj_pal gBattleAnimSpritePalette_135, 10138 - obj_pal gBattleAnimSpritePalette_139, 10139 - obj_pal gBattleAnimSpritePalette_140, 10140 - obj_pal gBattleAnimSpritePalette_141, 10141 - obj_pal gBattleAnimSpritePalette_141, 10142 - obj_pal gBattleAnimSpritePalette_143, 10143 - obj_pal gBattleAnimSpritePalette_144, 10144 - obj_pal gBattleAnimSpritePalette_139, 10145 - obj_pal gBattleAnimSpritePalette_115, 10146 - obj_pal gBattleAnimSpritePalette_147, 10147 - obj_pal gBattleAnimSpritePalette_148, 10148 - obj_pal gBattleAnimSpritePalette_148, 10149 - obj_pal gBattleAnimSpritePalette_150, 10150 - obj_pal gBattleAnimSpritePalette_150, 10151 - obj_pal gBattleAnimSpritePalette_152, 10152 - obj_pal gBattleAnimSpritePalette_153, 10153 - obj_pal gBattleAnimSpritePalette_154, 10154 - obj_pal gBattleAnimSpritePalette_155, 10155 - obj_pal gBattleAnimSpritePalette_156, 10156 - obj_pal gBattleAnimSpritePalette_157, 10157 - obj_pal gBattleAnimSpritePalette_158, 10158 - obj_pal gBattleAnimSpritePalette_159, 10159 - obj_pal gBattleAnimSpritePalette_160, 10160 - obj_pal gBattleAnimSpritePalette_161, 10161 - obj_pal gBattleAnimSpritePalette_162, 10162 - obj_pal gBattleAnimSpritePalette_163, 10163 - obj_pal gBattleAnimSpritePalette_164, 10164 - obj_pal gBattleAnimSpritePalette_165, 10165 - obj_pal gBattleAnimSpritePalette_166, 10166 - obj_pal gBattleAnimSpritePalette_167, 10167 - obj_pal gBattleAnimSpritePalette_168, 10168 - obj_pal gBattleAnimSpritePalette_169, 10169 - obj_pal gBattleAnimSpritePalette_170, 10170 - obj_pal gBattleAnimSpritePalette_171, 10171 - obj_pal gBattleAnimSpritePalette_172, 10172 - obj_pal gBattleAnimSpritePalette_001, 10173 - obj_pal gBattleAnimSpritePalette_174, 10174 - obj_pal gBattleAnimSpritePalette_175, 10175 - obj_pal gBattleAnimSpritePalette_176, 10176 - obj_pal gBattleAnimSpritePalette_177, 10177 - obj_pal gBattleAnimSpritePalette_178, 10178 - obj_pal gBattleAnimSpritePalette_179, 10179 - obj_pal gBattleAnimSpritePalette_179, 10180 - obj_pal gBattleAnimSpritePalette_179, 10181 - obj_pal gBattleAnimSpritePalette_182, 10182 - obj_pal gBattleAnimSpritePalette_183, 10183 - obj_pal gBattleAnimSpritePalette_184, 10184 - obj_pal gBattleAnimSpritePalette_185, 10185 - obj_pal gBattleAnimSpritePalette_186, 10186 - obj_pal gBattleAnimSpritePalette_187, 10187 - obj_pal gBattleAnimSpritePalette_188, 10188 - obj_pal gBattleAnimSpritePalette_189, 10189 - obj_pal gBattleAnimSpritePalette_190, 10190 - obj_pal gBattleAnimSpritePalette_191, 10191 - obj_pal gBattleAnimSpritePalette_192, 10192 - obj_pal gBattleAnimSpritePalette_193, 10193 - obj_pal gBattleAnimSpritePalette_194, 10194 - obj_pal gBattleAnimSpritePalette_195, 10195 - obj_pal gBattleAnimSpritePalette_196, 10196 - obj_pal gBattleAnimSpritePalette_197, 10197 - obj_pal gBattleAnimSpritePalette_198, 10198 - obj_pal gBattleAnimSpritePalette_199, 10199 - obj_pal gBattleAnimSpritePalette_200, 10200 - obj_pal gBattleAnimSpritePalette_201, 10201 - obj_pal gBattleAnimSpritePalette_202, 10202 - obj_pal gBattleAnimSpritePalette_203, 10203 - obj_pal gBattleAnimSpritePalette_204, 10204 - obj_pal gBattleAnimSpritePalette_205, 10205 - obj_pal gBattleAnimSpritePalette_206, 10206 - obj_pal gBattleAnimSpritePalette_207, 10207 - obj_pal gBattleAnimSpritePalette_167, 10208 - obj_pal gBattleAnimSpritePalette_209, 10209 - obj_pal gBattleAnimSpritePalette_210, 10210 - obj_pal gBattleAnimSpritePalette_211, 10211 - obj_pal gBattleAnimSpritePalette_211, 10212 - obj_pal gBattleAnimSpritePalette_211, 10213 - obj_pal gBattleAnimSpritePalette_064, 10214 - obj_pal gBattleAnimSpritePalette_215, 10215 - obj_pal gBattleAnimSpritePalette_216, 10216 - obj_pal gBattleAnimSpritePalette_217, 10217 - obj_pal gBattleAnimSpritePalette_218, 10218 - obj_pal gBattleAnimSpritePalette_219, 10219 - obj_pal gBattleAnimSpritePalette_220, 10220 - obj_pal gBattleAnimSpritePalette_221, 10221 - obj_pal gBattleAnimSpritePalette_222, 10222 - obj_pal gBattleAnimSpritePalette_223, 10223 - obj_pal gBattleAnimSpritePalette_224, 10224 - obj_pal gBattleAnimSpritePalette_225, 10225 - obj_pal gBattleAnimSpritePalette_226, 10226 - obj_pal gBattleAnimSpritePalette_226, 10227 - obj_pal gBattleAnimSpritePalette_228, 10228 - obj_pal gBattleAnimSpritePalette_229, 10229 - obj_pal gBattleAnimSpritePalette_230, 10230 - obj_pal gBattleAnimSpritePalette_231, 10231 - obj_pal gBattleAnimSpritePalette_231, 10232 - obj_pal gBattleAnimSpritePalette_233, 10233 - obj_pal gBattleAnimSpritePalette_234, 10234 - obj_pal gBattleAnimSpritePalette_235, 10235 - obj_pal gBattleAnimSpritePalette_236, 10236 - obj_pal gBattleAnimSpritePalette_237, 10237 - obj_pal gBattleAnimSpritePalette_238, 10238 - obj_pal gBattleAnimSpritePalette_239, 10239 - obj_pal gBattleAnimSpritePalette_240, 10240 - obj_pal gBattleAnimSpritePalette_241, 10241 - obj_pal gBattleAnimSpritePalette_242, 10242 - obj_pal gBattleAnimSpritePalette_243, 10243 - obj_pal gBattleAnimSpritePalette_244, 10244 - obj_pal gBattleAnimSpritePalette_245, 10245 - obj_pal gBattleAnimSpritePalette_245, 10246 - obj_pal gBattleAnimSpritePalette_064, 10247 - obj_pal gBattleAnimSpritePalette_248, 10248 - obj_pal gBattleAnimSpritePalette_249, 10249 - obj_pal gBattleAnimSpritePalette_249, 10250 - obj_pal gBattleAnimSpritePalette_251, 10251 - obj_pal gBattleAnimSpritePalette_252, 10252 - obj_pal gBattleAnimSpritePalette_253, 10253 - obj_pal gBattleAnimSpritePalette_254, 10254 - obj_pal gBattleAnimSpritePalette_255, 10255 - obj_pal gBattleAnimSpritePalette_256, 10256 - obj_pal gBattleAnimSpritePalette_257, 10257 - obj_pal gBattleAnimSpritePalette_258, 10258 - obj_pal gBattleAnimSpritePalette_259, 10259 - obj_pal gBattleAnimSpritePalette_260, 10260 - obj_pal gBattleAnimSpritePalette_261, 10261 - obj_pal gBattleAnimSpritePalette_262, 10262 - obj_pal gBattleAnimSpritePalette_263, 10263 - obj_pal gBattleAnimSpritePalette_264, 10264 - obj_pal gBattleAnimSpritePalette_265, 10265 - obj_pal gBattleAnimSpritePalette_266, 10266 - obj_pal gBattleAnimSpritePalette_267, 10267 - obj_pal gBattleAnimSpritePalette_268, 10268 - obj_pal gBattleAnimSpritePalette_269, 10269 - obj_pal gBattleAnimSpritePalette_270, 10270 - obj_pal gBattleAnimSpritePalette_271, 10271 - obj_pal gBattleAnimSpritePalette_272, 10272 - obj_pal gBattleAnimSpritePalette_272, 10273 - obj_pal gBattleAnimSpritePalette_274, 10274 - obj_pal gBattleAnimSpritePalette_274, 10275 - obj_pal gBattleAnimSpritePalette_274, 10276 - obj_pal gBattleAnimSpritePalette_277, 10277 - obj_pal gBattleAnimSpritePalette_278, 10278 - obj_pal gBattleAnimSpritePalette_279, 10279 - obj_pal gBattleAnimSpritePalette_280, 10280 - obj_pal gBattleAnimSpritePalette_281, 10281 - obj_pal gBattleAnimSpritePalette_282, 10282 - obj_pal gBattleAnimSpritePalette_283, 10283 - obj_pal gBattleAnimSpritePalette_284, 10284 - obj_pal gBattleAnimSpritePalette_285, 10285 - obj_pal gBattleAnimSpritePalette_286, 10286 - obj_pal gBattleAnimSpritePalette_287, 10287 - obj_pal gBattleAnimSpritePalette_288, 10288 - - .align 2 -gBattleAnimBackgroundTable:: @ 837F374 - .4byte gBattleAnimBackgroundImage_00, gBattleAnimBackgroundPalette_00, gBattleAnimBackgroundTilemap_00 - .4byte gBattleAnimBackgroundImage_00, gBattleAnimBackgroundPalette_00, gBattleAnimBackgroundTilemap_00 - .4byte gBattleAnimBackgroundImage_02, gBattleAnimBackgroundPalette_02, gBattleAnimBackgroundTilemap_02 - .4byte gBattleAnimBackgroundImage_03, gBattleAnimBackgroundPalette_03, gBattleAnimBackgroundTilemap_03 - .4byte gBattleAnimBackgroundImage_04, gBattleAnimBackgroundPalette_04, gBattleAnimBackgroundTilemap_04 - .4byte gBattleAnimBackgroundImage_04, gBattleAnimBackgroundPalette_04, gBattleAnimBackgroundTilemap_05 - .4byte gBattleAnimBackgroundImage_04, gBattleAnimBackgroundPalette_04, gBattleAnimBackgroundTilemap_06 - .4byte gBattleAnimBackgroundImage_07, gBattleAnimBackgroundPalette_07, gBattleAnimBackgroundTilemap_07 - .4byte gBattleAnimBackgroundImage_07, gBattleAnimBackgroundPalette_07, gBattleAnimBackgroundTilemap_08 - .4byte gBattleAnimBackgroundImage_09, gBattleAnimBackgroundPalette_09, gBattleAnimBackgroundTilemap_09 - .4byte gBattleAnimBackgroundImage_09, gBattleAnimBackgroundPalette_09, gBattleAnimBackgroundTilemap_10 - .4byte gBattleAnimBackgroundImage_11, gBattleAnimBackgroundPalette_11, gBattleAnimBackgroundTilemap_11 - .4byte gBattleAnimBackgroundImage_12, gBattleAnimBackgroundPalette_12, gBattleAnimBackgroundTilemap_12 - .4byte gBattleAnimBackgroundImage_12, gBattleAnimBackgroundPalette_12, gBattleAnimBackgroundTilemap_13 - .4byte gBattleAnimBackgroundImage_12, gBattleAnimBackgroundPalette_12, gBattleAnimBackgroundTilemap_14 - .4byte gBattleAnimBackgroundImage_15, gBattleAnimBackgroundPalette_15, gBattleAnimBackgroundTilemap_15 - .4byte gBattleAnimBackgroundImage_16, gBattleAnimBackgroundPalette_16, gBattleAnimBackgroundTilemap_16 - .4byte gBattleAnimBackgroundImage_17, gBattleAnimBackgroundPalette_17, gBattleAnimBackgroundTilemap_17 - .4byte gBattleAnimBackgroundImage_07, gBattleAnimBackgroundPalette_18, gBattleAnimBackgroundTilemap_07 - .4byte gBattleAnimBackgroundImage_07, gBattleAnimBackgroundPalette_18, gBattleAnimBackgroundTilemap_08 - .4byte gBattleAnimBackgroundImage_20, gBattleAnimBackgroundPalette_20, gBattleAnimBackgroundTilemap_20 - .4byte gBattleAnimBackgroundImage_21, gBattleAnimBackgroundPalette_21, gBattleAnimBackgroundTilemap_21 - .4byte gBattleAnimBackgroundImage_09, gBattleAnimBackgroundPalette_22, gBattleAnimBackgroundTilemap_09 - .4byte gBattleAnimBackgroundImage_09, gBattleAnimBackgroundPalette_22, gBattleAnimBackgroundTilemap_10 - .4byte gBattleAnimBackgroundImage_04, gBattleAnimBackgroundPalette_24, gBattleAnimBackgroundTilemap_04 - .4byte gBattleAnimBackgroundImage_04, gBattleAnimBackgroundPalette_24, gBattleAnimBackgroundTilemap_05 - .4byte gBattleAnimBackgroundImage_04, gBattleAnimBackgroundPalette_24, gBattleAnimBackgroundTilemap_06 - diff --git a/data/battle_anim_80A7E7C.s b/data/battle_anim_80A7E7C.s deleted file mode 100644 index 395b2e0ab..000000000 --- a/data/battle_anim_80A7E7C.s +++ /dev/null @@ -1,24 +0,0 @@ - .include "include/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gBattleAnimSpriteTemplate_83C1FB0:: @ 83C1FB0 - spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A8530 - - .align 2 -gBattleAnimSpriteTemplate_83C1FC8:: @ 83C1FC8 - spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A85C8 - - .align 2 -gBattleAnimSpriteTemplate_83C1FE0:: @ 83C1FE0 - spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A8638 - - .align 2 -gBattleAnimSpriteTemplate_83C1FF8:: @ 83C1FF8 - spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A8764 - - .align 2 -gBattleAnimSpriteTemplate_83C2010:: @ 83C2010 - spr_template 0, 0, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80A8818 diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index b04ebefe5..d309aea7e 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -2589,12 +2589,12 @@ BattleScript_EffectEndeavor: @ 81D8852 attackstring ppreduce setdamagetohealthdifference BattleScript_ButItFailed - copyword gHP_dealt, gBattleMoveDamage + copyword gHpDealt, gBattleMoveDamage accuracycheck BattleScript_MoveMissed, ACC_CURR_MOVE typecalc jumpifmovehadnoeffect BattleScript_HitFromAtkAnimation bicbyte gBattleMoveFlags, MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE - copyword gBattleMoveDamage, gHP_dealt + copyword gBattleMoveDamage, gHpDealt adjustsetdamage goto BattleScript_HitFromAtkAnimation @@ -3314,7 +3314,7 @@ BattleScript_LeechSeedTurnDrain:: @ 81D904B orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_x100000 healthbarupdate USER datahpupdate USER - copyword gBattleMoveDamage, gHP_dealt + copyword gBattleMoveDamage, gHpDealt jumpifability USER, ABILITY_LIQUID_OOZE, BattleScript_LeechSeedTurnPrintLiquidOoze manipulatedamage 0 setbyte cMULTISTRING_CHOOSER, 3 diff --git a/data/contest_ai.s b/data/contest_ai.s deleted file mode 100644 index af13f50f8..000000000 --- a/data/contest_ai.s +++ /dev/null @@ -1,143 +0,0 @@ - .include "include/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -sContestAICmdTable:: @ 8401E60 - .4byte ContestAICmd_unk_00 - .4byte ContestAICmd_get_turn - .4byte ContestAICmd_unk_02 - .4byte ContestAICmd_unk_03 - .4byte ContestAICmd_unk_04 - .4byte ContestAICmd_unk_05 - .4byte ContestAICmd_get_excitement - .4byte ContestAICmd_unk_07 - .4byte ContestAICmd_unk_08 - .4byte ContestAICmd_unk_09 - .4byte ContestAICmd_unk_0A - .4byte ContestAICmd_get_user_order - .4byte ContestAICmd_unk_0C - .4byte ContestAICmd_unk_0D - .4byte ContestAICmd_unk_0E - .4byte ContestAICmd_unk_0F - .4byte ContestAICmd_get_user_condition_maybe - .4byte ContestAICmd_unk_11 - .4byte ContestAICmd_unk_12 - .4byte ContestAICmd_unk_13 - .4byte ContestAICmd_unk_14 - .4byte ContestAICmd_unk_15 - .4byte ContestAICmd_unk_16 - .4byte ContestAICmd_unk_17 - .4byte ContestAICmd_unk_18 - .4byte ContestAICmd_unk_19 - .4byte ContestAICmd_unk_1A - .4byte ContestAICmd_unk_1B - .4byte ContestAICmd_unk_1C - .4byte ContestAICmd_unk_1D - .4byte ContestAICmd_unk_1E - .4byte ContestAICmd_get_contest_type - .4byte ContestAICmd_unk_20 - .4byte ContestAICmd_unk_21 - .4byte ContestAICmd_get_move_excitement - .4byte ContestAICmd_unk_23 - .4byte ContestAICmd_unk_24 - .4byte ContestAICmd_unk_25 - .4byte ContestAICmd_unk_26 - .4byte ContestAICmd_get_move_effect - .4byte ContestAICmd_unk_28 - .4byte ContestAICmd_unk_29 - .4byte ContestAICmd_get_move_effect_type - .4byte ContestAICmd_unk_2B - .4byte ContestAICmd_unk_2C - .4byte ContestAICmd_check_move_has_highest_appeal - .4byte ContestAICmd_unk_2E - .4byte ContestAICmd_unk_2F - .4byte ContestAICmd_unk_30 - .4byte ContestAICmd_unk_31 - .4byte ContestAICmd_unk_32 - .4byte ContestAICmd_unk_33 - .4byte ContestAICmd_unk_34 - .4byte ContestAICmd_unk_35 - .4byte ContestAICmd_unk_36 - .4byte ContestAICmd_unk_37 - .4byte ContestAICmd_unk_38 - .4byte ContestAICmd_unk_39 - .4byte ContestAICmd_unk_3A - .4byte ContestAICmd_get_move_used_count - .4byte ContestAICmd_unk_3C - .4byte ContestAICmd_unk_3D - .4byte ContestAICmd_unk_3E - .4byte ContestAICmd_unk_3F - .4byte ContestAICmd_check_combo_starter - .4byte ContestAICmd_unk_41 - .4byte ContestAICmd_unk_42 - .4byte ContestAICmd_check_combo_finisher - .4byte ContestAICmd_unk_44 - .4byte ContestAICmd_unk_45 - .4byte ContestAICmd_check_would_finish_combo - .4byte ContestAICmd_unk_47 - .4byte ContestAICmd_unk_48 - .4byte ContestAICmd_get_condition - .4byte ContestAICmd_unk_4A - .4byte ContestAICmd_unk_4B - .4byte ContestAICmd_unk_4C - .4byte ContestAICmd_unk_4D - .4byte ContestAICmd_get_used_combo_starter - .4byte ContestAICmd_unk_4F - .4byte ContestAICmd_unk_50 - .4byte ContestAICmd_unk_51 - .4byte ContestAICmd_unk_52 - .4byte ContestAICmd_check_can_participate - .4byte ContestAICmd_unk_54 - .4byte ContestAICmd_unk_55 - .4byte ContestAICmd_get_val_812A188 - .4byte ContestAICmd_unk_57 - .4byte ContestAICmd_unk_58 - .4byte ContestAICmd_unk_59 - .4byte ContestAICmd_unk_5A - .4byte ContestAICmd_unk_5B - .4byte ContestAICmd_unk_5C - .4byte ContestAICmd_unk_5D - .4byte ContestAICmd_unk_5E - .4byte ContestAICmd_unk_5F - .4byte ContestAICmd_unk_60 - .4byte ContestAICmd_unk_61 - .4byte ContestAICmd_unk_62 - .4byte ContestAICmd_unk_63 - .4byte ContestAICmd_unk_64 - .4byte ContestAICmd_unk_65 - .4byte ContestAICmd_unk_66 - .4byte ContestAICmd_unk_67 - .4byte ContestAICmd_unk_68 - .4byte ContestAICmd_unk_69 - .4byte ContestAICmd_unk_6A - .4byte ContestAICmd_unk_6B - .4byte ContestAICmd_unk_6C - .4byte ContestAICmd_unk_6D - .4byte ContestAICmd_unk_6E - .4byte ContestAICmd_unk_6F - .4byte ContestAICmd_unk_70 - .4byte ContestAICmd_unk_71 - .4byte ContestAICmd_unk_72 - .4byte ContestAICmd_unk_73 - .4byte ContestAICmd_unk_74 - .4byte ContestAICmd_unk_75 - .4byte ContestAICmd_unk_76 - .4byte ContestAICmd_unk_77 - .4byte ContestAICmd_unk_78 - .4byte ContestAICmd_unk_79 - .4byte ContestAICmd_unk_7A - .4byte ContestAICmd_unk_7B - .4byte ContestAICmd_unk_7C - .4byte ContestAICmd_unk_7D - .4byte ContestAICmd_unk_7E - .4byte ContestAICmd_unk_7F - .4byte ContestAICmd_unk_80 - .4byte ContestAICmd_unk_81 - .4byte ContestAICmd_check_for_exciting_move - .4byte ContestAICmd_unk_83 - .4byte ContestAICmd_unk_84 - .4byte ContestAICmd_unk_85 - .4byte ContestAICmd_unk_86 - .4byte ContestAICmd_unk_87 diff --git a/data/item_ball_scripts.inc b/data/item_ball_scripts.inc index aae704ab2..02acdeca4 100644 --- a/data/item_ball_scripts.inc +++ b/data/item_ball_scripts.inc @@ -43,7 +43,7 @@ Route110_EventScript_1B14BB:: @ 81B14BB end Route111_EventScript_1B14C8:: @ 81B14C8 - giveitem_std ITEM_TM37, 1, 1 + giveitem_std ITEM_TM37_SANDSTORM, 1, 1 end Route111_EventScript_1B14D5:: @ 81B14D5 @@ -79,7 +79,7 @@ Route115_EventScript_1B1530:: @ 81B1530 end Route115_EventScript_1B153D:: @ 81B153D - giveitem_std ITEM_TM01, 1, 1 + giveitem_std ITEM_TM01_FOCUS_PUNCH, 1, 1 end Route115_EventScript_1B154A:: @ 81B154A @@ -291,11 +291,11 @@ FieryPath_EventScript_1B17E1:: @ 81B17E1 end FieryPath_EventScript_1B17EE:: @ 81B17EE - giveitem_std ITEM_TM06, 1, 1 + giveitem_std ITEM_TM06_TOXIC, 1, 1 end MeteorFalls_1F_1R_EventScript_1B17FB:: @ 81B17FB - giveitem_std ITEM_TM23, 1, 1 + giveitem_std ITEM_TM23_IRON_TAIL, 1, 1 end MeteorFalls_1F_1R_EventScript_1B1808:: @ 81B1808 @@ -311,7 +311,7 @@ MeteorFalls_1F_1R_EventScript_1B1822:: @ 81B1822 end MeteorFalls_B1F_2R_EventScript_1B182F:: @ 81B182F - giveitem_std ITEM_TM02, 1, 1 + giveitem_std ITEM_TM02_DRAGON_CLAW, 1, 1 end NewMauville_Inside_EventScript_1B183C:: @ 81B183C @@ -347,7 +347,7 @@ AbandonedShip_Rooms2_B1F_EventScript_1B1897:: @ 81B1897 end AbandonedShip_Room_B1F_EventScript_1B18A4:: @ 81B18A4 - giveitem_std ITEM_TM13, 1, 1 + giveitem_std ITEM_TM13_ICE_BEAM, 1, 1 end AbandonedShip_Rooms2_1F_EventScript_1B18B1:: @ 81B18B1 @@ -371,15 +371,15 @@ AbandonedShip_HiddenFloorRooms_EventScript_1B18E5:: @ 81B18E5 end AbandonedShip_HiddenFloorRooms_EventScript_1B18F2:: @ 81B18F2 - giveitem_std ITEM_TM18, 1, 1 + giveitem_std ITEM_TM18_RAIN_DANCE, 1, 1 end ScorchedSlab_EventScript_1B18FF:: @ 81B18FF - giveitem_std ITEM_TM11, 1, 1 + giveitem_std ITEM_TM11_SUNNY_DAY, 1, 1 end SafariZone_Northwest_EventScript_1B190C:: @ 81B190C - giveitem_std ITEM_TM22, 1, 1 + giveitem_std ITEM_TM22_SOLARBEAM, 1, 1 end SafariZone_Northeast_EventScript_1B1919:: @ 81B1919 @@ -407,7 +407,7 @@ MtPyre_5F_EventScript_1B195A:: @ 81B195A end MtPyre_6F_EventScript_1B1967:: @ 81B1967 - giveitem_std ITEM_TM30, 1, 1 + giveitem_std ITEM_TM30_SHADOW_BALL, 1, 1 end MtPyre_Exterior_EventScript_1B1974:: @ 81B1974 @@ -415,7 +415,7 @@ MtPyre_Exterior_EventScript_1B1974:: @ 81B1974 end MtPyre_Exterior_EventScript_1B1981:: @ 81B1981 - giveitem_std ITEM_TM48, 1, 1 + giveitem_std ITEM_TM48_SKILL_SWAP, 1, 1 end AquaHideout_B1F_EventScript_1B198E:: @ 81B198E @@ -463,7 +463,7 @@ ShoalCave_LowTideStairsRoom_EventScript_1B1A10:: @ 81B1A10 end ShoalCave_LowTideIceRoom_EventScript_1B1A1D:: @ 81B1A1D - giveitem_std ITEM_TM07, 1, 1 + giveitem_std ITEM_TM07_HAIL, 1, 1 end ShoalCave_LowTideIceRoom_EventScript_1B1A2A:: @ 81B1A2A @@ -471,11 +471,11 @@ ShoalCave_LowTideIceRoom_EventScript_1B1A2A:: @ 81B1A2A end SeafloorCavern_Room9_EventScript_1B1A37:: @ 81B1A37 - giveitem_std ITEM_TM26, 1, 1 + giveitem_std ITEM_TM26_EARTHQUAKE, 1, 1 end CaveOfOrigin_B3F_EventScript_1B1A44:: @ 81B1A44 - giveitem_std ITEM_HM07, 1, 1 + giveitem_std ITEM_HM07_WATERFALL, 1, 1 end Route110_TrickHousePuzzle1_EventScript_1B1A51:: @ 81B1A51 @@ -523,7 +523,7 @@ VictoryRoad_1F_EventScript_1B1AD3:: @ 81B1AD3 end VictoryRoad_B1F_EventScript_1B1AE0:: @ 81B1AE0 - giveitem_std ITEM_TM29, 1, 1 + giveitem_std ITEM_TM29_PSYCHIC, 1, 1 end VictoryRoad_B1F_EventScript_1B1AED:: @ 81B1AED @@ -535,5 +535,5 @@ VictoryRoad_B2F_EventScript_1B1AFA:: @ 81B1AFA end @ 81B1B07 - giveitem_std ITEM_HM08, 1, 1 + giveitem_std ITEM_HM08_DIVE, 1, 1 end diff --git a/data/maps/events/Route113.inc b/data/maps/events/Route113.inc index dccaf6e82..1b895d571 100644 --- a/data/maps/events/Route113.inc +++ b/data/maps/events/Route113.inc @@ -42,7 +42,7 @@ Route113_MapBGEvents:: @ 8382BE0 bg_event 31, 5, 0, 0, 0, Route113_EventScript_150629 bg_secret_base_event 49, 8, 0, SECRET_BASE_RED_CAVE1_3 bg_hidden_item_event 72, 4, 3, ITEM_ETHER, FLAG_HIDDEN_ITEM_3 - bg_hidden_item_event 22, 5, 3, ITEM_TM32, FLAG_HIDDEN_ITEM_1E + bg_hidden_item_event 22, 5, 3, ITEM_TM32_DOUBLE_TEAM, FLAG_HIDDEN_ITEM_1E Route113_MapEvents:: @ 8382C34 map_events Route113_MapObjects, Route113_MapWarps, Route113_MapCoordEvents, Route113_MapBGEvents diff --git a/data/maps/events/Route124_DivingTreasureHuntersHouse.inc b/data/maps/events/Route124_DivingTreasureHuntersHouse.inc index 17ec713de..17ec713de 100755..100644 --- a/data/maps/events/Route124_DivingTreasureHuntersHouse.inc +++ b/data/maps/events/Route124_DivingTreasureHuntersHouse.inc diff --git a/data/pc_screen_effect.s b/data/pc_screen_effect.s index 1d6571149..1d6571149 100755..100644 --- a/data/pc_screen_effect.s +++ b/data/pc_screen_effect.s diff --git a/data/scripts/maps/DewfordTown_Gym.inc b/data/scripts/maps/DewfordTown_Gym.inc index 7cdf3dd6a..596f2c77f 100644 --- a/data/scripts/maps/DewfordTown_Gym.inc +++ b/data/scripts/maps/DewfordTown_Gym.inc @@ -118,7 +118,7 @@ DewfordTown_Gym_EventScript_153177:: @ 8153177 end DewfordTown_Gym_EventScript_1531B5:: @ 81531B5 - giveitem_std ITEM_TM08 + giveitem_std ITEM_TM08_BULK_UP compare RESULT, 0 goto_if_eq DewfordTown_Gym_EventScript_1A029B msgbox DewfordTown_Gym_Text_1753BF, 4 diff --git a/data/scripts/maps/DewfordTown_Hall.inc b/data/scripts/maps/DewfordTown_Hall.inc index 84334068e..45d389b28 100644 --- a/data/scripts/maps/DewfordTown_Hall.inc +++ b/data/scripts/maps/DewfordTown_Hall.inc @@ -254,7 +254,7 @@ DewfordTown_Hall_EventScript_15359D:: @ 815359D call DewfordTown_Hall_EventScript_1A0102 goto_if_set FLAG_RECEIVED_TM36, DewfordTown_Hall_EventScript_1535D1 msgbox DewfordTown_Hall_Text_175E13, 4 - giveitem_std ITEM_TM36 + giveitem_std ITEM_TM36_SLUDGE_BOMB compare RESULT, 0 goto_if_eq DewfordTown_Hall_EventScript_1A029B setflag FLAG_RECEIVED_TM36 diff --git a/data/scripts/maps/FallarborTown_House1.inc b/data/scripts/maps/FallarborTown_House1.inc index f62a2da37..f16b6e828 100644 --- a/data/scripts/maps/FallarborTown_House1.inc +++ b/data/scripts/maps/FallarborTown_House1.inc @@ -22,7 +22,7 @@ FallarborTown_House1_EventScript_153BDA:: @ 8153BDA compare RESULT, NO goto_if_eq FallarborTown_House1_EventScript_153C47 msgbox FallarborTown_House1_Text_1778C4, 4 - giveitem_std ITEM_TM27 + giveitem_std ITEM_TM27_RETURN compare RESULT, 0 goto_if_eq FallarborTown_House1_EventScript_1A029B setvar VAR_SPECIAL_4, 280 diff --git a/data/scripts/maps/FortreeCity_Gym.inc b/data/scripts/maps/FortreeCity_Gym.inc index 94df378f8..c0de6bfee 100644 --- a/data/scripts/maps/FortreeCity_Gym.inc +++ b/data/scripts/maps/FortreeCity_Gym.inc @@ -35,7 +35,7 @@ FortreeCity_Gym_EventScript_157F15:: @ 8157F15 end FortreeCity_Gym_EventScript_157F3E:: @ 8157F3E - giveitem_std ITEM_TM40 + giveitem_std ITEM_TM40_AERIAL_ACE compare RESULT, 0 goto_if_eq FortreeCity_Gym_EventScript_1A029B msgbox FortreeCity_Gym_Text_185F4A, 4 diff --git a/data/scripts/maps/FortreeCity_House2.inc b/data/scripts/maps/FortreeCity_House2.inc index 107c3708c..365646d81 100644 --- a/data/scripts/maps/FortreeCity_House2.inc +++ b/data/scripts/maps/FortreeCity_House2.inc @@ -19,7 +19,7 @@ FortreeCity_House2_EventScript_1580B4:: @ 81580B4 switch RESULT case 0, FortreeCity_House2_EventScript_158161 msgbox FortreeCity_House2_Text_1864C6, 4 - giveitem_std ITEM_TM10 + giveitem_std ITEM_TM10_HIDDEN_POWER compare RESULT, 0 goto_if_eq FortreeCity_House2_EventScript_1A029B setflag FLAG_RECEIVED_TM10 diff --git a/data/scripts/maps/GraniteCave_1F.inc b/data/scripts/maps/GraniteCave_1F.inc index 7419b5866..b9d89f93c 100644 --- a/data/scripts/maps/GraniteCave_1F.inc +++ b/data/scripts/maps/GraniteCave_1F.inc @@ -6,7 +6,7 @@ GraniteCave_1F_EventScript_15CBA7:: @ 815CBA7 faceplayer goto_if_set FLAG_RECEIVED_HM05, GraniteCave_1F_EventScript_15CBD3 msgbox GraniteCave_1F_Text_194917, 4 - giveitem_std ITEM_HM05 + giveitem_std ITEM_HM05_FLASH setflag FLAG_RECEIVED_HM05 msgbox GraniteCave_1F_Text_194A3E, 4 release diff --git a/data/scripts/maps/GraniteCave_StevensRoom.inc b/data/scripts/maps/GraniteCave_StevensRoom.inc index 9c69e649e..d33813680 100644 --- a/data/scripts/maps/GraniteCave_StevensRoom.inc +++ b/data/scripts/maps/GraniteCave_StevensRoom.inc @@ -9,7 +9,7 @@ GraniteCave_StevensRoom_EventScript_15CBFA:: @ 815CBFA call GraniteCave_StevensRoom_EventScript_1A067F setflag FLAG_DELIVERED_STEVEN_LETTER msgbox GraniteCave_StevensRoom_Text_194BDD, 4 - giveitem_std ITEM_TM47 + giveitem_std ITEM_TM47_STEEL_WING compare RESULT, 0 call_if_eq GraniteCave_StevensRoom_EventScript_15CC83 msgbox GraniteCave_StevensRoom_Text_194C8D, 4 diff --git a/data/scripts/maps/LavaridgeTown_Gym_1F.inc b/data/scripts/maps/LavaridgeTown_Gym_1F.inc index c0604400e..27655127a 100644 --- a/data/scripts/maps/LavaridgeTown_Gym_1F.inc +++ b/data/scripts/maps/LavaridgeTown_Gym_1F.inc @@ -83,7 +83,7 @@ LavaridgeTown_Gym_1F_EventScript_153766:: @ 8153766 end LavaridgeTown_Gym_1F_EventScript_1537A7:: @ 81537A7 - giveitem_std ITEM_TM50 + giveitem_std ITEM_TM50_OVERHEAT compare RESULT, 0 goto_if_eq LavaridgeTown_Gym_1F_EventScript_1A029B msgbox LavaridgeTown_Gym_1F_Text_176B8F, 4 diff --git a/data/scripts/maps/LilycoveCity_DepartmentStore_4F.inc b/data/scripts/maps/LilycoveCity_DepartmentStore_4F.inc index d922d9181..907b79847 100644 --- a/data/scripts/maps/LilycoveCity_DepartmentStore_4F.inc +++ b/data/scripts/maps/LilycoveCity_DepartmentStore_4F.inc @@ -25,10 +25,10 @@ LilycoveCity_DepartmentStore_4F_EventScript_15A019:: @ 815A019 .align 2 LilycoveCity_DepartmentStore_4F_Items1:: @ 815A030 - .2byte ITEM_TM38 - .2byte ITEM_TM25 - .2byte ITEM_TM14 - .2byte ITEM_TM15 + .2byte ITEM_TM38_FIRE_BLAST + .2byte ITEM_TM25_THUNDER + .2byte ITEM_TM14_BLIZZARD + .2byte ITEM_TM15_HYPER_BEAM .2byte ITEM_NONE release end @@ -45,10 +45,10 @@ LilycoveCity_DepartmentStore_4F_EventScript_15A03C:: @ 815A03C .align 2 LilycoveCity_DepartmentStore_4F_Items2:: @ 815A054 - .2byte ITEM_TM17 - .2byte ITEM_TM20 - .2byte ITEM_TM33 - .2byte ITEM_TM16 + .2byte ITEM_TM17_PROTECT + .2byte ITEM_TM20_SAFEGUARD + .2byte ITEM_TM33_REFLECT + .2byte ITEM_TM16_LIGHT_SCREEN .2byte ITEM_NONE release end diff --git a/data/scripts/maps/LilycoveCity_House2.inc b/data/scripts/maps/LilycoveCity_House2.inc index 0572c23cc..797c8f203 100644 --- a/data/scripts/maps/LilycoveCity_House2.inc +++ b/data/scripts/maps/LilycoveCity_House2.inc @@ -6,7 +6,7 @@ LilycoveCity_House2_EventScript_159BA3:: @ 8159BA3 faceplayer goto_if_set FLAG_RECEIVED_TM44, LilycoveCity_House2_EventScript_159BDA msgbox LilycoveCity_House2_Text_18B83C, 4 - giveitem_std ITEM_TM44 + giveitem_std ITEM_TM44_REST compare RESULT, 0 goto_if_eq LilycoveCity_House2_EventScript_1A029B setflag FLAG_RECEIVED_TM44 diff --git a/data/scripts/maps/MauvilleCity.inc b/data/scripts/maps/MauvilleCity.inc index 03974ddae..852f24f2a 100644 --- a/data/scripts/maps/MauvilleCity.inc +++ b/data/scripts/maps/MauvilleCity.inc @@ -298,7 +298,7 @@ MauvilleCity_EventScript_14C332:: @ 814C332 MauvilleCity_EventScript_14C33C:: @ 814C33C msgbox MauvilleCity_Text_1663EB, 4 - giveitem_std ITEM_TM24 + giveitem_std ITEM_TM24_THUNDERBOLT compare RESULT, 0 goto_if_eq MauvilleCity_EventScript_1A029B setflag FLAG_RECEIVED_TM24 diff --git a/data/scripts/maps/MauvilleCity_GameCorner.inc b/data/scripts/maps/MauvilleCity_GameCorner.inc index 2b784aeb9..b9f8e5ad1 100644 --- a/data/scripts/maps/MauvilleCity_GameCorner.inc +++ b/data/scripts/maps/MauvilleCity_GameCorner.inc @@ -252,27 +252,27 @@ MauvilleCity_GameCorner_EventScript_156D54:: @ 8156D54 MauvilleCity_GameCorner_EventScript_156DA6:: @ 8156DA6 setvar VAR_TEMP_1, 1 - bufferitemname 0, ITEM_TM32 + bufferitemname 0, ITEM_TM32_DOUBLE_TEAM goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DB4:: @ 8156DB4 setvar VAR_TEMP_1, 2 - bufferitemname 0, ITEM_TM29 + bufferitemname 0, ITEM_TM29_PSYCHIC goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DC2:: @ 8156DC2 setvar VAR_TEMP_1, 3 - bufferitemname 0, ITEM_TM35 + bufferitemname 0, ITEM_TM35_FLAMETHROWER goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DD0:: @ 8156DD0 setvar VAR_TEMP_1, 4 - bufferitemname 0, ITEM_TM24 + bufferitemname 0, ITEM_TM24_THUNDERBOLT goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DDE:: @ 8156DDE setvar VAR_TEMP_1, 5 - bufferitemname 0, ITEM_TM13 + bufferitemname 0, ITEM_TM13_ICE_BEAM goto MauvilleCity_GameCorner_EventScript_156DEC MauvilleCity_GameCorner_EventScript_156DEC:: @ 8156DEC @@ -291,11 +291,11 @@ MauvilleCity_GameCorner_EventScript_156E3C:: @ 8156E3C checkcoins VAR_TEMP_2 compare VAR_TEMP_2, 1500 goto_if_lt MauvilleCity_GameCorner_EventScript_156F5E - checkitemspace ITEM_TM32, 1 + checkitemspace ITEM_TM32_DOUBLE_TEAM, 1 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C takecoins 1500 - giveitem ITEM_TM32, 1 + giveitem ITEM_TM32_DOUBLE_TEAM, 1 updatecoinsbox 0, 0 playse SE_REGI msgbox MauvilleCity_GameCorner_Text_181F08, 4 @@ -306,11 +306,11 @@ MauvilleCity_GameCorner_EventScript_156E76:: @ 8156E76 checkcoins VAR_TEMP_2 compare VAR_TEMP_2, 3500 goto_if_lt MauvilleCity_GameCorner_EventScript_156F5E - checkitemspace ITEM_TM29, 1 + checkitemspace ITEM_TM29_PSYCHIC, 1 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C takecoins 3500 - giveitem ITEM_TM29, 1 + giveitem ITEM_TM29_PSYCHIC, 1 updatecoinsbox 0, 0 playse SE_REGI msgbox MauvilleCity_GameCorner_Text_181F08, 4 @@ -321,11 +321,11 @@ MauvilleCity_GameCorner_EventScript_156EB0:: @ 8156EB0 checkcoins VAR_TEMP_2 compare VAR_TEMP_2, 4000 goto_if_lt MauvilleCity_GameCorner_EventScript_156F5E - checkitemspace ITEM_TM35, 1 + checkitemspace ITEM_TM35_FLAMETHROWER, 1 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C takecoins 4000 - giveitem ITEM_TM35, 1 + giveitem ITEM_TM35_FLAMETHROWER, 1 updatecoinsbox 0, 0 playse SE_REGI msgbox MauvilleCity_GameCorner_Text_181F08, 4 @@ -336,11 +336,11 @@ MauvilleCity_GameCorner_EventScript_156EEA:: @ 8156EEA checkcoins VAR_TEMP_2 compare VAR_TEMP_2, 4000 goto_if_lt MauvilleCity_GameCorner_EventScript_156F5E - checkitemspace ITEM_TM24, 1 + checkitemspace ITEM_TM24_THUNDERBOLT, 1 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C takecoins 4000 - giveitem ITEM_TM24, 1 + giveitem ITEM_TM24_THUNDERBOLT, 1 updatecoinsbox 0, 0 playse SE_REGI msgbox MauvilleCity_GameCorner_Text_181F08, 4 @@ -351,11 +351,11 @@ MauvilleCity_GameCorner_EventScript_156F24:: @ 8156F24 checkcoins VAR_TEMP_2 compare VAR_TEMP_2, 4000 goto_if_lt MauvilleCity_GameCorner_EventScript_156F5E - checkitemspace ITEM_TM13, 1 + checkitemspace ITEM_TM13_ICE_BEAM, 1 compare RESULT, 0 goto_if_eq MauvilleCity_GameCorner_EventScript_156F6C takecoins 4000 - giveitem ITEM_TM13, 1 + giveitem ITEM_TM13_ICE_BEAM, 1 updatecoinsbox 0, 0 playse SE_REGI msgbox MauvilleCity_GameCorner_Text_181F08, 4 diff --git a/data/scripts/maps/MauvilleCity_Gym.inc b/data/scripts/maps/MauvilleCity_Gym.inc index 1dc7fc0c7..d9b8aced7 100644 --- a/data/scripts/maps/MauvilleCity_Gym.inc +++ b/data/scripts/maps/MauvilleCity_Gym.inc @@ -93,7 +93,7 @@ MauvilleCity_Gym_EventScript_1565DB:: @ 81565DB end MauvilleCity_Gym_EventScript_15661D:: @ 815661D - giveitem_std ITEM_TM34 + giveitem_std ITEM_TM34_SHOCK_WAVE compare RESULT, 0 goto_if_eq MauvilleCity_Gym_EventScript_1A029B msgbox MauvilleCity_Gym_Text_180E76, 4 diff --git a/data/scripts/maps/MauvilleCity_House1.inc b/data/scripts/maps/MauvilleCity_House1.inc index eb21a49e9..4caaef545 100644 --- a/data/scripts/maps/MauvilleCity_House1.inc +++ b/data/scripts/maps/MauvilleCity_House1.inc @@ -6,7 +6,7 @@ MauvilleCity_House1_EventScript_1569FD:: @ 81569FD faceplayer goto_if_set FLAG_RECEIVED_HM06, MauvilleCity_House1_EventScript_156A29 msgbox MauvilleCity_House1_Text_181B1A, 4 - giveitem_std ITEM_HM06 + giveitem_std ITEM_HM06_ROCK_SMASH setflag FLAG_RECEIVED_HM06 msgbox MauvilleCity_House1_Text_181B64, 4 release diff --git a/data/scripts/maps/MossdeepCity_Gym.inc b/data/scripts/maps/MossdeepCity_Gym.inc index 341962431..0ae02fba4 100644 --- a/data/scripts/maps/MossdeepCity_Gym.inc +++ b/data/scripts/maps/MossdeepCity_Gym.inc @@ -67,7 +67,7 @@ MossdeepCity_Gym_EventScript_15A594:: @ 815A594 end MossdeepCity_Gym_EventScript_15A5C6:: @ 815A5C6 - giveitem_std ITEM_TM04 + giveitem_std ITEM_TM04_CALM_MIND compare RESULT, 0 goto_if_eq MossdeepCity_Gym_EventScript_1A029B msgbox MossdeepCity_Gym_Text_18D1CF, 4 diff --git a/data/scripts/maps/MossdeepCity_StevensHouse.inc b/data/scripts/maps/MossdeepCity_StevensHouse.inc index d9ad70f70..0f1aace1d 100644 --- a/data/scripts/maps/MossdeepCity_StevensHouse.inc +++ b/data/scripts/maps/MossdeepCity_StevensHouse.inc @@ -38,7 +38,7 @@ MossdeepCity_StevensHouse_EventScript_15AA0B:: @ 815AA0B applymovement 1, MossdeepCity_StevensHouse_Movement_15AA6E waitmovement 0 msgbox MossdeepCity_StevensHouse_Text_18DA77, 4 - giveitem_std ITEM_HM08 + giveitem_std ITEM_HM08_DIVE setflag FLAG_RECEIVED_HM08 setflag FLAG_OMIT_DIVE_FROM_STEVEN_LETTER msgbox MossdeepCity_StevensHouse_Text_18DB22, 4 @@ -123,6 +123,6 @@ MossdeepCity_StevensHouse_EventScript_15AB16:: @ 815AB16 end MossdeepCity_StevensHouse_EventScript_15AB20:: @ 815AB20 - giveitem_std ITEM_HM08, 1, 1 + giveitem_std ITEM_HM08_DIVE, 1, 1 setflag FLAG_RECEIVED_HM08 end diff --git a/data/scripts/maps/PacifidlogTown_House2.inc b/data/scripts/maps/PacifidlogTown_House2.inc index 8ad949bf2..110bdcbe6 100644 --- a/data/scripts/maps/PacifidlogTown_House2.inc +++ b/data/scripts/maps/PacifidlogTown_House2.inc @@ -41,7 +41,7 @@ PacifidlogTown_House2_EventScript_1541E8:: @ 81541E8 PacifidlogTown_House2_EventScript_1541EC:: @ 81541EC msgbox PacifidlogTown_House2_Text_179169, 4 - giveitem_std ITEM_TM27 + giveitem_std ITEM_TM27_RETURN compare RESULT, 0 goto_if_eq PacifidlogTown_House2_EventScript_1A029B setflag FLAG_RECEIVED_FANCLUB_TM_THIS_WEEK @@ -57,7 +57,7 @@ PacifidlogTown_House2_EventScript_15421B:: @ 815421B PacifidlogTown_House2_EventScript_154225:: @ 8154225 msgbox PacifidlogTown_House2_Text_17922D, 4 - giveitem_std ITEM_TM21 + giveitem_std ITEM_TM21_FRUSTRATION compare RESULT, 0 goto_if_eq PacifidlogTown_House2_EventScript_1A029B setflag FLAG_RECEIVED_FANCLUB_TM_THIS_WEEK diff --git a/data/scripts/maps/PetalburgCity_Gym.inc b/data/scripts/maps/PetalburgCity_Gym.inc index 1199b3571..1dc1a77ec 100644 --- a/data/scripts/maps/PetalburgCity_Gym.inc +++ b/data/scripts/maps/PetalburgCity_Gym.inc @@ -402,7 +402,7 @@ PetalburgCity_Gym_EventScript_1549D6:: @ 81549D6 end PetalburgCity_Gym_EventScript_154A2C:: @ 8154A2C - giveitem_std ITEM_TM42 + giveitem_std ITEM_TM42_FACADE compare RESULT, 0 goto_if_eq PetalburgCity_Gym_EventScript_1A029B setflag FLAG_RECEIVED_TM42 diff --git a/data/scripts/maps/PetalburgCity_WallysHouse.inc b/data/scripts/maps/PetalburgCity_WallysHouse.inc index d642d70ed..1a1605817 100644 --- a/data/scripts/maps/PetalburgCity_WallysHouse.inc +++ b/data/scripts/maps/PetalburgCity_WallysHouse.inc @@ -20,7 +20,7 @@ PetalburgCity_WallysHouse_EventScript_1543F7:: @ 81543F7 PetalburgCity_WallysHouse_EventScript_154406:: @ 8154406 msgbox PetalburgCity_WallysHouse_Text_179996, 4 - giveitem_std ITEM_HM03 + giveitem_std ITEM_HM03_SURF setflag FLAG_RECEIVED_HM03 msgbox PetalburgCity_WallysHouse_Text_179B14, 4 release diff --git a/data/scripts/maps/Route104.inc b/data/scripts/maps/Route104.inc index a3824efcf..2d44d4dfd 100644 --- a/data/scripts/maps/Route104.inc +++ b/data/scripts/maps/Route104.inc @@ -102,7 +102,7 @@ Route104_EventScript_14EF93:: @ 814EF93 faceplayer goto_if_set FLAG_RECEIVED_TM09, Route104_EventScript_14EFC2 msgbox Route104_Text_16DC5F, 4 - giveitem_std ITEM_TM09 + giveitem_std ITEM_TM09_BULLET_SEED compare RESULT, 0 goto_if_eq Route104_EventScript_1A029B setflag FLAG_RECEIVED_TM09 diff --git a/data/scripts/maps/Route110_TrickHouseEnd.inc b/data/scripts/maps/Route110_TrickHouseEnd.inc index 020c61258..2c2215a42 100644 --- a/data/scripts/maps/Route110_TrickHouseEnd.inc +++ b/data/scripts/maps/Route110_TrickHouseEnd.inc @@ -112,7 +112,7 @@ Route110_TrickHouseEnd_EventScript_161AFB:: @ 8161AFB msgbox Route110_TrickHouseEnd_Text_19C491, 4 msgbox Route110_TrickHouseEnd_Text_19C90B, 4 setvar VAR_TRICK_HOUSE_PRIZE_PICKUP, 0 - giveitem_std ITEM_TM12 + giveitem_std ITEM_TM12_TAUNT compare RESULT, 0 call_if_eq Route110_TrickHouseEnd_EventScript_161C4E msgbox Route110_TrickHouseEnd_Text_19C9BD, 4 diff --git a/data/scripts/maps/Route110_TrickHouseEntrance.inc b/data/scripts/maps/Route110_TrickHouseEntrance.inc index 527f09d27..3fceeb8d1 100644 --- a/data/scripts/maps/Route110_TrickHouseEntrance.inc +++ b/data/scripts/maps/Route110_TrickHouseEntrance.inc @@ -401,7 +401,7 @@ Route110_TrickHouseEntrance_EventScript_161452:: @ 8161452 end Route110_TrickHouseEntrance_EventScript_16147E:: @ 816147E - giveitem_std ITEM_TM12 + giveitem_std ITEM_TM12_TAUNT compare RESULT, 1 goto_if_eq Route110_TrickHouseEntrance_EventScript_161502 compare RESULT, 0 diff --git a/data/scripts/maps/Route114.inc b/data/scripts/maps/Route114.inc index 30ab8c572..54a4ee59a 100644 --- a/data/scripts/maps/Route114.inc +++ b/data/scripts/maps/Route114.inc @@ -28,7 +28,7 @@ Route114_EventScript_150782:: @ 8150782 faceplayer goto_if_set FLAG_RECEIVED_TM05, Route114_EventScript_1507B9 msgbox Route114_Text_170154, 4 - giveitem_std ITEM_TM05 + giveitem_std ITEM_TM05_ROAR compare RESULT, 0 goto_if_eq Route114_EventScript_1A029B setflag FLAG_RECEIVED_TM05 diff --git a/data/scripts/maps/Route114_FossilManiacsHouse.inc b/data/scripts/maps/Route114_FossilManiacsHouse.inc index b191db5f6..c93584561 100644 --- a/data/scripts/maps/Route114_FossilManiacsHouse.inc +++ b/data/scripts/maps/Route114_FossilManiacsHouse.inc @@ -11,7 +11,7 @@ Route114_FossilManiacsHouse_EventScript_15C1C3:: @ 815C1C3 faceplayer goto_if_set FLAG_RECEIVED_TM28, Route114_FossilManiacsHouse_EventScript_15C1F2 msgbox Route114_FossilManiacsHouse_Text_1925E1, 4 - giveitem_std ITEM_TM28 + giveitem_std ITEM_TM28_DIG compare RESULT, 0 goto_if_eq Route114_FossilManiacsHouse_EventScript_1A029B setflag FLAG_RECEIVED_TM28 diff --git a/data/scripts/maps/Route119.inc b/data/scripts/maps/Route119.inc index 4b9f3ce5f..30eed9cc0 100644 --- a/data/scripts/maps/Route119.inc +++ b/data/scripts/maps/Route119.inc @@ -147,7 +147,7 @@ Route119_EventScript_151337:: @ 8151337 end Route119_EventScript_151352:: @ 8151352 - giveitem_std ITEM_HM02 + giveitem_std ITEM_HM02_FLY setflag FLAG_RECEIVED_HM02 return diff --git a/data/scripts/maps/Route123.inc b/data/scripts/maps/Route123.inc index 5f77ea023..d954bec1a 100644 --- a/data/scripts/maps/Route123.inc +++ b/data/scripts/maps/Route123.inc @@ -15,7 +15,7 @@ Route123_EventScript_151C5D:: @ 8151C5D compare RESULT, 0 goto_if_eq Route123_EventScript_151CAA msgbox Route123_Text_171DC2, 4 - giveitem_std ITEM_TM19 + giveitem_std ITEM_TM19_GIGA_DRAIN compare RESULT, 0 goto_if_eq Route123_EventScript_1A029B setflag FLAG_RECEIVED_TM19 diff --git a/data/scripts/maps/RustboroCity_CuttersHouse.inc b/data/scripts/maps/RustboroCity_CuttersHouse.inc index e18a1e029..b43e0aafe 100644 --- a/data/scripts/maps/RustboroCity_CuttersHouse.inc +++ b/data/scripts/maps/RustboroCity_CuttersHouse.inc @@ -6,7 +6,7 @@ RustboroCity_CuttersHouse_EventScript_157D27:: @ 8157D27 faceplayer goto_if_set FLAG_RECEIVED_HM01, RustboroCity_CuttersHouse_EventScript_157D53 msgbox RustboroCity_CuttersHouse_Text_18509C, 4 - giveitem_std ITEM_HM01 + giveitem_std ITEM_HM01_CUT setflag FLAG_RECEIVED_HM01 msgbox RustboroCity_CuttersHouse_Text_1851C9, 4 release diff --git a/data/scripts/maps/RustboroCity_Gym.inc b/data/scripts/maps/RustboroCity_Gym.inc index bcd597541..307617e50 100644 --- a/data/scripts/maps/RustboroCity_Gym.inc +++ b/data/scripts/maps/RustboroCity_Gym.inc @@ -25,7 +25,7 @@ RustboroCity_Gym_EventScript_1578FE:: @ 81578FE end RustboroCity_Gym_EventScript_15793C:: @ 815793C - giveitem_std ITEM_TM39 + giveitem_std ITEM_TM39_ROCK_TOMB compare RESULT, 0 goto_if_eq RustboroCity_Gym_EventScript_1A029B setflag FLAG_RECEIVED_TM39 diff --git a/data/scripts/maps/RusturfTunnel.inc b/data/scripts/maps/RusturfTunnel.inc index 7c715b6c2..06f2dfa82 100644 --- a/data/scripts/maps/RusturfTunnel.inc +++ b/data/scripts/maps/RusturfTunnel.inc @@ -63,7 +63,7 @@ RusturfTunnel_EventScript_15C7D1:: @ 815C7D1 call_if_eq RusturfTunnel_EventScript_15C8EB compare VAR_TEMP_1, 3 call_if_eq RusturfTunnel_EventScript_15C8EB - giveitem_std ITEM_HM04 + giveitem_std ITEM_HM04_STRENGTH setflag FLAG_RECEIVED_HM04 msgbox RusturfTunnel_Text_194693, 4 closemessage diff --git a/data/scripts/maps/SSTidalRooms.inc b/data/scripts/maps/SSTidalRooms.inc index 58e7c3235..89372bd84 100644 --- a/data/scripts/maps/SSTidalRooms.inc +++ b/data/scripts/maps/SSTidalRooms.inc @@ -6,7 +6,7 @@ SSTidalRooms_EventScript_15FF06:: @ 815FF06 faceplayer goto_if_set FLAG_RECEIVED_TM49, SSTidalRooms_EventScript_15FF3D msgbox SSTidalRooms_Text_199B65, 4 - giveitem_std ITEM_TM49 + giveitem_std ITEM_TM49_SNATCH compare RESULT, 0 goto_if_eq SSTidalRooms_EventScript_1A029B setflag FLAG_RECEIVED_TM49 diff --git a/data/scripts/maps/SlateportCity.inc b/data/scripts/maps/SlateportCity.inc index 4af912ed3..213fc3163 100644 --- a/data/scripts/maps/SlateportCity.inc +++ b/data/scripts/maps/SlateportCity.inc @@ -473,8 +473,8 @@ SlateportCity_EventScript_14BE9A:: @ 814BE9A .align 2 SlateportCity_Items2:: @ 814BEB4 - .2byte ITEM_TM10 - .2byte ITEM_TM43 + .2byte ITEM_TM10_HIDDEN_POWER + .2byte ITEM_TM43_SECRET_POWER .2byte ITEM_NONE release end diff --git a/data/scripts/maps/SlateportCity_ContestHall.inc b/data/scripts/maps/SlateportCity_ContestHall.inc index 4151579a2..5f6a3c15d 100644 --- a/data/scripts/maps/SlateportCity_ContestHall.inc +++ b/data/scripts/maps/SlateportCity_ContestHall.inc @@ -14,7 +14,7 @@ SlateportCity_ContestHall_EventScript_15555E:: @ 815555E faceplayer goto_if_set FLAG_RECEIVED_TM41, SlateportCity_ContestHall_EventScript_155595 msgbox SlateportCity_ContestHall_Text_17CCE2, 4 - giveitem_std ITEM_TM41 + giveitem_std ITEM_TM41_TORMENT compare RESULT, 0 goto_if_eq SlateportCity_ContestHall_EventScript_1A029B setflag FLAG_RECEIVED_TM41 diff --git a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc index c8ece697d..45ca62167 100644 --- a/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc +++ b/data/scripts/maps/SlateportCity_OceanicMuseum_1F.inc @@ -163,7 +163,7 @@ SlateportCity_OceanicMuseum_1F_EventScript_155C3A:: @ 8155C3A applymovement 13, SlateportCity_OceanicMuseum_1F_Movement_1A0835 waitmovement 0 msgbox SlateportCity_OceanicMuseum_1F_Text_17E582, 4 - giveitem_std ITEM_TM46 + giveitem_std ITEM_TM46_THIEF compare RESULT, 0 goto_if_eq SlateportCity_OceanicMuseum_1F_EventScript_155CC2 setflag FLAG_RECEIVED_TM46 diff --git a/data/scripts/maps/SootopolisCity_Gym_1F.inc b/data/scripts/maps/SootopolisCity_Gym_1F.inc index 44bcda12f..0ad6aa027 100644 --- a/data/scripts/maps/SootopolisCity_Gym_1F.inc +++ b/data/scripts/maps/SootopolisCity_Gym_1F.inc @@ -106,7 +106,7 @@ SootopolisCity_Gym_1F_EventScript_15B02D:: @ 815B02D end SootopolisCity_Gym_1F_EventScript_15B056:: @ 815B056 - giveitem_std ITEM_TM03 + giveitem_std ITEM_TM03_WATER_PULSE compare RESULT, 0 goto_if_eq SootopolisCity_Gym_1F_EventScript_1A029B msgbox SootopolisCity_Gym_1F_Text_18F466, 4 diff --git a/data/scripts/maps/SootopolisCity_House1.inc b/data/scripts/maps/SootopolisCity_House1.inc index 67be3738b..d1b842f7b 100644 --- a/data/scripts/maps/SootopolisCity_House1.inc +++ b/data/scripts/maps/SootopolisCity_House1.inc @@ -6,7 +6,7 @@ SootopolisCity_House1_EventScript_15B29B:: @ 815B29B faceplayer goto_if_set FLAG_RECEIVED_TM31, SootopolisCity_House1_EventScript_15B2C7 msgbox SootopolisCity_House1_Text_18F991, 4 - giveitem_std ITEM_TM31 + giveitem_std ITEM_TM31_BRICK_BREAK setflag FLAG_RECEIVED_TM31 msgbox SootopolisCity_House1_Text_18FA03, 4 release diff --git a/data/scripts/maps/VerdanturfTown_ContestLobby.inc b/data/scripts/maps/VerdanturfTown_ContestLobby.inc index 85b524c99..3aef08e94 100644 --- a/data/scripts/maps/VerdanturfTown_ContestLobby.inc +++ b/data/scripts/maps/VerdanturfTown_ContestLobby.inc @@ -103,7 +103,7 @@ VerdanturfTown_ContestLobby_EventScript_153E47:: @ 8153E47 faceplayer goto_if_set FLAG_RECEIVED_TM45, VerdanturfTown_ContestLobby_EventScript_153E76 msgbox VerdanturfTown_ContestLobby_Text_177DEC, 4 - giveitem_std ITEM_TM45 + giveitem_std ITEM_TM45_ATTRACT compare RESULT, 0 goto_if_eq VerdanturfTown_ContestLobby_EventScript_1A029B setflag FLAG_RECEIVED_TM45 diff --git a/data/scripts/secret_power_tm.inc b/data/scripts/secret_power_tm.inc index 1f5e074d9..6fe9e9a6e 100644 --- a/data/scripts/secret_power_tm.inc +++ b/data/scripts/secret_power_tm.inc @@ -9,7 +9,7 @@ Route111_EventScript_1A3858:: @ 81A3858 end Route111_EventScript_1A3877:: @ 81A3877 - giveitem_std ITEM_TM43 + giveitem_std ITEM_TM43_SECRET_POWER compare RESULT, 0 goto_if_eq Route111_EventScript_1A38D9 msgbox Route111_Text_1A35C5, 4 diff --git a/graphics/birch_speech/blank_pal.pal b/graphics/birch_speech/blank_pal.pal index 7dc528e38..7dc528e38 100755..100644 --- a/graphics/birch_speech/blank_pal.pal +++ b/graphics/birch_speech/blank_pal.pal diff --git a/include/battle.h b/include/battle.h index 27ed57045..d3cbd24f5 100644 --- a/include/battle.h +++ b/include/battle.h @@ -4,6 +4,30 @@ #include "sprite.h" #include "constants/battle_constants.h" +/* + Banks are a name given to what could be called a 'battlerId' or 'monControllerId'. + Each bank has a value consisting of two bits. + 0x1 bit is responsible for the side, 0 = player's side, 1 = opponent's side. + 0x2 bit is responsible for the id of sent out pokemon. 0 means it's the first sent out pokemon, 1 it's the second one. (Triple battle didn't exist at the time yet.) +*/ + +#define BATTLE_BANKS_COUNT 4 + +#define IDENTITY_PLAYER_MON1 0 +#define IDENTITY_OPPONENT_MON1 1 +#define IDENTITY_PLAYER_MON2 2 +#define IDENTITY_OPPONENT_MON2 3 + +#define SIDE_PLAYER 0x0 +#define SIDE_OPPONENT 0x1 + +#define BIT_SIDE 0x1 +#define BIT_MON 0x2 + +#define GET_BANK_IDENTITY(bank)((gBanksByIdentity[bank])) +#define GET_BANK_SIDE(bank)((GetBankIdentity(bank) & BIT_SIDE)) +#define GET_BANK_SIDE2(bank)((GET_BANK_IDENTITY(bank) & BIT_SIDE)) + enum { BATTLE_TERRAIN_GRASS, @@ -49,16 +73,16 @@ struct AI_Stack struct AI_ThinkingStruct /* 0x2016800 */ { -/* 0x00 */ u8 aiState; -/* 0x01 */ u8 movesetIndex; -/* 0x02 */ u16 moveConsidered; -/* 0x04 */ s8 score[4]; // score? -/* 0x08 */ u32 funcResult; -/* 0x0C */ u32 aiFlags; -/* 0x10 */ u8 aiAction; -/* 0x11 */ u8 aiLogicId; -/* 0x12 */ u8 filler12[6]; -/* 0x18 */ u8 simulatedRNG[4]; + /*0x00*/ u8 aiState; + /*0x01*/ u8 movesetIndex; + /*0x02*/ u16 moveConsidered; + /*0x04*/ s8 score[4]; // score? + /*0x08*/ u32 funcResult; + /*0x0C*/ u32 aiFlags; + /*0x10*/ u8 aiAction; + /*0x11*/ u8 aiLogicId; + /*0x12*/ u8 filler12[6]; + /*0x18*/ u8 simulatedRNG[4]; }; struct BattleStruct /* 0x2000000 */ @@ -302,6 +326,18 @@ struct BattleStruct /* 0x2000000 */ /* 0x16A00 */ struct UnkBattleStruct1 unk_2016A00_2; }; +struct StatsArray +{ + u16 hp; + u16 atk; + u16 def; + u16 spd; + u16 spAtk; + u16 spDef; +}; + +#define gBattleResources_statsBeforeLvlUp ((struct StatsArray *)(gSharedMem + 0x17180)) + struct DisableStruct { /*0x00*/ u32 transformedMonPersonality; @@ -473,7 +509,7 @@ struct sideTimer u8 lightscreenTimer; //0x1 u8 mistTimer; //0x2 u8 field3; //0x3 - u16 field4; //0x4 + u16 field4; //0x4 u8 spikesAmount; //0x6 u8 safeguardTimer; //0x7 u8 followmeTimer; //0x8 @@ -491,7 +527,7 @@ struct WishFutureKnock u8 wishCounter[MAX_BANKS_BATTLE]; u8 wishUserID[MAX_BANKS_BATTLE]; u8 weatherDuration; - u16 knockedOffPokes; + u8 knockedOffPokes[2]; }; extern struct UnkBattleStruct1 unk_2016A00; @@ -504,6 +540,88 @@ extern struct WishFutureKnock gWishFutureKnock; extern struct AI_ThinkingStruct gAIThinkingSpace; extern struct Struct20238C8 gUnknown_020238C8; +#define GET_MOVE_TYPE(move, typeArg) \ +{ \ + if (gBattleStruct->dynamicMoveType) \ + typeArg = gBattleStruct->dynamicMoveType & 0x3F; \ + else \ + typeArg = gBattleMoves[move].type; \ +} + +#define MOVE_EFFECT_SLEEP 0x1 +#define MOVE_EFFECT_POISON 0x2 +#define MOVE_EFFECT_BURN 0x3 +#define MOVE_EFFECT_FREEZE 0x4 +#define MOVE_EFFECT_PARALYSIS 0x5 +#define MOVE_EFFECT_TOXIC 0x6 +#define MOVE_EFFECT_CONFUSION 0x7 +#define MOVE_EFFECT_FLINCH 0x8 +#define MOVE_EFFECT_TRI_ATTACK 0x9 +#define MOVE_EFFECT_UPROAR 0xA +#define MOVE_EFFECT_PAYDAY 0xB +#define MOVE_EFFECT_CHARGING 0xC +#define MOVE_EFFECT_WRAP 0xD +#define MOVE_EFFECT_RECOIL_25 0xE +#define MOVE_EFFECT_ATK_PLUS_1 0xF +#define MOVE_EFFECT_DEF_PLUS_1 0x10 +#define MOVE_EFFECT_SPD_PLUS_1 0x11 +#define MOVE_EFFECT_SP_ATK_PLUS_1 0x12 +#define MOVE_EFFECT_SP_DEF_PLUS_1 0x13 +#define MOVE_EFFECT_ACC_PLUS_1 0x14 +#define MOVE_EFFECT_EVS_PLUS_1 0x15 +#define MOVE_EFFECT_ATK_MINUS_1 0x16 +#define MOVE_EFFECT_DEF_MINUS_1 0x17 +#define MOVE_EFFECT_SPD_MINUS_1 0x18 +#define MOVE_EFFECT_SP_ATK_MINUS_1 0x19 +#define MOVE_EFFECT_SP_DEF_MINUS_1 0x1A +#define MOVE_EFFECT_ACC_MINUS_1 0x1B +#define MOVE_EFFECT_EVS_MINUS_1 0x1C +#define MOVE_EFFECT_RECHARGE 0x1D +#define MOVE_EFFECT_RAGE 0x1E +#define MOVE_EFFECT_STEAL_ITEM 0x1F +#define MOVE_EFFECT_PREVENT_ESCAPE 0x20 +#define MOVE_EFFECT_NIGHTMARE 0x21 +#define MOVE_EFFECT_ALL_STATS_UP 0x22 +#define MOVE_EFFECT_RAPIDSPIN 0x23 +#define MOVE_EFFECT_REMOVE_PARALYSIS 0x24 +#define MOVE_EFFECT_ATK_DEF_DOWN 0x25 +#define MOVE_EFFECT_RECOIL_33_PARALYSIS 0x26 +#define MOVE_EFFECT_ATK_PLUS_2 0x27 +#define MOVE_EFFECT_DEF_PLUS_2 0x28 +#define MOVE_EFFECT_SPD_PLUS_2 0x29 +#define MOVE_EFFECT_SP_ATK_PLUS_2 0x2A +#define MOVE_EFFECT_SP_DEF_PLUS_2 0x2B +#define MOVE_EFFECT_ACC_PLUS_2 0x2C +#define MOVE_EFFECT_EVS_PLUS_2 0x2D +#define MOVE_EFFECT_ATK_MINUS_2 0x2E +#define MOVE_EFFECT_DEF_MINUS_2 0x2F +#define MOVE_EFFECT_SPD_MINUS_2 0x30 +#define MOVE_EFFECT_SP_ATK_MINUS_2 0x31 +#define MOVE_EFFECT_SP_DEF_MINUS_2 0x32 +#define MOVE_EFFECT_ACC_MINUS_2 0x33 +#define MOVE_EFFECT_EVS_MINUS_2 0x34 +#define MOVE_EFFECT_THRASH 0x35 +#define MOVE_EFFECT_KNOCK_OFF 0x36 +#define MOVE_EFFECT_NOTHING_37 0x37 +#define MOVE_EFFECT_NOTHING_38 0x38 +#define MOVE_EFFECT_NOTHING_39 0x39 +#define MOVE_EFFECT_NOTHING_3A 0x3A +#define MOVE_EFFECT_SP_ATK_TWO_DOWN 0x3B +#define MOVE_EFFECT_NOTHING_3C 0x3C +#define MOVE_EFFECT_NOTHING_3D 0x3D +#define MOVE_EFFECT_NOTHING_3E 0x3E +#define MOVE_EFFECT_NOTHING_3F 0x3F +#define MOVE_EFFECT_AFFECTS_USER 0x40 +#define MOVE_EFFECT_CERTAIN 0x80 + +#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8 +#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40 +#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit + +#define SET_STAT_BUFF_VALUE(n)(((s8)(((s8)(n) << 4)) & 0xF0)) + +#define SET_STATCHANGER(statId, stage, goesDown)(gBattleScripting.statChanger = (statId) + (stage << 4) + (goesDown << 7)) + // used in many battle files, it seems as though Hisashi Sogabe wrote // some sort of macro to replace the use of actually calling memset. // Perhaps it was thought calling memset was much slower? @@ -540,7 +658,7 @@ struct funcStack struct scriptsStack { - u8* ptr[8]; + const u8 *ptr[8]; u8 size; }; @@ -676,11 +794,11 @@ void nullsub_10(int); void load_gfxc_health_bar(); u8 battle_load_something(); void sub_8031F88(u8); -void sub_80324F8(struct Pokemon *, u8); +void HandleLowHpMusicChange(struct Pokemon *, u8); void sub_8032638(); void sub_8032AA8(u8, u8); void SetBankFuncToOpponentBufferRunCommand(void); -void BattleMusicStop(void); +void BattleStopLowHpSound(void); // asm/battle_9.o void SetBankFuncToLinkOpponentBufferRunCommand(void); diff --git a/include/battle_ai.h b/include/battle_ai.h index c22ca8633..fdad0c7e9 100644 --- a/include/battle_ai.h +++ b/include/battle_ai.h @@ -10,10 +10,10 @@ enum // AI states enum { - AIState_SettingUp, - AIState_Processing, - AIState_FinishedProcessing, - AIState_DoNotProcess + BATTLEAI_SETTING_UP, + BATTLEAI_PROCESSING, + BATTLEAI_FINISHED, + BATTLEAI_DO_NOT_PROCESS }; // battle_ai diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h new file mode 100644 index 000000000..030844ec3 --- /dev/null +++ b/include/battle_script_commands.h @@ -0,0 +1,65 @@ +#ifndef GUARD_BATTLE_SCRIPT_COMMANDS_H +#define GUARD_BATTLE_SCRIPT_COMMANDS_H + +#define NO_ACC_CALC 0xFFFE +#define NO_ACC_CALC_CHECK_LOCK_ON 0xFFFF +#define ACC_CURR_MOVE 0 + +#define CMP_EQUAL 0x0 +#define CMP_NOT_EQUAL 0x1 +#define CMP_GREATER_THAN 0x2 +#define CMP_LESS_THAN 0x3 +#define CMP_COMMON_BITS 0x4 +#define CMP_NO_COMMON_BITS 0x5 + +#define BS_ATTACKER_WITH_PARTNER 4 // for atk98_status_icon_update +#define BS_GET_ATTACKER_SIDE 8 // for atk1E_jumpifability +#define BS_GET_NOT_ATTACKER_SIDE 9 // for atk1E_jumpifability + +#define ATK48_STAT_NEGATIVE 0x1 +#define ATK48_STAT_BY_TWO 0x2 +#define ATK48_BIT_x4 0x4 +#define ATK48_LOWER_FAIL_CHECK 0x8 + +#define ATK4F_DONT_CHECK_STATUSES 0x80 + +#define VARIOUS_CANCEL_MULTI_TURN_MOVES 0 +#define VARIOUS_SET_MAGIC_COAT_TARGET 1 +#define VARIOUS_IS_RUNNING_IMPOSSIBLE 2 +#define VARIOUS_GET_MOVE_TARGET 3 +#define VARIOUS_RESET_INTIMIDATE_TRACE_BITS 5 +#define VARIOUS_UPDATE_CHOICE_MOVE_ON_LVL_UP 6 +#define VARIOUS_EMIT_YESNOBOX 13 +#define VARIOUS_WAIT_CRY 18 +#define VARIOUS_RETURN_OPPONENT_MON1 19 +#define VARIOUS_RETURN_OPPONENT_MON2 20 +#define VARIOUS_SET_TELEPORT_OUTCOME 25 +#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26 + +#define ATK80_DMG_CHANGE_SIGN 0 +#define ATK80_DMG_HALF_BY_TWO_NOT_MORE_THAN_HALF_MAX_HP 1 +#define ATK80_DMG_DOUBLED 2 + +#define STAT_CHANGE_BS_PTR 0x1 +#define STAT_CHANGE_NOT_PROTECT_AFFECTED 0x20 + +#define STAT_CHANGE_WORKED 0 +#define STAT_CHANGE_DIDNT_WORK 1 + +#define WINDOW_CLEAR 0x1 +#define WINDOW_x80 0x80 + +void AI_CalcDmg(u8 bankAtk, u8 bankDef); +u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef); +u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility); +u8 BankGetTurnOrder(u8 bank); +void SetMoveEffect(bool8 primary, u8 certain); +void BattleDestroyYesNoCursorAt(u8 cursorPosition); +void BattleCreateYesNoCursorAt(u8 cursorPosition); +void BufferMoveToLearnIntoBattleTextBuff2(void); +void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags); +bool8 UproarWakeUpCheck(u8 bank); + +extern void (* const gBattleScriptingCommandsTable[])(void); + +#endif // GUARD_BATTLE_SCRIPT_COMMANDS_H diff --git a/include/battle_string_ids.h b/include/battle_string_ids.h new file mode 100644 index 000000000..f242284b0 --- /dev/null +++ b/include/battle_string_ids.h @@ -0,0 +1,387 @@ +#ifndef GUARD_BATTLE_STRING_IDS_H +#define GUARD_BATTLE_STRING_IDS_H + +#define BATTLESTRINGS_COUNT 369 + +#define BATTLESTRINGS_ID_ADDER 12 // all battlestrings have its ID + 12, because first 5 are reserved + +#define STRINGID_INTROMSG 0 +#define STRINGID_INTROSENDOUT 1 +#define STRINGID_RETURNMON 2 +#define STRINGID_SWITCHINMON 3 +#define STRINGID_USEDMOVE 4 +#define STRINGID_BATTLEEND 5 + + +// todo: make some of those names less vague: attacker/target vs pkmn, etc. +#define STRINGID_TRAINER1LOSETEXT 12 +#define STRINGID_PKMNGAINEDEXP 13 +#define STRINGID_PKMNGREWTOLV 14 +#define STRINGID_PKMNLEARNEDMOVE 15 +#define STRINGID_TRYTOLEARNMOVE1 16 +#define STRINGID_TRYTOLEARNMOVE2 17 +#define STRINGID_TRYTOLEARNMOVE3 18 +#define STRINGID_PKMNFORGOTMOVE 19 +#define STRINGID_STOPLEARNINGMOVE 20 +#define STRINGID_DIDNOTLEARNMOVE 21 +#define STRINGID_PKMNLEARNEDMOVE2 22 +#define STRINGID_ATTACKMISSED 23 +#define STRINGID_PKMNPROTECTEDITSELF 24 +#define STRINGID_STATSWONTINCREASE2 25 +#define STRINGID_AVOIDEDDAMAGE 26 +#define STRINGID_ITDOESNTAFFECT 27 +#define STRINGID_ATTACKERFAINTED 28 +#define STRINGID_TARGETFAINTED 29 +#define STRINGID_PLAYERGOTMONEY 30 +#define STRINGID_PLAYERWHITEOUT 31 +#define STRINGID_PLAYERWHITEOUT2 32 +#define STRINGID_PREVENTSESCAPE 33 +#define STRINGID_HITXTIMES 34 +#define STRINGID_PKMNFELLASLEEP 35 +#define STRINGID_PKMNMADESLEEP 36 +#define STRINGID_PKMNALREADYASLEEP 37 +#define STRINGID_PKMNALREADYASLEEP2 38 +#define STRINGID_PKMNWASNTAFFECTED 39 +#define STRINGID_PKMNWASPOISONED 40 +#define STRINGID_PKMNPOISONEDBY 41 +#define STRINGID_PKMNHURTBYPOISON 42 +#define STRINGID_PKMNALREADYPOISONED 43 +#define STRINGID_PKMNBADLYPOISONED 44 +#define STRINGID_PKMNENERGYDRAINED 45 +#define STRINGID_PKMNWASBURNED 46 +#define STRINGID_PKMNBURNEDBY 47 +#define STRINGID_PKMNHURTBYBURN 48 +#define STRINGID_PKMNWASFROZEN 49 +#define STRINGID_PKMNFROZENBY 50 +#define STRINGID_PKMNISFROZEN 51 +#define STRINGID_PKMNWASDEFROSTED 52 +#define STRINGID_PKMNWASDEFROSTED2 53 +#define STRINGID_PKMNWASDEFROSTEDBY 54 +#define STRINGID_PKMNWASPARALYZED 55 +#define STRINGID_PKMNWASPARALYZEDBY 56 +#define STRINGID_PKMNISPARALYZED 57 +#define STRINGID_PKMNISALREADYPARALYZED 58 +#define STRINGID_PKMNHEALEDPARALYSIS 59 +#define STRINGID_PKMNDREAMEATEN 60 +#define STRINGID_STATSWONTINCREASE 61 +#define STRINGID_STATSWONTDECREASE 62 +#define STRINGID_TEAMSTOPPEDWORKING 63 +#define STRINGID_FOESTOPPEDWORKING 64 +#define STRINGID_PKMNISCONFUSED 65 +#define STRINGID_PKMNHEALEDCONFUSION 66 +#define STRINGID_PKMNWASCONFUSED 67 +#define STRINGID_PKMNALREADYCONFUSED 68 +#define STRINGID_PKMNFELLINLOVE 69 +#define STRINGID_PKMNINLOVE 70 +#define STRINGID_PKMNIMMOBILIZEDBYLOVE 71 +#define STRINGID_PKMNBLOWNAWAY 72 +#define STRINGID_PKMNCHANGEDTYPE 73 +#define STRINGID_PKMNFLINCHED 74 +#define STRINGID_PKMNREGAINEDHEALTH 75 +#define STRINGID_PKMNHPFULL 76 +#define STRINGID_PKMNRAISEDSPDEF 77 +#define STRINGID_PKMNRAISEDDEF 78 +#define STRINGID_PKMNCOVEREDBYVEIL 79 +#define STRINGID_PKMNUSEDSAFEGUARD 80 +#define STRINGID_PKMNSAFEGUARDEXPIRED 81 +#define STRINGID_PKMNWENTTOSLEEP 82 +#define STRINGID_PKMNSLEPTHEALTHY 83 +#define STRINGID_PKMNWHIPPEDWHIRLWIND 84 +#define STRINGID_PKMNTOOKSUNLIGHT 85 +#define STRINGID_PKMNLOWEREDHEAD 86 +#define STRINGID_PKMNISGLOWING 87 +#define STRINGID_PKMNFLEWHIGH 88 +#define STRINGID_PKMNDUGHOLE 89 +#define STRINGID_PKMNSQUEEZEDBYBIND 90 +#define STRINGID_PKMNTRAPPEDINVORTEX 91 +#define STRINGID_PKMNWRAPPEDBY 92 +#define STRINGID_PKMNCLAMPED 93 +#define STRINGID_PKMNHURTBY 94 +#define STRINGID_PKMNFREEDFROM 95 +#define STRINGID_PKMNCRASHED 96 +#define STRINGID_PKMNSHROUDEDINMIST 97 +#define STRINGID_PKMNPROTECTEDBYMIST 98 +#define STRINGID_PKMNGETTINGPUMPED 99 +#define STRINGID_PKMNHITWITHRECOIL 100 +#define STRINGID_PKMNPROTECTEDITSELF2 101 +#define STRINGID_PKMNBUFFETEDBYSANDSTORM 102 +#define STRINGID_PKMNPELTEDBYHAIL 103 +#define STRINGID_PKMNSEEDED 104 +#define STRINGID_PKMNEVADEDATTACK 105 +#define STRINGID_PKMNSAPPEDBYLEECHSEED 106 +#define STRINGID_PKMNFASTASLEEP 107 +#define STRINGID_PKMNWOKEUP 108 +#define STRINGID_PKMNUPROARKEPTAWAKE 109 +#define STRINGID_PKMNWOKEUPINUPROAR 110 +#define STRINGID_PKMNCAUSEDUPROAR 111 +#define STRINGID_PKMNMAKINGUPROAR 112 +#define STRINGID_PKMNCALMEDDOWN 113 +#define STRINGID_PKMNCANTSLEEPINUPROAR 114 +#define STRINGID_PKMNSTOCKPILED 115 +#define STRINGID_PKMNCANTSTOCKPILE 116 +#define STRINGID_PKMNCANTSLEEPINUPROAR2 117 +#define STRINGID_UPROARKEPTPKMNAWAKE 118 +#define STRINGID_PKMNSTAYEDAWAKEUSING 119 +#define STRINGID_PKMNSTORINGENERGY 120 +#define STRINGID_PKMNUNLEASHEDENERGY 121 +#define STRINGID_PKMNFATIGUECONFUSION 122 +#define STRINGID_PKMNPICKEDUPITEM 123 +#define STRINGID_PKMNUNAFFECTED 124 +#define STRINGID_PKMNTRANSFORMEDINTO 125 +#define STRINGID_PKMNMADESUBSTITUTE 126 +#define STRINGID_PKMNHASSUBSTITUTE 127 +#define STRINGID_SUBSTITUTEDAMAGED 128 +#define STRINGID_PKMNSUBSTITUTEFADED 129 +#define STRINGID_PKMNMUSTRECHARGE 130 +#define STRINGID_PKMNRAGEBUILDING 131 +#define STRINGID_PKMNMOVEWASDISABLED 132 +#define STRINGID_PKMNMOVEISDISABLED 133 +#define STRINGID_PKMNMOVEDISABLEDNOMORE 134 +#define STRINGID_PKMNGOTENCORE 135 +#define STRINGID_PKMNENCOREENDED 136 +#define STRINGID_PKMNTOOKAIM 137 +#define STRINGID_PKMNSKETCHEDMOVE 138 +#define STRINGID_PKMNTRYINGTOTAKEFOE 139 +#define STRINGID_PKMNTOOKFOE 140 +#define STRINGID_PKMNREDUCEDPP 141 +#define STRINGID_PKMNSTOLEITEM 142 +#define STRINGID_TARGETCANTESCAPENOW 143 +#define STRINGID_PKMNFELLINTONIGHTMARE 144 +#define STRINGID_PKMNLOCKEDINNIGHTMARE 145 +#define STRINGID_PKMNLAIDCURSE 146 +#define STRINGID_PKMNAFFLICTEDBYCURSE 147 +#define STRINGID_SPIKESSCATTERED 148 +#define STRINGID_PKMNHURTBYSPIKES 149 +#define STRINGID_PKMNIDENTIFIED 150 +#define STRINGID_PKMNPERISHCOUNTFELL 151 +#define STRINGID_PKMNBRACEDITSELF 152 +#define STRINGID_PKMNENDUREDHIT 153 +#define STRINGID_MAGNITUDESTRENGTH 154 +#define STRINGID_PKMNCUTHPMAXEDATTACK 155 +#define STRINGID_PKMNCOPIEDSTATCHANGES 156 +#define STRINGID_PKMNGOTFREE 157 +#define STRINGID_PKMNSHEDLEECHSEED 158 +#define STRINGID_PKMNBLEWAWAYSPIKES 159 +#define STRINGID_PKMNFLEDFROMBATTLE 160 +#define STRINGID_PKMNFORESAWATTACK 161 +#define STRINGID_PKMNTOOKATTACK 162 +#define STRINGID_PKMNATTACK 163 +#define STRINGID_PKMNCENTERATTENTION 164 +#define STRINGID_PKMNCHARGINGPOWER 165 +#define STRINGID_NATUREPOWERTURNEDINTO 166 +#define STRINGID_PKMNSTATUSNORMAL 167 +#define STRINGID_PKMNHASNOMOVESLEFT 168 +#define STRINGID_PKMNSUBJECTEDTOTORMENT 169 +#define STRINGID_PKMNCANTUSEMOVETORMENT 170 +#define STRINGID_PKMNTIGHTENINGFOCUS 171 +#define STRINGID_PKMNFELLFORTAUNT 172 +#define STRINGID_PKMNCANTUSEMOVETAUNT 173 +#define STRINGID_PKMNREADYTOHELP 174 +#define STRINGID_PKMNSWITCHEDITEMS 175 +#define STRINGID_PKMNCOPIEDFOE 176 +#define STRINGID_PKMNMADEWISH 177 +#define STRINGID_PKMNWISHCAMETRUE 178 +#define STRINGID_PKMNPLANTEDROOTS 179 +#define STRINGID_PKMNABSORBEDNUTRIENTS 180 +#define STRINGID_PKMNANCHOREDITSELF 181 +#define STRINGID_PKMNWASMADEDROWSY 182 +#define STRINGID_PKMNKNOCKEDOFF 183 +#define STRINGID_PKMNSWAPPEDABILITIES 184 +#define STRINGID_PKMNSEALEDOPPONENTMOVE 185 +#define STRINGID_PKMNCANTUSEMOVESEALED 186 +#define STRINGID_PKMNWANTSGRUDGE 187 +#define STRINGID_PKMNLOSTPPGRUDGE 188 +#define STRINGID_PKMNSHROUDEDITSELF 189 +#define STRINGID_PKMNMOVEBOUNCED 190 +#define STRINGID_PKMNWAITSFORTARGET 191 +#define STRINGID_PKMNSNATCHEDMOVE 192 +#define STRINGID_PKMNMADEITRAIN 193 +#define STRINGID_PKMNRAISEDSPEED 194 +#define STRINGID_PKMNPROTECTEDBY 195 +#define STRINGID_PKMNPREVENTSUSAGE 196 +#define STRINGID_PKMNRESTOREDHPUSING 197 +#define STRINGID_PKMNCHANGEDTYPEWITH 198 +#define STRINGID_PKMNPREVENTSPARALYSISWITH 199 +#define STRINGID_PKMNPREVENTSROMANCEWITH 200 +#define STRINGID_PKMNPREVENTSPOISONINGWITH 201 +#define STRINGID_PKMNPREVENTSCONFUSIONWITH 202 +#define STRINGID_PKMNRAISEDFIREPOWERWITH 203 +#define STRINGID_PKMNANCHORSITSELFWITH 204 +#define STRINGID_PKMNCUTSATTACKWITH 205 +#define STRINGID_PKMNPREVENTSSTATLOSSWITH 206 +#define STRINGID_PKMNHURTSWITH 207 +#define STRINGID_PKMNTRACED 208 +#define STRINGID_STATSHARPLY 209 +#define STRINGID_STATROSE 210 +#define STRINGID_STATHARSHLY 211 +#define STRINGID_STATFELL 212 +#define STRINGID_PKMNSSTATCHANGED 213 +#define STRINGID_PKMNSSTATCHANGED2 214 +#define STRINGID_PKMNSSTATCHANGED3 215 +#define STRINGID_PKMNSSTATCHANGED4 216 +#define STRINGID_CRITICALHIT 217 +#define STRINGID_ONEHITKO 218 +#define STRINGID_123POOF 219 +#define STRINGID_ANDELLIPSIS 220 +#define STRINGID_NOTVERYEFFECTIVE 221 +#define STRINGID_SUPEREFFECTIVE 222 +#define STRINGID_GOTAWAYSAFELY 223 +#define STRINGID_WILDPKMNFLED 224 +#define STRINGID_NORUNNINGFROMTRAINERS 225 +#define STRINGID_CANTESCAPE 226 +#define STRINGID_DONTLEAVEBIRCH 227 +#define STRINGID_BUTNOTHINGHAPPENED 228 +#define STRINGID_BUTITFAILED 229 +#define STRINGID_ITHURTCONFUSION 230 +#define STRINGID_MIRRORMOVEFAILED 231 +#define STRINGID_STARTEDTORAIN 232 +#define STRINGID_DOWNPOURSTARTED 233 +#define STRINGID_RAINCONTINUES 234 +#define STRINGID_DOWNPOURCONTINUES 235 +#define STRINGID_RAINSTOPPED 236 +#define STRINGID_SANDSTORMBREWED 237 +#define STRINGID_SANDSTORMRAGES 238 +#define STRINGID_SANDSTORMSUBSIDED 239 +#define STRINGID_SUNLIGHTGOTBRIGHT 240 +#define STRINGID_SUNLIGHTSTRONG 241 +#define STRINGID_SUNLIGHTFADED 242 +#define STRINGID_STARTEDHAIL 243 +#define STRINGID_HAILCONTINUES 244 +#define STRINGID_HAILSTOPPED 245 +#define STRINGID_FAILEDTOSPITUP 246 +#define STRINGID_FAILEDTOSWALLOW 247 +#define STRINGID_WINDBECAMEHEATWAVE 248 +#define STRINGID_STATCHANGESGONE 249 +#define STRINGID_COINSSCATTERED 250 +#define STRINGID_TOOWEAKFORSUBSTITUTE 251 +#define STRINGID_SHAREDPAIN 252 +#define STRINGID_BELLCHIMED 253 +#define STRINGID_FAINTINTHREE 254 +#define STRINGID_NOPPLEFT 255 +#define STRINGID_BUTNOPPLEFT 256 +#define STRINGID_PLAYERUSEDITEM 257 +#define STRINGID_WALLYUSEDITEM 258 +#define STRINGID_TRAINERBLOCKEDBALL 259 +#define STRINGID_DONTBEATHIEF 260 +#define STRINGID_ITDODGEDBALL 261 +#define STRINGID_YOUMISSEDPKMN 262 +#define STRINGID_PKMNBROKEFREE 263 +#define STRINGID_ITAPPEAREDCAUGHT 264 +#define STRINGID_AARGHALMOSTHADIT 265 +#define STRINGID_SHOOTSOCLOSE 266 +#define STRINGID_GOTCHAPKMNCAUGHT 267 +#define STRINGID_GOTCHAPKMNCAUGHT2 268 +#define STRINGID_GIVENICKNAMECAPTURED 269 +#define STRINGID_PKMNSENTTOPC 270 +#define STRINGID_PKMNDATAADDEDTODEX 271 +#define STRINGID_ITISRAINING 272 +#define STRINGID_SANDSTORMISRAGING 273 +#define STRINGID_CANTESCAPE2 274 +#define STRINGID_PKMNIGNORESASLEEP 275 +#define STRINGID_PKMNIGNOREDORDERS 276 +#define STRINGID_PKMNBEGANTONAP 277 +#define STRINGID_PKMNLOAFING 278 +#define STRINGID_PKMNWONTOBEY 279 +#define STRINGID_PKMNTURNEDAWAY 280 +#define STRINGID_PKMNPRETENDNOTNOTICE 281 +#define STRINGID_ENEMYABOUTTOSWITCHPKMN 282 +#define STRINGID_CREPTCLOSER 283 +#define STRINGID_CANTGETCLOSER 284 +#define STRINGID_PKMNWATCHINGCAREFULLY 285 +#define STRINGID_PKMNCURIOUSABOUTX 286 +#define STRINGID_PKMNENTHRALLEDBYX 287 +#define STRINGID_PKMNIGNOREDX 288 +#define STRINGID_THREWPOKEBLOCKATPKMN 289 +#define STRINGID_OUTOFSAFARIBALLS 290 +#define STRINGID_PKMNSITEMCUREDPARALYSIS 291 +#define STRINGID_PKMNSITEMCUREDPOISON 292 +#define STRINGID_PKMNSITEMHEALEDBURN 293 +#define STRINGID_PKMNSITEMDEFROSTEDIT 294 +#define STRINGID_PKMNSITEMWOKEIT 295 +#define STRINGID_PKMNSITEMSNAPPEDOUT 296 +#define STRINGID_PKMNSITEMCUREDPROBLEM 297 +#define STRINGID_PKMNSITEMRESTOREDHEALTH 298 +#define STRINGID_PKMNSITEMRESTOREDPP 299 +#define STRINGID_PKMNSITEMRESTOREDSTATUS 300 +#define STRINGID_PKMNSITEMRESTOREDHPALITTLE 301 +#define STRINGID_ITEMALLOWSONLYYMOVE 302 +#define STRINGID_PKMNHUNGONWITHX 303 +#define STRINGID_EMPTYSTRING3 304 +#define STRINGID_PKMNSXPREVENTSBURNS 305 +#define STRINGID_PKMNSXBLOCKSY 306 +#define STRINGID_PKMNSXRESTOREDHPALITTLE2 307 +#define STRINGID_PKMNSXWHIPPEDUPSANDSTORM 308 +#define STRINGID_PKMNSXPREVENTSYLOSS 309 +#define STRINGID_PKMNSXINFATUATEDY 310 +#define STRINGID_PKMNSXMADEYINEFFECTIVE 311 +#define STRINGID_PKMNSXCUREDYPROBLEM 312 +#define STRINGID_ITSUCKEDLIQUIDOOZE 313 +#define STRINGID_PKMNTRANSFORMED 314 +#define STRINGID_ELECTRICITYWEAKENED 315 +#define STRINGID_FIREWEAKENED 316 +#define STRINGID_PKMNHIDUNDERWATER 317 +#define STRINGID_PKMNSPRANGUP 318 +#define STRINGID_HMMOVESCANTBEFORGOTTEN 319 +#define STRINGID_XFOUNDONEY 320 +#define STRINGID_PLAYERDEFEATEDTRAINER1 321 +#define STRINGID_SOOTHINGAROMA 322 +#define STRINGID_ITEMSCANTBEUSEDNOW 323 +#define STRINGID_FORXCOMMAYZ 324 +#define STRINGID_USINGXTHEYOFZN 325 +#define STRINGID_PKMNUSEDXTOGETPUMPED 326 +#define STRINGID_PKMNSXMADEYUSELESS 327 +#define STRINGID_PKMNTRAPPEDBYSANDTOMB 328 +#define STRINGID_EMPTYSTRING4 329 +#define STRINGID_ABOOSTED 330 +#define STRINGID_PKMNSXINTENSIFIEDSUN 331 +#define STRINGID_PKMNMAKESGROUNDMISS 332 +#define STRINGID_YOUTHROWABALLNOWRIGHT 333 +#define STRINGID_PKMNSXTOOKATTACK 334 +#define STRINGID_PKMNCHOSEXASDESTINY 335 +#define STRINGID_PKMNLOSTFOCUS 336 +#define STRINGID_USENEXTPKMN 337 +#define STRINGID_PKMNFLEDUSINGITS 338 +#define STRINGID_PKMNFLEDUSING 339 +#define STRINGID_PKMNWASDRAGGEDOUT 340 +#define STRINGID_PREVENTEDFROMWORKING 341 +#define STRINGID_PKMNSITEMNORMALIZEDSTATUS 342 +#define STRINGID_TRAINER1USEDITEM 343 +#define STRINGID_BOXISFULL 344 +#define STRINGID_PKMNAVOIDEDATTACK 345 +#define STRINGID_PKMNSXMADEITINEFFECTIVE 346 +#define STRINGID_PKMNSXPREVENTSFLINCHING 347 +#define STRINGID_PKMNALREADYHASBURN 348 +#define STRINGID_STATSWONTDECREASE2 349 +#define STRINGID_PKMNSXBLOCKSY2 350 +#define STRINGID_PKMNSXWOREOFF 351 +#define STRINGID_PKMNRAISEDDEFALITTLE 352 +#define STRINGID_PKMNRAISEDSPDEFALITTLE 353 +#define STRINGID_THEWALLSHATTERED 354 +#define STRINGID_PKMNSXPREVENTSYSZ 355 +#define STRINGID_PKMNSXCUREDITSYPROBLEM 356 +#define STRINGID_ATTACKERCANTESCAPE 357 +#define STRINGID_PKMNOBTAINEDX 358 +#define STRINGID_PKMNOBTAINEDX2 359 +#define STRINGID_PKMNOBTAINEDXYOBTAINEDZ 360 +#define STRINGID_BUTNOEFFECT 361 +#define STRINGID_PKMNSXHADNOEFFECTONY 362 +#define STRINGID_TWOENEMIESDEFEATED 363 +#define STRINGID_TRAINER2LOSETEXT 364 +#define STRINGID_PKMNINCAPABLEOFPOWER 365 +#define STRINGID_GLINTAPPEARSINEYE 366 +#define STRINGID_PKMNGETTINGINTOPOSITION 367 +#define STRINGID_PKMNBEGANGROWLINGDEEPLY 368 +#define STRINGID_PKMNEAGERFORMORE 369 +#define STRINGID_DEFEATEDOPPONENTBYREFEREE 370 +#define STRINGID_LOSTTOOPPONENTBYREFEREE 371 +#define STRINGID_TIEDOPPONENTBYREFEREE 372 +#define STRINGID_QUESTIONFORFEITMATCH 373 +#define STRINGID_FORFEITEDMATCH 374 +#define STRINGID_PKMNTRANSFERREDSOMEONESPC 375 +#define STRINGID_PKMNTRANSFERREDLANETTESPC 376 +#define STRINGID_PKMNBOXSOMEONESPCFULL 377 +#define STRINGID_PKMNBOXLANETTESPCFULL 378 +#define STRINGID_TRAINER1WINTEXT 379 +#define STRINGID_TRAINER2WINTEXT 380 + +#endif // GUARD_BATTLE_STRING_IDS_H diff --git a/include/battle_util.h b/include/battle_util.h index f47b00b2c..15fa39d1a 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -11,7 +11,7 @@ #define BS_GET_OPPONENT2 14 void TryClearRageStatuses(void); -void BattleScriptPush(u8* BS_ptr); +void BattleScriptPush(const u8* BS_ptr); void PressurePPLoseOnUsingImprision(u8 bankAtk); void PressurePPLoseOnUsingPerishSong(u8 bankAtk); void sub_80155A4(u8); @@ -22,7 +22,7 @@ void ResetSentPokesToOpponentValue(void); void sub_8015740(u8 bank); void sub_80157C4(u8 bank); bool8 HandleWishPerishSongOnTurnEnd(void); -void BattleScriptExecute(u8* BS_ptr); +void BattleScriptExecute(const u8* BS_ptr); void BattleScriptPushCursorAndCallback(u8* BS_ptr); u8 IsMonDisobedient(void); diff --git a/include/constants/items.h b/include/constants/items.h index 48fba1427..9b88db1da 100644 --- a/include/constants/items.h +++ b/include/constants/items.h @@ -2,6 +2,8 @@ #define GUARD_CONSTANTS_ITEMS_H #define ITEM_NONE 0 + +// Balls #define ITEM_MASTER_BALL 1 #define ITEM_ULTRA_BALL 2 #define ITEM_GREAT_BALL 3 @@ -14,6 +16,8 @@ #define ITEM_TIMER_BALL 10 #define ITEM_LUXURY_BALL 11 #define ITEM_PREMIER_BALL 12 + +// Pokemon Items #define ITEM_POTION 13 #define ITEM_ANTIDOTE 14 #define ITEM_BURN_HEAL 15 @@ -180,6 +184,8 @@ #define ITEM_0B0 176 #define ITEM_0B1 177 #define ITEM_0B2 178 + +// hold items #define ITEM_BRIGHT_POWDER 179 #define ITEM_WHITE_HERB 180 #define ITEM_MACHO_BRACE 181 @@ -260,6 +266,8 @@ #define ITEM_PINK_SCARF 256 #define ITEM_GREEN_SCARF 257 #define ITEM_YELLOW_SCARF 258 + +// Key Items #define ITEM_MACH_BIKE 259 #define ITEM_COIN_CASE 260 #define ITEM_ITEMFINDER 261 @@ -290,64 +298,68 @@ #define ITEM_ROOT_FOSSIL 286 #define ITEM_CLAW_FOSSIL 287 #define ITEM_DEVON_SCOPE 288 -#define ITEM_TM01 289 -#define ITEM_TM02 290 -#define ITEM_TM03 291 -#define ITEM_TM04 292 -#define ITEM_TM05 293 -#define ITEM_TM06 294 -#define ITEM_TM07 295 -#define ITEM_TM08 296 -#define ITEM_TM09 297 -#define ITEM_TM10 298 -#define ITEM_TM11 299 -#define ITEM_TM12 300 -#define ITEM_TM13 301 -#define ITEM_TM14 302 -#define ITEM_TM15 303 -#define ITEM_TM16 304 -#define ITEM_TM17 305 -#define ITEM_TM18 306 -#define ITEM_TM19 307 -#define ITEM_TM20 308 -#define ITEM_TM21 309 -#define ITEM_TM22 310 -#define ITEM_TM23 311 -#define ITEM_TM24 312 -#define ITEM_TM25 313 -#define ITEM_TM26 314 -#define ITEM_TM27 315 -#define ITEM_TM28 316 -#define ITEM_TM29 317 -#define ITEM_TM30 318 -#define ITEM_TM31 319 -#define ITEM_TM32 320 -#define ITEM_TM33 321 -#define ITEM_TM34 322 -#define ITEM_TM35 323 -#define ITEM_TM36 324 -#define ITEM_TM37 325 -#define ITEM_TM38 326 -#define ITEM_TM39 327 -#define ITEM_TM40 328 -#define ITEM_TM41 329 -#define ITEM_TM42 330 -#define ITEM_TM43 331 -#define ITEM_TM44 332 -#define ITEM_TM45 333 -#define ITEM_TM46 334 -#define ITEM_TM47 335 -#define ITEM_TM48 336 -#define ITEM_TM49 337 -#define ITEM_TM50 338 -#define ITEM_HM01 339 -#define ITEM_HM02 340 -#define ITEM_HM03 341 -#define ITEM_HM04 342 -#define ITEM_HM05 343 -#define ITEM_HM06 344 -#define ITEM_HM07 345 -#define ITEM_HM08 346 + +// TMs/HMs +#define ITEM_TM01_FOCUS_PUNCH 289 +#define ITEM_TM02_DRAGON_CLAW 290 +#define ITEM_TM03_WATER_PULSE 291 +#define ITEM_TM04_CALM_MIND 292 +#define ITEM_TM05_ROAR 293 +#define ITEM_TM06_TOXIC 294 +#define ITEM_TM07_HAIL 295 +#define ITEM_TM08_BULK_UP 296 +#define ITEM_TM09_BULLET_SEED 297 +#define ITEM_TM10_HIDDEN_POWER 298 +#define ITEM_TM11_SUNNY_DAY 299 +#define ITEM_TM12_TAUNT 300 +#define ITEM_TM13_ICE_BEAM 301 +#define ITEM_TM14_BLIZZARD 302 +#define ITEM_TM15_HYPER_BEAM 303 +#define ITEM_TM16_LIGHT_SCREEN 304 +#define ITEM_TM17_PROTECT 305 +#define ITEM_TM18_RAIN_DANCE 306 +#define ITEM_TM19_GIGA_DRAIN 307 +#define ITEM_TM20_SAFEGUARD 308 +#define ITEM_TM21_FRUSTRATION 309 +#define ITEM_TM22_SOLARBEAM 310 +#define ITEM_TM23_IRON_TAIL 311 +#define ITEM_TM24_THUNDERBOLT 312 +#define ITEM_TM25_THUNDER 313 +#define ITEM_TM26_EARTHQUAKE 314 +#define ITEM_TM27_RETURN 315 +#define ITEM_TM28_DIG 316 +#define ITEM_TM29_PSYCHIC 317 +#define ITEM_TM30_SHADOW_BALL 318 +#define ITEM_TM31_BRICK_BREAK 319 +#define ITEM_TM32_DOUBLE_TEAM 320 +#define ITEM_TM33_REFLECT 321 +#define ITEM_TM34_SHOCK_WAVE 322 +#define ITEM_TM35_FLAMETHROWER 323 +#define ITEM_TM36_SLUDGE_BOMB 324 +#define ITEM_TM37_SANDSTORM 325 +#define ITEM_TM38_FIRE_BLAST 326 +#define ITEM_TM39_ROCK_TOMB 327 +#define ITEM_TM40_AERIAL_ACE 328 +#define ITEM_TM41_TORMENT 329 +#define ITEM_TM42_FACADE 330 +#define ITEM_TM43_SECRET_POWER 331 +#define ITEM_TM44_REST 332 +#define ITEM_TM45_ATTRACT 333 +#define ITEM_TM46_THIEF 334 +#define ITEM_TM47_STEEL_WING 335 +#define ITEM_TM48_SKILL_SWAP 336 +#define ITEM_TM49_SNATCH 337 +#define ITEM_TM50_OVERHEAT 338 +#define ITEM_HM01_CUT 339 +#define ITEM_HM02_FLY 340 +#define ITEM_HM03_SURF 341 +#define ITEM_HM04_STRENGTH 342 +#define ITEM_HM05_FLASH 343 +#define ITEM_HM06_ROCK_SMASH 344 +#define ITEM_HM07_WATERFALL 345 +#define ITEM_HM08_DIVE 346 + +// Unknown #define ITEM_15B 347 #define ITEM_15C 348 @@ -386,4 +398,7 @@ #define NUM_TECHNICAL_MACHINES 50 #define NUM_HIDDEN_MACHINES 8 +// Check if the item is one that can be used on a Pokemon. +#define IS_POKEMON_ITEM(item) ((item) >= ITEM_POTION && (item) <= ITEM_0B2) + #endif // GUARD_CONSTANTS_ITEMS_H diff --git a/include/constants/songs.h b/include/constants/songs.h index 5225f5899..920873a7c 100644 --- a/include/constants/songs.h +++ b/include/constants/songs.h @@ -2,371 +2,371 @@ #define GUARD_CONSTANTS_SONGS_H #define SE_STOP 0 -#define SE_KAIFUKU 1 -#define SE_PC_LOGON 2 -#define SE_PC_OFF 3 -#define SE_PC_ON 4 -#define SE_SELECT 5 -#define SE_WIN_OPEN 6 -#define SE_WALL_HIT 7 -#define SE_DOOR 8 -#define SE_KAIDAN 9 -#define SE_DANSA 10 -#define SE_JITENSYA 11 -#define SE_KOUKA_L 12 -#define SE_KOUKA_M 13 -#define SE_KOUKA_H 14 -#define SE_BOWA2 15 -#define SE_POKE_DEAD 16 -#define SE_NIGERU 17 -#define SE_JIDO_DOA 18 -#define SE_NAMINORI 19 -#define SE_BAN 20 -#define SE_PIN 21 -#define SE_BOO 22 -#define SE_BOWA 23 -#define SE_JYUNI 24 -#define SE_A 25 -#define SE_I 26 -#define SE_U 27 -#define SE_E 28 -#define SE_O 29 -#define SE_N 30 -#define SE_SEIKAI 31 -#define SE_HAZURE 32 -#define SE_EXP 33 -#define SE_JITE_PYOKO 34 +#define SE_KAIFUKU 1 // Healing Item +#define SE_PC_LOGON 2 // PC Logon +#define SE_PC_OFF 3 // PC Shutdown +#define SE_PC_ON 4 // PC Startup +#define SE_SELECT 5 // Cursor Selection +#define SE_WIN_OPEN 6 // Start Menu +#define SE_WALL_HIT 7 // Wall Bump +#define SE_DOOR 8 // Opening Door +#define SE_KAIDAN 9 // Stairs +#define SE_DANSA 10 // Ledge +#define SE_JITENSYA 11 // Bicycle Bell +#define SE_KOUKA_L 12 // Not Very Effective +#define SE_KOUKA_M 13 // Normal Effectiveness +#define SE_KOUKA_H 14 // Super Effective +#define SE_BOWA2 15 // Pokémon Withdrawl +#define SE_POKE_DEAD 16 // Pokémon Fainted +#define SE_NIGERU 17 // Flee from Wild Battle +#define SE_JIDO_DOA 18 // Pokémon Center Door +#define SE_NAMINORI 19 // Briney's Ship +#define SE_BAN 20 // Bang +#define SE_PIN 21 // Exclamation Bubble +#define SE_BOO 22 // Contest Jam +#define SE_BOWA 23 // Giving Poké Ball to Nurse, Poké Ball Wiggle +#define SE_JYUNI 24 // Places in Contest Appearing +#define SE_A 25 // Bard A +#define SE_I 26 // Bard I +#define SE_U 27 // Bard U +#define SE_E 28 // Bard E +#define SE_O 29 // Bard O +#define SE_N 30 // Bard N +#define SE_SEIKAI 31 // Success +#define SE_HAZURE 32 // Failure +#define SE_EXP 33 // Exp. Bar +#define SE_JITE_PYOKO 34 // Bunny Hop #define SE_MU_PACHI 35 -#define SE_TK_KASYA 36 +#define SE_TK_KASYA 36 // Mossdeep Gym/Trick House Switch #define SE_FU_ZAKU 37 #define SE_FU_ZAKU2 38 -#define SE_FU_ZUZUZU 39 -#define SE_RU_GASHIN 40 -#define SE_RU_GASYAN 41 -#define SE_RU_BARI 42 -#define SE_RU_HYUU 43 +#define SE_FU_ZUZUZU 39 // Lavaridge Gym Warp +#define SE_RU_GASHIN 40 // Sootopolis Gym - Stairs Appear +#define SE_RU_GASYAN 41 // Sootopolis Gym - Ice Breaking +#define SE_RU_BARI 42 // Sootopolis Gym - Stepping on Ice +#define SE_RU_HYUU 43 // Falling Down #define SE_KI_GASYAN 44 -#define SE_TK_WARPIN 45 -#define SE_TK_WARPOUT 46 -#define SE_TU_SAA 47 -#define SE_HI_TURUN 48 -#define SE_TRACK_MOVE 49 -#define SE_TRACK_STOP 50 -#define SE_TRACK_HAIK 51 -#define SE_TRACK_DOOR 52 +#define SE_TK_WARPIN 45 // Warp In +#define SE_TK_WARPOUT 46 // Warp Out +#define SE_TU_SAA 47 // Repel +#define SE_HI_TURUN 48 // Moving Obstacle in Fortree Gym +#define SE_TRACK_MOVE 49 // Moving Truck +#define SE_TRACK_STOP 50 // Moving Truck Stop +#define SE_TRACK_HAIK 51 // Moving Truck Unload +#define SE_TRACK_DOOR 52 // Moving Truck Door #define SE_MOTER 53 #define SE_CARD 54 -#define SE_SAVE 55 -#define SE_KON 56 -#define SE_KON2 57 -#define SE_KON3 58 -#define SE_KON4 59 -#define SE_SUIKOMU 60 -#define SE_NAGERU 61 -#define SE_TOY_C 62 -#define SE_TOY_D 63 -#define SE_TOY_E 64 -#define SE_TOY_F 65 -#define SE_TOY_G 66 -#define SE_TOY_A 67 -#define SE_TOY_B 68 -#define SE_TOY_C1 69 -#define SE_MIZU 70 -#define SE_HASHI 71 -#define SE_DAUGI 72 -#define SE_PINPON 73 -#define SE_FUUSEN1 74 -#define SE_FUUSEN2 75 -#define SE_FUUSEN3 76 -#define SE_TOY_KABE 77 -#define SE_TOY_DANGO 78 -#define SE_DOKU 79 -#define SE_ESUKA 80 -#define SE_T_AME 81 -#define SE_T_AME_E 82 -#define SE_T_OOAME 83 -#define SE_T_OOAME_E 84 -#define SE_T_KOAME 85 -#define SE_T_KOAME_E 86 -#define SE_T_KAMI 87 -#define SE_T_KAMI2 88 -#define SE_ELEBETA 89 -#define SE_HINSI 90 -#define SE_EXPMAX 91 -#define SE_TAMAKORO 92 -#define SE_TAMAKORO_E 93 +#define SE_SAVE 55 // Save +#define SE_KON 56 // Poké Ball Bounce 1 +#define SE_KON2 57 // Poké Ball Bounce 2 +#define SE_KON3 58 // Poké Ball Bounce 3 +#define SE_KON4 59 // Poké Ball Bounce 4 +#define SE_SUIKOMU 60 // Poké Ball Trade +#define SE_NAGERU 61 // Poké Ball Throw +#define SE_TOY_C 62 // Note C +#define SE_TOY_D 63 // Note D +#define SE_TOY_E 64 // Note E +#define SE_TOY_F 65 // Note F +#define SE_TOY_G 66 // Note G +#define SE_TOY_A 67 // Note A +#define SE_TOY_B 68 // Note B +#define SE_TOY_C1 69 // Note High C +#define SE_MIZU 70 // Puddle +#define SE_HASHI 71 // Boardwalk +#define SE_DAUGI 72 // Slots Credits +#define SE_PINPON 73 // Ding-dong! +#define SE_FUUSEN1 74 // Red Balloon +#define SE_FUUSEN2 75 // Blue Balloon +#define SE_FUUSEN3 76 // Yellow Balloon +#define SE_TOY_KABE 77 // Breakable Door +#define SE_TOY_DANGO 78 // Mud Ball +#define SE_DOKU 79 // Overworld Poison Damage +#define SE_ESUKA 80 // Escalator +#define SE_T_AME 81 // Rain +#define SE_T_AME_E 82 // Rain stop +#define SE_T_OOAME 83 // Heavy Rain +#define SE_T_OOAME_E 84 // Heavy Rain Stop +#define SE_T_KOAME 85 // Light Rain +#define SE_T_KOAME_E 86 // Light Rain Stop +#define SE_T_KAMI 87 // Thunder +#define SE_T_KAMI2 88 // Thunder 2 +#define SE_ELEBETA 89 // Elevator +#define SE_HINSI 90 // Low Health +#define SE_EXPMAX 91 // Exp. Max +#define SE_TAMAKORO 92 // Roulette Ball +#define SE_TAMAKORO_E 93 // Roulette Ball 2 #define SE_BASABASA 94 -#define SE_REGI 95 -#define SE_C_GAJI 96 -#define SE_C_MAKU_U 97 -#define SE_C_MAKU_D 98 +#define SE_REGI 95 // Cash Register +#define SE_C_GAJI 96 // Contest Hearts +#define SE_C_MAKU_U 97 // Contest Curtain rise +#define SE_C_MAKU_D 98 // Contest Curtain fall #define SE_C_PASI 99 #define SE_C_SYU 100 -#define SE_C_PIKON 101 -#define SE_REAPOKE 102 -#define SE_OP_BASYU 103 -#define SE_BT_START 104 -#define SE_DENDOU 105 -#define SE_JIHANKI 106 -#define SE_TAMA 107 -#define SE_Z_SCROLL 108 -#define SE_Z_PAGE 109 -#define SE_PN_ON 110 -#define SE_PN_OFF 111 -#define SE_Z_SEARCH 112 -#define SE_TAMAGO 113 -#define SE_TB_START 114 -#define SE_TB_KON 115 -#define SE_TB_KARA 116 +#define SE_C_PIKON 101 // Pokémon Appears in Contest +#define SE_REAPOKE 102 // Shiny Pokémon +#define SE_OP_BASYU 103 // Opening Movie -> Title Screen whoosh +#define SE_BT_START 104 // Battle Mugshot whoosh +#define SE_DENDOU 105 // Audience Cheering +#define SE_JIHANKI 106 // Vending Machine +#define SE_TAMA 107 // Orb Used +#define SE_Z_SCROLL 108 // Pokédex Scrolling +#define SE_Z_PAGE 109 // Pokédex Page +#define SE_PN_ON 110 // PokéNav On +#define SE_PN_OFF 111 // PokéNav Off +#define SE_Z_SEARCH 112 // Pokédex Search +#define SE_TAMAGO 113 // Egg hatch +#define SE_TB_START 114 // Battle - Poké Ball Tray slide in +#define SE_TB_KON 115 // Battle - Poké Ball Tray ball sound +#define SE_TB_KARA 116 // Battle - Poké Ball Tray slide out #define SE_BIDORO 117 -#define SE_W085 118 -#define SE_W085B 119 -#define SE_W231 120 -#define SE_W171 121 -#define SE_W233 122 -#define SE_W233B 123 -#define SE_W145 124 -#define SE_W145B 125 -#define SE_W145C 126 -#define SE_W240 127 -#define SE_W015 128 -#define SE_W081 129 -#define SE_W081B 130 -#define SE_W088 131 -#define SE_W016 132 -#define SE_W016B 133 -#define SE_W003 134 -#define SE_W104 135 -#define SE_W013 136 -#define SE_W196 137 -#define SE_W086 138 -#define SE_W004 139 -#define SE_W025 140 -#define SE_W025B 141 -#define SE_W152 142 -#define SE_W026 143 -#define SE_W172 144 -#define SE_W172B 145 -#define SE_W053 146 -#define SE_W007 147 -#define SE_W092 148 -#define SE_W221 149 -#define SE_W221B 150 -#define SE_W052 151 -#define SE_W036 152 -#define SE_W059 153 -#define SE_W059B 154 -#define SE_W010 155 -#define SE_W011 156 -#define SE_W017 157 -#define SE_W019 158 -#define SE_W028 159 -#define SE_W013B 160 -#define SE_W044 161 -#define SE_W029 162 -#define SE_W057 163 -#define SE_W056 164 -#define SE_W250 165 -#define SE_W030 166 -#define SE_W039 167 -#define SE_W054 168 -#define SE_W077 169 -#define SE_W020 170 -#define SE_W082 171 -#define SE_W047 172 -#define SE_W195 173 -#define SE_W006 174 -#define SE_W091 175 -#define SE_W146 176 -#define SE_W120 177 -#define SE_W153 178 -#define SE_W071B 179 -#define SE_W071 180 -#define SE_W103 181 -#define SE_W062 182 -#define SE_W062B 183 -#define SE_W048 184 -#define SE_W187 185 -#define SE_W118 186 -#define SE_W155 187 -#define SE_W122 188 -#define SE_W060 189 -#define SE_W185 190 -#define SE_W014 191 -#define SE_W043 192 -#define SE_W207 193 -#define SE_W207B 194 -#define SE_W215 195 -#define SE_W109 196 -#define SE_W173 197 -#define SE_W280 198 -#define SE_W202 199 -#define SE_W060B 200 -#define SE_W076 201 -#define SE_W080 202 -#define SE_W100 203 -#define SE_W107 204 -#define SE_W166 205 -#define SE_W129 206 -#define SE_W115 207 -#define SE_W112 208 -#define SE_W197 209 -#define SE_W199 210 -#define SE_W236 211 -#define SE_W204 212 -#define SE_W268 213 -#define SE_W070 214 -#define SE_W063 215 -#define SE_W127 216 -#define SE_W179 217 -#define SE_W151 218 -#define SE_W201 219 -#define SE_W161 220 -#define SE_W161B 221 -#define SE_W227 222 -#define SE_W227B 223 -#define SE_W226 224 -#define SE_W208 225 -#define SE_W213 226 -#define SE_W213B 227 -#define SE_W234 228 -#define SE_W260 229 -#define SE_W328 230 -#define SE_W320 231 -#define SE_W255 232 -#define SE_W291 233 -#define SE_W089 234 -#define SE_W239 235 -#define SE_W230 236 -#define SE_W281 237 -#define SE_W327 238 -#define SE_W287 239 -#define SE_W257 240 -#define SE_W253 241 -#define SE_W258 242 -#define SE_W322 243 -#define SE_W298 244 -#define SE_W287B 245 -#define SE_W114 246 -#define SE_W063B 247 +#define SE_W085 118 // Thunderbolt +#define SE_W085B 119 // Thunderbolt 2 +#define SE_W231 120 // Harden +#define SE_W171 121 // Nightmare +#define SE_W233 122 // Vital Throw +#define SE_W233B 123 // Vital Throw 2 +#define SE_W145 124 // Bubble +#define SE_W145B 125 // Bubble 2 +#define SE_W145C 126 // Bubble 3 +#define SE_W240 127 // Rain Dance +#define SE_W015 128 // Cut +#define SE_W081 129 // String Shot +#define SE_W081B 130 // String Shot 2 +#define SE_W088 131 // Rock Throw +#define SE_W016 132 // Gust +#define SE_W016B 133 // Gust 2 +#define SE_W003 134 // DoubleSlap +#define SE_W104 135 // Double Team +#define SE_W013 136 // Razor Wind +#define SE_W196 137 // Icy Wind +#define SE_W086 138 // Thunder Wave +#define SE_W004 139 // Comet Punch +#define SE_W025 140 // Mega Kick +#define SE_W025B 141 // Mega Kick 2 +#define SE_W152 142 // Crabhammer +#define SE_W026 143 // Jump Kick +#define SE_W172 144 // Flame Wheel +#define SE_W172B 145 // Flame Wheel 2 +#define SE_W053 146 // Flamethrower +#define SE_W007 147 // Fire Punch +#define SE_W092 148 // Toxic +#define SE_W221 149 // Sacred Fire +#define SE_W221B 150 // Sacred Fire 2 +#define SE_W052 151 // Ember +#define SE_W036 152 // Take Down +#define SE_W059 153 // Blizzard +#define SE_W059B 154 // Blizzard 2 +#define SE_W010 155 // Scratch +#define SE_W011 156 // Vicegrip +#define SE_W017 157 // Wing Attack +#define SE_W019 158 // Fly +#define SE_W028 159 // Sand-Attack +#define SE_W013B 160 // Razor Wind 2 +#define SE_W044 161 // Bite +#define SE_W029 162 // Headbutt +#define SE_W057 163 // Surf +#define SE_W056 164 // Hydro Pump +#define SE_W250 165 // Whirlpool +#define SE_W030 166 // Horn Attack +#define SE_W039 167 // Tail Whip +#define SE_W054 168 // Mist +#define SE_W077 169 // PoisonPowder +#define SE_W020 170 // Bind +#define SE_W082 171 // Dragon Rage +#define SE_W047 172 // Sing +#define SE_W195 173 // Perish Song +#define SE_W006 174 // Pay Day +#define SE_W091 175 // Dig +#define SE_W146 176 // Dizzy Punch +#define SE_W120 177 // Self-Destruct +#define SE_W153 178 // Explosion +#define SE_W071B 179 // Absorb 2 +#define SE_W071 180 // Absorb +#define SE_W103 181 // Screech +#define SE_W062 182 // BubbleBeam +#define SE_W062B 183 // BubbleBeam 2 +#define SE_W048 184 // Supersonic +#define SE_W187 185 // Belly Drum +#define SE_W118 186 // Metronome +#define SE_W155 187 // Bonemerang +#define SE_W122 188 // Lick +#define SE_W060 189 // Psybeam +#define SE_W185 190 // Faint Attack +#define SE_W014 191 // Swords Dance +#define SE_W043 192 // Leer +#define SE_W207 193 // Swagger +#define SE_W207B 194 // Swagger 2 +#define SE_W215 195 // Heal Bell +#define SE_W109 196 // Confuse Ray +#define SE_W173 197 // Snore +#define SE_W280 198 // Brick Break +#define SE_W202 199 // Giga Drain +#define SE_W060B 200 // Psybeam 2 +#define SE_W076 201 // SolarBeam +#define SE_W080 202 // Petal Dance +#define SE_W100 203 // Teleport +#define SE_W107 204 // Minimize +#define SE_W166 205 // Sketch +#define SE_W129 206 // Swift +#define SE_W115 207 // Reflect +#define SE_W112 208 // Barrier +#define SE_W197 209 // Detect +#define SE_W199 210 // Lock-On +#define SE_W236 211 // Moonlight +#define SE_W204 212 // Charm +#define SE_W268 213 // Charge +#define SE_W070 214 // Strength +#define SE_W063 215 // Hyper Beam +#define SE_W127 216 // Waterfall +#define SE_W179 217 // Reversal +#define SE_W151 218 // Acid Armor +#define SE_W201 219 // Sandstorm +#define SE_W161 220 // Tri-Attack +#define SE_W161B 221 // Tri-Attack 2 +#define SE_W227 222 // Encore +#define SE_W227B 223 // Encore 2 +#define SE_W226 224 // Baton Pass +#define SE_W208 225 // Milk Drink +#define SE_W213 226 // Attract +#define SE_W213B 227 // Attract 2 +#define SE_W234 228 // Morning Sun +#define SE_W260 229 // Flatter +#define SE_W328 230 // Sand Tomb +#define SE_W320 231 // GrassWhistle +#define SE_W255 232 // Spit Up +#define SE_W291 233 // Dive +#define SE_W089 234 // Earthquake +#define SE_W239 235 // Twister +#define SE_W230 236 // Sweet Scent +#define SE_W281 237 // Yawn +#define SE_W327 238 // Sky Uppercut +#define SE_W287 239 // Stat Increased +#define SE_W257 240 // Heat Wave +#define SE_W253 241 // Uproar +#define SE_W258 242 // Hail +#define SE_W322 243 // Cosmic Power +#define SE_W298 244 // Teeter Dance +#define SE_W287B 245 // Stat Decreased +#define SE_W114 246 // Haze +#define SE_W063B 247 // Hyper Beam 2 #define BGM_STOP 349 -#define BGM_TETSUJI 350 -#define BGM_FIELD13 351 -#define BGM_KACHI22 352 -#define BGM_KACHI2 353 -#define BGM_KACHI3 354 -#define BGM_KACHI5 355 -#define BGM_PCC 356 -#define BGM_NIBI 357 -#define BGM_SUIKUN 358 -#define BGM_DOORO1 359 -#define BGM_DOORO_X1 360 -#define BGM_DOORO_X3 361 -#define BGM_MACHI_S2 362 -#define BGM_MACHI_S4 363 -#define BGM_GIM 364 -#define BGM_NAMINORI 365 -#define BGM_DAN01 366 -#define BGM_FANFA1 367 -#define BGM_ME_ASA 368 -#define BGM_ME_BACHI 369 -#define BGM_FANFA4 370 -#define BGM_FANFA5 371 -#define BGM_ME_WAZA 372 -#define BGM_BIJYUTU 373 -#define BGM_DOORO_X4 374 -#define BGM_FUNE_KAN 375 -#define BGM_ME_SHINKA 376 -#define BGM_SHINKA 377 -#define BGM_ME_WASURE 378 -#define BGM_SYOUJOEYE 379 -#define BGM_BOYEYE 380 -#define BGM_DAN02 381 -#define BGM_MACHI_S3 382 -#define BGM_ODAMAKI 383 -#define BGM_B_TOWER 384 -#define BGM_SWIMEYE 385 -#define BGM_DAN03 386 -#define BGM_ME_KINOMI 387 -#define BGM_ME_TAMA 388 -#define BGM_ME_B_BIG 389 -#define BGM_ME_B_SMALL 390 -#define BGM_ME_ZANNEN 391 -#define BGM_BD_TIME 392 -#define BGM_TEST1 393 -#define BGM_TEST2 394 -#define BGM_TEST3 395 -#define BGM_TEST4 396 -#define BGM_TEST 397 -#define BGM_GOMACHI0 398 -#define BGM_GOTOWN 399 -#define BGM_POKECEN 400 -#define BGM_NEXTROAD 401 -#define BGM_GRANROAD 402 -#define BGM_CYCLING 403 -#define BGM_FRIENDLY 404 -#define BGM_MISHIRO 405 -#define BGM_TOZAN 406 -#define BGM_GIRLEYE 407 -#define BGM_MINAMO 408 -#define BGM_ASHROAD 409 -#define BGM_EVENT0 410 -#define BGM_DEEPDEEP 411 -#define BGM_KACHI1 412 -#define BGM_TITLE3 413 -#define BGM_DEMO1 414 -#define BGM_GIRL_SUP 415 -#define BGM_HAGESHII 416 -#define BGM_KAKKOII 417 -#define BGM_KAZANBAI 418 -#define BGM_AQA_0 419 -#define BGM_TSURETEK 420 -#define BGM_BOY_SUP 421 -#define BGM_RAINBOW 422 -#define BGM_AYASII 423 -#define BGM_KACHI4 424 -#define BGM_ROPEWAY 425 -#define BGM_CASINO 426 -#define BGM_HIGHTOWN 427 -#define BGM_SAFARI 428 -#define BGM_C_ROAD 429 -#define BGM_AJITO 430 -#define BGM_M_BOAT 431 -#define BGM_M_DUNGON 432 -#define BGM_FINECITY 433 -#define BGM_MACHUPI 434 -#define BGM_P_SCHOOL 435 -#define BGM_DENDOU 436 -#define BGM_TONEKUSA 437 -#define BGM_MABOROSI 438 -#define BGM_CON_FAN 439 -#define BGM_CONTEST0 440 -#define BGM_MGM0 441 -#define BGM_T_BATTLE 442 -#define BGM_OOAME 443 -#define BGM_HIDERI 444 -#define BGM_RUNECITY 445 -#define BGM_CON_K 446 -#define BGM_EIKOU_R 447 -#define BGM_KARAKURI 448 -#define BGM_HUTAGO 449 -#define BGM_SITENNOU 450 -#define BGM_YAMA_EYE 451 -#define BGM_CONLOBBY 452 -#define BGM_INTER_V 453 -#define BGM_DAIGO 454 -#define BGM_THANKFOR 455 -#define BGM_END 456 -#define BGM_BATTLE27 457 -#define BGM_BATTLE31 458 -#define BGM_BATTLE20 459 -#define BGM_BATTLE32 460 -#define BGM_BATTLE33 461 -#define BGM_BATTLE36 462 -#define BGM_BATTLE34 463 -#define BGM_BATTLE35 464 -#define BGM_BATTLE38 465 -#define BGM_BATTLE30 466 +#define BGM_TETSUJI 350 // Littleroot Town Test 'TETSUJI' +#define BGM_FIELD13 351 // GSC - Route 38 +#define BGM_KACHI22 352 // Wild Pokémon Defeated +#define BGM_KACHI2 353 // Wild Pokémon Defeated with Intro +#define BGM_KACHI3 354 // Gym Leader Defeated +#define BGM_KACHI5 355 // Victory! Elite Four +#define BGM_PCC 356 // Crystal - Pokémon Communication Center +#define BGM_NIBI 357 // GSC - Viridian/Saffron/Pewter/etc +#define BGM_SUIKUN 358 // Crystal - Battle! Legendary Beasts +#define BGM_DOORO1 359 // Route 101 +#define BGM_DOORO_X1 360 // Route 110 +#define BGM_DOORO_X3 361 // Route 120 +#define BGM_MACHI_S2 362 // Petalburg City +#define BGM_MACHI_S4 363 // Oldale Town +#define BGM_GIM 364 // Gym +#define BGM_NAMINORI 365 // Surfing +#define BGM_DAN01 366 // Caves and Darkness +#define BGM_FANFA1 367 // Level Up! +#define BGM_ME_ASA 368 // Pokémon Healed +#define BGM_ME_BACHI 369 // Obtained a Badge! +#define BGM_FANFA4 370 // Obtained an Item! +#define BGM_FANFA5 371 // Your Pokémon Just Evolved! +#define BGM_ME_WAZA 372 // Obtained a TM/HM! +#define BGM_BIJYUTU 373 // Lilycove Musseum +#define BGM_DOORO_X4 374 // Route 122/Intro +#define BGM_FUNE_KAN 375 // Slateport Museum +#define BGM_ME_SHINKA 376 // Evolution Intro +#define BGM_SHINKA 377 // Evolution +#define BGM_ME_WASURE 378 // Move Deleted +#define BGM_SYOUJOEYE 379 // Encounter! Tuber +#define BGM_BOYEYE 380 // Encounter! Boy +#define BGM_DAN02 381 // Abandoned Ship +#define BGM_MACHI_S3 382 // Fortree City +#define BGM_ODAMAKI 383 // Professor Birch's Lab +#define BGM_B_TOWER 384 // Battle Tower (RS) +#define BGM_SWIMEYE 385 // Encounter! Swimmer +#define BGM_DAN03 386 // Meteor Falls +#define BGM_ME_KINOMI 387 // Obtained a Berry! +#define BGM_ME_TAMA 388 // Awakening the Super-Ancient Pokémon +#define BGM_ME_B_BIG 389 // Slots Jackpot! +#define BGM_ME_B_SMALL 390 // Slots Victory! +#define BGM_ME_ZANNEN 391 // Too bad! +#define BGM_BD_TIME 392 // Roulette! +#define BGM_TEST1 393 // Contest Test 1 +#define BGM_TEST2 394 // Contest Test 2 +#define BGM_TEST3 395 // Contest Test 3 +#define BGM_TEST4 396 // Contest Test 4 +#define BGM_TEST 397 // Encounter! Gentleman (Test?) +#define BGM_GOMACHI0 398 // Verdanturf Town +#define BGM_GOTOWN 399 // Rustboro City +#define BGM_POKECEN 400 // Pokémon Center +#define BGM_NEXTROAD 401 // Route 104 +#define BGM_GRANROAD 402 // Route 119 +#define BGM_CYCLING 403 // Cycling +#define BGM_FRIENDLY 404 // Pokémart +#define BGM_MISHIRO 405 // Littleroot Town +#define BGM_TOZAN 406 // Sky Pillar +#define BGM_GIRLEYE 407 // Encounter! Girl +#define BGM_MINAMO 408 // Lilycove City +#define BGM_ASHROAD 409 // Route 111 +#define BGM_EVENT0 410 // Help me! +#define BGM_DEEPDEEP 411 // Underwater +#define BGM_KACHI1 412 // Victory! Trainer +#define BGM_TITLE3 413 // Title Screen +#define BGM_DEMO1 414 // Opening Movie +#define BGM_GIRL_SUP 415 // Encounter! May +#define BGM_HAGESHII 416 // Encounter! Biker +#define BGM_KAKKOII 417 // Encounter! Electric Trainer +#define BGM_KAZANBAI 418 // Route 113 +#define BGM_AQA_0 419 // Encounter! Team Aqua +#define BGM_TSURETEK 420 // Follow Me! +#define BGM_BOY_SUP 421 // Encounter! Brendan +#define BGM_RAINBOW 422 // Ever Grande City +#define BGM_AYASII 423 // Encounter! Psychic +#define BGM_KACHI4 424 // Victory! Aqua/Magma Grunt +#define BGM_ROPEWAY 425 // Cable Car +#define BGM_CASINO 426 // Game Corner +#define BGM_HIGHTOWN 427 // Dewford Town +#define BGM_SAFARI 428 // Safari Zone +#define BGM_C_ROAD 429 // Victory Toad +#define BGM_AJITO 430 // Aqua/Magma Hideout +#define BGM_M_BOAT 431 // Sailing +#define BGM_M_DUNGON 432 // Mt. Pyre (Inside) +#define BGM_FINECITY 433 // Slateport City +#define BGM_MACHUPI 434 // Mt. Pyre (Outside) +#define BGM_P_SCHOOL 435 // Pokémon Trainer's School +#define BGM_DENDOU 436 // Hall of Fame +#define BGM_TONEKUSA 437 // Lavaridge Town +#define BGM_MABOROSI 438 // Sealed Chamber +#define BGM_CON_FAN 439 // You are the Champion! +#define BGM_CONTEST0 440 // Pokémon Contest +#define BGM_MGM0 441 // Encounter! Team Magma +#define BGM_T_BATTLE 442 // Opening Battle +#define BGM_OOAME 443 // The Flood +#define BGM_HIDERI 444 // The Drought +#define BGM_RUNECITY 445 // Sootopolis City +#define BGM_CON_K 446 // Berry Blending Results +#define BGM_EIKOU_R 447 // Hall of Fame +#define BGM_KARAKURI 448 // Trick House +#define BGM_HUTAGO 449 // Encounter! Kid +#define BGM_SITENNOU 450 // Encounter! Elite Four +#define BGM_YAMA_EYE 451 // Encounter! Hiker +#define BGM_CONLOBBY 452 // Contest Lobby +#define BGM_INTER_V 453 // Encounter! Gabby and Ty +#define BGM_DAIGO 454 // Encounter! Wallace +#define BGM_THANKFOR 455 // Credits +#define BGM_END 456 // The End +#define BGM_BATTLE27 457 // Battle! Wild Pokémon +#define BGM_BATTLE31 458 // Battle! Team Aqua/Magma +#define BGM_BATTLE20 459 // Battle! Trainer +#define BGM_BATTLE32 460 // Battle! Gym Leader +#define BGM_BATTLE33 461 // Battle! Champion +#define BGM_BATTLE36 462 // Battle! Regi Trio +#define BGM_BATTLE34 463 // Battle! Legendary Pokémon +#define BGM_BATTLE35 464 // Battle! Rival +#define BGM_BATTLE38 465 // Battle! Elite Four +#define BGM_BATTLE30 466 // Battle! Archie/Maxie #define BGM_ROUTE_118 0x7FFF // What is this for? diff --git a/include/contest.h b/include/contest.h index 6e71358a2..6b1f1f520 100644 --- a/include/contest.h +++ b/include/contest.h @@ -67,6 +67,22 @@ struct ContestPokemon /*0x3C*/ u32 otId; // otId }; // wow +struct ContestAIInfo { + /*0x00*/ u8 aiState; + /*0x02*/ u16 unk2; + /*0x04*/ u8 unk4; + /*0x05*/ u8 unk5[4]; + /*0x09*/ u8 aiAction; + /*0x0A*/ u8 fillerA[0x6]; // TODO: don't know what's here + /*0x10*/ u8 unk10; + /*0x14*/ u32 flags; + /*0x18*/ s16 scriptResult; + /*0x1A*/ s16 scriptArr[3]; + /*0x20*/ u32 stack[8]; + /*0x40*/ u8 unk40; + /*0x41*/ u8 unk41; +}; + extern struct ContestPokemon gContestMons[]; extern const struct ContestMove gContestMoves[]; extern const struct ContestEffect gContestEffects[]; @@ -86,6 +102,7 @@ void sub_80B0F28(u8); bool8 Contest_SaveWinner(u8); u8 sub_80B2C4C(u8, u8); void Contest_ResetWinners(void); +s8 Contest_GetMoveExcitement(u16); // Contest Shared EWRAM @@ -135,48 +152,48 @@ struct Contest struct ContestantStatus { - s16 appeal1; // move appeal? - s16 appeal2; // final appeal after end of turn, maybe? - s16 unk4; - u16 currMove; - u16 prevMove; - u8 moveCategory; - u8 unkB_0:2; - u8 unkB_2:2; - u8 moveRepeatCount:3; - u8 unkB_7:1; // used a one-time move? - u8 unkC_0:1; - u8 unkC_1:2; - s8 unkD; - u8 unkE; - u8 unkF; - u8 unk10_0:1; - u8 unk10_1:1; - u8 unk10_2:1; - u8 unk10_3:1; - u8 unk10_4:2; - u8 unk10_6:2; - u8 unk11_0:2; - u8 unk11_2:1; - u8 unk11_3:1; - u8 unk11_4:1; - u8 unk11_5:1; - u8 unk12; - u8 unk13; // status action? - u8 unk14; - u8 disappointedRepeat:1; - u8 unk15_1:1; - u8 unk15_2:1; - u8 unk15_3:1; - u8 unk15_4:1; - u8 unk15_5:1; - u8 unk15_6:1; - u8 unk16; - u8 unk17; - u8 unk18; - u8 unk19; // turn position - u8 attentionLevel; // How much the Pokemon "stood out" - u8 unk1B; + /*0x00*/ s16 appeal1; // move appeal? + /*0x02*/ s16 appeal2; // final appeal after end of turn, maybe? + /*0x04*/ s16 unk4; + /*0x06*/ u16 currMove; + /*0x08*/ u16 prevMove; + /*0x0A*/ u8 moveCategory; + /*0x0B*/ u8 unkB_0:2; + u8 unkB_2:2; + u8 moveRepeatCount:3; + u8 unkB_7:1; // used a one-time move? + /*0x0C*/ u8 unkC_0:1; + u8 unkC_1:2; + /*0x0D*/ s8 unkD; + /*0x0E*/ u8 unkE; + /*0x0F*/ u8 unkF; + /*0x10*/ u8 unk10_0:1; + u8 unk10_1:1; + u8 unk10_2:1; + u8 unk10_3:1; + u8 unk10_4:2; + u8 unk10_6:2; + /*0x11*/ u8 unk11_0:2; + u8 unk11_2:1; + u8 unk11_3:1; + u8 unk11_4:1; + u8 unk11_5:1; + /*0x12*/ u8 unk12; + /*0x13*/ u8 unk13; // status action? + /*0x14*/ u8 unk14; + /*0x15*/ u8 disappointedRepeat:1; + u8 unk15_1:1; + u8 unk15_2:1; + u8 unk15_3:1; + u8 unk15_4:1; + u8 unk15_5:1; + u8 unk15_6:1; + /*0x16*/ u8 unk16; + /*0x17*/ u8 unk17; + /*0x18*/ u8 unk18; + /*0x19*/ u8 unk19; // turn position + /*0x1A*/ u8 attentionLevel; // How much the Pokemon "stood out" + /*0x1B*/ u8 unk1B; }; struct UnknownContestStruct3 @@ -241,6 +258,7 @@ struct UnknownContestStruct6 s32 unkC; }; +// TODO: Please move these to ewram.h once the defines are settled down and figured out completely. #define shared15800 (gSharedMem + 0x15800) #define shared15DE0 (*(struct ContestWinner *)(gSharedMem + 0x15DE0)) #define shared16800 (gSharedMem + 0x16800) @@ -248,7 +266,6 @@ struct UnknownContestStruct6 #define shared18004 ((u16 *)(gSharedMem + 0x18004)) #define sContest (*(struct Contest *)(gSharedMem + 0x19204)) #define sContestantStatus ((struct ContestantStatus *)(gSharedMem + 0x19260)) -#define shared192D0 (*(struct UnknownContestStruct7 *)(gSharedMem + 0x192D0)) #define shared192E4 (gSharedMem + 0x192E4) #define shared19328 (*(struct UnknownContestStruct5 *)(gSharedMem + 0x19328)) #define shared19338 ((struct UnknownContestStruct4 *)(gSharedMem + 0x19338)) diff --git a/include/contest_ai.h b/include/contest_ai.h new file mode 100644 index 000000000..da143b541 --- /dev/null +++ b/include/contest_ai.h @@ -0,0 +1,16 @@ +#ifndef GUARD_CONTESTAI_H +#define GUARD_CONTESTAI_H + +// AI states +enum +{ + CONTESTAI_SETTING_UP, + CONTESTAI_PROCESSING, + CONTESTAI_FINISHED, + CONTESTAI_DO_NOT_PROCESS +}; + +void ContestAI_ResetAI(u8); +u8 ContestAI_GetActionToUse(void); + +#endif diff --git a/include/easy_chat.h b/include/easy_chat.h index c68a3fa02..58750fa92 100644 --- a/include/easy_chat.h +++ b/include/easy_chat.h @@ -114,8 +114,6 @@ struct Shared1000 u8 unk9F8E[7]; // unknown length }; -extern u8 gUnknown_020388AC; - // const pointer to shared1000. easy_chat might be two separate files. extern struct Shared1000 *const gEasyChatStruct; diff --git a/include/ewram.h b/include/ewram.h index 809d4ff66..6f42925c1 100755..100644 --- a/include/ewram.h +++ b/include/ewram.h @@ -9,7 +9,7 @@ extern u8 gSharedMem[]; // dupes can be determined to be the same, they will be deliberate // seperated. #define eWeatherPaletteData (*(struct WeatherPaletteData *)gSharedMem) -#define BATTLE_STRUCT ((struct BattleStruct *) (gSharedMem + 0x0)) +#define gBattleStruct ((struct BattleStruct *) (gSharedMem + 0x0)) #define ewram0_2 (*(struct Struct2000000 *)(gSharedMem + 0x0)) #define namingScreenData (*(struct NamingScreenData *)(gSharedMem + 0x0)) #define ewramBerryPic (gSharedMem + 0x0) @@ -20,7 +20,7 @@ extern u8 gSharedMem[]; #define eBrendanSprite (gSharedMem + 0x0) #define ewram0_6 (u32)(&gSharedMem[0]) #define ewram0_7 (&gSharedMem[0]) -#define eSaveSection (struct SaveSection *)(gSharedMem + 0x0) +#define eSaveSection (struct SaveSector *)(gSharedMem + 0x0) #define ewram0arr ((u8 (*)[32])gSharedMem) #define eVoidSharedArr (void *)(ewram_addr + 0x0) #define eVoidSharedArr2 (u32)(ewram_addr) // ew(ram) @@ -234,6 +234,8 @@ extern u8 gSharedMem[]; #define eCableCar2 ((struct CableCarEwramStruct2 *)(gSharedMem + 0x19000)) #define ePokedexView3 (struct PokedexView *)(gSharedMem + 0x19000) #define eRoulette ((struct Roulette *)(gSharedMem + 0x19000)) +#define shared192D0 (*(struct UnknownContestStruct7 *)(gSharedMem + 0x192D0)) +#define eContestAI ((struct ContestAIInfo *)(gSharedMem + 0x192E4)) #define EWRAM_19348 (*(u16 *)(gSharedMem + 0x19348)) #define ewram19800 (&gSharedMem[0x19800]) #define ePokedexView4 (struct PokedexView *)(gSharedMem + 0x19800) diff --git a/include/gba/isagbprint.h b/include/gba/isagbprint.h index c5eb456c3..c5eb456c3 100755..100644 --- a/include/gba/isagbprint.h +++ b/include/gba/isagbprint.h diff --git a/include/graphics.h b/include/graphics.h index 00a210350..76a45f6f6 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -51,11 +51,7 @@ extern const u8 gMonFootprint_QuestionMark[]; extern const u8 gContestNextTurnGfx[]; extern const u8 gContestNextTurnNumbersGfx[]; extern const u8 gContestNextTurnRandomGfx[]; -extern const u8 gBattleAnimSpriteSheet_264[]; -extern const u8 gBattleAnimSpritePalette_264[]; -extern const u8 gBattleAnimSpritePalette_265[]; -extern const u8 gBattleAnimSpritePalette_067[]; -extern const u8 gBattleAnimSpritePalette_068[]; +// extern const u8 gBattleAnimSpriteSheet_264[]; extern const u8 gContestApplauseGfx[]; extern const u8 gContestApplauseMeterGfx[]; extern const u16 gContestPal[]; @@ -2743,4 +2739,602 @@ extern const u16 gCableCar_Pal[]; extern const u16 gCableCarBG_Pal[]; extern const u8 gCableCarBG_Gfx[]; +// data/graphics.s +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_000; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_001; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_002; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_003; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_004; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_005; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_006; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_007; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_008; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_009; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_010; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_011; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_012; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_013; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_014; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_015; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_016; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_017; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_018; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_019; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_020; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_021; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_021; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_023; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_024; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_025; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_026; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_027; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_028; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_029; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_030; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_031; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_032; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_033; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_034; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_035; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_036; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_037; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_038; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_039; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_040; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_041; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_042; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_043; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_044; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_045; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_046; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_046; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_048; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_048; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_050; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_051; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_052; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_053; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_054; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_055; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_056; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_057; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_058; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_059; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_060; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_061; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_062; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_063; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_064; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_065; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_066; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_070; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_071; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_072; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_073; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_074; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_075; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_076; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_077; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_078; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_079; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_080; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_081; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_082; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_083; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_084; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_085; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_086; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_087; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_088; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_089; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_090; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_091; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_092; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_093; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_094; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_095; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_096; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_097; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_098; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_099; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_100; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_101; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_102; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_103; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_104; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_105; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_106; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_107; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_108; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_109; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_110; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_111; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_112; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_113; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_114; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_115; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_116; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_117; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_118; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_119; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_120; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_121; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_122; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_123; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_124; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_125; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_126; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_127; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_128; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_129; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_130; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_131; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_132; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_133; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_134; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_135; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_136; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_137; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_138; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_139; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_140; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_141; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_142; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_143; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_144; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_145; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_146; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_147; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_148; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_149; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_150; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_151; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_152; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_153; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_154; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_155; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_156; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_157; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_158; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_159; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_160; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_161; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_162; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_163; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_166; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_171; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_173; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_174; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_175; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_176; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_177; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_178; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_179; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_180; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_181; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_182; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_183; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_184; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_185; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_186; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_187; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_188; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_189; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_190; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_191; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_192; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_193; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_194; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_195; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_196; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_197; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_198; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_199; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_200; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_201; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_202; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_203; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_204; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_205; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_206; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_207; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_208; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_209; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_210; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_211; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_212; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_213; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_214; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_215; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_210; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_217; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_218; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_210; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_220; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_221; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_222; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_223; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_224; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_225; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_226; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_227; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_228; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_229; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_230; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_231; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_232; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_233; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_234; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_235; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_235; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_235; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_238; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_239; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_240; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_241; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_242; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_243; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_244; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_245; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_246; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_247; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_248; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_249; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_250; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_251; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_252; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_253; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_254; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_255; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_256; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_257; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_258; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_260; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_261; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_262; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_263; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_264; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_266; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_269; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_270; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_271; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_272; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_273; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_274; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_275; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_276; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_277; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_278; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_279; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_280; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_281; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_282; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_283; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_284; +extern struct CompressedSpriteSheet gBattleAnimSpriteSheet_285; + +extern struct CompressedSpritePalette gBattleAnimSpritePalette_000; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_001; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_002; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_003; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_004; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_005; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_006; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_007; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_008; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_009; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_010; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_011; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_012; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_013; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_014; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_015; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_016; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_016; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_018; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_019; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_020; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_021; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_022; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_023; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_024; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_025; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_026; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_027; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_028; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_029; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_030; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_031; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_032; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_033; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_033; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_033; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_036; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_036; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_038; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_039; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_038; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_038; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_042; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_043; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_044; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_045; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_046; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_047; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_048; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_049; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_050; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_050; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_050; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_026; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_054; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_050; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_056; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_057; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_058; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_059; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_060; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_061; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_062; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_063; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_064; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_065; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_066; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_067; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_068; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_065; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_070; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_070; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_072; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_073; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_074; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_075; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_076; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_076; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_078; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_078; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_080; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_081; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_082; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_083; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_084; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_085; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_086; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_087; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_088; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_089; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_090; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_091; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_092; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_093; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_094; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_095; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_096; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_097; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_094; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_099; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_100; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_101; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_101; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_103; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_104; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_105; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_105; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_107; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_107; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_109; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_109; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_111; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_112; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_113; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_114; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_115; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_116; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_117; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_118; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_119; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_120; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_121; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_122; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_122; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_124; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_125; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_126; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_127; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_128; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_128; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_130; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_130; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_132; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_133; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_133; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_135; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_136; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_135; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_135; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_139; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_140; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_141; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_141; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_143; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_144; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_139; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_115; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_147; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_148; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_148; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_150; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_150; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_152; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_153; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_154; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_155; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_156; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_157; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_158; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_159; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_160; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_161; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_162; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_163; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_164; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_165; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_166; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_167; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_168; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_169; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_170; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_171; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_172; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_174; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_175; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_176; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_177; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_178; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_179; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_182; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_183; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_184; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_185; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_186; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_187; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_188; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_189; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_190; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_191; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_192; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_193; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_194; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_195; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_196; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_197; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_198; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_199; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_200; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_201; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_202; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_203; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_204; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_205; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_206; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_207; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_209; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_210; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_211; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_215; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_216; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_217; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_218; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_219; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_220; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_221; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_222; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_223; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_224; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_225; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_226; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_228; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_229; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_230; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_231; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_233; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_234; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_235; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_236; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_237; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_238; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_239; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_240; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_241; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_242; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_243; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_244; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_245; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_248; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_249; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_251; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_252; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_253; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_254; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_255; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_256; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_257; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_258; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_259; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_260; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_261; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_262; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_263; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_264; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_265; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_266; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_267; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_268; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_269; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_270; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_271; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_272; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_274; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_277; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_278; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_279; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_280; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_281; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_282; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_283; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_284; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_285; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_286; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_287; +extern struct CompressedSpritePalette gBattleAnimSpritePalette_288; + +extern struct BattleAnimBackground gBattleAnimBackgroundImage_00; +extern struct BattleAnimBackground gBattleAnimBackgroundImage_02; +extern struct BattleAnimBackground gBattleAnimBackgroundImage_03; +extern struct BattleAnimBackground gBattleAnimBackgroundImage_04; +extern struct BattleAnimBackground gBattleAnimBackgroundImage_07; +extern struct BattleAnimBackground gBattleAnimBackgroundImage_09; +extern struct BattleAnimBackground gBattleAnimBackgroundImage_11; +extern struct BattleAnimBackground gBattleAnimBackgroundImage_12; +extern struct BattleAnimBackground gBattleAnimBackgroundImage_15; +extern struct BattleAnimBackground gBattleAnimBackgroundImage_16; +extern struct BattleAnimBackground gBattleAnimBackgroundImage_17; +extern struct BattleAnimBackground gBattleAnimBackgroundImage_20; +extern struct BattleAnimBackground gBattleAnimBackgroundImage_21; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_00; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_02; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_03; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_04; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_07; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_09; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_11; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_12; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_15; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_16; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_17; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_18; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_20; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_21; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_22; +extern struct BattleAnimBackground gBattleAnimBackgroundPalette_24; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_00; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_02; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_03; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_04; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_05; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_06; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_07; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_08; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_09; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_10; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_11; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_12; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_13; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_14; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_15; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_16; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_17; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_20; +extern struct BattleAnimBackground gBattleAnimBackgroundTilemap_21; + #endif // GUARD_GRAPHICS_H diff --git a/include/pokemon.h b/include/pokemon.h index 539323bdb..8f1b46387 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -351,6 +351,8 @@ struct BattlePokemon /*0x54*/ u32 otId; }; +// Shouldn't these be the same enum? + enum { STAT_STAGE_HP, // 0 @@ -628,5 +630,8 @@ void PartySpreadPokerus(struct Pokemon *party); struct Sprite *sub_80F7920(u16, u16, const u16 *); +bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId); + + #endif // GUARD_POKEMON_H diff --git a/include/pokemon_item_effect.h b/include/pokemon_item_effect.h index c09649aff..014612b05 100644 --- a/include/pokemon_item_effect.h +++ b/include/pokemon_item_effect.h @@ -1,6 +1,6 @@ #ifndef GUARD_POKEMON_ITEM_EFFECT_H #define GUARD_POKEMON_ITEM_EFFECT_H -bool8 ExecuteTableBasedItemEffect_(struct Pokemon *mon, u16, u8, u16); +bool8 ExecuteTableBasedItemEffect_(struct Pokemon *mon, u16, u8, u8); #endif // GUARD_POKEMON_ITEM_EFFECT_H diff --git a/include/region_map_sections.h b/include/region_map_sections.h index a3bd60b59..a3bd60b59 100755..100644 --- a/include/region_map_sections.h +++ b/include/region_map_sections.h diff --git a/include/save.h b/include/save.h index c35ad547a..13e07d06a 100644 --- a/include/save.h +++ b/include/save.h @@ -1,85 +1,38 @@ #ifndef GUARD_SAVE_H #define GUARD_SAVE_H -struct SaveSectionLocation -{ - u8 *data; - u16 size; -}; - -struct SaveSection -{ - u8 data[0xFF4]; - u16 id; - u16 checksum; - u32 security; - u32 counter; -}; // size is 0x1000 - -// headless save section? -struct UnkSaveSection -{ - u8 data[0xFF4]; - u32 security; -}; // size is 0xFF8 - // Ruby/Sapphire's save data is Flash 128K, which is 32 save sectors. #define NUM_SECTORS 32 // defined in agb_flash but not in a header -#define UNKNOWN_CHECK_VALUE 0x8012025 +#define SAVE_STATUS_EMPTY 0 +#define SAVE_STATUS_OK 1 +#define SAVE_STATUS_NO_FLASH 4 +#define SAVE_STATUS_ERROR 0xFF -// SetDamagedSectorBits states -enum -{ - ENABLE, - DISABLE, - CHECK // unused -}; +extern u16 gSaveFileStatus; + +void Save_EraseAllData(void); +void Save_ResetSaveCounters(void); -// Do save types enum { - NORMAL_SAVE, - LINK_SAVE, - EREADER_SAVE, // mossdeep event - HOF_SAVE, - DIFFERENT_FILE_SAVE, - HOF_DELETE_SAVE // unused + SAVE_NORMAL, + SAVE_LINK, + SAVE_EREADER, + SAVE_HALL_OF_FAME, + SAVE_OVERWRITE_DIFFERENT_FILE, + SAVE_HALL_OF_FAME_ERASE_BEFORE, // unused }; -void ClearSaveData(void); -void ResetSaveCounters(void); -bool32 ManipulateSectorBits(u8 op, u8 bit); -u8 save_write_to_flash(u16 a1, const struct SaveSectionLocation *a2); -u8 HandleWriteSector(u16, const struct SaveSectionLocation *); -u8 HandleWriteSectorNBytes(u8 sector, u8 *data, u16 size); -u8 TryWriteSector(u8, u8 *); -u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectionLocation *location); -u32 RestoreSaveBackupVars(const struct SaveSectionLocation *location); -u8 sub_812550C(u16 a1, const struct SaveSectionLocation *location); -u8 sub_812556C(u16 a1, const struct SaveSectionLocation *location); -u8 sub_81255B8(u16, const struct SaveSectionLocation *location); -u8 sub_8125758(u16 a1, const struct SaveSectionLocation *location); -u8 sub_81257F0(u16 a1, const struct SaveSectionLocation *location); -u8 sub_812587C(u16 a1, const struct SaveSectionLocation *location); -u8 sub_81258BC(u16, const struct SaveSectionLocation *location); -u8 GetSaveValidStatus(const struct SaveSectionLocation *location); -u8 sub_8125B88(u8 a1, u8 *data, u16 size); -u8 DoReadFlashWholeSection(u8, struct SaveSection *); -u16 CalculateChecksum(void *, u16); -u8 HandleSavingData(u8 saveType); -u8 TrySavingData(u8 saveType); +u8 Save_WriteDataInternal(u8 saveType); +u8 Save_WriteData(u8 saveType); + u8 sub_8125D80(void); bool8 sub_8125DA8(void); u8 sub_8125DDC(void); u8 sub_8125E04(void); u8 sub_8125E2C(void); bool8 sub_8125E6C(void); -u8 sub_8125EC8(u8 a1); -bool8 unref_sub_8125F4C(struct UnkSaveSection *a1); -u8 unref_sub_8125FA0(void); -u8 unref_sub_8125FF0(u8 *data, u16 size); -u8 unref_sub_8126068(u8 sector, u8 *data, u32 size); -u8 unref_sub_8126080(u8 sector, u8 *data); +u8 Save_LoadGameData(u8 a1); #endif // GUARD_SAVE_H diff --git a/ld_script.txt b/ld_script.txt index 0cb2d0262..7bc64638c 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -61,7 +61,7 @@ SECTIONS { src/pokemon/pokemon_1.o(.text); src/battle/calculate_base_damage.o(.text); src/pokemon/pokemon_2.o(.text); - asm/pokemon_item_effect.o(.text); + src/pokemon/pokemon_item_effect.o(.text); src/pokemon/pokemon_3.o(.text); src/de_rom_8040FE0.o(.text); src/engine/trig.o(.text); @@ -355,7 +355,7 @@ SECTIONS { src/engine/save.o(.text); src/engine/mystery_event_script.o(.text); src/field/field_effect_helpers.o(.text); - asm/contest_ai.o(.text); + src/contest_ai.o(.text); src/unused_81258BC.o(.text); src/battle/anim/sfx.o(.text); src/battle/battle_controller_safari.o(.text); @@ -526,7 +526,6 @@ SECTIONS { src/engine/tileset_anim.o(.rodata); src/engine/palette.o(.rodata); src/engine/sound.o(.rodata); - data/battle_anim.o(.rodata); src/battle/battle_anim.o(.rodata); src/rom_8077ABC.o(.rodata); data/map_events.o(.rodata); @@ -553,7 +552,7 @@ SECTIONS { src/pokemon/pokemon_summary_screen.o(.rodata); src/field/fldeff_cut.o(.rodata); src/field/item_menu.o(.rodata); - data/battle_anim_80A7E7C.o(.rodata); + src/battle/battle_anim_80A7E7C.o(.rodata); src/field/item.o(.rodata); src/debug/matsuda_debug_menu.o(.rodata); data/contest.o(.rodata); @@ -615,7 +614,7 @@ SECTIONS { src/scene/cable_car.o(.rodata); src/engine/save.o(.rodata); src/field/field_effect_helpers.o(.rodata); - data/contest_ai.o(.rodata); + src/contest_ai.o(.rodata); src/battle/battle_controller_safari.o(.rodata); data/battle_anim_812C144.o(.rodata); src/pokemon/learn_move.o(.rodata); diff --git a/sound/song_table.inc b/sound/song_table.inc index ac2e3b494..d2aa7d327 100644 --- a/sound/song_table.inc +++ b/sound/song_table.inc @@ -1,253 +1,253 @@ .align 2 gSongTable:: @ 845548C song se_stop, 0, 0 - song se_kaifuku, 1, 1 - song se_pc_logon, 1, 1 - song se_pc_off, 1, 1 - song se_pc_on, 1, 1 - song se_select, 2, 2 - song se_win_open, 1, 1 - song se_wall_hit, 2, 2 - song se_door, 1, 1 - song se_kaidan, 1, 1 - song se_dansa, 1, 1 - song se_jitensya, 1, 1 - song se_kouka_l, 1, 1 - song se_kouka_m, 1, 1 - song se_kouka_h, 1, 1 - song se_bowa2, 1, 1 - song se_poke_dead, 1, 1 - song se_nigeru, 1, 1 - song se_jido_doa, 1, 1 - song se_naminori, 1, 1 - song se_ban, 1, 1 - song se_pin, 1, 1 - song se_boo, 1, 1 - song se_bowa, 1, 1 - song se_jyuni, 2, 2 - song se_a, 1, 1 - song se_i, 1, 1 - song se_u, 1, 1 - song se_e, 1, 1 - song se_o, 1, 1 - song se_n, 1, 1 - song se_seikai, 1, 1 - song se_hazure, 1, 1 - song se_exp, 1, 1 - song se_jite_pyoko, 1, 1 + song se_kaifuku, 1, 1 @ Healing Item + song se_pc_logon, 1, 1 @ PC Logon + song se_pc_off, 1, 1 @ PC Shutdown + song se_pc_on, 1, 1 @ PC Startup + song se_select, 2, 2 @ Cursor Selection + song se_win_open, 1, 1 @ Start Menu + song se_wall_hit, 2, 2 @ Wall Bump + song se_door, 1, 1 @ Opening Door + song se_kaidan, 1, 1 @ Stairs + song se_dansa, 1, 1 @ Ledge + song se_jitensya, 1, 1 @ Bicycle Bell + song se_kouka_l, 1, 1 @ Not Very Effective + song se_kouka_m, 1, 1 @ Normal Effectiveness + song se_kouka_h, 1, 1 @ Super Effective + song se_bowa2, 1, 1 @ Pokémon Withdrawl + song se_poke_dead, 1, 1 @ Pokémon Fainted + song se_nigeru, 1, 1 @ Flee from Wild Battle + song se_jido_doa, 1, 1 @ Pokémon Center Door + song se_naminori, 1, 1 @ Briney's Ship + song se_ban, 1, 1 @ Bang + song se_pin, 1, 1 @ Exclamation Bubble + song se_boo, 1, 1 @ Contest Jam + song se_bowa, 1, 1 @ Giving Poké Ball to Nurse, Poké Ball wiggle + song se_jyuni, 2, 2 @ Places in Contest Appearing + song se_a, 1, 1 @ Bard A + song se_i, 1, 1 @ Bard I + song se_u, 1, 1 @ Bard U + song se_e, 1, 1 @ Bard E + song se_o, 1, 1 @ Bard O + song se_n, 1, 1 @ Bard N + song se_seikai, 1, 1 @ Success + song se_hazure, 1, 1 @ Failure + song se_exp, 1, 1 @ Exp. Bar + song se_jite_pyoko, 1, 1 @ Bunny Hop song se_mu_pachi, 1, 1 - song se_tk_kasya, 1, 1 + song se_tk_kasya, 1, 1 @ Mossdeep Gym/Trick House Switch song se_fu_zaku, 1, 1 song se_fu_zaku2, 1, 1 - song se_fu_zuzuzu, 1, 1 - song se_ru_gashin, 1, 1 - song se_ru_gasyan, 1, 1 - song se_ru_bari, 1, 1 - song se_ru_hyuu, 1, 1 + song se_fu_zuzuzu, 1, 1 @ Lavaridge Gym Warp + song se_ru_gashin, 1, 1 @ Sootopolis Gym - Stairs Appear + song se_ru_gasyan, 1, 1 @ Sootopolis Gym - Ice Breaking + song se_ru_bari, 1, 1 @ Sootopolis Gym - Walking on Ice + song se_ru_hyuu, 1, 1 @ Falling Down song se_ki_gasyan, 2, 2 - song se_tk_warpin, 1, 1 - song se_tk_warpout, 1, 1 - song se_tu_saa, 1, 1 - song se_hi_turun, 1, 1 - song se_track_move, 1, 1 - song se_track_stop, 1, 1 - song se_track_haik, 2, 2 - song se_track_door, 1, 1 + song se_tk_warpin, 1, 1 @ Warp In + song se_tk_warpout, 1, 1 @ Warp Out + song se_tu_saa, 1, 1 @ Repel + song se_hi_turun, 1, 1 @ Moving Obstacle in Fortree Gym + song se_track_move, 1, 1 @ Moving Truck + song se_track_stop, 1, 1 @ Moving Truck Stop + song se_track_haik, 2, 2 @ Moving Truck Unload + song se_track_door, 1, 1 @ Moving Truck Door song se_moter, 2, 2 song se_card, 1, 1 - song se_save, 1, 1 - song se_kon, 1, 1 - song se_kon2, 1, 1 - song se_kon3, 1, 1 - song se_kon4, 1, 1 - song se_suikomu, 2, 2 - song se_nageru, 1, 1 - song se_toy_c, 2, 2 - song se_toy_d, 2, 2 - song se_toy_e, 2, 2 - song se_toy_f, 2, 2 - song se_toy_g, 2, 2 - song se_toy_a, 2, 2 - song se_toy_b, 2, 2 - song se_toy_c1, 2, 2 - song se_mizu, 2, 2 - song se_hashi, 2, 2 - song se_daugi, 1, 1 - song se_pinpon, 1, 1 - song se_fuusen1, 2, 2 - song se_fuusen2, 2, 2 - song se_fuusen3, 2, 2 - song se_toy_kabe, 2, 2 - song se_toy_dango, 2, 2 - song se_doku, 1, 1 - song se_esuka, 1, 1 - song se_t_ame, 3, 3 - song se_t_ame_e, 3, 3 - song se_t_ooame, 3, 3 - song se_t_ooame_e, 3, 3 - song se_t_koame, 3, 3 - song se_t_koame_e, 3, 3 - song se_t_kami, 1, 1 - song se_t_kami2, 1, 1 - song se_elebeta, 1, 1 - song se_hinsi, 3, 3 - song se_expmax, 1, 1 - song se_tamakoro, 2, 2 - song se_tamakoro_e, 2, 2 + song se_save, 1, 1 @ Save + song se_kon, 1, 1 @ Poke Ball Bounce 1 + song se_kon2, 1, 1 @ Poké Ball Bounce 2 + song se_kon3, 1, 1 @ Poké Ball Bounce 3 + song se_kon4, 1, 1 @ Poké Ball Bounce 4 + song se_suikomu, 2, 2 @ Poké Ball Trade + song se_nageru, 1, 1 @ Poké Ball Throw + song se_toy_c, 2, 2 @ Note C + song se_toy_d, 2, 2 @ Note D + song se_toy_e, 2, 2 @ Note E + song se_toy_f, 2, 2 @ Note F + song se_toy_g, 2, 2 @ Note G + song se_toy_a, 2, 2 @ Note A + song se_toy_b, 2, 2 @ Note B + song se_toy_c1, 2, 2 @ Note High C + song se_mizu, 2, 2 @ Puddle + song se_hashi, 2, 2 @ Boardwalk + song se_daugi, 1, 1 @ Slots Credits + song se_pinpon, 1, 1 @ Ding-dong! + song se_fuusen1, 2, 2 @ Red Balloon + song se_fuusen2, 2, 2 @ Blue Balloon + song se_fuusen3, 2, 2 @ Yellow Balloon + song se_toy_kabe, 2, 2 @ Breakable Door + song se_toy_dango, 2, 2 @ Mud Ball + song se_doku, 1, 1 @ Overworld Poison damage + song se_esuka, 1, 1 @ Escalator + song se_t_ame, 3, 3 @ Rain + song se_t_ame_e, 3, 3 @ Rain stop + song se_t_ooame, 3, 3 @ Heavy Rain + song se_t_ooame_e, 3, 3 @ Heavy Rain stop + song se_t_koame, 3, 3 @ Light Rain + song se_t_koame_e, 3, 3 @ Light Rain stop + song se_t_kami, 1, 1 @ Thunder + song se_t_kami2, 1, 1 @ Thunder 2 + song se_elebeta, 1, 1 @ Elevator + song se_hinsi, 3, 3 @ Low Health + song se_expmax, 1, 1 @ Exp. Max + song se_tamakoro, 2, 2 @ Roulette Ball + song se_tamakoro_e, 2, 2 @ Roulette Ball 2 song se_basabasa, 1, 1 - song se_regi, 1, 1 - song se_c_gaji, 1, 1 - song se_c_maku_u, 1, 1 - song se_c_maku_d, 1, 1 + song se_regi, 1, 1 @ Cash Register + song se_c_gaji, 1, 1 @ Contest Hearts + song se_c_maku_u, 1, 1 @ Contest Curtain rise + song se_c_maku_d, 1, 1 @ Contest Curtain fall song se_c_pasi, 1, 1 song se_c_syu, 1, 1 - song se_c_pikon, 1, 1 - song se_reapoke, 1, 1 - song se_op_basyu, 1, 1 - song se_bt_start, 1, 1 - song se_dendou, 1, 1 - song se_jihanki, 1, 1 - song se_tama, 1, 1 - song se_z_scroll, 1, 1 - song se_z_page, 1, 1 - song se_pn_on, 1, 1 - song se_pn_off, 1, 1 - song se_z_search, 1, 1 - song se_tamago, 1, 1 - song se_tb_start, 1, 1 - song se_tb_kon, 1, 1 - song se_tb_kara, 2, 2 + song se_c_pikon, 1, 1 @ Pokémon Appears in Contest + song se_reapoke, 1, 1 @ Shiny Pokémon + song se_op_basyu, 1, 1 @ Opening Movie -> Title Screen whoosh + song se_bt_start, 1, 1 @ Battle Mugshot whoosh + song se_dendou, 1, 1 @ Audience Cheering + song se_jihanki, 1, 1 @ Vending Machine + song se_tama, 1, 1 @ Orb Used + song se_z_scroll, 1, 1 @ Pokédex Scrolling + song se_z_page, 1, 1 @ Pokédex Page + song se_pn_on, 1, 1 @ PokéNav On + song se_pn_off, 1, 1 @ PokéNav Off + song se_z_search, 1, 1 @ Pokédex Search + song se_tamago, 1, 1 @ Egg hatch + song se_tb_start, 1, 1 @ Battle - Poké Ball Tray slide in + song se_tb_kon, 1, 1 @ Battle - Poké Ball Tray ball sound + song se_tb_kara, 2, 2 @ Battle - Poké Ball Tray slide out song se_bidoro, 1, 1 - song se_w085, 2, 2 - song se_w085b, 1, 1 - song se_w231, 1, 1 - song se_w171, 1, 1 - song se_w233, 1, 1 - song se_w233b, 1, 1 - song se_w145, 1, 1 - song se_w145b, 1, 1 - song se_w145c, 1, 1 - song se_w240, 1, 1 - song se_w015, 1, 1 - song se_w081, 1, 1 - song se_w081b, 1, 1 - song se_w088, 1, 1 - song se_w016, 2, 2 - song se_w016b, 2, 2 - song se_w003, 1, 1 - song se_w104, 1, 1 - song se_w013, 1, 1 - song se_w196, 1, 1 - song se_w086, 1, 1 - song se_w004, 1, 1 - song se_w025, 1, 1 - song se_w025b, 1, 1 - song se_w152, 1, 1 - song se_w026, 1, 1 - song se_w172, 1, 1 - song se_w172b, 1, 1 - song se_w053, 1, 1 - song se_w007, 1, 1 - song se_w092, 1, 1 - song se_w221, 1, 1 - song se_w221b, 2, 2 - song se_w052, 1, 1 - song se_w036, 2, 2 - song se_w059, 1, 1 - song se_w059b, 1, 1 - song se_w010, 1, 1 - song se_w011, 1, 1 - song se_w017, 1, 1 - song se_w019, 1, 1 - song se_w028, 1, 1 - song se_w013b, 1, 1 - song se_w044, 1, 1 - song se_w029, 1, 1 - song se_w057, 1, 1 - song se_w056, 1, 1 - song se_w250, 1, 1 - song se_w030, 1, 1 - song se_w039, 2, 2 - song se_w054, 1, 1 - song se_w077, 1, 1 - song se_w020, 2, 2 - song se_w082, 1, 1 - song se_w047, 1, 1 - song se_w195, 1, 1 - song se_w006, 1, 1 - song se_w091, 1, 1 - song se_w146, 1, 1 - song se_w120, 1, 1 - song se_w153, 1, 1 - song se_w071b, 1, 1 - song se_w071, 1, 1 - song se_w103, 1, 1 - song se_w062, 1, 1 - song se_w062b, 1, 1 - song se_w048, 1, 1 - song se_w187, 1, 1 - song se_w118, 1, 1 - song se_w155, 1, 1 - song se_w122, 1, 1 - song se_w060, 1, 1 - song se_w185, 1, 1 - song se_w014, 1, 1 - song se_w043, 1, 1 - song se_w207, 1, 1 - song se_w207b, 1, 1 - song se_w215, 1, 1 - song se_w109, 1, 1 - song se_w173, 1, 1 - song se_w280, 1, 1 - song se_w202, 1, 1 - song se_w060b, 1, 1 - song se_w076, 2, 2 - song se_w080, 1, 1 - song se_w100, 1, 1 - song se_w107, 1, 1 - song se_w166, 1, 1 - song se_w129, 1, 1 - song se_w115, 1, 1 - song se_w112, 1, 1 - song se_w197, 2, 2 - song se_w199, 1, 1 - song se_w236, 1, 1 - song se_w204, 1, 1 - song se_w268, 1, 1 - song se_w070, 1, 1 - song se_w063, 1, 1 - song se_w127, 1, 1 - song se_w179, 1, 1 - song se_w151, 1, 1 - song se_w201, 1, 1 - song se_w161, 1, 1 - song se_w161b, 1, 1 - song se_w227, 1, 1 - song se_w227b, 2, 2 - song se_w226, 1, 1 - song se_w208, 1, 1 - song se_w213, 1, 1 - song se_w213b, 1, 1 - song se_w234, 1, 1 - song se_w260, 1, 1 - song se_w328, 1, 1 - song se_w320, 1, 1 - song se_w255, 1, 1 - song se_w291, 1, 1 - song se_w089, 2, 2 - song se_w239, 2, 2 - song se_w230, 1, 1 - song se_w281, 1, 1 - song se_w327, 2, 2 - song se_w287, 1, 1 - song se_w257, 1, 1 - song se_w253, 1, 1 - song se_w258, 1, 1 - song se_w322, 2, 2 - song se_w298, 1, 1 - song se_w287b, 1, 1 - song se_w114, 1, 1 - song se_w063b, 1, 1 + song se_w085, 2, 2 @ Thunderbolt + song se_w085b, 1, 1 @ Thunderbolt 2 + song se_w231, 1, 1 @ Harden + song se_w171, 1, 1 @ Nightmare + song se_w233, 1, 1 @ Vital Throw + song se_w233b, 1, 1 @ Vital Throw 2 + song se_w145, 1, 1 @ Bubble + song se_w145b, 1, 1 @ Bubble 2 + song se_w145c, 1, 1 @ Bubble 3 + song se_w240, 1, 1 @ Rain Dance + song se_w015, 1, 1 @ Cut + song se_w081, 1, 1 @ String Shot + song se_w081b, 1, 1 @ String Shot 2 + song se_w088, 1, 1 @ Rock Throw + song se_w016, 2, 2 @ Gust + song se_w016b, 2, 2 @ Gust 2 + song se_w003, 1, 1 @ DoubleSlap + song se_w104, 1, 1 @ Double Team + song se_w013, 1, 1 @ Razor Wind + song se_w196, 1, 1 @ Icy Wind + song se_w086, 1, 1 @ Thunder Wave + song se_w004, 1, 1 @ Comet Punch + song se_w025, 1, 1 @ Mega Kick + song se_w025b, 1, 1 @ Mega Kick 2 + song se_w152, 1, 1 @ Crabhammer + song se_w026, 1, 1 @ Jump Kick + song se_w172, 1, 1 @ Flame Wheel + song se_w172b, 1, 1 @ Flame Wheel 2 + song se_w053, 1, 1 @ Flamethrower + song se_w007, 1, 1 @ Fire Punch + song se_w092, 1, 1 @ Toxic + song se_w221, 1, 1 @ Sacred Fire + song se_w221b, 2, 2 @ Sacred Fire 2 + song se_w052, 1, 1 @ Ember + song se_w036, 2, 2 @ Take Down + song se_w059, 1, 1 @ Blizzard + song se_w059b, 1, 1 @ Blizzard 2 + song se_w010, 1, 1 @ Scratch + song se_w011, 1, 1 @ Vicegrip + song se_w017, 1, 1 @ Wing Attack + song se_w019, 1, 1 @ Fly + song se_w028, 1, 1 @ Sand-Attack + song se_w013b, 1, 1 @ Razor Wind 2 + song se_w044, 1, 1 @ Bite + song se_w029, 1, 1 @ Headbutt + song se_w057, 1, 1 @ Surf + song se_w056, 1, 1 @ Hydro Pump + song se_w250, 1, 1 @ Whirlpool + song se_w030, 1, 1 @ Horn Attack + song se_w039, 2, 2 @ Tail Whip + song se_w054, 1, 1 @ Mist + song se_w077, 1, 1 @ PoisonPowder + song se_w020, 2, 2 @ Bind + song se_w082, 1, 1 @ Dragon Rage + song se_w047, 1, 1 @ Sing + song se_w195, 1, 1 @ Perish Song + song se_w006, 1, 1 @ Pay Day + song se_w091, 1, 1 @ Dig + song se_w146, 1, 1 @ Dizzy Punch + song se_w120, 1, 1 @ Self-Destruct + song se_w153, 1, 1 @ Explosion + song se_w071b, 1, 1 @ Absorb 2 + song se_w071, 1, 1 @ Absorb + song se_w103, 1, 1 @ Screech + song se_w062, 1, 1 @ BubbleBeam + song se_w062b, 1, 1 @ BubbleBeam 2 + song se_w048, 1, 1 @ Supersonic + song se_w187, 1, 1 @ Belly Drum + song se_w118, 1, 1 @ Metronome + song se_w155, 1, 1 @ Bonemerang + song se_w122, 1, 1 @ Lick + song se_w060, 1, 1 @ Psybeam + song se_w185, 1, 1 @ Faint Attack + song se_w014, 1, 1 @ Swords Dance + song se_w043, 1, 1 @ Leer + song se_w207, 1, 1 @ Swagger + song se_w207b, 1, 1 @ Swagger 2 + song se_w215, 1, 1 @ Heal Bell + song se_w109, 1, 1 @ Confuse Ray + song se_w173, 1, 1 @ Snore + song se_w280, 1, 1 @ Brick Break + song se_w202, 1, 1 @ Giga Drain + song se_w060b, 1, 1 @ Psybeam 2 + song se_w076, 2, 2 @ SolarBeam + song se_w080, 1, 1 @ Petal Dance + song se_w100, 1, 1 @ Teleport + song se_w107, 1, 1 @ Minimize + song se_w166, 1, 1 @ Sketch + song se_w129, 1, 1 @ Swift + song se_w115, 1, 1 @ Reflect + song se_w112, 1, 1 @ Barrier + song se_w197, 2, 2 @ Detect + song se_w199, 1, 1 @ Lock-On + song se_w236, 1, 1 @ Moonlight + song se_w204, 1, 1 @ Charm + song se_w268, 1, 1 @ Charge + song se_w070, 1, 1 @ Strength + song se_w063, 1, 1 @ Hyper Beam + song se_w127, 1, 1 @ Waterfall + song se_w179, 1, 1 @ Reversal + song se_w151, 1, 1 @ Acid Armor + song se_w201, 1, 1 @ Sandstorm + song se_w161, 1, 1 @ Tri-Attack + song se_w161b, 1, 1 @ Tri-Attack 2 + song se_w227, 1, 1 @ Encore + song se_w227b, 2, 2 @ Encore 2 + song se_w226, 1, 1 @ Baton Pass + song se_w208, 1, 1 @ Milk Drink + song se_w213, 1, 1 @ Attract + song se_w213b, 1, 1 @ Attract 2 + song se_w234, 1, 1 @ Morning Sun + song se_w260, 1, 1 @ Flatter + song se_w328, 1, 1 @ Sand Tomb + song se_w320, 1, 1 @ GrassWhistle + song se_w255, 1, 1 @ Spit Up + song se_w291, 1, 1 @ Dive + song se_w089, 2, 2 @ Earthquake + song se_w239, 2, 2 @ Twister + song se_w230, 1, 1 @ Sweet Scent + song se_w281, 1, 1 @ Yawn + song se_w327, 2, 2 @ Sky Uppercut + song se_w287, 1, 1 @ Stat Increased + song se_w257, 1, 1 @ Heat Wave + song se_w253, 1, 1 @ Uproar + song se_w258, 1, 1 @ Hail + song se_w322, 2, 2 @ Cosmic Power + song se_w298, 1, 1 @ Teeter Dance + song se_w287b, 1, 1 @ Stat Decreased + song se_w114, 1, 1 @ Haze + song se_w063b, 1, 1 @ Hyper Beam 2 song song_248, 2, 2 song song_249, 2, 2 song song_250, 2, 2 @@ -350,125 +350,125 @@ gSongTable:: @ 845548C song dummy_song_header, 0, 0 song dummy_song_header, 0, 0 song dummy_song_header, 0, 0 - song bgm_tetsuji, 0, 0 - song bgm_field13, 0, 0 - song bgm_kachi22, 0, 0 - song bgm_kachi2, 0, 0 - song bgm_kachi3, 0, 0 - song bgm_kachi5, 0, 0 - song bgm_pcc, 0, 0 - song bgm_nibi, 0, 0 - song bgm_suikun, 0, 0 - song bgm_dooro1, 0, 0 - song bgm_dooro_x1, 0, 0 - song bgm_dooro_x3, 0, 0 - song bgm_machi_s2, 0, 0 - song bgm_machi_s4, 0, 0 - song bgm_gim, 0, 0 - song bgm_naminori, 0, 0 - song bgm_dan01, 0, 0 - song bgm_fanfa1, 2, 2 - song bgm_me_asa, 2, 2 - song bgm_me_bachi, 2, 2 - song bgm_fanfa4, 2, 2 - song bgm_fanfa5, 2, 2 - song bgm_me_waza, 2, 2 - song bgm_bijyutu, 0, 0 - song bgm_dooro_x4, 0, 0 - song bgm_fune_kan, 0, 0 - song bgm_me_shinka, 2, 2 - song bgm_shinka, 0, 0 - song bgm_me_wasure, 2, 2 - song bgm_syoujoeye, 0, 0 - song bgm_boyeye, 0, 0 - song bgm_dan02, 0, 0 - song bgm_machi_s3, 0, 0 - song bgm_odamaki, 0, 0 - song bgm_b_tower, 0, 0 - song bgm_swimeye, 0, 0 - song bgm_dan03, 0, 0 - song bgm_me_kinomi, 2, 2 - song bgm_me_tama, 2, 2 - song bgm_me_b_big, 2, 2 - song bgm_me_b_small, 2, 2 - song bgm_me_zannen, 2, 2 - song bgm_bd_time, 0, 0 - song bgm_test1, 0, 0 - song bgm_test2, 0, 0 - song bgm_test3, 0, 0 - song bgm_test4, 0, 0 - song bgm_test, 0, 0 - song bgm_gomachi0, 0, 0 - song bgm_gotown, 0, 0 - song bgm_pokecen, 0, 0 - song bgm_nextroad, 0, 0 - song bgm_granroad, 0, 0 - song bgm_cycling, 0, 0 - song bgm_friendly, 0, 0 - song bgm_mishiro, 0, 0 - song bgm_tozan, 0, 0 - song bgm_girleye, 0, 0 - song bgm_minamo, 0, 0 - song bgm_ashroad, 0, 0 - song bgm_event0, 0, 0 - song bgm_deepdeep, 0, 0 - song bgm_kachi1, 0, 0 - song bgm_title3, 0, 0 - song bgm_demo1, 0, 0 - song bgm_girl_sup, 0, 0 - song bgm_hageshii, 0, 0 - song bgm_kakkoii, 0, 0 - song bgm_kazanbai, 0, 0 - song bgm_aqa_0, 0, 0 - song bgm_tsuretek, 0, 0 - song bgm_boy_sup, 0, 0 - song bgm_rainbow, 0, 0 - song bgm_ayasii, 0, 0 - song bgm_kachi4, 0, 0 - song bgm_ropeway, 0, 0 - song bgm_casino, 0, 0 - song bgm_hightown, 0, 0 - song bgm_safari, 0, 0 - song bgm_c_road, 0, 0 - song bgm_ajito, 0, 0 - song bgm_m_boat, 0, 0 - song bgm_m_dungon, 0, 0 - song bgm_finecity, 0, 0 - song bgm_machupi, 0, 0 - song bgm_p_school, 0, 0 - song bgm_dendou, 0, 0 - song bgm_tonekusa, 0, 0 - song bgm_maborosi, 0, 0 - song bgm_con_fan, 0, 0 - song bgm_contest0, 0, 0 - song bgm_mgm0, 0, 0 - song bgm_t_battle, 0, 0 - song bgm_ooame, 0, 0 - song bgm_hideri, 0, 0 - song bgm_runecity, 0, 0 - song bgm_con_k, 0, 0 - song bgm_eikou_r, 0, 0 - song bgm_karakuri, 0, 0 - song bgm_hutago, 0, 0 - song bgm_sitennou, 0, 0 - song bgm_yama_eye, 0, 0 - song bgm_conlobby, 0, 0 - song bgm_inter_v, 0, 0 - song bgm_daigo, 0, 0 - song bgm_thankfor, 0, 0 - song bgm_end, 0, 0 - song bgm_battle27, 0, 0 - song bgm_battle31, 0, 0 - song bgm_battle20, 0, 0 - song bgm_battle32, 0, 0 - song bgm_battle33, 0, 0 - song bgm_battle36, 0, 0 - song bgm_battle34, 0, 0 - song bgm_battle35, 0, 0 - song bgm_battle38, 0, 0 - song bgm_battle30, 0, 0 - song bgm_radio_tower_occupied, 0, 0 + song bgm_tetsuji, 0, 0 @ Littleroot Town Test 'TETSUJI' + song bgm_field13, 0, 0 @ GSC - Route 38 + song bgm_kachi22, 0, 0 @ Wild Pokémon Defeated + song bgm_kachi2, 0, 0 @ Wild Pokémon Defeated with Intro + song bgm_kachi3, 0, 0 @ Gym Leader Defeated + song bgm_kachi5, 0, 0 @ Victory! Elite Four + song bgm_pcc, 0, 0 @ Crystal - Pokémon Communication Center + song bgm_nibi, 0, 0 @ GSC - Viridian/Saffron/Pewter/etc + song bgm_suikun, 0, 0 @ Crystal - Battle! Legendary Beasts + song bgm_dooro1, 0, 0 @ Route 101 + song bgm_dooro_x1, 0, 0 @ Route 110 + song bgm_dooro_x3, 0, 0 @ Route 120 + song bgm_machi_s2, 0, 0 @ Petalburg City + song bgm_machi_s4, 0, 0 @ Oldale Town + song bgm_gim, 0, 0 @ Gym + song bgm_naminori, 0, 0 @ Surfing + song bgm_dan01, 0, 0 @ Caves and Darkness + song bgm_fanfa1, 2, 2 @ Level Up! + song bgm_me_asa, 2, 2 @ Pokémon Healed + song bgm_me_bachi, 2, 2 @ Obtained a Badge! + song bgm_fanfa4, 2, 2 @ Obtained an Item! + song bgm_fanfa5, 2, 2 @ Your Pokémon Just Evolved! + song bgm_me_waza, 2, 2 @ Obtained a TM/HM! + song bgm_bijyutu, 0, 0 @ Lilycove Museum + song bgm_dooro_x4, 0, 0 @ Route 122/Intro + song bgm_fune_kan, 0, 0 @ Slateport Museum + song bgm_me_shinka, 2, 2 @ Evolution Intro + song bgm_shinka, 0, 0 @ Evolution + song bgm_me_wasure, 2, 2 @ Move Deleted + song bgm_syoujoeye, 0, 0 @ Encounter! Tuber + song bgm_boyeye, 0, 0 @ Encounter! Boy + song bgm_dan02, 0, 0 @ Abandoned Ship + song bgm_machi_s3, 0, 0 @ Fortree City + song bgm_odamaki, 0, 0 @ Professor Birch's Lab + song bgm_b_tower, 0, 0 @ Battle Tower (RS) + song bgm_swimeye, 0, 0 @ Encounter! Swimmer + song bgm_dan03, 0, 0 @ Meteor Falls + song bgm_me_kinomi, 2, 2 @ Obtained a Berry! + song bgm_me_tama, 2, 2 @ Awakening the Super-Ancient Pokémon + song bgm_me_b_big, 2, 2 @ Slots Jackpot! + song bgm_me_b_small, 2, 2 @ Slots Victory! + song bgm_me_zannen, 2, 2 @ Too bad! + song bgm_bd_time, 0, 0 @ Roulette! + song bgm_test1, 0, 0 @ Contest Test 1 + song bgm_test2, 0, 0 @ Contest Test 2 + song bgm_test3, 0, 0 @ Contest Test 3 + song bgm_test4, 0, 0 @ Contest Test 4 + song bgm_test, 0, 0 @ Encounter! Gentleman (Test?) + song bgm_gomachi0, 0, 0 @ Verdanturf Town + song bgm_gotown, 0, 0 @ Rustboro City + song bgm_pokecen, 0, 0 @ Pokémon Center + song bgm_nextroad, 0, 0 @ Route 104 + song bgm_granroad, 0, 0 @ Route 119 + song bgm_cycling, 0, 0 @ Cycling + song bgm_friendly, 0, 0 @ Pokémart + song bgm_mishiro, 0, 0 @ Littleroot Town + song bgm_tozan, 0, 0 @ Sky Pillar + song bgm_girleye, 0, 0 @ Encounter! Girl + song bgm_minamo, 0, 0 @ Lilycove City + song bgm_ashroad, 0, 0 @ Route 111 + song bgm_event0, 0, 0 @ Help me! + song bgm_deepdeep, 0, 0 @ Underwater + song bgm_kachi1, 0, 0 @ Victory! Trainer + song bgm_title3, 0, 0 @ Title Screen + song bgm_demo1, 0, 0 @ Opening Movie + song bgm_girl_sup, 0, 0 @ Encounter! May + song bgm_hageshii, 0, 0 @ Encounter! Biker + song bgm_kakkoii, 0, 0 @ Encounter! Electric Trainer + song bgm_kazanbai, 0, 0 @ Route 113 + song bgm_aqa_0, 0, 0 @ Encounter! Team Aqua + song bgm_tsuretek, 0, 0 @ Follow Me! + song bgm_boy_sup, 0, 0 @ Encounter! Brendan + song bgm_rainbow, 0, 0 @ Ever Grande City + song bgm_ayasii, 0, 0 @ Encounter! Psychic + song bgm_kachi4, 0, 0 @ Victory! Aqua/Magma Grunt + song bgm_ropeway, 0, 0 @ Cable Car + song bgm_casino, 0, 0 @ Game Corner + song bgm_hightown, 0, 0 @ Dewford Town + song bgm_safari, 0, 0 @ Safari Zone + song bgm_c_road, 0, 0 @ Victory Road + song bgm_ajito, 0, 0 @ Aqua/Magma Hideout + song bgm_m_boat, 0, 0 @ Sailing + song bgm_m_dungon, 0, 0 @ Mt. Pyre (Inside) + song bgm_finecity, 0, 0 @ Slateport City + song bgm_machupi, 0, 0 @ Mt. Pyte (Outside) + song bgm_p_school, 0, 0 @ Pokémon Trainer's School + song bgm_dendou, 0, 0 @ Hall of Fame + song bgm_tonekusa, 0, 0 @ Lavaridge Town + song bgm_maborosi, 0, 0 @ Sealed Chamber + song bgm_con_fan, 0, 0 @ You are the Champion! + song bgm_contest0, 0, 0 @ Pokémon Contest + song bgm_mgm0, 0, 0 @ Encounter! Team Magma + song bgm_t_battle, 0, 0 @ Opening Battle + song bgm_ooame, 0, 0 @ The Flood + song bgm_hideri, 0, 0 @ The Drought + song bgm_runecity, 0, 0 @ Sootopolis City + song bgm_con_k, 0, 0 @ Berry Blending Results + song bgm_eikou_r, 0, 0 @ Hall of Fame + song bgm_karakuri, 0, 0 @ Trick House + song bgm_hutago, 0, 0 @ Encounter! Kid + song bgm_sitennou, 0, 0 @ Encounter! Elite Four + song bgm_yama_eye, 0, 0 @ Encounter! Hiker + song bgm_conlobby, 0, 0 @ Contest Lobby + song bgm_inter_v, 0, 0 @ Encounter! Gabby and Ty + song bgm_daigo, 0, 0 @ Encounter! Wallace + song bgm_thankfor, 0, 0 @ Credits + song bgm_end, 0, 0 @ The End + song bgm_battle27, 0, 0 @ Battle! Wild Pokémon + song bgm_battle31, 0, 0 @ Battle! Team Aqua/Magma + song bgm_battle20, 0, 0 @ Battle! Trainer + song bgm_battle32, 0, 0 @ Battle! Gym Leader + song bgm_battle33, 0, 0 @ Battle! Champion + song bgm_battle36, 0, 0 @ Battle! Regi Trio + song bgm_battle34, 0, 0 @ Battle! Legendary Pokémon (dupe) + song bgm_battle35, 0, 0 @ Battle! Rival + song bgm_battle38, 0, 0 @ Battle! Elite Four + song bgm_battle30, 0, 0 @ Battle! Archie/Maxie + song bgm_radio_tower_occupied, 0, 0 @ GSC - Radio Tower Takeover! .align 2 -dummy_song_header: @ 845632C +dummy_song_header: @ 845632C .byte 0, 0, 0, 0 diff --git a/src/battle/anim/alert.c b/src/battle/anim/alert.c index 7cd42c17b..7cd42c17b 100755..100644 --- a/src/battle/anim/alert.c +++ b/src/battle/anim/alert.c diff --git a/src/battle/anim/angel.c b/src/battle/anim/angel.c index 5ec083887..5ec083887 100755..100644 --- a/src/battle/anim/angel.c +++ b/src/battle/anim/angel.c diff --git a/src/battle/anim/angel_kiss.c b/src/battle/anim/angel_kiss.c index d5be6e2af..d5be6e2af 100755..100644 --- a/src/battle/anim/angel_kiss.c +++ b/src/battle/anim/angel_kiss.c diff --git a/src/battle/anim/anger.c b/src/battle/anim/anger.c index 011aa68ce..011aa68ce 100755..100644 --- a/src/battle/anim/anger.c +++ b/src/battle/anim/anger.c diff --git a/src/battle/anim/blow_kiss.c b/src/battle/anim/blow_kiss.c index e7b49471d..e7b49471d 100755..100644 --- a/src/battle/anim/blow_kiss.c +++ b/src/battle/anim/blow_kiss.c diff --git a/src/battle/anim/bottle.c b/src/battle/anim/bottle.c index 5485bcf5d..5485bcf5d 100755..100644 --- a/src/battle/anim/bottle.c +++ b/src/battle/anim/bottle.c diff --git a/src/battle/anim/brace.c b/src/battle/anim/brace.c index 19ea4297b..19ea4297b 100755..100644 --- a/src/battle/anim/brace.c +++ b/src/battle/anim/brace.c diff --git a/src/battle/anim/breath.c b/src/battle/anim/breath.c index 831b222ad..831b222ad 100755..100644 --- a/src/battle/anim/breath.c +++ b/src/battle/anim/breath.c diff --git a/src/battle/anim/bullet.c b/src/battle/anim/bullet.c index 90b2021f1..90b2021f1 100755..100644 --- a/src/battle/anim/bullet.c +++ b/src/battle/anim/bullet.c diff --git a/src/battle/anim/copy_orb.c b/src/battle/anim/copy_orb.c index 4fa8ea163..4fa8ea163 100755..100644 --- a/src/battle/anim/copy_orb.c +++ b/src/battle/anim/copy_orb.c diff --git a/src/battle/anim/cube.c b/src/battle/anim/cube.c index 9adf46e32..9adf46e32 100755..100644 --- a/src/battle/anim/cube.c +++ b/src/battle/anim/cube.c diff --git a/src/battle/anim/curtain.c b/src/battle/anim/curtain.c index 3c9e4e84c..3c9e4e84c 100755..100644 --- a/src/battle/anim/curtain.c +++ b/src/battle/anim/curtain.c diff --git a/src/battle/anim/cutter.c b/src/battle/anim/cutter.c index 2234ebacb..2234ebacb 100755..100644 --- a/src/battle/anim/cutter.c +++ b/src/battle/anim/cutter.c diff --git a/src/battle/anim/cyclone.c b/src/battle/anim/cyclone.c index 0f83df211..0f83df211 100755..100644 --- a/src/battle/anim/cyclone.c +++ b/src/battle/anim/cyclone.c diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c index 8ceb00298..8ceb00298 100755..100644 --- a/src/battle/anim/dark.c +++ b/src/battle/anim/dark.c diff --git a/src/battle/anim/dragon.c b/src/battle/anim/dragon.c index bf39e01c0..bf39e01c0 100755..100644 --- a/src/battle/anim/dragon.c +++ b/src/battle/anim/dragon.c diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c index f9e505bf2..f9e505bf2 100755..100644 --- a/src/battle/anim/draw.c +++ b/src/battle/anim/draw.c diff --git a/src/battle/anim/drum.c b/src/battle/anim/drum.c index 6306778ae..6306778ae 100755..100644 --- a/src/battle/anim/drum.c +++ b/src/battle/anim/drum.c diff --git a/src/battle/anim/egg.c b/src/battle/anim/egg.c index 8004b3bf5..8004b3bf5 100755..100644 --- a/src/battle/anim/egg.c +++ b/src/battle/anim/egg.c diff --git a/src/battle/anim/espeed.c b/src/battle/anim/espeed.c index 469522092..469522092 100755..100644 --- a/src/battle/anim/espeed.c +++ b/src/battle/anim/espeed.c diff --git a/src/battle/anim/evasion.c b/src/battle/anim/evasion.c index ded8428d4..ded8428d4 100755..100644 --- a/src/battle/anim/evasion.c +++ b/src/battle/anim/evasion.c diff --git a/src/battle/anim/fang.c b/src/battle/anim/fang.c index 5ed7372a8..5ed7372a8 100755..100644 --- a/src/battle/anim/fang.c +++ b/src/battle/anim/fang.c diff --git a/src/battle/anim/flash.c b/src/battle/anim/flash.c index eaa38e5b7..eaa38e5b7 100755..100644 --- a/src/battle/anim/flash.c +++ b/src/battle/anim/flash.c diff --git a/src/battle/anim/flying_hearts.c b/src/battle/anim/flying_hearts.c index d2d22602a..d2d22602a 100755..100644 --- a/src/battle/anim/flying_hearts.c +++ b/src/battle/anim/flying_hearts.c diff --git a/src/battle/anim/flying_path.c b/src/battle/anim/flying_path.c index 441ac0e6d..441ac0e6d 100755..100644 --- a/src/battle/anim/flying_path.c +++ b/src/battle/anim/flying_path.c diff --git a/src/battle/anim/flying_petals.c b/src/battle/anim/flying_petals.c index 4eeaa5215..4eeaa5215 100755..100644 --- a/src/battle/anim/flying_petals.c +++ b/src/battle/anim/flying_petals.c diff --git a/src/battle/anim/glitter.c b/src/battle/anim/glitter.c index e4577f1e1..e4577f1e1 100755..100644 --- a/src/battle/anim/glitter.c +++ b/src/battle/anim/glitter.c diff --git a/src/battle/anim/glow.c b/src/battle/anim/glow.c index 63466c0ff..63466c0ff 100755..100644 --- a/src/battle/anim/glow.c +++ b/src/battle/anim/glow.c diff --git a/src/battle/anim/grip.c b/src/battle/anim/grip.c index c4d7b1cef..c4d7b1cef 100755..100644 --- a/src/battle/anim/grip.c +++ b/src/battle/anim/grip.c diff --git a/src/battle/anim/grow.c b/src/battle/anim/grow.c index 8788b32fe..8788b32fe 100755..100644 --- a/src/battle/anim/grow.c +++ b/src/battle/anim/grow.c diff --git a/src/battle/anim/guillotine.c b/src/battle/anim/guillotine.c index b3d842cdf..b3d842cdf 100755..100644 --- a/src/battle/anim/guillotine.c +++ b/src/battle/anim/guillotine.c diff --git a/src/battle/anim/heal.c b/src/battle/anim/heal.c index a8c14ea1c..a8c14ea1c 100755..100644 --- a/src/battle/anim/heal.c +++ b/src/battle/anim/heal.c diff --git a/src/battle/anim/heart_1.c b/src/battle/anim/heart_1.c index 5df89f929..5df89f929 100755..100644 --- a/src/battle/anim/heart_1.c +++ b/src/battle/anim/heart_1.c diff --git a/src/battle/anim/homing.c b/src/battle/anim/homing.c index 6fb4a76d8..6fb4a76d8 100755..100644 --- a/src/battle/anim/homing.c +++ b/src/battle/anim/homing.c diff --git a/src/battle/anim/hop.c b/src/battle/anim/hop.c index 4006e2d43..4006e2d43 100755..100644 --- a/src/battle/anim/hop.c +++ b/src/battle/anim/hop.c diff --git a/src/battle/anim/hop_2.c b/src/battle/anim/hop_2.c index 1bc3f46af..1bc3f46af 100755..100644 --- a/src/battle/anim/hop_2.c +++ b/src/battle/anim/hop_2.c diff --git a/src/battle/anim/kiss_fountain.c b/src/battle/anim/kiss_fountain.c index d3270ee65..d3270ee65 100755..100644 --- a/src/battle/anim/kiss_fountain.c +++ b/src/battle/anim/kiss_fountain.c diff --git a/src/battle/anim/leaf.c b/src/battle/anim/leaf.c index 676734717..676734717 100755..100644 --- a/src/battle/anim/leaf.c +++ b/src/battle/anim/leaf.c diff --git a/src/battle/anim/love_bg.c b/src/battle/anim/love_bg.c index bd3d22ca6..bd3d22ca6 100755..100644 --- a/src/battle/anim/love_bg.c +++ b/src/battle/anim/love_bg.c diff --git a/src/battle/anim/lunge_1.c b/src/battle/anim/lunge_1.c index d379c8f09..d379c8f09 100755..100644 --- a/src/battle/anim/lunge_1.c +++ b/src/battle/anim/lunge_1.c diff --git a/src/battle/anim/lunge_2.c b/src/battle/anim/lunge_2.c index fe2470567..fe2470567 100755..100644 --- a/src/battle/anim/lunge_2.c +++ b/src/battle/anim/lunge_2.c diff --git a/src/battle/anim/money.c b/src/battle/anim/money.c index 8358d23db..8358d23db 100755..100644 --- a/src/battle/anim/money.c +++ b/src/battle/anim/money.c diff --git a/src/battle/anim/moon.c b/src/battle/anim/moon.c index c532e8057..c532e8057 100755..100644 --- a/src/battle/anim/moon.c +++ b/src/battle/anim/moon.c diff --git a/src/battle/anim/note_rain.c b/src/battle/anim/note_rain.c index 715462d73..715462d73 100755..100644 --- a/src/battle/anim/note_rain.c +++ b/src/battle/anim/note_rain.c diff --git a/src/battle/anim/note_scatter.c b/src/battle/anim/note_scatter.c index 8564c58fe..8564c58fe 100755..100644 --- a/src/battle/anim/note_scatter.c +++ b/src/battle/anim/note_scatter.c diff --git a/src/battle/anim/note_scatter_2.c b/src/battle/anim/note_scatter_2.c index 524c51c08..524c51c08 100755..100644 --- a/src/battle/anim/note_scatter_2.c +++ b/src/battle/anim/note_scatter_2.c diff --git a/src/battle/anim/note_wave.c b/src/battle/anim/note_wave.c index 80ed2256f..80ed2256f 100755..100644 --- a/src/battle/anim/note_wave.c +++ b/src/battle/anim/note_wave.c diff --git a/src/battle/anim/orbit.c b/src/battle/anim/orbit.c index c8cf339d2..c8cf339d2 100755..100644 --- a/src/battle/anim/orbit.c +++ b/src/battle/anim/orbit.c diff --git a/src/battle/anim/orbit_fast.c b/src/battle/anim/orbit_fast.c index 92b67672b..92b67672b 100755..100644 --- a/src/battle/anim/orbit_fast.c +++ b/src/battle/anim/orbit_fast.c diff --git a/src/battle/anim/orbit_scatter.c b/src/battle/anim/orbit_scatter.c index 54c157839..54c157839 100755..100644 --- a/src/battle/anim/orbit_scatter.c +++ b/src/battle/anim/orbit_scatter.c diff --git a/src/battle/anim/orbs.c b/src/battle/anim/orbs.c index 6ca2fa71c..6ca2fa71c 100755..100644 --- a/src/battle/anim/orbs.c +++ b/src/battle/anim/orbs.c diff --git a/src/battle/anim/osmose.c b/src/battle/anim/osmose.c index 1140aa34a..1140aa34a 100755..100644 --- a/src/battle/anim/osmose.c +++ b/src/battle/anim/osmose.c diff --git a/src/battle/anim/perceive.c b/src/battle/anim/perceive.c index 3b3153428..3b3153428 100755..100644 --- a/src/battle/anim/perceive.c +++ b/src/battle/anim/perceive.c diff --git a/src/battle/anim/powder.c b/src/battle/anim/powder.c index a0be20d6f..a0be20d6f 100755..100644 --- a/src/battle/anim/powder.c +++ b/src/battle/anim/powder.c diff --git a/src/battle/anim/ring.c b/src/battle/anim/ring.c index 915cadcbc..915cadcbc 100755..100644 --- a/src/battle/anim/ring.c +++ b/src/battle/anim/ring.c diff --git a/src/battle/anim/roots.c b/src/battle/anim/roots.c index 68f8a3e2f..68f8a3e2f 100755..100644 --- a/src/battle/anim/roots.c +++ b/src/battle/anim/roots.c diff --git a/src/battle/anim/scan.c b/src/battle/anim/scan.c index 22bb26973..22bb26973 100755..100644 --- a/src/battle/anim/scan.c +++ b/src/battle/anim/scan.c diff --git a/src/battle/anim/scary_face.c b/src/battle/anim/scary_face.c index 47776a3cb..47776a3cb 100755..100644 --- a/src/battle/anim/scary_face.c +++ b/src/battle/anim/scary_face.c diff --git a/src/battle/anim/seed.c b/src/battle/anim/seed.c index be8613a74..be8613a74 100755..100644 --- a/src/battle/anim/seed.c +++ b/src/battle/anim/seed.c diff --git a/src/battle/anim/shadow_enlarge.c b/src/battle/anim/shadow_enlarge.c index 399cf1ba4..399cf1ba4 100755..100644 --- a/src/battle/anim/shadow_enlarge.c +++ b/src/battle/anim/shadow_enlarge.c diff --git a/src/battle/anim/shadow_minimize.c b/src/battle/anim/shadow_minimize.c index 94069374f..94069374f 100755..100644 --- a/src/battle/anim/shadow_minimize.c +++ b/src/battle/anim/shadow_minimize.c diff --git a/src/battle/anim/shield.c b/src/battle/anim/shield.c index 676318545..676318545 100755..100644 --- a/src/battle/anim/shield.c +++ b/src/battle/anim/shield.c diff --git a/src/battle/anim/shimmer.c b/src/battle/anim/shimmer.c index 9e7bea1e4..9e7bea1e4 100755..100644 --- a/src/battle/anim/shimmer.c +++ b/src/battle/anim/shimmer.c diff --git a/src/battle/anim/silhouette.c b/src/battle/anim/silhouette.c index a3147f598..a3147f598 100755..100644 --- a/src/battle/anim/silhouette.c +++ b/src/battle/anim/silhouette.c diff --git a/src/battle/anim/slash.c b/src/battle/anim/slash.c index 6adcaf098..6adcaf098 100755..100644 --- a/src/battle/anim/slash.c +++ b/src/battle/anim/slash.c diff --git a/src/battle/anim/sleep.c b/src/battle/anim/sleep.c index 0f0e54f80..0f0e54f80 100755..100644 --- a/src/battle/anim/sleep.c +++ b/src/battle/anim/sleep.c diff --git a/src/battle/anim/slice.c b/src/battle/anim/slice.c index fe8745483..fe8745483 100755..100644 --- a/src/battle/anim/slice.c +++ b/src/battle/anim/slice.c diff --git a/src/battle/anim/smoke.c b/src/battle/anim/smoke.c index 7ab873e63..7ab873e63 100755..100644 --- a/src/battle/anim/smoke.c +++ b/src/battle/anim/smoke.c diff --git a/src/battle/anim/sonic.c b/src/battle/anim/sonic.c index 0897ec6e3..0897ec6e3 100755..100644 --- a/src/battle/anim/sonic.c +++ b/src/battle/anim/sonic.c diff --git a/src/battle/anim/sonic_task.c b/src/battle/anim/sonic_task.c index 924b1b568..924b1b568 100755..100644 --- a/src/battle/anim/sonic_task.c +++ b/src/battle/anim/sonic_task.c diff --git a/src/battle/anim/spin_finger.c b/src/battle/anim/spin_finger.c index 8eb060358..8eb060358 100755..100644 --- a/src/battle/anim/spin_finger.c +++ b/src/battle/anim/spin_finger.c diff --git a/src/battle/anim/spit.c b/src/battle/anim/spit.c index 1e65ba53e..1e65ba53e 100755..100644 --- a/src/battle/anim/spit.c +++ b/src/battle/anim/spit.c diff --git a/src/battle/anim/splash.c b/src/battle/anim/splash.c index 570ef0dca..570ef0dca 100755..100644 --- a/src/battle/anim/splash.c +++ b/src/battle/anim/splash.c diff --git a/src/battle/anim/startle.c b/src/battle/anim/startle.c index 50e78af37..50e78af37 100755..100644 --- a/src/battle/anim/startle.c +++ b/src/battle/anim/startle.c diff --git a/src/battle/anim/strike.c b/src/battle/anim/strike.c index bfa1dc4f7..bfa1dc4f7 100755..100644 --- a/src/battle/anim/strike.c +++ b/src/battle/anim/strike.c diff --git a/src/battle/anim/switch.c b/src/battle/anim/switch.c index c4082b6aa..c4082b6aa 100755..100644 --- a/src/battle/anim/switch.c +++ b/src/battle/anim/switch.c diff --git a/src/battle/anim/sword.c b/src/battle/anim/sword.c index b46fe6759..b46fe6759 100755..100644 --- a/src/battle/anim/sword.c +++ b/src/battle/anim/sword.c diff --git a/src/battle/anim/taunt_finger.c b/src/battle/anim/taunt_finger.c index 023e14e45..023e14e45 100755..100644 --- a/src/battle/anim/taunt_finger.c +++ b/src/battle/anim/taunt_finger.c diff --git a/src/battle/anim/tendrils.c b/src/battle/anim/tendrils.c index 9f57ffd45..9f57ffd45 100755..100644 --- a/src/battle/anim/tendrils.c +++ b/src/battle/anim/tendrils.c diff --git a/src/battle/anim/thought.c b/src/battle/anim/thought.c index c3ab6f82c..c3ab6f82c 100755..100644 --- a/src/battle/anim/thought.c +++ b/src/battle/anim/thought.c diff --git a/src/battle/anim/thrashing.c b/src/battle/anim/thrashing.c index 3fde815ae..3fde815ae 100755..100644 --- a/src/battle/anim/thrashing.c +++ b/src/battle/anim/thrashing.c diff --git a/src/battle/anim/tile_in.c b/src/battle/anim/tile_in.c index a4a544a0c..a4a544a0c 100755..100644 --- a/src/battle/anim/tile_in.c +++ b/src/battle/anim/tile_in.c diff --git a/src/battle/anim/tile_out.c b/src/battle/anim/tile_out.c index 50468a440..50468a440 100755..100644 --- a/src/battle/anim/tile_out.c +++ b/src/battle/anim/tile_out.c diff --git a/src/battle/anim/twinkle.c b/src/battle/anim/twinkle.c index e26669f63..e26669f63 100755..100644 --- a/src/battle/anim/twinkle.c +++ b/src/battle/anim/twinkle.c diff --git a/src/battle/anim/unused_1.c b/src/battle/anim/unused_1.c index d7e5fbfe4..d7e5fbfe4 100755..100644 --- a/src/battle/anim/unused_1.c +++ b/src/battle/anim/unused_1.c diff --git a/src/battle/anim/unused_2.c b/src/battle/anim/unused_2.c index 122f39e02..122f39e02 100755..100644 --- a/src/battle/anim/unused_2.c +++ b/src/battle/anim/unused_2.c diff --git a/src/battle/anim/unused_3.c b/src/battle/anim/unused_3.c index 6dbcbfefe..6dbcbfefe 100755..100644 --- a/src/battle/anim/unused_3.c +++ b/src/battle/anim/unused_3.c diff --git a/src/battle/anim/unused_4.c b/src/battle/anim/unused_4.c index bda476a0a..bda476a0a 100755..100644 --- a/src/battle/anim/unused_4.c +++ b/src/battle/anim/unused_4.c diff --git a/src/battle/anim/unused_5.c b/src/battle/anim/unused_5.c index 421cdd6bf..421cdd6bf 100755..100644 --- a/src/battle/anim/unused_5.c +++ b/src/battle/anim/unused_5.c diff --git a/src/battle/anim/unused_6.c b/src/battle/anim/unused_6.c index 37e2031b0..37e2031b0 100755..100644 --- a/src/battle/anim/unused_6.c +++ b/src/battle/anim/unused_6.c diff --git a/src/battle/anim/unused_7.c b/src/battle/anim/unused_7.c index 2be6e7633..2be6e7633 100755..100644 --- a/src/battle/anim/unused_7.c +++ b/src/battle/anim/unused_7.c diff --git a/src/battle/anim/unused_8.c b/src/battle/anim/unused_8.c index 03772f951..03772f951 100755..100644 --- a/src/battle/anim/unused_8.c +++ b/src/battle/anim/unused_8.c diff --git a/src/battle/anim/unused_9.c b/src/battle/anim/unused_9.c index cf3ccb0d4..cf3ccb0d4 100755..100644 --- a/src/battle/anim/unused_9.c +++ b/src/battle/anim/unused_9.c diff --git a/src/battle/anim/wave_finger.c b/src/battle/anim/wave_finger.c index 2cf68c34c..2cf68c34c 100755..100644 --- a/src/battle/anim/wave_finger.c +++ b/src/battle/anim/wave_finger.c diff --git a/src/battle/anim/whip.c b/src/battle/anim/whip.c index cb3ce327e..cb3ce327e 100755..100644 --- a/src/battle/anim/whip.c +++ b/src/battle/anim/whip.c diff --git a/src/battle/anim/withdraw.c b/src/battle/anim/withdraw.c index e67248b9f..e67248b9f 100755..100644 --- a/src/battle/anim/withdraw.c +++ b/src/battle/anim/withdraw.c diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 5212f5bdc..12b18bb52 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -87,8 +87,8 @@ extern u8 gMultiHitCounter; extern u8 gActionForBanks[]; extern u16 gUnknown_02024C2C[]; extern u16 gLastUsedMove[]; -extern u16 gMoveHitWith[]; -extern u16 gUnknown_02024C44[]; +extern u16 gLastLandedMoves[]; +extern u16 gLastHitByType[]; extern u16 gUnknown_02024C4C[]; extern u16 gLockedMoves[]; extern u8 gUnknown_02024C5C[]; @@ -527,8 +527,8 @@ void sub_800E9EC(void) if (species != SPECIES_EGG && hp == 0) r6 |= 3 << i * 2; } - BATTLE_STRUCT->unk2 = r6; - BATTLE_STRUCT->unk3 = r6 >> 8; + gBattleStruct->unk2 = r6; + gBattleStruct->unk3 = r6 >> 8; } void sub_800EAAC(void) @@ -1094,11 +1094,11 @@ void sub_800EC9C(void) { if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) { - BATTLE_STRUCT->unk0 = 1; - BATTLE_STRUCT->unk1 = 1; + gBattleStruct->unk0 = 1; + gBattleStruct->unk1 = 1; sub_800E9EC(); sub_800EAAC(); - SendBlock(bitmask_all_link_players_but_self(), BATTLE_STRUCT, 32); + SendBlock(bitmask_all_link_players_but_self(), gBattleStruct, 32); gBattleCommunication[0] = 1; } } @@ -1154,7 +1154,7 @@ void sub_800EC9C(void) gTasks[taskId].data[1] = 0x10E; gTasks[taskId].data[2] = 0x5A; gTasks[taskId].data[5] = 0; - gTasks[taskId].data[3] = BATTLE_STRUCT->unk2 | (BATTLE_STRUCT->unk3 << 8); + gTasks[taskId].data[3] = gBattleStruct->unk2 | (gBattleStruct->unk3 << 8); gTasks[taskId].data[4] = gBlockRecvBuffer[enemyId][1]; gBattleCommunication[0]++; } @@ -2335,8 +2335,8 @@ void sub_800F298(void) case 0: if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) { - BATTLE_STRUCT->unk0 = 1; - BATTLE_STRUCT->unk1 = 1; + gBattleStruct->unk0 = 1; + gBattleStruct->unk1 = 1; sub_800E9EC(); sub_800EAAC(); SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x20); @@ -9542,8 +9542,8 @@ void sub_8010874(void) gDisableStructs[i].isFirstTurn= 2; gUnknown_02024C70[i] = 0; gLastUsedMove[i] = 0; - gMoveHitWith[i] = 0; - gUnknown_02024C44[i] = 0; + gLastLandedMoves[i] = 0; + gLastHitByType[i] = 0; gUnknown_02024C4C[i] = 0; gUnknown_02024C5C[i] = 0xFF; gLockedMoves[i] = 0; @@ -9628,7 +9628,7 @@ void sub_8010874(void) } #endif -void SwitchInClearStructs(void) +void SwitchInClearSetData(void) { struct DisableStruct sp0 = gDisableStructs[gActiveBank]; s32 i; @@ -9696,8 +9696,8 @@ void SwitchInClearStructs(void) gDisableStructs[gActiveBank].isFirstTurn= 2; gLastUsedMove[gActiveBank] = 0; - gMoveHitWith[gActiveBank] = 0; - gUnknown_02024C44[gActiveBank] = 0; + gLastLandedMoves[gActiveBank] = 0; + gLastHitByType[gActiveBank] = 0; gUnknown_02024C4C[gActiveBank] = 0; gUnknown_02024C2C[gActiveBank] = 0; gUnknown_02024C5C[gActiveBank] = 0xFF; @@ -9760,8 +9760,8 @@ void UndoEffectsAfterFainting(void) gDisableStructs[gActiveBank].isFirstTurn= 2; gLastUsedMove[gActiveBank] = 0; - gMoveHitWith[gActiveBank] = 0; - gUnknown_02024C44[gActiveBank] = 0; + gLastLandedMoves[gActiveBank] = 0; + gLastHitByType[gActiveBank] = 0; gUnknown_02024C4C[gActiveBank] = 0; gUnknown_02024C2C[gActiveBank] = 0; gUnknown_02024C5C[gActiveBank] = 0xFF; @@ -12186,7 +12186,7 @@ void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) } gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; + gBattleStruct->dynamicMoveType = 0; gBattleMainFunc = RunTurnActionsFunctions; gBattleCommunication[3] = 0; gBattleCommunication[4] = 0; @@ -12199,7 +12199,7 @@ static void RunTurnActionsFunctions(void) if (gBattleOutcome != 0) gCurrentActionFuncId = 12; - BATTLE_STRUCT->unk16057 = gCurrentTurnActionNumber; + gBattleStruct->unk16057 = gCurrentTurnActionNumber; gUnknown_081FA640[gCurrentActionFuncId](); if (gCurrentTurnActionNumber >= gNoOfAllBanks) // everyone did their actions, turn finished @@ -12209,7 +12209,7 @@ static void RunTurnActionsFunctions(void) } else { - if (BATTLE_STRUCT->unk16057 != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another bank + if (gBattleStruct->unk16057 != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another bank { gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); @@ -12234,7 +12234,7 @@ void HandleEndTurn_BattleWon(void) } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) { - BattleMusicStop(); + BattleStopLowHpSound(); gBattlescriptCurrInstr = BattleScript_LocalTrainerBattleWon; switch (gTrainers[gTrainerBattleOpponent].trainerClass) @@ -13342,8 +13342,8 @@ void HandleAction_ActionFinished(void) gBattleMoveDamage = 0; ewram16002 = 0; ewram160A1 = 0; - gMoveHitWith[gBankAttacker] = 0; - gUnknown_02024C44[gBankAttacker] = 0; + gLastLandedMoves[gBankAttacker] = 0; + gLastHitByType[gBankAttacker] = 0; eDynamicMoveType = 0; gDynamicBasePower = 0; ewram1600C = 0; diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index ae8f94130..3763fc309 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -1,5 +1,8 @@ #include "global.h" #include "battle.h" +#include "battle_message.h" +#include "battle_string_ids.h" +#include "battle_script_commands.h" #include "battle_util.h" #include "constants/battle_move_effects.h" #include "constants/moves.h" @@ -22,22 +25,89 @@ #include "pokemon_summary_screen.h" #include "naming_screen.h" #include "ewram.h" +#include "util.h" + +// TODO: put this into battle_controllers.h + +#define RET_VALUE_LEVELLED_UP 11 + +enum +{ + CONTROLLER_GETMONDATA, + CONTROLLER_GETRAWMONDATA, + CONTROLLER_SETMONDATA, + CONTROLLER_SETRAWMONDATA, + CONTROLLER_LOADMONSPRITE, + CONTROLLER_SWITCHINANIM, + CONTROLLER_RETURNMONTOBALL, + CONTROLLER_DRAWTRAINERPIC, + CONTROLLER_TRAINERSLIDE, + CONTROLLER_TRAINERSLIDEBACK, + CONTROLLER_FAINTANIMATION, + CONTROLLER_PALETTEFADE, + CONTROLLER_SUCCESSBALLTHROWANIM, + CONTROLLER_BALLTHROWANIM, + CONTROLLER_PAUSE, + CONTROLLER_MOVEANIMATION, + CONTROLLER_PRINTSTRING, + CONTROLLER_PRINTSTRINGPLAYERONLY, + CONTROLLER_CHOOSEACTION, + CONTROLLER_UNKNOWNYESNOBOX, + CONTROLLER_CHOOSEMOVE, + CONTROLLER_OPENBAG, + CONTROLLER_CHOOSEPOKEMON, + CONTROLLER_23, + CONTROLLER_HEALTHBARUPDATE, + CONTROLLER_EXPUPDATE, + CONTROLLER_STATUSICONUPDATE, + CONTROLLER_STATUSANIMATION, + CONTROLLER_STATUSXOR, + CONTROLLER_DATATRANSFER, + CONTROLLER_DMA3TRANSFER, + CONTROLLER_31, + CONTROLLER_32, + CONTROLLER_TWORETURNVALUES, + CONTROLLER_CHOSENMONRETURNVALUE, + CONTROLLER_ONERETURNVALUE, + CONTROLLER_ONERETURNVALUE_DUPLICATE, + CONTROLLER_37, + CONTROLLER_38, + CONTROLLER_39, + CONTROLLER_40, + CONTROLLER_HITANIMATION, + CONTROLLER_42, + CONTROLLER_EFFECTIVENESSSOUND, + CONTROLLER_PLAYFANFAREORBGM, + CONTROLLER_FAINTINGCRY, + CONTROLLER_INTROSLIDE, + CONTROLLER_INTROTRAINERBALLTHROW, + CONTROLLER_DRAWPARTYSTATUSSUMMARY, + CONTROLLER_49, + CONTROLLER_50, + CONTROLLER_SPRITEINVISIBILITY, + CONTROLLER_BATTLEANIMATION, + CONTROLLER_LINKSTANDBYMSG, + CONTROLLER_RESETACTIONMOVESELECTION, + CONTROLLER_55, + /*new controllers should go here*/ + CONTROLLER_TERMINATOR_NOP, + CONTROLLER_CMDS_COUNT +}; //extern needed variables extern u8 gCritMultiplier; extern s32 gBattleMoveDamage; -extern u32 gStatuses3[4]; +extern u32 gStatuses3[BATTLE_BANKS_COUNT]; extern u16 gBattleTypeFlags; -extern const u32 gBitTable[]; extern const struct BaseStats gBaseStats[]; -extern struct BattleEnigmaBerry gEnigmaBerries[4]; -extern struct BattlePokemon gBattleMons[4]; +extern struct BattleEnigmaBerry gEnigmaBerries[BATTLE_BANKS_COUNT]; +extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT]; extern u8 gActiveBank; extern u32 gBattleExecBuffer; extern u8 gNoOfAllBanks; -extern u16 gBattlePartyID[4]; -extern u8 gBanksByTurnOrder[4]; -extern u8 gActionsByTurnOrder[4]; +extern u16 gBattlePartyID[BATTLE_BANKS_COUNT]; +extern u8 gBanksByTurnOrder[BATTLE_BANKS_COUNT]; +extern u8 gActionsByTurnOrder[BATTLE_BANKS_COUNT]; extern u16 gCurrentMove; extern u8 gLastUsedAbility; extern u16 gBattleWeather; @@ -57,23 +127,23 @@ extern u8 gBattleTerrain; extern u16 gTrainerBattleOpponent; extern u8 gBankAttacker; extern u8 gBankTarget; -extern u8* gBattlescriptCurrInstr; +extern const u8* gBattlescriptCurrInstr; extern u8 gCurrMovePos; extern u8 gCurrentActionFuncId; extern u32 gHitMarker; extern u8 gBattleMoveFlags; extern u8 gBattleCommunication[]; -extern u16 gMoveHitWith[4]; -extern u16 gUnknown_02024C44[4]; +extern u16 gLastLandedMoves[4]; +extern u16 gLastHitByType[4]; extern u8 gStringBank; extern u16 gDynamicBasePower; extern const u8 gTypeEffectiveness[]; extern u16 gLastUsedItem; extern u16 gBattleMovePower; -extern s32 gHP_dealt; -extern s32 gTakenDmg[4]; -extern u8 gTakenDmgBanks[4]; -extern const u16 gMissStrings[]; +extern s32 gHpDealt; +extern s32 gTakenDmg[BATTLE_BANKS_COUNT]; +extern u8 gTakenDmgBanks[BATTLE_BANKS_COUNT]; +extern const u16 gMissStringIds[]; extern u8 gSentPokesToOpponent[2]; extern u8 gBank1; extern u16 gExpShareExp; @@ -98,32 +168,44 @@ extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one extern u8 gCurrentTurnActionNumber; extern u16 gTrappingMoves[]; +extern u8 BattleScript_MoveEffectSleep[]; +extern u8 BattleScript_MoveEffectPoison[]; +extern u8 BattleScript_MoveEffectBurn[]; +extern u8 BattleScript_MoveEffectFreeze[]; +extern u8 BattleScript_MoveEffectParalysis[]; +extern u8 BattleScript_MoveEffectToxic[]; +extern u8 BattleScript_MoveEffectConfusion[]; +extern u8 BattleScript_MoveEffectUproar[]; +extern u8 BattleScript_MoveEffectWrap[]; +extern u8 BattleScript_MoveEffectPayDay[]; +extern u8 BattleScript_MoveEffectRecoil33[]; + //extern functions u8 AtkCanceller_UnableToUseMove(void); void PressurePPLose(u8 bank_atk, u8 bank_def, u16 move); void CancelMultiTurnMoves(u8 bank); -void BattleScriptPush(u8* BS_ptr); +void BattleScriptPush(const u8* BS_ptr); void BattleScriptPushCursor(void); void RecordAbilityBattle(u8 bank, u8 ability); void RecordItemBattle(u8 bank, u8 holdEffect); static bool8 IsTwoTurnsMove(u16 move); -static void DestinyBondFlagUpdate(void); -static void b_wonderguard_and_levitate(void); +static void TrySetDestinyBondToHappen(void); +static void CheckWonderGuardAndLevitate(void); u8 GetBankIdentity(u8 bank); u8 GetBankSide(u8 bank); u8 GetBattleBank(u8 bankValue); s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 bank_atk, u8 bank_def); static u8 AttacksThisTurn(u8 bank, u16 move); //Note: returns 1 if it's a charging turn, otherwise 2 void UndoEffectsAfterFainting(void); -void BattleMusicStop(void); +void BattleStopLowHpSound(void); void PlayBGM(u16 songID); void MonGainEVs(struct Pokemon*, u16 defeatedSpecies); extern u8 gBattleBufferB[4][0x200]; -void sub_80324F8(struct Pokemon*, u8 bank); +void HandleLowHpMusicChange(struct Pokemon*, u8 bank); void AdjustFriendship(struct Pokemon*, u8 value); bool8 IsTradedMon(struct Pokemon*); void BattleScriptPop(void); -void SwitchInClearStructs(void); +void SwitchInClearSetData(void); u8* ConvertIntToDecimalStringN(u8*, s32, u8, u8); u8 GetSetPokedexFlag(u16 nationalNum, u8 caseID); u16 SpeciesToNationalPokedexNum(u16 species); @@ -147,7 +229,7 @@ void ReshowBattleScreenAfterMenu(void); void BattleMainCB2(void); void AddMoney(u32* moneySaveblock, u32 to_give); u8 CountAliveMons(u8 caseID); -void sub_803E1B0(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp); +void PokemonUseItemEffects(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp); u8 CanRunFromBattle(void); u8 GetMoveTarget(u16 move, u8 targetbyte); //get target of move u8 CastformDataTypeChange(u8 bank); @@ -225,7 +307,7 @@ extern u8 BattleScript_SelectingImprisionedMoveInPalace[]; #define BS2ScriptRead16(ptr) ((ptr)[0] + ((ptr)[1] << 8)) #define BS2ScriptReadPtr(ptr) ((void *)BS2ScriptRead32(ptr)) -#define TargetProtectAffected ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED)) +#define TARGET_PROTECT_AFFECTED ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED)) //array entries for battle communication #define MOVE_EFFECT_BYTE 0x3 @@ -267,7 +349,7 @@ extern u8 BattleScript_SelectingImprisionedMoveInPalace[]; #define RecordAbilitySetField6(ability, fieldValue) \ (gLastUsedAbility = ability, gBattleCommunication[6] = fieldValue, RecordAbilityBattle(gBankTarget, ability)) -#define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_physical.moveturnLostHP_special))) +#define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special))) #define HP_ON_SWITCHOUT (((u16*)(ewram_addr + 0x160BC))) @@ -344,7 +426,7 @@ static void atk45_playanimation(void); static void atk46_playanimation2(void); static void atk47_setgraphicalstatchangevalues(void); static void atk48_playstatchangeanimation(void); -static void atk49_moveend(void); +void atk49_moveend(void); static void atk4A_typecalc2(void); static void atk4B_returnatktoball(void); static void atk4C_getswitchedmondata(void); @@ -408,7 +490,7 @@ static void atk85_stockpile(void); static void atk86_stockpiletobasedamage(void); static void atk87_stockpiletohpheal(void); static void atk88_negativedamage(void); -static u8 ChangeStatBuffs(s8, u8, u8, u8*); +static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr); static void atk89_statbuffchange(void); static void atk8A_normalisebuffs(void); static void atk8B_setbide(void); @@ -521,7 +603,7 @@ static void atkF5_removeattackerstatus1(void); static void atkF6_finishaction(void); static void atkF7_finishturn(void); -const BattleCmdFunc gBattleScriptingCommandsTable[] = +void (* const gBattleScriptingCommandsTable[])(void) = { atk00_attackcanceler, atk01_accuracycheck, @@ -773,13 +855,13 @@ const BattleCmdFunc gBattleScriptingCommandsTable[] = atkF7_finishturn, }; -struct statFractions +struct StatFractions { u8 dividend; u8 divisor; }; -static const struct statFractions gAccuracyStageRatios[] = +static const struct StatFractions gAccuracyStageRatios[] = { { 33, 100}, // -6 { 36, 100}, // -5 @@ -796,25 +878,25 @@ static const struct statFractions gAccuracyStageRatios[] = { 3, 1}, // +6 }; -//The chance is 1/N for each stage. -static const u16 gCriticalHitChance[] = {16, 8, 4, 3, 2}; +// The chance is 1/N for each stage. +static const u16 sCriticalHitChance[] = {16, 8, 4, 3, 2}; -static const u32 gStatusFlagsForMoveEffects[] = +static const u32 sStatusFlagsForMoveEffects[] = { 0x00000000, - 0x00000007, - 0x00000008, - 0x00000010, - 0x00000020, - 0x00000040, - 0x00000080, - 0x00000007, - 0x00000008, + STATUS_SLEEP, + STATUS_POISON, + STATUS_BURN, + STATUS_FREEZE, + STATUS_PARALYSIS, + STATUS_TOXIC_POISON, + STATUS2_CONFUSION, + STATUS2_FLINCHED, 0x00000000, - 0x00000070, + STATUS2_UPROAR, 0x00000000, - 0x00001000, - 0x0000E000, + STATUS2_MULTIPLETURNS, + STATUS2_WRAPPED, 0x00000000, 0x00000000, 0x00000000, @@ -830,11 +912,11 @@ static const u32 gStatusFlagsForMoveEffects[] = 0x00000000, 0x00000000, 0x00000000, - 0x00400000, + STATUS2_RECHARGE, 0x00000000, 0x00000000, - 0x04000000, - 0x08000000, + STATUS2_ESCAPE_PREVENTION, + STATUS2_NIGHTMARE, 0x00000000, 0x00000000, 0x00000000, @@ -854,7 +936,7 @@ static const u32 gStatusFlagsForMoveEffects[] = 0x00000000, 0x00000000, 0x00000000, - 0x00000C00, + STATUS2_LOCK_CONFUSE, 0x00000000, 0x00000000, 0x00000000, @@ -863,18 +945,6 @@ static const u32 gStatusFlagsForMoveEffects[] = 0x00000000 }; -extern u8 BattleScript_MoveEffectSleep[]; -extern u8 BattleScript_MoveEffectPoison[]; -extern u8 BattleScript_MoveEffectBurn[]; -extern u8 BattleScript_MoveEffectFreeze[]; -extern u8 BattleScript_MoveEffectParalysis[]; -extern u8 BattleScript_MoveEffectToxic[]; -extern u8 BattleScript_MoveEffectConfusion[]; -extern u8 BattleScript_MoveEffectUproar[]; -extern u8 BattleScript_MoveEffectWrap[]; -extern u8 BattleScript_MoveEffectPayDay[]; -extern u8 BattleScript_MoveEffectRecoil33[]; - u8* const gMoveEffectBS_Ptrs[] = { BattleScript_MoveEffectSleep, @@ -920,17 +990,25 @@ u8* const gMoveEffectBS_Ptrs[] = const u8 sUnreferencedBitMask1[] = {0, 1, 3, 7, 0xF, 0x1F, 0x3F}; -const u8 gLevelUpStatBoxStats[] = {MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPEED}; +const u8 gLevelUpStatBoxStats[] = +{ + MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, + MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPEED +}; static const u16 sProtectSuccessRates[] = {0xFFFF, 0x7FFF, 0x3FFF, 0x1FFF}; -static const u16 sUnknown_081FACFE[] = //banned moves to copy +#define MIMIC_FORBIDDEN_END 0xFFFE +#define METRONOME_FORBIDDEN_END 0xFFFF +#define ASSIST_FORBIDDEN_END 0xFFFF + +static const u16 sMovesForbiddenToCopy[] = { MOVE_METRONOME, MOVE_STRUGGLE, MOVE_SKETCH, MOVE_MIMIC, - 0xFFFE, + MIMIC_FORBIDDEN_END, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_PROTECT, @@ -945,10 +1023,10 @@ static const u16 sUnknown_081FACFE[] = //banned moves to copy MOVE_COVET, MOVE_TRICK, MOVE_FOCUS_PUNCH, - 0xFFFF + METRONOME_FORBIDDEN_END }; -static const u8 sUnknown_081FAD26[] = //reversal+flail HP thresholds to power +static const u8 sFlailHpScaleToPowerTable[] = //reversal+flail HP thresholds to power { 1, 200, 4, 150, @@ -972,16 +1050,16 @@ static const u16 sNaturePowerMoves[] = MOVE_SWIFT }; -//weight-based damage table for Low Kick -//format: min. weight (hectograms), base power -static const u16 sWeightDamage[] = +// weight-based damage table for Low Kick +// format: min. weight (hectograms), base power +static const u16 sWeightToDamageTable[] = { 100, 20, 250, 40, 500, 60, 1000, 80, 2000, 100, - -1, -1 + 0xFFFF, 0xFFFF }; static const u16 sPickupItems[] = @@ -1006,23 +1084,24 @@ static const u8 sTerrainToType[] = TYPE_WATER, // underwater TYPE_WATER, // water TYPE_WATER, // pond water - TYPE_ROCK , // rock - TYPE_ROCK , // cave + TYPE_ROCK, // rock + TYPE_ROCK, // cave TYPE_NORMAL, // building TYPE_NORMAL, // plain }; static const u8 sBallCatchBonuses[] = { - 20, 15, 10, 15 //Ultra, Great, Poke, Safari + 20, 15, 10, 15 // Ultra, Great, Poke, Safari }; static void atk00_attackcanceler(void) { - int i; - if (gBattleOutcome) + s32 i; + + if (gBattleOutcome != 0) { - gCurrentActionFuncId = 0xC; + gCurrentActionFuncId = ACTION_FINISHED; return; } if (gBattleMons[gBankAttacker].hp == 0 && !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) @@ -1033,7 +1112,7 @@ static void atk00_attackcanceler(void) } if (AtkCanceller_UnableToUseMove()) return; - if (AbilityBattleEffects(2, gBankTarget, 0, 0, 0)) + if (AbilityBattleEffects(ABILITYEFFECT_MOVES_BLOCK, gBankTarget, 0, 0, 0)) return; if (!gBattleMons[gBankAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE && !(gHitMarker & 0x800200) && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) @@ -1042,22 +1121,27 @@ static void atk00_attackcanceler(void) gBattleMoveFlags |= MOVESTATUS_MISSED; return; } + gHitMarker &= ~(HITMARKER_x800000); + if (!(gHitMarker & HITMARKER_OBEYS) && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) { - u8 disobedient = IsMonDisobedient(); - asm("":::"r0"); //It's impossible to match - asm("":::"r1"); - if ((disobedient)) + i = IsMonDisobedient(); // why use the 'i' variable...? + switch (i) { - if (disobedient == 2) - gHitMarker |= HITMARKER_OBEYS; - else - gBattleMoveFlags |= MOVESTATUS_MISSED; + case 0: + break; + case 2: + gHitMarker |= HITMARKER_OBEYS; + return; + default: + gBattleMoveFlags |= MOVESTATUS_MISSED; return; } } + gHitMarker |= HITMARKER_OBEYS; + if (gProtectStructs[gBankTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGICCOAT_AFFECTED) { PressurePPLose(gBankAttacker, gBankTarget, MOVE_MAGIC_COAT); @@ -1066,18 +1150,20 @@ static void atk00_attackcanceler(void) gBattlescriptCurrInstr = BattleScript_MagicCoatBounce; return; } + for (i = 0; i < gNoOfAllBanks; i++) { if ((gProtectStructs[gBanksByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) { PressurePPLose(gBankAttacker, gBanksByTurnOrder[i], MOVE_SNATCH); gProtectStructs[gBanksByTurnOrder[i]].stealMove = 0; - BATTLE_STRUCT->scriptingActive = gBanksByTurnOrder[i]; + gBattleStruct->scriptingActive = gBanksByTurnOrder[i]; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SnatchedMove; return; } } + if (gSpecialStatuses[gBankTarget].lightningRodRedirected) { gSpecialStatuses[gBankTarget].lightningRodRedirected = 0; @@ -1086,14 +1172,14 @@ static void atk00_attackcanceler(void) gBattlescriptCurrInstr = BattleScript_TookAttack; RecordAbilityBattle(gBankTarget, gLastUsedAbility); } - else if (TargetProtectAffected + else if (TARGET_PROTECT_AFFECTED && (gCurrentMove != MOVE_CURSE || (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST)) && ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)))) { CancelMultiTurnMoves(gBankAttacker); gBattleMoveFlags |= MOVESTATUS_MISSED; - gMoveHitWith[gBankTarget] = 0; - gUnknown_02024C44[gBankTarget] = 0; + gLastLandedMoves[gBankTarget] = 0; + gLastHitByType[gBankTarget] = 0; gBattleCommunication[6] = 1; gBattlescriptCurrInstr++; } @@ -1105,25 +1191,25 @@ static void atk00_attackcanceler(void) static void JumpIfMoveFailed(u8 adder, u16 move) { - void* to_store = gBattlescriptCurrInstr + adder; + const u8 *BS_ptr = gBattlescriptCurrInstr + adder; if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) { - gMoveHitWith[gBankTarget] = 0; - gUnknown_02024C44[gBankTarget] = 0; - to_store = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gLastLandedMoves[gBankTarget] = 0; + gLastHitByType[gBankTarget] = 0; + BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { - DestinyBondFlagUpdate(); - if (AbilityBattleEffects(3, gBankTarget, 0, 0, move)) + TrySetDestinyBondToHappen(); + if (AbilityBattleEffects(ABILITYEFFECT_ABSORBING, gBankTarget, 0, 0, move)) return; } - gBattlescriptCurrInstr = to_store; + gBattlescriptCurrInstr = BS_ptr; } static void atk40_jumpifaffectedbyprotect(void) { - if (TargetProtectAffected) + if (TARGET_PROTECT_AFFECTED) { gBattleMoveFlags |= MOVESTATUS_MISSED; JumpIfMoveFailed(5, 0); @@ -1137,13 +1223,13 @@ static void atk40_jumpifaffectedbyprotect(void) static bool8 JumpIfMoveAffectedByProtect(u16 move) { - bool8 affected = 0; - if (TargetProtectAffected) + bool8 affected = FALSE; + if (TARGET_PROTECT_AFFECTED) { gBattleMoveFlags |= MOVESTATUS_MISSED; JumpIfMoveFailed(7, move); gBattleCommunication[6] = 1; - affected = 1; + affected = TRUE; } return affected; } @@ -1162,6 +1248,7 @@ static bool8 AccuracyCalcHelper(u16 move) JumpIfMoveFailed(7, move); return TRUE; } + gHitMarker &= ~HITMARKER_IGNORE_ON_AIR; if (!(gHitMarker & HITMARKER_IGNORE_UNDERGROUND) && gStatuses3[gBankTarget] & STATUS3_UNDERGROUND) @@ -1170,6 +1257,7 @@ static bool8 AccuracyCalcHelper(u16 move) JumpIfMoveFailed(7, move); return TRUE; } + gHitMarker &= ~HITMARKER_IGNORE_UNDERGROUND; if (!(gHitMarker & HITMARKER_IGNORE_UNDERWATER) && gStatuses3[gBankTarget] & STATUS3_UNDERWATER) @@ -1178,6 +1266,7 @@ static bool8 AccuracyCalcHelper(u16 move) JumpIfMoveFailed(7, move); return TRUE; } + gHitMarker &= ~HITMARKER_IGNORE_UNDERWATER; if ((WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) && gBattleMoves[move].effect == EFFECT_THUNDER) @@ -1186,12 +1275,14 @@ static bool8 AccuracyCalcHelper(u16 move) JumpIfMoveFailed(7, move); return TRUE; } + return FALSE; } static void atk01_accuracycheck(void) { u16 move = T2_READ_16(gBattlescriptCurrInstr + 5); + if (move == 0xFFFE || move == 0xFFFF) { if (gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBankTarget].bankWithSureHit == gBankAttacker) @@ -1203,13 +1294,14 @@ static void atk01_accuracycheck(void) } else { - u8 type; s8 buff; u8 MoveAcc; u16 calc; u8 hold_effect; u8 quality; - if (move == 0) {move = gCurrentMove;} + u8 type, moveAcc, holdEffect, quality; + s8 buff; + u16 calc; - if (BATTLE_STRUCT->dynamicMoveType) - type = BATTLE_STRUCT->dynamicMoveType & 0x3F; - else - type = gBattleMoves[move].type; + if (move == 0) + move = gCurrentMove; + + GET_MOVE_TYPE(move, type); if (JumpIfMoveAffectedByProtect(move)) return; @@ -1227,47 +1319,52 @@ static void atk01_accuracycheck(void) buff = acc + 6 - gBattleMons[gBankTarget].statStages[STAT_STAGE_EVASION]; } - if (buff < 0) {buff = 0;} - if (buff > 0xC) {buff = 0xC;} + if (buff < 0) + buff = 0; + if (buff > 0xC) + buff = 0xC; - MoveAcc = gBattleMoves[move].accuracy; - //check Thunder on sunny weather + moveAcc = gBattleMoves[move].accuracy; + // check Thunder on sunny weather if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && gBattleMoves[move].effect == EFFECT_THUNDER) - MoveAcc = 50; + moveAcc = 50; - calc = gAccuracyStageRatios[buff].dividend * MoveAcc; + calc = gAccuracyStageRatios[buff].dividend * moveAcc; calc /= gAccuracyStageRatios[buff].divisor; if (gBattleMons[gBankAttacker].ability == ABILITY_COMPOUND_EYES) - calc = (calc * 130) / 100; //1.3 compound eyes boost + calc = (calc * 130) / 100; // 1.3 compound eyes boost if (WEATHER_HAS_EFFECT && gBattleMons[gBankTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & WEATHER_SANDSTORM_ANY) - calc = (calc * 80) / 100; //1.2 sand veil loss; + calc = (calc * 80) / 100; // 1.2 sand veil loss; if (gBattleMons[gBankAttacker].ability == ABILITY_HUSTLE && type < 9) - calc = (calc * 80) / 100; //1.2 hustle loss; + calc = (calc * 80) / 100; // 1.2 hustle loss; if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) - hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; + { + holdEffect = gEnigmaBerries[gBankTarget].holdEffect; + quality = gEnigmaBerries[gBankTarget].holdEffectParam; + } else { - hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); + holdEffect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); } gStringBank = gBankTarget; - if (hold_effect == HOLD_EFFECT_EVASION_UP) + if (holdEffect == HOLD_EFFECT_EVASION_UP) calc = (calc * (100 - quality)) / 100; - //final calculation + // final calculation if ((Random() % 100 + 1) > calc) { gBattleMoveFlags |= MOVESTATUS_MISSED; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && (gBattleMoves[move].target == 0x8 || gBattleMoves[move].target == 0x20)) + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && + (gBattleMoves[move].target == 0x8 || gBattleMoves[move].target == 0x20)) gBattleCommunication[6] = 2; else gBattleCommunication[6] = 0; - b_wonderguard_and_levitate(); - + CheckWonderGuardAndLevitate(); } JumpIfMoveFailed(7, move); } @@ -1288,31 +1385,35 @@ static void atk02_attackstring(void) static void atk03_ppreduce(void) { - int to_deduct = 1; + s32 ppToDeduct = 1; + if (gBattleExecBuffer) return; + if (!gSpecialStatuses[gBankAttacker].flag20) { switch (gBattleMoves[gCurrentMove].target) { case TARGET_FOES_AND_ALLY: - to_deduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_ON_FIELD, gBankAttacker, ABILITY_PRESSURE, 0, 0); + ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_ON_FIELD, gBankAttacker, ABILITY_PRESSURE, 0, 0); break; case TARGET_BOTH: case TARGET_OPPONENTS_FIELD: - to_deduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIZE, gBankAttacker, ABILITY_PRESSURE, 0, 0); + ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIZE, gBankAttacker, ABILITY_PRESSURE, 0, 0); break; default: if (gBankAttacker != gBankTarget && gBattleMons[gBankTarget].ability == ABILITY_PRESSURE) - to_deduct++; + ppToDeduct++; break; } } + if (!(gHitMarker & (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING)) && gBattleMons[gBankAttacker].pp[gCurrMovePos]) { gProtectStructs[gBankAttacker].notFirstStrike = 1; - if (gBattleMons[gBankAttacker].pp[gCurrMovePos] > to_deduct) - gBattleMons[gBankAttacker].pp[gCurrMovePos] -= to_deduct; + + if (gBattleMons[gBankAttacker].pp[gCurrMovePos] > ppToDeduct) + gBattleMons[gBankAttacker].pp[gCurrMovePos] -= ppToDeduct; else gBattleMons[gBankAttacker].pp[gCurrMovePos] = 0; @@ -1324,56 +1425,45 @@ static void atk03_ppreduce(void) MarkBufferBankForExecution(gBankAttacker); } } + gHitMarker &= ~(HITMARKER_NO_PPDEDUCT); gBattlescriptCurrInstr++; } static void atk04_critcalc(void) { - u8 hold_effect; u16 item; u16 crit_chance; int adderv3, adderv5, adderv6, adderv7, adderv8, adderv9, adderv10, adderv11; u16 adderv12; + u8 holdEffect; + u16 item, critChance; + item = gBattleMons[gBankAttacker].item; + if (item == ITEM_ENIGMA_BERRY) - hold_effect = gEnigmaBerries[gBankAttacker].holdEffect; + holdEffect = gEnigmaBerries[gBankAttacker].holdEffect; else - hold_effect = ItemId_GetHoldEffect(item); + holdEffect = ItemId_GetHoldEffect(item); gStringBank = gBankAttacker; - if (gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY) - adderv3 = 2; - else - adderv3 = 0; - - if (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL) {adderv3++;} - adderv5 = adderv3; - if (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK) {adderv5 = adderv3 + 1;} - - if (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK) {adderv5++;} - adderv6 = adderv5; - if (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL) {adderv6 = adderv5 + 1;} - - adderv7 = 0; - if (hold_effect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBankAttacker].species == SPECIES_CHANSEY) {adderv7 = 1;} - adderv8 = 2 * adderv7; - adderv9 = 0; - if (hold_effect == HOLD_EFFECT_STICK && gBattleMons[gBankAttacker].species == SPECIES_FARFETCHD) {adderv9 = 1;} - adderv11 = 2 * adderv9; - if (hold_effect == HOLD_EFFECT_SCOPE_LENS) - {adderv10 = 1 + adderv6 + adderv8; adderv12 = adderv10 + adderv11;} - else - {adderv10 = adderv6 + adderv8; adderv12 = adderv10 + adderv11;} - - crit_chance = adderv12; + critChance = 2 * ((gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY) != 0) + + (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL) + + (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK) + + (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK) + + (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL) + + (holdEffect == HOLD_EFFECT_SCOPE_LENS) + + 2 * (holdEffect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBankAttacker].species == SPECIES_CHANSEY) + + 2 * (holdEffect == HOLD_EFFECT_STICK && gBattleMons[gBankAttacker].species == SPECIES_FARFETCHD); - if (crit_chance > 4) {crit_chance = 4;} + if (critChance > 4) + critChance = 4; if ((gBattleMons[gBankTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBankTarget].ability != ABILITY_SHELL_ARMOR) && !(gStatuses3[gBankAttacker] & STATUS3_CANT_SCORE_A_CRIT) && !(gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE)) - && !(Random() % gCriticalHitChance[crit_chance])) + && !(Random() % sCriticalHitChance[critChance])) gCritMultiplier = 2; else gCritMultiplier = 1; + gBattlescriptCurrInstr++; } @@ -1382,8 +1472,8 @@ static void atk05_damagecalc(void) u16 side_hword = gSideAffecting[GetBankIdentity(gBankTarget) & 1]; gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove, side_hword, gDynamicBasePower, - BATTLE_STRUCT->dynamicMoveType, gBankAttacker, gBankTarget); - gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier; + gBattleStruct->dynamicMoveType, gBankAttacker, gBankTarget); + gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleStruct->dmgMultiplier; if (gStatuses3[gBankAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) gBattleMoveDamage *= 2; @@ -1398,9 +1488,9 @@ void AI_CalcDmg(u8 BankAtk, u8 BankDef) u16 side_hword = gSideAffecting[GetBankIdentity(BankDef) & 1]; gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[BankAtk], &gBattleMons[BankDef], gCurrentMove, side_hword, gDynamicBasePower, - BATTLE_STRUCT->dynamicMoveType, BankAtk, BankDef); + gBattleStruct->dynamicMoveType, BankAtk, BankDef); gDynamicBasePower = 0; - gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier; + gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleStruct->dmgMultiplier; if (gStatuses3[BankAtk] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) gBattleMoveDamage *= 2; @@ -1448,8 +1538,8 @@ static void atk06_typecalc(void) u8 move_type; if (gCurrentMove != MOVE_STRUGGLE) { - if (BATTLE_STRUCT->dynamicMoveType) - move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F; + if (gBattleStruct->dynamicMoveType) + move_type = gBattleStruct->dynamicMoveType & 0x3F; else move_type = gBattleMoves[gCurrentMove].type; @@ -1464,8 +1554,8 @@ static void atk06_typecalc(void) { gLastUsedAbility = gBattleMons[gBankTarget].ability; gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED); - gMoveHitWith[gBankTarget] = 0; - gUnknown_02024C44[gBankTarget] = 0; + gLastLandedMoves[gBankTarget] = 0; + gLastHitByType[gBankTarget] = 0; gBattleCommunication[6] = move_type; RecordAbilityBattle(gBankTarget, gLastUsedAbility); } @@ -1501,8 +1591,8 @@ static void atk06_typecalc(void) { gLastUsedAbility = ABILITY_WONDER_GUARD; gBattleMoveFlags |= MOVESTATUS_MISSED; - gMoveHitWith[gBankTarget] = 0; - gUnknown_02024C44[gBankTarget] = 0; + gLastLandedMoves[gBankTarget] = 0; + gLastHitByType[gBankTarget] = 0; gBattleCommunication[6] = 3; RecordAbilityBattle(gBankTarget, gLastUsedAbility); } @@ -1511,7 +1601,7 @@ static void atk06_typecalc(void) } gBattlescriptCurrInstr++; } -static void b_wonderguard_and_levitate(void) +static void CheckWonderGuardAndLevitate(void) { u8 flags = 0; int i = 0; @@ -1520,8 +1610,8 @@ static void b_wonderguard_and_levitate(void) if (gCurrentMove == MOVE_STRUGGLE || !gBattleMoves[gCurrentMove].power) return; - if (BATTLE_STRUCT->dynamicMoveType) - move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F; + if (gBattleStruct->dynamicMoveType) + move_type = gBattleStruct->dynamicMoveType & 0x3F; else move_type = gBattleMoves[gCurrentMove].type; @@ -1841,12 +1931,12 @@ static void atk09_attackanimation(void) { BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_Pausex20; - BATTLE_STRUCT->animTurn += 1; - BATTLE_STRUCT->animTargetsHit += 1; + gBattleStruct->animTurn += 1; + gBattleStruct->animTargetsHit += 1; } else { - if ((gBattleMoves[gCurrentMove].target & TARGET_BOTH || gBattleMoves[gCurrentMove].target & TARGET_FOES_AND_ALLY || gBattleMoves[gCurrentMove].target & TARGET_DEPENDS) && BATTLE_STRUCT->animTargetsHit) + if ((gBattleMoves[gCurrentMove].target & TARGET_BOTH || gBattleMoves[gCurrentMove].target & TARGET_FOES_AND_ALLY || gBattleMoves[gCurrentMove].target & TARGET_DEPENDS) && gBattleStruct->animTargetsHit) { gBattlescriptCurrInstr++; return; @@ -1855,9 +1945,9 @@ static void atk09_attackanimation(void) { gActiveBank = gBankAttacker; - EmitMoveAnimation(0, gCurrentMove, BATTLE_STRUCT->animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBankAttacker].friendship, &gDisableStructs[gBankAttacker]); - BATTLE_STRUCT->animTurn += 1; - BATTLE_STRUCT->animTargetsHit += 1; + EmitMoveAnimation(0, gCurrentMove, gBattleStruct->animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBankAttacker].friendship, &gDisableStructs[gBankAttacker]); + gBattleStruct->animTurn += 1; + gBattleStruct->animTargetsHit += 1; MarkBufferBankForExecution(gBankAttacker); gBattlescriptCurrInstr++; } @@ -1879,49 +1969,60 @@ static void atk0B_healthbarupdate(void) { if (gBattleExecBuffer) return; - if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) - goto END; - - gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); - if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) { - PrepareStringBattle(0x80, gActiveBank); - goto END; - } + gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]); - EmitHealthBarUpdate(0, gBattleMoveDamage); - MarkBufferBankForExecution(gActiveBank); + if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) + { + PrepareStringBattle(0x80, gActiveBank); + } + else + { + // Emerald + /* + s16 healthValue; - if (!GetBankSide(gActiveBank) && gBattleMoveDamage > 0) - gBattleResults.unk5_0 = 1; + s32 currDmg = gBattleMoveDamage; + s32 maxPossibleDmgValue = 10000; // not present in R/S, ensures that huge damage values don't change sign - END: - gBattlescriptCurrInstr += 2; + if (currDmg <= maxPossibleDmgValue) + healthValue = currDmg; + else + healthValue = maxPossibleDmgValue; + + EmitHealthBarUpdate(0, healthValue); + */ + + EmitHealthBarUpdate(0, gBattleMoveDamage); + MarkBufferBankForExecution(gActiveBank); + + if (GetBankSide(gActiveBank) == SIDE_PLAYER && gBattleMoveDamage > 0) + gBattleResults.unk5_0 = 1; + } + } + + gBattlescriptCurrInstr += 2; } static void atk0C_datahpupdate(void) { - register u32 move_type asm("r6"); //no idea how to match it otherwise - u8 dynamic_move_type; + u32 moveType; if (gBattleExecBuffer) return; - dynamic_move_type = BATTLE_STRUCT->dynamicMoveType; - if (dynamic_move_type && !(dynamic_move_type & 0x40)) - { - move_type = 0x3F; - move_type &= dynamic_move_type; - } + if (gBattleStruct->dynamicMoveType == 0) + moveType = gBattleMoves[gCurrentMove].type; + else if (!(gBattleStruct->dynamicMoveType & 0x40)) + moveType = gBattleStruct->dynamicMoveType & 0x3F; else - { - move_type = gBattleMoves[gCurrentMove].type; - } + moveType = gBattleMoves[gCurrentMove].type; if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) { - gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]); if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { if (gDisableStructs[gActiveBank].substituteHP >= gBattleMoveDamage) @@ -1929,16 +2030,16 @@ static void atk0C_datahpupdate(void) if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0) gSpecialStatuses[gActiveBank].moveturnLostHP = gBattleMoveDamage; gDisableStructs[gActiveBank].substituteHP -= gBattleMoveDamage; - gHP_dealt = gBattleMoveDamage; + gHpDealt = gBattleMoveDamage; } else { if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0) gSpecialStatuses[gActiveBank].moveturnLostHP = gDisableStructs[gActiveBank].substituteHP; - gHP_dealt = gDisableStructs[gActiveBank].substituteHP; + gHpDealt = gDisableStructs[gActiveBank].substituteHP; gDisableStructs[gActiveBank].substituteHP = 0; } - //check substitute fading + // check substitute fading if (gDisableStructs[gActiveBank].substituteHP == 0) { gBattlescriptCurrInstr += 2; @@ -1950,14 +2051,14 @@ static void atk0C_datahpupdate(void) else { gHitMarker &= ~(HITMARKER_IGNORE_SUBSTITUTE); - if (gBattleMoveDamage < 0) //hp goes up + if (gBattleMoveDamage < 0) // hp goes up { gBattleMons[gActiveBank].hp -= gBattleMoveDamage; if (gBattleMons[gActiveBank].hp > gBattleMons[gActiveBank].maxHP) gBattleMons[gActiveBank].hp = gBattleMons[gActiveBank].maxHP; } - else //hp goes down + else // hp goes down { if (gHitMarker & HITMARKER_x20) { @@ -1966,7 +2067,7 @@ static void atk0C_datahpupdate(void) else { gTakenDmg[gActiveBank] += gBattleMoveDamage; - if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0) + if (gBattlescriptCurrInstr[1] == BS_GET_TARGET) gTakenDmgBanks[gActiveBank] = gBankAttacker; else gTakenDmgBanks[gActiveBank] = gBankTarget; @@ -1975,22 +2076,22 @@ static void atk0C_datahpupdate(void) if (gBattleMons[gActiveBank].hp > gBattleMoveDamage) { gBattleMons[gActiveBank].hp -= gBattleMoveDamage; - gHP_dealt = gBattleMoveDamage; + gHpDealt = gBattleMoveDamage; } else { - gHP_dealt = gBattleMons[gActiveBank].hp; + gHpDealt = gBattleMons[gActiveBank].hp; gBattleMons[gActiveBank].hp = 0; } if (!gSpecialStatuses[gActiveBank].moveturnLostHP && !(gHitMarker & HITMARKER_x100000)) - gSpecialStatuses[gActiveBank].moveturnLostHP = gHP_dealt; + gSpecialStatuses[gActiveBank].moveturnLostHP = gHpDealt; - if (move_type <= 8 && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT) + if (moveType <= 8 && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT) { - gProtectStructs[gActiveBank].physicalDmg = gHP_dealt; - gSpecialStatuses[gActiveBank].moveturnLostHP_physical = gHP_dealt; - if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0) + gProtectStructs[gActiveBank].physicalDmg = gHpDealt; + gSpecialStatuses[gActiveBank].moveturnLostHP_physical = gHpDealt; + if (gBattlescriptCurrInstr[1] == BS_GET_TARGET) { gProtectStructs[gActiveBank].physicalBank = gBankAttacker; gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankAttacker; @@ -2001,11 +2102,11 @@ static void atk0C_datahpupdate(void) gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankTarget; } } - else if (move_type > 8 && !(gHitMarker & HITMARKER_x100000)) + else if (moveType > 8 && !(gHitMarker & HITMARKER_x100000)) { - gProtectStructs[gActiveBank].specialDmg = gHP_dealt; - gSpecialStatuses[gActiveBank].moveturnLostHP_special = gHP_dealt; - if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0) + gProtectStructs[gActiveBank].specialDmg = gHpDealt; + gSpecialStatuses[gActiveBank].moveturnLostHP_special = gHpDealt; + if (gBattlescriptCurrInstr[1] == BS_GET_TARGET) { gProtectStructs[gActiveBank].specialBank = gBankAttacker; gSpecialStatuses[gActiveBank].moveturnSpecialBank = gBankAttacker; @@ -2024,7 +2125,7 @@ static void atk0C_datahpupdate(void) } else { - gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]); if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0) gSpecialStatuses[gActiveBank].moveturnLostHP = 0xFFFF; } @@ -2048,6 +2149,7 @@ static void atk0E_effectivenesssound(void) { if (gBattleExecBuffer) return; + gActiveBank = gBankTarget; if (!(gBattleMoveFlags & MOVESTATUS_MISSED)) { @@ -2092,37 +2194,39 @@ static void atk0E_effectivenesssound(void) static void atk0F_resultmessage(void) { - u16 stringID = 0; + u32 stringId = 0; if (gBattleExecBuffer) return; if (gBattleMoveFlags & MOVESTATUS_MISSED && (!(gBattleMoveFlags & MOVESTATUS_NOTAFFECTED) || gBattleCommunication[6] > 2)) { - stringID = gMissStrings[gBattleCommunication[6]]; + stringId = gMissStringIds[gBattleCommunication[6]]; gBattleCommunication[MSG_DISPLAY] = 1; } else { gBattleCommunication[MSG_DISPLAY] = 1; - switch (gBattleMoveFlags & 0xFE) + switch (gBattleMoveFlags & (u8)(~(MOVESTATUS_MISSED))) { case MOVESTATUS_SUPEREFFECTIVE: - stringID = 0xDE; + stringId = STRINGID_SUPEREFFECTIVE; break; case MOVESTATUS_NOTVERYEFFECTIVE: - stringID = 0xDD; + stringId = STRINGID_NOTVERYEFFECTIVE; break; case MOVESTATUS_ONEHITKO: - stringID = 0xDA; + stringId = STRINGID_ONEHITKO; break; case MOVESTATUS_ENDURED: - stringID = 0x99; + stringId = STRINGID_PKMNENDUREDHIT; break; case MOVESTATUS_FAILED: - goto FAILED; + stringId = STRINGID_BUTITFAILED; + break; case MOVESTATUS_NOTAFFECTED: - goto NOTAFFECTED; + stringId = STRINGID_ITDOESNTAFFECT; + break; case MOVESTATUS_HUNGON: gLastUsedItem = gBattleMons[gBankTarget].item; gStringBank = gBankTarget; @@ -2132,8 +2236,9 @@ static void atk0F_resultmessage(void) return; default: if (gBattleMoveFlags & MOVESTATUS_NOTAFFECTED) - NOTAFFECTED: - stringID = 0x1B; + { + stringId = STRINGID_ITDOESNTAFFECT; + } else if (gBattleMoveFlags & MOVESTATUS_ONEHITKO) { gBattleMoveFlags &= ~(MOVESTATUS_ONEHITKO); @@ -2160,18 +2265,19 @@ static void atk0F_resultmessage(void) return; } else if (gBattleMoveFlags & MOVESTATUS_FAILED) - FAILED: - stringID = 0xE5; + { + stringId = STRINGID_BUTITFAILED; + } else + { gBattleCommunication[MSG_DISPLAY] = 0; + } } } - if (stringID) - { - register u16 dummy asm("r0") = stringID; //Can't match it otherwise - PrepareStringBattle(dummy, gBankAttacker); - } + if (stringId) + PrepareStringBattle(stringId, gBankAttacker); + gBattlescriptCurrInstr++; } @@ -2268,12 +2374,12 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gEffectBank = gBankAttacker; //bank that effects get applied on gBattleCommunication[MOVE_EFFECT_BYTE] &= ~(EffectAffectsUser); AffectsUser = EffectAffectsUser; - BATTLE_STRUCT->scriptingActive = gBankTarget; //theoretically the attacker + gBattleStruct->scriptingActive = gBankTarget; //theoretically the attacker } else { gEffectBank = gBankTarget; - BATTLE_STRUCT->scriptingActive = gBankAttacker; + gBattleStruct->scriptingActive = gBankAttacker; } if (gBattleMons[gEffectBank].ability == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && @@ -2293,7 +2399,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) //status change { - switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) + switch (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) { case STATUS_SLEEP: //check active uproar @@ -2342,7 +2448,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (gBattleMons[gEffectBank].type2 == TYPE_STEEL) {break;} if (gBattleMons[gEffectBank].status1) {break;} if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY) {break;} - + StatusChanged = 1; break; case STATUS_BURN: @@ -2454,10 +2560,10 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (StatusChanged == 1) { BattleScriptPush(gBattlescriptCurrInstr + 1); - if (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP) + if (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP) gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2); else - gBattleMons[gEffectBank].status1 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattleMons[gEffectBank].status1 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; gActiveBank = gEffectBank; EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status1); @@ -2471,7 +2577,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gBattleCommunication[MULTISTRING_CHOOSER] = 0; if (gBattleCommunication[MOVE_EFFECT_BYTE] == 2 || gBattleCommunication[MOVE_EFFECT_BYTE] == 6 || gBattleCommunication[MOVE_EFFECT_BYTE] == 5 || gBattleCommunication[MOVE_EFFECT_BYTE] == 3) { - BATTLE_STRUCT->synchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE]; + gBattleStruct->synchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE]; gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT; } return; @@ -2481,12 +2587,12 @@ void SetMoveEffect(bool8 primary, u8 certainArg) } else { - if (gBattleMons[gEffectBank].status2 & gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) + if (gBattleMons[gEffectBank].status2 & sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) { gBattlescriptCurrInstr++; return; } - switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) + switch (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) { case 7: //confusion if (gBattleMons[gEffectBank].ability == ABILITY_OWN_TEMPO) @@ -2513,7 +2619,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) else { if (BankGetTurnOrder(gEffectBank) > gCurrentTurnActionNumber) - gBattleMons[gEffectBank].status2 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattleMons[gEffectBank].status2 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; gBattlescriptCurrInstr++; return; } break; @@ -2553,9 +2659,9 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (gBattleMons[gEffectBank].status2 & STATUS2_WRAPPED) {gBattlescriptCurrInstr++; return;} gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 0xD; - BATTLE_STRUCT->wrappedMove[gEffectBank*2] = (u8)gCurrentMove; - (1 + BATTLE_STRUCT->wrappedMove)[gEffectBank*2] = gCurrentMove >> 8; //don't ask. - BATTLE_STRUCT->wrappedBy[gEffectBank] = gBankAttacker; + gBattleStruct->wrappedMove[gEffectBank*2] = (u8)gCurrentMove; + (1 + gBattleStruct->wrappedMove)[gEffectBank*2] = gCurrentMove >> 8; //don't ask. + gBattleStruct->wrappedBy[gEffectBank] = gBankAttacker; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; gBattleCommunication[MULTISTRING_CHOOSER] = 0; @@ -2564,7 +2670,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gBattleCommunication[MULTISTRING_CHOOSER]++; break; case 14: //25% recoil - gBattleMoveDamage = (gHP_dealt) / 4; + gBattleMoveDamage = (gHpDealt) / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; BattleScriptPush(gBattlescriptCurrInstr + 1); @@ -2574,8 +2680,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (ChangeStatBuffs(0x10, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xF2, certain, 0)) {gBattlescriptCurrInstr++;} else { - BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; //TODO: the arg ptr is wrong by one - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; //TODO: the arg ptr is wrong by one + gBattleStruct->animArg2 = 0; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatUp; } @@ -2584,8 +2690,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (ChangeStatBuffs(~(0x6f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xEB, certain, 0)) {gBattlescriptCurrInstr++;} //TODO: negation doesnt work correctly else { - BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; + gBattleStruct->animArg2 = 0; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatDown; } @@ -2594,8 +2700,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (ChangeStatBuffs(0x20, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xDA, certain, 0)) {gBattlescriptCurrInstr++;} else { - BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; + gBattleStruct->animArg2 = 0; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatUp; } @@ -2604,8 +2710,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (ChangeStatBuffs(~(0x5f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xD3, certain, 0)) {gBattlescriptCurrInstr++;} else { - BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; + gBattleStruct->animArg2 = 0; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatDown; } @@ -2695,7 +2801,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gBattlescriptCurrInstr = BattleScript_AtkDefDown; return; case 38: //33% recoil - gBattleMoveDamage = gHP_dealt / 3; + gBattleMoveDamage = gHpDealt / 3; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; BattleScriptPush(gBattlescriptCurrInstr + 1); @@ -2894,7 +3000,7 @@ _0801E50C:\n\ bls _0801E518\n\ b _0801EB4A\n\ _0801E518:\n\ - ldr r1, _0801E55C @ =gStatusFlagsForMoveEffects\n\ + ldr r1, _0801E55C @ =sStatusFlagsForMoveEffects\n\ ldrb r0, [r7, 0x3]\n\ lsls r0, 2\n\ adds r0, r1\n\ @@ -2922,7 +3028,7 @@ _0801E54C: .4byte gBattleMons\n\ _0801E550: .4byte gHitMarker\n\ _0801E554: .4byte gSideAffecting\n\ _0801E558: .4byte gBattleCommunication\n\ -_0801E55C: .4byte gStatusFlagsForMoveEffects\n\ +_0801E55C: .4byte sStatusFlagsForMoveEffects\n\ _0801E560:\n\ cmp r0, 0x40\n\ bne _0801E566\n\ @@ -3552,7 +3658,7 @@ _0801EA1C:\n\ ldr r0, [r0]\n\ adds r0, 0x1\n\ bl BattleScriptPush\n\ - ldr r1, _0801EA60 @ =gStatusFlagsForMoveEffects\n\ + ldr r1, _0801EA60 @ =sStatusFlagsForMoveEffects\n\ ldr r0, _0801EA64 @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ lsls r0, 2\n\ @@ -3578,7 +3684,7 @@ _0801EA1C:\n\ .align 2, 0\n\ _0801EA58: .4byte gBattleMoveFlags\n\ _0801EA5C: .4byte gBattlescriptCurrInstr\n\ -_0801EA60: .4byte gStatusFlagsForMoveEffects\n\ +_0801EA60: .4byte sStatusFlagsForMoveEffects\n\ _0801EA64: .4byte gBattleCommunication\n\ _0801EA68: .4byte gBattleMons\n\ _0801EA6C: .4byte gEffectBank\n\ @@ -3688,7 +3794,7 @@ _0801EB4A:\n\ mov r0, r9\n\ adds r0, 0x50\n\ adds r1, r0\n\ - ldr r2, _0801EB84 @ =gStatusFlagsForMoveEffects\n\ + ldr r2, _0801EB84 @ =sStatusFlagsForMoveEffects\n\ ldrb r3, [r7, 0x3]\n\ lsls r0, r3, 2\n\ adds r0, r2\n\ @@ -3710,7 +3816,7 @@ _0801EB78:\n\ ldr r0, [r0]\n\ mov pc, r0\n\ .align 2, 0\n\ -_0801EB84: .4byte gStatusFlagsForMoveEffects\n\ +_0801EB84: .4byte sStatusFlagsForMoveEffects\n\ _0801EB88: .4byte _0801EB8C\n\ .align 2, 0\n\ _0801EB8C:\n\ @@ -3870,7 +3976,7 @@ _0801ED2E:\n\ mov r0, r9\n\ adds r0, 0x50\n\ adds r2, r0\n\ - ldr r1, _0801ED58 @ =gStatusFlagsForMoveEffects\n\ + ldr r1, _0801ED58 @ =sStatusFlagsForMoveEffects\n\ ldr r0, _0801ED5C @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ lsls r0, 2\n\ @@ -3882,7 +3988,7 @@ _0801ED2E:\n\ bl _0801F5DC\n\ .align 2, 0\n\ _0801ED54: .4byte gCurrentTurnActionNumber\n\ -_0801ED58: .4byte gStatusFlagsForMoveEffects\n\ +_0801ED58: .4byte sStatusFlagsForMoveEffects\n\ _0801ED5C: .4byte gBattleCommunication\n\ _0801ED60:\n\ mov r3, r8\n\ @@ -4156,7 +4262,7 @@ _0801EFA0: .4byte gBattleCommunication\n\ _0801EFA4: .4byte gTrappingMoves\n\ _0801EFA8:\n\ ldr r1, _0801EFD8 @ =gBattleMoveDamage\n\ - ldr r0, _0801EFDC @ =gHP_dealt\n\ + ldr r0, _0801EFDC @ =gHpDealt\n\ ldr r0, [r0]\n\ cmp r0, 0\n\ bge _0801EFB4\n\ @@ -4182,7 +4288,7 @@ _0801EFC0:\n\ b _0801F5F8\n\ .align 2, 0\n\ _0801EFD8: .4byte gBattleMoveDamage\n\ -_0801EFDC: .4byte gHP_dealt\n\ +_0801EFDC: .4byte gHpDealt\n\ _0801EFE0: .4byte gBattlescriptCurrInstr\n\ _0801EFE4: .4byte gMoveEffectBS_Ptrs\n\ _0801EFE8: .4byte gBattleCommunication\n\ @@ -4711,7 +4817,7 @@ _0801F45C: .4byte gBattlescriptCurrInstr\n\ _0801F460: .4byte BattleScript_AtkDefDown\n\ _0801F464:\n\ ldr r4, _0801F494 @ =gBattleMoveDamage\n\ - ldr r0, _0801F498 @ =gHP_dealt\n\ + ldr r0, _0801F498 @ =gHpDealt\n\ ldr r0, [r0]\n\ movs r1, 0x3\n\ bl __divsi3\n\ @@ -4734,7 +4840,7 @@ _0801F47A:\n\ b _0801F5F8\n\ .align 2, 0\n\ _0801F494: .4byte gBattleMoveDamage\n\ -_0801F498: .4byte gHP_dealt\n\ +_0801F498: .4byte gHpDealt\n\ _0801F49C: .4byte gBattlescriptCurrInstr\n\ _0801F4A0: .4byte gMoveEffectBS_Ptrs\n\ _0801F4A4: .4byte gBattleCommunication\n\ @@ -4935,7 +5041,7 @@ static void atk15_seteffectwithchance(void) else gBattlescriptCurrInstr++; gBattleCommunication[MOVE_EFFECT_BYTE] = 0; - BATTLE_STRUCT->unk16112 = 0; + gBattleStruct->unk16112 = 0; } static void atk16_seteffectprimary(void) @@ -4952,13 +5058,13 @@ static void atk18_clearstatusfromeffect(void) { gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) - gBattleMons[gActiveBank].status1 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); + gBattleMons[gActiveBank].status1 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); else - gBattleMons[gActiveBank].status2 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); + gBattleMons[gActiveBank].status2 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); gBattleCommunication[MOVE_EFFECT_BYTE] = 0; gBattlescriptCurrInstr += 2; - BATTLE_STRUCT->unk16112 = 0; + gBattleStruct->unk16112 = 0; } static void atk19_tryfaintmon(void) @@ -5250,282 +5356,262 @@ static void atk22_jumpiftype(void) //u8 bank, u8 type, *ptr gBattlescriptCurrInstr += 7; } -//here we go again... -#ifdef NONMATCHING static void atk23_getexp(void) { - u8 hold_effect; - int via_expshare = 0, sent_in; - u16* exp = &BATTLE_STRUCT->exp; - gBank1 = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); - sent_in = gSentPokesToOpponent[(gBank1 & 2) >> 1]; - switch (BATTLE_STRUCT->getexpStateTracker) + u16 item; + s32 i; // also used as stringId + u8 holdEffect; + s32 sentIn; + + s32 viaExpShare = 0; + u16* exp = &gBattleStruct->exp; + + gBank1 = GetBattleBank(gBattlescriptCurrInstr[1]); + sentIn = gSentPokesToOpponent[(gBank1 & 2) >> 1]; + + switch (gBattleStruct->getexpStateTracker) { - case 0: //check if should receive exp at all - if (GetBankSide(gBank1) != 1 || (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) - BATTLE_STRUCT->getexpStateTracker = 6; //goto last case + case 0: // check if should receive exp at all + if (GetBankSide(gBank1) != SIDE_OPPONENT || (gBattleTypeFlags & + (BATTLE_TYPE_LINK + | BATTLE_TYPE_SAFARI + | BATTLE_TYPE_BATTLE_TOWER + | BATTLE_TYPE_EREADER_TRAINER))) + { + gBattleStruct->getexpStateTracker = 6; // goto last case + } else { - BATTLE_STRUCT->getexpStateTracker++; - ((u8*)ewram)[0x16113] |= gBitTable[gBattlePartyID[gBank1]]; + gBattleStruct->getexpStateTracker++; + gBattleStruct->unk16113 |= gBitTable[gBattlePartyID[gBank1]]; } break; - case 1: //calculate experience points to redistribute + case 1: // calculate experience points to redistribute { - int via_sent_in = 0; u16 calculatedExp; - int i; - for (i = 0; i < 6; i++) + s32 viaSentIn; + + for (viaSentIn = 0, i = 0; i < 6; i++) { - u16 item; - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == 0 || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == SPECIES_NONE || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) continue; - if (gBitTable[i] & sent_in) - via_sent_in++; + if (gBitTable[i] & sentIn) + viaSentIn++; item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + if (item == ITEM_ENIGMA_BERRY) - hold_effect = gSaveBlock1.enigmaBerry.holdEffect; + holdEffect = gSaveBlock1.enigmaBerry.holdEffect; else - hold_effect = ItemId_GetHoldEffect(item); + holdEffect = ItemId_GetHoldEffect(item); - if (hold_effect == HOLD_EFFECT_EXP_SHARE) - via_expshare++; + if (holdEffect == HOLD_EFFECT_EXP_SHARE) + viaExpShare++; } + calculatedExp = gBaseStats[gBattleMons[gBank1].species].expYield * gBattleMons[gBank1].level / 7; - if (via_expshare) //at least one poke is getting exp via exp share + + if (viaExpShare) // at least one mon is getting exp via exp share { - calculatedExp /= 2; - *exp = calculatedExp / via_sent_in; + *exp = calculatedExp / 2 / viaSentIn; if (*exp == 0) *exp = 1; - gExpShareExp = calculatedExp / via_expshare; + gExpShareExp = calculatedExp / 2 / viaExpShare; if (gExpShareExp == 0) gExpShareExp = 1; } else { - *exp = calculatedExp / via_sent_in; + *exp = calculatedExp / viaSentIn; if (*exp == 0) *exp = 1; gExpShareExp = 0; } - BATTLE_STRUCT->getexpStateTracker++; - BATTLE_STRUCT->expGetterID = 0; - BATTLE_STRUCT->sentInPokes = sent_in; - } //no break statement - case 2: //loop; set exp value to the poke in expgetter_id and print message + + gBattleStruct->getexpStateTracker++; + gBattleStruct->expGetterID = 0; + gBattleStruct->sentInPokes = sentIn; + } + // fall through + case 2: // set exp value to the poke in expgetter_id and print message if (gBattleExecBuffer == 0) { - u16 item = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HELD_ITEM); - u8* tracker; u32 zero; + item = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HELD_ITEM); + if (item == ITEM_ENIGMA_BERRY) - hold_effect = gSaveBlock1.enigmaBerry.holdEffect; + holdEffect = gSaveBlock1.enigmaBerry.holdEffect; else - hold_effect = ItemId_GetHoldEffect(item); + holdEffect = ItemId_GetHoldEffect(item); - if ((hold_effect != HOLD_EFFECT_EXP_SHARE && !(BATTLE_STRUCT->sentInPokes & 1))) + if (holdEffect != HOLD_EFFECT_EXP_SHARE && !(gBattleStruct->sentInPokes & 1)) { - BATTLE_STRUCT->sentInPokes >>= 1; - tracker = &BATTLE_STRUCT->getexpStateTracker; - zero = 0; - *tracker = 5; //increment looper - gBattleMoveDamage = zero; //used for exp + gBattleStruct->sentInPokes >>= 1; + gBattleStruct->getexpStateTracker = 5; + gBattleMoveDamage = 0; // used for exp } - else if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) == 100) + else if (GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL) == 100) { - BATTLE_STRUCT->sentInPokes >>= 1; - tracker = &BATTLE_STRUCT->getexpStateTracker; - zero = 0; - *tracker = 5; //increment looper - gBattleMoveDamage = zero; //used for exp + gBattleStruct->sentInPokes >>= 1; + gBattleStruct->getexpStateTracker = 5; + gBattleMoveDamage = 0; // used for exp } else { - //music change in wild battle after fainting a poke - if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !BATTLE_STRUCT->wildVictorySong) + // music change in wild battle after fainting a poke + if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !gBattleStruct->wildVictorySong) { - BattleMusicStop(); + BattleStopLowHpSound(); PlayBGM(0x161); - BATTLE_STRUCT->wildVictorySong++; + gBattleStruct->wildVictorySong++; } - if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP)) + if (GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP)) { - s16 stringID; - if (BATTLE_STRUCT->sentInPokes & 1) + if (gBattleStruct->sentInPokes & 1) gBattleMoveDamage = *exp; else gBattleMoveDamage = 0; - if (hold_effect == HOLD_EFFECT_EXP_SHARE) + if (holdEffect == HOLD_EFFECT_EXP_SHARE) gBattleMoveDamage += gExpShareExp; - if (hold_effect == HOLD_EFFECT_LUCKY_EGG) + if (holdEffect == HOLD_EFFECT_LUCKY_EGG) gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; - if (IsTradedMon(&gPlayerParty[BATTLE_STRUCT->expGetterID])) + if (IsTradedMon(&gPlayerParty[gBattleStruct->expGetterID])) { gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; - stringID = 0x14A; + i = 0x14A; } else { - stringID = 0x149; - } + i = 0x149; + } - //get exp getter bank + // get exp getter bank if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { - if (!(gBattlePartyID[2] != BATTLE_STRUCT->expGetterID) && !(gAbsentBankFlags & gBitTable[2])) - BATTLE_STRUCT->expGetterBank = 2; + if (!(gBattlePartyID[2] != gBattleStruct->expGetterID) && !(gAbsentBankFlags & gBitTable[2])) + gBattleStruct->expGetterBank = 2; else { if (!(gAbsentBankFlags & gBitTable[0])) - BATTLE_STRUCT->expGetterBank = 0; + gBattleStruct->expGetterBank = 0; else - BATTLE_STRUCT->expGetterBank = 2; + gBattleStruct->expGetterBank = 2; } } else - BATTLE_STRUCT->expGetterBank = 0; + gBattleStruct->expGetterBank = 0; - //buffer poke name - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 4; - gBattleTextBuff1[2] = BATTLE_STRUCT->expGetterBank; - gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID; - gBattleTextBuff1[4] = 0xFF; - - //buffer 'gained' or 'gained a boosted' - gBattleTextBuff2[0] = 0xFD; - gBattleTextBuff2[1] = 0; - gBattleTextBuff2[2] = stringID; - stringID = (stringID >> 8) & (0xFF); //this does not want to cooperate - gBattleTextBuff2[3] = stringID; - gBattleTextBuff2[4] = 0xFF; - - //buffer exp number - gBattleTextBuff3[0] = 0xFD; - gBattleTextBuff3[1] = 1; - gBattleTextBuff3[2] = 4; //word - gBattleTextBuff3[3] = 5; //max digits - gBattleTextBuff3[4] = gBattleMoveDamage; - gBattleTextBuff3[5] = sBYTE1_32(gBattleMoveDamage); - gBattleTextBuff3[6] = sBYTE2_32(gBattleMoveDamage); - gBattleTextBuff3[7] = sBYTE3_32(gBattleMoveDamage); - gBattleTextBuff3[8] = 0xFF; - - PrepareStringBattle(0xD, BATTLE_STRUCT->expGetterBank); - MonGainEVs(&gPlayerParty[BATTLE_STRUCT->expGetterID], gBattleMons[gBank1].species); + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattleStruct->expGetterBank, gBattleStruct->expGetterID) + + // buffer 'gained' or 'gained a boosted' + PREPARE_STRING_BUFFER(gBattleTextBuff2, i) + + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff3, 5, gBattleMoveDamage) + + PrepareStringBattle(STRINGID_PKMNGAINEDEXP, gBattleStruct->expGetterBank); + MonGainEVs(&gPlayerParty[gBattleStruct->expGetterID], gBattleMons[gBank1].species); } - BATTLE_STRUCT->sentInPokes >>= 1; - BATTLE_STRUCT->getexpStateTracker++; + gBattleStruct->sentInPokes >>= 1; + gBattleStruct->getexpStateTracker++; } } break; - case 3: //Set Stats and give exp + case 3: // Set stats and give exp if (gBattleExecBuffer == 0) { - gBattleBufferB[BATTLE_STRUCT->expGetterBank][0] = 0; - if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) != 100) + gBattleBufferB[gBattleStruct->expGetterBank][0] = 0; + if (GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL) != 100) { - // Doesn't match. - BATTLE_STRUCT->beforeLvlUp[0] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); - BATTLE_STRUCT->beforeLvlUp[1] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); - BATTLE_STRUCT->beforeLvlUp[2] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); - BATTLE_STRUCT->beforeLvlUp[3] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED); - BATTLE_STRUCT->beforeLvlUp[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); - BATTLE_STRUCT->beforeLvlUp[5] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF); - - gActiveBank = BATTLE_STRUCT->expGetterBank; - EmitExpBarUpdate(0, BATTLE_STRUCT->expGetterID, gBattleMoveDamage); + gBattleResources_statsBeforeLvlUp->hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MAX_HP); + gBattleResources_statsBeforeLvlUp->atk = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_ATK); + gBattleResources_statsBeforeLvlUp->def = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_DEF); + gBattleResources_statsBeforeLvlUp->spd = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED); + gBattleResources_statsBeforeLvlUp->spAtk = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPATK); + gBattleResources_statsBeforeLvlUp->spDef = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPDEF); + + gActiveBank = gBattleStruct->expGetterBank; + EmitExpBarUpdate(0, gBattleStruct->expGetterID, gBattleMoveDamage); MarkBufferBankForExecution(gActiveBank); } - BATTLE_STRUCT->getexpStateTracker++; + gBattleStruct->getexpStateTracker++; } break; - case 4: //lvl up if necessary + case 4: // lvl up if necessary if (gBattleExecBuffer == 0) { - gActiveBank = BATTLE_STRUCT->expGetterBank; - if (gBattleBufferB[gActiveBank][0] == 0x21 && gBattleBufferB[gActiveBank][1] == 0xB) + gActiveBank = gBattleStruct->expGetterBank; + if (gBattleBufferB[gActiveBank][0] == CONTROLLER_TWORETURNVALUES + && gBattleBufferB[gActiveBank][1] == RET_VALUE_LEVELLED_UP) { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID) - sub_80324F8(&gPlayerParty[gActiveBank], gActiveBank); + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlePartyID[gActiveBank] == gBattleStruct->expGetterID) + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - //buff poke name - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 4; - gBattleTextBuff1[2] = gActiveBank; - gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID; - gBattleTextBuff1[4] = 0xFF; - - //buff level - gBattleTextBuff2[0] = 0xFD; - gBattleTextBuff2[1] = 1; - gBattleTextBuff2[2] = 1; - gBattleTextBuff2[3] = 3; - gBattleTextBuff2[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); - gBattleTextBuff2[5] = 0xFF; + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBank, gBattleStruct->expGetterID) + + PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 3, GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL)) BattleScriptPushCursor(); - gLeveledUpInBattle |= gBitTable[BATTLE_STRUCT->expGetterID]; + gLeveledUpInBattle |= gBitTable[gBattleStruct->expGetterID]; gBattlescriptCurrInstr = BattleScript_LevelUp; gBattleMoveDamage = (gBattleBufferB[gActiveBank][2] | (gBattleBufferB[gActiveBank][3] << 8)); - AdjustFriendship(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0); + AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterID], 0); - //update battle mon structure after level up - if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && gBattleMons[0].hp) + // update battle mon structure after level up + if (gBattlePartyID[0] == gBattleStruct->expGetterID && gBattleMons[0].hp) { - gBattleMons[0].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); - gBattleMons[0].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP); - gBattleMons[0].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); - gBattleMons[0].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); - gBattleMons[0].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); - gBattleMons[0].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED); - gBattleMons[0].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); - gBattleMons[0].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF); + gBattleMons[0].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL); + gBattleMons[0].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP); + gBattleMons[0].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MAX_HP); + gBattleMons[0].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_ATK); + gBattleMons[0].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_DEF); + // Why is this duplicated? + gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED); + gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED); + gBattleMons[0].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPATK); + gBattleMons[0].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPDEF); } - //What is else if? Guess it's too advanced for GameFreak - if (gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + // What is else if? + if (gBattlePartyID[2] == gBattleStruct->expGetterID && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { - gBattleMons[2].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); - gBattleMons[2].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP); - gBattleMons[2].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); - gBattleMons[2].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); - gBattleMons[2].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); - //There are no words...GF can't even copy&paste code properly - gBattleMons[2].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED); - gBattleMons[2].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED /*RIP*/); - gBattleMons[2].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); + gBattleMons[2].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL); + gBattleMons[2].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP); + gBattleMons[2].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MAX_HP); + gBattleMons[2].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_ATK); + gBattleMons[2].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_DEF); + // Duplicated again, but this time there's no Sp Defense + gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED); + gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED); + gBattleMons[2].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPATK); } - BATTLE_STRUCT->getexpStateTracker = 5; } else { gBattleMoveDamage = 0; - BATTLE_STRUCT->getexpStateTracker = 5; } + gBattleStruct->getexpStateTracker = 5; } break; - case 5: //looper increment - if (gBattleMoveDamage) //there is exp to give, goto case 3 that gives exp - BATTLE_STRUCT->getexpStateTracker = 3; + case 5: // looper increment + if (gBattleMoveDamage) // there is exp to give, goto case 3 that gives exp + gBattleStruct->getexpStateTracker = 3; else { - if (++BATTLE_STRUCT->expGetterID <= 5) - BATTLE_STRUCT->getexpStateTracker = 2; //loop again + gBattleStruct->expGetterID++; + if (gBattleStruct->expGetterID <= 5) + gBattleStruct->getexpStateTracker = 2; // loop again else - BATTLE_STRUCT->getexpStateTracker = 6; //we're done + gBattleStruct->getexpStateTracker = 6; // we're done } break; - case 6: //increment instruction + case 6: // increment instruction if (gBattleExecBuffer == 0) { - //not even sure why gamefreak clears that data in this place + // not sure why gf clears the item and ability here gBattleMons[gBank1].item = 0; gBattleMons[gBank1].ability = 0; gBattlescriptCurrInstr += 2; @@ -5533,1138 +5619,6 @@ static void atk23_getexp(void) break; } } -#else -__attribute__((naked)) -static void atk23_getexp(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\ - movs r6, 0\n\ - ldr r0, _0802004C @ =gSharedMem + 0x1605C\n\ - mov r10, r0\n\ - ldr r0, _08020050 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r0]\n\ - ldrb r0, [r0, 0x1]\n\ - bl GetBattleBank\n\ - ldr r1, _08020054 @ =gBank1\n\ - strb r0, [r1]\n\ - ldr r2, _08020058 @ =gSentPokesToOpponent\n\ - movs r1, 0x2\n\ - ands r1, r0\n\ - lsls r1, 24\n\ - lsrs r1, 25\n\ - adds r1, r2\n\ - ldrb r1, [r1]\n\ - mov r8, r1\n\ - mov r0, r10\n\ - subs r0, 0x4D\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x6\n\ - bls _08020040\n\ - bl _08020996\n\ -_08020040:\n\ - lsls r0, 2\n\ - ldr r1, _0802005C @ =_08020060\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_0802004C: .4byte gSharedMem + 0x1605C\n\ -_08020050: .4byte gBattlescriptCurrInstr\n\ -_08020054: .4byte gBank1\n\ -_08020058: .4byte gSentPokesToOpponent\n\ -_0802005C: .4byte _08020060\n\ - .align 2, 0\n\ -_08020060:\n\ - .4byte _0802007C\n\ - .4byte _080200FC\n\ - .4byte _08020216\n\ - .4byte _0802055C\n\ - .4byte _08020648\n\ - .4byte _08020910\n\ - .4byte _0802096C\n\ -_0802007C:\n\ - ldr r4, _080200A8 @ =gBank1\n\ - ldrb r0, [r4]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _08020098\n\ - ldr r0, _080200AC @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - ldr r0, _080200B0 @ =0x00000982\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080200BC\n\ -_08020098:\n\ - ldr r0, _080200B4 @ =gSharedMem\n\ - ldr r1, _080200B8 @ =0x0001600f\n\ - adds r0, r1\n\ - movs r1, 0x6\n\ - strb r1, [r0]\n\ - bl _08020996\n\ - .align 2, 0\n\ -_080200A8: .4byte gBank1\n\ -_080200AC: .4byte gBattleTypeFlags\n\ -_080200B0: .4byte 0x00000982\n\ -_080200B4: .4byte gSharedMem\n\ -_080200B8: .4byte 0x0001600f\n\ -_080200BC:\n\ - ldr r2, _080200E8 @ =gSharedMem\n\ - ldr r3, _080200EC @ =0x0001600f\n\ - adds r1, r2, r3\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - ldr r0, _080200F0 @ =0x00016113\n\ - adds r2, r0\n\ - ldr r3, _080200F4 @ =gBitTable\n\ - ldr r1, _080200F8 @ =gBattlePartyID\n\ - ldrb r0, [r4]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - ldr r0, [r0]\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - bl _08020996\n\ - .align 2, 0\n\ -_080200E8: .4byte gSharedMem\n\ -_080200EC: .4byte 0x0001600f\n\ -_080200F0: .4byte 0x00016113\n\ -_080200F4: .4byte gBitTable\n\ -_080200F8: .4byte gBattlePartyID\n\ -_080200FC:\n\ - movs r5, 0\n\ - movs r7, 0\n\ - ldr r1, _08020150 @ =gSaveBlock1 + 0x3688\n\ - mov r9, r1\n\ -_08020104:\n\ - movs r0, 0x64\n\ - adds r1, r7, 0\n\ - muls r1, r0\n\ - ldr r0, _08020154 @ =gPlayerParty\n\ - adds r4, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0802016A\n\ - adds r0, r4, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0802016A\n\ - ldr r0, _08020158 @ =gBitTable\n\ - lsls r1, r7, 2\n\ - adds r1, r0\n\ - ldr r0, [r1]\n\ - mov r2, r8\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - beq _08020138\n\ - adds r5, 0x1\n\ -_08020138:\n\ - adds r0, r4, 0\n\ - movs r1, 0xC\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0xAF\n\ - bne _0802015C\n\ - mov r3, r9\n\ - ldrb r4, [r3]\n\ - b _08020164\n\ - .align 2, 0\n\ -_08020150: .4byte gSaveBlock1 + 0x3688\n\ -_08020154: .4byte gPlayerParty\n\ -_08020158: .4byte gBitTable\n\ -_0802015C:\n\ - bl ItemId_GetHoldEffect\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ -_08020164:\n\ - cmp r4, 0x19\n\ - bne _0802016A\n\ - adds r6, 0x1\n\ -_0802016A:\n\ - adds r7, 0x1\n\ - cmp r7, 0x5\n\ - ble _08020104\n\ - ldr r3, _080201D0 @ =gBaseStats\n\ - ldr r2, _080201D4 @ =gBattleMons\n\ - ldr r0, _080201D8 @ =gBank1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - muls r1, r0\n\ - adds r1, r2\n\ - ldrh r2, [r1]\n\ - lsls r0, r2, 3\n\ - subs r0, r2\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - ldrb r2, [r0, 0x9]\n\ - adds r1, 0x2A\n\ - ldrb r0, [r1]\n\ - muls r0, r2\n\ - movs r1, 0x7\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r1, r0, 16\n\ - cmp r6, 0\n\ - beq _080201E0\n\ - lsrs r4, r0, 17\n\ - adds r0, r4, 0\n\ - adds r1, r5, 0\n\ - bl __divsi3\n\ - mov r1, r10\n\ - strh r0, [r1]\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - bne _080201B6\n\ - movs r0, 0x1\n\ - strh r0, [r1]\n\ -_080201B6:\n\ - ldr r5, _080201DC @ =gExpShareExp\n\ - adds r0, r4, 0\n\ - adds r1, r6, 0\n\ - bl __divsi3\n\ - strh r0, [r5]\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - bne _080201FA\n\ - movs r0, 0x1\n\ - strh r0, [r5]\n\ - b _080201FA\n\ - .align 2, 0\n\ -_080201D0: .4byte gBaseStats\n\ -_080201D4: .4byte gBattleMons\n\ -_080201D8: .4byte gBank1\n\ -_080201DC: .4byte gExpShareExp\n\ -_080201E0:\n\ - adds r0, r1, 0\n\ - adds r1, r5, 0\n\ - bl __divsi3\n\ - mov r2, r10\n\ - strh r0, [r2]\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - bne _080201F6\n\ - movs r0, 0x1\n\ - strh r0, [r2]\n\ -_080201F6:\n\ - ldr r0, _08020248 @ =gExpShareExp\n\ - strh r6, [r0]\n\ -_080201FA:\n\ - ldr r1, _0802024C @ =gSharedMem\n\ - ldr r3, _08020250 @ =0x0001600f\n\ - adds r2, r1, r3\n\ - ldrb r0, [r2]\n\ - adds r0, 0x1\n\ - movs r3, 0\n\ - strb r0, [r2]\n\ - ldr r2, _08020254 @ =0x00016018\n\ - adds r0, r1, r2\n\ - strb r3, [r0]\n\ - ldr r3, _08020258 @ =0x0001605f\n\ - adds r1, r3\n\ - mov r0, r8\n\ - strb r0, [r1]\n\ -_08020216:\n\ - ldr r0, _0802025C @ =gBattleExecBuffer\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _08020220\n\ - b _08020996\n\ -_08020220:\n\ - ldr r0, _0802024C @ =gSharedMem\n\ - ldr r1, _08020254 @ =0x00016018\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _08020260 @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0xC\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0xAF\n\ - bne _0802026C\n\ - ldr r0, _08020264 @ =gSaveBlock1\n\ - ldr r2, _08020268 @ =0x00003688\n\ - adds r0, r2\n\ - ldrb r4, [r0]\n\ - b _08020274\n\ - .align 2, 0\n\ -_08020248: .4byte gExpShareExp\n\ -_0802024C: .4byte gSharedMem\n\ -_08020250: .4byte 0x0001600f\n\ -_08020254: .4byte 0x00016018\n\ -_08020258: .4byte 0x0001605f\n\ -_0802025C: .4byte gBattleExecBuffer\n\ -_08020260: .4byte gPlayerParty\n\ -_08020264: .4byte gSaveBlock1\n\ -_08020268: .4byte 0x00003688\n\ -_0802026C:\n\ - bl ItemId_GetHoldEffect\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ -_08020274:\n\ - ldr r5, _08020294 @ =gSharedMem\n\ - cmp r4, 0x19\n\ - beq _080202A0\n\ - ldr r3, _08020298 @ =0x0001605f\n\ - adds r1, r5, r3\n\ - ldrb r0, [r1]\n\ - movs r2, 0x1\n\ - ands r2, r0\n\ - cmp r2, 0\n\ - bne _080202A0\n\ - lsrs r0, 1\n\ - strb r0, [r1]\n\ - ldr r0, _0802029C @ =0x0001600f\n\ - adds r1, r5, r0\n\ - b _080202C8\n\ - .align 2, 0\n\ -_08020294: .4byte gSharedMem\n\ -_08020298: .4byte 0x0001605f\n\ -_0802029C: .4byte 0x0001600f\n\ -_080202A0:\n\ - ldr r1, _080202D4 @ =0x00016018\n\ - adds r0, r5, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _080202D8 @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - cmp r0, 0x64\n\ - bne _080202E8\n\ - ldr r2, _080202DC @ =0x0001605f\n\ - adds r1, r5, r2\n\ - ldrb r0, [r1]\n\ - lsrs r0, 1\n\ - movs r2, 0\n\ - strb r0, [r1]\n\ - ldr r3, _080202E0 @ =0x0001600f\n\ - adds r1, r5, r3\n\ -_080202C8:\n\ - movs r0, 0x5\n\ - strb r0, [r1]\n\ - ldr r0, _080202E4 @ =gBattleMoveDamage\n\ - str r2, [r0]\n\ - b _08020996\n\ - .align 2, 0\n\ -_080202D4: .4byte 0x00016018\n\ -_080202D8: .4byte gPlayerParty\n\ -_080202DC: .4byte 0x0001605f\n\ -_080202E0: .4byte 0x0001600f\n\ -_080202E4: .4byte gBattleMoveDamage\n\ -_080202E8:\n\ - ldr r0, _0802034C @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08020316\n\ - ldr r0, _08020350 @ =gBattleMons\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - beq _08020316\n\ - ldr r0, _08020354 @ =0x0001601b\n\ - adds r5, r0\n\ - ldrb r0, [r5]\n\ - cmp r0, 0\n\ - bne _08020316\n\ - bl BattleMusicStop\n\ - ldr r0, _08020358 @ =0x00000161\n\ - bl PlayBGM\n\ - ldrb r0, [r5]\n\ - adds r0, 0x1\n\ - strb r0, [r5]\n\ -_08020316:\n\ - ldr r5, _0802035C @ =gSharedMem\n\ - ldr r1, _08020360 @ =0x00016018\n\ - adds r0, r5, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _08020364 @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _08020332\n\ - b _0802051E\n\ -_08020332:\n\ - ldr r2, _08020368 @ =0x0001605f\n\ - adds r0, r5, r2\n\ - ldrb r0, [r0]\n\ - movs r3, 0x1\n\ - ands r3, r0\n\ - cmp r3, 0\n\ - beq _08020370\n\ - ldr r1, _0802036C @ =gBattleMoveDamage\n\ - mov r3, r10\n\ - ldrh r0, [r3]\n\ - str r0, [r1]\n\ - mov r8, r1\n\ - b _08020376\n\ - .align 2, 0\n\ -_0802034C: .4byte gBattleTypeFlags\n\ -_08020350: .4byte gBattleMons\n\ -_08020354: .4byte 0x0001601b\n\ -_08020358: .4byte 0x00000161\n\ -_0802035C: .4byte gSharedMem\n\ -_08020360: .4byte 0x00016018\n\ -_08020364: .4byte gPlayerParty\n\ -_08020368: .4byte 0x0001605f\n\ -_0802036C: .4byte gBattleMoveDamage\n\ -_08020370:\n\ - ldr r0, _080203EC @ =gBattleMoveDamage\n\ - str r3, [r0]\n\ - mov r8, r0\n\ -_08020376:\n\ - cmp r4, 0x19\n\ - bne _08020386\n\ - ldr r0, _080203F0 @ =gExpShareExp\n\ - ldrh r1, [r0]\n\ - mov r2, r8\n\ - ldr r0, [r2]\n\ - adds r0, r1\n\ - str r0, [r2]\n\ -_08020386:\n\ - cmp r4, 0x28\n\ - bne _0802039C\n\ - mov r3, r8\n\ - ldr r1, [r3]\n\ - movs r0, 0x96\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - mov r1, r8\n\ - str r0, [r1]\n\ -_0802039C:\n\ - ldr r0, _080203F4 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080203B8\n\ - ldr r4, _080203EC @ =gBattleMoveDamage\n\ - ldr r1, [r4]\n\ - movs r0, 0x96\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - str r0, [r4]\n\ -_080203B8:\n\ - ldr r0, _080203F8 @ =gSharedMem\n\ - ldr r2, _080203FC @ =0x00016018\n\ - adds r0, r2\n\ - ldrb r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _08020400 @ =gPlayerParty\n\ - adds r0, r1\n\ - bl IsTradedMon\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08020404\n\ - ldr r4, _080203EC @ =gBattleMoveDamage\n\ - ldr r1, [r4]\n\ - movs r0, 0x96\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - str r0, [r4]\n\ - movs r7, 0xA5\n\ - lsls r7, 1\n\ - mov r8, r4\n\ - b _0802040A\n\ - .align 2, 0\n\ -_080203EC: .4byte gBattleMoveDamage\n\ -_080203F0: .4byte gExpShareExp\n\ -_080203F4: .4byte gBattleTypeFlags\n\ -_080203F8: .4byte gSharedMem\n\ -_080203FC: .4byte 0x00016018\n\ -_08020400: .4byte gPlayerParty\n\ -_08020404:\n\ - ldr r7, _0802043C @ =0x00000149\n\ - ldr r3, _08020440 @ =gBattleMoveDamage\n\ - mov r8, r3\n\ -_0802040A:\n\ - ldr r0, _08020444 @ =gBattleTypeFlags\n\ - ldrh r0, [r0]\n\ - movs r1, 0x1\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _08020488\n\ - ldr r1, _08020448 @ =gBattlePartyID\n\ - ldr r0, _0802044C @ =gSharedMem\n\ - ldr r3, _08020450 @ =0x00016018\n\ - adds r2, r0, r3\n\ - ldrh r1, [r1, 0x4]\n\ - adds r5, r0, 0\n\ - ldr r4, _08020454 @ =gBitTable\n\ - ldr r3, _08020458 @ =gAbsentBankFlags\n\ - ldrb r2, [r2]\n\ - cmp r1, r2\n\ - bne _08020460\n\ - ldrb r1, [r3]\n\ - ldr r0, [r4, 0x8]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _08020460\n\ - ldr r0, _0802045C @ =0x000160a2\n\ - adds r1, r5, r0\n\ - b _0802047C\n\ - .align 2, 0\n\ -_0802043C: .4byte 0x00000149\n\ -_08020440: .4byte gBattleMoveDamage\n\ -_08020444: .4byte gBattleTypeFlags\n\ -_08020448: .4byte gBattlePartyID\n\ -_0802044C: .4byte gSharedMem\n\ -_08020450: .4byte 0x00016018\n\ -_08020454: .4byte gBitTable\n\ -_08020458: .4byte gAbsentBankFlags\n\ -_0802045C: .4byte 0x000160a2\n\ -_08020460:\n\ - ldrb r2, [r3]\n\ - ldr r0, [r4]\n\ - ands r2, r0\n\ - cmp r2, 0\n\ - bne _08020478\n\ - ldr r1, _08020474 @ =0x000160a2\n\ - adds r0, r5, r1\n\ - strb r2, [r0]\n\ - b _08020490\n\ - .align 2, 0\n\ -_08020474: .4byte 0x000160a2\n\ -_08020478:\n\ - ldr r2, _08020484 @ =0x000160a2\n\ - adds r1, r5, r2\n\ -_0802047C:\n\ - movs r0, 0x2\n\ - strb r0, [r1]\n\ - b _08020490\n\ - .align 2, 0\n\ -_08020484: .4byte 0x000160a2\n\ -_08020488:\n\ - ldr r0, _08020530 @ =gSharedMem\n\ - ldr r3, _08020534 @ =0x000160a2\n\ - adds r0, r3\n\ - strb r1, [r0]\n\ -_08020490:\n\ - ldr r1, _08020538 @ =gBattleTextBuff1\n\ - movs r3, 0\n\ - movs r2, 0xFD\n\ - strb r2, [r1]\n\ - movs r5, 0x4\n\ - strb r5, [r1, 0x1]\n\ - ldr r4, _08020530 @ =gSharedMem\n\ - ldr r0, _08020534 @ =0x000160a2\n\ - adds r6, r4, r0\n\ - ldrb r0, [r6]\n\ - strb r0, [r1, 0x2]\n\ - ldr r0, _0802053C @ =0x00016018\n\ - adds r4, r0\n\ - ldrb r0, [r4]\n\ - strb r0, [r1, 0x3]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x4]\n\ - ldr r1, _08020540 @ =gBattleTextBuff2\n\ - strb r2, [r1]\n\ - strb r3, [r1, 0x1]\n\ - strb r7, [r1, 0x2]\n\ - movs r3, 0xFF\n\ - lsls r3, 8\n\ - ands r7, r3\n\ - asrs r0, r7, 8\n\ - strb r0, [r1, 0x3]\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - strb r0, [r1, 0x4]\n\ - ldr r1, _08020544 @ =gBattleTextBuff3\n\ - strb r2, [r1]\n\ - movs r0, 0x1\n\ - strb r0, [r1, 0x1]\n\ - strb r5, [r1, 0x2]\n\ - movs r0, 0x5\n\ - strb r0, [r1, 0x3]\n\ - mov r0, r8\n\ - ldr r2, [r0]\n\ - strb r2, [r1, 0x4]\n\ - adds r0, r2, 0\n\ - ands r0, r3\n\ - asrs r0, 8\n\ - strb r0, [r1, 0x5]\n\ - movs r0, 0xFF\n\ - lsls r0, 16\n\ - ands r0, r2\n\ - asrs r0, 16\n\ - strb r0, [r1, 0x6]\n\ - lsrs r2, 24\n\ - strb r2, [r1, 0x7]\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - strb r0, [r1, 0x8]\n\ - ldrb r1, [r6]\n\ - movs r0, 0xD\n\ - bl PrepareStringBattle\n\ - ldrb r1, [r4]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _08020548 @ =gPlayerParty\n\ - adds r0, r1\n\ - ldr r3, _0802054C @ =gBattleMons\n\ - ldr r1, _08020550 @ =gBank1\n\ - ldrb r2, [r1]\n\ - movs r1, 0x58\n\ - muls r1, r2\n\ - adds r1, r3\n\ - ldrh r1, [r1]\n\ - bl MonGainEVs\n\ -_0802051E:\n\ - ldr r1, _08020530 @ =gSharedMem\n\ - ldr r3, _08020554 @ =0x0001605f\n\ - adds r2, r1, r3\n\ - ldrb r0, [r2]\n\ - lsrs r0, 1\n\ - strb r0, [r2]\n\ - ldr r0, _08020558 @ =0x0001600f\n\ - adds r1, r0\n\ - b _08020618\n\ - .align 2, 0\n\ -_08020530: .4byte gSharedMem\n\ -_08020534: .4byte 0x000160a2\n\ -_08020538: .4byte gBattleTextBuff1\n\ -_0802053C: .4byte 0x00016018\n\ -_08020540: .4byte gBattleTextBuff2\n\ -_08020544: .4byte gBattleTextBuff3\n\ -_08020548: .4byte gPlayerParty\n\ -_0802054C: .4byte gBattleMons\n\ -_08020550: .4byte gBank1\n\ -_08020554: .4byte 0x0001605f\n\ -_08020558: .4byte 0x0001600f\n\ -_0802055C:\n\ - ldr r0, _08020620 @ =gBattleExecBuffer\n\ - ldr r2, [r0]\n\ - cmp r2, 0\n\ - beq _08020566\n\ - b _08020996\n\ -_08020566:\n\ - ldr r1, _08020624 @ =gBattleBufferB\n\ - ldr r4, _08020628 @ =gSharedMem\n\ - ldr r3, _0802062C @ =0x000160a2\n\ - adds r3, r4\n\ - mov r8, r3\n\ - ldrb r0, [r3]\n\ - lsls r0, 9\n\ - adds r0, r1\n\ - strb r2, [r0]\n\ - ldr r0, _08020630 @ =0x00016018\n\ - adds r7, r4, r0\n\ - ldrb r0, [r7]\n\ - movs r6, 0x64\n\ - muls r0, r6\n\ - ldr r5, _08020634 @ =gPlayerParty\n\ - adds r0, r5\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _08020612\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - cmp r0, 0x64\n\ - beq _08020612\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3A\n\ - bl GetMonData\n\ - ldr r1, _08020638 @ =0x00017180\n\ - adds r4, r1\n\ - strh r0, [r4]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3B\n\ - bl GetMonData\n\ - strh r0, [r4, 0x2]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3C\n\ - bl GetMonData\n\ - strh r0, [r4, 0x4]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - strh r0, [r4, 0x6]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3E\n\ - bl GetMonData\n\ - strh r0, [r4, 0x8]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3F\n\ - bl GetMonData\n\ - strh r0, [r4, 0xA]\n\ - ldr r4, _0802063C @ =gActiveBank\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - strb r0, [r4]\n\ - ldrb r1, [r7]\n\ - ldr r0, _08020640 @ =gBattleMoveDamage\n\ - ldrh r2, [r0]\n\ - movs r0, 0\n\ - bl EmitExpBarUpdate\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ -_08020612:\n\ - ldr r1, _08020628 @ =gSharedMem\n\ - ldr r3, _08020644 @ =0x0001600f\n\ - adds r1, r3\n\ -_08020618:\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020620: .4byte gBattleExecBuffer\n\ -_08020624: .4byte gBattleBufferB\n\ -_08020628: .4byte gSharedMem\n\ -_0802062C: .4byte 0x000160a2\n\ -_08020630: .4byte 0x00016018\n\ -_08020634: .4byte gPlayerParty\n\ -_08020638: .4byte 0x00017180\n\ -_0802063C: .4byte gActiveBank\n\ -_08020640: .4byte gBattleMoveDamage\n\ -_08020644: .4byte 0x0001600f\n\ -_08020648:\n\ - ldr r0, _080208AC @ =gBattleExecBuffer\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _08020652\n\ - b _08020996\n\ -_08020652:\n\ - ldr r1, _080208B0 @ =gActiveBank\n\ - ldr r4, _080208B4 @ =gSharedMem\n\ - ldr r2, _080208B8 @ =0x000160a2\n\ - adds r0, r4, r2\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldr r2, _080208BC @ =gBattleBufferB\n\ - ldrb r3, [r1]\n\ - lsls r1, r3, 9\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x21\n\ - beq _0802066E\n\ - b _080208F0\n\ -_0802066E:\n\ - adds r0, r2, 0x1\n\ - adds r0, r1, r0\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xB\n\ - beq _0802067A\n\ - b _080208F0\n\ -_0802067A:\n\ - ldr r0, _080208C0 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080206A8\n\ - ldr r1, _080208C4 @ =gBattlePartyID\n\ - lsls r0, r3, 1\n\ - adds r2, r0, r1\n\ - ldr r0, _080208C8 @ =0x00016018\n\ - adds r1, r4, r0\n\ - ldrh r0, [r2]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bne _080206A8\n\ - adds r1, r0, 0\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _080208CC @ =gPlayerParty\n\ - adds r0, r1\n\ - adds r1, r3, 0\n\ - bl sub_80324F8\n\ -_080206A8:\n\ - ldr r1, _080208D0 @ =gBattleTextBuff1\n\ - movs r2, 0xFD\n\ - strb r2, [r1]\n\ - movs r0, 0x4\n\ - strb r0, [r1, 0x1]\n\ - ldr r5, _080208B0 @ =gActiveBank\n\ - ldrb r0, [r5]\n\ - strb r0, [r1, 0x2]\n\ - ldr r0, _080208B4 @ =gSharedMem\n\ - ldr r3, _080208C8 @ =0x00016018\n\ - adds r6, r0, r3\n\ - ldrb r0, [r6]\n\ - strb r0, [r1, 0x3]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x4]\n\ - ldr r4, _080208D4 @ =gBattleTextBuff2\n\ - strb r2, [r4]\n\ - movs r0, 0x1\n\ - strb r0, [r4, 0x1]\n\ - strb r0, [r4, 0x2]\n\ - movs r0, 0x3\n\ - strb r0, [r4, 0x3]\n\ - ldrb r0, [r6]\n\ - movs r1, 0x64\n\ - mov r8, r1\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - ldr r7, _080208CC @ =gPlayerParty\n\ - adds r0, r7\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - strb r0, [r4, 0x4]\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - strb r0, [r4, 0x5]\n\ - bl BattleScriptPushCursor\n\ - ldr r2, _080208D8 @ =gLeveledUpInBattle\n\ - ldr r1, _080208DC @ =gBitTable\n\ - ldrb r0, [r6]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldr r1, _080208E0 @ =gBattlescriptCurrInstr\n\ - ldr r0, _080208E4 @ =BattleScript_LevelUp\n\ - str r0, [r1]\n\ - ldr r4, _080208E8 @ =gBattleMoveDamage\n\ - ldr r2, _080208BC @ =gBattleBufferB\n\ - ldrb r1, [r5]\n\ - lsls r1, 9\n\ - adds r0, r2, 0x2\n\ - adds r0, r1, r0\n\ - ldrb r3, [r0]\n\ - adds r2, 0x3\n\ - adds r1, r2\n\ - ldrb r0, [r1]\n\ - lsls r0, 8\n\ - orrs r3, r0\n\ - str r3, [r4]\n\ - ldrb r0, [r6]\n\ - mov r3, r8\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r0, r7\n\ - movs r1, 0\n\ - bl AdjustFriendship\n\ - ldr r0, _080208C4 @ =gBattlePartyID\n\ - ldrb r1, [r6]\n\ - ldrh r0, [r0]\n\ - cmp r0, r1\n\ - bne _080207EC\n\ - ldr r4, _080208EC @ =gBattleMons\n\ - ldrh r0, [r4, 0x28]\n\ - cmp r0, 0\n\ - beq _080207EC\n\ - mov r0, r8\n\ - muls r0, r1\n\ - adds r0, r7\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - adds r1, r4, 0\n\ - adds r1, 0x2A\n\ - strb r0, [r1]\n\ - ldrb r0, [r6]\n\ - mov r1, r8\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r0, r7\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - strh r0, [r4, 0x28]\n\ - ldrb r0, [r6]\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - adds r0, r7\n\ - movs r1, 0x3A\n\ - bl GetMonData\n\ - strh r0, [r4, 0x2C]\n\ - ldrb r0, [r6]\n\ - mov r3, r8\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r0, r7\n\ - movs r1, 0x3B\n\ - bl GetMonData\n\ - strh r0, [r4, 0x2]\n\ - ldrb r0, [r6]\n\ - mov r1, r8\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r0, r7\n\ - movs r1, 0x3C\n\ - bl GetMonData\n\ - strh r0, [r4, 0x4]\n\ - ldrb r0, [r6]\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - adds r0, r7\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - strh r0, [r4, 0x6]\n\ - ldrb r0, [r6]\n\ - mov r3, r8\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r0, r7\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - strh r0, [r4, 0x6]\n\ - ldrb r0, [r6]\n\ - mov r1, r8\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r0, r7\n\ - movs r1, 0x3E\n\ - bl GetMonData\n\ - strh r0, [r4, 0x8]\n\ - ldrb r0, [r6]\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - adds r0, r7\n\ - movs r1, 0x3F\n\ - bl GetMonData\n\ - strh r0, [r4, 0xA]\n\ -_080207EC:\n\ - ldr r0, _080208C4 @ =gBattlePartyID\n\ - ldr r1, _080208B4 @ =gSharedMem\n\ - ldr r3, _080208C8 @ =0x00016018\n\ - adds r7, r1, r3\n\ - ldrb r2, [r7]\n\ - ldrh r0, [r0, 0x4]\n\ - cmp r0, r2\n\ - bne _080208F6\n\ - ldr r6, _080208EC @ =gBattleMons\n\ - movs r0, 0xD8\n\ - adds r0, r6\n\ - mov r8, r0\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - beq _080208F6\n\ - ldr r0, _080208C0 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080208F6\n\ - movs r5, 0x64\n\ - adds r0, r2, 0\n\ - muls r0, r5\n\ - ldr r4, _080208CC @ =gPlayerParty\n\ - adds r0, r4\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xDA\n\ - strb r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - mov r1, r8\n\ - strh r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3A\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xDC\n\ - strh r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3B\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xB2\n\ - strh r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3C\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xB4\n\ - strh r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - movs r2, 0xB6\n\ - adds r2, r6\n\ - mov r8, r2\n\ - strh r0, [r2]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - mov r3, r8\n\ - strh r0, [r3]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3E\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xB8\n\ - strh r0, [r1]\n\ - b _080208F6\n\ - .align 2, 0\n\ -_080208AC: .4byte gBattleExecBuffer\n\ -_080208B0: .4byte gActiveBank\n\ -_080208B4: .4byte gSharedMem\n\ -_080208B8: .4byte 0x000160a2\n\ -_080208BC: .4byte gBattleBufferB\n\ -_080208C0: .4byte gBattleTypeFlags\n\ -_080208C4: .4byte gBattlePartyID\n\ -_080208C8: .4byte 0x00016018\n\ -_080208CC: .4byte gPlayerParty\n\ -_080208D0: .4byte gBattleTextBuff1\n\ -_080208D4: .4byte gBattleTextBuff2\n\ -_080208D8: .4byte gLeveledUpInBattle\n\ -_080208DC: .4byte gBitTable\n\ -_080208E0: .4byte gBattlescriptCurrInstr\n\ -_080208E4: .4byte BattleScript_LevelUp\n\ -_080208E8: .4byte gBattleMoveDamage\n\ -_080208EC: .4byte gBattleMons\n\ -_080208F0:\n\ - ldr r1, _08020904 @ =gBattleMoveDamage\n\ - movs r0, 0\n\ - str r0, [r1]\n\ -_080208F6:\n\ - ldr r0, _08020908 @ =gSharedMem\n\ - ldr r1, _0802090C @ =0x0001600f\n\ - adds r0, r1\n\ - movs r1, 0x5\n\ - strb r1, [r0]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020904: .4byte gBattleMoveDamage\n\ -_08020908: .4byte gSharedMem\n\ -_0802090C: .4byte 0x0001600f\n\ -_08020910:\n\ - ldr r0, _08020924 @ =gBattleMoveDamage\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _08020930\n\ - ldr r0, _08020928 @ =gSharedMem\n\ - ldr r2, _0802092C @ =0x0001600f\n\ - adds r0, r2\n\ - movs r1, 0x3\n\ - strb r1, [r0]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020924: .4byte gBattleMoveDamage\n\ -_08020928: .4byte gSharedMem\n\ -_0802092C: .4byte 0x0001600f\n\ -_08020930:\n\ - ldr r2, _08020950 @ =gSharedMem\n\ - ldr r3, _08020954 @ =0x00016018\n\ - adds r1, r2, r3\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x5\n\ - bhi _0802095C\n\ - ldr r0, _08020958 @ =0x0001600f\n\ - adds r1, r2, r0\n\ - movs r0, 0x2\n\ - strb r0, [r1]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020950: .4byte gSharedMem\n\ -_08020954: .4byte 0x00016018\n\ -_08020958: .4byte 0x0001600f\n\ -_0802095C:\n\ - ldr r3, _08020968 @ =0x0001600f\n\ - adds r1, r2, r3\n\ - movs r0, 0x6\n\ - strb r0, [r1]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020968: .4byte 0x0001600f\n\ -_0802096C:\n\ - ldr r0, _080209A4 @ =gBattleExecBuffer\n\ - ldr r5, [r0]\n\ - cmp r5, 0\n\ - bne _08020996\n\ - ldr r4, _080209A8 @ =gBattleMons\n\ - ldr r2, _080209AC @ =gBank1\n\ - ldrb r0, [r2]\n\ - movs r1, 0x58\n\ - muls r0, r1\n\ - adds r0, r4\n\ - movs r3, 0\n\ - strh r5, [r0, 0x2E]\n\ - ldrb r0, [r2]\n\ - muls r0, r1\n\ - adds r0, r4\n\ - adds r0, 0x20\n\ - strb r3, [r0]\n\ - ldr r1, _080209B0 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x2\n\ - str r0, [r1]\n\ -_08020996:\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\ -_080209A4: .4byte gBattleExecBuffer\n\ -_080209A8: .4byte gBattleMons\n\ -_080209AC: .4byte gBank1\n\ -_080209B0: .4byte gBattlescriptCurrInstr\n\ - .syntax divided\n"); -} - -#endif // NONMATCHING #ifdef NONMATCHING static void atk24(void) @@ -6952,7 +5906,7 @@ _08020B50: .4byte gBattlescriptCurrInstr\n\ static void MoveValuesCleanUp(void) { gBattleMoveFlags = 0; - BATTLE_STRUCT->dmgMultiplier = 1; + gBattleStruct->dmgMultiplier = 1; gCritMultiplier = 1; gBattleCommunication[MOVE_EFFECT_BYTE] = 0; gBattleCommunication[6] = 0; @@ -7417,7 +6371,7 @@ static void atk46_playanimation2(void) // animation Id is stored in the first po static void atk47_setgraphicalstatchangevalues(void) { u8 to_add = 0; - switch (BATTLE_STRUCT->statChanger & 0xF0) + switch (gBattleStruct->statChanger & 0xF0) { case 0x10: //+1 to_add = 0xF; @@ -7432,8 +6386,8 @@ static void atk47_setgraphicalstatchangevalues(void) to_add = 0x2E; break; } - BATTLE_STRUCT->animArg1 = (BATTLE_STRUCT->statChanger & 0xF) + to_add - 1; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->animArg1 = (gBattleStruct->statChanger & 0xF) + to_add - 1; + gBattleStruct->animArg2 = 0; gBattlescriptCurrInstr++; } @@ -7507,14 +6461,14 @@ static void atk48_playstatchangeanimation(void) stat_animID = 0x38; } if ((T2_READ_8(gBattlescriptCurrInstr + 3) & 2 && changeable_stats <= 1) - || changeable_stats == 0 || BATTLE_STRUCT->filler2[0] != 0) + || changeable_stats == 0 || gBattleStruct->filler2[0] != 0) gBattlescriptCurrInstr += 4; else { EmitBattleAnimation(0, 1, stat_animID); MarkBufferBankForExecution(gActiveBank); if ((T2_READ_8(gBattlescriptCurrInstr + 3) & 4) && changeable_stats > 1) - BATTLE_STRUCT->filler2[0] = 1; + gBattleStruct->filler2[0] = 1; gBattlescriptCurrInstr += 4; } } @@ -7807,14 +6761,14 @@ static void atk49_moveend(void) hold_effect_atk = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); choiced_move_atk = (u16*)(gBankAttacker * (ewram_addr + 0x160E8)); - if (BATTLE_STRUCT->dynamicMoveType) - move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F; + if (gBattleStruct->dynamicMoveType) + move_type = gBattleStruct->dynamicMoveType & 0x3F; else move_type = gBattleMoves[gCurrentMove].type; do { - switch (BATTLE_STRUCT->cmd49StateTracker) + switch (gBattleStruct->cmd49StateTracker) { case 0: //rage check if (gBattleMons[gBankTarget].status2 & STATUS2_RAGE @@ -7828,7 +6782,7 @@ static void atk49_moveend(void) gBattlescriptCurrInstr = BattleScript_RageIsBuilding; effect = 1; } - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 1: //defrosting check if (gBattleMons[gBankTarget].status1 & STATUS_FREEZE @@ -7844,28 +6798,28 @@ static void atk49_moveend(void) gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove; effect = 1; } - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 2: //target synchronize if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBankTarget, 0, 0, 0)) effect = 1; - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 3: //contact abilities if (AbilityBattleEffects(ABILITYEFFECT_CONTACT, gBankTarget, 0, 0, 0)) effect = 1; - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 4: //status immunities if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0)) effect = 1; //it loops through 4 banks, so we increment after its done with all banks else - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 5: //attacker synchronize if (AbilityBattleEffects(ABILITYEFFECT_ATK_SYNCHRONIZE, gBankAttacker, 0, 0, 0)) effect = 1; - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 6: //update choice band move if (gHitMarker & HITMARKER_OBEYS && hold_effect_atk == HOLD_EFFECT_CHOICE_BAND @@ -7877,7 +6831,7 @@ static void atk49_moveend(void) if (i == 4) *choiced_move_atk = 0; } - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 7: //changed held items for (i = 0; i < gNoOfAllBanks; i++) @@ -7886,7 +6840,7 @@ static void atk49_moveend(void) if (CHANGED_ITEM(i)) gBattleMons[i].item = CHANGED_ITEM(i); } - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 8: //make sprite invisible if (gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER) @@ -7896,7 +6850,7 @@ static void atk49_moveend(void) EmitSpriteInvisibility(0, 1); MarkBufferBankForExecution(gActiveBank); } - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 9: //semi-invlurneable attacker make visible if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) @@ -7908,7 +6862,7 @@ static void atk49_moveend(void) gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER); gSpecialStatuses[gBankAttacker].restored_bank_sprite = 1; } - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 10: //semi-invlurneable target make visible if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) @@ -7920,7 +6874,7 @@ static void atk49_moveend(void) gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER); gSpecialStatuses[gBankTarget].restored_bank_sprite = 1; } - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 11: // } @@ -7929,7 +6883,7 @@ static void atk49_moveend(void) } #else __attribute__((naked)) -static void atk49_moveend(void) +void atk49_moveend(void) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -8865,7 +7819,7 @@ _08021FA0:\n\ ldr r0, _08021FD4 @ =0x0000ffff\n\ cmp r2, r0\n\ bne _08021FEC\n\ - ldr r1, _08021FE8 @ =gMoveHitWith\n\ + ldr r1, _08021FE8 @ =gLastLandedMoves\n\ ldr r4, _08021FDC @ =gBankTarget\n\ ldrb r0, [r4]\n\ lsls r0, 1\n\ @@ -8879,9 +7833,9 @@ _08021FD8: .4byte gUnknown_02024C4C\n\ _08021FDC: .4byte gBankTarget\n\ _08021FE0: .4byte gUnknown_02024C5C\n\ _08021FE4: .4byte gBattleMoveFlags\n\ -_08021FE8: .4byte gMoveHitWith\n\ +_08021FE8: .4byte gLastLandedMoves\n\ _08021FEC:\n\ - ldr r0, _08022014 @ =gMoveHitWith\n\ + ldr r0, _08022014 @ =gLastLandedMoves\n\ ldr r5, _08022018 @ =gBankTarget\n\ ldrb r1, [r5]\n\ lsls r1, 1\n\ @@ -8894,7 +7848,7 @@ _08021FEC:\n\ ldrb r3, [r0]\n\ cmp r3, 0\n\ beq _08022028\n\ - ldr r0, _08022024 @ =gUnknown_02024C44\n\ + ldr r0, _08022024 @ =gLastHitByType\n\ ldrb r1, [r5]\n\ lsls r1, 1\n\ adds r1, r0\n\ @@ -8902,13 +7856,13 @@ _08021FEC:\n\ ands r0, r3\n\ b _08021C22\n\ .align 2, 0\n\ -_08022014: .4byte gMoveHitWith\n\ +_08022014: .4byte gLastLandedMoves\n\ _08022018: .4byte gBankTarget\n\ _0802201C: .4byte gCurrentMove\n\ _08022020: .4byte 0x0001601c\n\ -_08022024: .4byte gUnknown_02024C44\n\ +_08022024: .4byte gLastHitByType\n\ _08022028:\n\ - ldr r0, _08022044 @ =gUnknown_02024C44\n\ + ldr r0, _08022044 @ =gLastHitByType\n\ ldr r1, _08022048 @ =gBankTarget\n\ ldrb r2, [r1]\n\ lsls r2, 1\n\ @@ -8922,10 +7876,10 @@ _08022028:\n\ strh r0, [r2]\n\ b _08022244\n\ .align 2, 0\n\ -_08022044: .4byte gUnknown_02024C44\n\ +_08022044: .4byte gLastHitByType\n\ _08022048: .4byte gBankTarget\n\ _0802204C:\n\ - ldr r0, _0802205C @ =gMoveHitWith\n\ + ldr r0, _0802205C @ =gLastLandedMoves\n\ ldr r2, _08022060 @ =gBankTarget\n\ ldrb r1, [r2]\n\ lsls r1, 1\n\ @@ -8933,7 +7887,7 @@ _0802204C:\n\ ldr r0, _08022064 @ =0x0000ffff\n\ b _08021C22\n\ .align 2, 0\n\ -_0802205C: .4byte gMoveHitWith\n\ +_0802205C: .4byte gLastLandedMoves\n\ _08022060: .4byte gBankTarget\n\ _08022064: .4byte 0x0000ffff\n\ _08022068:\n\ @@ -9250,7 +8204,7 @@ static void atk4A_typecalc2(void) { gLastUsedAbility = gBattleMons[gBankTarget].ability; gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED); - gMoveHitWith[gBankTarget] = 0; + gLastLandedMoves[gBankTarget] = 0; gBattleCommunication[6] = move_type; RecordAbilityBattle(gBankTarget, gLastUsedAbility); } @@ -9305,7 +8259,7 @@ static void atk4A_typecalc2(void) { gLastUsedAbility = ABILITY_WONDER_GUARD; gBattleMoveFlags |= MOVESTATUS_MISSED; - gMoveHitWith[gBankTarget] = 0; + gLastLandedMoves[gBankTarget] = 0; gBattleCommunication[6] = 3; RecordAbilityBattle(gBankTarget, gLastUsedAbility); } @@ -9340,27 +8294,19 @@ static void atk4C_getswitchedmondata(void) gBattlescriptCurrInstr += 2; } -static inline u8 get_knocked_off_byte(u8 bank) -{ - register u32 side asm("r2") = GetBankSide(bank); - register struct WishFutureKnock* dummy = &gWishFutureKnock; - register u8* aa = ((u8*)((u8*)(dummy))); - register u8* bb = aa + 0x29; - register u8* cc asm("r0") = side + bb; - return *cc; -} - static void atk4D_switchindataupdate(void) { - struct BattlePokemon OldData; - int i; + struct BattlePokemon oldData; + s32 i; u8 *monData; + if (gBattleExecBuffer) return; - gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); - OldData = gBattleMons[gActiveBank]; + gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]); + oldData = gBattleMons[gActiveBank]; monData = (u8*)(&gBattleMons[gActiveBank]); + for (i = 0; i < sizeof(struct BattlePokemon); i++) { monData[i] = gBattleBufferB[gActiveBank][4 + i]; @@ -9369,8 +8315,10 @@ static void atk4D_switchindataupdate(void) gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1; gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2; gBattleMons[gActiveBank].ability = GetAbilityBySpecies(gBattleMons[gActiveBank].species, gBattleMons[gActiveBank].altAbility); - //check knocked off item - if (get_knocked_off_byte(gActiveBank) & gBitTable[gBattlePartyID[gActiveBank]]) + + // check knocked off item + i = GetBankSide(gActiveBank); + if (gWishFutureKnock.knockedOffPokes[i] & gBitTable[gBattlePartyID[gActiveBank]]) { gBattleMons[gActiveBank].item = 0; } @@ -9379,17 +8327,16 @@ static void atk4D_switchindataupdate(void) { for (i = 0; i < 8; i++) { - gBattleMons[gActiveBank].statStages[i] = OldData.statStages[i]; + gBattleMons[gActiveBank].statStages[i] = oldData.statStages[i]; } - gBattleMons[gActiveBank].status2 = OldData.status2; + gBattleMons[gActiveBank].status2 = oldData.status2; } - SwitchInClearStructs(); - BATTLE_STRUCT->scriptingActive = gActiveBank; - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 7; - gBattleTextBuff1[2] = gActiveBank; - gBattleTextBuff1[3] = gBattlePartyID[gActiveBank]; - gBattleTextBuff1[4] = EOS; + + SwitchInClearSetData(); + + gBattleStruct->scriptingActive = gActiveBank; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gActiveBank, gBattlePartyID[gActiveBank]); gBattlescriptCurrInstr += 2; } @@ -9484,7 +8431,7 @@ static void atk4F_jumpifcantswitch(void) void sub_8022A3C(u8 unkown) { BATTLE_PARTY_ID(gActiveBank) = gBattlePartyID[gActiveBank]; - EmitChoosePokemon(0, 1, unkown, 0, BATTLE_STRUCT->unk1606C[gActiveBank]); + EmitChoosePokemon(0, 1, unkown, 0, gBattleStruct->unk1606C[gActiveBank]); MarkBufferBankForExecution(gActiveBank); } @@ -10630,7 +9577,7 @@ static void atk52_switchineffects(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattleStruct->scriptingActive = gActiveBank; BattleScriptPushCursor(); if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0) @@ -10737,9 +9684,9 @@ void atk59_handlelearnnewmove(void) u8* loc1 = T1_READ_PTR(gBattlescriptCurrInstr + 1); u8* loc2 = T1_READ_PTR(gBattlescriptCurrInstr + 5); - u16 ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], T2_READ_8(gBattlescriptCurrInstr + 9)); + u16 ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterID], T2_READ_8(gBattlescriptCurrInstr + 9)); while (ret == 0xFFFE) - ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0); + ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterID], 0); if (ret == 0) { @@ -10752,12 +9699,12 @@ void atk59_handlelearnnewmove(void) else { gActiveBank = GetBankByIdentity(0); - if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) + if (gBattlePartyID[gActiveBank] == gBattleStruct->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) //what is else if { gActiveBank = GetBankByIdentity(2); - if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) + if (gBattlePartyID[gActiveBank] == gBattleStruct->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret); } gBattlescriptCurrInstr = loc1; @@ -10781,11 +9728,11 @@ void sub_8023AD8(void) static void atk5A_yesnoboxlearnmove(void) { gActiveBank = 0; - switch (BATTLE_STRUCT->atk5A_StateTracker) + switch (gBattleStruct->atk5A_StateTracker) { case 0: sub_8023A80(); - BATTLE_STRUCT->atk5A_StateTracker++; + gBattleStruct->atk5A_StateTracker++; gBattleCommunication[1] = 0; sub_802BC6C(); break; @@ -10811,7 +9758,7 @@ static void atk5A_yesnoboxlearnmove(void) { sub_8023AD8(); BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - BATTLE_STRUCT->atk5A_StateTracker++; + gBattleStruct->atk5A_StateTracker++; return; } goto state_tracker_4; @@ -10820,14 +9767,14 @@ static void atk5A_yesnoboxlearnmove(void) { PlaySE(SE_SELECT); state_tracker_4: - BATTLE_STRUCT->atk5A_StateTracker = 4; + gBattleStruct->atk5A_StateTracker = 4; } break; case 2: if (!gPaletteFade.active) { - ShowSelectMovePokemonSummaryScreen(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn); - BATTLE_STRUCT->atk5A_StateTracker++; + ShowSelectMovePokemonSummaryScreen(gPlayerParty, gBattleStruct->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn); + gBattleStruct->atk5A_StateTracker++; } break; case 3: @@ -10836,15 +9783,15 @@ static void atk5A_yesnoboxlearnmove(void) u8 move_pos = sub_809FA30(); if (move_pos == 4) { - BATTLE_STRUCT->atk5A_StateTracker = 4; + gBattleStruct->atk5A_StateTracker = 4; } else { - u16 move = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MOVE1 + move_pos); + u16 move = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MOVE1 + move_pos); if (IsHMMove2(move)) { PrepareStringBattle(0x13F, gActiveBank); - BATTLE_STRUCT->atk5A_StateTracker = 5; + gBattleStruct->atk5A_StateTracker = 5; } else { @@ -10860,15 +9807,15 @@ static void atk5A_yesnoboxlearnmove(void) ptr += 4; } ptr[0] = 0xFF; - RemoveMonPPBonus(&gPlayerParty[BATTLE_STRUCT->expGetterID], move_pos); - SetMonMoveSlot(&gPlayerParty[BATTLE_STRUCT->expGetterID], gMoveToLearn, move_pos); - if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED) + RemoveMonPPBonus(&gPlayerParty[gBattleStruct->expGetterID], move_pos); + SetMonMoveSlot(&gPlayerParty[gBattleStruct->expGetterID], gMoveToLearn, move_pos); + if (gBattlePartyID[0] == gBattleStruct->expGetterID && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[0].unk18_b & gBitTable[move_pos])) { RemoveBattleMonPPBonus(&gBattleMons[0], move_pos); SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, move_pos); } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED) + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[2] == gBattleStruct->expGetterID && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[2].unk18_b & gBitTable[move_pos])) { RemoveBattleMonPPBonus(&gBattleMons[2], move_pos); @@ -10885,7 +9832,7 @@ static void atk5A_yesnoboxlearnmove(void) case 5: if (gBattleExecBuffer == 0) { - BATTLE_STRUCT->atk5A_StateTracker = 2; + gBattleStruct->atk5A_StateTracker = 2; } break; } @@ -10893,11 +9840,11 @@ static void atk5A_yesnoboxlearnmove(void) static void atk5B_yesnoboxstoplearningmove(void) { - switch (BATTLE_STRUCT->atk5A_StateTracker) + switch (gBattleStruct->atk5A_StateTracker) { case 0: sub_8023A80(); - BATTLE_STRUCT->atk5A_StateTracker++; + gBattleStruct->atk5A_StateTracker++; gBattleCommunication[1] = 0; sub_802BC6C(); break; @@ -10959,7 +9906,7 @@ static void atk5D_getmoneyreward(void) u32 money_to_give; if (gTrainerBattleOpponent == 0x400) { - money_to_give = 2 * BATTLE_STRUCT->moneyMultiplier * MONEY_UNKNOWN; + money_to_give = 2 * gBattleStruct->moneyMultiplier * MONEY_UNKNOWN; } else { @@ -10987,7 +9934,7 @@ static void atk5D_getmoneyreward(void) } for (; gTrainerMoney[i * 4] != 0xFF && gTrainerMoney[i * 4 + 1] != gTrainers[gTrainerBattleOpponent].trainerClass ; i++) {} - money_to_give = (r5 << 2) * BATTLE_STRUCT->moneyMultiplier; + money_to_give = (r5 << 2) * gBattleStruct->moneyMultiplier; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) money_to_give = 2 * gTrainerMoney[i * 4 + 1] * money_to_give; else @@ -11207,6 +10154,76 @@ _08024190: .4byte gBattlescriptCurrInstr\n\ } #endif //NONMATCHING +/* +static u32 GetTrainerMoneyToGive(u16 trainerId) +{ + u32 i = 0; + u32 lastMonLevel = 0; + u32 moneyReward = 0; + + if (trainerId == SECRET_BASE_OPPONENT) + { + moneyReward = 20 * eSecretBaseRecord->partyLevels[0] * gBattleStruct->moneyMultiplier; + } + else + { + switch (gTrainers[trainerId].partyFlags) + { + case 0: + { + const struct TrainerMonNoItemDefaultMoves *party = gTrainers[trainerId].party.NoItemDefaultMoves; + lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; + } + break; + case F_TRAINER_PARTY_CUSTOM_MOVESET: + { + const struct TrainerMonNoItemCustomMoves *party = gTrainers[trainerId].party.NoItemCustomMoves; + lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; + } + break; + case F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemDefaultMoves *party = gTrainers[trainerId].party.ItemDefaultMoves; + lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; + } + break; + case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemCustomMoves *party = gTrainers[trainerId].party.ItemCustomMoves; + lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; + } + break; + } + + for (; gTrainerMoneyTable[i].classId != 0xFF; i++) + { + if (gTrainerMoneyTable[i].classId == gTrainers[trainerId].trainerClass) + break; + } + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * 2 * gTrainerMoneyTable[i].value; + else + moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * gTrainerMoneyTable[i].value; + } + + return moneyReward; +} + +static void atk5D_getmoneyreward(void) +{ + u32 moneyReward = GetTrainerMoneyToGive(gTrainerBattleOpponent_A); + if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + moneyReward += GetTrainerMoneyToGive(gTrainerBattleOpponent_B); + + AddMoney(&gSaveBlock1Ptr->money, moneyReward); + + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 5, moneyReward) + + gBattlescriptCurrInstr++; +} +*/ + static void atk5E_8025A70(void) { gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); @@ -11471,7 +10488,7 @@ static void atk6C_drawlvlupbox(void) { u8 r1 = 0; u8 r7 = 0; - switch (BATTLE_STRUCT->atk6C_statetracker) + switch (gBattleStruct->atk6C_statetracker) { case 0: sub_802BBD4(0xB, 0, 0x1D, 0x7, r1); @@ -11956,13 +10973,13 @@ static void atk73_hpthresholds(void) result = 1; if (result > 69 || !gBattleMons[opposing_bank].hp) - BATTLE_STRUCT->hpScale = 0; + gBattleStruct->hpScale = 0; else if (result > 39) - BATTLE_STRUCT->hpScale = 1; + gBattleStruct->hpScale = 1; else if (result > 9) - BATTLE_STRUCT->hpScale = 2; + gBattleStruct->hpScale = 2; else - BATTLE_STRUCT->hpScale = 3; + gBattleStruct->hpScale = 3; } gBattlescriptCurrInstr += 2; @@ -11977,17 +10994,17 @@ static void atk74_hpthresholds2(void) { gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); opposing_bank = gActiveBank ^ 1; - hp_switchout = ewram160BCarr(GetBankSide(opposing_bank)); //BATTLE_STRUCT->HP_OnSwitchout[GetBankSide(opposing_bank)]; + hp_switchout = ewram160BCarr(GetBankSide(opposing_bank)); //gBattleStruct->HP_OnSwitchout[GetBankSide(opposing_bank)]; result = (hp_switchout - gBattleMons[opposing_bank].hp) * 100 / hp_switchout; if (gBattleMons[opposing_bank].hp >= hp_switchout) - BATTLE_STRUCT->hpScale = 0; + gBattleStruct->hpScale = 0; else if (result <= 29) - BATTLE_STRUCT->hpScale = 1; + gBattleStruct->hpScale = 1; else if (result <= 69) - BATTLE_STRUCT->hpScale = 2; + gBattleStruct->hpScale = 2; else - BATTLE_STRUCT->hpScale = 3; + gBattleStruct->hpScale = 3; } gBattlescriptCurrInstr += 2; @@ -11996,7 +11013,7 @@ static void atk74_hpthresholds2(void) static void atk75_useitemonopponent(void) { gBankInMenu = gBankAttacker; - sub_803E1B0(&gEnemyParty[gBattlePartyID[gBankAttacker]], gLastUsedItem, gBattlePartyID[gBankAttacker], 0, 1); + PokemonUseItemEffects(&gEnemyParty[gBattlePartyID[gBankAttacker]], gLastUsedItem, gBattlePartyID[gBankAttacker], 0, 1); gBattlescriptCurrInstr += 1; } @@ -12039,9 +11056,9 @@ static void atk76_various(void) { int i; u16* choiced_move; - if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID) + if (gBattlePartyID[0] == gBattleStruct->expGetterID) goto ACTIVE_0; - if (gBattlePartyID[2] != BATTLE_STRUCT->expGetterID) + if (gBattlePartyID[2] != gBattleStruct->expGetterID) break; if (gBattlePartyID[0] == gBattlePartyID[2]) { @@ -12355,7 +11372,7 @@ bool8 UproarWakeUpCheck(u8 bank) { if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || gBattleMons[bank].ability == ABILITY_SOUNDPROOF) //wtf gamefreak, you should check this only once, not every time in a loop... continue; - BATTLE_STRUCT->scriptingActive = i; + gBattleStruct->scriptingActive = i; if (gBankTarget == 0xFF) gBankTarget = i; else if (gBankTarget == i) @@ -12424,7 +11441,7 @@ static void atk86_stockpiletobasedamage(void) gSideAffecting[GetBankIdentity(gBankTarget) & 1], 0, 0, gBankAttacker, gBankTarget) * gDisableStructs[gBankAttacker].stockpileCounter; - BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter; + gBattleStruct->animTurn = gDisableStructs[gBankAttacker].stockpileCounter; if (gProtectStructs[gBankAttacker].helpingHand) gBattleMoveDamage = gBattleMoveDamage * 15 / 10; @@ -12455,7 +11472,7 @@ static void atk87_stockpiletohpheal(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; - BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter; + gBattleStruct->animTurn = gDisableStructs[gBankAttacker].stockpileCounter; gDisableStructs[gBankAttacker].stockpileCounter = 0; gBattlescriptCurrInstr += 5; gBankTarget = gBankAttacker; @@ -12464,767 +11481,186 @@ static void atk87_stockpiletohpheal(void) static void atk88_negativedamage(void) { - gBattleMoveDamage = -(gHP_dealt / 2); + gBattleMoveDamage = -(gHpDealt / 2); if (gBattleMoveDamage == 0) gBattleMoveDamage = -1; gBattlescriptCurrInstr++; } -#ifdef NONMATCHING -u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) +static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr) { - u8 r9 = 0; - u8 r10 = 0; - u8 index; - if (flags & 0x40) + bool8 certain = FALSE; + bool8 notProtectAffected = FALSE; + u32 index; + + if (flags & MOVE_EFFECT_AFFECTS_USER) gActiveBank = gBankAttacker; else gActiveBank = gBankTarget; - flags &= ~(0x40); - if (flags & 0x80) - r9++; - flags &= ~(0x80); - if (flags & 0x20) - r10++; - flags &= ~(0x20); - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 5; - gBattleTextBuff1[2] = stat; - gBattleTextBuff1[3] = 0xFF; + flags &= ~(MOVE_EFFECT_AFFECTS_USER); + + if (flags & MOVE_EFFECT_CERTAIN) + certain++; + flags &= ~(MOVE_EFFECT_CERTAIN); + + if (flags & STAT_CHANGE_NOT_PROTECT_AFFECTED) + notProtectAffected++; + flags &= ~(STAT_CHANGE_NOT_PROTECT_AFFECTED); - if ((statchanger << 0x18) < 0) //stat decrease + PREPARE_STAT_BUFFER(gBattleTextBuff1, statId) + + if ((statValue << 0x18) < 0) // stat decrease { - if (gSideTimers[GetBankIdentity(gActiveBank) & 1].mistTimer && !r9 && gCurrentMove != MOVE_CURSE) + if (gSideTimers[GET_BANK_SIDE(gActiveBank)].mistTimer + && !certain && gCurrentMove != MOVE_CURSE) { - if (flags == 1) + if (flags == STAT_CHANGE_BS_PTR) { - if (gSpecialStatuses[gActiveBank].statloweringflag) - gBattlescriptCurrInstr = bs_ptr; + if (gSpecialStatuses[gActiveBank].statLowered) + { + gBattlescriptCurrInstr = BS_ptr; + } else { - BattleScriptPush(bs_ptr); - BATTLE_STRUCT->scriptingActive = gActiveBank; + BattleScriptPush(BS_ptr); + gBattleStruct->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_MistProtected; - gSpecialStatuses[gActiveBank].statloweringflag = 1; + gSpecialStatuses[gActiveBank].statLowered = 1; } } - return 1; + return STAT_CHANGE_DIDNT_WORK; } - else if (gCurrentMove != MOVE_CURSE && r10 != 1 && JumpIfMoveAffectedByProtect(0)) + else if (gCurrentMove != MOVE_CURSE + && notProtectAffected != TRUE && JumpIfMoveAffectedByProtect(0)) { gBattlescriptCurrInstr = BattleScript_ButItFailed; - return 1; + return STAT_CHANGE_DIDNT_WORK; } - else if ((gBattleMons[gActiveBank].ability == ABILITY_CLEAR_BODY || gBattleMons[gActiveBank].ability == ABILITY_WHITE_SMOKE) && !r9 && gCurrentMove != MOVE_CURSE) + else if ((gBattleMons[gActiveBank].ability == ABILITY_CLEAR_BODY + || gBattleMons[gActiveBank].ability == ABILITY_WHITE_SMOKE) + && !certain && gCurrentMove != MOVE_CURSE) { - if (flags == 1) + if (flags == STAT_CHANGE_BS_PTR) { - if (gSpecialStatuses[gActiveBank].statloweringflag) - gBattlescriptCurrInstr = bs_ptr; + if (gSpecialStatuses[gActiveBank].statLowered) + { + gBattlescriptCurrInstr = BS_ptr; + } else { - BattleScriptPush(bs_ptr); - BATTLE_STRUCT->scriptingActive = gActiveBank; + BattleScriptPush(BS_ptr); + gBattleStruct->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; RecordAbilityBattle(gActiveBank, gLastUsedAbility); - gSpecialStatuses[gActiveBank].statloweringflag = 1; + gSpecialStatuses[gActiveBank].statLowered = 1; } } - return 1; + return STAT_CHANGE_DIDNT_WORK; } - else if (gBattleMons[gActiveBank].ability == ABILITY_KEEN_EYE && !r9 && stat == STAT_STAGE_ACC) + else if (gBattleMons[gActiveBank].ability == ABILITY_KEEN_EYE + && !certain && statId == STAT_STAGE_ACC) { - if (flags == 1) + if (flags == STAT_CHANGE_BS_PTR) { - BattleScriptPush(bs_ptr); - BATTLE_STRUCT->scriptingActive = gActiveBank; + BattleScriptPush(BS_ptr); + gBattleStruct->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; RecordAbilityBattle(gActiveBank, gLastUsedAbility); } - return 1; + return STAT_CHANGE_DIDNT_WORK; } - else if (gBattleMons[gActiveBank].ability == ABILITY_HYPER_CUTTER && !r9 && stat == STAT_STAGE_ATK) + else if (gBattleMons[gActiveBank].ability == ABILITY_HYPER_CUTTER + && !certain && statId == STAT_STAGE_ATK) { - if (flags == 1) + if (flags == STAT_CHANGE_BS_PTR) { - BattleScriptPush(bs_ptr); - BATTLE_STRUCT->scriptingActive = gActiveBank; + BattleScriptPush(BS_ptr); + gBattleStruct->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; RecordAbilityBattle(gActiveBank, gLastUsedAbility); } - return 1; + return STAT_CHANGE_DIDNT_WORK; } else if (gBattleMons[gActiveBank].ability == ABILITY_SHIELD_DUST && flags == 0) - return 1; - else //decrease { - statchanger = -((statchanger >> 4) & (7)); - gBattleTextBuff2[0] = 0xFD; + return STAT_CHANGE_DIDNT_WORK; + } + else // try to decrease + { + statValue = -GET_STAT_BUFF_VALUE(statValue); + gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN; index = 1; - if (statchanger == -2) + if (statValue == -2) { - gBattleTextBuff2[1] = 0; - gBattleTextBuff2[2] = 0xD3; //harshly - gBattleTextBuff2[3] = 0x0; + gBattleTextBuff2[1] = B_BUFF_STRING; + gBattleTextBuff2[2] = STRINGID_STATHARSHLY; + gBattleTextBuff2[3] = STRINGID_STATHARSHLY >> 8; index = 4; } - gBattleTextBuff2[index] = 0; + gBattleTextBuff2[index] = B_BUFF_STRING; index++; - gBattleTextBuff2[index] = 0xD4; //fell + gBattleTextBuff2[index] = STRINGID_STATFELL; index++; - gBattleTextBuff2[index] = 0; + gBattleTextBuff2[index] = STRINGID_STATFELL >> 8; index++; - gBattleTextBuff2[index] = 0xFF; + gBattleTextBuff2[index] = B_BUFF_EOS; - if (gBattleMons[gActiveBank].statStages[stat] == 0) - { + if (gBattleMons[gActiveBank].statStages[statId] == 0) gBattleCommunication[MULTISTRING_CHOOSER] = 2; - } else - { - u8 stringID = 0; - if (gBankTarget == gActiveBank) - stringID = 1; - gBattleCommunication[MULTISTRING_CHOOSER] = stringID; - } + gBattleCommunication[MULTISTRING_CHOOSER] = (gBankTarget == gActiveBank); + } } - else //stat increase + else // stat increase { - statchanger = (statchanger >> 4) & (7); - gBattleTextBuff2[0] = 0xFD; + statValue = GET_STAT_BUFF_VALUE(statValue); + gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN; index = 1; - if (statchanger == 2) + if (statValue == 2) { - gBattleTextBuff2[1] = 0; - gBattleTextBuff2[2] = 0xD1; //sharply - gBattleTextBuff2[3] = 0x0; + gBattleTextBuff2[1] = B_BUFF_STRING; + gBattleTextBuff2[2] = STRINGID_STATSHARPLY; + gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8; index = 4; } - gBattleTextBuff2[index] = 0; + gBattleTextBuff2[index] = B_BUFF_STRING; index++; - gBattleTextBuff2[index] = 0xD2; //rose + gBattleTextBuff2[index] = STRINGID_STATROSE; index++; - gBattleTextBuff2[index] = 0; + gBattleTextBuff2[index] = STRINGID_STATROSE >> 8; index++; - gBattleTextBuff2[index] = 0xFF; + gBattleTextBuff2[index] = B_BUFF_EOS; - if (gBattleMons[gActiveBank].statStages[stat] == 0xC) - { + if (gBattleMons[gActiveBank].statStages[statId] == 0xC) gBattleCommunication[MULTISTRING_CHOOSER] = 2; - } else - { - u8 stringID = 0; - if (gBankTarget == gActiveBank) - stringID = 1; - gBattleCommunication[MULTISTRING_CHOOSER] = stringID; - } + gBattleCommunication[MULTISTRING_CHOOSER] = (gBankTarget == gActiveBank); } - gBattleMons[gActiveBank].statStages[stat] += statchanger; - if (gBattleMons[gActiveBank].statStages[stat] < 0) - gBattleMons[gActiveBank].statStages[stat] = 0; - if (gBattleMons[gActiveBank].statStages[stat] > 0xC) - gBattleMons[gActiveBank].statStages[stat] = 0xC; + gBattleMons[gActiveBank].statStages[statId] += statValue; + if (gBattleMons[gActiveBank].statStages[statId] < 0) + gBattleMons[gActiveBank].statStages[statId] = 0; + if (gBattleMons[gActiveBank].statStages[statId] > 0xC) + gBattleMons[gActiveBank].statStages[statId] = 0xC; - if (gBattleCommunication[MULTISTRING_CHOOSER] == 2) - { - if (flags & 1) - gBattleMoveFlags |= MOVESTATUS_MISSED; - if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & 1)) //what the actual fuck gamefreak... - return 1; - } - return 0; -} + if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && flags & STAT_CHANGE_BS_PTR) + gBattleMoveFlags |= MOVESTATUS_MISSED; -#else -__attribute__((naked)) -u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) -{ - 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\ - mov r8, r3\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - lsls r1, 24\n\ - lsrs r7, r1, 24\n\ - lsls r2, 24\n\ - lsrs r5, r2, 24\n\ - movs r0, 0\n\ - mov r9, r0\n\ - mov r10, r0\n\ - movs r0, 0x40\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _08025E54\n\ - ldr r0, _08025E4C @ =gActiveBank\n\ - ldr r1, _08025E50 @ =gBankAttacker\n\ - b _08025E58\n\ - .align 2, 0\n\ -_08025E4C: .4byte gActiveBank\n\ -_08025E50: .4byte gBankAttacker\n\ -_08025E54:\n\ - ldr r0, _08025EF8 @ =gActiveBank\n\ - ldr r1, _08025EFC @ =gBankTarget\n\ -_08025E58:\n\ - ldrb r1, [r1]\n\ - strb r1, [r0]\n\ - movs r0, 0xBF\n\ - ands r5, r0\n\ - movs r0, 0x80\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _08025E72\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_08025E72:\n\ - movs r0, 0x7F\n\ - ands r5, r0\n\ - movs r0, 0x20\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _08025E88\n\ - mov r0, r10\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ -_08025E88:\n\ - movs r0, 0xDF\n\ - ands r5, r0\n\ - ldr r1, _08025F00 @ =gBattleTextBuff1\n\ - movs r4, 0\n\ - movs r2, 0xFD\n\ - strb r2, [r1]\n\ - movs r0, 0x5\n\ - strb r0, [r1, 0x1]\n\ - strb r7, [r1, 0x2]\n\ - movs r3, 0x1\n\ - negs r3, r3\n\ - mov r12, r3\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x3]\n\ - lsls r0, r6, 24\n\ - cmp r0, 0\n\ - blt _08025EAC\n\ - b _080261B0\n\ -_08025EAC:\n\ - ldr r4, _08025F04 @ =gSideTimers\n\ - ldr r1, _08025EF8 @ =gActiveBank\n\ - ldrb r0, [r1]\n\ - bl GetBankIdentity\n\ - movs r1, 0x1\n\ - ands r1, r0\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrb r0, [r0, 0x2]\n\ - cmp r0, 0\n\ - beq _08025F54\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - bne _08025F54\n\ - ldr r0, _08025F08 @ =gCurrentMove\n\ - ldrh r0, [r0]\n\ - cmp r0, 0xAE\n\ - beq _08025F84\n\ - cmp r5, 0x1\n\ - bne _08025F74\n\ - ldr r4, _08025F0C @ =gSpecialStatuses\n\ - ldr r3, _08025EF8 @ =gActiveBank\n\ - ldrb r0, [r3]\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r4\n\ - ldrb r0, [r1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _08025F14\n\ - ldr r0, _08025F10 @ =gBattlescriptCurrInstr\n\ - mov r4, r8\n\ - str r4, [r0]\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08025EF8: .4byte gActiveBank\n\ -_08025EFC: .4byte gBankTarget\n\ -_08025F00: .4byte gBattleTextBuff1\n\ -_08025F04: .4byte gSideTimers\n\ -_08025F08: .4byte gCurrentMove\n\ -_08025F0C: .4byte gSpecialStatuses\n\ -_08025F10: .4byte gBattlescriptCurrInstr\n\ -_08025F14:\n\ - mov r0, r8\n\ - bl BattleScriptPush\n\ - ldr r0, _08025F40 @ =gSharedMem\n\ - ldr r6, _08025F44 @ =gActiveBank\n\ - ldrb r1, [r6]\n\ - ldr r2, _08025F48 @ =0x00016003\n\ - adds r0, r2\n\ - strb r1, [r0]\n\ - ldr r1, _08025F4C @ =gBattlescriptCurrInstr\n\ - ldr r0, _08025F50 @ =BattleScript_MistProtected\n\ - str r0, [r1]\n\ - ldrb r1, [r6]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrb r1, [r0]\n\ - movs r2, 0x1\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08025F40: .4byte gSharedMem\n\ -_08025F44: .4byte gActiveBank\n\ -_08025F48: .4byte 0x00016003\n\ -_08025F4C: .4byte gBattlescriptCurrInstr\n\ -_08025F50: .4byte BattleScript_MistProtected\n\ -_08025F54:\n\ - ldr r0, _08025F78 @ =gCurrentMove\n\ - ldrh r0, [r0]\n\ - cmp r0, 0xAE\n\ - beq _08025F84\n\ - mov r3, r10\n\ - cmp r3, 0x1\n\ - beq _08025F84\n\ - movs r0, 0\n\ - bl JumpIfMoveAffectedByProtect\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08025F84\n\ - ldr r1, _08025F7C @ =gBattlescriptCurrInstr\n\ - ldr r0, _08025F80 @ =BattleScript_ButItFailed\n\ - str r0, [r1]\n\ -_08025F74:\n\ - movs r0, 0x1\n\ - b _080262A4\n\ - .align 2, 0\n\ -_08025F78: .4byte gCurrentMove\n\ -_08025F7C: .4byte gBattlescriptCurrInstr\n\ -_08025F80: .4byte BattleScript_ButItFailed\n\ -_08025F84:\n\ - ldr r2, _08025FCC @ =gBattleMons\n\ - ldr r1, _08025FD0 @ =gActiveBank\n\ - ldrb r3, [r1]\n\ - movs r4, 0x58\n\ - adds r0, r3, 0\n\ - muls r0, r4\n\ - adds r0, r2\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - mov r10, r2\n\ - cmp r0, 0x1D\n\ - beq _08025FA0\n\ - cmp r0, 0x49\n\ - bne _08026040\n\ -_08025FA0:\n\ - mov r0, r9\n\ - cmp r0, 0\n\ - bne _08026040\n\ - ldr r0, _08025FD4 @ =gCurrentMove\n\ - ldrh r0, [r0]\n\ - cmp r0, 0xAE\n\ - beq _08026040\n\ - cmp r5, 0x1\n\ - bne _08025F74\n\ - ldr r4, _08025FD8 @ =gSpecialStatuses\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrb r0, [r0]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _08025FE0\n\ - ldr r0, _08025FDC @ =gBattlescriptCurrInstr\n\ - mov r1, r8\n\ - str r1, [r0]\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08025FCC: .4byte gBattleMons\n\ -_08025FD0: .4byte gActiveBank\n\ -_08025FD4: .4byte gCurrentMove\n\ -_08025FD8: .4byte gSpecialStatuses\n\ -_08025FDC: .4byte gBattlescriptCurrInstr\n\ -_08025FE0:\n\ - mov r0, r8\n\ - bl BattleScriptPush\n\ - ldr r0, _08026028 @ =gSharedMem\n\ - ldr r2, _0802602C @ =gActiveBank\n\ - ldrb r1, [r2]\n\ - ldr r3, _08026030 @ =0x00016003\n\ - adds r0, r3\n\ - strb r1, [r0]\n\ - ldr r1, _08026034 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08026038 @ =BattleScript_AbilityNoStatLoss\n\ - str r0, [r1]\n\ - ldr r1, _0802603C @ =gLastUsedAbility\n\ - ldrb r0, [r2]\n\ - movs r6, 0x58\n\ - muls r0, r6\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldrb r0, [r2]\n\ - ldrb r1, [r1]\n\ - bl RecordAbilityBattle\n\ - ldr r0, _0802602C @ =gActiveBank\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrb r1, [r0]\n\ - movs r2, 0x1\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08026028: .4byte gSharedMem\n\ -_0802602C: .4byte gActiveBank\n\ -_08026030: .4byte 0x00016003\n\ -_08026034: .4byte gBattlescriptCurrInstr\n\ -_08026038: .4byte BattleScript_AbilityNoStatLoss\n\ -_0802603C: .4byte gLastUsedAbility\n\ -_08026040:\n\ - ldr r1, _08026090 @ =gActiveBank\n\ - ldrb r0, [r1]\n\ - movs r4, 0x58\n\ - muls r0, r4\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x33\n\ - bne _080260A8\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - bne _080260A8\n\ - cmp r7, 0x6\n\ - bne _080260A8\n\ - cmp r5, 0x1\n\ - bne _08025F74\n\ - mov r0, r8\n\ - bl BattleScriptPush\n\ - ldr r0, _08026094 @ =gSharedMem\n\ - ldr r3, _08026090 @ =gActiveBank\n\ - ldrb r1, [r3]\n\ - ldr r6, _08026098 @ =0x00016003\n\ - adds r0, r6\n\ - strb r1, [r0]\n\ - ldr r1, _0802609C @ =gBattlescriptCurrInstr\n\ - ldr r0, _080260A0 @ =BattleScript_AbilityNoSpecificStatLoss\n\ - str r0, [r1]\n\ - ldr r1, _080260A4 @ =gLastUsedAbility\n\ - ldrb r0, [r3]\n\ - muls r0, r4\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldrb r0, [r3]\n\ - ldrb r1, [r1]\n\ - bl RecordAbilityBattle\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08026090: .4byte gActiveBank\n\ -_08026094: .4byte gSharedMem\n\ -_08026098: .4byte 0x00016003\n\ -_0802609C: .4byte gBattlescriptCurrInstr\n\ -_080260A0: .4byte BattleScript_AbilityNoSpecificStatLoss\n\ -_080260A4: .4byte gLastUsedAbility\n\ -_080260A8:\n\ - ldr r1, _080260FC @ =gActiveBank\n\ - ldrb r0, [r1]\n\ - movs r4, 0x58\n\ - muls r0, r4\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x34\n\ - bne _08026114\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - bne _08026114\n\ - cmp r7, 0x1\n\ - bne _08026114\n\ - cmp r5, 0x1\n\ - beq _080260CA\n\ - b _08025F74\n\ -_080260CA:\n\ - mov r0, r8\n\ - bl BattleScriptPush\n\ - ldr r0, _08026100 @ =gSharedMem\n\ - ldr r3, _080260FC @ =gActiveBank\n\ - ldrb r1, [r3]\n\ - ldr r6, _08026104 @ =0x00016003\n\ - adds r0, r6\n\ - strb r1, [r0]\n\ - ldr r1, _08026108 @ =gBattlescriptCurrInstr\n\ - ldr r0, _0802610C @ =BattleScript_AbilityNoSpecificStatLoss\n\ - str r0, [r1]\n\ - ldr r1, _08026110 @ =gLastUsedAbility\n\ - ldrb r0, [r3]\n\ - muls r0, r4\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldrb r0, [r3]\n\ - ldrb r1, [r1]\n\ - bl RecordAbilityBattle\n\ - b _08025F74\n\ - .align 2, 0\n\ -_080260FC: .4byte gActiveBank\n\ -_08026100: .4byte gSharedMem\n\ -_08026104: .4byte 0x00016003\n\ -_08026108: .4byte gBattlescriptCurrInstr\n\ -_0802610C: .4byte BattleScript_AbilityNoSpecificStatLoss\n\ -_08026110: .4byte gLastUsedAbility\n\ -_08026114:\n\ - ldr r0, _080261A0 @ =gActiveBank\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x13\n\ - bne _0802612C\n\ - cmp r5, 0\n\ - bne _0802612C\n\ - b _08025F74\n\ -_0802612C:\n\ - lsls r0, r6, 24\n\ - asrs r0, 28\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - negs r0, r0\n\ - lsls r0, 24\n\ - ldr r3, _080261A4 @ =gBattleTextBuff2\n\ - movs r4, 0\n\ - movs r1, 0xFD\n\ - strb r1, [r3]\n\ - movs r2, 0x1\n\ - lsrs r6, r0, 24\n\ - asrs r0, 24\n\ - subs r1, 0xFF\n\ - cmp r0, r1\n\ - bne _08026156\n\ - strb r4, [r3, 0x1]\n\ - movs r0, 0xD3\n\ - strb r0, [r3, 0x2]\n\ - strb r4, [r3, 0x3]\n\ - movs r2, 0x4\n\ -_08026156:\n\ - adds r0, r2, r3\n\ - strb r4, [r0]\n\ - adds r2, 0x1\n\ - adds r1, r2, r3\n\ - movs r0, 0xD4\n\ - strb r0, [r1]\n\ - adds r2, 0x1\n\ - adds r0, r2, r3\n\ - strb r4, [r0]\n\ - adds r2, 0x1\n\ - adds r1, r2, r3\n\ - movs r0, 0xFF\n\ - strb r0, [r1]\n\ - ldr r1, _080261A0 @ =gActiveBank\n\ - ldrb r2, [r1]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r0, r7, r0\n\ - mov r1, r10\n\ - adds r1, 0x18\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - cmp r0, 0\n\ - beq _08026206\n\ - movs r1, 0\n\ - ldr r0, _080261A8 @ =gBankTarget\n\ - ldrb r0, [r0]\n\ - ldr r3, _080261AC @ =gBattleCommunication\n\ - mov r8, r3\n\ - cmp r0, r2\n\ - bne _0802619A\n\ - movs r1, 0x1\n\ -_0802619A:\n\ - mov r4, r8\n\ - strb r1, [r4, 0x5]\n\ - b _08026234\n\ - .align 2, 0\n\ -_080261A0: .4byte gActiveBank\n\ -_080261A4: .4byte gBattleTextBuff2\n\ -_080261A8: .4byte gBankTarget\n\ -_080261AC: .4byte gBattleCommunication\n\ -_080261B0:\n\ - asrs r6, r0, 28\n\ - movs r0, 0x7\n\ - ands r6, r0\n\ - ldr r3, _08026210 @ =gBattleTextBuff2\n\ - strb r2, [r3]\n\ - movs r2, 0x1\n\ - cmp r6, 0x2\n\ - bne _080261CA\n\ - strb r4, [r3, 0x1]\n\ - movs r0, 0xD1\n\ - strb r0, [r3, 0x2]\n\ - strb r4, [r3, 0x3]\n\ - movs r2, 0x4\n\ -_080261CA:\n\ - adds r0, r2, r3\n\ - strb r4, [r0]\n\ - adds r2, 0x1\n\ - adds r1, r2, r3\n\ - movs r0, 0xD2\n\ - strb r0, [r1]\n\ - adds r2, 0x1\n\ - adds r0, r2, r3\n\ - strb r4, [r0]\n\ - adds r2, 0x1\n\ - adds r1, r2, r3\n\ - ldrb r0, [r1]\n\ - mov r2, r12\n\ - orrs r0, r2\n\ - strb r0, [r1]\n\ - ldr r2, _08026214 @ =gBattleMons\n\ - ldr r4, _08026218 @ =gActiveBank\n\ - ldrb r3, [r4]\n\ - movs r0, 0x58\n\ - muls r0, r3\n\ - adds r0, r7, r0\n\ - adds r1, r2, 0\n\ - adds r1, 0x18\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - mov r10, r2\n\ - cmp r0, 0xC\n\ - bne _08026220\n\ -_08026206:\n\ - ldr r1, _0802621C @ =gBattleCommunication\n\ - movs r0, 0x2\n\ - strb r0, [r1, 0x5]\n\ - mov r8, r1\n\ - b _08026234\n\ - .align 2, 0\n\ -_08026210: .4byte gBattleTextBuff2\n\ -_08026214: .4byte gBattleMons\n\ -_08026218: .4byte gActiveBank\n\ -_0802621C: .4byte gBattleCommunication\n\ -_08026220:\n\ - movs r1, 0\n\ - ldr r0, _080262B4 @ =gBankTarget\n\ - ldrb r0, [r0]\n\ - ldr r2, _080262B8 @ =gBattleCommunication\n\ - mov r8, r2\n\ - cmp r0, r3\n\ - bne _08026230\n\ - movs r1, 0x1\n\ -_08026230:\n\ - mov r3, r8\n\ - strb r1, [r3, 0x5]\n\ -_08026234:\n\ - ldr r2, _080262BC @ =gActiveBank\n\ - ldrb r0, [r2]\n\ - movs r4, 0x58\n\ - adds r1, r0, 0\n\ - muls r1, r4\n\ - adds r1, r7, r1\n\ - mov r3, r10\n\ - adds r3, 0x18\n\ - adds r1, r3\n\ - lsls r0, r6, 24\n\ - asrs r0, 24\n\ - ldrb r6, [r1]\n\ - adds r0, r6\n\ - strb r0, [r1]\n\ - ldrb r0, [r2]\n\ - muls r0, r4\n\ - adds r0, r7, r0\n\ - adds r1, r0, r3\n\ - movs r0, 0\n\ - ldrsb r0, [r1, r0]\n\ - cmp r0, 0\n\ - bge _08026264\n\ - movs r0, 0\n\ - strb r0, [r1]\n\ -_08026264:\n\ - ldr r1, _080262BC @ =gActiveBank\n\ - ldrb r0, [r1]\n\ - muls r0, r4\n\ - adds r0, r7, r0\n\ - adds r1, r0, r3\n\ - movs r0, 0\n\ - ldrsb r0, [r1, r0]\n\ - cmp r0, 0xC\n\ - ble _0802627A\n\ - movs r0, 0xC\n\ - strb r0, [r1]\n\ -_0802627A:\n\ - mov r2, r8\n\ - ldrb r0, [r2, 0x5]\n\ - cmp r0, 0x2\n\ - bne _080262A2\n\ - movs r3, 0x1\n\ - ands r3, r5\n\ - cmp r3, 0\n\ - beq _08026294\n\ - ldr r0, _080262C0 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r2, 0x1\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ -_08026294:\n\ - mov r4, r8\n\ - ldrb r0, [r4, 0x5]\n\ - cmp r0, 0x2\n\ - bne _080262A2\n\ - cmp r3, 0\n\ - bne _080262A2\n\ - b _08025F74\n\ -_080262A2:\n\ - movs r0, 0\n\ -_080262A4:\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\ -_080262B4: .4byte gBankTarget\n\ -_080262B8: .4byte gBattleCommunication\n\ -_080262BC: .4byte gActiveBank\n\ -_080262C0: .4byte gBattleMoveFlags\n\ - .syntax divided"); + if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & STAT_CHANGE_BS_PTR)) + return STAT_CHANGE_DIDNT_WORK; + + return STAT_CHANGE_WORKED; } -#endif // NONMATCHING static void atk89_statbuffchange(void) { u8* jump_loc = T1_READ_PTR(gBattlescriptCurrInstr + 2); - if (ChangeStatBuffs(BATTLE_STRUCT->statChanger & 0xF0, BATTLE_STRUCT->statChanger & 0xF, T2_READ_8(gBattlescriptCurrInstr + 1), jump_loc) == 0) + if (ChangeStatBuffs(gBattleStruct->statChanger & 0xF0, gBattleStruct->statChanger & 0xF, T2_READ_8(gBattlescriptCurrInstr + 1), jump_loc) == 0) gBattlescriptCurrInstr += 6; } @@ -13456,7 +11892,7 @@ static void atk91_givepaydaymoney(void) { if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && gPaydayMoney) { - AddMoney(&gSaveBlock1.money, gPaydayMoney * BATTLE_STRUCT->moneyMultiplier); + AddMoney(&gSaveBlock1.money, gPaydayMoney * gBattleStruct->moneyMultiplier); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 1; gBattleTextBuff1[2] = 2; @@ -14142,8 +12578,8 @@ static void atk9C_setsubstitute(void) static bool8 IsMoveUncopyable(u16 move) { int i; - for (i = 0; sUnknown_081FACFE[i] != 0xFFFE && sUnknown_081FACFE[i] != move; i++) {} - return (sUnknown_081FACFE[i] != 0xFFFE); + for (i = 0; sMovesForbiddenToCopy[i] != 0xFFFE && sMovesForbiddenToCopy[i] != move; i++) {} + return (sMovesForbiddenToCopy[i] != 0xFFFE); } static void atk9D_mimicattackcopy(void) @@ -14187,13 +12623,13 @@ static void atk9D_mimicattackcopy(void) #ifdef NONMATCHING static void atk9E_metronome(void) { - // sUnknown_081FACFE + // sMovesForbiddenToCopy int i; do { while ((gCurrentMove = (Random() & 0x1FF) + 1) > 0x162); - for (i = 0; sUnknown_081FACFE[i] != gCurrentMove && sUnknown_081FACFE[i] != 0xFFFF; i++); - } while (sUnknown_081FACFE[i] != 0xFFFF); + for (i = 0; sMovesForbiddenToCopy[i] != gCurrentMove && sMovesForbiddenToCopy[i] != 0xFFFF; i++); + } while (sMovesForbiddenToCopy[i] != 0xFFFF); gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]; @@ -14211,7 +12647,7 @@ static void atk9E_metronome(void) ldr r7, _08027938 @ =gCurrentMove\n\ movs r6, 0xB1\n\ lsls r6, 1\n\ - ldr r5, _0802793C @ =sUnknown_081FACFE\n\ + ldr r5, _0802793C @ =sMovesForbiddenToCopy\n\ ldr r0, _08027940 @ =gBattlescriptCurrInstr\n\ mov r8, r0\n\ _080278CA:\n\ @@ -14273,7 +12709,7 @@ _080278F8:\n\ bx r0\n\ .align 2, 0\n\ _08027938: .4byte gCurrentMove\n\ -_0802793C: .4byte sUnknown_081FACFE\n\ +_0802793C: .4byte sMovesForbiddenToCopy\n\ _08027940: .4byte gBattlescriptCurrInstr\n\ _08027944: .4byte 0x000001ff\n\ _08027948: .4byte 0x0000ffff\n\ @@ -14398,10 +12834,10 @@ static void atkA5_painsplitdmgcalc(void) { s32 hp_diff = (gBattleMons[gBankAttacker].hp + gBattleMons[gBankTarget].hp) / 2; s32 to_store = gBattleMoveDamage = gBattleMons[gBankTarget].hp - hp_diff; - BATTLE_STRUCT->unk16014 = sBYTE0_32(to_store); - BATTLE_STRUCT->unk16015 = sBYTE1_32(to_store); - BATTLE_STRUCT->unk16016 = sBYTE2_32(to_store); - BATTLE_STRUCT->unk16017 = sBYTE3_32(to_store); + gBattleStruct->unk16014 = sBYTE0_32(to_store); + gBattleStruct->unk16015 = sBYTE1_32(to_store); + gBattleStruct->unk16016 = sBYTE2_32(to_store); + gBattleStruct->unk16017 = sBYTE3_32(to_store); gBattleMoveDamage = gBattleMons[gBankAttacker].hp - hp_diff; gSpecialStatuses[gBankTarget].moveturnLostHP = 0xFFFF; @@ -14415,7 +12851,7 @@ static void atkA5_painsplitdmgcalc(void) #ifdef NONMATCHING static void atkA6_settypetorandomresistance(void) { - if (gMoveHitWith[gBankAttacker] == 0 || gMoveHitWith[gBankAttacker] == 0xFFFF || (IsTwoTurnsMove(gMoveHitWith[gBankAttacker]) && !gProtectStructs[gBankAttacker].physicalDmg && !gProtectStructs[gBankAttacker].specialDmg)) + if (gLastLandedMoves[gBankAttacker] == 0 || gLastLandedMoves[gBankAttacker] == 0xFFFF || (IsTwoTurnsMove(gLastLandedMoves[gBankAttacker]) && !gProtectStructs[gBankAttacker].physicalDmg && !gProtectStructs[gBankAttacker].specialDmg)) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { @@ -14424,7 +12860,7 @@ static void atkA6_settypetorandomresistance(void) { while (((type = (Random() & 0x7F)) > 0x70)); type *= 3; - if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1]) + if (gTypeEffectiveness[type] == gLastHitByType[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1]) { gBattleMons[gBankAttacker].type1 = type; gBattleMons[gBankAttacker].type2 = type; @@ -14443,7 +12879,7 @@ static void atkA6_settypetorandomresistance(void) { if (gTypeEffectiveness[type] == 0xFE || gTypeEffectiveness[type] != 0xFF) { - if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1]) + if (gTypeEffectiveness[type] == gLastHitByType[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1]) { gBattleMons[gBankAttacker].type1 = gTypeEffectiveness[rands + 1]; gBattleMons[gBankAttacker].type2 = gTypeEffectiveness[rands + 1]; @@ -14472,7 +12908,7 @@ static void atkA6_settypetorandomresistance(void) mov r6, r9\n\ mov r5, r8\n\ push {r5-r7}\n\ - ldr r1, _08027FA8 @ =gMoveHitWith\n\ + ldr r1, _08027FA8 @ =gLastLandedMoves\n\ ldr r4, _08027FAC @ =gBankAttacker\n\ ldrb r0, [r4]\n\ lsls r0, 1\n\ @@ -14518,7 +12954,7 @@ _08027F8C:\n\ str r1, [r3]\n\ b _08028110\n\ .align 2, 0\n\ -_08027FA8: .4byte gMoveHitWith\n\ +_08027FA8: .4byte gLastLandedMoves\n\ _08027FAC: .4byte gBankAttacker\n\ _08027FB0: .4byte 0x0000ffff\n\ _08027FB4: .4byte gProtectStructs\n\ @@ -14590,7 +13026,7 @@ _0802802C:\n\ adds r4, r0, r4\n\ ldr r6, _08028120 @ =gTypeEffectiveness\n\ adds r3, r4, r6\n\ - ldr r1, _08028124 @ =gUnknown_02024C44\n\ + ldr r1, _08028124 @ =gLastHitByType\n\ ldr r2, _08028128 @ =gBankAttacker\n\ ldrb r5, [r2]\n\ lsls r0, r5, 1\n\ @@ -14651,7 +13087,7 @@ _080280AE:\n\ mov r4, r10\n\ ldrb r2, [r4]\n\ lsls r0, r2, 1\n\ - ldr r7, _08028124 @ =gUnknown_02024C44\n\ + ldr r7, _08028124 @ =gLastHitByType\n\ adds r0, r7\n\ ldrh r0, [r0]\n\ cmp r1, r0\n\ @@ -14708,7 +13144,7 @@ _08028110:\n\ bx r0\n\ .align 2, 0\n\ _08028120: .4byte gTypeEffectiveness\n\ -_08028124: .4byte gUnknown_02024C44\n\ +_08028124: .4byte gLastHitByType\n\ _08028128: .4byte gBankAttacker\n\ _0802812C: .4byte gBattleMons\n\ _08028130: .4byte 0x000003e7\n\ @@ -14842,7 +13278,7 @@ static void atkAA_setdestinybond(void) gBattlescriptCurrInstr++; } -static void DestinyBondFlagUpdate(void) +static void TrySetDestinyBondToHappen(void) { u8 atk_side = GetBankSide(gBankAttacker); u8 def_side = GetBankSide(gBankTarget); @@ -14852,7 +13288,7 @@ static void DestinyBondFlagUpdate(void) static void atkAB_trysetdestinybondtohappen(void) { - DestinyBondFlagUpdate(); + TrySetDestinyBondToHappen(); gBattlescriptCurrInstr++; } @@ -14862,10 +13298,10 @@ static void atkAC_remaininghptopower(void) int i; for (i = 0; i < 12; i += 2) { - if (hp_fraction <= sUnknown_081FAD26[i]) + if (hp_fraction <= sFlailHpScaleToPowerTable[i]) break; } - gDynamicBasePower = sUnknown_081FAD26[i + 1]; + gDynamicBasePower = sFlailHpScaleToPowerTable[i + 1]; gBattlescriptCurrInstr++; } @@ -14941,7 +13377,7 @@ static void atkAE_healpartystatus(void) gBattleCommunication[MULTISTRING_CHOOSER] |= 1; } - gActiveBank = BATTLE_STRUCT->scriptingActive = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); + gActiveBank = gBattleStruct->scriptingActive = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank])) { if (gBattleMons[gActiveBank].ability != ABILITY_SOUNDPROOF) @@ -15250,7 +13686,7 @@ static void atkBA_jumpifnopursuitswitchdmg(void) } gCurrentMove = MOVE_PURSUIT; gBattlescriptCurrInstr += 5; - BATTLE_STRUCT->animTurn = 1; + gBattleStruct->animTurn = 1; gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); } else @@ -16400,7 +14836,7 @@ static void atkD6_doubledamagedealtifdamaged(void) { if ((gProtectStructs[gBankAttacker].physicalDmg && gProtectStructs[gBankAttacker].physicalBank == gBankTarget) || (gProtectStructs[gBankAttacker].specialDmg && gProtectStructs[gBankAttacker].specialBank == gBankTarget)) - BATTLE_STRUCT->dmgMultiplier = 2; + gBattleStruct->dmgMultiplier = 2; gBattlescriptCurrInstr++; } @@ -16509,13 +14945,13 @@ static void atkDC_trysetgrudge(void) static void atkDD_weightdamagecalculation(void) { int i; - for (i = 0; sWeightDamage[i] != 0xFFFF; i += 2) + for (i = 0; sWeightToDamageTable[i] != 0xFFFF; i += 2) { - if (sWeightDamage[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) + if (sWeightToDamageTable[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) break; } - if (sWeightDamage[i] != 0xFFFF) - gDynamicBasePower = sWeightDamage[i + 1]; + if (sWeightToDamageTable[i] != 0xFFFF) + gDynamicBasePower = sWeightToDamageTable[i + 1]; else gDynamicBasePower = 120; gBattlescriptCurrInstr++; @@ -16539,17 +14975,17 @@ static void atkDE_asistattackselect(void) break; if (!GetMonData(&party[i], MON_DATA_SPECIES2) || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) break; - chooseable_moves = &BATTLE_STRUCT->assistMove[chooseable_moves_no]; + chooseable_moves = &gBattleStruct->assistMove[chooseable_moves_no]; for (j = 0; j < 4; j++) { int k; u16 move = GetMonData(&party[i], MON_DATA_MOVE1 + i); if (IsMoveUnchoosable(move)) break; - //sUnknown_081FACFE[k] + //sMovesForbiddenToCopy[k] for (k = 0; ;k++) { - if (sUnknown_081FACFE[k] == 0xFFFF) + if (sMovesForbiddenToCopy[k] == 0xFFFF) { if (move) { @@ -16559,7 +14995,7 @@ static void atkDE_asistattackselect(void) } break; } - if (sUnknown_081FACFE[k] == move) + if (sMovesForbiddenToCopy[k] == move) break; } } @@ -16567,7 +15003,7 @@ static void atkDE_asistattackselect(void) if (chooseable_moves_no) { gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); - gRandomMove = BATTLE_STRUCT->assistMove[Random() % chooseable_moves_no]; + gRandomMove = gBattleStruct->assistMove[Random() % chooseable_moves_no]; gBankTarget = GetMoveTarget(gRandomMove, 0); gBattlescriptCurrInstr += 5; } @@ -16652,7 +15088,7 @@ _0802AAF8:\n\ adds r1, r5, 0x1\n\ cmp r0, 0\n\ bne _0802AB4E\n\ - ldr r0, _0802ABB4 @ =sUnknown_081FACFE\n\ + ldr r0, _0802ABB4 @ =sMovesForbiddenToCopy\n\ ldrh r2, [r0]\n\ adds r3, r0, 0\n\ cmp r2, r8\n\ @@ -16727,7 +15163,7 @@ _0802ABA4: .4byte gEnemyParty\n\ _0802ABA8: .4byte gBattlePartyID\n\ _0802ABAC: .4byte 0x0000ffff\n\ _0802ABB0: .4byte gSharedMem + 0x16024\n\ -_0802ABB4: .4byte sUnknown_081FACFE\n\ +_0802ABB4: .4byte sMovesForbiddenToCopy\n\ _0802ABB8: .4byte gHitMarker\n\ _0802ABBC: .4byte 0xfffffbff\n\ _0802ABC0: .4byte gRandomMove\n\ @@ -16792,11 +15228,11 @@ static void atkE1_trygetintimidatetarget(void) { u8 side; - BATTLE_STRUCT->scriptingActive = ewram160DD; - side = GetBankSide(BATTLE_STRUCT->scriptingActive); + gBattleStruct->scriptingActive = ewram160DD; + side = GetBankSide(gBattleStruct->scriptingActive); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 9; - gBattleTextBuff1[2] = gBattleMons[BATTLE_STRUCT->scriptingActive].ability; + gBattleTextBuff1[2] = gBattleMons[gBattleStruct->scriptingActive].ability; gBattleTextBuff1[3] = 0xFF; for (;gBankTarget < gNoOfAllBanks; gBankTarget++) @@ -16901,10 +15337,10 @@ static void atkE5_pickup(void) static void atkE6_docastformchangeanimation(void) { - gActiveBank = BATTLE_STRUCT->scriptingActive; + gActiveBank = gBattleStruct->scriptingActive; if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE) - BATTLE_STRUCT->castformToChangeInto |= 0x80; - EmitBattleAnimation(0, B_ANIM_CASTFORM_CHANGE, BATTLE_STRUCT->castformToChangeInto); + gBattleStruct->castformToChangeInto |= 0x80; + EmitBattleAnimation(0, B_ANIM_CASTFORM_CHANGE, gBattleStruct->castformToChangeInto); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr++; } @@ -16913,11 +15349,11 @@ static void atkE7_trycastformdatachange(void) { u8 form; gBattlescriptCurrInstr++; - form = CastformDataTypeChange(BATTLE_STRUCT->scriptingActive); + form = CastformDataTypeChange(gBattleStruct->scriptingActive); if (form) { BattleScriptPushCursorAndCallback(BattleScript_CastformChange); - BATTLE_STRUCT->castformToChangeInto = form - 1; + gBattleStruct->castformToChangeInto = form - 1; } } @@ -16953,17 +15389,17 @@ static void atkE9_setweatherballtype(void) if (WEATHER_HAS_EFFECT) { if ((u8)(gBattleWeather)) - BATTLE_STRUCT->dmgMultiplier = 2; + gBattleStruct->dmgMultiplier = 2; if (gBattleWeather & WEATHER_RAIN_ANY) - BATTLE_STRUCT->dynamicMoveType = TYPE_WATER | 0x80; + gBattleStruct->dynamicMoveType = TYPE_WATER | 0x80; else if (gBattleWeather & WEATHER_SANDSTORM_ANY) - BATTLE_STRUCT->dynamicMoveType = TYPE_ROCK | 0x80; + gBattleStruct->dynamicMoveType = TYPE_ROCK | 0x80; else if (gBattleWeather & WEATHER_SUN_ANY) - BATTLE_STRUCT->dynamicMoveType = TYPE_FIRE | 0x80; + gBattleStruct->dynamicMoveType = TYPE_FIRE | 0x80; else if (gBattleWeather & WEATHER_HAIL) - BATTLE_STRUCT->dynamicMoveType = TYPE_ICE | 0x80; + gBattleStruct->dynamicMoveType = TYPE_ICE | 0x80; else - BATTLE_STRUCT->dynamicMoveType = TYPE_NORMAL | 0x80; + gBattleStruct->dynamicMoveType = TYPE_NORMAL | 0x80; } gBattlescriptCurrInstr++; } @@ -17010,8 +15446,8 @@ static void atkEC_pursuitrelated(void) gActionsByTurnOrder[gActiveBank] = 11; gCurrentMove = MOVE_PURSUIT; gBattlescriptCurrInstr += 5; - BATTLE_STRUCT->animTurn = 1; - BATTLE_STRUCT->unk160A7 = gBankAttacker; + gBattleStruct->animTurn = 1; + gBattleStruct->unk160A7 = gBankAttacker; gBankAttacker = gActiveBank; } else @@ -17022,10 +15458,10 @@ static void atkED_snatchsetbanks(void) { gEffectBank = gBankAttacker; if (gBankAttacker == gBankTarget) - gBankAttacker = gBankTarget = BATTLE_STRUCT->scriptingActive; + gBankAttacker = gBankTarget = gBattleStruct->scriptingActive; else - gBankTarget = BATTLE_STRUCT->scriptingActive; - BATTLE_STRUCT->scriptingActive = gEffectBank; + gBankTarget = gBattleStruct->scriptingActive; + gBattleStruct->scriptingActive = gEffectBank; gBattlescriptCurrInstr++; } @@ -17038,13 +15474,13 @@ static void atkEE_removelightscreenreflect(void) //brick break gSideAffecting[side] &= ~(SIDE_STATUS_LIGHTSCREEN); gSideTimers[side].reflectTimer = 0; gSideTimers[side].lightscreenTimer = 0; - BATTLE_STRUCT->animTurn = 1; - BATTLE_STRUCT->animTargetsHit = 1; + gBattleStruct->animTurn = 1; + gBattleStruct->animTargetsHit = 1; } else { - BATTLE_STRUCT->animTurn = 0; - BATTLE_STRUCT->animTargetsHit = 0; + gBattleStruct->animTurn = 0; + gBattleStruct->animTargetsHit = 0; } gBattlescriptCurrInstr++; } @@ -17074,7 +15510,7 @@ void atkEF_handleballthrow(void) u32 odds; u8 catch_rate; if (gLastUsedItem == ITEM_SAFARI_BALL) - catch_rate = BATTLE_STRUCT->unk16089 * 1275 / 100; //correct the name to safariFleeRate + catch_rate = gBattleStruct->unk16089 * 1275 / 100; //correct the name to safariFleeRate else catch_rate = gBaseStats[gBattleMons[gBankTarget].species].catchRate; if (gLastUsedItem > 5) @@ -17386,15 +15822,15 @@ static void atkF3_trygivecaughtmonnick(void) case 2: if (!gPaletteFade.active) { - GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); - DoNamingScreen(2, BATTLE_STRUCT->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), BattleMainCB2); + GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, gBattleStruct->caughtNick); + DoNamingScreen(2, gBattleStruct->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), BattleMainCB2); gBattleCommunication[0]++; } break; case 3: if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active ) { - SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); + SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, gBattleStruct->caughtNick); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } break; diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index 1c79d7ebf..00216ce05 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -763,7 +763,7 @@ void sub_80324E0(u8 a) ewram17800[a].substituteSprite = 0; } -void sub_80324F8(struct Pokemon *pkmn, u8 b) +void HandleLowHpMusicChange(struct Pokemon *pkmn, u8 b) { u16 hp = GetMonData(pkmn, MON_DATA_HP); u16 maxHP = GetMonData(pkmn, MON_DATA_MAX_HP); @@ -793,7 +793,7 @@ void sub_80324F8(struct Pokemon *pkmn, u8 b) } } -void BattleMusicStop(void) +void BattleStopLowHpSound(void) { u8 r4 = GetBankByIdentity(0); @@ -821,11 +821,11 @@ void sub_8032638(void) u8 r5 = pokemon_order_func(gBattlePartyID[r9]); if (GetMonData(&gPlayerParty[r4], MON_DATA_HP) != 0) - sub_80324F8(&gPlayerParty[r4], r8); + HandleLowHpMusicChange(&gPlayerParty[r4], r8); if (IsDoubleBattle()) { if (GetMonData(&gPlayerParty[r5], MON_DATA_HP) != 0) - sub_80324F8(&gPlayerParty[r5], r9); + HandleLowHpMusicChange(&gPlayerParty[r5], r9); } } } diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 613f2ebe0..938d0fde1 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -564,7 +564,7 @@ u8 BattleAI_GetAIActionToUse(void) { if (AI_THINKING_STRUCT->aiFlags & 1) { - AI_THINKING_STRUCT->aiState = AIState_SettingUp; + AI_THINKING_STRUCT->aiState = BATTLEAI_SETTING_UP; BattleAI_DoAIProcessing(); } AI_THINKING_STRUCT->aiFlags >>= 1; @@ -602,13 +602,13 @@ u8 BattleAI_GetAIActionToUse(void) void BattleAI_DoAIProcessing(void) { - while (AI_THINKING_STRUCT->aiState != AIState_FinishedProcessing) + while (AI_THINKING_STRUCT->aiState != BATTLEAI_FINISHED) { switch (AI_THINKING_STRUCT->aiState) { - case AIState_DoNotProcess: //Needed to match. + case BATTLEAI_DO_NOT_PROCESS: //Needed to match. break; - case AIState_SettingUp: + case BATTLEAI_SETTING_UP: gAIScriptPtr = BattleAIs[AI_THINKING_STRUCT->aiLogicId]; // set the AI ptr. if (gBattleMons[gBankAttacker].pp[AI_THINKING_STRUCT->movesetIndex] == 0) { @@ -620,7 +620,7 @@ void BattleAI_DoAIProcessing(void) } AI_THINKING_STRUCT->aiState++; break; - case AIState_Processing: + case BATTLEAI_PROCESSING: if (AI_THINKING_STRUCT->moveConsidered != MOVE_NONE) sBattleAICmdTable[*gAIScriptPtr](); // run AI command. else @@ -632,7 +632,7 @@ void BattleAI_DoAIProcessing(void) { AI_THINKING_STRUCT->movesetIndex++; if (AI_THINKING_STRUCT->movesetIndex < MAX_MON_MOVES && (AI_THINKING_STRUCT->aiAction & AI_ACTION_DO_NOT_ATTACK) == 0) - AI_THINKING_STRUCT->aiState = AIState_SettingUp; // as long as their are more moves to process, keep setting this to setup state. + AI_THINKING_STRUCT->aiState = BATTLEAI_SETTING_UP; // as long as their are more moves to process, keep setting this to setup state. else AI_THINKING_STRUCT->aiState++; // done processing. AI_THINKING_STRUCT->aiAction &= (AI_ACTION_FLEE | AI_ACTION_WATCH | AI_ACTION_DO_NOT_ATTACK | @@ -1631,8 +1631,8 @@ static void BattleAICmd_get_highest_possible_damage(void) s32 i; gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; - BATTLE_STRUCT->dmgMultiplier = 1; + gBattleStruct->dynamicMoveType = 0; + gBattleStruct->dmgMultiplier = 1; gBattleMoveFlags = 0; gCritMultiplier = 1; AI_THINKING_STRUCT->funcResult = 0; @@ -1671,8 +1671,8 @@ static void BattleAICmd_if_damage_bonus(void) u8 damageVar; gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; - BATTLE_STRUCT->dmgMultiplier = 1; + gBattleStruct->dynamicMoveType = 0; + gBattleStruct->dmgMultiplier = 1; gBattleMoveFlags = 0; gCritMultiplier = 1; @@ -1878,8 +1878,8 @@ static void BattleAICmd_if_can_faint(void) } gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; - BATTLE_STRUCT->dmgMultiplier = 1; + gBattleStruct->dynamicMoveType = 0; + gBattleStruct->dmgMultiplier = 1; gBattleMoveFlags = 0; gCritMultiplier = 1; gCurrentMove = AI_THINKING_STRUCT->moveConsidered; @@ -1907,8 +1907,8 @@ static void BattleAICmd_if_cant_faint(void) } gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; - BATTLE_STRUCT->dmgMultiplier = 1; + gBattleStruct->dynamicMoveType = 0; + gBattleStruct->dmgMultiplier = 1; gBattleMoveFlags = 0; gCritMultiplier = 1; gCurrentMove = AI_THINKING_STRUCT->moveConsidered; @@ -2116,7 +2116,7 @@ static void BattleAICmd_flee(void) static void BattleAICmd_if_random_100(void) { - u8 safariFleeRate = BATTLE_STRUCT->safariFleeRate * 5; // safari flee rate, from 0-20 + u8 safariFleeRate = gBattleStruct->safariFleeRate * 5; // safari flee rate, from 0-20 if ((u8)(Random() % 100) < safariFleeRate) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index a0c74be1d..4549d1fcb 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -13,6 +13,7 @@ #include "sprite.h" #include "task.h" #include "ewram.h" +#include "graphics.h" // sprites start at 10000 and thus must be subtracted of 10000 to account for the true index. #define GET_TRUE_SPRITE_INDEX(i) (i - 10000) @@ -20,6 +21,1271 @@ #define ANIM_SPRITE_INDEX_COUNT 8 #define ANIM_ARGS_COUNT 8 +const struct OamData gOamData_837DF24 = +{ + .affineMode = 0, + .objMode = 0, + .shape = 0, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837DF2C = +{ + .affineMode = 0, + .objMode = 0, + .shape = 0, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837DF34 = +{ + .affineMode = 0, + .objMode = 0, + .shape = 0, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837DF3C = +{ + .affineMode = 0, + .objMode = 0, + .shape = 0, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837DF44 = +{ + .affineMode = 0, + .objMode = 0, + .shape = 1, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837DF4C = +{ + .affineMode = 0, + .objMode = 0, + .shape = 1, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837DF54 = +{ + .affineMode = 0, + .objMode = 0, + .shape = 1, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837DF5C = +{ + .affineMode = 0, + .objMode = 0, + .shape = 1, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837DF64 = +{ + .affineMode = 0, + .objMode = 0, + .shape = 2, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837DF6C = +{ + .affineMode = 0, + .objMode = 0, + .shape = 2, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837DF74 = +{ + .affineMode = 0, + .objMode = 0, + .shape = 2, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837DF7C = +{ + .affineMode = 0, + .objMode = 0, + .shape = 2, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837DF84 = +{ + .affineMode = 1, + .objMode = 0, + .shape = 0, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837DF8C = +{ + .affineMode = 1, + .objMode = 0, + .shape = 0, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837DF94 = +{ + .affineMode = 1, + .objMode = 0, + .shape = 0, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837DF9C = +{ + .affineMode = 1, + .objMode = 0, + .shape = 0, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837DFA4 = +{ + .affineMode = 1, + .objMode = 0, + .shape = 1, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837DFAC = +{ + .affineMode = 1, + .objMode = 0, + .shape = 1, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837DFB4 = +{ + .affineMode = 1, + .objMode = 0, + .shape = 1, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837DFBC = +{ + .affineMode = 1, + .objMode = 0, + .shape = 1, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837DFC4 = +{ + .affineMode = 1, + .objMode = 0, + .shape = 2, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837DFCC = +{ + .affineMode = 1, + .objMode = 0, + .shape = 2, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837DFD4 = +{ + .affineMode = 1, + .objMode = 0, + .shape = 2, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837DFDC = +{ + .affineMode = 1, + .objMode = 0, + .shape = 2, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837DFE4 = +{ + .affineMode = 3, + .objMode = 0, + .shape = 0, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837DFEC = +{ + .affineMode = 3, + .objMode = 0, + .shape = 0, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837DFF4 = +{ + .affineMode = 3, + .objMode = 0, + .shape = 0, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837DFFC = +{ + .affineMode = 3, + .objMode = 0, + .shape = 0, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837D004 = +{ + .affineMode = 3, + .objMode = 0, + .shape = 1, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837D00C = +{ + .affineMode = 3, + .objMode = 0, + .shape = 1, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837E014 = +{ + .affineMode = 3, + .objMode = 0, + .shape = 1, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837E01C = +{ + .affineMode = 3, + .objMode = 0, + .shape = 1, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837E024 = +{ + .affineMode = 3, + .objMode = 0, + .shape = 2, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837E02C = +{ + .affineMode = 3, + .objMode = 0, + .shape = 2, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837E034 = +{ + .affineMode = 3, + .objMode = 0, + .shape = 2, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837E03C = +{ + .affineMode = 3, + .objMode = 0, + .shape = 2, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837E044 = +{ + .affineMode = 0, + .objMode = 1, + .shape = 0, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837E04C = +{ + .affineMode = 0, + .objMode = 1, + .shape = 0, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837E054 = +{ + .affineMode = 0, + .objMode = 1, + .shape = 0, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837E05C = +{ + .affineMode = 0, + .objMode = 1, + .shape = 0, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837E064 = +{ + .affineMode = 0, + .objMode = 1, + .shape = 1, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837E06C = +{ + .affineMode = 0, + .objMode = 1, + .shape = 1, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837E074 = +{ + .affineMode = 0, + .objMode = 1, + .shape = 1, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837E07C = +{ + .affineMode = 0, + .objMode = 1, + .shape = 1, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837E084 = +{ + .affineMode = 0, + .objMode = 1, + .shape = 2, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837E08C = +{ + .affineMode = 0, + .objMode = 1, + .shape = 2, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837E094 = +{ + .affineMode = 0, + .objMode = 1, + .shape = 2, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837E09C = +{ + .affineMode = 0, + .objMode = 1, + .shape = 2, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837E0A4 = +{ + .affineMode = 1, + .objMode = 1, + .shape = 0, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837E0AC = +{ + .affineMode = 1, + .objMode = 1, + .shape = 0, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837E0B4 = +{ + .affineMode = 1, + .objMode = 1, + .shape = 0, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837E0BC = +{ + .affineMode = 1, + .objMode = 1, + .shape = 0, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837E0C4 = +{ + .affineMode = 1, + .objMode = 1, + .shape = 1, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837E0CC = +{ + .affineMode = 1, + .objMode = 1, + .shape = 1, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837E0D4 = +{ + .affineMode = 1, + .objMode = 1, + .shape = 1, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837E0DC = +{ + .affineMode = 1, + .objMode = 1, + .shape = 1, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837E0E4 = +{ + .affineMode = 1, + .objMode = 1, + .shape = 2, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837E0EC = +{ + .affineMode = 1, + .objMode = 1, + .shape = 2, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837E0F4 = +{ + .affineMode = 1, + .objMode = 1, + .shape = 2, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837E0FC = +{ + .affineMode = 1, + .objMode = 1, + .shape = 2, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837E104 = +{ + .affineMode = 3, + .objMode = 1, + .shape = 0, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837E10C = +{ + .affineMode = 3, + .objMode = 1, + .shape = 0, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837E114 = +{ + .affineMode = 3, + .objMode = 1, + .shape = 0, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837E11C = +{ + .affineMode = 3, + .objMode = 1, + .shape = 0, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837E124 = +{ + .affineMode = 3, + .objMode = 1, + .shape = 1, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837E12C = +{ + .affineMode = 3, + .objMode = 1, + .shape = 1, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837E134 = +{ + .affineMode = 3, + .objMode = 1, + .shape = 1, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837E13C = +{ + .affineMode = 3, + .objMode = 1, + .shape = 1, + .size = 3, + .priority = 2, +}; + +const struct OamData gOamData_837E144 = +{ + .affineMode = 3, + .objMode = 1, + .shape = 2, + .size = 0, + .priority = 2, +}; + +const struct OamData gOamData_837E14C = +{ + .affineMode = 3, + .objMode = 1, + .shape = 2, + .size = 1, + .priority = 2, +}; + +const struct OamData gOamData_837E154 = +{ + .affineMode = 3, + .objMode = 1, + .shape = 2, + .size = 2, + .priority = 2, +}; + +const struct OamData gOamData_837E15C = +{ + .affineMode = 3, + .objMode = 1, + .shape = 2, + .size = 3, + .priority = 2, +}; + +const struct CompressedSpriteSheet gBattleAnimPicTable[] = +{ + { (u8 *) &gBattleAnimSpriteSheet_000, 0x200, 10000 }, + { (u8 *) &gBattleAnimSpriteSheet_001, 0x300, 10001 }, + { (u8 *) &gBattleAnimSpriteSheet_002, 0x200, 10002 }, + { (u8 *) &gBattleAnimSpriteSheet_003, 0x100, 10003 }, + { (u8 *) &gBattleAnimSpriteSheet_004, 0x200, 10004 }, + { (u8 *) &gBattleAnimSpriteSheet_005, 0x400, 10005 }, + { (u8 *) &gBattleAnimSpriteSheet_006, 0x180, 10006 }, + { (u8 *) &gBattleAnimSpriteSheet_007, 0x800, 10007 }, + { (u8 *) &gBattleAnimSpriteSheet_008, 0x20, 10008 }, + { (u8 *) &gBattleAnimSpriteSheet_009, 0x400, 10009 }, + { (u8 *) &gBattleAnimSpriteSheet_010, 0x1200, 10010 }, + { (u8 *) &gBattleAnimSpriteSheet_011, 0x180, 10011 }, + { (u8 *) &gBattleAnimSpriteSheet_012, 0x80, 10012 }, + { (u8 *) &gBattleAnimSpriteSheet_013, 0x80, 10013 }, + { (u8 *) &gBattleAnimSpriteSheet_014, 0x280, 10014 }, + { (u8 *) &gBattleAnimSpriteSheet_015, 0x80, 10015 }, + { (u8 *) &gBattleAnimSpriteSheet_016, 0x100, 10016 }, + { (u8 *) &gBattleAnimSpriteSheet_017, 0x20, 10017 }, + { (u8 *) &gBattleAnimSpriteSheet_018, 0x80, 10018 }, + { (u8 *) &gBattleAnimSpriteSheet_019, 0x400, 10019 }, + { (u8 *) &gBattleAnimSpriteSheet_020, 0x200, 10020 }, + { (u8 *) &gBattleAnimSpriteSheet_021, 0xA00, 10021 }, + { (u8 *) &gBattleAnimSpriteSheet_021, 0xA00, 10022 }, + { (u8 *) &gBattleAnimSpriteSheet_023, 0x380, 10023 }, + { (u8 *) &gBattleAnimSpriteSheet_024, 0x300, 10024 }, + { (u8 *) &gBattleAnimSpriteSheet_025, 0xA00, 10025 }, + { (u8 *) &gBattleAnimSpriteSheet_026, 0xA00, 10026 }, + { (u8 *) &gBattleAnimSpriteSheet_027, 0xA00, 10027 }, + { (u8 *) &gBattleAnimSpriteSheet_028, 0xA00, 10028 }, + { (u8 *) &gBattleAnimSpriteSheet_029, 0xA00, 10029 }, + { (u8 *) &gBattleAnimSpriteSheet_030, 0xA00, 10030 }, + { (u8 *) &gBattleAnimSpriteSheet_031, 0xE00, 10031 }, + { (u8 *) &gBattleAnimSpriteSheet_032, 0x380, 10032 }, + { (u8 *) &gBattleAnimSpriteSheet_033, 0x1000, 10033 }, + { (u8 *) &gBattleAnimSpriteSheet_034, 0x800, 10034 }, + { (u8 *) &gBattleAnimSpriteSheet_035, 0xA00, 10035 }, + { (u8 *) &gBattleAnimSpriteSheet_036, 0x800, 10036 }, + { (u8 *) &gBattleAnimSpriteSheet_037, 0xA00, 10037 }, + { (u8 *) &gBattleAnimSpriteSheet_038, 0xA00, 10038 }, + { (u8 *) &gBattleAnimSpriteSheet_039, 0xA00, 10039 }, + { (u8 *) &gBattleAnimSpriteSheet_040, 0xA00, 10040 }, + { (u8 *) &gBattleAnimSpriteSheet_041, 0xA00, 10041 }, + { (u8 *) &gBattleAnimSpriteSheet_042, 0xA00, 10042 }, + { (u8 *) &gBattleAnimSpriteSheet_043, 0xA00, 10043 }, + { (u8 *) &gBattleAnimSpriteSheet_044, 0xA00, 10044 }, + { (u8 *) &gBattleAnimSpriteSheet_045, 0xA00, 10045 }, + { (u8 *) &gBattleAnimSpriteSheet_046, 0x1000, 10046 }, + { (u8 *) &gBattleAnimSpriteSheet_046, 0x1000, 10047 }, + { (u8 *) &gBattleAnimSpriteSheet_048, 0x1000, 10048 }, + { (u8 *) &gBattleAnimSpriteSheet_048, 0x1000, 10049 }, + { (u8 *) &gBattleAnimSpriteSheet_050, 0x200, 10050 }, + { (u8 *) &gBattleAnimSpriteSheet_051, 0x200, 10051 }, + { (u8 *) &gBattleAnimSpriteSheet_052, 0x200, 10052 }, + { (u8 *) &gBattleAnimSpriteSheet_053, 0x800, 10053 }, + { (u8 *) &gBattleAnimSpriteSheet_054, 0x80, 10054 }, + { (u8 *) &gBattleAnimSpriteSheet_055, 0x200, 10055 }, + { (u8 *) &gBattleAnimSpriteSheet_056, 0x1000, 10056 }, + { (u8 *) &gBattleAnimSpriteSheet_057, 0x180, 10057 }, + { (u8 *) &gBattleAnimSpriteSheet_058, 0xC00, 10058 }, + { (u8 *) &gBattleAnimSpriteSheet_059, 0x100, 10059 }, + { (u8 *) &gBattleAnimSpriteSheet_060, 0x40, 10060 }, + { (u8 *) &gBattleAnimSpriteSheet_061, 0x180, 10061 }, + { (u8 *) &gBattleAnimSpriteSheet_062, 0x800, 10062 }, + { (u8 *) &gBattleAnimSpriteSheet_063, 0x480, 10063 }, + { (u8 *) &gBattleAnimSpriteSheet_064, 0x200, 10064 }, + { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10065 }, + { (u8 *) &gBattleAnimSpriteSheet_066, 0x100, 10066 }, + { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10067 }, + { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10068 }, + { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10069 }, + { (u8 *) &gBattleAnimSpriteSheet_070, 0x200, 10070 }, + { (u8 *) &gBattleAnimSpriteSheet_071, 0xA00, 10071 }, + { (u8 *) &gBattleAnimSpriteSheet_072, 0x300, 10072 }, + { (u8 *) &gBattleAnimSpriteSheet_073, 0x180, 10073 }, + { (u8 *) &gBattleAnimSpriteSheet_074, 0xA0, 10074 }, + { (u8 *) &gBattleAnimSpriteSheet_075, 0x700, 10075 }, + { (u8 *) &gBattleAnimSpriteSheet_076, 0x400, 10076 }, + { (u8 *) &gBattleAnimSpriteSheet_077, 0x200, 10077 }, + { (u8 *) &gBattleAnimSpriteSheet_078, 0x300, 10078 }, + { (u8 *) &gBattleAnimSpriteSheet_079, 0xC00, 10079 }, + { (u8 *) &gBattleAnimSpriteSheet_080, 0xA00, 10080 }, + { (u8 *) &gBattleAnimSpriteSheet_081, 0x80, 10081 }, + { (u8 *) &gBattleAnimSpriteSheet_082, 0x40, 10082 }, + { (u8 *) &gBattleAnimSpriteSheet_083, 0xE00, 10083 }, + { (u8 *) &gBattleAnimSpriteSheet_084, 0xE00, 10084 }, + { (u8 *) &gBattleAnimSpriteSheet_085, 0x280, 10085 }, + { (u8 *) &gBattleAnimSpriteSheet_086, 0x200, 10086 }, + { (u8 *) &gBattleAnimSpriteSheet_087, 0x80, 10087 }, + { (u8 *) &gBattleAnimSpriteSheet_088, 0xC0, 10088 }, + { (u8 *) &gBattleAnimSpriteSheet_089, 0xA00, 10089 }, + { (u8 *) &gBattleAnimSpriteSheet_090, 0x200, 10090 }, + { (u8 *) &gBattleAnimSpriteSheet_091, 0x180, 10091 }, + { (u8 *) &gBattleAnimSpriteSheet_092, 0x80, 10092 }, + { (u8 *) &gBattleAnimSpriteSheet_093, 0x1000, 10093 }, + { (u8 *) &gBattleAnimSpriteSheet_094, 0xA00, 10094 }, + { (u8 *) &gBattleAnimSpriteSheet_095, 0x180, 10095 }, + { (u8 *) &gBattleAnimSpriteSheet_096, 0x380, 10096 }, + { (u8 *) &gBattleAnimSpriteSheet_097, 0xC00, 10097 }, + { (u8 *) &gBattleAnimSpriteSheet_098, 0x200, 10098 }, + { (u8 *) &gBattleAnimSpriteSheet_099, 0x200, 10099 }, + { (u8 *) &gBattleAnimSpriteSheet_100, 0x200, 10100 }, + { (u8 *) &gBattleAnimSpriteSheet_101, 0x200, 10101 }, + { (u8 *) &gBattleAnimSpriteSheet_102, 0x400, 10102 }, + { (u8 *) &gBattleAnimSpriteSheet_103, 0x80, 10103 }, + { (u8 *) &gBattleAnimSpriteSheet_104, 0x400, 10104 }, + { (u8 *) &gBattleAnimSpriteSheet_105, 0xC00, 10105 }, + { (u8 *) &gBattleAnimSpriteSheet_106, 0x200, 10106 }, + { (u8 *) &gBattleAnimSpriteSheet_107, 0x1000, 10107 }, + { (u8 *) &gBattleAnimSpriteSheet_108, 0xA00, 10108 }, + { (u8 *) &gBattleAnimSpriteSheet_109, 0x20, 10109 }, + { (u8 *) &gBattleAnimSpriteSheet_110, 0xE00, 10110 }, + { (u8 *) &gBattleAnimSpriteSheet_111, 0x80, 10111 }, + { (u8 *) &gBattleAnimSpriteSheet_112, 0xA00, 10112 }, + { (u8 *) &gBattleAnimSpriteSheet_113, 0x400, 10113 }, + { (u8 *) &gBattleAnimSpriteSheet_114, 0x200, 10114 }, + { (u8 *) &gBattleAnimSpriteSheet_115, 0x700, 10115 }, + { (u8 *) &gBattleAnimSpriteSheet_116, 0x800, 10116 }, + { (u8 *) &gBattleAnimSpriteSheet_117, 0xA00, 10117 }, + { (u8 *) &gBattleAnimSpriteSheet_118, 0x600, 10118 }, + { (u8 *) &gBattleAnimSpriteSheet_119, 0x800, 10119 }, + { (u8 *) &gBattleAnimSpriteSheet_120, 0x200, 10120 }, + { (u8 *) &gBattleAnimSpriteSheet_121, 0x40, 10121 }, + { (u8 *) &gBattleAnimSpriteSheet_122, 0x180, 10122 }, + { (u8 *) &gBattleAnimSpriteSheet_123, 0x600, 10123 }, + { (u8 *) &gBattleAnimSpriteSheet_124, 0x600, 10124 }, + { (u8 *) &gBattleAnimSpriteSheet_125, 0x200, 10125 }, + { (u8 *) &gBattleAnimSpriteSheet_126, 0x80, 10126 }, + { (u8 *) &gBattleAnimSpriteSheet_127, 0x200, 10127 }, + { (u8 *) &gBattleAnimSpriteSheet_128, 0x800, 10128 }, + { (u8 *) &gBattleAnimSpriteSheet_129, 0x80, 10129 }, + { (u8 *) &gBattleAnimSpriteSheet_130, 0xA00, 10130 }, + { (u8 *) &gBattleAnimSpriteSheet_131, 0x280, 10131 }, + { (u8 *) &gBattleAnimSpriteSheet_132, 0x280, 10132 }, + { (u8 *) &gBattleAnimSpriteSheet_133, 0x100, 10133 }, + { (u8 *) &gBattleAnimSpriteSheet_134, 0x200, 10134 }, + { (u8 *) &gBattleAnimSpriteSheet_135, 0x200, 10135 }, + { (u8 *) &gBattleAnimSpriteSheet_136, 0x20, 10136 }, + { (u8 *) &gBattleAnimSpriteSheet_137, 0xA00, 10137 }, + { (u8 *) &gBattleAnimSpriteSheet_138, 0x800, 10138 }, + { (u8 *) &gBattleAnimSpriteSheet_139, 0x800, 10139 }, + { (u8 *) &gBattleAnimSpriteSheet_140, 0xC0, 10140 }, + { (u8 *) &gBattleAnimSpriteSheet_141, 0x1C0, 10141 }, + { (u8 *) &gBattleAnimSpriteSheet_142, 0x100, 10142 }, + { (u8 *) &gBattleAnimSpriteSheet_143, 0x800, 10143 }, + { (u8 *) &gBattleAnimSpriteSheet_144, 0x200, 10144 }, + { (u8 *) &gBattleAnimSpriteSheet_145, 0x800, 10145 }, + { (u8 *) &gBattleAnimSpriteSheet_146, 0x180, 10146 }, + { (u8 *) &gBattleAnimSpriteSheet_147, 0x180, 10147 }, + { (u8 *) &gBattleAnimSpriteSheet_148, 0x200, 10148 }, + { (u8 *) &gBattleAnimSpriteSheet_149, 0x200, 10149 }, + { (u8 *) &gBattleAnimSpriteSheet_150, 0x180, 10150 }, + { (u8 *) &gBattleAnimSpriteSheet_151, 0x400, 10151 }, + { (u8 *) &gBattleAnimSpriteSheet_152, 0x80, 10152 }, + { (u8 *) &gBattleAnimSpriteSheet_153, 0x100, 10153 }, + { (u8 *) &gBattleAnimSpriteSheet_154, 0x100, 10154 }, + { (u8 *) &gBattleAnimSpriteSheet_155, 0x140, 10155 }, + { (u8 *) &gBattleAnimSpriteSheet_156, 0x800, 10156 }, + { (u8 *) &gBattleAnimSpriteSheet_157, 0x200, 10157 }, + { (u8 *) &gBattleAnimSpriteSheet_158, 0x100, 10158 }, + { (u8 *) &gBattleAnimSpriteSheet_159, 0xA0, 10159 }, + { (u8 *) &gBattleAnimSpriteSheet_160, 0x100, 10160 }, + { (u8 *) &gBattleAnimSpriteSheet_161, 0x80, 10161 }, + { (u8 *) &gBattleAnimSpriteSheet_162, 0x300, 10162 }, + { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10163 }, + { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10164 }, + { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10165 }, + { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10166 }, + { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10167 }, + { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10168 }, + { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10169 }, + { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10170 }, + { (u8 *) &gBattleAnimSpriteSheet_171, 0x80, 10171 }, + { (u8 *) &gBattleAnimSpriteSheet_144, 0x200, 10172 }, + { (u8 *) &gBattleAnimSpriteSheet_173, 0x200, 10173 }, + { (u8 *) &gBattleAnimSpriteSheet_174, 0x200, 10174 }, + { (u8 *) &gBattleAnimSpriteSheet_175, 0x80, 10175 }, + { (u8 *) &gBattleAnimSpriteSheet_176, 0x200, 10176 }, + { (u8 *) &gBattleAnimSpriteSheet_177, 0x500, 10177 }, + { (u8 *) &gBattleAnimSpriteSheet_178, 0x800, 10178 }, + { (u8 *) &gBattleAnimSpriteSheet_179, 0x400, 10179 }, + { (u8 *) &gBattleAnimSpriteSheet_180, 0x20, 10180 }, + { (u8 *) &gBattleAnimSpriteSheet_181, 0x800, 10181 }, + { (u8 *) &gBattleAnimSpriteSheet_182, 0x100, 10182 }, + { (u8 *) &gBattleAnimSpriteSheet_183, 0x800, 10183 }, + { (u8 *) &gBattleAnimSpriteSheet_184, 0x400, 10184 }, + { (u8 *) &gBattleAnimSpriteSheet_185, 0xA00, 10185 }, + { (u8 *) &gBattleAnimSpriteSheet_186, 0x1000, 10186 }, + { (u8 *) &gBattleAnimSpriteSheet_187, 0x800, 10187 }, + { (u8 *) &gBattleAnimSpriteSheet_188, 0x400, 10188 }, + { (u8 *) &gBattleAnimSpriteSheet_189, 0x200, 10189 }, + { (u8 *) &gBattleAnimSpriteSheet_190, 0x800, 10190 }, + { (u8 *) &gBattleAnimSpriteSheet_191, 0x800, 10191 }, + { (u8 *) &gBattleAnimSpriteSheet_192, 0x800, 10192 }, + { (u8 *) &gBattleAnimSpriteSheet_193, 0x200, 10193 }, + { (u8 *) &gBattleAnimSpriteSheet_194, 0x800, 10194 }, + { (u8 *) &gBattleAnimSpriteSheet_195, 0x200, 10195 }, + { (u8 *) &gBattleAnimSpriteSheet_196, 0x800, 10196 }, + { (u8 *) &gBattleAnimSpriteSheet_197, 0x200, 10197 }, + { (u8 *) &gBattleAnimSpriteSheet_198, 0x800, 10198 }, + { (u8 *) &gBattleAnimSpriteSheet_199, 0x400, 10199 }, + { (u8 *) &gBattleAnimSpriteSheet_200, 0x200, 10200 }, + { (u8 *) &gBattleAnimSpriteSheet_201, 0xA80, 10201 }, + { (u8 *) &gBattleAnimSpriteSheet_202, 0x600, 10202 }, + { (u8 *) &gBattleAnimSpriteSheet_203, 0x800, 10203 }, + { (u8 *) &gBattleAnimSpriteSheet_204, 0x200, 10204 }, + { (u8 *) &gBattleAnimSpriteSheet_205, 0x600, 10205 }, + { (u8 *) &gBattleAnimSpriteSheet_206, 0x800, 10206 }, + { (u8 *) &gBattleAnimSpriteSheet_207, 0x180, 10207 }, + { (u8 *) &gBattleAnimSpriteSheet_208, 0x800, 10208 }, + { (u8 *) &gBattleAnimSpriteSheet_209, 0x800, 10209 }, + { (u8 *) &gBattleAnimSpriteSheet_210, 0x80, 10210 }, + { (u8 *) &gBattleAnimSpriteSheet_211, 0x80, 10211 }, + { (u8 *) &gBattleAnimSpriteSheet_212, 0x800, 10212 }, + { (u8 *) &gBattleAnimSpriteSheet_213, 0x800, 10213 }, + { (u8 *) &gBattleAnimSpriteSheet_214, 0x600, 10214 }, + { (u8 *) &gBattleAnimSpriteSheet_215, 0x600, 10215 }, + { (u8 *) &gBattleAnimSpriteSheet_210, 0x80, 10216 }, + { (u8 *) &gBattleAnimSpriteSheet_217, 0x80, 10217 }, + { (u8 *) &gBattleAnimSpriteSheet_218, 0x180, 10218 }, + { (u8 *) &gBattleAnimSpriteSheet_210, 0x80, 10219 }, + { (u8 *) &gBattleAnimSpriteSheet_220, 0x200, 10220 }, + { (u8 *) &gBattleAnimSpriteSheet_221, 0x400, 10221 }, + { (u8 *) &gBattleAnimSpriteSheet_222, 0xA00, 10222 }, + { (u8 *) &gBattleAnimSpriteSheet_223, 0x800, 10223 }, + { (u8 *) &gBattleAnimSpriteSheet_224, 0x200, 10224 }, + { (u8 *) &gBattleAnimSpriteSheet_225, 0x400, 10225 }, + { (u8 *) &gBattleAnimSpriteSheet_226, 0x80, 10226 }, + { (u8 *) &gBattleAnimSpriteSheet_227, 0x800, 10227 }, + { (u8 *) &gBattleAnimSpriteSheet_228, 0x200, 10228 }, + { (u8 *) &gBattleAnimSpriteSheet_229, 0x300, 10229 }, + { (u8 *) &gBattleAnimSpriteSheet_230, 0x800, 10230 }, + { (u8 *) &gBattleAnimSpriteSheet_231, 0x380, 10231 }, + { (u8 *) &gBattleAnimSpriteSheet_232, 0x800, 10232 }, + { (u8 *) &gBattleAnimSpriteSheet_233, 0xC0, 10233 }, + { (u8 *) &gBattleAnimSpriteSheet_234, 0x800, 10234 }, + { (u8 *) &gBattleAnimSpriteSheet_235, 0x60, 10235 }, + { (u8 *) &gBattleAnimSpriteSheet_235, 0x60, 10236 }, + { (u8 *) &gBattleAnimSpriteSheet_235, 0x60, 10237 }, + { (u8 *) &gBattleAnimSpriteSheet_238, 0x80, 10238 }, + { (u8 *) &gBattleAnimSpriteSheet_239, 0x180, 10239 }, + { (u8 *) &gBattleAnimSpriteSheet_240, 0x180, 10240 }, + { (u8 *) &gBattleAnimSpriteSheet_241, 0x200, 10241 }, + { (u8 *) &gBattleAnimSpriteSheet_242, 0x200, 10242 }, + { (u8 *) &gBattleAnimSpriteSheet_243, 0x20, 10243 }, + { (u8 *) &gBattleAnimSpriteSheet_244, 0x400, 10244 }, + { (u8 *) &gBattleAnimSpriteSheet_245, 0x600, 10245 }, + { (u8 *) &gBattleAnimSpriteSheet_246, 0x1000, 10246 }, + { (u8 *) &gBattleAnimSpriteSheet_247, 0x400, 10247 }, + { (u8 *) &gBattleAnimSpriteSheet_248, 0x20, 10248 }, + { (u8 *) &gBattleAnimSpriteSheet_249, 0x80, 10249 }, + { (u8 *) &gBattleAnimSpriteSheet_250, 0x800, 10250 }, + { (u8 *) &gBattleAnimSpriteSheet_251, 0x80, 10251 }, + { (u8 *) &gBattleAnimSpriteSheet_252, 0x200, 10252 }, + { (u8 *) &gBattleAnimSpriteSheet_253, 0x400, 10253 }, + { (u8 *) &gBattleAnimSpriteSheet_254, 0x200, 10254 }, + { (u8 *) &gBattleAnimSpriteSheet_255, 0x200, 10255 }, + { (u8 *) &gBattleAnimSpriteSheet_256, 0x800, 10256 }, + { (u8 *) &gBattleAnimSpriteSheet_257, 0x280, 10257 }, + { (u8 *) &gBattleAnimSpriteSheet_258, 0x200, 10258 }, + { (u8 *) &gBattleAnimSpriteSheet_149, 0x200, 10259 }, + { (u8 *) &gBattleAnimSpriteSheet_260, 0x400, 10260 }, + { (u8 *) &gBattleAnimSpriteSheet_261, 0x200, 10261 }, + { (u8 *) &gBattleAnimSpriteSheet_262, 0x200, 10262 }, + { (u8 *) &gBattleAnimSpriteSheet_263, 0x80, 10263 }, + { (u8 *) &gBattleAnimSpriteSheet_264, 0x20, 10264 }, + { (u8 *) &gBattleAnimSpriteSheet_264, 0x20, 10265 }, + { (u8 *) &gBattleAnimSpriteSheet_266, 0x80, 10266 }, + { (u8 *) &gBattleAnimSpriteSheet_212, 0x800, 10267 }, + { (u8 *) &gBattleAnimSpriteSheet_264, 0x20, 10268 }, + { (u8 *) &gBattleAnimSpriteSheet_269, 0x80, 10269 }, + { (u8 *) &gBattleAnimSpriteSheet_270, 0x400, 10270 }, + { (u8 *) &gBattleAnimSpriteSheet_271, 0x80, 10271 }, + { (u8 *) &gBattleAnimSpriteSheet_272, 0x800, 10272 }, + { (u8 *) &gBattleAnimSpriteSheet_273, 0x20, 10273 }, + { (u8 *) &gBattleAnimSpriteSheet_274, 0x800, 10274 }, + { (u8 *) &gBattleAnimSpriteSheet_275, 0x800, 10275 }, + { (u8 *) &gBattleAnimSpriteSheet_276, 0x800, 10276 }, + { (u8 *) &gBattleAnimSpriteSheet_277, 0x1000, 10277 }, + { (u8 *) &gBattleAnimSpriteSheet_278, 0x800, 10278 }, + { (u8 *) &gBattleAnimSpriteSheet_279, 0xA0, 10279 }, + { (u8 *) &gBattleAnimSpriteSheet_280, 0x800, 10280 }, + { (u8 *) &gBattleAnimSpriteSheet_281, 0x200, 10281 }, + { (u8 *) &gBattleAnimSpriteSheet_282, 0x600, 10282 }, + { (u8 *) &gBattleAnimSpriteSheet_283, 0x200, 10283 }, + { (u8 *) &gBattleAnimSpriteSheet_284, 0x800, 10284 }, + { (u8 *) &gBattleAnimSpriteSheet_285, 0x200, 10285 }, + { (u8 *) &gBattleAnimSpriteSheet_183, 0x800, 10286 }, + { (u8 *) &gBattleAnimSpriteSheet_056, 0x1000, 10287 }, + { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10288 }, +}; + +const struct CompressedSpritePalette gBattleAnimPaletteTable[] = +{ + { (u8 *) &gBattleAnimSpritePalette_000, 10000 }, + { (u8 *) &gBattleAnimSpritePalette_001, 10001 }, + { (u8 *) &gBattleAnimSpritePalette_002, 10002 }, + { (u8 *) &gBattleAnimSpritePalette_003, 10003 }, + { (u8 *) &gBattleAnimSpritePalette_004, 10004 }, + { (u8 *) &gBattleAnimSpritePalette_005, 10005 }, + { (u8 *) &gBattleAnimSpritePalette_006, 10006 }, + { (u8 *) &gBattleAnimSpritePalette_007, 10007 }, + { (u8 *) &gBattleAnimSpritePalette_008, 10008 }, + { (u8 *) &gBattleAnimSpritePalette_009, 10009 }, + { (u8 *) &gBattleAnimSpritePalette_010, 10010 }, + { (u8 *) &gBattleAnimSpritePalette_011, 10011 }, + { (u8 *) &gBattleAnimSpritePalette_012, 10012 }, + { (u8 *) &gBattleAnimSpritePalette_013, 10013 }, + { (u8 *) &gBattleAnimSpritePalette_014, 10014 }, + { (u8 *) &gBattleAnimSpritePalette_015, 10015 }, + { (u8 *) &gBattleAnimSpritePalette_016, 10016 }, + { (u8 *) &gBattleAnimSpritePalette_016, 10017 }, + { (u8 *) &gBattleAnimSpritePalette_018, 10018 }, + { (u8 *) &gBattleAnimSpritePalette_019, 10019 }, + { (u8 *) &gBattleAnimSpritePalette_020, 10020 }, + { (u8 *) &gBattleAnimSpritePalette_021, 10021 }, + { (u8 *) &gBattleAnimSpritePalette_022, 10022 }, + { (u8 *) &gBattleAnimSpritePalette_023, 10023 }, + { (u8 *) &gBattleAnimSpritePalette_024, 10024 }, + { (u8 *) &gBattleAnimSpritePalette_025, 10025 }, + { (u8 *) &gBattleAnimSpritePalette_026, 10026 }, + { (u8 *) &gBattleAnimSpritePalette_027, 10027 }, + { (u8 *) &gBattleAnimSpritePalette_028, 10028 }, + { (u8 *) &gBattleAnimSpritePalette_029, 10029 }, + { (u8 *) &gBattleAnimSpritePalette_030, 10030 }, + { (u8 *) &gBattleAnimSpritePalette_031, 10031 }, + { (u8 *) &gBattleAnimSpritePalette_032, 10032 }, + { (u8 *) &gBattleAnimSpritePalette_033, 10033 }, + { (u8 *) &gBattleAnimSpritePalette_033, 10034 }, + { (u8 *) &gBattleAnimSpritePalette_033, 10035 }, + { (u8 *) &gBattleAnimSpritePalette_036, 10036 }, + { (u8 *) &gBattleAnimSpritePalette_036, 10037 }, + { (u8 *) &gBattleAnimSpritePalette_038, 10038 }, + { (u8 *) &gBattleAnimSpritePalette_039, 10039 }, + { (u8 *) &gBattleAnimSpritePalette_038, 10040 }, + { (u8 *) &gBattleAnimSpritePalette_038, 10041 }, + { (u8 *) &gBattleAnimSpritePalette_042, 10042 }, + { (u8 *) &gBattleAnimSpritePalette_043, 10043 }, + { (u8 *) &gBattleAnimSpritePalette_044, 10044 }, + { (u8 *) &gBattleAnimSpritePalette_045, 10045 }, + { (u8 *) &gBattleAnimSpritePalette_046, 10046 }, + { (u8 *) &gBattleAnimSpritePalette_047, 10046 }, + { (u8 *) &gBattleAnimSpritePalette_048, 10048 }, + { (u8 *) &gBattleAnimSpritePalette_049, 10049 }, + { (u8 *) &gBattleAnimSpritePalette_050, 10050 }, + { (u8 *) &gBattleAnimSpritePalette_050, 10051 }, + { (u8 *) &gBattleAnimSpritePalette_050, 10052 }, + { (u8 *) &gBattleAnimSpritePalette_026, 10053 }, + { (u8 *) &gBattleAnimSpritePalette_054, 10054 }, + { (u8 *) &gBattleAnimSpritePalette_050, 10055 }, + { (u8 *) &gBattleAnimSpritePalette_056, 10056 }, + { (u8 *) &gBattleAnimSpritePalette_057, 10057 }, + { (u8 *) &gBattleAnimSpritePalette_058, 10058 }, + { (u8 *) &gBattleAnimSpritePalette_059, 10059 }, + { (u8 *) &gBattleAnimSpritePalette_060, 10060 }, + { (u8 *) &gBattleAnimSpritePalette_061, 10061 }, + { (u8 *) &gBattleAnimSpritePalette_062, 10062 }, + { (u8 *) &gBattleAnimSpritePalette_063, 10063 }, + { (u8 *) &gBattleAnimSpritePalette_064, 10064 }, + { (u8 *) &gBattleAnimSpritePalette_065, 10065 }, + { (u8 *) &gBattleAnimSpritePalette_066, 10066 }, + { (u8 *) &gBattleAnimSpritePalette_067, 10067 }, + { (u8 *) &gBattleAnimSpritePalette_068, 10068 }, + { (u8 *) &gBattleAnimSpritePalette_065, 10069 }, + { (u8 *) &gBattleAnimSpritePalette_070, 10070 }, + { (u8 *) &gBattleAnimSpritePalette_070, 10071 }, + { (u8 *) &gBattleAnimSpritePalette_072, 10072 }, + { (u8 *) &gBattleAnimSpritePalette_073, 10073 }, + { (u8 *) &gBattleAnimSpritePalette_074, 10074 }, + { (u8 *) &gBattleAnimSpritePalette_075, 10075 }, + { (u8 *) &gBattleAnimSpritePalette_076, 10076 }, + { (u8 *) &gBattleAnimSpritePalette_076, 10077 }, + { (u8 *) &gBattleAnimSpritePalette_078, 10078 }, + { (u8 *) &gBattleAnimSpritePalette_078, 10079 }, + { (u8 *) &gBattleAnimSpritePalette_080, 10080 }, + { (u8 *) &gBattleAnimSpritePalette_081, 10081 }, + { (u8 *) &gBattleAnimSpritePalette_082, 10082 }, + { (u8 *) &gBattleAnimSpritePalette_083, 10083 }, + { (u8 *) &gBattleAnimSpritePalette_084, 10084 }, + { (u8 *) &gBattleAnimSpritePalette_085, 10085 }, + { (u8 *) &gBattleAnimSpritePalette_086, 10086 }, + { (u8 *) &gBattleAnimSpritePalette_087, 10087 }, + { (u8 *) &gBattleAnimSpritePalette_088, 10088 }, + { (u8 *) &gBattleAnimSpritePalette_089, 10089 }, + { (u8 *) &gBattleAnimSpritePalette_090, 10090 }, + { (u8 *) &gBattleAnimSpritePalette_091, 10091 }, + { (u8 *) &gBattleAnimSpritePalette_092, 10092 }, + { (u8 *) &gBattleAnimSpritePalette_093, 10093 }, + { (u8 *) &gBattleAnimSpritePalette_094, 10094 }, + { (u8 *) &gBattleAnimSpritePalette_095, 10095 }, + { (u8 *) &gBattleAnimSpritePalette_096, 10096 }, + { (u8 *) &gBattleAnimSpritePalette_097, 10097 }, + { (u8 *) &gBattleAnimSpritePalette_094, 10098 }, + { (u8 *) &gBattleAnimSpritePalette_099, 10099 }, + { (u8 *) &gBattleAnimSpritePalette_100, 10100 }, + { (u8 *) &gBattleAnimSpritePalette_101, 10101 }, + { (u8 *) &gBattleAnimSpritePalette_101, 10102 }, + { (u8 *) &gBattleAnimSpritePalette_103, 10103 }, + { (u8 *) &gBattleAnimSpritePalette_104, 10104 }, + { (u8 *) &gBattleAnimSpritePalette_105, 10105 }, + { (u8 *) &gBattleAnimSpritePalette_105, 10106 }, + { (u8 *) &gBattleAnimSpritePalette_107, 10107 }, + { (u8 *) &gBattleAnimSpritePalette_107, 10108 }, + { (u8 *) &gBattleAnimSpritePalette_109, 10109 }, + { (u8 *) &gBattleAnimSpritePalette_109, 10110 }, + { (u8 *) &gBattleAnimSpritePalette_111, 10111 }, + { (u8 *) &gBattleAnimSpritePalette_112, 10112 }, + { (u8 *) &gBattleAnimSpritePalette_113, 10113 }, + { (u8 *) &gBattleAnimSpritePalette_114, 10114 }, + { (u8 *) &gBattleAnimSpritePalette_115, 10115 }, + { (u8 *) &gBattleAnimSpritePalette_116, 10116 }, + { (u8 *) &gBattleAnimSpritePalette_117, 10117 }, + { (u8 *) &gBattleAnimSpritePalette_118, 10118 }, + { (u8 *) &gBattleAnimSpritePalette_119, 10119 }, + { (u8 *) &gBattleAnimSpritePalette_120, 10120 }, + { (u8 *) &gBattleAnimSpritePalette_121, 10121 }, + { (u8 *) &gBattleAnimSpritePalette_122, 10122 }, + { (u8 *) &gBattleAnimSpritePalette_122, 10123 }, + { (u8 *) &gBattleAnimSpritePalette_124, 10124 }, + { (u8 *) &gBattleAnimSpritePalette_125, 10125 }, + { (u8 *) &gBattleAnimSpritePalette_126, 10126 }, + { (u8 *) &gBattleAnimSpritePalette_127, 10127 }, + { (u8 *) &gBattleAnimSpritePalette_128, 10128 }, + { (u8 *) &gBattleAnimSpritePalette_128, 10129 }, + { (u8 *) &gBattleAnimSpritePalette_130, 10130 }, + { (u8 *) &gBattleAnimSpritePalette_130, 10131 }, + { (u8 *) &gBattleAnimSpritePalette_132, 10132 }, + { (u8 *) &gBattleAnimSpritePalette_133, 10133 }, + { (u8 *) &gBattleAnimSpritePalette_133, 10134 }, + { (u8 *) &gBattleAnimSpritePalette_135, 10135 }, + { (u8 *) &gBattleAnimSpritePalette_136, 10136 }, + { (u8 *) &gBattleAnimSpritePalette_135, 10137 }, + { (u8 *) &gBattleAnimSpritePalette_135, 10138 }, + { (u8 *) &gBattleAnimSpritePalette_139, 10139 }, + { (u8 *) &gBattleAnimSpritePalette_140, 10140 }, + { (u8 *) &gBattleAnimSpritePalette_141, 10141 }, + { (u8 *) &gBattleAnimSpritePalette_141, 10142 }, + { (u8 *) &gBattleAnimSpritePalette_143, 10143 }, + { (u8 *) &gBattleAnimSpritePalette_144, 10144 }, + { (u8 *) &gBattleAnimSpritePalette_139, 10145 }, + { (u8 *) &gBattleAnimSpritePalette_115, 10146 }, + { (u8 *) &gBattleAnimSpritePalette_147, 10147 }, + { (u8 *) &gBattleAnimSpritePalette_148, 10148 }, + { (u8 *) &gBattleAnimSpritePalette_148, 10149 }, + { (u8 *) &gBattleAnimSpritePalette_150, 10150 }, + { (u8 *) &gBattleAnimSpritePalette_150, 10151 }, + { (u8 *) &gBattleAnimSpritePalette_152, 10152 }, + { (u8 *) &gBattleAnimSpritePalette_153, 10153 }, + { (u8 *) &gBattleAnimSpritePalette_154, 10154 }, + { (u8 *) &gBattleAnimSpritePalette_155, 10155 }, + { (u8 *) &gBattleAnimSpritePalette_156, 10156 }, + { (u8 *) &gBattleAnimSpritePalette_157, 10157 }, + { (u8 *) &gBattleAnimSpritePalette_158, 10158 }, + { (u8 *) &gBattleAnimSpritePalette_159, 10159 }, + { (u8 *) &gBattleAnimSpritePalette_160, 10160 }, + { (u8 *) &gBattleAnimSpritePalette_161, 10161 }, + { (u8 *) &gBattleAnimSpritePalette_162, 10162 }, + { (u8 *) &gBattleAnimSpritePalette_163, 10163 }, + { (u8 *) &gBattleAnimSpritePalette_164, 10164 }, + { (u8 *) &gBattleAnimSpritePalette_165, 10165 }, + { (u8 *) &gBattleAnimSpritePalette_166, 10166 }, + { (u8 *) &gBattleAnimSpritePalette_167, 10167 }, + { (u8 *) &gBattleAnimSpritePalette_168, 10168 }, + { (u8 *) &gBattleAnimSpritePalette_169, 10169 }, + { (u8 *) &gBattleAnimSpritePalette_170, 10170 }, + { (u8 *) &gBattleAnimSpritePalette_171, 10171 }, + { (u8 *) &gBattleAnimSpritePalette_172, 10172 }, + { (u8 *) &gBattleAnimSpritePalette_001, 10173 }, + { (u8 *) &gBattleAnimSpritePalette_174, 10174 }, + { (u8 *) &gBattleAnimSpritePalette_175, 10175 }, + { (u8 *) &gBattleAnimSpritePalette_176, 10176 }, + { (u8 *) &gBattleAnimSpritePalette_177, 10177 }, + { (u8 *) &gBattleAnimSpritePalette_178, 10178 }, + { (u8 *) &gBattleAnimSpritePalette_179, 10179 }, + { (u8 *) &gBattleAnimSpritePalette_179, 10180 }, + { (u8 *) &gBattleAnimSpritePalette_179, 10181 }, + { (u8 *) &gBattleAnimSpritePalette_182, 10182 }, + { (u8 *) &gBattleAnimSpritePalette_183, 10183 }, + { (u8 *) &gBattleAnimSpritePalette_184, 10184 }, + { (u8 *) &gBattleAnimSpritePalette_185, 10185 }, + { (u8 *) &gBattleAnimSpritePalette_186, 10186 }, + { (u8 *) &gBattleAnimSpritePalette_187, 10187 }, + { (u8 *) &gBattleAnimSpritePalette_188, 10188 }, + { (u8 *) &gBattleAnimSpritePalette_189, 10189 }, + { (u8 *) &gBattleAnimSpritePalette_190, 10190 }, + { (u8 *) &gBattleAnimSpritePalette_191, 10191 }, + { (u8 *) &gBattleAnimSpritePalette_192, 10192 }, + { (u8 *) &gBattleAnimSpritePalette_193, 10193 }, + { (u8 *) &gBattleAnimSpritePalette_194, 10194 }, + { (u8 *) &gBattleAnimSpritePalette_195, 10195 }, + { (u8 *) &gBattleAnimSpritePalette_196, 10196 }, + { (u8 *) &gBattleAnimSpritePalette_197, 10197 }, + { (u8 *) &gBattleAnimSpritePalette_198, 10198 }, + { (u8 *) &gBattleAnimSpritePalette_199, 10199 }, + { (u8 *) &gBattleAnimSpritePalette_200, 10200 }, + { (u8 *) &gBattleAnimSpritePalette_201, 10201 }, + { (u8 *) &gBattleAnimSpritePalette_202, 10202 }, + { (u8 *) &gBattleAnimSpritePalette_203, 10203 }, + { (u8 *) &gBattleAnimSpritePalette_204, 10204 }, + { (u8 *) &gBattleAnimSpritePalette_205, 10205 }, + { (u8 *) &gBattleAnimSpritePalette_206, 10206 }, + { (u8 *) &gBattleAnimSpritePalette_207, 10207 }, + { (u8 *) &gBattleAnimSpritePalette_167, 10208 }, + { (u8 *) &gBattleAnimSpritePalette_209, 10209 }, + { (u8 *) &gBattleAnimSpritePalette_210, 10210 }, + { (u8 *) &gBattleAnimSpritePalette_211, 10211 }, + { (u8 *) &gBattleAnimSpritePalette_211, 10212 }, + { (u8 *) &gBattleAnimSpritePalette_211, 10213 }, + { (u8 *) &gBattleAnimSpritePalette_064, 10214 }, + { (u8 *) &gBattleAnimSpritePalette_215, 10215 }, + { (u8 *) &gBattleAnimSpritePalette_216, 10216 }, + { (u8 *) &gBattleAnimSpritePalette_217, 10217 }, + { (u8 *) &gBattleAnimSpritePalette_218, 10218 }, + { (u8 *) &gBattleAnimSpritePalette_219, 10219 }, + { (u8 *) &gBattleAnimSpritePalette_220, 10220 }, + { (u8 *) &gBattleAnimSpritePalette_221, 10221 }, + { (u8 *) &gBattleAnimSpritePalette_222, 10222 }, + { (u8 *) &gBattleAnimSpritePalette_223, 10223 }, + { (u8 *) &gBattleAnimSpritePalette_224, 10224 }, + { (u8 *) &gBattleAnimSpritePalette_225, 10225 }, + { (u8 *) &gBattleAnimSpritePalette_226, 10226 }, + { (u8 *) &gBattleAnimSpritePalette_226, 10227 }, + { (u8 *) &gBattleAnimSpritePalette_228, 10228 }, + { (u8 *) &gBattleAnimSpritePalette_229, 10229 }, + { (u8 *) &gBattleAnimSpritePalette_230, 10230 }, + { (u8 *) &gBattleAnimSpritePalette_231, 10231 }, + { (u8 *) &gBattleAnimSpritePalette_231, 10232 }, + { (u8 *) &gBattleAnimSpritePalette_233, 10233 }, + { (u8 *) &gBattleAnimSpritePalette_234, 10234 }, + { (u8 *) &gBattleAnimSpritePalette_235, 10235 }, + { (u8 *) &gBattleAnimSpritePalette_236, 10236 }, + { (u8 *) &gBattleAnimSpritePalette_237, 10237 }, + { (u8 *) &gBattleAnimSpritePalette_238, 10238 }, + { (u8 *) &gBattleAnimSpritePalette_239, 10239 }, + { (u8 *) &gBattleAnimSpritePalette_240, 10240 }, + { (u8 *) &gBattleAnimSpritePalette_241, 10241 }, + { (u8 *) &gBattleAnimSpritePalette_242, 10242 }, + { (u8 *) &gBattleAnimSpritePalette_243, 10243 }, + { (u8 *) &gBattleAnimSpritePalette_244, 10244 }, + { (u8 *) &gBattleAnimSpritePalette_245, 10245 }, + { (u8 *) &gBattleAnimSpritePalette_245, 10246 }, + { (u8 *) &gBattleAnimSpritePalette_064, 10247 }, + { (u8 *) &gBattleAnimSpritePalette_248, 10248 }, + { (u8 *) &gBattleAnimSpritePalette_249, 10249 }, + { (u8 *) &gBattleAnimSpritePalette_249, 10250 }, + { (u8 *) &gBattleAnimSpritePalette_251, 10251 }, + { (u8 *) &gBattleAnimSpritePalette_252, 10252 }, + { (u8 *) &gBattleAnimSpritePalette_253, 10253 }, + { (u8 *) &gBattleAnimSpritePalette_254, 10254 }, + { (u8 *) &gBattleAnimSpritePalette_255, 10255 }, + { (u8 *) &gBattleAnimSpritePalette_256, 10256 }, + { (u8 *) &gBattleAnimSpritePalette_257, 10257 }, + { (u8 *) &gBattleAnimSpritePalette_258, 10258 }, + { (u8 *) &gBattleAnimSpritePalette_259, 10259 }, + { (u8 *) &gBattleAnimSpritePalette_260, 10260 }, + { (u8 *) &gBattleAnimSpritePalette_261, 10261 }, + { (u8 *) &gBattleAnimSpritePalette_262, 10262 }, + { (u8 *) &gBattleAnimSpritePalette_263, 10263 }, + { (u8 *) &gBattleAnimSpritePalette_264, 10264 }, + { (u8 *) &gBattleAnimSpritePalette_265, 10265 }, + { (u8 *) &gBattleAnimSpritePalette_266, 10266 }, + { (u8 *) &gBattleAnimSpritePalette_267, 10267 }, + { (u8 *) &gBattleAnimSpritePalette_268, 10268 }, + { (u8 *) &gBattleAnimSpritePalette_269, 10269 }, + { (u8 *) &gBattleAnimSpritePalette_270, 10270 }, + { (u8 *) &gBattleAnimSpritePalette_271, 10271 }, + { (u8 *) &gBattleAnimSpritePalette_272, 10272 }, + { (u8 *) &gBattleAnimSpritePalette_272, 10273 }, + { (u8 *) &gBattleAnimSpritePalette_274, 10274 }, + { (u8 *) &gBattleAnimSpritePalette_274, 10275 }, + { (u8 *) &gBattleAnimSpritePalette_274, 10276 }, + { (u8 *) &gBattleAnimSpritePalette_277, 10277 }, + { (u8 *) &gBattleAnimSpritePalette_278, 10278 }, + { (u8 *) &gBattleAnimSpritePalette_279, 10279 }, + { (u8 *) &gBattleAnimSpritePalette_280, 10280 }, + { (u8 *) &gBattleAnimSpritePalette_281, 10281 }, + { (u8 *) &gBattleAnimSpritePalette_282, 10282 }, + { (u8 *) &gBattleAnimSpritePalette_283, 10283 }, + { (u8 *) &gBattleAnimSpritePalette_284, 10284 }, + { (u8 *) &gBattleAnimSpritePalette_285, 10285 }, + { (u8 *) &gBattleAnimSpritePalette_286, 10286 }, + { (u8 *) &gBattleAnimSpritePalette_287, 10287 }, + { (u8 *) &gBattleAnimSpritePalette_288, 10288 }, +}; + +const struct BattleAnimBackground gBattleAnimBackgroundTable[] = +{ + &gBattleAnimBackgroundImage_00, &gBattleAnimBackgroundPalette_00, &gBattleAnimBackgroundTilemap_00, + &gBattleAnimBackgroundImage_00, &gBattleAnimBackgroundPalette_00, &gBattleAnimBackgroundTilemap_00, + &gBattleAnimBackgroundImage_02, &gBattleAnimBackgroundPalette_02, &gBattleAnimBackgroundTilemap_02, + &gBattleAnimBackgroundImage_03, &gBattleAnimBackgroundPalette_03, &gBattleAnimBackgroundTilemap_03, + &gBattleAnimBackgroundImage_04, &gBattleAnimBackgroundPalette_04, &gBattleAnimBackgroundTilemap_04, + &gBattleAnimBackgroundImage_04, &gBattleAnimBackgroundPalette_04, &gBattleAnimBackgroundTilemap_05, + &gBattleAnimBackgroundImage_04, &gBattleAnimBackgroundPalette_04, &gBattleAnimBackgroundTilemap_06, + &gBattleAnimBackgroundImage_07, &gBattleAnimBackgroundPalette_07, &gBattleAnimBackgroundTilemap_07, + &gBattleAnimBackgroundImage_07, &gBattleAnimBackgroundPalette_07, &gBattleAnimBackgroundTilemap_08, + &gBattleAnimBackgroundImage_09, &gBattleAnimBackgroundPalette_09, &gBattleAnimBackgroundTilemap_09, + &gBattleAnimBackgroundImage_09, &gBattleAnimBackgroundPalette_09, &gBattleAnimBackgroundTilemap_10, + &gBattleAnimBackgroundImage_11, &gBattleAnimBackgroundPalette_11, &gBattleAnimBackgroundTilemap_11, + &gBattleAnimBackgroundImage_12, &gBattleAnimBackgroundPalette_12, &gBattleAnimBackgroundTilemap_12, + &gBattleAnimBackgroundImage_12, &gBattleAnimBackgroundPalette_12, &gBattleAnimBackgroundTilemap_13, + &gBattleAnimBackgroundImage_12, &gBattleAnimBackgroundPalette_12, &gBattleAnimBackgroundTilemap_14, + &gBattleAnimBackgroundImage_15, &gBattleAnimBackgroundPalette_15, &gBattleAnimBackgroundTilemap_15, + &gBattleAnimBackgroundImage_16, &gBattleAnimBackgroundPalette_16, &gBattleAnimBackgroundTilemap_16, + &gBattleAnimBackgroundImage_17, &gBattleAnimBackgroundPalette_17, &gBattleAnimBackgroundTilemap_17, + &gBattleAnimBackgroundImage_07, &gBattleAnimBackgroundPalette_18, &gBattleAnimBackgroundTilemap_07, + &gBattleAnimBackgroundImage_07, &gBattleAnimBackgroundPalette_18, &gBattleAnimBackgroundTilemap_08, + &gBattleAnimBackgroundImage_20, &gBattleAnimBackgroundPalette_20, &gBattleAnimBackgroundTilemap_20, + &gBattleAnimBackgroundImage_21, &gBattleAnimBackgroundPalette_21, &gBattleAnimBackgroundTilemap_21, + &gBattleAnimBackgroundImage_09, &gBattleAnimBackgroundPalette_22, &gBattleAnimBackgroundTilemap_09, + &gBattleAnimBackgroundImage_09, &gBattleAnimBackgroundPalette_22, &gBattleAnimBackgroundTilemap_10, + &gBattleAnimBackgroundImage_04, &gBattleAnimBackgroundPalette_24, &gBattleAnimBackgroundTilemap_04, + &gBattleAnimBackgroundImage_04, &gBattleAnimBackgroundPalette_24, &gBattleAnimBackgroundTilemap_05, + &gBattleAnimBackgroundImage_04, &gBattleAnimBackgroundPalette_24, &gBattleAnimBackgroundTilemap_06, +}; + extern u16 gBattlePartyID[4]; extern u8 gObjectBankIDs[]; extern u8 gBankAttacker; @@ -63,9 +1329,6 @@ extern struct MusicPlayerInfo gMPlay_SE2; extern const u16 gUnknown_081C7160[]; extern const u8 *const gBattleAnims_Moves[]; -extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; -extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; -extern const struct BattleAnimBackground gBattleAnimBackgroundTable[]; static void RunAnimScriptCommand(void); static void ScriptCmd_loadspritegfx(void); diff --git a/src/battle/battle_anim_80A7E7C.c b/src/battle/battle_anim_80A7E7C.c index c35434df0..f109333e3 100644 --- a/src/battle/battle_anim_80A7E7C.c +++ b/src/battle/battle_anim_80A7E7C.c @@ -20,17 +20,77 @@ static void sub_80A808C(u8 taskId); static void sub_80A81D8(u8 taskId); static void sub_80A8374(u8 taskId); static void sub_80A8488(u8 taskId); +static void sub_80A8530(struct Sprite *sprite); static void sub_80A85A4(struct Sprite *sprite); -void sub_80A8614(struct Sprite* sprite); +static void sub_80A85C8(struct Sprite *sprite); +static void sub_80A8614(struct Sprite* sprite); +static void sub_80A8638(struct Sprite *sprite); static void sub_80A86F4(struct Sprite *sprite); +static void sub_80A8764(struct Sprite *sprite); +static void sub_80A8818(struct Sprite *sprite); static void sub_80A88F0(struct Sprite *sprite); static void sub_80A89B4(u8 taskId); static void sub_80A8A18(u8 taskId); static void sub_80A8C0C(u8 taskId); static void sub_80A8D8C(u8 taskId); -void sub_80A8FD8(u8 taskId); +static void sub_80A8FD8(u8 taskId); static void sub_80A913C(u8 taskId); +const struct SpriteTemplate gBattleAnimSpriteTemplate_83C1FB0 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8530, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83C1FC8 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A85C8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83C1FE0 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8638, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83C1FF8 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8764, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83C2010 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8818, +}; + void sub_80A7E7C(u8 taskId) { u8 sprite; @@ -335,7 +395,7 @@ void sub_80A8500(u8 taskId) sub_80A8408(taskId); } -void sub_80A8530(struct Sprite *sprite) +static void sub_80A8530(struct Sprite *sprite) { sprite->invisible = TRUE; if (GetBankSide(gAnimBankAttacker)) @@ -362,7 +422,7 @@ static void sub_80A85A4(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } -void sub_80A85C8(struct Sprite *sprite) +static void sub_80A85C8(struct Sprite *sprite) { u8 spriteId; sprite->invisible = TRUE; @@ -376,7 +436,7 @@ void sub_80A85C8(struct Sprite *sprite) sprite->callback = sub_8078458; } -void sub_80A8614(struct Sprite *sprite) +static void sub_80A8614(struct Sprite *sprite) { sprite->data[0] = sprite->data[4]; sprite->data[2] = -sprite->data[2]; @@ -384,7 +444,7 @@ void sub_80A8614(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } -void sub_80A8638(struct Sprite *sprite) +static void sub_80A8638(struct Sprite *sprite) { int something; int spriteId; @@ -451,7 +511,7 @@ static void sub_80A86F4(struct Sprite *sprite) } } -void sub_80A8764(struct Sprite *sprite) +static void sub_80A8764(struct Sprite *sprite) { u8 v1; u8 spriteId; @@ -486,7 +546,7 @@ void sub_80A8764(struct Sprite *sprite) sprite->callback = sub_80784A8; } -void sub_80A8818(struct Sprite *sprite) +static void sub_80A8818(struct Sprite *sprite) { u8 spriteId; u8 v1; @@ -833,7 +893,7 @@ void sub_80A8EFC(u8 taskId) TASK.func = sub_80A8FD8; } -void sub_80A8FD8(u8 taskId) +static void sub_80A8FD8(u8 taskId) { TASK.data[3] += TASK.data[4]; obj_id_set_rotscale(TASK.data[5], 0x100, 0x100, TASK.data[3]); diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index e39d98997..3a16e12e6 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -94,7 +94,7 @@ extern void sub_804777C(); extern void sub_8043DFC(); //extern s16 sub_8045C78(); extern void sub_80440EC(); -extern void sub_80324F8(); +extern void HandleLowHpMusicChange(); extern void nullsub_9(u16); extern void sub_8043DB0(); extern void move_anim_start_t4(); @@ -355,7 +355,7 @@ void bx_t3_healthbar_update(void) } else { - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); LinkPartnerBufferExecCompleted(); } } @@ -434,7 +434,7 @@ void sub_811E0CC(void) FreeSpriteTilesByTag(0x27F9); FreeSpritePaletteByTag(0x27F9); CreateTask(c3_0802FDF4, 10); - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0); sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0); sub_804777C(gActiveBank); @@ -1084,7 +1084,7 @@ void sub_811EC68(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); break; } - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); } void LinkPartnerHandlecmd3(void) @@ -1243,7 +1243,7 @@ void LinkPartnerHandlecmd10(void) else if (!ewram17810[gActiveBank].unk0_6) { ewram17810[gActiveBank].unk4 = 0; - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); PlaySE12WithPanning(SE_POKE_DEAD, -64); gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0; gSprites[gObjectBankIDs[gActiveBank]].data[2] = 5; diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 2bdf448db..0d05b7aed 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -87,7 +87,7 @@ extern void sub_802E220(); extern void sub_802E2D4(); extern void sub_802E004(void); extern void sub_802DF30(void); -extern void BattleMusicStop(void); +extern void BattleStopLowHpSound(void); extern void PlayerBufferExecCompleted(void); extern void bx_t1_healthbar_update(void); extern void nullsub_91(void); @@ -1019,9 +1019,9 @@ void sub_802D31C(void) m4aMPlayContinue(&gMPlay_BGM); else m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); if (IsDoubleBattle()) - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2); ewram17810[gActiveBank].unk9 = 3; gBattleBankFunc[gActiveBank] = sub_802D2E0; } @@ -1077,7 +1077,7 @@ void sub_802D730(void) if (!ewram17810[gActiveBank].unk0_6 && !IsCryPlayingOrClearCrySongs()) { m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); PlayerBufferExecCompleted(); } } @@ -1118,7 +1118,7 @@ void bx_t1_healthbar_update(void) } else { - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); PlayerBufferExecCompleted(); } } @@ -2278,7 +2278,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); break; } - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); } void PlayerHandlecmd3(void) @@ -2438,7 +2438,7 @@ void PlayerHandlecmd10(void) if (ewram17810[gActiveBank].unk0_6 == 0) { ewram17810[gActiveBank].unk4 = 0; - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); PlaySE12WithPanning(SE_POKE_DEAD, -64); gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0; gSprites[gObjectBankIDs[gActiveBank]].data[2] = 5; @@ -2655,7 +2655,7 @@ void PlayerHandlecmd22(void) void PlayerHandlecmd23(void) { - BattleMusicStop(); + BattleStopLowHpSound(); BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0); PlayerBufferExecCompleted(); } diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 4c0adab5e..49f530129 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -412,7 +412,7 @@ void sub_81376B8(void) FreeSpriteTilesByTag(0x27F9); FreeSpritePaletteByTag(0x27F9); CreateTask(c3_0802FDF4, 10); - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); WallyBufferExecCompleted(); } } @@ -429,7 +429,7 @@ void sub_81377B0(void) } else { - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); WallyBufferExecCompleted(); } } @@ -1066,7 +1066,7 @@ void sub_8138294(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); break; } - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); } void WallyHandlecmd3(void) diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index d8efc09c5..e9334ef61 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -158,7 +158,6 @@ extern u8 gBankAttacker; extern u8 gBankTarget; extern u8 gStringBank; extern u8 gEffectBank; -extern u8 gAbilitiesPerBank[4]; extern u8 gBattleTextBuff1[]; extern u8 gBattleTextBuff2[]; extern u8 gBattleTextBuff3[]; @@ -175,6 +174,8 @@ extern u16 gBattlePartyID[4]; extern struct BattleEnigmaBerry gEnigmaBerries[4]; extern u8 gBattleBufferA[4][0x200]; +EWRAM_DATA u8 gAbilitiesPerBank[4] = {0}; + extern const u8* const gUnknown_08401674[]; // table of pointers to 'a -TYPE' strings extern const u8* const gUnknown_08400F58[]; // table of pointers to stat strings extern const u8* const gUnknown_08400F78[]; // table of pointers to flavour strings @@ -214,11 +215,11 @@ void BufferStringBattle(u16 stringID) gStringInfo = (struct StringInfoBattle*)(&gBattleBufferA[gActiveBank][4]); gLastUsedItem = gStringInfo->lastItem; gLastUsedAbility = gStringInfo->lastAbility; - BATTLE_STRUCT->scriptingActive = gStringInfo->scrActive; - BATTLE_STRUCT->unk1605E = gStringInfo->unk1605E; - BATTLE_STRUCT->hpScale = gStringInfo->hpScale; + gBattleStruct->scriptingActive = gStringInfo->scrActive; + gBattleStruct->unk1605E = gStringInfo->unk1605E; + gBattleStruct->hpScale = gStringInfo->hpScale; gStringBank = gStringInfo->StringBank; - BATTLE_STRUCT->stringMoveType = gStringInfo->moveType; + gBattleStruct->stringMoveType = gStringInfo->moveType; for (i = 0; i < 4; i++) { gAbilitiesPerBank[i] = gStringInfo->abilities[i]; @@ -304,11 +305,11 @@ void BufferStringBattle(u16 stringID) case 2: // sending poke to ball msg if (GetBankSide(gActiveBank) == 0) { - if (BATTLE_STRUCT->hpScale == 0) + if (gBattleStruct->hpScale == 0) stringPtr = BattleText_ComeBackSingle1; - else if (BATTLE_STRUCT->hpScale == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (gBattleStruct->hpScale == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) stringPtr = BattleText_ComeBackSingle2; - else if (BATTLE_STRUCT->hpScale == 2) + else if (gBattleStruct->hpScale == 2) stringPtr = BattleText_ComeBackSingle3; else stringPtr = BattleText_ComeBackSingle4; @@ -332,13 +333,13 @@ void BufferStringBattle(u16 stringID) } break; case 3: // switch-in msg - if (GetBankSide(BATTLE_STRUCT->scriptingActive) == 0) + if (GetBankSide(gBattleStruct->scriptingActive) == 0) { - if (BATTLE_STRUCT->hpScale == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (gBattleStruct->hpScale == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) stringPtr = BattleText_SentOutSingle7; - else if (BATTLE_STRUCT->hpScale == 1) + else if (gBattleStruct->hpScale == 1) stringPtr = BattleText_SentOutSingle8; - else if (BATTLE_STRUCT->hpScale == 2) + else if (gBattleStruct->hpScale == 2) stringPtr = BattleText_SentOutSingle9; else stringPtr = BattleText_SentOutSingle10; @@ -364,7 +365,7 @@ void BufferStringBattle(u16 stringID) case 4: // pokemon used a move msg sub_8121D1C(gBattleTextBuff1); if (gStringInfo->currentMove > 0x162) - StringCopy(gBattleTextBuff2, gUnknown_08401674[BATTLE_STRUCT->stringMoveType]); + StringCopy(gBattleTextBuff2, gUnknown_08401674[gBattleStruct->stringMoveType]); else StringCopy(gBattleTextBuff2, gMoveNames[gStringInfo->currentMove]); sub_8121D74(gBattleTextBuff2); @@ -636,17 +637,17 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) HANDLE_NICKNAME_STRING_CASE(gActiveBank, gBattlePartyID[gActiveBank]) break; case 16: // scripting active bank name with prefix - HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, gBattlePartyID[BATTLE_STRUCT->scriptingActive]) + HANDLE_NICKNAME_STRING_CASE(gBattleStruct->scriptingActive, gBattlePartyID[gBattleStruct->scriptingActive]) break; case 17: // current move name if (gStringInfo->currentMove > 0x162) - toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType]; + toCpy = (void*) &gUnknown_08401674[gBattleStruct->stringMoveType]; else toCpy = gMoveNames[gStringInfo->currentMove]; break; case 18: // last used move name if (gStringInfo->lastMove > 0x162) - toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType]; + toCpy = (void*) &gUnknown_08401674[gBattleStruct->stringMoveType]; else toCpy = gMoveNames[gStringInfo->lastMove]; break; @@ -655,7 +656,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) { if (gLastUsedItem == ITEM_ENIGMA_BERRY) { - if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank) + if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 == gStringBank) { StringCopy(text, gEnigmaBerries[gStringBank].name); #ifdef ENGLISH @@ -690,7 +691,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = gAbilityNames[gAbilitiesPerBank[gBankTarget]]; break; case 23: // scripting active ability - toCpy = gAbilityNames[gAbilitiesPerBank[BATTLE_STRUCT->scriptingActive]]; + toCpy = gAbilityNames[gAbilitiesPerBank[gBattleStruct->scriptingActive]]; break; case 24: // effect bank ability toCpy = gAbilityNames[gAbilitiesPerBank[gEffectBank]]; @@ -750,7 +751,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = gLinkPlayers[sub_803FC34(3 ^ gLinkPlayers[multiplayerID].lp_field_18)].name; break; case 31: // link scripting active name - toCpy = gLinkPlayers[sub_803FC34(BATTLE_STRUCT->scriptingActive)].name; + toCpy = gLinkPlayers[sub_803FC34(gBattleStruct->scriptingActive)].name; break; case 32: // player name toCpy = gSaveBlock2.playerName; @@ -759,7 +760,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = GetTrainerLoseText(); break; case 34: // ? - HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, BATTLE_STRUCT->unk1605E) + HANDLE_NICKNAME_STRING_CASE(gBattleStruct->scriptingActive, gBattleStruct->unk1605E) break; case 35: // lanette pc if (FlagGet(FLAG_SYS_PC_LANETTE)) @@ -946,7 +947,7 @@ void StrCpyDecodeBattleTextBuff(u8* src, u8* dst) { if (hword == ITEM_ENIGMA_BERRY) { - if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank) + if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 == gStringBank) { StringCopy(dst, gEnigmaBerries[gStringBank].name); #ifdef ENGLISH diff --git a/src/battle/battle_util.c b/src/battle/battle_util.c index 9dc030a1a..f93664593 100644 --- a/src/battle/battle_util.c +++ b/src/battle/battle_util.c @@ -21,7 +21,7 @@ #include "constants/species.h" #include "constants/weather.h" -extern u8* gBattlescriptCurrInstr; +extern const u8* gBattlescriptCurrInstr; extern u8 gActiveBank; extern u8 gBattleBufferB[4][0x200]; extern u8* gUnknown_02024C1C[4]; //battlescript location when you try to choose a move you're not allowed to @@ -454,7 +454,7 @@ void sub_80157C4(u8 bank) } } -void BattleScriptPush(u8* BS_ptr) +void BattleScriptPush(const u8* BS_ptr) { B_BATTLESCRIPTS_STACK->ptr[B_BATTLESCRIPTS_STACK->size++] = BS_ptr; } @@ -477,7 +477,7 @@ u8 TrySetCantSelectMoveBattleScript(void) //msg can't select a move u16* choicedMove = CHOICED_MOVE(gActiveBank); if (gDisableStructs[gActiveBank].disabledMove == move && move) { - BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattleStruct->scriptingActive = gActiveBank; gCurrentMove = move; gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionDisabledMove; limitations++; @@ -615,7 +615,7 @@ u8 UpdateTurnCounters(void) { u8 sideBank; - switch (BATTLE_STRUCT->turncountersTracker) + switch (gBattleStruct->turncountersTracker) { case 0: for (i = 0; i < gNoOfAllBanks; i++) @@ -631,12 +631,12 @@ u8 UpdateTurnCounters(void) SwapTurnOrder(i, j); } } - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; + gBattleStruct->turncountersTracker++; + gBattleStruct->turnSideTracker = 0; case 1: - while (BATTLE_STRUCT->turnSideTracker < 2) + while (gBattleStruct->turnSideTracker < 2) { - gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; + gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker; if (gSideAffecting[sideBank] & SIDE_STATUS_REFLECT) { @@ -653,20 +653,20 @@ u8 UpdateTurnCounters(void) effect++; } } - BATTLE_STRUCT->turnSideTracker++; + gBattleStruct->turnSideTracker++; if (effect) break; } if (!effect) { - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; + gBattleStruct->turncountersTracker++; + gBattleStruct->turnSideTracker = 0; } break; case 2: - while (BATTLE_STRUCT->turnSideTracker < 2) + while (gBattleStruct->turnSideTracker < 2) { - gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; + gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker; if (gSideAffecting[sideBank] & SIDE_STATUS_LIGHTSCREEN) { if (--gSideTimers[sideBank].lightscreenTimer == 0) @@ -682,20 +682,20 @@ u8 UpdateTurnCounters(void) effect++; } } - BATTLE_STRUCT->turnSideTracker++; + gBattleStruct->turnSideTracker++; if (effect) break; } if (!effect) { - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; + gBattleStruct->turncountersTracker++; + gBattleStruct->turnSideTracker = 0; } break; case 3: - while (BATTLE_STRUCT->turnSideTracker < 2) + while (gBattleStruct->turnSideTracker < 2) { - gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; + gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker; if (gSideTimers[sideBank].mistTimer && --gSideTimers[sideBank].mistTimer == 0) { gSideAffecting[sideBank] &= ~SIDE_STATUS_MIST; @@ -708,20 +708,20 @@ u8 UpdateTurnCounters(void) gBattleTextBuff1[4] = EOS; effect++; } - BATTLE_STRUCT->turnSideTracker++; + gBattleStruct->turnSideTracker++; if (effect) break; } if (!effect) { - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; + gBattleStruct->turncountersTracker++; + gBattleStruct->turnSideTracker = 0; } break; case 4: - while (BATTLE_STRUCT->turnSideTracker < 2) + while (gBattleStruct->turnSideTracker < 2) { - gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; + gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker; if (gSideAffecting[sideBank] & SIDE_STATUS_SAFEGUARD) { if (--gSideTimers[sideBank].safeguardTimer == 0) @@ -731,33 +731,33 @@ u8 UpdateTurnCounters(void) effect++; } } - BATTLE_STRUCT->turnSideTracker++; + gBattleStruct->turnSideTracker++; if (effect) break; } if (!effect) { - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; + gBattleStruct->turncountersTracker++; + gBattleStruct->turnSideTracker = 0; } break; case 5: - while (BATTLE_STRUCT->turnSideTracker < gNoOfAllBanks) + while (gBattleStruct->turnSideTracker < gNoOfAllBanks) { - gActiveBank = gBanksByTurnOrder[BATTLE_STRUCT->turnSideTracker]; + gActiveBank = gBanksByTurnOrder[gBattleStruct->turnSideTracker]; if (gWishFutureKnock.wishCounter[gActiveBank] && --gWishFutureKnock.wishCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp) { gBankTarget = gActiveBank; BattleScriptExecute(BattleScript_WishComesTrue); effect++; } - BATTLE_STRUCT->turnSideTracker++; + gBattleStruct->turnSideTracker++; if (effect) break; } if (!effect) { - BATTLE_STRUCT->turncountersTracker++; + gBattleStruct->turncountersTracker++; } break; case 6: @@ -783,7 +783,7 @@ u8 UpdateTurnCounters(void) BattleScriptExecute(BattleScript_RainContinuesOrEnds); effect++; } - BATTLE_STRUCT->turncountersTracker++; + gBattleStruct->turncountersTracker++; break; case 7: if (gBattleWeather & WEATHER_SANDSTORM_ANY) @@ -796,12 +796,12 @@ u8 UpdateTurnCounters(void) else gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues; - BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES; + gBattleStruct->animArg1 = B_ANIM_SANDSTORM_CONTINUES; gBattleCommunication[MULTISTRING_CHOOSER] = 0; BattleScriptExecute(gBattlescriptCurrInstr); effect++; } - BATTLE_STRUCT->turncountersTracker++; + gBattleStruct->turncountersTracker++; break; case 8: if (gBattleWeather & WEATHER_SUN_ANY) @@ -817,7 +817,7 @@ u8 UpdateTurnCounters(void) BattleScriptExecute(gBattlescriptCurrInstr); effect++; } - BATTLE_STRUCT->turncountersTracker++; + gBattleStruct->turncountersTracker++; break; case 9: if (gBattleWeather & WEATHER_HAIL) @@ -830,12 +830,12 @@ u8 UpdateTurnCounters(void) else gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues; - BATTLE_STRUCT->animArg1 = B_ANIM_HAIL_CONTINUES; + gBattleStruct->animArg1 = B_ANIM_HAIL_CONTINUES; gBattleCommunication[MULTISTRING_CHOOSER] = 1; BattleScriptExecute(gBattlescriptCurrInstr); effect++; } - BATTLE_STRUCT->turncountersTracker++; + gBattleStruct->turncountersTracker++; break; case 10: effect++; @@ -852,16 +852,16 @@ u8 TurnBasedEffects(void) u8 effect = 0; gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); - while (BATTLE_STRUCT->turnEffectsBank < gNoOfAllBanks && BATTLE_STRUCT->turnEffectsTracker <= TURNBASED_MAX_CASE) + while (gBattleStruct->turnEffectsBank < gNoOfAllBanks && gBattleStruct->turnEffectsTracker <= TURNBASED_MAX_CASE) { - gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->turnEffectsBank]; + gActiveBank = gBankAttacker = gBanksByTurnOrder[gBattleStruct->turnEffectsBank]; if (gAbsentBankFlags & gBitTable[gActiveBank]) { - BATTLE_STRUCT->turnEffectsBank++; + gBattleStruct->turnEffectsBank++; } else { - switch (BATTLE_STRUCT->turnEffectsTracker) + switch (gBattleStruct->turnEffectsTracker) { case 0: // ingrain if ((gStatuses3[gActiveBank] & STATUS3_ROOTED) @@ -875,22 +875,22 @@ u8 TurnBasedEffects(void) BattleScriptExecute(BattleScript_IngrainTurnHeal); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 1: // end turn abilities if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, gActiveBank, 0, 0, 0)) effect++; - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 2: // item effects if (ItemBattleEffects(1, gActiveBank, 0)) effect++; - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 18: // item effects again if (ItemBattleEffects(1, gActiveBank, 1)) effect++; - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 3: // leech seed if (gStatuses3[gActiveBank] & STATUS3_LEECHSEED && gBattleMons[gStatuses3[gActiveBank] & STATUS3_LEECHSEED_BANK].hp != 0 && gBattleMons[gActiveBank].hp != 0) @@ -899,12 +899,12 @@ u8 TurnBasedEffects(void) gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - BATTLE_STRUCT->animArg1 = gBankTarget; - BATTLE_STRUCT->animArg2 = gBankAttacker; + gBattleStruct->animArg1 = gBankTarget; + gBattleStruct->animArg2 = gBankAttacker; BattleScriptExecute(BattleScript_LeechSeedTurnDrain); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 4: // poison if ((gBattleMons[gActiveBank].status1 & STATUS_POISON) && gBattleMons[gActiveBank].hp != 0) @@ -915,7 +915,7 @@ u8 TurnBasedEffects(void) BattleScriptExecute(BattleScript_PoisonTurnDmg); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 5: // toxic poison if ((gBattleMons[gActiveBank].status1 & STATUS_TOXIC_POISON) && gBattleMons[gActiveBank].hp != 0) @@ -929,7 +929,7 @@ u8 TurnBasedEffects(void) BattleScriptExecute(BattleScript_PoisonTurnDmg); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 6: // burn if ((gBattleMons[gActiveBank].status1 & STATUS_BURN) && gBattleMons[gActiveBank].hp != 0) @@ -940,7 +940,7 @@ u8 TurnBasedEffects(void) BattleScriptExecute(BattleScript_BurnTurnDmg); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 7: // spooky nightmares if ((gBattleMons[gActiveBank].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBank].hp != 0) @@ -952,7 +952,7 @@ u8 TurnBasedEffects(void) BattleScriptExecute(BattleScript_NightmareTurnDmg); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 8: // curse if ((gBattleMons[gActiveBank].status2 & STATUS2_CURSED) && gBattleMons[gActiveBank].hp != 0) @@ -963,7 +963,7 @@ u8 TurnBasedEffects(void) BattleScriptExecute(BattleScript_CurseTurnDmg); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 9: // wrap if ((gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBank].hp != 0) @@ -971,8 +971,8 @@ u8 TurnBasedEffects(void) gBattleMons[gActiveBank].status2 -= 0x2000; if (gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) // damaged by wrap { - BATTLE_STRUCT->animArg1 = ewram16004arr(0, gActiveBank); - BATTLE_STRUCT->animArg2 = ewram16004arr(1, gActiveBank); + gBattleStruct->animArg1 = ewram16004arr(0, gActiveBank); + gBattleStruct->animArg2 = ewram16004arr(1, gActiveBank); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 2; gBattleTextBuff1[2] = ewram16004arr(0, gActiveBank); @@ -995,7 +995,7 @@ u8 TurnBasedEffects(void) BattleScriptExecute(gBattlescriptCurrInstr); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 10: // uproar if (gBattleMons[gActiveBank].status2 & STATUS2_UPROAR) @@ -1044,7 +1044,7 @@ u8 TurnBasedEffects(void) } } if (effect != 2) - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 11: // thrash if (gBattleMons[gActiveBank].status2 & STATUS2_LOCK_CONFUSE) @@ -1066,7 +1066,7 @@ u8 TurnBasedEffects(void) } } } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 12: // disable if (gDisableStructs[gActiveBank].disableTimer1 != 0) @@ -1089,7 +1089,7 @@ u8 TurnBasedEffects(void) effect++; } } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 13: // encore if (gDisableStructs[gActiveBank].encoreTimer1 != 0) @@ -1108,22 +1108,22 @@ u8 TurnBasedEffects(void) effect++; } } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 14: // lock-on decrement if (gStatuses3[gActiveBank] & STATUS3_ALWAYS_HITS) gStatuses3[gActiveBank] -= 0x8; - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 15: // charge if (gDisableStructs[gActiveBank].chargeTimer1 && --gDisableStructs[gActiveBank].chargeTimer1 == 0) gStatuses3[gActiveBank] &= ~STATUS3_CHARGED_UP; - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 16: // taunt if (gDisableStructs[gActiveBank].tauntTimer1) gDisableStructs[gActiveBank].tauntTimer1--; - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 17: // yawn if (gStatuses3[gActiveBank] & STATUS3_YAWN) @@ -1142,11 +1142,11 @@ u8 TurnBasedEffects(void) effect++; } } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 19: // done - BATTLE_STRUCT->turnEffectsTracker = 0; - BATTLE_STRUCT->turnEffectsBank++; + gBattleStruct->turnEffectsTracker = 0; + gBattleStruct->turnEffectsBank++; break; } if (effect != 0) @@ -1160,17 +1160,17 @@ u8 TurnBasedEffects(void) bool8 HandleWishPerishSongOnTurnEnd(void) { gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); - switch (BATTLE_STRUCT->sub80170DC_Tracker) + switch (gBattleStruct->sub80170DC_Tracker) { case 0: // future sight - while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks) + while (gBattleStruct->sub80170DC_Bank < gNoOfAllBanks) { - gActiveBank = BATTLE_STRUCT->sub80170DC_Bank; + gActiveBank = gBattleStruct->sub80170DC_Bank; if (gAbsentBankFlags & gBitTable[gActiveBank]) - BATTLE_STRUCT->sub80170DC_Bank++; + gBattleStruct->sub80170DC_Bank++; else { - BATTLE_STRUCT->sub80170DC_Bank++; + gBattleStruct->sub80170DC_Bank++; if (gWishFutureKnock.futureSightCounter[gActiveBank] && --gWishFutureKnock.futureSightCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp) { if (gWishFutureKnock.futureSightMove[gActiveBank] == MOVE_FUTURE_SIGHT) @@ -1191,17 +1191,17 @@ bool8 HandleWishPerishSongOnTurnEnd(void) } } } - BATTLE_STRUCT->sub80170DC_Tracker = 1; - BATTLE_STRUCT->sub80170DC_Bank = 0; + gBattleStruct->sub80170DC_Tracker = 1; + gBattleStruct->sub80170DC_Bank = 0; case 1: // perish song - while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks) + while (gBattleStruct->sub80170DC_Bank < gNoOfAllBanks) { - gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->sub80170DC_Bank]; + gActiveBank = gBankAttacker = gBanksByTurnOrder[gBattleStruct->sub80170DC_Bank]; if (gAbsentBankFlags & gBitTable[gActiveBank]) - BATTLE_STRUCT->sub80170DC_Bank++; + gBattleStruct->sub80170DC_Bank++; else { - BATTLE_STRUCT->sub80170DC_Bank++; + gBattleStruct->sub80170DC_Bank++; if (gStatuses3[gActiveBank] & STATUS3_PERISH_SONG) { gBattleTextBuff1[0] = 0xFD; @@ -1241,11 +1241,11 @@ bool8 HandleFaintedMonActions(void) do { int i; - switch (BATTLE_STRUCT->sub80173A4_Tracker) + switch (gBattleStruct->sub80173A4_Tracker) { case 0: - BATTLE_STRUCT->unk1605A = 0; - BATTLE_STRUCT->sub80173A4_Tracker++; + gBattleStruct->unk1605A = 0; + gBattleStruct->sub80173A4_Tracker++; for (i = 0; i < gNoOfAllBanks; i++) { if (gAbsentBankFlags & gBitTable[i] && !sub_8018018(i, 6, 6)) @@ -1254,54 +1254,54 @@ bool8 HandleFaintedMonActions(void) case 1: do { - gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A; - if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(BATTLE_STRUCT->unk16113 & gBitTable[gBattlePartyID[BATTLE_STRUCT->unk1605A]]) && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A])) + gBank1 = gBankTarget = gBattleStruct->unk1605A; + if (gBattleMons[gBattleStruct->unk1605A].hp == 0 && !(gBattleStruct->unk16113 & gBitTable[gBattlePartyID[gBattleStruct->unk1605A]]) && !(gAbsentBankFlags & gBitTable[gBattleStruct->unk1605A])) { BattleScriptExecute(BattleScript_GiveExp); - BATTLE_STRUCT->sub80173A4_Tracker = 2; + gBattleStruct->sub80173A4_Tracker = 2; return 1; } - } while (++BATTLE_STRUCT->unk1605A != gNoOfAllBanks); - BATTLE_STRUCT->sub80173A4_Tracker = 3; + } while (++gBattleStruct->unk1605A != gNoOfAllBanks); + gBattleStruct->sub80173A4_Tracker = 3; break; case 2: sub_8015740(gBank1); - if (++BATTLE_STRUCT->unk1605A == gNoOfAllBanks) - BATTLE_STRUCT->sub80173A4_Tracker = 3; + if (++gBattleStruct->unk1605A == gNoOfAllBanks) + gBattleStruct->sub80173A4_Tracker = 3; else - BATTLE_STRUCT->sub80173A4_Tracker = 1; + gBattleStruct->sub80173A4_Tracker = 1; break; case 3: - BATTLE_STRUCT->unk1605A = 0; - BATTLE_STRUCT->sub80173A4_Tracker++; + gBattleStruct->unk1605A = 0; + gBattleStruct->sub80173A4_Tracker++; case 4: do { - gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A; //or should banks be switched? - if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A])) + gBank1 = gBankTarget = gBattleStruct->unk1605A; //or should banks be switched? + if (gBattleMons[gBattleStruct->unk1605A].hp == 0 && !(gAbsentBankFlags & gBitTable[gBattleStruct->unk1605A])) { BattleScriptExecute(BattleScript_HandleFaintedMon); - BATTLE_STRUCT->sub80173A4_Tracker = 5; + gBattleStruct->sub80173A4_Tracker = 5; return 1; } - } while (++BATTLE_STRUCT->unk1605A != gNoOfAllBanks); - BATTLE_STRUCT->sub80173A4_Tracker = 6; + } while (++gBattleStruct->unk1605A != gNoOfAllBanks); + gBattleStruct->sub80173A4_Tracker = 6; break; case 5: - if (++BATTLE_STRUCT->unk1605A == gNoOfAllBanks) - BATTLE_STRUCT->sub80173A4_Tracker = 6; + if (++gBattleStruct->unk1605A == gNoOfAllBanks) + gBattleStruct->sub80173A4_Tracker = 6; else - BATTLE_STRUCT->sub80173A4_Tracker = 4; + gBattleStruct->sub80173A4_Tracker = 4; break; case 6: if (AbilityBattleEffects(9, 0, 0, 0, 0) || AbilityBattleEffects(0xB, 0, 0, 0, 0) || ItemBattleEffects(1, 0, 1) || AbilityBattleEffects(6, 0, 0, 0, 0)) return 1; - BATTLE_STRUCT->sub80173A4_Tracker++; + gBattleStruct->sub80173A4_Tracker++; break; case 7: break; } - } while (BATTLE_STRUCT->sub80173A4_Tracker != HandleFaintedMonActions_MAX_CASE); + } while (gBattleStruct->sub80173A4_Tracker != HandleFaintedMonActions_MAX_CASE); return 0; } @@ -1320,15 +1320,15 @@ void TryClearRageStatuses(void) u8 AtkCanceller_UnableToUseMove(void) { u8 effect = 0; - s32* bideDmg = &BATTLE_STRUCT->bideDmg; + s32* bideDmg = &gBattleStruct->bideDmg; do { - switch (BATTLE_STRUCT->atkCancellerTracker) + switch (gBattleStruct->atkCancellerTracker) { case 0: // flags clear gBattleMons[gBankAttacker].status2 &= ~(STATUS2_DESTINY_BOND); gStatuses3[gBankAttacker] &= ~(STATUS3_GRUDGE); - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 1: // check being asleep if (gBattleMons[gBankAttacker].status1 & STATUS_SLEEP) @@ -1372,7 +1372,7 @@ u8 AtkCanceller_UnableToUseMove(void) } } } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 2: // check being frozen if (gBattleMons[gBankAttacker].status1 & STATUS_FREEZE) @@ -1386,7 +1386,7 @@ u8 AtkCanceller_UnableToUseMove(void) } else { - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; } } @@ -1399,7 +1399,7 @@ u8 AtkCanceller_UnableToUseMove(void) } effect = 2; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 3: // truant if (gBattleMons[gBankAttacker].ability == ABILITY_TRUANT && gDisableStructs[gBankAttacker].truantCounter) @@ -1411,7 +1411,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleMoveFlags |= MOVESTATUS_MISSED; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 4: // recharge if (gBattleMons[gBankAttacker].status2 & STATUS2_RECHARGE) @@ -1423,7 +1423,7 @@ u8 AtkCanceller_UnableToUseMove(void) gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 5: // flinch if (gBattleMons[gBankAttacker].status2 & STATUS2_FLINCHED) @@ -1435,19 +1435,19 @@ u8 AtkCanceller_UnableToUseMove(void) gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 6: // disabled move if (gDisableStructs[gBankAttacker].disabledMove == gCurrentMove && gDisableStructs[gBankAttacker].disabledMove != 0) { gProtectStructs[gBankAttacker].usedDisabledMove = 1; - BATTLE_STRUCT->scriptingActive = gBankAttacker; + gBattleStruct->scriptingActive = gBankAttacker; CancelMultiTurnMoves(gBankAttacker); gBattlescriptCurrInstr = BattleScript_MoveUsedIsDisabled; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 7: // taunt if (gDisableStructs[gBankAttacker].tauntTimer1 && gBattleMoves[gCurrentMove].power == 0) @@ -1458,7 +1458,7 @@ u8 AtkCanceller_UnableToUseMove(void) gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 8: // imprisoned if (IsImprisoned(gBankAttacker, gCurrentMove)) @@ -1469,7 +1469,7 @@ u8 AtkCanceller_UnableToUseMove(void) gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 9: // confusion if (gBattleMons[gBankAttacker].status2 & STATUS2_CONFUSION) @@ -1499,7 +1499,7 @@ u8 AtkCanceller_UnableToUseMove(void) } effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 10: // paralysis if (gBattleMons[gBankAttacker].status1 & STATUS_PARALYSIS && (Random() % 4) == 0) @@ -1510,12 +1510,12 @@ u8 AtkCanceller_UnableToUseMove(void) gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 11: // infatuation if (gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) { - BATTLE_STRUCT->scriptingActive = CountTrailingZeroBits((gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) >> 0x10); + gBattleStruct->scriptingActive = CountTrailingZeroBits((gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) >> 0x10); if (Random() & 1) BattleScriptPushCursor(); else @@ -1528,7 +1528,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 12: // bide if (gBattleMons[gBankAttacker].status2 & STATUS2_BIDE) @@ -1553,7 +1553,7 @@ u8 AtkCanceller_UnableToUseMove(void) } effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 13: // move thawing if (gBattleMons[gBankAttacker].status1 & STATUS_FREEZE) @@ -1567,13 +1567,13 @@ u8 AtkCanceller_UnableToUseMove(void) } effect = 2; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 14: // last case break; } - } while (BATTLE_STRUCT->atkCancellerTracker != ATKCANCELLER_MAX_CASE && effect == 0); + } while (gBattleStruct->atkCancellerTracker != ATKCANCELLER_MAX_CASE && effect == 0); if (effect == 2) { @@ -1731,8 +1731,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) else move = gCurrentMove; - if (BATTLE_STRUCT->dynamicMoveType) - moveType = BATTLE_STRUCT->dynamicMoveType & 0x3F; + if (gBattleStruct->dynamicMoveType) + moveType = gBattleStruct->dynamicMoveType & 0x3F; else moveType = gBattleMoves[move].type; @@ -1755,8 +1755,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (!(gBattleWeather & WEATHER_RAIN_ANY)) { gBattleWeather = (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_PERMANENT); - BATTLE_STRUCT->animArg1 = B_ANIM_RAIN_CONTINUES; - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->animArg1 = B_ANIM_RAIN_CONTINUES; + gBattleStruct->scriptingActive = bank; effect++; } break; @@ -1764,8 +1764,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (!(gBattleWeather & WEATHER_SANDSTORM_ANY)) { gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); - BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES; - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->animArg1 = B_ANIM_SANDSTORM_CONTINUES; + gBattleStruct->scriptingActive = bank; effect++; } break; @@ -1773,8 +1773,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (!(gBattleWeather & WEATHER_SUN_ANY)) { gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY); - BATTLE_STRUCT->animArg1 = B_ANIM_SUN_CONTINUES; - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->animArg1 = B_ANIM_SUN_CONTINUES; + gBattleStruct->scriptingActive = bank; effect++; } break; @@ -1791,7 +1791,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY); BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates); - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; effect++; } break; @@ -1801,7 +1801,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates); - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; effect++; } break; @@ -1811,7 +1811,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY); BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates); - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; effect++; } break; @@ -1829,8 +1829,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (effect != 0) { BattleScriptPushCursorAndCallback(BattleScript_CastformChange); - BATTLE_STRUCT->scriptingActive = bank; - BATTLE_STRUCT->castformToChangeInto = effect - 1; + gBattleStruct->scriptingActive = bank; + gBattleStruct->castformToChangeInto = effect - 1; } break; case ABILITY_TRACE: @@ -1852,8 +1852,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (effect != 0) { BattleScriptPushCursorAndCallback(BattleScript_CastformChange); - BATTLE_STRUCT->scriptingActive = target1; - BATTLE_STRUCT->castformToChangeInto = effect - 1; + gBattleStruct->scriptingActive = target1; + gBattleStruct->castformToChangeInto = effect - 1; break; } } @@ -1897,7 +1897,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) gBattleMons[bank].status1 = 0; // BUG: The nightmare status does not get cleared here. This was fixed in Emerald. //gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); - BATTLE_STRUCT->scriptingActive = gActiveBank = bank; + gBattleStruct->scriptingActive = gActiveBank = bank; BattleScriptPushCursorAndCallback(BattleScript_ShedSkinActivates); EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1); MarkBufferBankForExecution(gActiveBank); @@ -1908,10 +1908,10 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (gBattleMons[bank].statStages[STAT_STAGE_SPEED] < 0xC && gDisableStructs[bank].isFirstTurn != 2) { gBattleMons[bank].statStages[STAT_STAGE_SPEED]++; - BATTLE_STRUCT->animArg1 = 0x11; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->animArg1 = 0x11; + gBattleStruct->animArg2 = 0; BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates); - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; effect++; } break; @@ -2218,7 +2218,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus; - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; gActiveBank = bank; EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); @@ -2238,8 +2238,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (effect) { BattleScriptPushCursorAndCallback(BattleScript_CastformChange); - BATTLE_STRUCT->scriptingActive = bank; - BATTLE_STRUCT->castformToChangeInto = effect - 1; + gBattleStruct->scriptingActive = bank; + gBattleStruct->castformToChangeInto = effect - 1; return effect; } } @@ -2251,11 +2251,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) { gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); - BATTLE_STRUCT->synchroniseEffect &= 0x3F; - if (BATTLE_STRUCT->synchroniseEffect == 6) - BATTLE_STRUCT->synchroniseEffect = 2; - gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect + 0x40; - BATTLE_STRUCT->scriptingActive = gBankTarget; + gBattleStruct->synchroniseEffect &= 0x3F; + if (gBattleStruct->synchroniseEffect == 6) + gBattleStruct->synchroniseEffect = 2; + gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchroniseEffect + 0x40; + gBattleStruct->scriptingActive = gBankTarget; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; @@ -2267,11 +2267,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) { gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); - BATTLE_STRUCT->synchroniseEffect &= 0x3F; - if (BATTLE_STRUCT->synchroniseEffect == 6) - BATTLE_STRUCT->synchroniseEffect = 2; - gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect; - BATTLE_STRUCT->scriptingActive = gBankAttacker; + gBattleStruct->synchroniseEffect &= 0x3F; + if (gBattleStruct->synchroniseEffect == 6) + gBattleStruct->synchroniseEffect = 2; + gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchroniseEffect; + gBattleStruct->scriptingActive = gBankAttacker; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; @@ -2287,7 +2287,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) gLastUsedAbility = ABILITY_INTIMIDATE; gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); BattleScriptPushCursorAndCallback(gUnknown_081D978C); - BATTLE_STRUCT->intimidateBank = i; + gBattleStruct->intimidateBank = i; effect++; break; } @@ -2346,7 +2346,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { BattleScriptPushCursorAndCallback(BattleScript_TraceActivates); gStatuses3[i] &= ~(STATUS3_TRACE); - BATTLE_STRUCT->scriptingActive = i; + gBattleStruct->scriptingActive = i; gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 4; @@ -2373,7 +2373,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); BattleScriptPushCursor(); gBattlescriptCurrInstr = gUnknown_081D9795; - BATTLE_STRUCT->intimidateBank = i; + gBattleStruct->intimidateBank = i; effect++; break; } @@ -2499,7 +2499,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) return effect; } -void BattleScriptExecute(u8* BS_ptr) +void BattleScriptExecute(const u8* BS_ptr) { gBattlescriptCurrInstr = BS_ptr; B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc; @@ -2586,7 +2586,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) switch (bankHoldEffect) { case HOLD_EFFECT_DOUBLE_PRIZE: - BATTLE_STRUCT->moneyMultiplier = 2; + gBattleStruct->moneyMultiplier = 2; break; case HOLD_EFFECT_RESTORE_STATS: for (i = 0; i < 8; i++) @@ -2599,7 +2599,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) } if (effect) { - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; gStringBank = bank; gActiveBank = gBankAttacker = bank; BattleScriptExecute(BattleScript_WhiteHerbEnd2); @@ -2672,7 +2672,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) } if (effect) { - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; gStringBank = bank; gActiveBank = gBankAttacker = bank; BattleScriptExecute(BattleScript_WhiteHerbEnd2); @@ -2809,9 +2809,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleTextBuff2[4] = EOS; gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_ATK; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_ATK; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->statChanger = 0x10 + STAT_STAGE_ATK; + gBattleStruct->animArg1 = 0xE + STAT_STAGE_ATK; + gBattleStruct->animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } @@ -2825,9 +2825,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleTextBuff1[3] = EOS; gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_DEF; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_DEF; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->statChanger = 0x10 + STAT_STAGE_DEF; + gBattleStruct->animArg1 = 0xE + STAT_STAGE_DEF; + gBattleStruct->animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } @@ -2841,9 +2841,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleTextBuff1[3] = EOS; gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPEED; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPEED; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->statChanger = 0x10 + STAT_STAGE_SPEED; + gBattleStruct->animArg1 = 0xE + STAT_STAGE_SPEED; + gBattleStruct->animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } @@ -2857,9 +2857,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleTextBuff1[3] = EOS; gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPATK; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPATK; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->statChanger = 0x10 + STAT_STAGE_SPATK; + gBattleStruct->animArg1 = 0xE + STAT_STAGE_SPATK; + gBattleStruct->animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } @@ -2873,9 +2873,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleTextBuff1[3] = EOS; gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPDEF; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPDEF; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->statChanger = 0x10 + STAT_STAGE_SPDEF; + gBattleStruct->animArg1 = 0xE + STAT_STAGE_SPDEF; + gBattleStruct->animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } @@ -2918,9 +2918,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleTextBuff2[7] = EOS; gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x21 + i; - BATTLE_STRUCT->animArg1 = 0x21 + i + 6; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->statChanger = 0x21 + i; + gBattleStruct->animArg1 = 0x21 + i + 6; + gBattleStruct->animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } @@ -3033,7 +3033,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) } if (effect) { - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; gStringBank = bank; gActiveBank = gBankAttacker = bank; switch (effect) @@ -3181,7 +3181,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) } if (effect) { - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; gStringBank = bank; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_WhiteHerbRet; @@ -3191,7 +3191,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) } if (effect) { - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; gStringBank = bank; gActiveBank = bank; EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); @@ -3228,7 +3228,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) { gLastUsedItem = atkItem; gStringBank = gBankAttacker; - BATTLE_STRUCT->scriptingActive = gBankAttacker; + gBattleStruct->scriptingActive = gBankAttacker; gBattleMoveDamage = (gSpecialStatuses[gBankTarget].moveturnLostHP / atkQuality) * -1; if (gBattleMoveDamage == 0) gBattleMoveDamage = -1; @@ -3433,7 +3433,7 @@ u8 IsMonDisobedient(void) gRandomMove = gBattleMons[gBankAttacker].moves[gCurrMovePos]; gBattleCommunication[3] = 0; gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; + gBattleStruct->dynamicMoveType = 0; gBattlescriptCurrInstr = BattleScript_IgnoresAndUsesRandomMove; gBankTarget = GetMoveTarget(gRandomMove, 0); gHitMarker |= HITMARKER_x200000; diff --git a/src/contest.c b/src/contest.c index 875fe4502..972c19c2c 100644 --- a/src/contest.c +++ b/src/contest.c @@ -31,17 +31,14 @@ #include "tv.h" #include "scanline_effect.h" #include "util.h" +#include "contest_ai.h" extern u8 AreMovesContestCombo(u16, u16); // I don't think this is a bool extern void sub_80C8A38(u8); extern void sub_80C8AD0(u8); extern void sub_80C8C80(u8); -extern void sub_81288F4(); -extern u8 sub_8128944(void); extern struct MusicPlayerInfo gMPlay_SE1; -extern u16 gSpecialVar_ContestCategory; -extern u16 gSpecialVar_ContestRank; extern u8 gBattleMonForms[]; extern u8 gDisplayedStringBattle[]; extern u16 gBattleTypeFlags; @@ -49,8 +46,6 @@ extern u8 gBankAttacker; extern u8 gBankTarget; extern u8 gBanksBySide[]; extern u8 gObjectBankIDs[]; -extern u8 gIsLinkContest; -extern u8 gContestPlayerMonIndex; extern u16 gBattle_BG3_X; extern s16 gBattle_BG1_Y; extern u16 gBattle_BG3_Y; @@ -66,14 +61,6 @@ extern u16 gBattle_BG1_X; extern u16 gBattle_WIN0H; extern u32 gUnknown_03005D28; // saved RNG value -extern s16 gUnknown_02038680[]; -extern u16 gUnknown_02038688[]; -extern u8 gUnknown_02038694; -extern u8 gUnknown_02038696[]; -extern u8 gUnknown_0203869B; -extern s16 gUnknown_02038670[]; -extern s16 gUnknown_02038678[]; -extern u8 gContestFinalStandings[]; // What "place" each participant came in. extern struct SpriteTemplate gUnknown_02024E8C; @@ -293,6 +280,20 @@ void sub_80B292C(void); void sub_80B2968(void); void SelectContestMoveBankTarget(u16); +EWRAM_DATA u8 gUnknown_0203856C = 0; +EWRAM_DATA struct ContestPokemon gContestMons[4] = {0}; +EWRAM_DATA s16 gUnknown_02038670[4] = {0}; +EWRAM_DATA s16 gUnknown_02038678[4] = {0}; +EWRAM_DATA s16 gUnknown_02038680[4] = {0}; +EWRAM_DATA u16 gUnknown_02038688[4] = {0}; +EWRAM_DATA u8 gContestFinalStandings[4] = {0}; // What "place" each participant came in. +EWRAM_DATA u8 gUnknown_02038694 = 0; +EWRAM_DATA u8 gContestPlayerMonIndex = 0; +EWRAM_DATA u8 gUnknown_02038696[4] = {0}; +EWRAM_DATA u8 gIsLinkContest = 0; +EWRAM_DATA u8 gUnknown_0203869B = 0; +EWRAM_DATA u16 gSpecialVar_ContestCategory = 0; +EWRAM_DATA u16 gSpecialVar_ContestRank = 0; void nullsub_89(u8 taskId) { @@ -391,7 +392,7 @@ void ClearContestVars(void) } memset(&shared192D0, 0, sizeof(shared192D0)); - memset(shared192E4, 0, 0x44 * sizeof(*shared192E4)); + memset(eContestAI, 0, sizeof(struct ContestAIInfo)); memset(&shared19328, 0, sizeof(shared19328)); memset(shared19338, 0, 4 * sizeof(*shared19338)); if (!(gIsLinkContest & 1)) @@ -2629,8 +2630,8 @@ u16 GetChosenMove(u8 a) { u8 moveChoice; - sub_81288F4(a); - moveChoice = sub_8128944(); + ContestAI_ResetAI(a); + moveChoice = ContestAI_GetActionToUse(); return gContestMons[a].moves[moveChoice]; } } diff --git a/src/contest_ai.c b/src/contest_ai.c new file mode 100644 index 000000000..66b387270 --- /dev/null +++ b/src/contest_ai.c @@ -0,0 +1,1763 @@ +#include "global.h" +#include "contest.h" +#include "random.h" +#include "contest_ai.h" +#include "ewram.h" + +extern u8 AreMovesContestCombo(u16, u16); +extern bool8 sub_80B214C(u8); +extern bool8 Contest_IsMonsTurnDisabled(u8); + +extern s16 gUnknown_02038670[]; +extern u16 gSpecialVar_ContestCategory; + +extern u8 *gAIScriptPtr; +extern u8 *gContestAIs[]; + +static void ContestAICmd_unk_00(void); +static void ContestAICmd_get_turn(void); +static void ContestAICmd_unk_02(void); +static void ContestAICmd_unk_03(void); +static void ContestAICmd_unk_04(void); +static void ContestAICmd_unk_05(void); +static void ContestAICmd_get_excitement(void); +static void ContestAICmd_unk_07(void); +static void ContestAICmd_unk_08(void); +static void ContestAICmd_unk_09(void); +static void ContestAICmd_unk_0A(void); +static void ContestAICmd_get_user_order(void); +static void ContestAICmd_unk_0C(void); +static void ContestAICmd_unk_0D(void); +static void ContestAICmd_unk_0E(void); +static void ContestAICmd_unk_0F(void); +static void ContestAICmd_get_user_condition_maybe(void); +static void ContestAICmd_unk_11(void); +static void ContestAICmd_unk_12(void); +static void ContestAICmd_unk_13(void); +static void ContestAICmd_unk_14(void); +static void ContestAICmd_unk_15(void); +static void ContestAICmd_unk_16(void); +static void ContestAICmd_unk_17(void); +static void ContestAICmd_unk_18(void); +static void ContestAICmd_unk_19(void); +static void ContestAICmd_unk_1A(void); +static void ContestAICmd_unk_1B(void); +static void ContestAICmd_unk_1C(void); +static void ContestAICmd_unk_1D(void); +static void ContestAICmd_unk_1E(void); +static void ContestAICmd_get_contest_type(void); +static void ContestAICmd_unk_20(void); +static void ContestAICmd_unk_21(void); +static void ContestAICmd_get_move_excitement(void); +static void ContestAICmd_unk_23(void); +static void ContestAICmd_unk_24(void); +static void ContestAICmd_unk_25(void); +static void ContestAICmd_unk_26(void); +static void ContestAICmd_get_move_effect(void); +static void ContestAICmd_unk_28(void); +static void ContestAICmd_unk_29(void); +static void ContestAICmd_get_move_effect_type(void); +static void ContestAICmd_unk_2B(void); +static void ContestAICmd_unk_2C(void); +static void ContestAICmd_check_move_has_highest_appeal(void); +static void ContestAICmd_unk_2E(void); +static void ContestAICmd_unk_2F(void); +static void ContestAICmd_unk_30(void); +static void ContestAICmd_unk_31(void); +static void ContestAICmd_unk_32(void); +static void ContestAICmd_unk_33(void); +static void ContestAICmd_unk_34(void); +static void ContestAICmd_unk_35(void); +static void ContestAICmd_unk_36(void); +static void ContestAICmd_unk_37(void); +static void ContestAICmd_unk_38(void); +static void ContestAICmd_unk_39(void); +static void ContestAICmd_unk_3A(void); +static void ContestAICmd_get_move_used_count(void); +static void ContestAICmd_unk_3C(void); +static void ContestAICmd_unk_3D(void); +static void ContestAICmd_unk_3E(void); +static void ContestAICmd_unk_3F(void); +static void ContestAICmd_check_combo_starter(void); +static void ContestAICmd_unk_41(void); +static void ContestAICmd_unk_42(void); +static void ContestAICmd_check_combo_finisher(void); +static void ContestAICmd_unk_44(void); +static void ContestAICmd_unk_45(void); +static void ContestAICmd_check_would_finish_combo(void); +static void ContestAICmd_unk_47(void); +static void ContestAICmd_unk_48(void); +static void ContestAICmd_get_condition(void); +static void ContestAICmd_unk_4A(void); +static void ContestAICmd_unk_4B(void); +static void ContestAICmd_unk_4C(void); +static void ContestAICmd_unk_4D(void); +static void ContestAICmd_get_used_combo_starter(void); +static void ContestAICmd_unk_4F(void); +static void ContestAICmd_unk_50(void); +static void ContestAICmd_unk_51(void); +static void ContestAICmd_unk_52(void); +static void ContestAICmd_check_can_participate(void); +static void ContestAICmd_unk_54(void); +static void ContestAICmd_unk_55(void); +static void ContestAICmd_get_val_812A188(void); +static void ContestAICmd_unk_57(void); +static void ContestAICmd_unk_58(void); +static void ContestAICmd_unk_59(void); +static void ContestAICmd_unk_5A(void); +static void ContestAICmd_unk_5B(void); +static void ContestAICmd_unk_5C(void); +static void ContestAICmd_unk_5D(void); +static void ContestAICmd_unk_5E(void); +static void ContestAICmd_unk_5F(void); +static void ContestAICmd_unk_60(void); +static void ContestAICmd_unk_61(void); +static void ContestAICmd_unk_62(void); +static void ContestAICmd_unk_63(void); +static void ContestAICmd_unk_64(void); +static void ContestAICmd_unk_65(void); +static void ContestAICmd_unk_66(void); +static void ContestAICmd_unk_67(void); +static void ContestAICmd_unk_68(void); +static void ContestAICmd_unk_69(void); +static void ContestAICmd_unk_6A(void); +static void ContestAICmd_unk_6B(void); +static void ContestAICmd_unk_6C(void); +static void ContestAICmd_unk_6D(void); +static void ContestAICmd_unk_6E(void); +static void ContestAICmd_unk_6F(void); +static void ContestAICmd_unk_70(void); +static void ContestAICmd_unk_71(void); +static void ContestAICmd_unk_72(void); +static void ContestAICmd_unk_73(void); +static void ContestAICmd_unk_74(void); +static void ContestAICmd_unk_75(void); +static void ContestAICmd_unk_76(void); +static void ContestAICmd_unk_77(void); +static void ContestAICmd_unk_78(void); +static void ContestAICmd_unk_79(void); +static void ContestAICmd_unk_7A(void); +static void ContestAICmd_unk_7B(void); +static void ContestAICmd_unk_7C(void); +static void ContestAICmd_unk_7D(void); +static void ContestAICmd_unk_7E(void); +static void ContestAICmd_unk_7F(void); +static void ContestAICmd_unk_80(void); +static void ContestAICmd_unk_81(void); +static void ContestAICmd_check_for_exciting_move(void); +static void ContestAICmd_unk_83(void); +static void ContestAICmd_unk_84(void); +static void ContestAICmd_unk_85(void); +static void ContestAICmd_unk_86(void); +static void ContestAICmd_unk_87(void); + +typedef void (* ContestAICmdFunc)(void); + +static const ContestAICmdFunc sContestAICmdTable[] = +{ + ContestAICmd_unk_00, // 0x00 + ContestAICmd_get_turn, // 0x01 + ContestAICmd_unk_02, // 0x02 + ContestAICmd_unk_03, // 0x03 + ContestAICmd_unk_04, // 0x04 + ContestAICmd_unk_05, // 0x05 + ContestAICmd_get_excitement, // 0x06 + ContestAICmd_unk_07, // 0x07 + ContestAICmd_unk_08, // 0x08 + ContestAICmd_unk_09, // 0x09 + ContestAICmd_unk_0A, // 0x0A + ContestAICmd_get_user_order, // 0x0B + ContestAICmd_unk_0C, // 0x0C + ContestAICmd_unk_0D, // 0x0D + ContestAICmd_unk_0E, // 0x0E + ContestAICmd_unk_0F, // 0x0F + ContestAICmd_get_user_condition_maybe, // 0x10 + ContestAICmd_unk_11, // 0x11 + ContestAICmd_unk_12, // 0x12 + ContestAICmd_unk_13, // 0x13 + ContestAICmd_unk_14, // 0x14 + ContestAICmd_unk_15, // 0x15 + ContestAICmd_unk_16, // 0x16 + ContestAICmd_unk_17, // 0x17 + ContestAICmd_unk_18, // 0x18 + ContestAICmd_unk_19, // 0x19 + ContestAICmd_unk_1A, // 0x1A + ContestAICmd_unk_1B, // 0x1B + ContestAICmd_unk_1C, // 0x1C + ContestAICmd_unk_1D, // 0x1D + ContestAICmd_unk_1E, // 0x1E + ContestAICmd_get_contest_type, // 0x1F + ContestAICmd_unk_20, // 0x20 + ContestAICmd_unk_21, // 0x21 + ContestAICmd_get_move_excitement, // 0x22 + ContestAICmd_unk_23, // 0x23 + ContestAICmd_unk_24, // 0x24 + ContestAICmd_unk_25, // 0x25 + ContestAICmd_unk_26, // 0x26 + ContestAICmd_get_move_effect, // 0x27 + ContestAICmd_unk_28, // 0x28 + ContestAICmd_unk_29, // 0x29 + ContestAICmd_get_move_effect_type, // 0x2A + ContestAICmd_unk_2B, // 0x2B + ContestAICmd_unk_2C, // 0x2C + ContestAICmd_check_move_has_highest_appeal, // 0x2D + ContestAICmd_unk_2E, // 0x2E + ContestAICmd_unk_2F, // 0x2F + ContestAICmd_unk_30, // 0x30 + ContestAICmd_unk_31, // 0x31 + ContestAICmd_unk_32, // 0x32 + ContestAICmd_unk_33, // 0x33 + ContestAICmd_unk_34, // 0x34 + ContestAICmd_unk_35, // 0x35 + ContestAICmd_unk_36, // 0x36 + ContestAICmd_unk_37, // 0x37 + ContestAICmd_unk_38, // 0x38 + ContestAICmd_unk_39, // 0x39 + ContestAICmd_unk_3A, // 0x3A + ContestAICmd_get_move_used_count, // 0x3B + ContestAICmd_unk_3C, // 0x3C + ContestAICmd_unk_3D, // 0x3D + ContestAICmd_unk_3E, // 0x3E + ContestAICmd_unk_3F, // 0x3F + ContestAICmd_check_combo_starter, // 0x40 + ContestAICmd_unk_41, // 0x41 + ContestAICmd_unk_42, // 0x42 + ContestAICmd_check_combo_finisher, // 0x43 + ContestAICmd_unk_44, // 0x44 + ContestAICmd_unk_45, // 0x45 + ContestAICmd_check_would_finish_combo, // 0x46 + ContestAICmd_unk_47, // 0x47 + ContestAICmd_unk_48, // 0x48 + ContestAICmd_get_condition, // 0x49 + ContestAICmd_unk_4A, // 0x4A + ContestAICmd_unk_4B, // 0x4B + ContestAICmd_unk_4C, // 0x4C + ContestAICmd_unk_4D, // 0x4D + ContestAICmd_get_used_combo_starter, // 0x4E + ContestAICmd_unk_4F, // 0x4F + ContestAICmd_unk_50, // 0x50 + ContestAICmd_unk_51, // 0x51 + ContestAICmd_unk_52, // 0x52 + ContestAICmd_check_can_participate, // 0x53 + ContestAICmd_unk_54, // 0x54 + ContestAICmd_unk_55, // 0x55 + ContestAICmd_get_val_812A188, // 0x56 + ContestAICmd_unk_57, // 0x57 + ContestAICmd_unk_58, // 0x58 + ContestAICmd_unk_59, // 0x59 + ContestAICmd_unk_5A, // 0x5A + ContestAICmd_unk_5B, // 0x5B + ContestAICmd_unk_5C, // 0x5C + ContestAICmd_unk_5D, // 0x5D + ContestAICmd_unk_5E, // 0x5E + ContestAICmd_unk_5F, // 0x5F + ContestAICmd_unk_60, // 0x60 + ContestAICmd_unk_61, // 0x61 + ContestAICmd_unk_62, // 0x62 + ContestAICmd_unk_63, // 0x63 + ContestAICmd_unk_64, // 0x64 + ContestAICmd_unk_65, // 0x65 + ContestAICmd_unk_66, // 0x66 + ContestAICmd_unk_67, // 0x67 + ContestAICmd_unk_68, // 0x68 + ContestAICmd_unk_69, // 0x69 + ContestAICmd_unk_6A, // 0x6A + ContestAICmd_unk_6B, // 0x6B + ContestAICmd_unk_6C, // 0x6C + ContestAICmd_unk_6D, // 0x6D + ContestAICmd_unk_6E, // 0x6E + ContestAICmd_unk_6F, // 0x6F + ContestAICmd_unk_70, // 0x70 + ContestAICmd_unk_71, // 0x71 + ContestAICmd_unk_72, // 0x72 + ContestAICmd_unk_73, // 0x73 + ContestAICmd_unk_74, // 0x74 + ContestAICmd_unk_75, // 0x75 + ContestAICmd_unk_76, // 0x76 + ContestAICmd_unk_77, // 0x77 + ContestAICmd_unk_78, // 0x78 + ContestAICmd_unk_79, // 0x79 + ContestAICmd_unk_7A, // 0x7A + ContestAICmd_unk_7B, // 0x7B + ContestAICmd_unk_7C, // 0x7C + ContestAICmd_unk_7D, // 0x7D + ContestAICmd_unk_7E, // 0x7E + ContestAICmd_unk_7F, // 0x7F + ContestAICmd_unk_80, // 0x80 + ContestAICmd_unk_81, // 0x81 + ContestAICmd_check_for_exciting_move, // 0x82 + ContestAICmd_unk_83, // 0x83 + ContestAICmd_unk_84, // 0x84 + ContestAICmd_unk_85, // 0x85 + ContestAICmd_unk_86, // 0x86 + ContestAICmd_unk_87, // 0x87 +}; + +static void ContestAI_DoAIProcessing(void); +static bool8 sub_8128A7C(u8); +static void sub_812ACA4(u8 *); +static u8 sub_812ACC8(void); + +void ContestAI_ResetAI(u8 var) +{ + int i; + memset(eContestAI, 0, sizeof(struct ContestAIInfo)); + + for(i = 0; i < 4; i++) + eContestAI->unk5[i] = 100; + + eContestAI->unk41 = var; + eContestAI->unk40 = 0; + eContestAI->flags = gContestMons[eContestAI->unk41].flags; +} + +u8 ContestAI_GetActionToUse(void) +{ + while(eContestAI->flags != 0) + { + if(eContestAI->flags & 1) + { + eContestAI->aiState = 0; + ContestAI_DoAIProcessing(); + } + eContestAI->flags >>= 1; + eContestAI->unk10++; + eContestAI->unk4 = 0; + } + + while (1) + { + u8 rval = Random() & 3; + u8 r2 = eContestAI->unk5[rval]; + int i; + for (i = 0; i < 4; i++) + { + if (r2 < eContestAI->unk5[i]) + break; + } + if (i == 4) + return rval; + } +} + +static void ContestAI_DoAIProcessing(void) +{ + while(eContestAI->aiState != CONTESTAI_FINISHED) + { + switch(eContestAI->aiState) + { + case CONTESTAI_DO_NOT_PROCESS: + break; + case CONTESTAI_SETTING_UP: + gAIScriptPtr = gContestAIs[eContestAI->unk10]; + + if(gContestMons[eContestAI->unk41].moves[eContestAI->unk4] == 0) + eContestAI->unk2 = 0; // don't process a move that doesn't exist. + else + eContestAI->unk2 = gContestMons[eContestAI->unk41].moves[eContestAI->unk4]; + eContestAI->aiState++; + break; + case CONTESTAI_PROCESSING: + if(eContestAI->unk2 != 0) + sContestAICmdTable[*gAIScriptPtr](); // run the command. + else + { + eContestAI->unk5[eContestAI->unk4] = 0; // don't consider a move that doesn't exist. + eContestAI->aiAction |= 1; + } + if(eContestAI->aiAction & 1) + { + eContestAI->unk4++; + if(eContestAI->unk4 < 4) + eContestAI->aiState = 0; + else + eContestAI->aiState++; + eContestAI->aiAction &= 0xFE; // TODO: Define action flags + } + break; + } + } +} + +static u8 sub_8128A7C(u8 var) +{ + int i; + + for(i = 0; i < 4; i++) + if(shared192D0.unk0[i] == var) + break; + + return i; +} + +static void ContestAICmd_unk_00(void) +{ + s16 score = eContestAI->unk5[eContestAI->unk4] + (s8)gAIScriptPtr[1]; + + if (score > 255) + score = 255; + else if (score < 0) + score = 0; + + eContestAI->unk5[eContestAI->unk4] = score; + + gAIScriptPtr += 2; +} + +static void ContestAICmd_get_turn(void) +{ + eContestAI->scriptResult = sContest.turnNumber; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_02(void) +{ + ContestAICmd_get_turn(); + + if(eContestAI->scriptResult < gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_03(void) +{ + ContestAICmd_get_turn(); + + if(eContestAI->scriptResult > gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_04(void) +{ + ContestAICmd_get_turn(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_05(void) +{ + ContestAICmd_get_turn(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_get_excitement(void) +{ + eContestAI->scriptResult = sContest.applauseLevel; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_07(void) +{ + ContestAICmd_get_excitement(); + + if(eContestAI->scriptResult < gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_08(void) +{ + ContestAICmd_get_excitement(); + + if(eContestAI->scriptResult > gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_09(void) +{ + ContestAICmd_get_excitement(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_0A(void) +{ + ContestAICmd_get_excitement(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_get_user_order(void) +{ + eContestAI->scriptResult = shared192D0.unk0[eContestAI->unk41]; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_0C(void) +{ + ContestAICmd_get_user_order(); + + if(eContestAI->scriptResult < gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_0D(void) +{ + ContestAICmd_get_user_order(); + + if(eContestAI->scriptResult > gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_0E(void) +{ + ContestAICmd_get_user_order(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_0F(void) +{ + ContestAICmd_get_user_order(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_get_user_condition_maybe(void) +{ + eContestAI->scriptResult = sContestantStatus[eContestAI->unk41].unkD / 10; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_11(void) +{ + ContestAICmd_get_user_condition_maybe(); + + if(eContestAI->scriptResult < gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_12(void) +{ + ContestAICmd_get_user_condition_maybe(); + + if(eContestAI->scriptResult > gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_13(void) +{ + ContestAICmd_get_user_condition_maybe(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_14(void) +{ + ContestAICmd_get_user_condition_maybe(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_15(void) +{ + eContestAI->scriptResult = sContestantStatus[eContestAI->unk41].unk4; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_16(void) +{ + ContestAICmd_unk_15(); + + if(eContestAI->scriptResult < (s16)T1_READ_16(gAIScriptPtr + 0)) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void ContestAICmd_unk_17(void) +{ + ContestAICmd_unk_15(); + + if(eContestAI->scriptResult > (s16)T1_READ_16(gAIScriptPtr + 0)) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void ContestAICmd_unk_18(void) +{ + ContestAICmd_unk_15(); + + if(eContestAI->scriptResult == (s16)T1_READ_16(gAIScriptPtr + 0)) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void ContestAICmd_unk_19(void) +{ + ContestAICmd_unk_15(); + + if(eContestAI->scriptResult != (s16)T1_READ_16(gAIScriptPtr + 0)) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void ContestAICmd_unk_1A(void) +{ + eContestAI->scriptResult = gUnknown_02038670[eContestAI->unk41]; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_1B(void) +{ + ContestAICmd_unk_1A(); + + if(eContestAI->scriptResult < (s16)T1_READ_16(gAIScriptPtr + 0)) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void ContestAICmd_unk_1C(void) +{ + ContestAICmd_unk_1A(); + + if(eContestAI->scriptResult > (s16)T1_READ_16(gAIScriptPtr + 0)) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void ContestAICmd_unk_1D(void) +{ + ContestAICmd_unk_1A(); + + if(eContestAI->scriptResult == (s16)T1_READ_16(gAIScriptPtr + 0)) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void ContestAICmd_unk_1E(void) +{ + ContestAICmd_unk_1A(); + + if(eContestAI->scriptResult != (s16)T1_READ_16(gAIScriptPtr + 0)) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void ContestAICmd_get_contest_type(void) +{ + eContestAI->scriptResult = gSpecialVar_ContestCategory; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_20(void) +{ + ContestAICmd_get_contest_type(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_21(void) +{ + ContestAICmd_get_contest_type(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_get_move_excitement(void) +{ + eContestAI->scriptResult = Contest_GetMoveExcitement(gContestMons[eContestAI->unk41].moves[eContestAI->unk4]); + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_23(void) +{ + ContestAICmd_get_move_excitement(); + + if(eContestAI->scriptResult < (s8)gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_24(void) +{ + ContestAICmd_get_move_excitement(); + + if(eContestAI->scriptResult > (s8)gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_25(void) +{ + ContestAICmd_get_move_excitement(); + + if(eContestAI->scriptResult == (s8)gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_26(void) +{ + ContestAICmd_get_move_excitement(); + + if(eContestAI->scriptResult != (s8)gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_get_move_effect(void) +{ + u16 move = gContestMons[eContestAI->unk41].moves[eContestAI->unk4]; + + eContestAI->scriptResult = gContestMoves[move].effect; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_28(void) +{ + ContestAICmd_get_move_effect(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_29(void) +{ + ContestAICmd_get_move_effect(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_get_move_effect_type(void) +{ + u16 move = gContestMons[eContestAI->unk41].moves[eContestAI->unk4]; + + eContestAI->scriptResult = gContestEffects[gContestMoves[move].effect].effectType; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_2B(void) +{ + ContestAICmd_get_move_effect_type(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_2C(void) +{ + ContestAICmd_get_move_effect_type(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_check_move_has_highest_appeal(void) +{ + int i; + u16 move = gContestMons[eContestAI->unk41].moves[eContestAI->unk4]; + u8 appeal = gContestEffects[gContestMoves[move].effect].appeal; + + for(i = 0; i < 4; i++) + { + u16 newMove = gContestMons[eContestAI->unk41].moves[i]; + if(newMove != 0 && appeal < gContestEffects[gContestMoves[newMove].effect].appeal) + break; + } + + if(i == 4) + eContestAI->scriptResult = TRUE; + else + eContestAI->scriptResult = FALSE; + + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_2E(void) +{ + ContestAICmd_check_move_has_highest_appeal(); + + if(eContestAI->scriptResult != FALSE) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_2F(void) +{ + int i; + u16 move = gContestMons[eContestAI->unk41].moves[eContestAI->unk4]; + u8 jam = gContestEffects[gContestMoves[move].effect].jam; + + for(i = 0; i < 4; i++) + { + u16 newMove = gContestMons[eContestAI->unk41].moves[i]; + if(newMove != 0 && jam < gContestEffects[gContestMoves[newMove].effect].jam) + break; + } + + if(i == 4) + eContestAI->scriptResult = TRUE; + else + eContestAI->scriptResult = FALSE; + + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_30(void) +{ + ContestAICmd_unk_2F(); + + if(eContestAI->scriptResult != FALSE) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_31(void) +{ + u16 move = gContestMons[eContestAI->unk41].moves[eContestAI->unk4]; + + eContestAI->scriptResult = gContestEffects[gContestMoves[move].effect].appeal / 10; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_32(void) +{ + ContestAICmd_unk_31(); + + if(eContestAI->scriptResult < gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_33(void) +{ + ContestAICmd_unk_31(); + + if(eContestAI->scriptResult > gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_34(void) +{ + ContestAICmd_unk_31(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_35(void) +{ + ContestAICmd_unk_31(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_36(void) +{ + u16 move = gContestMons[eContestAI->unk41].moves[eContestAI->unk4]; + + eContestAI->scriptResult = gContestEffects[gContestMoves[move].effect].jam / 10; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_37(void) +{ + ContestAICmd_unk_36(); + + if(eContestAI->scriptResult < gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_38(void) +{ + ContestAICmd_unk_36(); + + if(eContestAI->scriptResult > gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_39(void) +{ + ContestAICmd_unk_36(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_3A(void) +{ + ContestAICmd_unk_36(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_get_move_used_count(void) +{ + s16 result; + u16 move = gContestMons[eContestAI->unk41].moves[eContestAI->unk4]; + + if(move != sContestantStatus[eContestAI->unk41].prevMove) + result = 0; // move is unique and not reused. + else + result = sContestantStatus[eContestAI->unk41].moveRepeatCount + 1; + + eContestAI->scriptResult = result; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_3C(void) +{ + ContestAICmd_get_move_used_count(); + + if(eContestAI->scriptResult < gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_3D(void) +{ + ContestAICmd_get_move_used_count(); + + if(eContestAI->scriptResult > gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_3E(void) +{ + ContestAICmd_get_move_used_count(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_3F(void) +{ + ContestAICmd_get_move_used_count(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_check_combo_starter(void) +{ + u8 result = 0; + int i; + u16 move = gContestMons[eContestAI->unk41].moves[eContestAI->unk4]; + + for(i = 0; i < 4; i++) + { + if (gContestMons[eContestAI->unk41].moves[i]) + { + result = AreMovesContestCombo(move, gContestMons[eContestAI->unk41].moves[i]); + if (result) + { + result = 1; + break; + } + } + } + + if (result) + result = 1; + + eContestAI->scriptResult = result; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_41(void) +{ + ContestAICmd_check_combo_starter(); + + if(eContestAI->scriptResult != 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_42(void) +{ + ContestAICmd_check_combo_starter(); + + if(eContestAI->scriptResult == 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_check_combo_finisher(void) +{ + u8 result = 0; + int i; + u16 move = gContestMons[eContestAI->unk41].moves[eContestAI->unk4]; + + for(i = 0; i < 4; i++) + { + if (gContestMons[eContestAI->unk41].moves[i]) + { + result = AreMovesContestCombo(gContestMons[eContestAI->unk41].moves[i], move); + if (result) + { + result = 1; + break; + } + } + } + + if (result) + result = 1; + + eContestAI->scriptResult = result; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_44(void) +{ + ContestAICmd_check_combo_finisher(); + + if(eContestAI->scriptResult != 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_45(void) +{ + ContestAICmd_check_combo_finisher(); + + if(eContestAI->scriptResult == 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_check_would_finish_combo(void) +{ + u8 result = 0; + u16 move = gContestMons[eContestAI->unk41].moves[eContestAI->unk4]; + + if(sContestantStatus[eContestAI->unk41].prevMove) + result = AreMovesContestCombo(sContestantStatus[eContestAI->unk41].prevMove, move); + + if(result) + result = 1; + + eContestAI->scriptResult = result; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_47(void) +{ + ContestAICmd_check_would_finish_combo(); + + if(eContestAI->scriptResult != 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_48(void) +{ + ContestAICmd_check_would_finish_combo(); + + if(eContestAI->scriptResult == 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_get_condition(void) +{ + int var = sub_8128A7C(gAIScriptPtr[1]); + + eContestAI->scriptResult = sContestantStatus[var].unkD / 10; + gAIScriptPtr += 2; +} + +static void ContestAICmd_unk_4A(void) +{ + ContestAICmd_get_condition(); + + if(eContestAI->scriptResult < gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_4B(void) +{ + ContestAICmd_get_condition(); + + if(eContestAI->scriptResult > gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_4C(void) +{ + ContestAICmd_get_condition(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_4D(void) +{ + ContestAICmd_get_condition(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_get_used_combo_starter(void) +{ + u16 result = 0; + u8 var = sub_8128A7C(gAIScriptPtr[1]); + + if(sub_80B214C(var)) + result = gContestMoves[sContestantStatus[var].prevMove].comboStarterId ? 1 : 0; + + eContestAI->scriptResult = result; + gAIScriptPtr += 2; +} + +static void ContestAICmd_unk_4F(void) +{ + ContestAICmd_get_used_combo_starter(); + + if(eContestAI->scriptResult < gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_50(void) +{ + ContestAICmd_get_used_combo_starter(); + + if(eContestAI->scriptResult > gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_51(void) +{ + ContestAICmd_get_used_combo_starter(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_52(void) +{ + ContestAICmd_get_used_combo_starter(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_check_can_participate(void) +{ + if(Contest_IsMonsTurnDisabled(sub_8128A7C(gAIScriptPtr[1]))) + eContestAI->scriptResult = FALSE; + else + eContestAI->scriptResult = TRUE; + + gAIScriptPtr += 2; +} + +static void ContestAICmd_unk_54(void) +{ + ContestAICmd_check_can_participate(); + + if(eContestAI->scriptResult != 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_55(void) +{ + ContestAICmd_check_can_participate(); + + if(eContestAI->scriptResult == 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_get_val_812A188(void) +{ + u8 var = sub_8128A7C(gAIScriptPtr[1]); + + eContestAI->scriptResult = sContestantStatus[var].unk15_3; + gAIScriptPtr += 2; +} + +static void ContestAICmd_unk_57(void) +{ + ContestAICmd_get_val_812A188(); + + if(eContestAI->scriptResult != 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_58(void) +{ + ContestAICmd_get_val_812A188(); + + if(eContestAI->scriptResult == 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_59(void) +{ + u8 var = sub_8128A7C(gAIScriptPtr[1]); + + eContestAI->scriptResult = sContestantStatus[var].unk4 - sContestantStatus[eContestAI->unk41].unk4; + gAIScriptPtr += 2; +} + +static void ContestAICmd_unk_5A(void) +{ + ContestAICmd_unk_59(); + + if(eContestAI->scriptResult < 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_5B(void) +{ + ContestAICmd_unk_59(); + + if(eContestAI->scriptResult > 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_5C(void) +{ + ContestAICmd_unk_59(); + + if(eContestAI->scriptResult == 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_5D(void) +{ + ContestAICmd_unk_59(); + + if(eContestAI->scriptResult != 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_5E(void) +{ + u8 var = sub_8128A7C(gAIScriptPtr[1]); + + eContestAI->scriptResult = gUnknown_02038670[var] - gUnknown_02038670[eContestAI->unk41]; + gAIScriptPtr += 2; +} + +static void ContestAICmd_unk_5F(void) +{ + ContestAICmd_unk_5E(); + + if(eContestAI->scriptResult < 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_60(void) +{ + ContestAICmd_unk_5E(); + + if(eContestAI->scriptResult > 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_61(void) +{ + ContestAICmd_unk_5E(); + + if(eContestAI->scriptResult == 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_62(void) +{ + ContestAICmd_unk_5E(); + + if(eContestAI->scriptResult != 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_63(void) +{ + u8 var = sub_8128A7C(gAIScriptPtr[1]); + u8 var2 = gAIScriptPtr[2]; + u16 move = sContest.unk19220[var2][var]; + + eContestAI->scriptResult = gContestMoves[move].effect; + gAIScriptPtr += 3; +} + +static void ContestAICmd_unk_64(void) +{ + ContestAICmd_unk_63(); + + if(eContestAI->scriptResult < gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_65(void) +{ + ContestAICmd_unk_63(); + + if(eContestAI->scriptResult > gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_66(void) +{ + ContestAICmd_unk_63(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_67(void) +{ + ContestAICmd_unk_63(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_68(void) +{ + u8 var = sub_8128A7C(gAIScriptPtr[1]); + u8 var2 = gAIScriptPtr[2]; + s8 result = sContest.unk19248[var2][var]; + + eContestAI->scriptResult = result; + gAIScriptPtr += 3; +} + +static void ContestAICmd_unk_69(void) +{ + ContestAICmd_unk_68(); + + if(eContestAI->scriptResult < gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_6A(void) +{ + ContestAICmd_unk_68(); + + if(eContestAI->scriptResult > gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_6B(void) +{ + ContestAICmd_unk_68(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_6C(void) +{ + ContestAICmd_unk_68(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_6D(void) +{ + u8 var = sub_8128A7C(gAIScriptPtr[1]); + u8 var2 = gAIScriptPtr[2]; + u16 move = sContest.unk19220[var2][var]; + + eContestAI->scriptResult = gContestEffects[gContestMoves[move].effect].effectType; + gAIScriptPtr += 3; +} + +static void ContestAICmd_unk_6E(void) +{ + ContestAICmd_unk_6D(); + + if(eContestAI->scriptResult == gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_6F(void) +{ + ContestAICmd_unk_6D(); + + if(eContestAI->scriptResult != gAIScriptPtr[0]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); + else + gAIScriptPtr += 5; +} + +static void ContestAICmd_unk_70(void) +{ + eContestAI->scriptArr[gAIScriptPtr[1]] = eContestAI->scriptResult; + gAIScriptPtr += 2; +} + +static void ContestAICmd_unk_71(void) +{ + eContestAI->scriptArr[gAIScriptPtr[1]] = T1_READ_16(gAIScriptPtr + 2); + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_72(void) +{ + // wtf? shouldn't T1_READ_16 work here? why the signed 8 load by gAIScriptPtr[2]? + eContestAI->scriptArr[gAIScriptPtr[1]] += ((s8)gAIScriptPtr[2] | gAIScriptPtr[3] << 8); + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_73(void) +{ + eContestAI->scriptArr[gAIScriptPtr[1]] += eContestAI->scriptArr[gAIScriptPtr[2]]; + gAIScriptPtr += 3; +} + +static void ContestAICmd_unk_74(void) +{ + eContestAI->scriptArr[gAIScriptPtr[1]] += eContestAI->scriptArr[gAIScriptPtr[2]]; + gAIScriptPtr += 3; +} + +static void ContestAICmd_unk_75(void) +{ + if(eContestAI->scriptArr[gAIScriptPtr[1]] < T1_READ_16(gAIScriptPtr + 2)) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + else + gAIScriptPtr += 8; +} + +static void ContestAICmd_unk_76(void) +{ + if(eContestAI->scriptArr[gAIScriptPtr[1]] > T1_READ_16(gAIScriptPtr + 2)) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + else + gAIScriptPtr += 8; +} + +static void ContestAICmd_unk_77(void) +{ + if(eContestAI->scriptArr[gAIScriptPtr[1]] == T1_READ_16(gAIScriptPtr + 2)) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + else + gAIScriptPtr += 8; +} + +static void ContestAICmd_unk_78(void) +{ + if(eContestAI->scriptArr[gAIScriptPtr[1]] != T1_READ_16(gAIScriptPtr + 2)) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4); + else + gAIScriptPtr += 8; +} + +static void ContestAICmd_unk_79(void) +{ + if(eContestAI->scriptArr[gAIScriptPtr[1]] < (eContestAI->scriptArr[gAIScriptPtr[2]])) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +static void ContestAICmd_unk_7A(void) +{ + if(eContestAI->scriptArr[gAIScriptPtr[1]] > (eContestAI->scriptArr[gAIScriptPtr[2]])) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +static void ContestAICmd_unk_7B(void) +{ + if(eContestAI->scriptArr[gAIScriptPtr[1]] == (eContestAI->scriptArr[gAIScriptPtr[2]])) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +static void ContestAICmd_unk_7C(void) +{ + if(eContestAI->scriptArr[gAIScriptPtr[1]] != (eContestAI->scriptArr[gAIScriptPtr[2]])) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3); + else + gAIScriptPtr += 7; +} + +static void ContestAICmd_unk_7D(void) +{ + if((Random() & 0xFF) < eContestAI->scriptArr[gAIScriptPtr[1]]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +static void ContestAICmd_unk_7E(void) +{ + if((Random() & 0xFF) > eContestAI->scriptArr[gAIScriptPtr[1]]) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); + else + gAIScriptPtr += 6; +} + +// jump +static void ContestAICmd_unk_7F(void) +{ + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); +} + +static void ContestAICmd_unk_80(void) +{ + sub_812ACA4(gAIScriptPtr + 5); + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); +} + +static void ContestAICmd_unk_81(void) +{ + if(!sub_812ACC8()) + eContestAI->aiAction |= 1; +} + +// push stack? +static void sub_812ACA4(u8 *ptr) +{ + u8 unk40 = eContestAI->unk40++; + eContestAI->stack[unk40] = (u32)ptr; +} + +// pop stack? +static bool8 sub_812ACC8(void) +{ + if(eContestAI->unk40 != 0) + { + --eContestAI->unk40; + gAIScriptPtr = (u8 *)eContestAI->stack[eContestAI->unk40]; + return TRUE; + } + else + return FALSE; +} + +static void ContestAICmd_check_for_exciting_move(void) +{ + int result = 0; + int i; + + for(i = 0; i < 4; i++) + { + if(gContestMons[eContestAI->unk41].moves[i]) + { + // why is it using gSharedMem + 0x19325? that does not exist... + if(Contest_GetMoveExcitement(gContestMons[eContestAI->unk41].moves[i]) == 1) + { + result = 1; + break; + } + } + } + + eContestAI->scriptResult = result; + gAIScriptPtr += 1; +} + +static void ContestAICmd_unk_83(void) +{ + ContestAICmd_check_for_exciting_move(); + + if(eContestAI->scriptResult != 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_84(void) +{ + ContestAICmd_check_for_exciting_move(); + + if(eContestAI->scriptResult == 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_85(void) +{ + int result = 0; + int i; + u16 arg = T1_READ_16(gAIScriptPtr + 1); + + for(i = 0; i < 4; i++) + { + u16 move = gContestMons[eContestAI->unk41].moves[i]; + if(move == arg) + { + result = 1; + break; + } + } + + eContestAI->scriptResult = result; + gAIScriptPtr += 3; +} + +static void ContestAICmd_unk_86(void) +{ + ContestAICmd_unk_85(); + + if(eContestAI->scriptResult != 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} + +static void ContestAICmd_unk_87(void) +{ + ContestAICmd_unk_85(); + + if(eContestAI->scriptResult == 0) + gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 0); + else + gAIScriptPtr += 4; +} diff --git a/src/data/battle_strings_de.h b/src/data/battle_strings_de.h index a3d51f2a5..a19c0fc6c 100755..100644 --- a/src/data/battle_strings_de.h +++ b/src/data/battle_strings_de.h @@ -1218,7 +1218,7 @@ const u8 *const gBattleStringsTable[] = }; // below are lists of battle string enums and NOT pointers to the strings. -const u16 gMissStrings[] = +const u16 gMissStringIds[] = { BATTLE_TEXT_AttackMissed, BATTLE_TEXT_ProtectedItself, diff --git a/src/data/battle_strings_en.h b/src/data/battle_strings_en.h index f29e48410..67eb70ee1 100755..100644 --- a/src/data/battle_strings_en.h +++ b/src/data/battle_strings_en.h @@ -1218,7 +1218,7 @@ const u8 *const gBattleStringsTable[] = }; // below are lists of battle string enums and NOT pointers to the strings. -const u16 gMissStrings[] = +const u16 gMissStringIds[] = { BATTLE_TEXT_AttackMissed, BATTLE_TEXT_ProtectedItself, diff --git a/src/data/credits_de.h b/src/data/credits_de.h index 570c0d4c5..570c0d4c5 100755..100644 --- a/src/data/credits_de.h +++ b/src/data/credits_de.h diff --git a/src/data/credits_en.h b/src/data/credits_en.h index 8ce0bad03..8ce0bad03 100755..100644 --- a/src/data/credits_en.h +++ b/src/data/credits_en.h diff --git a/src/data/items_de.h b/src/data/items_de.h index 0453a95d0..92304e8b0 100644 --- a/src/data/items_de.h +++ b/src/data/items_de.h @@ -4626,7 +4626,7 @@ const struct Item gItems[] = }, { .name = _("TM01"), - .itemId = ITEM_TM01, + .itemId = ITEM_TM01_FOCUS_PUNCH, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4642,7 +4642,7 @@ const struct Item gItems[] = }, { .name = _("TM02"), - .itemId = ITEM_TM02, + .itemId = ITEM_TM02_DRAGON_CLAW, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4658,7 +4658,7 @@ const struct Item gItems[] = }, { .name = _("TM03"), - .itemId = ITEM_TM03, + .itemId = ITEM_TM03_WATER_PULSE, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4674,7 +4674,7 @@ const struct Item gItems[] = }, { .name = _("TM04"), - .itemId = ITEM_TM04, + .itemId = ITEM_TM04_CALM_MIND, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4690,7 +4690,7 @@ const struct Item gItems[] = }, { .name = _("TM05"), - .itemId = ITEM_TM05, + .itemId = ITEM_TM05_ROAR, .price = 1000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4706,7 +4706,7 @@ const struct Item gItems[] = }, { .name = _("TM06"), - .itemId = ITEM_TM06, + .itemId = ITEM_TM06_TOXIC, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4722,7 +4722,7 @@ const struct Item gItems[] = }, { .name = _("TM07"), - .itemId = ITEM_TM07, + .itemId = ITEM_TM07_HAIL, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4738,7 +4738,7 @@ const struct Item gItems[] = }, { .name = _("TM08"), - .itemId = ITEM_TM08, + .itemId = ITEM_TM08_BULK_UP, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4754,7 +4754,7 @@ const struct Item gItems[] = }, { .name = _("TM09"), - .itemId = ITEM_TM09, + .itemId = ITEM_TM09_BULLET_SEED, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4770,7 +4770,7 @@ const struct Item gItems[] = }, { .name = _("TM10"), - .itemId = ITEM_TM10, + .itemId = ITEM_TM10_HIDDEN_POWER, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4786,7 +4786,7 @@ const struct Item gItems[] = }, { .name = _("TM11"), - .itemId = ITEM_TM11, + .itemId = ITEM_TM11_SUNNY_DAY, .price = 2000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4802,7 +4802,7 @@ const struct Item gItems[] = }, { .name = _("TM12"), - .itemId = ITEM_TM12, + .itemId = ITEM_TM12_TAUNT, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4818,7 +4818,7 @@ const struct Item gItems[] = }, { .name = _("TM13"), - .itemId = ITEM_TM13, + .itemId = ITEM_TM13_ICE_BEAM, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4834,7 +4834,7 @@ const struct Item gItems[] = }, { .name = _("TM14"), - .itemId = ITEM_TM14, + .itemId = ITEM_TM14_BLIZZARD, .price = 5500, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4850,7 +4850,7 @@ const struct Item gItems[] = }, { .name = _("TM15"), - .itemId = ITEM_TM15, + .itemId = ITEM_TM15_HYPER_BEAM, .price = 7500, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4866,7 +4866,7 @@ const struct Item gItems[] = }, { .name = _("TM16"), - .itemId = ITEM_TM16, + .itemId = ITEM_TM16_LIGHT_SCREEN, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4882,7 +4882,7 @@ const struct Item gItems[] = }, { .name = _("TM17"), - .itemId = ITEM_TM17, + .itemId = ITEM_TM17_PROTECT, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4898,7 +4898,7 @@ const struct Item gItems[] = }, { .name = _("TM18"), - .itemId = ITEM_TM18, + .itemId = ITEM_TM18_RAIN_DANCE, .price = 2000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4914,7 +4914,7 @@ const struct Item gItems[] = }, { .name = _("TM19"), - .itemId = ITEM_TM19, + .itemId = ITEM_TM19_GIGA_DRAIN, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4930,7 +4930,7 @@ const struct Item gItems[] = }, { .name = _("TM20"), - .itemId = ITEM_TM20, + .itemId = ITEM_TM20_SAFEGUARD, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4946,7 +4946,7 @@ const struct Item gItems[] = }, { .name = _("TM21"), - .itemId = ITEM_TM21, + .itemId = ITEM_TM21_FRUSTRATION, .price = 1000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4962,7 +4962,7 @@ const struct Item gItems[] = }, { .name = _("TM22"), - .itemId = ITEM_TM22, + .itemId = ITEM_TM22_SOLARBEAM, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4978,7 +4978,7 @@ const struct Item gItems[] = }, { .name = _("TM23"), - .itemId = ITEM_TM23, + .itemId = ITEM_TM23_IRON_TAIL, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4994,7 +4994,7 @@ const struct Item gItems[] = }, { .name = _("TM24"), - .itemId = ITEM_TM24, + .itemId = ITEM_TM24_THUNDERBOLT, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5010,7 +5010,7 @@ const struct Item gItems[] = }, { .name = _("TM25"), - .itemId = ITEM_TM25, + .itemId = ITEM_TM25_THUNDER, .price = 5500, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5026,7 +5026,7 @@ const struct Item gItems[] = }, { .name = _("TM26"), - .itemId = ITEM_TM26, + .itemId = ITEM_TM26_EARTHQUAKE, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5042,7 +5042,7 @@ const struct Item gItems[] = }, { .name = _("TM27"), - .itemId = ITEM_TM27, + .itemId = ITEM_TM27_RETURN, .price = 1000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5058,7 +5058,7 @@ const struct Item gItems[] = }, { .name = _("TM28"), - .itemId = ITEM_TM28, + .itemId = ITEM_TM28_DIG, .price = 2000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5074,7 +5074,7 @@ const struct Item gItems[] = }, { .name = _("TM29"), - .itemId = ITEM_TM29, + .itemId = ITEM_TM29_PSYCHIC, .price = 2000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5090,7 +5090,7 @@ const struct Item gItems[] = }, { .name = _("TM30"), - .itemId = ITEM_TM30, + .itemId = ITEM_TM30_SHADOW_BALL, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5106,7 +5106,7 @@ const struct Item gItems[] = }, { .name = _("TM31"), - .itemId = ITEM_TM31, + .itemId = ITEM_TM31_BRICK_BREAK, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5122,7 +5122,7 @@ const struct Item gItems[] = }, { .name = _("TM32"), - .itemId = ITEM_TM32, + .itemId = ITEM_TM32_DOUBLE_TEAM, .price = 2000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5138,7 +5138,7 @@ const struct Item gItems[] = }, { .name = _("TM33"), - .itemId = ITEM_TM33, + .itemId = ITEM_TM33_REFLECT, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5154,7 +5154,7 @@ const struct Item gItems[] = }, { .name = _("TM34"), - .itemId = ITEM_TM34, + .itemId = ITEM_TM34_SHOCK_WAVE, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5170,7 +5170,7 @@ const struct Item gItems[] = }, { .name = _("TM35"), - .itemId = ITEM_TM35, + .itemId = ITEM_TM35_FLAMETHROWER, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5186,7 +5186,7 @@ const struct Item gItems[] = }, { .name = _("TM36"), - .itemId = ITEM_TM36, + .itemId = ITEM_TM36_SLUDGE_BOMB, .price = 1000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5202,7 +5202,7 @@ const struct Item gItems[] = }, { .name = _("TM37"), - .itemId = ITEM_TM37, + .itemId = ITEM_TM37_SANDSTORM, .price = 2000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5218,7 +5218,7 @@ const struct Item gItems[] = }, { .name = _("TM38"), - .itemId = ITEM_TM38, + .itemId = ITEM_TM38_FIRE_BLAST, .price = 5500, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5234,7 +5234,7 @@ const struct Item gItems[] = }, { .name = _("TM39"), - .itemId = ITEM_TM39, + .itemId = ITEM_TM39_ROCK_TOMB, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5250,7 +5250,7 @@ const struct Item gItems[] = }, { .name = _("TM40"), - .itemId = ITEM_TM40, + .itemId = ITEM_TM40_AERIAL_ACE, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5266,7 +5266,7 @@ const struct Item gItems[] = }, { .name = _("TM41"), - .itemId = ITEM_TM41, + .itemId = ITEM_TM41_TORMENT, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5282,7 +5282,7 @@ const struct Item gItems[] = }, { .name = _("TM42"), - .itemId = ITEM_TM42, + .itemId = ITEM_TM42_FACADE, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5298,7 +5298,7 @@ const struct Item gItems[] = }, { .name = _("TM43"), - .itemId = ITEM_TM43, + .itemId = ITEM_TM43_SECRET_POWER, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5314,7 +5314,7 @@ const struct Item gItems[] = }, { .name = _("TM44"), - .itemId = ITEM_TM44, + .itemId = ITEM_TM44_REST, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5330,7 +5330,7 @@ const struct Item gItems[] = }, { .name = _("TM45"), - .itemId = ITEM_TM45, + .itemId = ITEM_TM45_ATTRACT, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5346,7 +5346,7 @@ const struct Item gItems[] = }, { .name = _("TM46"), - .itemId = ITEM_TM46, + .itemId = ITEM_TM46_THIEF, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5362,7 +5362,7 @@ const struct Item gItems[] = }, { .name = _("TM47"), - .itemId = ITEM_TM47, + .itemId = ITEM_TM47_STEEL_WING, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5378,7 +5378,7 @@ const struct Item gItems[] = }, { .name = _("TM48"), - .itemId = ITEM_TM48, + .itemId = ITEM_TM48_SKILL_SWAP, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5394,7 +5394,7 @@ const struct Item gItems[] = }, { .name = _("TM49"), - .itemId = ITEM_TM49, + .itemId = ITEM_TM49_SNATCH, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5410,7 +5410,7 @@ const struct Item gItems[] = }, { .name = _("TM50"), - .itemId = ITEM_TM50, + .itemId = ITEM_TM50_OVERHEAT, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5426,7 +5426,7 @@ const struct Item gItems[] = }, { .name = _("VM01"), - .itemId = ITEM_HM01, + .itemId = ITEM_HM01_CUT, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5442,7 +5442,7 @@ const struct Item gItems[] = }, { .name = _("VM02"), - .itemId = ITEM_HM02, + .itemId = ITEM_HM02_FLY, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5458,7 +5458,7 @@ const struct Item gItems[] = }, { .name = _("VM03"), - .itemId = ITEM_HM03, + .itemId = ITEM_HM03_SURF, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5474,7 +5474,7 @@ const struct Item gItems[] = }, { .name = _("VM04"), - .itemId = ITEM_HM04, + .itemId = ITEM_HM04_STRENGTH, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5490,7 +5490,7 @@ const struct Item gItems[] = }, { .name = _("VM05"), - .itemId = ITEM_HM05, + .itemId = ITEM_HM05_FLASH, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5506,7 +5506,7 @@ const struct Item gItems[] = }, { .name = _("VM06"), - .itemId = ITEM_HM06, + .itemId = ITEM_HM06_ROCK_SMASH, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5522,7 +5522,7 @@ const struct Item gItems[] = }, { .name = _("VM07"), - .itemId = ITEM_HM07, + .itemId = ITEM_HM07_WATERFALL, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5538,7 +5538,7 @@ const struct Item gItems[] = }, { .name = _("VM08"), - .itemId = ITEM_HM08, + .itemId = ITEM_HM08_DIVE, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, diff --git a/src/data/items_en.h b/src/data/items_en.h index a3e822370..3660f4590 100644 --- a/src/data/items_en.h +++ b/src/data/items_en.h @@ -4626,7 +4626,7 @@ const struct Item gItems[] = }, { .name = _("TM01"), - .itemId = ITEM_TM01, + .itemId = ITEM_TM01_FOCUS_PUNCH, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4642,7 +4642,7 @@ const struct Item gItems[] = }, { .name = _("TM02"), - .itemId = ITEM_TM02, + .itemId = ITEM_TM02_DRAGON_CLAW, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4658,7 +4658,7 @@ const struct Item gItems[] = }, { .name = _("TM03"), - .itemId = ITEM_TM03, + .itemId = ITEM_TM03_WATER_PULSE, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4674,7 +4674,7 @@ const struct Item gItems[] = }, { .name = _("TM04"), - .itemId = ITEM_TM04, + .itemId = ITEM_TM04_CALM_MIND, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4690,7 +4690,7 @@ const struct Item gItems[] = }, { .name = _("TM05"), - .itemId = ITEM_TM05, + .itemId = ITEM_TM05_ROAR, .price = 1000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4706,7 +4706,7 @@ const struct Item gItems[] = }, { .name = _("TM06"), - .itemId = ITEM_TM06, + .itemId = ITEM_TM06_TOXIC, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4722,7 +4722,7 @@ const struct Item gItems[] = }, { .name = _("TM07"), - .itemId = ITEM_TM07, + .itemId = ITEM_TM07_HAIL, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4738,7 +4738,7 @@ const struct Item gItems[] = }, { .name = _("TM08"), - .itemId = ITEM_TM08, + .itemId = ITEM_TM08_BULK_UP, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4754,7 +4754,7 @@ const struct Item gItems[] = }, { .name = _("TM09"), - .itemId = ITEM_TM09, + .itemId = ITEM_TM09_BULLET_SEED, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4770,7 +4770,7 @@ const struct Item gItems[] = }, { .name = _("TM10"), - .itemId = ITEM_TM10, + .itemId = ITEM_TM10_HIDDEN_POWER, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4786,7 +4786,7 @@ const struct Item gItems[] = }, { .name = _("TM11"), - .itemId = ITEM_TM11, + .itemId = ITEM_TM11_SUNNY_DAY, .price = 2000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4802,7 +4802,7 @@ const struct Item gItems[] = }, { .name = _("TM12"), - .itemId = ITEM_TM12, + .itemId = ITEM_TM12_TAUNT, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4818,7 +4818,7 @@ const struct Item gItems[] = }, { .name = _("TM13"), - .itemId = ITEM_TM13, + .itemId = ITEM_TM13_ICE_BEAM, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4834,7 +4834,7 @@ const struct Item gItems[] = }, { .name = _("TM14"), - .itemId = ITEM_TM14, + .itemId = ITEM_TM14_BLIZZARD, .price = 5500, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4850,7 +4850,7 @@ const struct Item gItems[] = }, { .name = _("TM15"), - .itemId = ITEM_TM15, + .itemId = ITEM_TM15_HYPER_BEAM, .price = 7500, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4866,7 +4866,7 @@ const struct Item gItems[] = }, { .name = _("TM16"), - .itemId = ITEM_TM16, + .itemId = ITEM_TM16_LIGHT_SCREEN, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4882,7 +4882,7 @@ const struct Item gItems[] = }, { .name = _("TM17"), - .itemId = ITEM_TM17, + .itemId = ITEM_TM17_PROTECT, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4898,7 +4898,7 @@ const struct Item gItems[] = }, { .name = _("TM18"), - .itemId = ITEM_TM18, + .itemId = ITEM_TM18_RAIN_DANCE, .price = 2000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4914,7 +4914,7 @@ const struct Item gItems[] = }, { .name = _("TM19"), - .itemId = ITEM_TM19, + .itemId = ITEM_TM19_GIGA_DRAIN, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4930,7 +4930,7 @@ const struct Item gItems[] = }, { .name = _("TM20"), - .itemId = ITEM_TM20, + .itemId = ITEM_TM20_SAFEGUARD, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4946,7 +4946,7 @@ const struct Item gItems[] = }, { .name = _("TM21"), - .itemId = ITEM_TM21, + .itemId = ITEM_TM21_FRUSTRATION, .price = 1000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4962,7 +4962,7 @@ const struct Item gItems[] = }, { .name = _("TM22"), - .itemId = ITEM_TM22, + .itemId = ITEM_TM22_SOLARBEAM, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4978,7 +4978,7 @@ const struct Item gItems[] = }, { .name = _("TM23"), - .itemId = ITEM_TM23, + .itemId = ITEM_TM23_IRON_TAIL, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -4994,7 +4994,7 @@ const struct Item gItems[] = }, { .name = _("TM24"), - .itemId = ITEM_TM24, + .itemId = ITEM_TM24_THUNDERBOLT, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5010,7 +5010,7 @@ const struct Item gItems[] = }, { .name = _("TM25"), - .itemId = ITEM_TM25, + .itemId = ITEM_TM25_THUNDER, .price = 5500, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5026,7 +5026,7 @@ const struct Item gItems[] = }, { .name = _("TM26"), - .itemId = ITEM_TM26, + .itemId = ITEM_TM26_EARTHQUAKE, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5042,7 +5042,7 @@ const struct Item gItems[] = }, { .name = _("TM27"), - .itemId = ITEM_TM27, + .itemId = ITEM_TM27_RETURN, .price = 1000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5058,7 +5058,7 @@ const struct Item gItems[] = }, { .name = _("TM28"), - .itemId = ITEM_TM28, + .itemId = ITEM_TM28_DIG, .price = 2000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5074,7 +5074,7 @@ const struct Item gItems[] = }, { .name = _("TM29"), - .itemId = ITEM_TM29, + .itemId = ITEM_TM29_PSYCHIC, .price = 2000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5090,7 +5090,7 @@ const struct Item gItems[] = }, { .name = _("TM30"), - .itemId = ITEM_TM30, + .itemId = ITEM_TM30_SHADOW_BALL, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5106,7 +5106,7 @@ const struct Item gItems[] = }, { .name = _("TM31"), - .itemId = ITEM_TM31, + .itemId = ITEM_TM31_BRICK_BREAK, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5122,7 +5122,7 @@ const struct Item gItems[] = }, { .name = _("TM32"), - .itemId = ITEM_TM32, + .itemId = ITEM_TM32_DOUBLE_TEAM, .price = 2000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5138,7 +5138,7 @@ const struct Item gItems[] = }, { .name = _("TM33"), - .itemId = ITEM_TM33, + .itemId = ITEM_TM33_REFLECT, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5154,7 +5154,7 @@ const struct Item gItems[] = }, { .name = _("TM34"), - .itemId = ITEM_TM34, + .itemId = ITEM_TM34_SHOCK_WAVE, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5170,7 +5170,7 @@ const struct Item gItems[] = }, { .name = _("TM35"), - .itemId = ITEM_TM35, + .itemId = ITEM_TM35_FLAMETHROWER, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5186,7 +5186,7 @@ const struct Item gItems[] = }, { .name = _("TM36"), - .itemId = ITEM_TM36, + .itemId = ITEM_TM36_SLUDGE_BOMB, .price = 1000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5202,7 +5202,7 @@ const struct Item gItems[] = }, { .name = _("TM37"), - .itemId = ITEM_TM37, + .itemId = ITEM_TM37_SANDSTORM, .price = 2000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5218,7 +5218,7 @@ const struct Item gItems[] = }, { .name = _("TM38"), - .itemId = ITEM_TM38, + .itemId = ITEM_TM38_FIRE_BLAST, .price = 5500, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5234,7 +5234,7 @@ const struct Item gItems[] = }, { .name = _("TM39"), - .itemId = ITEM_TM39, + .itemId = ITEM_TM39_ROCK_TOMB, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5250,7 +5250,7 @@ const struct Item gItems[] = }, { .name = _("TM40"), - .itemId = ITEM_TM40, + .itemId = ITEM_TM40_AERIAL_ACE, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5266,7 +5266,7 @@ const struct Item gItems[] = }, { .name = _("TM41"), - .itemId = ITEM_TM41, + .itemId = ITEM_TM41_TORMENT, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5282,7 +5282,7 @@ const struct Item gItems[] = }, { .name = _("TM42"), - .itemId = ITEM_TM42, + .itemId = ITEM_TM42_FACADE, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5298,7 +5298,7 @@ const struct Item gItems[] = }, { .name = _("TM43"), - .itemId = ITEM_TM43, + .itemId = ITEM_TM43_SECRET_POWER, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5314,7 +5314,7 @@ const struct Item gItems[] = }, { .name = _("TM44"), - .itemId = ITEM_TM44, + .itemId = ITEM_TM44_REST, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5330,7 +5330,7 @@ const struct Item gItems[] = }, { .name = _("TM45"), - .itemId = ITEM_TM45, + .itemId = ITEM_TM45_ATTRACT, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5346,7 +5346,7 @@ const struct Item gItems[] = }, { .name = _("TM46"), - .itemId = ITEM_TM46, + .itemId = ITEM_TM46_THIEF, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5362,7 +5362,7 @@ const struct Item gItems[] = }, { .name = _("TM47"), - .itemId = ITEM_TM47, + .itemId = ITEM_TM47_STEEL_WING, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5378,7 +5378,7 @@ const struct Item gItems[] = }, { .name = _("TM48"), - .itemId = ITEM_TM48, + .itemId = ITEM_TM48_SKILL_SWAP, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5394,7 +5394,7 @@ const struct Item gItems[] = }, { .name = _("TM49"), - .itemId = ITEM_TM49, + .itemId = ITEM_TM49_SNATCH, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5410,7 +5410,7 @@ const struct Item gItems[] = }, { .name = _("TM50"), - .itemId = ITEM_TM50, + .itemId = ITEM_TM50_OVERHEAT, .price = 3000, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5426,7 +5426,7 @@ const struct Item gItems[] = }, { .name = _("HM01"), - .itemId = ITEM_HM01, + .itemId = ITEM_HM01_CUT, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5442,7 +5442,7 @@ const struct Item gItems[] = }, { .name = _("HM02"), - .itemId = ITEM_HM02, + .itemId = ITEM_HM02_FLY, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5458,7 +5458,7 @@ const struct Item gItems[] = }, { .name = _("HM03"), - .itemId = ITEM_HM03, + .itemId = ITEM_HM03_SURF, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5474,7 +5474,7 @@ const struct Item gItems[] = }, { .name = _("HM04"), - .itemId = ITEM_HM04, + .itemId = ITEM_HM04_STRENGTH, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5490,7 +5490,7 @@ const struct Item gItems[] = }, { .name = _("HM05"), - .itemId = ITEM_HM05, + .itemId = ITEM_HM05_FLASH, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5506,7 +5506,7 @@ const struct Item gItems[] = }, { .name = _("HM06"), - .itemId = ITEM_HM06, + .itemId = ITEM_HM06_ROCK_SMASH, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5522,7 +5522,7 @@ const struct Item gItems[] = }, { .name = _("HM07"), - .itemId = ITEM_HM07, + .itemId = ITEM_HM07_WATERFALL, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, @@ -5538,7 +5538,7 @@ const struct Item gItems[] = }, { .name = _("HM08"), - .itemId = ITEM_HM08, + .itemId = ITEM_HM08_DIVE, .price = 0, .holdEffect = HOLD_EFFECT_NONE, .holdEffectParam = 0, diff --git a/src/data/pokemon/tmhm_learnsets.h b/src/data/pokemon/tmhm_learnsets.h index 02cd22d56..f14478863 100644 --- a/src/data/pokemon/tmhm_learnsets.h +++ b/src/data/pokemon/tmhm_learnsets.h @@ -1,431 +1,9393 @@ -// - -// - -#ifndef POKERUBY_TMHM_LEARNSETS_H -#define POKERUBY_TMHM_LEARNSETS_H - -// TO-DO: Rewrite this declaration to allow assignment of TM/HM learns by name. -// These are 58-bit numbers aligned to 64 bits. The least significant bit represents TM01, -// while the most significant bit represents HM08. - -asm( - ".align 2\n" - ".global gTMHMLearnsets\n" - "gTMHMLearnsets:\n" - - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ?????????? - ".8byte 0b0011100100000111100000100010000100001101010000011100100000\n" // Bulbasaur - ".8byte 0b0011100100000111100000100010000100001101010000011100100000\n" // Ivysaur - ".8byte 0b0011100100000111100000100010000110001101010100011100110000\n" // Venusaur - ".8byte 0b0010100110000111101010010011001100010100010000011000100011\n" // Charmander - ".8byte 0b0010100110000111101010010011001100010100010000011000100011\n" // Charmeleon - ".8byte 0b0010101110010111101010010011001110010100010100011000110011\n" // Charizard - ".8byte 0b1110110000000111100000000011001100010100110011001001100101\n" // Squirtle - ".8byte 0b1110110000000111100000000011001100010100110011001001100101\n" // Wartortle - ".8byte 0b1110110000000111100000000011001110010100110111001001110101\n" // Blastoise - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Caterpie - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Metapod - ".8byte 0b0001000000101111101000000010110100001111110100011000100000\n" // Butterfree - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Weedle - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Kakuna - ".8byte 0b0010000100001111101000100011000100001101010100011000100000\n" // Beedrill - ".8byte 0b0000001000011111101000000010000100000100110000011000100000\n" // Pidgey - ".8byte 0b0000001000011111101000000010000100000100110000011000100000\n" // Pidgeotto - ".8byte 0b0000001000011111101000000010000100000100110100011000100000\n" // Pidgeot - ".8byte 0b0010000100001111100000001010101101110100110011111000100000\n" // Rattata - ".8byte 0b0010100100001111100000001010101101110100110111111000110000\n" // Raticate - ".8byte 0b0000001000011111101000000010000100000100110000011000100000\n" // Spearow - ".8byte 0b0000001000011111101000000010000100000100110100011000100000\n" // Fearow - ".8byte 0b0000100001001111110000100010001110010101110000011000100000\n" // Ekans - ".8byte 0b0000100001001111110000100010001110010101110100011000100000\n" // Arbok - ".8byte 0b0011100000000111100000001011001101110100111000001000100001\n" // Pikachu - ".8byte 0b0011100000001111100000001011001101110100111100001000100001\n" // Raichu - ".8byte 0b0010100100001111101101000011001110010100010000011000100001\n" // Sandshrew - ".8byte 0b0010100100001111101101000011001110010100010100011000100001\n" // Sandslash - ".8byte 0b0010100100001111101000101010001101110100110011011000100100\n" // Nidoran♀ - ".8byte 0b0010100100001111101000101010001101110100110011011000100100\n" // Nidorina - ".8byte 0b0010110100001111111111111011101111110100110111111000110101\n" // Nidoqueen - ".8byte 0b0010100100001111100000101010001101110100110011011000100100\n" // Nidoran♂ - ".8byte 0b0010100100001111100000101010001101110100110011011000100100\n" // Nidorino - ".8byte 0b0010110100001111110111111011101111110100110111111000110101\n" // Nidoking - ".8byte 0b0001100001000111100010011111111101111110111011011000101101\n" // Clefairy - ".8byte 0b0001100001000111100010011111111101111110111111011000101101\n" // Clefable - ".8byte 0b0000000010000111100010010010001100010110010000011000110000\n" // Vulpix - ".8byte 0b0000000010000111100010010010001100010110010100011000110000\n" // Ninetales - ".8byte 0b0001100001000111100010011111111101101110111011011000100101\n" // Jigglypuff - ".8byte 0b0001100001000111100010011111111101101110111111011000100101\n" // Wigglytuff - ".8byte 0b0000000001011111111000100010100100000101110000111000100000\n" // Zubat - ".8byte 0b0000000001011111111000100010100100000101110100111000100000\n" // Golbat - ".8byte 0b0001000100000111100000100010000100001101010000011100100000\n" // Oddish - ".8byte 0b0001000100000111100000100010000100001101010000011100100000\n" // Gloom - ".8byte 0b0001000100000111100000100010000100001101010100011100100000\n" // Vileplume - ".8byte 0b0011000100001111101000100010001100001101010000011100100000\n" // Paras - ".8byte 0b0011000100001111101000100010001100001101010100011100100000\n" // Parasect - ".8byte 0b0001000000101111100000100010010100001101010000011000100000\n" // Venonat - ".8byte 0b0001000000101111101000100010010100001101010100011000100000\n" // Venomoth - ".8byte 0b0010000100001111101100100010001110000100010000011000100000\n" // Diglett - ".8byte 0b0010000100001111101100100010001110000100010100011000100000\n" // Dugtrio - ".8byte 0b0001000101001111111000001010101101110100110000111000100100\n" // Meowth - ".8byte 0b0001000101001111111000001010101101110100110100111000110100\n" // Persian - ".8byte 0b1111110000000111101000000011001100010100110011001001101101\n" // Psyduck - ".8byte 0b1111110000000111101000000011001100010100110111001001101101\n" // Golduck - ".8byte 0b0010100010001111101100000011001111110100110000111010100001\n" // Mankey - ".8byte 0b0010100010001111101100000011001111110100110100111010100001\n" // Primeape - ".8byte 0b0010100010001111101010010010001100010100010000011000110000\n" // Growlithe - ".8byte 0b0010100010001111101010010010001100010100010100011000110000\n" // Arcanine - ".8byte 0b1100010000001111100000000010011100000100110011001001100100\n" // Poliwag - ".8byte 0b1110110000001111100000000011011110000100110011001001100101\n" // Poliwhirl - ".8byte 0b1110110000001111100100000011011110000100110111001011100101\n" // Poliwrath - ".8byte 0b0001000001101111110000001110110100010110111000111000101001\n" // Abra - ".8byte 0b0001000001101111110000001110110100010110111000111000101001\n" // Kadabra - ".8byte 0b0001000001101111110000001110110100010110111100111000101001\n" // Alakazam - ".8byte 0b0010100000001111100110010011001110000100110000011010100001\n" // Machop - ".8byte 0b0010100000001111100110010011001110000100110000011010100001\n" // Machoke - ".8byte 0b0010100000001111100110010011001110000100110100011010100001\n" // Machamp - ".8byte 0b0001000100001111100000100010000100001101010000011100100000\n" // Bellsprout - ".8byte 0b0001000100001111100000100010000100001101010000011100100000\n" // Weepinbell - ".8byte 0b0001000100001111100000100010000100001101010100011100100000\n" // Victreebel - ".8byte 0b1100010100001111100000100010000100000101110011001001100100\n" // Tentacool - ".8byte 0b1100010100001111100000100010000100000101110111001001100100\n" // Tentacruel - ".8byte 0b0010100000000111100111010011001110000100010000011000100001\n" // Geodude - ".8byte 0b0010100000000111100111010011001110000100010000011000100001\n" // Graveler - ".8byte 0b0010100000000111100111010011001110000100010100011000110001\n" // Golem - ".8byte 0b0000100010000111100010010010000100011100010000011000100000\n" // Ponyta - ".8byte 0b0000100010000111100010010010000100011100010100011000100000\n" // Rapidash - ".8byte 0b1001110000100111100010010010111110010110110011011001101100\n" // Slowpoke - ".8byte 0b1011110000100111100010010011111110010110110111011001101101\n" // Slowbro - ".8byte 0b0001000000000011100000001110000101100100110000011000100000\n" // Magnemite - ".8byte 0b0001000000000011100000001110000101100100110100011000100000\n" // Magneton - ".8byte 0b0000001100011111101000000010000100010100010000011000100000\n" // Farfetch'd - ".8byte 0b0000001000011111101000000010000100000100010000011000100000\n" // Doduo - ".8byte 0b0000001000011111111000000010000100000100010100111000100000\n" // Dodrio - ".8byte 0b1100010000001111100000000010000100000110110011001001100100\n" // Seel - ".8byte 0b1100010000001111100000000010000100000110110111001001100100\n" // Dewgong - ".8byte 0b0000000000001111110110111010001101100101110000111000100000\n" // Grimer - ".8byte 0b0010100000001111110110111011001101100101110100111000100001\n" // Muk - ".8byte 0b1000010000000111100000000010000100000100110011001001100100\n" // Shellder - ".8byte 0b1000010000000111110000000010000100000100110111001001100100\n" // Cloyster - ".8byte 0b0000000001101111110000100010110100100101110000111000100000\n" // Gastly - ".8byte 0b0000000001101111110000100010110100100101110000111000100000\n" // Haunter - ".8byte 0b0010100001101111110000100011110101100101110100111000100001\n" // Gengar - ".8byte 0b0010100000000111110101000010001110010100010000111000110000\n" // Onix - ".8byte 0b0001000001101111110000000111110100000110111000111000101001\n" // Drowzee - ".8byte 0b0001000001101111110000000111110100000110111100111000101001\n" // Hypno - ".8byte 0b1010110100001111100100000010001100000100110011001001100100\n" // Krabby - ".8byte 0b1010110100001111100100000010001100000100110111001001100100\n" // Kingler - ".8byte 0b0001000000001011110000001010000101100100111000101000100000\n" // Voltorb - ".8byte 0b0001000000001011110000001010000101100100111100101000100000\n" // Electrode - ".8byte 0b0001100000101111100000100110010100001101011000011100100000\n" // Exeggcute - ".8byte 0b0001100000101111100000100110010100001101011100011100100000\n" // Exeggutor - ".8byte 0b0010100000001111101111010011001110010100010011011000100001\n" // Cubone - ".8byte 0b0010100000001111101111010011001110010100010111011000100001\n" // Marowak - ".8byte 0b0010100000001111100100000011000110000100110000011010100001\n" // Hitmonlee - ".8byte 0b0010100000001111100100000011000110000100110000011010100001\n" // Hitmonchan - ".8byte 0b0010110100001111100111011011101111111100110111011000100101\n" // Lickitung - ".8byte 0b0001000000001111110010111010100101100100110000111000100000\n" // Koffing - ".8byte 0b0001000000001111110010111010100101100100110100111000100000\n" // Weezing - ".8byte 0b0010100000001111100111011010001111110100110011011000110000\n" // Rhyhorn - ".8byte 0b0010110100001111100111011011001111110100110111011000110001\n" // Rhydon - ".8byte 0b0011100001100111100111011011110111111110111111011001101101\n" // Chansey - ".8byte 0b0011000100001111100000100010000100001101010100011100100000\n" // Tangela - ".8byte 0b0010110100001111101111011011101111111100110111011001110101\n" // Kangaskhan - ".8byte 0b1100010000000111100000000010000100000100110011001001100100\n" // Horsea - ".8byte 0b1100010000000111100000000010000100000100110111001001100100\n" // Seadra - ".8byte 0b1100010000000111100000000010000100000100110011001001100100\n" // Goldeen - ".8byte 0b1100010000000111100000000010000100000100110111001001100100\n" // Seaking - ".8byte 0b1101010000000011100000000110010101100100111011001001100100\n" // Staryu - ".8byte 0b1101010000100011100000000110010101100100111111001001100100\n" // Starmie - ".8byte 0b0001000001101111110000001111110101101110111100111000101001\n" // Mr. mime - ".8byte 0b0010000100011111101000000010000100000100110100011000100000\n" // Scyther - ".8byte 0b0001000000101111110000000111110100000100111111101001101101\n" // Jynx - ".8byte 0b0011100000001111100000001011010101110100111100001000100001\n" // Electabuzz - ".8byte 0b0010100000001111100010010011010100010100010100011000100001\n" // Magmar - ".8byte 0b0010100100001111100100000011001110000100110100011010100001\n" // Pinsir - ".8byte 0b0010110000000111100111011010000111111100110111011000100100\n" // Tauros - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Magikarp - ".8byte 0b1110110000000111110011010010000111100100110111101001110100\n" // Gyarados - ".8byte 0b1110110000000111100000001010010101110110110111001001110100\n" // Lapras - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Ditto - ".8byte 0b0000000000000111100000000010101100010100110000011000100000\n" // Eevee - ".8byte 0b1100010000000111100000000010101100010100110111011001110100\n" // Vaporeon - ".8byte 0b0001000000000111100000001010101101110100110100011000110000\n" // Jolteon - ".8byte 0b0000000010000111100010010010101100010100110100011000110000\n" // Flareon - ".8byte 0b0001000000001011101000001010110101111100110111011000100000\n" // Porygon - ".8byte 0b1110010000001111100101000010000100000100110011001001100100\n" // Omanyte - ".8byte 0b1110010000001111100101000010000100000100110111001001100100\n" // Omastar - ".8byte 0b0110010000001111101101000010001100000101110011001001100100\n" // Kabuto - ".8byte 0b1110010100001111101101000011001100000101110111001001100100\n" // Kabutops - ".8byte 0b0010101000011111111111010010000110010100110100111000110010\n" // Aerodactyl - ".8byte 0b0000110000000111100111011011110111101100110111011000100101\n" // Snorlax - ".8byte 0b0010001000010011101001000110000100000100110111011001110100\n" // Articuno - ".8byte 0b0011001000010011101001001010000101100100111100011000110000\n" // Zapdos - ".8byte 0b0010001010010011101011010010000100000110110100011000110000\n" // Moltres - ".8byte 0b0100010000000111100010011010000101110110110111011001100100\n" // Dratini - ".8byte 0b0100010000000111100010011010000101110110110111011001100100\n" // Dragonair - ".8byte 0b1110111100010111101111011011000111110110110111011001110111\n" // Dragonite - ".8byte 0b0011100001100011111111011111110111111110111111111011101101\n" // Mewtwo - ".8byte 0b1111111111111111111111111111111111111111111111111111111111\n" // Mew - ".8byte 0b0001000100000111100000000110000100011111011000011100100000\n" // Chikorita - ".8byte 0b0011100100000111100000000110000100011111011000011100100000\n" // Bayleef - ".8byte 0b0011100100000111100000000110000110011111011100011100100000\n" // Meganium - ".8byte 0b0000000110000111101010010010001100000100010000011000100000\n" // Cyndaquil - ".8byte 0b0010100110000111101010010011001100000100010000011000110001\n" // Quilava - ".8byte 0b0010100110000111101010010011001110000100010100011000110001\n" // Typhlosion - ".8byte 0b1100010100000111101000000011001100010100110011001001100101\n" // Totodile - ".8byte 0b1110110100000111101000000011001100010100110011001001110101\n" // Croconaw - ".8byte 0b1110110100000111101000000011001110010100110111001001110111\n" // Feraligatr - ".8byte 0b0000010100001111100000011011101100111100110001011000100101\n" // Sentret - ".8byte 0b0010110100001111100000011011101101111100110111011000100101\n" // Furret - ".8byte 0b0001001000011111101000000110110100000100110000011000100000\n" // Hoothoot - ".8byte 0b0001001000011111101000000110110100000100110100011000100000\n" // Noctowl - ".8byte 0b0001000000001111101000000111001100001111011000011000100001\n" // Ledyba - ".8byte 0b0001000000001111101000000111001100001111011100011000100001\n" // Ledian - ".8byte 0b0001000000001111100000100010011100001101010000011000100000\n" // Spinarak - ".8byte 0b0001000000001111100000100010011100001101010100011000100000\n" // Ariados - ".8byte 0b0000001001011111111000100010100100000101110100111000100000\n" // Crobat - ".8byte 0b1101010000000111100000001010000101100100110011001001100100\n" // Chinchou - ".8byte 0b1101010000000111100000001010000101100100110111001001100100\n" // Lanturn - ".8byte 0b0001000000000111100000001010000101110100111000001000100000\n" // Pichu - ".8byte 0b0001000000000111100010011110111100011110111000011000100100\n" // Cleffa - ".8byte 0b0001000000000111100010011110111100001110111000011000100100\n" // Igglybuff - ".8byte 0b0011000000000111100010011110110100001110111000011000100100\n" // Togepi - ".8byte 0b0011001000010111101010011111110100001110111100011000100101\n" // Togetic - ".8byte 0b0001000000111111101000000110110100001101111000011000101000\n" // Natu - ".8byte 0b0001001000111111101000000110110100001101111100011000101000\n" // Xatu - ".8byte 0b0001000000000111100000001010000101110100111000001000100000\n" // Mareep - ".8byte 0b0011100000000111100000001011000101110100111000001000100001\n" // Flaaffy - ".8byte 0b0011100000000111100000001011000101110100111100001000100001\n" // Ampharos - ".8byte 0b0001000100000111100000100010000100001111010100011100100000\n" // Bellossom - ".8byte 0b1110110000000111100000000011001100010100110011001001100101\n" // Marill - ".8byte 0b1110110000000111100000000011001100010100110111001001100101\n" // Azumarill - ".8byte 0b0010100000001111100101000011001110000100010000111000101001\n" // Sudowoodo - ".8byte 0b1110110000001111100000000011011110000100110111001001100101\n" // Politoed - ".8byte 0b0001000000000111101000000010000100001101010000011100100000\n" // Hoppip - ".8byte 0b0001000000000111101000000010000100001101010000011100100000\n" // Skiploom - ".8byte 0b0001000000000111101000000010000100001101010100011100100000\n" // Jumpluff - ".8byte 0b0010100101001111101000001011101101111100110000111000100101\n" // Aipom - ".8byte 0b0001000100000111100000100010000100001111011000011100100000\n" // Sunkern - ".8byte 0b0001000100000111100000100010000100001111011100011100100000\n" // Sunflora - ".8byte 0b0001000000011111101000000010110100001101010000011000100000\n" // Yanma - ".8byte 0b1111010000000111100001100010001110010100110011001001100100\n" // Wooper - ".8byte 0b1111110000000111100101100011001110010100110111001001100101\n" // Quagsire - ".8byte 0b0001000100100111100000000110111100010100111100011000101000\n" // Espeon - ".8byte 0b0001000101000111110000000010111100010100110100111000100000\n" // Umbreon - ".8byte 0b0000001001011111111000000010100100000100110000111000101000\n" // Murkrow - ".8byte 0b1011110000100111100010010011111110010110110111011001101101\n" // Slowking - ".8byte 0b0001000001101111111000001010110101100100110000111000101000\n" // Misdreavus - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Unown - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Wobbuffet - ".8byte 0b0011100000101111100000001110110111110100111000011000101000\n" // Girafarig - ".8byte 0b0010100000000111100001000110001110001101011000011000100000\n" // Pineco - ".8byte 0b0010100000000111100001000110001110001101011100011000100000\n" // Forretress - ".8byte 0b0010100000001111100110011010101111111100110011011000101100\n" // Dunsparce - ".8byte 0b0010100100011111101101100010001110010100110000011000100000\n" // Gligar - ".8byte 0b0010100100000111110101000010001110010100010100111000110000\n" // Steelix - ".8byte 0b0010100010001111110010111011101111101100110000111010110101\n" // Snubbull - ".8byte 0b0010100010001111110110111011101111111100110100111010110101\n" // Granbull - ".8byte 0b1100010000000111100000101010100100000100110011001001100100\n" // Qwilfish - ".8byte 0b0010100100011111101001000010000100000100110100011000100000\n" // Scizor - ".8byte 0b0011100000000111100101100010001110000110010000011000100000\n" // Shuckle - ".8byte 0b0010100100001111100100000011001110000100110100011010100001\n" // Heracross - ".8byte 0b0010110101001111111000000011101100010100110011111001101001\n" // Sneasel - ".8byte 0b0010100100001111111000000011001110000100110000111010110001\n" // Teddiursa - ".8byte 0b0010100100001111111100000011001110000100110100111010110001\n" // Ursaring - ".8byte 0b0010000010000111100010010110000100000100011000011000100000\n" // Slugma - ".8byte 0b0010100010000111100111010110000110000100011100011000100000\n" // Magcargo - ".8byte 0b0010100000000111100101000110001110000100111011001001110000\n" // Swinub - ".8byte 0b0010100000000111100101000110001110000100111111001001110000\n" // Piloswine - ".8byte 0b0010110000000111100101000110111110000110111011011001101100\n" // Corsola - ".8byte 0b1100010000001111100010010010010100000100110111011000100100\n" // Remoraid - ".8byte 0b1100010000001111100010110010010100000100110111011100100100\n" // Octillery - ".8byte 0b0000001000001111101000000010000100000100110011001001100101\n" // Delibird - ".8byte 0b1100010000000111101000000010000110000100110011001001100100\n" // Mantine - ".8byte 0b0010001100011111111001000010000100000100010000111000110000\n" // Skarmory - ".8byte 0b0010000011001111110010110010100100011100010000111000110000\n" // Houndour - ".8byte 0b0010100011001111110010110010100100011100010100111000110000\n" // Houndoom - ".8byte 0b1100010000000111100000000010000100000100110111001001100100\n" // Kingdra - ".8byte 0b0010100000000111100101000010000110010100010000011000110000\n" // Phanpy - ".8byte 0b0010100000000111100101000010000110010100010100011000110000\n" // Donphan - ".8byte 0b0001000000001011101000001010110101111100110111011000100000\n" // Porygon2 - ".8byte 0b0001000000101111100000001110110111111100111000011000111000\n" // Stantler - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Smeargle - ".8byte 0b0010100000001111100000000011000110000100110000011010100000\n" // Tyrogue - ".8byte 0b0010100000001111100001000011001110000100110000011010100000\n" // Hitmontop - ".8byte 0b0001000000101111100000000110110100000100111011001001101100\n" // Smoochum - ".8byte 0b0011000000001111100000001011010101100100111000001000100001\n" // Elekid - ".8byte 0b0010000000001111100010010011010100010100010000011000100001\n" // Magby - ".8byte 0b0010110000000111100101001011100111111100110111011000100101\n" // Miltank - ".8byte 0b0011100001100111100111011011110111111110111111011001101101\n" // Blissey - ".8byte 0b0011100100000011100001001110001101110100110100011000111000\n" // Raikou - ".8byte 0b0011100100000011100011010110001100011100110100011000111000\n" // Entei - ".8byte 0b1110010100000011100001000110001100010100110111011001111100\n" // Suicune - ".8byte 0b0010000000000111110001000011001110000100110100111000100000\n" // Larvitar - ".8byte 0b0010000000000111110001000011001110000100110100111000100000\n" // Pupitar - ".8byte 0b0010110100000111111111011011001111110100110111111000110111\n" // Tyranitar - ".8byte 0b1110111000110011101001001110110111110111111111011001111100\n" // Lugia - ".8byte 0b0011101010010011101011011110110111101111111100011000111000\n" // Ho-Oh - ".8byte 0b0001000100100011101001001110110100001111111100011000101100\n" // Celebi - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // ? - ".8byte 0b0011100100000111101100000011001100011111010000011100100001\n" // Treecko - ".8byte 0b0011100100000111101100000011001100011111010000011100100001\n" // Grovyle - ".8byte 0b0011100100000111101100000011001110011111010100011100110011\n" // Sceptile - ".8byte 0b0010100110000111101110010010001100000100010000011000100000\n" // Torchic - ".8byte 0b0010100110000111101110010011001100000100010000011010100001\n" // Combusken - ".8byte 0b0010100110000111101110010011001110000100010100011010110001\n" // Blaziken - ".8byte 0b1110110000000111100100000010001100010100110011001001100100\n" // Mudkip - ".8byte 0b1110110000000111100100000010001110010100110011001001100100\n" // Marshtomp - ".8byte 0b1110110000000111100100000011001110010100110111001001110101\n" // Swampert - ".8byte 0b0010000001001111110000000010101100010100110000111000110000\n" // Poochyena - ".8byte 0b0010100001001111110000000010101100010100110100111000110000\n" // Mightyena - ".8byte 0b0010010100001111100000001010101101110100110011011000100100\n" // Zigzagoon - ".8byte 0b0010110100001111100000001010101101110100110111011000110100\n" // Linoone - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Wurmple - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Silcoon - ".8byte 0b0001000000001111101000000010110100001111010100011000100000\n" // Beautifly - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Cascoon - ".8byte 0b0001000000001111101000100010110100001101011100011000100000\n" // Dustox - ".8byte 0b0001010000001111100000000010000100001101110011011101100100\n" // Lotad - ".8byte 0b1111110000001111100000000011000100001101110011011101100100\n" // Lombre - ".8byte 0b1111110000001111100000000011000100001101110111011101100101\n" // Ludicolo - ".8byte 0b0011000000000111100000000010101100001101010000011100100000\n" // Seedot - ".8byte 0b0011100100001111110100000011101100001101010100011100100000\n" // Nuzleaf - ".8byte 0b0011100100001111111100000011101100001101010100011100100000\n" // Shiftry - ".8byte 0b0001000100000011101001000010101100001101010000011000100000\n" // Nincada - ".8byte 0b0001000100001111101001000010101100001101010100011000100000\n" // Ninjask - ".8byte 0b0001000100001011101001000010101100001101010100011000100000\n" // Shedinja - ".8byte 0b0000001000011111101000000010000100000100110000011000100000\n" // Taillow - ".8byte 0b0000001000011111101000000010000100000100110100011000100000\n" // Swellow - ".8byte 0b0001000001000111100000100010000100001111010000011100100000\n" // Shroomish - ".8byte 0b0011100101000111100000100011000100011111010100011110100001\n" // Breloom - ".8byte 0b0011100001101111100100001011111100000110110000011000101101\n" // Spinda - ".8byte 0b0000001000011111101000001010000100000100110011001001100100\n" // Wingull - ".8byte 0b0000011000011111101000001010000100000100110111001001100100\n" // Pelipper - ".8byte 0b0001000000001111100000000010100100001101110011011000100100\n" // Surskit - ".8byte 0b0001000000001111101000000010100100001101110111011000100100\n" // Masquerain - ".8byte 0b1110110000000111100100000010000110000100110011001001110100\n" // Wailmer - ".8byte 0b1110110000000111100100000010000110000100110111001001110100\n" // Wailord - ".8byte 0b0001000000000111100000001010101101111110110011011000101100\n" // Skitty - ".8byte 0b0011100000000111100000001010101101111110110111011000101100\n" // Delcatty - ".8byte 0b0011100101101111101110011011101101111100110011011000100101\n" // Kecleon - ".8byte 0b0001000000100011100101000110111110001100111001011000100000\n" // Baltoy - ".8byte 0b0011100000100011100101000110111110001100111101011000100000\n" // Claydol - ".8byte 0b0010100000000111110101001010000111100100010000111000100000\n" // Nosepass - ".8byte 0b0010100010000111100010110010000100010100010000011000100000\n" // Torkoal - ".8byte 0b0011000101001111111100001011111100000100110000111000101101\n" // Sableye - ".8byte 0b1100010000000111100101000010000110000100110011001001100100\n" // Barboach - ".8byte 0b1110110000000111100101000010000110000100110111001001100100\n" // Whiscash - ".8byte 0b1100010000000111100000000010000100000110110011001001100100\n" // Luvdisc - ".8byte 0b0110110100000111101100100011001100000100110011101001100100\n" // Corphish - ".8byte 0b1110110100000111101100100011001100000100110111101001100100\n" // Crawdaunt - ".8byte 0b1100010000000111100000000010000100000100110011001001100100\n" // Feebas - ".8byte 0b1100010000000111100000000010000100010110110111001001100100\n" // Milotic - ".8byte 0b1100010000001111110000000010000100000100110011101001100100\n" // Carvanha - ".8byte 0b1110110000001111110100000010000110000100110111101001110100\n" // Sharpedo - ".8byte 0b0010100000000111100101000010001110001101010100011000100000\n" // Trapinch - ".8byte 0b0010101000010111100101000010001110001101010100011000100000\n" // Vibrava - ".8byte 0b0010101000010111100111010010001110011101010100011000100010\n" // Flygon - ".8byte 0b0010110000000111100100000011001110000100110000011010100001\n" // Makuhita - ".8byte 0b0010110000000111100100000011001110000100110100011010100001\n" // Hariyama - ".8byte 0b0001100000001111100000001010000101110100110000001000110000\n" // Electrike - ".8byte 0b0001100000001111100000001010000101110100110100001000110000\n" // Manectric - ".8byte 0b0010100010000111100111010010001110000100010000011000100000\n" // Numel - ".8byte 0b0010100010000111100111010010001110000100010100011000110000\n" // Camerupt - ".8byte 0b1110110000000111100100000010000110010100110011001001100100\n" // Spheal - ".8byte 0b1110110000000111100100000010000110010100110011001001110100\n" // Sealeo - ".8byte 0b1110110000000111100100000010000110010100110111001001110100\n" // Walrein - ".8byte 0b0001000100000111100001000010000100001101010000011100100001\n" // Cacnea - ".8byte 0b0001100100000111100001000010000100001101010100011100100001\n" // Cacturne - ".8byte 0b0001000000000111100000000010100100000110111011001001100100\n" // Snorunt - ".8byte 0b0001000000000111110000000010100110000110111111101001100100\n" // Glalie - ".8byte 0b0001000000100011100101000110110110000110111101001000101000\n" // Lunatone - ".8byte 0b0001000010100011100111010110110110001110011100011000101000\n" // Solrock - ".8byte 0b0100010000000111100000000010000100010100110011001001100100\n" // Azurill - ".8byte 0b0001000001101111110000001110110100010100111000111000101000\n" // Spoink - ".8byte 0b0001000001101111110000001110110100010100111100111000101001\n" // Grumpig - ".8byte 0b0001000000000111100000001010000101110100111000001000100000\n" // Plusle - ".8byte 0b0001000000000111100000001010000101110100111000001000100000\n" // Minun - ".8byte 0b0010100000000111110111110011000100001100110101111000100001\n" // Mawile - ".8byte 0b0011100000000111100100000111110100000100111000011010101001\n" // Meditite - ".8byte 0b0011100000000111100100000111110100000100111100011010101001\n" // Medicham - ".8byte 0b0000001000011111101000000010000100001110110001011000100000\n" // Swablu - ".8byte 0b0010001000011111101010010010000110011110110101011000110010\n" // Altaria - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Wynaut - ".8byte 0b0001000001101111110000000010110100000100110011111000101000\n" // Duskull - ".8byte 0b0011100001101111110100000010110110000100110111111000101001\n" // Dusclops - ".8byte 0b0001000100000111100000100010100100001101010000011100100000\n" // Roselia - ".8byte 0b0010100100000111101010011011100101101100110011011010100101\n" // Slakoth - ".8byte 0b0010100100000111101010011011100111101100110011111010110101\n" // Vigoroth - ".8byte 0b0010100100000111101010011011100111101100110111111010110101\n" // Slaking - ".8byte 0b0010100001000111100000101010100100001101110001011100100100\n" // Gulpin - ".8byte 0b0010100001000111100000101010100100001101110101011100100100\n" // Swalot - ".8byte 0b0011101100010111101000000010000110001111010100011100110000\n" // Tropius - ".8byte 0b0000000000000111100010011010100100001100110011011000110100\n" // Whismur - ".8byte 0b0010100010000111110010011011100110001100110011111000110100\n" // Loudred - ".8byte 0b0010100010000111110010011011100110001100110111111000110100\n" // Exploud - ".8byte 0b1100010000000111100000000010000100000100110011001001100100\n" // Clamperl - ".8byte 0b1100010001000111100100000010000100000100110111001001100100\n" // Huntail - ".8byte 0b1100010000000111100000000010110100000110110111001001100100\n" // Gorebyss - ".8byte 0b0011100101001111111011011010100101110100110111111001101100\n" // Absol - ".8byte 0b0001000001101111110000001010110101100100110000111000101000\n" // Shuppet - ".8byte 0b0001000001101111110000001010110101100100110100111000101000\n" // Banette - ".8byte 0b0010100001001111100000110010001110010101110000111000100000\n" // Seviper - ".8byte 0b0010100000001111101010011011101101111101110011111000110101\n" // Zangoose - ".8byte 0b1110010000000111100101000010000110000110110111001001101100\n" // Relicanth - ".8byte 0b0010100100000111101101001010001110010100110000011000110100\n" // Aron - ".8byte 0b0010100100000111101101001010001110010100110000011000110100\n" // Lairon - ".8byte 0b0010110100000111101111011011001111111100110111111000110111\n" // Aggron - ".8byte 0b0001000000001111100011011010100101101100110011011001100100\n" // Castform - ".8byte 0b0001000000001111101000001011100101101101111000011000100101\n" // Volbeat - ".8byte 0b0001000000001111101000001011100101101101111000011000100101\n" // Illumise - ".8byte 0b0000000000000111100001100010000100001101010000011100100000\n" // Lileep - ".8byte 0b0010100000000111100101100010000110001101010100011100100000\n" // Cradily - ".8byte 0b0010000100000111101101000011001100000100010000011000100100\n" // Anorith - ".8byte 0b0010100100000111101101000011001110010100010100011000100100\n" // Armaldo - ".8byte 0b0001000001101111110000001110110100100110111000111000101000\n" // Ralts - ".8byte 0b0001000001101111110000001110110100100110111000111000101000\n" // Kirlia - ".8byte 0b0001000001101111110000001110110100100110111100111000101000\n" // Gardevoir - ".8byte 0b0010100100000111101110010011000100000100110000011000110010\n" // Bagon - ".8byte 0b0010100100000111101110010011000100000100110000011000110010\n" // Shelgon - ".8byte 0b0010101100010111101110010011000110010100110100011000110010\n" // Salamence - ".8byte 0b0000000000000000000000000000000000000000000000000000000000\n" // Beldum - ".8byte 0b0011100100000011101101100111110110000100111100011000100000\n" // Metang - ".8byte 0b0011100100000011101101100111110110000100111100011000100000\n" // Metagross - ".8byte 0b0010100000000011100101001011001111100110010100011000100001\n" // Regirock - ".8byte 0b0010100000000011100000001011000111100110110111001001100001\n" // Regice - ".8byte 0b0010100000000011101101001011000111100110110100011000100001\n" // Registeel - ".8byte 0b1110110000000011100100001011000111100110110111001001111100\n" // Kyogre - ".8byte 0b0010100110000011101111011011001111111110010100011010110010\n" // Groudon - ".8byte 0b1110111010000011101011011011000111111100110111011010110110\n" // Rayquaza - ".8byte 0b1101011100010111101001001110110111101110111101011000111110\n" // Latias - ".8byte 0b1101011100010111101001001110110111101110111101011000111110\n" // Latios - ".8byte 0b0001000000100011101001001110110101100110111100011000101100\n" // Jirachi - ".8byte 0b0011100101100011111100001111110101101110111101111000101101\n" // Deoxys - ".8byte 0b0001000001100111110000001110110100000110111000111000101000\n" // Chimecho -); - -#endif //POKERUBY_TMHM_LEARNSETS_H +#ifndef GUARD_TMHM_LEARNSETS_H +#define GUARD_TMHM_LEARNSETS_H + +#define TMHM_LEARNSET(moves) {(u32)(moves), ((u64)(moves) >> 32)} +#define TMHM(tmhm) ((u64)1 << (ITEM_##tmhm - ITEM_TM01_FOCUS_PUNCH)) + +// This table determines which TMs and HMs a species is capable of learning. +// Each entry is a 64-bit bit array spread across two 32-bit values, with +// each bit corresponding to a . +const u32 gTMHMLearnsets[][2] = +{ + [SPECIES_NONE] = TMHM_LEARNSET(0), + + [SPECIES_BULBASAUR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_IVYSAUR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_VENUSAUR] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_CHARMANDER] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM02_DRAGON_CLAW) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_CHARMELEON] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM02_DRAGON_CLAW) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_CHARIZARD] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM02_DRAGON_CLAW) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM47_STEEL_WING) + | TMHM(TM50_OVERHEAT) + | TMHM(HM01_CUT) + | TMHM(HM02_FLY) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SQUIRTLE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_WARTORTLE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_BLASTOISE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_CATERPIE] = TMHM_LEARNSET(0), + + [SPECIES_METAPOD] = TMHM_LEARNSET(0), + + [SPECIES_BUTTERFREE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM05_FLASH)), + + [SPECIES_WEEDLE] = TMHM_LEARNSET(0), + + [SPECIES_KAKUNA] = TMHM_LEARNSET(0), + + [SPECIES_BEEDRILL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_PIDGEY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY)), + + [SPECIES_PIDGEOTTO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY)), + + [SPECIES_PIDGEOT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY)), + + [SPECIES_RATTATA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_RATICATE] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SPEAROW] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY)), + + [SPECIES_FEAROW] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY)), + + [SPECIES_EKANS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH)), + + [SPECIES_ARBOK] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH)), + + [SPECIES_PIKACHU] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_RAICHU] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SANDSHREW] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SANDSLASH] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_NIDORAN_F] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_NIDORINA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_NIDOQUEEN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_NIDORAN_M] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_NIDORINO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_NIDOKING] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_CLEFAIRY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH)), + + [SPECIES_CLEFABLE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH)), + + [SPECIES_VULPIX] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT)), + + [SPECIES_NINETALES] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT)), + + [SPECIES_JIGGLYPUFF] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH)), + + [SPECIES_WIGGLYTUFF] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH)), + + [SPECIES_ZUBAT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(TM49_SNATCH)), + + [SPECIES_GOLBAT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(TM49_SNATCH)), + + [SPECIES_ODDISH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_GLOOM] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_VILEPLUME] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_PARAS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_PARASECT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_VENONAT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM05_FLASH)), + + [SPECIES_VENOMOTH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM05_FLASH)), + + [SPECIES_DIGLETT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_DUGTRIO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MEOWTH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM49_SNATCH) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_PERSIAN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM49_SNATCH) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_PSYDUCK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_GOLDUCK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_MANKEY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_PRIMEAPE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_GROWLITHE] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_ARCANINE] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_POLIWAG] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_POLIWHIRL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_POLIWRATH] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_ABRA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_KADABRA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_ALAKAZAM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_MACHOP] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MACHOKE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MACHAMP] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_BELLSPROUT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_WEEPINBELL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_VICTREEBEL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_TENTACOOL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_TENTACRUEL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_GEODUDE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_GRAVELER] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_GOLEM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_PONYTA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH)), + + [SPECIES_RAPIDASH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH)), + + [SPECIES_SLOWPOKE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM08_DIVE)), + + [SPECIES_SLOWBRO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM08_DIVE)), + + [SPECIES_MAGNEMITE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(HM05_FLASH)), + + [SPECIES_MAGNETON] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(HM05_FLASH)), + + [SPECIES_FARFETCHD] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM01_CUT) + | TMHM(HM02_FLY)), + + [SPECIES_DODUO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY)), + + [SPECIES_DODRIO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY)), + + [SPECIES_SEEL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_DEWGONG] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_GRIMER] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF)), + + [SPECIES_MUK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SHELLDER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM08_DIVE)), + + [SPECIES_CLOYSTER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM08_DIVE)), + + [SPECIES_GASTLY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH)), + + [SPECIES_HAUNTER] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH)), + + [SPECIES_GENGAR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_ONIX] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_DROWZEE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_HYPNO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_KRABBY] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM08_DIVE)), + + [SPECIES_KINGLER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM08_DIVE)), + + [SPECIES_VOLTORB] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM12_TAUNT) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_ELECTRODE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_EXEGGCUTE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH)), + + [SPECIES_EXEGGUTOR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH)), + + [SPECIES_CUBONE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MAROWAK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_HITMONLEE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_HITMONCHAN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_LICKITUNG] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_KOFFING] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_WEEZING] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_RHYHORN] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_RHYDON] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_CHANSEY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_TANGELA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_KANGASKHAN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_HORSEA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_SEADRA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_GOLDEEN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_SEAKING] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_STARYU] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(HM03_SURF) + | TMHM(HM05_FLASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_STARMIE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM03_SURF) + | TMHM(HM05_FLASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_MR_MIME] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_SCYTHER] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM01_CUT) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_JYNX] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM05_FLASH)), + + [SPECIES_ELECTABUZZ] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MAGMAR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_PINSIR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_TAUROS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MAGIKARP] = TMHM_LEARNSET(0), + + [SPECIES_GYARADOS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_LAPRAS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_DITTO] = TMHM_LEARNSET(0), + + [SPECIES_EEVEE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT)), + + [SPECIES_VAPOREON] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_JOLTEON] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH)), + + [SPECIES_FLAREON] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT)), + + [SPECIES_PORYGON] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_OMANYTE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_OMASTAR] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_KABUTO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL)), + + [SPECIES_KABUTOPS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_AERODACTYL] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SNORLAX] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH)), + + [SPECIES_ARTICUNO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM37_SANDSTORM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_ZAPDOS] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM37_SANDSTORM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MOLTRES] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM47_STEEL_WING) + | TMHM(TM50_OVERHEAT) + | TMHM(HM02_FLY) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_DRATINI] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL)), + + [SPECIES_DRAGONAIR] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL)), + + [SPECIES_DRAGONITE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM02_DRAGON_CLAW) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM47_STEEL_WING) + | TMHM(HM01_CUT) + | TMHM(HM02_FLY) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_MEWTWO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MEW] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM02_DRAGON_CLAW) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM08_BULK_UP) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(TM50_OVERHEAT) + | TMHM(HM01_CUT) + | TMHM(HM02_FLY) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_CHIKORITA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_BAYLEEF] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MEGANIUM] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_CYNDAQUIL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM01_CUT)), + + [SPECIES_QUILAVA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_TYPHLOSION] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_TOTODILE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_CROCONAW] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_FERALIGATR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM02_DRAGON_CLAW) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_SENTRET] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF)), + + [SPECIES_FURRET] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_HOOTHOOT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY) + | TMHM(HM05_FLASH)), + + [SPECIES_NOCTOWL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY) + | TMHM(HM05_FLASH)), + + [SPECIES_LEDYBA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_LEDIAN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_SPINARAK] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_ARIADOS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_CROBAT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(TM49_SNATCH) + | TMHM(HM02_FLY)), + + [SPECIES_CHINCHOU] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM05_FLASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_LANTURN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM05_FLASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_PICHU] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH)), + + [SPECIES_CLEFFA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH)), + + [SPECIES_IGGLYBUFF] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH)), + + [SPECIES_TOGEPI] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_TOGETIC] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_NATU] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM05_FLASH)), + + [SPECIES_XATU] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM02_FLY) + | TMHM(HM05_FLASH)), + + [SPECIES_MAREEP] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH)), + + [SPECIES_FLAAFFY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_AMPHAROS] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_BELLOSSOM] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_MARILL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_AZUMARILL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_SUDOWOODO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_POLITOED] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_HOPPIP] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH)), + + [SPECIES_SKIPLOOM] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH)), + + [SPECIES_JUMPLUFF] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH)), + + [SPECIES_AIPOM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM49_SNATCH) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SUNKERN] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_SUNFLORA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_YANMA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM05_FLASH)), + + [SPECIES_WOOPER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM37_SANDSTORM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_QUAGSIRE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_ESPEON] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_UMBREON] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM49_SNATCH) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_MURKROW] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(TM49_SNATCH) + | TMHM(HM02_FLY)), + + [SPECIES_SLOWKING] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM08_DIVE)), + + [SPECIES_MISDREAVUS] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_UNOWN] = TMHM_LEARNSET(0), + + [SPECIES_WOBBUFFET] = TMHM_LEARNSET(0), + + [SPECIES_GIRAFARIG] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_PINECO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM37_SANDSTORM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_FORRETRESS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM37_SANDSTORM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_DUNSPARCE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_GLIGAR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_STEELIX] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SNUBBULL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_GRANBULL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_QWILFISH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_SCIZOR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SHUCKLE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_HERACROSS] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SNEASEL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM49_SNATCH) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_TEDDIURSA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_URSARING] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SLUGMA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MAGCARGO] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SWINUB] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_PILOSWINE] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_CORSOLA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_REMORAID] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_OCTILLERY] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_DELIBIRD] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM02_FLY)), + + [SPECIES_MANTINE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_SKARMORY] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM01_CUT) + | TMHM(HM02_FLY) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_HOUNDOUR] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM49_SNATCH) + | TMHM(TM50_OVERHEAT) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_HOUNDOOM] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM49_SNATCH) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_KINGDRA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_PHANPY] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_DONPHAN] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_PORYGON2] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_STANTLER] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM05_FLASH)), + + [SPECIES_SMEARGLE] = TMHM_LEARNSET(0), + + [SPECIES_TYROGUE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_HITMONTOP] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SMOOCHUM] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM05_FLASH)), + + [SPECIES_ELEKID] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MAGBY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MILTANK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_BLISSEY] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_RAIKOU] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM37_SANDSTORM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_ENTEI] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SUICUNE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM37_SANDSTORM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_LARVITAR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_PUPITAR] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_TYRANITAR] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM02_DRAGON_CLAW) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_LUGIA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM37_SANDSTORM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM47_STEEL_WING) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM02_FLY) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_HO_OH] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM47_STEEL_WING) + | TMHM(TM50_OVERHEAT) + | TMHM(HM02_FLY) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_CELEBI] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM37_SANDSTORM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_OLD_UNOWN_B] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_C] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_D] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_E] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_F] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_G] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_H] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_I] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_J] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_K] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_L] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_M] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_N] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_O] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_P] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_Q] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_R] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_S] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_T] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_U] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_V] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_W] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_X] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_Y] = TMHM_LEARNSET(0), + + [SPECIES_OLD_UNOWN_Z] = TMHM_LEARNSET(0), + + [SPECIES_TREECKO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_GROVYLE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SCEPTILE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM02_DRAGON_CLAW) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_TORCHIC] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_COMBUSKEN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_BLAZIKEN] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MUDKIP] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_MARSHTOMP] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_SWAMPERT] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_POOCHYENA] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM49_SNATCH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MIGHTYENA] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_ZIGZAGOON] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_LINOONE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_WURMPLE] = TMHM_LEARNSET(0), + + [SPECIES_SILCOON] = TMHM_LEARNSET(0), + + [SPECIES_BEAUTIFLY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_CASCOON] = TMHM_LEARNSET(0), + + [SPECIES_DUSTOX] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_LOTAD] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM05_FLASH)), + + [SPECIES_LOMBRE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_LUDICOLO] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_SEEDOT] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_NUZLEAF] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SHIFTRY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_NINCADA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_NINJASK] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_SHEDINJA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM46_THIEF) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_TAILLOW] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY)), + + [SPECIES_SWELLOW] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY)), + + [SPECIES_SHROOMISH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_BRELOOM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM49_SNATCH) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SPINDA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_WINGULL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY)), + + [SPECIES_PELIPPER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY) + | TMHM(HM03_SURF)), + + [SPECIES_SURSKIT] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_MASQUERAIN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_WAILMER] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_WAILORD] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_SKITTY] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH)), + + [SPECIES_DELCATTY] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_KECLEON] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_BALTOY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM05_FLASH)), + + [SPECIES_CLAYDOL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_NOSEPASS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_TORKOAL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SABLEYE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM49_SNATCH) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_BARBOACH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_WHISCASH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_LUVDISC] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_CORPHISH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL)), + + [SPECIES_CRAWDAUNT] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_FEEBAS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_MILOTIC] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_CARVANHA] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_SHARPEDO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_TRAPINCH] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_VIBRAVA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_FLYGON] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MAKUHITA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_HARIYAMA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_ELECTRIKE] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH)), + + [SPECIES_MANECTRIC] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH)), + + [SPECIES_NUMEL] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_CAMERUPT] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SPHEAL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_SEALEO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_WALREIN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_CACNEA] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_CACTURNE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH)), + + [SPECIES_SNORUNT] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH)), + + [SPECIES_GLALIE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH)), + + [SPECIES_LUNATONE] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM05_FLASH)), + + [SPECIES_SOLROCK] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM50_OVERHEAT) + | TMHM(HM05_FLASH)), + + [SPECIES_AZURILL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL)), + + [SPECIES_SPOINK] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_GRUMPIG] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_PLUSLE] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH)), + + [SPECIES_MINUN] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM05_FLASH)), + + [SPECIES_MAWILE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MEDITITE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_MEDICHAM] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SWABLU] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY)), + + [SPECIES_ALTARIA] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM47_STEEL_WING) + | TMHM(HM02_FLY) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_WYNAUT] = TMHM_LEARNSET(0), + + [SPECIES_DUSKULL] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_DUSCLOPS] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_ROSELIA] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM05_FLASH)), + + [SPECIES_SLAKOTH] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_VIGOROTH] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SLAKING] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_GULPIN] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SWALOT] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_TROPIUS] = TMHM_LEARNSET(TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM47_STEEL_WING) + | TMHM(HM01_CUT) + | TMHM(HM02_FLY) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_WHISMUR] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT)), + + [SPECIES_LOUDRED] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_EXPLOUD] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM50_OVERHEAT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_CLAMPERL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_HUNTAIL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM49_SNATCH) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_GOREBYSS] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_ABSOL] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM49_SNATCH) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SHUPPET] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_BANETTE] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_SEVIPER] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM49_SNATCH) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_ZANGOOSE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_RELICANTH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM03_SURF) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_ARON] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_LAIRON] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_AGGRON] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM02_DRAGON_CLAW) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_CASTFORM] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_VOLBEAT] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_ILLUMISE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(HM05_FLASH)), + + [SPECIES_LILEEP] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM37_SANDSTORM) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT)), + + [SPECIES_CRADILY] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM09_BULLET_SEED) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM19_GIGA_DRAIN) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_ANORITH] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_ARMALDO] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_RALTS] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_KIRLIA] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_GARDEVOIR] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM46_THIEF) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + + [SPECIES_BAGON] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SHELGON] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_SALAMENCE] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM47_STEEL_WING) + | TMHM(HM01_CUT) + | TMHM(HM02_FLY) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_BELDUM] = TMHM_LEARNSET(0), + + [SPECIES_METANG] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_METAGROSS] = TMHM_LEARNSET(TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM36_SLUDGE_BOMB) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_REGIROCK] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_REGICE] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_REGISTEEL] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM37_SANDSTORM) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_KYOGRE] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM07_HAIL) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_GROUDON] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM28_DIG) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM50_OVERHEAT) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_RAYQUAZA] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM08_BULK_UP) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM14_BLIZZARD) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM23_IRON_TAIL) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM35_FLAMETHROWER) + | TMHM(TM37_SANDSTORM) + | TMHM(TM38_FIRE_BLAST) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM50_OVERHEAT) + | TMHM(HM02_FLY) + | TMHM(HM03_SURF) + | TMHM(HM04_STRENGTH) + | TMHM(HM06_ROCK_SMASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_LATIAS] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM37_SANDSTORM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM47_STEEL_WING) + | TMHM(HM01_CUT) + | TMHM(HM02_FLY) + | TMHM(HM03_SURF) + | TMHM(HM05_FLASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_LATIOS] = TMHM_LEARNSET(TMHM(TM02_DRAGON_CLAW) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM05_ROAR) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM26_EARTHQUAKE) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM37_SANDSTORM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM47_STEEL_WING) + | TMHM(HM01_CUT) + | TMHM(HM02_FLY) + | TMHM(HM03_SURF) + | TMHM(HM05_FLASH) + | TMHM(HM07_WATERFALL) + | TMHM(HM08_DIVE)), + + [SPECIES_JIRACHI] = TMHM_LEARNSET(TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM37_SANDSTORM) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM48_SKILL_SWAP) + | TMHM(HM05_FLASH)), + + [SPECIES_DEOXYS] = TMHM_LEARNSET(TMHM(TM01_FOCUS_PUNCH) + | TMHM(TM03_WATER_PULSE) + | TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM13_ICE_BEAM) + | TMHM(TM15_HYPER_BEAM) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM22_SOLARBEAM) + | TMHM(TM24_THUNDERBOLT) + | TMHM(TM25_THUNDER) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM31_BRICK_BREAK) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM39_ROCK_TOMB) + | TMHM(TM40_AERIAL_ACE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM01_CUT) + | TMHM(HM04_STRENGTH) + | TMHM(HM05_FLASH) + | TMHM(HM06_ROCK_SMASH)), + + [SPECIES_CHIMECHO] = TMHM_LEARNSET(TMHM(TM04_CALM_MIND) + | TMHM(TM06_TOXIC) + | TMHM(TM10_HIDDEN_POWER) + | TMHM(TM11_SUNNY_DAY) + | TMHM(TM12_TAUNT) + | TMHM(TM16_LIGHT_SCREEN) + | TMHM(TM17_PROTECT) + | TMHM(TM18_RAIN_DANCE) + | TMHM(TM20_SAFEGUARD) + | TMHM(TM21_FRUSTRATION) + | TMHM(TM27_RETURN) + | TMHM(TM29_PSYCHIC) + | TMHM(TM30_SHADOW_BALL) + | TMHM(TM32_DOUBLE_TEAM) + | TMHM(TM33_REFLECT) + | TMHM(TM34_SHOCK_WAVE) + | TMHM(TM41_TORMENT) + | TMHM(TM42_FACADE) + | TMHM(TM43_SECRET_POWER) + | TMHM(TM44_REST) + | TMHM(TM45_ATTRACT) + | TMHM(TM48_SKILL_SWAP) + | TMHM(TM49_SNATCH) + | TMHM(HM05_FLASH)), + +}; + +#endif // GUARD_TMHM_LEARNSETS_H diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c index dc8bddd5a..c56fe7576 100644 --- a/src/easy_chat_2.c +++ b/src/easy_chat_2.c @@ -70,6 +70,8 @@ static u16 sub_80EB960(void); u8 sub_80EB9C8(void); static u16 sub_80EB9D8(void); +EWRAM_DATA u8 gUnknown_020388AC = 0; + static u8 gUnknown_03000740; const u16 InterviewPalette_0[] = INCBIN_U16("graphics/misc/interview_pal0.gbapal"); diff --git a/src/engine/clear_save_data_menu.c b/src/engine/clear_save_data_menu.c index 08fd5cd18..b6053715a 100644 --- a/src/engine/clear_save_data_menu.c +++ b/src/engine/clear_save_data_menu.c @@ -73,7 +73,7 @@ static void Task_ProcessMenuInput(u8 taskId) static void Task_ClearSaveData(u8 taskId) { - ClearSaveData(); + Save_EraseAllData(); DestroyTask(taskId); SetMainCallback2(CB2_SoftReset); } diff --git a/src/engine/link.c b/src/engine/link.c index 502715116..f93fb775f 100644 --- a/src/engine/link.c +++ b/src/engine/link.c @@ -410,7 +410,7 @@ static void LinkTestProcessKeyInput(void) if (gMain.newKeys & START_BUTTON) SetSuppressLinkErrorMessage(TRUE); if (gMain.newKeys & R_BUTTON) - TrySavingData(LINK_SAVE); + Save_WriteData(SAVE_LINK); if (gMain.newKeys & SELECT_BUTTON) sub_800832C(); if (gLinkTestDebugValuesEnabled) diff --git a/src/engine/main_menu.c b/src/engine/main_menu.c index a0b8b7020..5a3f55b29 100644 --- a/src/engine/main_menu.c +++ b/src/engine/main_menu.c @@ -1,4 +1,6 @@ #include "global.h" +#include "constants/songs.h" +#include "constants/species.h" #include "main_menu.h" #include "data2.h" #include "decompress.h" @@ -13,9 +15,8 @@ #include "overworld.h" #include "rtc.h" #include "save_menu_util.h" -#include "constants/songs.h" +#include "save.h" #include "sound.h" -#include "constants/species.h" #include "string_util.h" #include "strings.h" #include "task.h" @@ -28,8 +29,6 @@ extern struct PaletteFadeControl gPaletteFade; -extern u16 gSaveFileStatus; - extern const u8 gBirchSpeech_Welcome[]; extern const u8 gBirchSpeech_ThisIsPokemon[]; extern const u8 gBirchSpeech_WorldInhabitedByPokemon[]; @@ -284,12 +283,11 @@ void Task_MainMenuCheckSave(u8 taskId) switch (gSaveFileStatus) { - case 1: + case SAVE_STATUS_OK: if (IsMysteryGiftEnabled() == TRUE) gTasks[taskId].tMenuLayout = HAS_MYSTERY_GIFT; else gTasks[taskId].tMenuLayout = HAS_SAVED_GAME; - gTasks[taskId].func = Task_MainMenuCheckRtc; break; case 2: @@ -300,7 +298,7 @@ void Task_MainMenuCheckSave(u8 taskId) gTasks[taskId].tMenuLayout = HAS_NO_SAVED_GAME; gTasks[taskId].func = Task_MainMenuWaitForSaveErrorAck; break; - case 255: + case SAVE_STATUS_ERROR: Menu_DrawStdWindowFrame(2, 14, 27, 19); MenuPrintMessage(gSaveFileCorruptMessage, 3, 15); REG_WIN0H = WIN_RANGE(17, 223); @@ -313,12 +311,12 @@ void Task_MainMenuCheckSave(u8 taskId) else gTasks[taskId].tMenuLayout = HAS_SAVED_GAME; break; - case 0: + case SAVE_STATUS_EMPTY: default: gTasks[taskId].tMenuLayout = HAS_NO_SAVED_GAME; gTasks[taskId].func = Task_MainMenuCheckRtc; break; - case 4: + case SAVE_STATUS_NO_FLASH: Menu_DrawStdWindowFrame(2, 14, 27, 19); MenuPrintMessage(gBoardNotInstalledMessage, 3, 15); REG_WIN0H = WIN_RANGE(17, 223); diff --git a/src/engine/mystery_event_menu.c b/src/engine/mystery_event_menu.c index b7b7c047e..8fad563e6 100644 --- a/src/engine/mystery_event_menu.c +++ b/src/engine/mystery_event_menu.c @@ -289,7 +289,7 @@ static void CB2_MysteryEventMenu(void) unkVal = RunMysteryEventScript(gSharedMem); CpuFill32(0, gSharedMem, 0x7D4); if (!GetEventLoadMessage(gStringVar4, unkVal)) - TrySavingData(NORMAL_SAVE); + Save_WriteData(SAVE_NORMAL); gMain.state++; break; case 12: diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c index 75ca92e6a..a2660bf82 100644 --- a/src/engine/record_mixing.c +++ b/src/engine/record_mixing.c @@ -26,7 +26,7 @@ #include "tv.h" #include "ewram.h" -extern struct RecordMixingDayCareMail gUnknown_02038738; +EWRAM_DATA struct RecordMixingDayCareMail gUnknown_02038738 = {0}; extern u16 gSpecialVar_0x8005; u32 gUnknown_03005D2C; diff --git a/src/engine/reset_rtc_screen.c b/src/engine/reset_rtc_screen.c index a8b49a8eb..c7d45e929 100644 --- a/src/engine/reset_rtc_screen.c +++ b/src/engine/reset_rtc_screen.c @@ -576,7 +576,7 @@ void Task_ResetRtcScreen(u8 taskId) } break; case 4: - if (TrySavingData(0) == TRUE) + if (Save_WriteData(0) == SAVE_STATUS_OK) { ResetRtcScreen_ShowMessage(gSystemText_SaveCompleted); PlaySE(SE_PINPON); diff --git a/src/engine/save.c b/src/engine/save.c index 8b045eaaa..d7df98e5f 100644 --- a/src/engine/save.c +++ b/src/engine/save.c @@ -4,55 +4,132 @@ #include "save.h" #include "load_save.h" #include "overworld.h" +#include "pokemon.h" #include "save_failed_screen.h" #include "ewram.h" -#define GETVALIDSTATUSBITFIELD ((1 << ARRAY_COUNT(gSaveSectionLocations)) - 1) -#define GETCHUNKSIZE(chunk, n) ((sizeof(chunk) - (0xF80 * (n - 1))) >= 0xF80 ? 0xF80 : (sizeof(chunk) - (0xF80 * (n - 1)))) -#define GETBLOCKOFFSET(n) (0xF80 * (n - 1)) -#define TOTALNUMSECTORS ((ARRAY_COUNT(gSaveSectionLocations) * 2) + (ARRAY_COUNT(gHallOfFameSaveSectionLocations) * 2)) // there are 2 slots, so double each array count and get the sum. +#define FILE_SIGNATURE 0x08012025 // signature value to determine if a sector is in use -u16 gLastWrittenSector; -u32 gLastSaveCounter; +//#define TOTAL_FLASH_SECTORS ((ARRAY_COUNT(sSaveBlockChunks) * 2) + (ARRAY_COUNT(sHallOfFameChunks) * 2)) // there are 2 slots, so double each array count and get the sum. +#define TOTAL_FLASH_SECTORS 32 + +struct SaveBlockChunk +{ + u8 *data; + u16 size; +}; + +struct SaveSector +{ + u8 data[0xFF4]; + u16 id; + u16 checksum; + u32 signature; + u32 counter; +}; // size is 0x1000 + +// headless save section? +struct UnkSaveSection +{ + u8 data[0xFF4]; + u32 signature; +}; // size is 0xFF8 + +static u8 WriteSingleChunk(u16, const struct SaveBlockChunk *); +static u8 HandleWriteSectorNBytes(u8 sector, u8 *data, u16 size); +static u8 TryWriteSector(u8, u8 *); +static u32 RestoreSaveBackupVarsAndIncrement(const struct SaveBlockChunk *location); +static u32 RestoreSaveBackupVars(const struct SaveBlockChunk *location); +static u8 sub_812550C(u16 a1, const struct SaveBlockChunk *location); +static u8 sub_812556C(u16 a1, const struct SaveBlockChunk *location); +static u8 sub_81255B8(u16, const struct SaveBlockChunk *location); +static u8 WriteSomeFlashByteToPrevSector(u16 a1, const struct SaveBlockChunk *location); +static u8 WriteSomeFlashByte0x25ToPrevSector(u16 a1, const struct SaveBlockChunk *location); +static u8 sub_812587C(u16 a1, const struct SaveBlockChunk *location); +static u8 sub_81258BC(u16, const struct SaveBlockChunk *location); +static u8 GetSaveValidStatus(const struct SaveBlockChunk *location); +static u8 ReadSomeUnknownSectorAndVerify(u8 a1, u8 *data, u16 size); +static u8 DoReadFlashWholeSection(u8, struct SaveSector *); +static u16 CalculateChecksum(void *, u16); +bool8 unref_sub_8125F4C(struct UnkSaveSection *a1); +u8 unref_sub_8125FA0(void); +u8 unref_sub_8125FF0(u8 *data, u16 size); +u8 unref_sub_8126068(u8 sector, u8 *data, u32 size); +u8 unref_sub_8126080(u8 sector, u8 *data); + +// Sector num to begin writing save data. Sectors are rotated each time the game is saved. (possibly to avoid wear on flash memory?) +u16 gFirstSaveSector; +u32 gPrevSaveCounter; u16 gLastKnownGoodSector; u32 gDamagedSaveSectors; u32 gSaveCounter; -struct SaveSection *gFastSaveSection; // the pointer is in fast IWRAM but may sometimes point to the slower EWRAM. +struct SaveSector *gFastSaveSection; // the pointer is in fast IWRAM but may sometimes point to the slower EWRAM. u16 gUnknown_03005EB4; u16 gSaveFileStatus; u32 gGameContinueCallback; -extern struct PokemonStorage gPokemonStorage; - static EWRAM_DATA u32 gLastSaveSectorStatus = 0; // used but in an unferenced function, so unused -const struct SaveSectionLocation gSaveSectionLocations[] = -{ - {((u8 *) &gSaveBlock2) + GETBLOCKOFFSET(1), GETCHUNKSIZE(gSaveBlock2, 1)}, - {((u8 *) &gSaveBlock1) + GETBLOCKOFFSET(1), GETCHUNKSIZE(gSaveBlock1, 1)}, - {((u8 *) &gSaveBlock1) + GETBLOCKOFFSET(2), GETCHUNKSIZE(gSaveBlock1, 2)}, - {((u8 *) &gSaveBlock1) + GETBLOCKOFFSET(3), GETCHUNKSIZE(gSaveBlock1, 3)}, - {((u8 *) &gSaveBlock1) + GETBLOCKOFFSET(4), GETCHUNKSIZE(gSaveBlock1, 4)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(1), GETCHUNKSIZE(gPokemonStorage, 1)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(2), GETCHUNKSIZE(gPokemonStorage, 2)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(3), GETCHUNKSIZE(gPokemonStorage, 3)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(4), GETCHUNKSIZE(gPokemonStorage, 4)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(5), GETCHUNKSIZE(gPokemonStorage, 5)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(6), GETCHUNKSIZE(gPokemonStorage, 6)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(7), GETCHUNKSIZE(gPokemonStorage, 7)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(8), GETCHUNKSIZE(gPokemonStorage, 8)}, - {((u8 *) &gPokemonStorage) + GETBLOCKOFFSET(9), GETCHUNKSIZE(gPokemonStorage, 9)} +// Each 4 KiB flash sector contains 3968 bytes of actual data followed by a 128 byte footer +#define SECTOR_DATA_SIZE 3968 +#define SECTOR_FOOTER_SIZE 128 + +/* + * Sector Layout: + * + * Sectors 0 - 13: Save Slot 1 + * Sectors 14 - 27: Save Slot 2 + * Sectors 28 - 29: Hall of Fame + * Sectors 30 - 31: e-Reader battle tower data, maybe? + * + * There are two save slots for saving the player's game data. We alternate between + * them each time the game is saved, so that if the current save slot is corrupt, + * we can load the previous one. We also rotate the sectors in each save slot + * so that the same data is not always being written to the same sector. This + * might be done to reduce wear on the flash memory, but I'm not sure, since all + * 14 sectors get written anyway. + */ + +#define HALL_OF_FAME_SECTOR 28 + +#define NUM_SECTORS_PER_SAVE_SLOT 14 // Number of sectors occupied by a save slot +#define NUM_HALL_OF_FAME_SECTORS 2 + +// Divide save blocks into individual chunks to be written to flash sectors + +#define SAVEBLOCK_CHUNK(structure, chunkNum) \ +{ \ + (u8 *)&structure + chunkNum * SECTOR_DATA_SIZE, \ + min(sizeof(structure) - chunkNum * SECTOR_DATA_SIZE, SECTOR_DATA_SIZE) \ +} \ + +static const struct SaveBlockChunk sSaveBlockChunks[] = +{ + SAVEBLOCK_CHUNK(gSaveBlock2, 0), + + SAVEBLOCK_CHUNK(gSaveBlock1, 0), + SAVEBLOCK_CHUNK(gSaveBlock1, 1), + SAVEBLOCK_CHUNK(gSaveBlock1, 2), + SAVEBLOCK_CHUNK(gSaveBlock1, 3), + + SAVEBLOCK_CHUNK(gPokemonStorage, 0), + SAVEBLOCK_CHUNK(gPokemonStorage, 1), + SAVEBLOCK_CHUNK(gPokemonStorage, 2), + SAVEBLOCK_CHUNK(gPokemonStorage, 3), + SAVEBLOCK_CHUNK(gPokemonStorage, 4), + SAVEBLOCK_CHUNK(gPokemonStorage, 5), + SAVEBLOCK_CHUNK(gPokemonStorage, 6), + SAVEBLOCK_CHUNK(gPokemonStorage, 7), + SAVEBLOCK_CHUNK(gPokemonStorage, 8), }; -const struct SaveSectionLocation gHallOfFameSaveSectionLocations[] = +static const struct SaveBlockChunk sHallOfFameChunks[] = { - {((u8 *) eHallOfFame) + GETBLOCKOFFSET(1), GETCHUNKSIZE(struct HallOfFame, 1)}, // eHallOfFame is not a proper sym, so the struct must be used. - {((u8 *) eHallOfFame) + GETBLOCKOFFSET(2), GETCHUNKSIZE(struct HallOfFame, 2)} + SAVEBLOCK_CHUNK(*eHallOfFame, 0), + SAVEBLOCK_CHUNK(*eHallOfFame, 1), }; -const u8 gFlashSectors[] = { 0x1E, 0x1F }; - -void ClearSaveData(void) +void Save_EraseAllData(void) { u16 i; @@ -60,27 +137,34 @@ void ClearSaveData(void) EraseFlashSector(i); } -void ResetSaveCounters(void) +void Save_ResetSaveCounters(void) { gSaveCounter = 0; - gLastWrittenSector = 0; + gFirstSaveSector = 0; gDamagedSaveSectors = 0; } -bool32 SetDamagedSectorBits(u8 op, u8 bit) +enum +{ + SECTOR_DAMAGED, + SECTOR_OK, + SECTOR_CHECK, // unused +}; + +static bool32 SetSectorDamagedStatus(u8 op, u8 sectorNum) { bool32 retVal = FALSE; switch (op) { - case ENABLE: - gDamagedSaveSectors |= (1 << bit); + case SECTOR_DAMAGED: + gDamagedSaveSectors |= (1 << sectorNum); break; - case DISABLE: - gDamagedSaveSectors &= ~(1 << bit); + case SECTOR_OK: + gDamagedSaveSectors &= ~(1 << sectorNum); break; - case CHECK: // unused - if (gDamagedSaveSectors & (1 << bit)) + case SECTOR_CHECK: // unused + if (gDamagedSaveSectors & (1 << sectorNum)) retVal = TRUE; break; } @@ -88,163 +172,166 @@ bool32 SetDamagedSectorBits(u8 op, u8 bit) return retVal; } -u8 save_write_to_flash(u16 a1, const struct SaveSectionLocation *location) +// If chunkId is 0xFFFF, this function will write all of the chunks pointed to by 'chunks'. +// Otherwise, it will write a single chunk with the given 'chunkId'. +static u8 WriteSaveBlockChunks(u16 chunkId, const struct SaveBlockChunk *chunks) { u32 retVal; u16 i; gFastSaveSection = eSaveSection; - if (a1 != 0xFFFF) // for link + if (chunkId != 0xFFFF) // write single chunk { - retVal = HandleWriteSector(a1, location); + retVal = WriteSingleChunk(chunkId, chunks); } - else + else // write all chunks { - gLastKnownGoodSector = gLastWrittenSector; // backup the current written sector before attempting to write. - gLastSaveCounter = gSaveCounter; - gLastWrittenSector++; - gLastWrittenSector = gLastWrittenSector % ARRAY_COUNT(gSaveSectionLocations); + gLastKnownGoodSector = gFirstSaveSector; + gPrevSaveCounter = gSaveCounter; + gFirstSaveSector++; + gFirstSaveSector %= NUM_SECTORS_PER_SAVE_SLOT; gSaveCounter++; - retVal = 1; + retVal = SAVE_STATUS_OK; - for (i = 0; i < ARRAY_COUNT(gSaveSectionLocations); i++) - HandleWriteSector(i, location); + for (i = 0; i < NUM_SECTORS_PER_SAVE_SLOT; i++) + WriteSingleChunk(i, chunks); + // Check for any bad sectors if (gDamagedSaveSectors != 0) // skip the damaged sector. { - retVal = 0xFF; - gLastWrittenSector = gLastKnownGoodSector; - gSaveCounter = gLastSaveCounter; + retVal = SAVE_STATUS_ERROR; + gFirstSaveSector = gLastKnownGoodSector; + gSaveCounter = gPrevSaveCounter; } } return retVal; } -u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location) +static u8 WriteSingleChunk(u16 chunkId, const struct SaveBlockChunk *chunks) { u16 i; - u16 sector; - u8 *data; - u16 size; + u16 sectorNum; + u8 *chunkData; + u16 chunkSize; - sector = a1 + gLastWrittenSector; - sector %= ARRAY_COUNT(gSaveSectionLocations); - sector += ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); + // select sector number + sectorNum = chunkId + gFirstSaveSector; + sectorNum %= NUM_SECTORS_PER_SAVE_SLOT; + // select save slot + sectorNum += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); - data = location[a1].data; - size = location[a1].size; + chunkData = chunks[chunkId].data; + chunkSize = chunks[chunkId].size; // clear save section. - for (i = 0; i < sizeof(struct SaveSection); i++) - ((char *)gFastSaveSection)[i] = 0; + for (i = 0; i < sizeof(struct SaveSector); i++) + ((u8 *)gFastSaveSection)[i] = 0; - gFastSaveSection->id = a1; - gFastSaveSection->security = UNKNOWN_CHECK_VALUE; + gFastSaveSection->id = chunkId; + gFastSaveSection->signature = FILE_SIGNATURE; gFastSaveSection->counter = gSaveCounter; + for (i = 0; i < chunkSize; i++) + gFastSaveSection->data[i] = chunkData[i]; + gFastSaveSection->checksum = CalculateChecksum(chunkData, chunkSize); - for (i = 0; i < size; i++) - gFastSaveSection->data[i] = data[i]; - - gFastSaveSection->checksum = CalculateChecksum(data, size); - return TryWriteSector(sector, gFastSaveSection->data); + return TryWriteSector(sectorNum, gFastSaveSection->data); } -u8 HandleWriteSectorNBytes(u8 sector, u8 *data, u16 size) +static u8 HandleWriteSectorNBytes(u8 sectorNum, u8 *data, u16 size) { u16 i; - struct SaveSection *section = eSaveSection; + struct SaveSector *section = eSaveSection; - for (i = 0; i < sizeof(struct SaveSection); i++) + for (i = 0; i < sizeof(struct SaveSector); i++) ((char *)section)[i] = 0; - section->security = UNKNOWN_CHECK_VALUE; - + section->signature = FILE_SIGNATURE; for (i = 0; i < size; i++) section->data[i] = data[i]; - section->id = CalculateChecksum(data, size); // though this appears to be incorrect, it might be some sector checksum instead of a whole save checksum and only appears to be relevent to HOF data, if used. - return TryWriteSector(sector, section->data); + + return TryWriteSector(sectorNum, section->data); } -u8 TryWriteSector(u8 sector, u8 *data) +static u8 TryWriteSector(u8 sectorNum, u8 *data) { - if (ProgramFlashSectorAndVerify(sector, data) != 0) // is damaged? + if (ProgramFlashSectorAndVerify(sectorNum, data) != 0) // is damaged? { - SetDamagedSectorBits(ENABLE, sector); // set damaged sector bits. - return 0xFF; + SetSectorDamagedStatus(SECTOR_DAMAGED, sectorNum); // set damaged sector bits. + return SAVE_STATUS_ERROR; } else { - SetDamagedSectorBits(DISABLE, sector); // unset damaged sector bits. it's safe now. - return 1; + SetSectorDamagedStatus(SECTOR_OK, sectorNum); // unset damaged sector bits. it's safe now. + return SAVE_STATUS_OK; } } -u32 RestoreSaveBackupVarsAndIncrement(const struct SaveSectionLocation *location) // location is unused +static u32 RestoreSaveBackupVarsAndIncrement(const struct SaveBlockChunk *chunk) // chunk is unused { gFastSaveSection = eSaveSection; - gLastKnownGoodSector = gLastWrittenSector; - gLastSaveCounter = gSaveCounter; - gLastWrittenSector++; - gLastWrittenSector = gLastWrittenSector % ARRAY_COUNT(gSaveSectionLocations); + gLastKnownGoodSector = gFirstSaveSector; + gPrevSaveCounter = gSaveCounter; + gFirstSaveSector++; + gFirstSaveSector %= NUM_SECTORS_PER_SAVE_SLOT; gSaveCounter++; gUnknown_03005EB4 = 0; gDamagedSaveSectors = 0; return 0; } -u32 RestoreSaveBackupVars(const struct SaveSectionLocation *location) // only ever called once, and gSaveBlock2 is passed to this function. location is unused +static u32 RestoreSaveBackupVars(const struct SaveBlockChunk *chunk) // chunk is unused { gFastSaveSection = eSaveSection; - gLastKnownGoodSector = gLastWrittenSector; - gLastSaveCounter = gSaveCounter; + gLastKnownGoodSector = gFirstSaveSector; + gPrevSaveCounter = gSaveCounter; gUnknown_03005EB4 = 0; gDamagedSaveSectors = 0; return 0; } -u8 sub_812550C(u16 a1, const struct SaveSectionLocation *location) +static u8 sub_812550C(u16 a1, const struct SaveBlockChunk *chunk) { u8 retVal; if (gUnknown_03005EB4 < a1 - 1) { - retVal = 1; - HandleWriteSector(gUnknown_03005EB4, location); + retVal = SAVE_STATUS_OK; + WriteSingleChunk(gUnknown_03005EB4, chunk); gUnknown_03005EB4++; if (gDamagedSaveSectors) { - retVal = 0xFF; - gLastWrittenSector = gLastKnownGoodSector; - gSaveCounter = gLastSaveCounter; + retVal = SAVE_STATUS_ERROR; + gFirstSaveSector = gLastKnownGoodSector; + gSaveCounter = gPrevSaveCounter; } } else { - retVal = 0xFF; + retVal = SAVE_STATUS_ERROR; } return retVal; } -u8 sub_812556C(u16 a1, const struct SaveSectionLocation *location) +static u8 sub_812556C(u16 a1, const struct SaveBlockChunk *chunk) { - u8 retVal = 1; + u8 retVal = SAVE_STATUS_OK; - sub_81255B8(a1 - 1, location); + sub_81255B8(a1 - 1, chunk); if (gDamagedSaveSectors) { - retVal = 0xFF; - gLastWrittenSector = gLastKnownGoodSector; - gSaveCounter = gLastSaveCounter; + retVal = SAVE_STATUS_ERROR; + gFirstSaveSector = gLastKnownGoodSector; + gSaveCounter = gPrevSaveCounter; } return retVal; } -u8 sub_81255B8(u16 a1, const struct SaveSectionLocation *location) +static u8 sub_81255B8(u16 chunkId, const struct SaveBlockChunk *chunks) { u16 i; u16 sector; @@ -252,19 +339,21 @@ u8 sub_81255B8(u16 a1, const struct SaveSectionLocation *location) u16 size; u8 status; - sector = a1 + gLastWrittenSector; - sector %= ARRAY_COUNT(gSaveSectionLocations); - sector += ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); + // select sector number + sector = chunkId + gFirstSaveSector; + sector %= NUM_SECTORS_PER_SAVE_SLOT; + // select save slot + sector += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); - data = location[a1].data; - size = location[a1].size; + data = chunks[chunkId].data; + size = chunks[chunkId].size; // clear temp save section. - for (i = 0; i < sizeof(struct SaveSection); i++) + for (i = 0; i < sizeof(struct SaveSector); i++) ((char *)gFastSaveSection)[i] = 0; - gFastSaveSection->id = a1; - gFastSaveSection->security = UNKNOWN_CHECK_VALUE; + gFastSaveSection->id = chunkId; + gFastSaveSection->signature = FILE_SIGNATURE; gFastSaveSection->counter = gSaveCounter; // set temp section's data. @@ -276,275 +365,275 @@ u8 sub_81255B8(u16 a1, const struct SaveSectionLocation *location) EraseFlashSector(sector); - status = 1; + status = SAVE_STATUS_OK; for (i = 0; i < sizeof(struct UnkSaveSection); i++) { if (ProgramFlashByte(sector, i, gFastSaveSection->data[i])) { - status = 0xFF; + status = SAVE_STATUS_ERROR; break; } } - if (status == 0xFF) + if (status == SAVE_STATUS_ERROR) { - SetDamagedSectorBits(ENABLE, sector); - return 0xFF; + SetSectorDamagedStatus(SECTOR_DAMAGED, sector); + return SAVE_STATUS_ERROR; } else { - status = 1; + status = SAVE_STATUS_OK; for (i = 0; i < 7; i++) { if (ProgramFlashByte(sector, 0xFF9 + i, ((u8 *)gFastSaveSection)[0xFF9 + i])) { - status = 0xFF; + status = SAVE_STATUS_ERROR; break; } } - if (status == 0xFF) + if (status == SAVE_STATUS_ERROR) { - SetDamagedSectorBits(ENABLE, sector); - return 0xFF; + SetSectorDamagedStatus(SECTOR_DAMAGED, sector); + return SAVE_STATUS_ERROR; } else { - SetDamagedSectorBits(DISABLE, sector); - return 1; + SetSectorDamagedStatus(SECTOR_OK, sector); + return SAVE_STATUS_OK; } } } -u8 sub_8125758(u16 a1, const struct SaveSectionLocation *location) +static u8 WriteSomeFlashByteToPrevSector(u16 a1, const struct SaveBlockChunk *chunk) { u16 sector; - sector = a1 + gLastWrittenSector - 1; - sector %= ARRAY_COUNT(gSaveSectionLocations); - sector += ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); + // select sector number + sector = a1 + gFirstSaveSector - 1; + sector %= NUM_SECTORS_PER_SAVE_SLOT; + // select save slot + sector += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), ((u8 *)gFastSaveSection)[sizeof(struct UnkSaveSection)])) { // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. - SetDamagedSectorBits(ENABLE, sector); - gLastWrittenSector = gLastKnownGoodSector; - gSaveCounter = gLastSaveCounter; - return 0xFF; + SetSectorDamagedStatus(SECTOR_DAMAGED, sector); + gFirstSaveSector = gLastKnownGoodSector; + gSaveCounter = gPrevSaveCounter; + return SAVE_STATUS_ERROR; } else { - SetDamagedSectorBits(DISABLE, sector); - return 1; + SetSectorDamagedStatus(SECTOR_OK, sector); + return SAVE_STATUS_OK; } } -u8 sub_81257F0(u16 a1, const struct SaveSectionLocation *location) +static u8 WriteSomeFlashByte0x25ToPrevSector(u16 a1, const struct SaveBlockChunk *chunk) { u16 sector; - sector = a1 + gLastWrittenSector - 1; - sector %= ARRAY_COUNT(gSaveSectionLocations); - sector += ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); + sector = a1 + gFirstSaveSector - 1; + sector %= NUM_SECTORS_PER_SAVE_SLOT; + sector += NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); if (ProgramFlashByte(sector, sizeof(struct UnkSaveSection), 0x25)) { // sector is damaged, so enable the bit in gDamagedSaveSectors and restore the last written sector and save counter. - SetDamagedSectorBits(ENABLE, sector); - gLastWrittenSector = gLastKnownGoodSector; - gSaveCounter = gLastSaveCounter; - return 0xFF; + SetSectorDamagedStatus(SECTOR_DAMAGED, sector); + gFirstSaveSector = gLastKnownGoodSector; + gSaveCounter = gPrevSaveCounter; + return SAVE_STATUS_ERROR; } else { - SetDamagedSectorBits(DISABLE, sector); - return 1; + SetSectorDamagedStatus(SECTOR_OK, sector); + return SAVE_STATUS_OK; } } -u8 sub_812587C(u16 a1, const struct SaveSectionLocation *location) +static u8 sub_812587C(u16 a1, const struct SaveBlockChunk *chunk) { u8 retVal; gFastSaveSection = eSaveSection; if (a1 != 0xFFFF) { - retVal = 0xFF; + retVal = SAVE_STATUS_ERROR; } else { - retVal = GetSaveValidStatus(location); - sub_81258BC(0xFFFF, location); + retVal = GetSaveValidStatus(chunk); + sub_81258BC(0xFFFF, chunk); } return retVal; } -u8 sub_81258BC(u16 a1, const struct SaveSectionLocation *location) +static u8 sub_81258BC(u16 a1, const struct SaveBlockChunk *chunks) { u16 i; u16 checksum; - u16 v3 = ARRAY_COUNT(gSaveSectionLocations) * (gSaveCounter % 2); + u16 sector = NUM_SECTORS_PER_SAVE_SLOT * (gSaveCounter % 2); u16 id; - for (i = 0; i < ARRAY_COUNT(gSaveSectionLocations); i++) + for (i = 0; i < NUM_SECTORS_PER_SAVE_SLOT; i++) { - DoReadFlashWholeSection(i + v3, gFastSaveSection); + DoReadFlashWholeSection(i + sector, gFastSaveSection); id = gFastSaveSection->id; if (id == 0) - gLastWrittenSector = i; - checksum = CalculateChecksum(gFastSaveSection->data, location[id].size); - if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE + gFirstSaveSector = i; + checksum = CalculateChecksum(gFastSaveSection->data, chunks[id].size); + if (gFastSaveSection->signature == FILE_SIGNATURE && gFastSaveSection->checksum == checksum) { u16 j; - for (j = 0; j < location[id].size; j++) - location[id].data[j] = gFastSaveSection->data[j]; + for (j = 0; j < chunks[id].size; j++) + chunks[id].data[j] = gFastSaveSection->data[j]; } } return 1; } -u8 GetSaveValidStatus(const struct SaveSectionLocation *location) +static u8 GetSaveValidStatus(const struct SaveBlockChunk *chunks) { - u16 i; + u16 sector; + bool8 signatureValid; u16 checksum; - u32 saveSlot1Counter = 0; - u32 saveSlot2Counter = 0; - u32 slotCheckField = 0; - bool8 securityPassed = FALSE; - u8 saveSlot1Status; - u8 saveSlot2Status; + u32 slot1saveCounter = 0; + u32 slot2saveCounter = 0; + u8 slot1Status; + u8 slot2Status; + u32 validSectors; + const u32 ALL_SECTORS = (1 << NUM_SECTORS_PER_SAVE_SLOT) - 1; // bitmask of all saveblock sectors // check save slot 1. - for (i = 0; i < ARRAY_COUNT(gSaveSectionLocations); i++) + validSectors = 0; + signatureValid = FALSE; + for (sector = 0; sector < NUM_SECTORS_PER_SAVE_SLOT; sector++) { - DoReadFlashWholeSection(i, gFastSaveSection); - if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE) + DoReadFlashWholeSection(sector, gFastSaveSection); + if (gFastSaveSection->signature == FILE_SIGNATURE) { - securityPassed = TRUE; - checksum = CalculateChecksum(gFastSaveSection->data, location[gFastSaveSection->id].size); + signatureValid = TRUE; + checksum = CalculateChecksum(gFastSaveSection->data, chunks[gFastSaveSection->id].size); if (gFastSaveSection->checksum == checksum) { - saveSlot1Counter = gFastSaveSection->counter; - slotCheckField |= 1 << gFastSaveSection->id; + slot1saveCounter = gFastSaveSection->counter; + validSectors |= 1 << gFastSaveSection->id; } } } - if (securityPassed) + if (signatureValid) { - if (slotCheckField == GETVALIDSTATUSBITFIELD) - saveSlot1Status = 1; + if (validSectors == ALL_SECTORS) + slot1Status = SAVE_STATUS_OK; else - saveSlot1Status = 255; + slot1Status = SAVE_STATUS_ERROR; } else { - saveSlot1Status = 0; + slot1Status = SAVE_STATUS_EMPTY; } - slotCheckField = 0; - securityPassed = FALSE; - // check save slot 2. - for (i = 0; i < ARRAY_COUNT(gSaveSectionLocations); i++) + validSectors = 0; + signatureValid = FALSE; + for (sector = 0; sector < NUM_SECTORS_PER_SAVE_SLOT; sector++) { - DoReadFlashWholeSection(i + ARRAY_COUNT(gSaveSectionLocations), gFastSaveSection); - if (gFastSaveSection->security == UNKNOWN_CHECK_VALUE) + DoReadFlashWholeSection(NUM_SECTORS_PER_SAVE_SLOT + sector, gFastSaveSection); + if (gFastSaveSection->signature == FILE_SIGNATURE) { - securityPassed = TRUE; - checksum = CalculateChecksum(gFastSaveSection->data, location[gFastSaveSection->id].size); + signatureValid = TRUE; + checksum = CalculateChecksum(gFastSaveSection->data, chunks[gFastSaveSection->id].size); if (gFastSaveSection->checksum == checksum) { - saveSlot2Counter = gFastSaveSection->counter; - slotCheckField |= 1 << gFastSaveSection->id; + slot2saveCounter = gFastSaveSection->counter; + validSectors |= 1 << gFastSaveSection->id; } } } - if (securityPassed) + if (signatureValid) { - if (slotCheckField == GETVALIDSTATUSBITFIELD) - saveSlot2Status = 1; + if (validSectors == ALL_SECTORS) + slot2Status = SAVE_STATUS_OK; else - saveSlot2Status = 255; + slot2Status = SAVE_STATUS_ERROR; } else { - saveSlot2Status = 0; + slot2Status = SAVE_STATUS_EMPTY; } - if (saveSlot1Status == 1 && saveSlot2Status == 1) + if (slot1Status == SAVE_STATUS_OK && slot2Status == SAVE_STATUS_OK) { - if ((saveSlot1Counter == -1 && saveSlot2Counter == 0) || (saveSlot1Counter == 0 && saveSlot2Counter == -1)) + // Choose counter of the most recent save file + if ((slot1saveCounter == -1 && slot2saveCounter == 0) || (slot1saveCounter == 0 && slot2saveCounter == -1)) { - if ((unsigned)(saveSlot1Counter + 1) < (unsigned)(saveSlot2Counter + 1)) - { - gSaveCounter = saveSlot2Counter; - } + if ((unsigned)(slot1saveCounter + 1) < (unsigned)(slot2saveCounter + 1)) + gSaveCounter = slot2saveCounter; else - { - gSaveCounter = saveSlot1Counter; - } + gSaveCounter = slot1saveCounter; } else { - if (saveSlot1Counter < saveSlot2Counter) - { - gSaveCounter = saveSlot2Counter; - } + if (slot1saveCounter < slot2saveCounter) + gSaveCounter = slot2saveCounter; else - { - gSaveCounter = saveSlot1Counter; - } + gSaveCounter = slot1saveCounter; } - return 1; + return SAVE_STATUS_OK; } - if (saveSlot1Status == 1) + if (slot1Status == SAVE_STATUS_OK) { - gSaveCounter = saveSlot1Counter; - if (saveSlot2Status == 255) - return 255; - return 1; + gSaveCounter = slot1saveCounter; + if (slot2Status == SAVE_STATUS_ERROR) + return SAVE_STATUS_ERROR; + else + return SAVE_STATUS_OK; } - if (saveSlot2Status == 1) + if (slot2Status == SAVE_STATUS_OK) { - gSaveCounter = saveSlot2Counter; - if (saveSlot1Status == 255) - return 255; - return 1; + gSaveCounter = slot2saveCounter; + if (slot1Status == SAVE_STATUS_ERROR) + return SAVE_STATUS_ERROR; + else + return SAVE_STATUS_OK; } - if (saveSlot1Status == 0 && saveSlot2Status == 0) + if (slot1Status == SAVE_STATUS_EMPTY && slot2Status == SAVE_STATUS_EMPTY) { gSaveCounter = 0; - gLastWrittenSector = 0; - return 0; + gFirstSaveSector = 0; + return SAVE_STATUS_EMPTY; } gSaveCounter = 0; - gLastWrittenSector = 0; + gFirstSaveSector = 0; return 2; } -u8 sub_8125B88(u8 a1, u8 *data, u16 size) +static u8 ReadSomeUnknownSectorAndVerify(u8 sector, u8 *data, u16 size) { u16 i; - struct SaveSection *section = eSaveSection; - DoReadFlashWholeSection(a1, section); - if (section->security == UNKNOWN_CHECK_VALUE) + struct SaveSector *section = eSaveSection; + + DoReadFlashWholeSection(sector, section); + if (section->signature == FILE_SIGNATURE) { u16 checksum = CalculateChecksum(section->data, size); if (section->id == checksum) { for (i = 0; i < size; i++) data[i] = section->data[i]; - return 1; + return SAVE_STATUS_OK; } else { @@ -553,17 +642,17 @@ u8 sub_8125B88(u8 a1, u8 *data, u16 size) } else { - return 0; + return SAVE_STATUS_EMPTY; } } -u8 DoReadFlashWholeSection(u8 sector, struct SaveSection *section) +static u8 DoReadFlashWholeSection(u8 sector, struct SaveSector *section) { - ReadFlash(sector, 0, section->data, sizeof(struct SaveSection)); + ReadFlash(sector, 0, section->data, sizeof(struct SaveSector)); return 1; } -u16 CalculateChecksum(void *data, u16 size) +static u16 CalculateChecksum(void *data, u16 size) { u16 i; u32 checksum = 0; @@ -651,55 +740,60 @@ void sub_813B79C() } #endif -u8 HandleSavingData(u8 saveType) +u8 Save_WriteDataInternal(u8 saveType) { u8 i; + switch (saveType) { - case HOF_DELETE_SAVE: // deletes HOF before overwriting HOF completely. unused - for (i = (ARRAY_COUNT(gSaveSectionLocations) * 2 + 0); i < TOTALNUMSECTORS; i++) + case SAVE_HALL_OF_FAME_ERASE_BEFORE: // wipes all hall of fame data, then saves hall of fame. unused + for (i = HALL_OF_FAME_SECTOR; i < TOTAL_FLASH_SECTORS; i++) EraseFlashSector(i); - case HOF_SAVE: // hall of fame. + // fall through + case SAVE_HALL_OF_FAME: // hall of fame. if (GetGameStat(10) < 999) IncrementGameStat(10); - for (i = 0; i < ARRAY_COUNT(gHallOfFameSaveSectionLocations); i++) - HandleWriteSectorNBytes((ARRAY_COUNT(gSaveSectionLocations) * 2 + 0) + i, gHallOfFameSaveSectionLocations[i].data, gHallOfFameSaveSectionLocations[i].size); + for (i = 0; i < NUM_HALL_OF_FAME_SECTORS; i++) + HandleWriteSectorNBytes(HALL_OF_FAME_SECTOR + i, sHallOfFameChunks[i].data, sHallOfFameChunks[i].size); SaveSerializedGame(); - save_write_to_flash(0xFFFF, gSaveSectionLocations); + WriteSaveBlockChunks(0xFFFF, sSaveBlockChunks); break; - case NORMAL_SAVE: // normal save. also called by overwriting your own save. + case SAVE_NORMAL: // normal save. also called by overwriting your own save. default: SaveSerializedGame(); - save_write_to_flash(0xFFFF, gSaveSectionLocations); + WriteSaveBlockChunks(0xFFFF, sSaveBlockChunks); break; - case LINK_SAVE: // link save. updates only gSaveBlock1 and gSaveBlock2. + case SAVE_LINK: // link save. updates only gSaveBlock1 and gSaveBlock2. SaveSerializedGame(); for (i = 0; i < 5; i++) - save_write_to_flash(i, gSaveSectionLocations); + WriteSaveBlockChunks(i, sSaveBlockChunks); break; - case EREADER_SAVE: // used in mossdeep "game corner" before/after battling old man e-reader trainer + case SAVE_EREADER: // used in mossdeep "game corner" before/after battling old man e-reader trainer SaveSerializedGame(); - save_write_to_flash(0, gSaveSectionLocations); + WriteSaveBlockChunks(0, sSaveBlockChunks); break; - case DIFFERENT_FILE_SAVE: // there is a different file, so erase the file and overwrite it completely. - for (i = (ARRAY_COUNT(gSaveSectionLocations) * 2 + 0); i < TOTALNUMSECTORS; i++) - EraseFlashSector(i); // erase HOF. + case SAVE_OVERWRITE_DIFFERENT_FILE: // there is a different file, so overwrite it completely. + // Erase Hall of Fame. + for (i = HALL_OF_FAME_SECTOR; i < TOTAL_FLASH_SECTORS; i++) + EraseFlashSector(i); SaveSerializedGame(); - save_write_to_flash(0xFFFF, gSaveSectionLocations); + WriteSaveBlockChunks(0xFFFF, sSaveBlockChunks); break; } return 0; } -u8 TrySavingData(u8 saveType) // TrySave +u8 Save_WriteData(u8 saveType) // TrySave { if (gFlashMemoryPresent != TRUE) - return 0xFF; - HandleSavingData(saveType); + return SAVE_STATUS_ERROR; + + Save_WriteDataInternal(saveType); if (!gDamagedSaveSectors) - return 1; + return SAVE_STATUS_OK; + DoSaveFailedScreen(saveType); - return 0xFF; + return SAVE_STATUS_ERROR; } u8 sub_8125D80(void) // trade.s save @@ -707,16 +801,16 @@ u8 sub_8125D80(void) // trade.s save if (gFlashMemoryPresent != TRUE) return 1; SaveSerializedGame(); - RestoreSaveBackupVarsAndIncrement(gSaveSectionLocations); + RestoreSaveBackupVarsAndIncrement(sSaveBlockChunks); return 0; } bool8 sub_8125DA8(void) // trade.s save { - u8 retVal = sub_812550C(ARRAY_COUNT(gSaveSectionLocations), gSaveSectionLocations); + u8 retVal = sub_812550C(ARRAY_COUNT(sSaveBlockChunks), sSaveBlockChunks); if (gDamagedSaveSectors) DoSaveFailedScreen(0); - if (retVal == 0xFF) + if (retVal == SAVE_STATUS_ERROR) return 1; else return 0; @@ -724,7 +818,7 @@ bool8 sub_8125DA8(void) // trade.s save u8 sub_8125DDC(void) // trade.s save { - sub_812556C(ARRAY_COUNT(gSaveSectionLocations), gSaveSectionLocations); + sub_812556C(ARRAY_COUNT(sSaveBlockChunks), sSaveBlockChunks); if (gDamagedSaveSectors) DoSaveFailedScreen(0); return 0; @@ -732,7 +826,7 @@ u8 sub_8125DDC(void) // trade.s save u8 sub_8125E04(void) // trade.s save { - sub_8125758(ARRAY_COUNT(gSaveSectionLocations), gSaveSectionLocations); + WriteSomeFlashByteToPrevSector(ARRAY_COUNT(sSaveBlockChunks), sSaveBlockChunks); if (gDamagedSaveSectors) DoSaveFailedScreen(0); return 0; @@ -744,23 +838,24 @@ u8 sub_8125E2C(void) return 1; SaveSerializedGame(); - RestoreSaveBackupVars(gSaveSectionLocations); - sub_812556C(gUnknown_03005EB4 + 1, gSaveSectionLocations); + RestoreSaveBackupVars(sSaveBlockChunks); + sub_812556C(gUnknown_03005EB4 + 1, sSaveBlockChunks); return 0; } +// something to do with multiplayer. Possibly record mizing? bool8 sub_8125E6C(void) { u8 retVal = FALSE; u16 val = ++gUnknown_03005EB4; if (val <= 4) { - sub_812556C(gUnknown_03005EB4 + 1, gSaveSectionLocations); - sub_81257F0(val, gSaveSectionLocations); + sub_812556C(gUnknown_03005EB4 + 1, sSaveBlockChunks); + WriteSomeFlashByte0x25ToPrevSector(val, sSaveBlockChunks); } else { - sub_81257F0(val, gSaveSectionLocations); + WriteSomeFlashByte0x25ToPrevSector(val, sSaveBlockChunks); retVal = TRUE; } if (gDamagedSaveSectors) @@ -768,46 +863,48 @@ bool8 sub_8125E6C(void) return retVal; } -u8 sub_8125EC8(u8 a1) +u8 Save_LoadGameData(u8 saveType) { u8 result; if (gFlashMemoryPresent != TRUE) { - gSaveFileStatus = 4; - return 0xFF; + gSaveFileStatus = SAVE_STATUS_NO_FLASH; + return SAVE_STATUS_ERROR; } - switch (a1) + switch (saveType) { - case 0: + case SAVE_NORMAL: default: - result = sub_812587C(0xFFFF, gSaveSectionLocations); + result = sub_812587C(0xFFFF, sSaveBlockChunks); LoadSerializedGame(); gSaveFileStatus = result; gGameContinueCallback = 0; break; - case 3: - result = sub_8125B88((ARRAY_COUNT(gSaveSectionLocations) * 2 + 0), gHallOfFameSaveSectionLocations[0].data, gHallOfFameSaveSectionLocations[0].size); - if (result == 1) - result = sub_8125B88((ARRAY_COUNT(gSaveSectionLocations) * 2 + 1), gHallOfFameSaveSectionLocations[1].data, gHallOfFameSaveSectionLocations[1].size); + case SAVE_HALL_OF_FAME: + result = ReadSomeUnknownSectorAndVerify(HALL_OF_FAME_SECTOR, sHallOfFameChunks[0].data, sHallOfFameChunks[0].size); + if (result == SAVE_STATUS_OK) + result = ReadSomeUnknownSectorAndVerify(HALL_OF_FAME_SECTOR + 1, sHallOfFameChunks[1].data, sHallOfFameChunks[1].size); break; } return result; } +static const u8 sUnusedFlashSectors[] = { 30, 31 }; + bool8 unref_sub_8125F4C(struct UnkSaveSection *a1) { u16 i; char *raw = (char *)a1; - for (i = 0; i < sizeof(struct SaveSection); i++) + for (i = 0; i < sizeof(struct SaveSector); i++) raw[i] = 0; - ReadFlash(gFlashSectors[0], 0, a1->data, 4096); + ReadFlash(sUnusedFlashSectors[0], 0, a1->data, 4096); - if (a1->security != UNKNOWN_CHECK_VALUE) + if (a1->signature != FILE_SIGNATURE) return FALSE; return TRUE; @@ -816,22 +913,22 @@ bool8 unref_sub_8125F4C(struct UnkSaveSection *a1) u8 unref_sub_8125FA0(void) { u16 i; - u8 v0 = TrySavingData(0); + u8 status = Save_WriteData(SAVE_NORMAL); for (i = 0; i < 2; i++) - EraseFlashSector(gFlashSectors[i]); + EraseFlashSector(sUnusedFlashSectors[i]); - if (v0 == 255) + if (status == SAVE_STATUS_ERROR) { return 3; } - else if (v0 == 3) + else if (status == 3) { return 2; } else { - sub_8125EC8(0); + Save_LoadGameData(SAVE_NORMAL); return 1; } } @@ -841,32 +938,32 @@ u8 unref_sub_8125FF0(u8 *data, u16 size) u16 i; struct UnkSaveSection *section = (struct UnkSaveSection *)eSaveSection; - for (i = 0; i < sizeof(struct SaveSection); i++) + for (i = 0; i < sizeof(struct SaveSector); i++) ((char *)section)[i] = 0; - section->security = UNKNOWN_CHECK_VALUE; + section->signature = FILE_SIGNATURE; for (i = 0; i < size; i++) section->data[i] = data[i]; - gLastSaveSectorStatus = ProgramFlashSectorAndVerifyNBytes(gFlashSectors[0], section, sizeof(struct SaveSection)); + gLastSaveSectorStatus = ProgramFlashSectorAndVerifyNBytes(sUnusedFlashSectors[0], section, sizeof(struct SaveSector)); if (gLastSaveSectorStatus) - return 0xFF; + return SAVE_STATUS_ERROR; else - return 1; + return SAVE_STATUS_OK; } u8 unref_sub_8126068(u8 sector, u8 *data, u32 size) { if (ProgramFlashSectorAndVerify(sector, data)) - return 255; + return SAVE_STATUS_ERROR; else - return 1; + return SAVE_STATUS_OK; } u8 unref_sub_8126080(u8 sector, u8 *data) { - ReadFlash(sector, 0, data, sizeof(struct SaveSection)); + ReadFlash(sector, 0, data, sizeof(struct SaveSector)); return 1; } diff --git a/src/engine/save_failed_screen.c b/src/engine/save_failed_screen.c index 64b84a2f7..74a1e9612 100644 --- a/src/engine/save_failed_screen.c +++ b/src/engine/save_failed_screen.c @@ -166,7 +166,7 @@ static void CB2_WipeSave(void) Menu_DrawStdWindowFrame(1, MSG_WIN_TOP, 28, 19); Menu_PrintText(gSystemText_CheckCompleteSaveAttempt, 2, MSG_WIN_TOP + 1); - HandleSavingData(gSaveFailedType); + Save_WriteDataInternal(gSaveFailedType); if (gDamagedSaveSectors != 0) { diff --git a/src/engine/trade.c b/src/engine/trade.c index 3a14adaca..e49cde6cd 100644 --- a/src/engine/trade.c +++ b/src/engine/trade.c @@ -213,12 +213,14 @@ static #endif void sub_804DB84(void); -extern u8 gUnknown_020297D8[2]; -extern u8 *gUnknown_020296CC[13]; +EWRAM_DATA u8 *gUnknown_020296CC[13] = {0}; +EWRAM_DATA struct MailStruct gUnknown_02029700[6] = {0}; +EWRAM_DATA u8 gUnknown_020297D8[2] = {0}; + extern struct TradeEwramSubstruct *gUnknown_03004824; -extern struct MailStruct gUnknown_02029700[16]; -const u32 unref_data_820ABD4[] = { +const u32 unref_data_820ABD4[] = +{ 0x00000890, 0x00003AC0, 0x0000001C, diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 11c05e478..ab2a818a7 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -1895,7 +1895,7 @@ void SaveBattleTowerProgress(void) VarSet(VAR_TEMP_0, 0); gSaveBlock2.battleTower.unk_554 = 1; - TrySavingData(EREADER_SAVE); + Save_WriteData(SAVE_EREADER); } void BattleTower_SoftReset(void) diff --git a/src/field/daycare.c b/src/field/daycare.c index 7e4530906..36dd7ec03 100644 --- a/src/field/daycare.c +++ b/src/field/daycare.c @@ -557,7 +557,7 @@ void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, struct BoxP { for (j = 0; j < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; j++) { - if (gHatchedEggFatherMoves[i] == ItemIdToBattleMoveId(ITEM_TM01 + j) && CanMonLearnTMHM(egg, j)) + if (gHatchedEggFatherMoves[i] == ItemIdToBattleMoveId(ITEM_TM01_FOCUS_PUNCH + j) && CanMonLearnTMHM(egg, j)) { if (GiveMoveToMon(egg, gHatchedEggFatherMoves[i]) == 0xffff) DeleteFirstMoveAndGiveMoveToMon(egg, gHatchedEggFatherMoves[i]); diff --git a/src/field/field_weather.c b/src/field/field_weather.c index c954242a1..b6475d8ff 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -35,10 +35,11 @@ struct WeatherCallbacks bool8 (*finish)(void); }; -extern struct Weather gWeather; -extern u8 gUnknown_0202FF38[]; -extern u16 gUnknown_0202FF58; -IWRAM_DATA const u8 *gUnknown_030006DC; +EWRAM_DATA struct Weather gWeather = {0}; +EWRAM_DATA u8 gUnknown_0202FF38[32] = {0}; +EWRAM_DATA u16 gUnknown_0202FF58 = {0}; + +static const u8 *gUnknown_030006DC; const u8 DroughtPaletteData_0[] = INCBIN_U8("graphics/weather/drought0.bin.lz"); const u8 DroughtPaletteData_1[] = INCBIN_U8("graphics/weather/drought1.bin.lz"); @@ -47,9 +48,6 @@ const u8 DroughtPaletteData_3[] = INCBIN_U8("graphics/weather/drought3.bin.lz"); const u8 DroughtPaletteData_4[] = INCBIN_U8("graphics/weather/drought4.bin.lz"); const u8 DroughtPaletteData_5[] = INCBIN_U8("graphics/weather/drought5.bin.lz"); -extern u8 (*gUnknown_0202FC48)[32]; -extern u8 gUnknown_0202F9E8[32]; - static const u8 *const sCompressedDroughtPalettes[] = { DroughtPaletteData_0, @@ -843,7 +841,7 @@ void fade_screen(u8 a, u8 delay) bool8 sub_807D770(void) { - return gWeatherPtr->unknown_6C6 ^ 1 ? TRUE : FALSE; + return (gWeatherPtr->unknown_6C6 != 1); } void sub_807D78C(u8 a) diff --git a/src/field/fieldmap.c b/src/field/fieldmap.c index 7a31ae720..7383bb174 100644 --- a/src/field/fieldmap.c +++ b/src/field/fieldmap.c @@ -86,18 +86,20 @@ void map_copy_with_padding(u16 *map, u16 width, u16 height) void sub_80560AC(struct MapHeader *mapHeader) { + // BUG: This results in a null pointer dereference when mapHeader->connections + // is NULL, causing count to be assigned a garbage value. This garbage value + // just so happens to have the most significant bit set, so it is treated as + // negative and the loop below thankfully never executes in this scenario. + int count = mapHeader->connections->count; + struct MapConnection *connection = mapHeader->connections->connections; int i; - struct MapConnection *connection; - struct MapHeader *cMap; - u32 offset; - int count; - count = mapHeader->connections->count; - connection = mapHeader->connections->connections; + gUnknown_0202E850 = sDummyConnectionFlags; for (i = 0; i < count; i++, connection++) { - cMap = mapconnection_get_mapheader(connection); - offset = connection->offset; + struct MapHeader *cMap = mapconnection_get_mapheader(connection); + u32 offset = connection->offset; + switch (connection->direction) { case CONNECTION_SOUTH: diff --git a/src/field/item_use.c b/src/field/item_use.c index bd76db77e..55fb21814 100644 --- a/src/field/item_use.c +++ b/src/field/item_use.c @@ -877,7 +877,7 @@ void ItemUseOutOfBattle_TMHM(u8 taskId) { Menu_EraseWindowRect(0, 0xD, 0xD, 0x14); - if (gSpecialVar_ItemId >= ITEM_HM01) + if (gSpecialVar_ItemId >= ITEM_HM01_CUT) DisplayItemMessageOnField(taskId, gOtherText_BootedHM, sub_80C9EE4, 1); // HM else DisplayItemMessageOnField(taskId, gOtherText_BootedTM, sub_80C9EE4, 1); // TM diff --git a/src/field/party_menu.c b/src/field/party_menu.c index 053368a0e..c099fd8f4 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -101,7 +101,14 @@ static void sub_806BF24(const u8 *a, u8 monIndex, u8 c, u8 d); static void sub_806BB9C(u8 a); static void sub_806BBEC(u8 a); -const u16 TMHMMoves[] = { +EWRAM_DATA u8 gUnknown_0202E8F4 = 0; +EWRAM_DATA u8 gUnknown_0202E8F5 = 0; +EWRAM_DATA u8 gUnknown_0202E8F6 = 0; +EWRAM_DATA u16 gUnknown_0202E8F8 = 0; +EWRAM_DATA u8 gPartyMenuType = 0; + +const u16 TMHMMoves[] = +{ MOVE_FOCUS_PUNCH, MOVE_DRAGON_CLAW, MOVE_WATER_PULSE, @@ -458,10 +465,6 @@ struct Unk201FE00 extern u16 gBattleTypeFlags; extern u8 gTileBuffer[]; -extern u8 gUnknown_0202E8F4; -extern u8 gUnknown_0202E8F6; -extern u16 gUnknown_0202E8F8; -extern u8 gPartyMenuType; extern u8 gLastFieldPokeMenuOpened; extern u8 gPlayerPartyCount; extern s32 gBattleMoveDamage; @@ -3998,7 +4001,7 @@ void Task_ConfirmTakeHeldMail(u8 taskId) u16 ItemIdToBattleMoveId(u16 item) { - u16 machineNumber = item - ITEM_TM01; + u16 machineNumber = item - ITEM_TM01_FOCUS_PUNCH; return TMHMMoves[machineNumber]; } diff --git a/src/field/pc_screen_effect.c b/src/field/pc_screen_effect.c index 364fca0aa..e0853e01d 100644 --- a/src/field/pc_screen_effect.c +++ b/src/field/pc_screen_effect.c @@ -30,7 +30,7 @@ extern const u16 gUnknownPal_083D18EC[16]; extern const u8 gUnknownGfx_083D190C[128]; -extern struct UnkStruct *gUnknown_020387EC; +EWRAM_DATA struct UnkStruct *gUnknown_020387EC = NULL; const struct SpriteSheet gUnknown_083D1898 = { gUnknownGfx_083D190C, sizeof(gUnknownGfx_083D190C), 0 }; diff --git a/src/field/player_pc.c b/src/field/player_pc.c index 0d5c5234b..1d504586c 100644 --- a/src/field/player_pc.c +++ b/src/field/player_pc.c @@ -853,7 +853,7 @@ static void ItemStorage_DrawTMHMEntry(struct ItemSlot *itemSlot, u8 var, int var { ItemStorage_DrawItemName(itemSlot, var, var2); - if(itemSlot->itemId < ITEM_HM01) + if(itemSlot->itemId < ITEM_HM01_CUT) ItemStorage_DrawItemQuantity(itemSlot->quantity, STR_CONV_MODE_RIGHT_ALIGN, var, 3, var2); else ItemStorage_DrawItemVoidQuantity(var); // HMs do not have a quantity. diff --git a/src/field/secret_base.c b/src/field/secret_base.c index 203b57867..728decc9c 100644 --- a/src/field/secret_base.c +++ b/src/field/secret_base.c @@ -51,7 +51,7 @@ static void Task_SecretBasePC_Registry(u8 taskId); extern u8 gUnknown_0815F399[]; extern u8 gUnknown_0815F49A[]; -extern u8 gUnknown_020387DC; +EWRAM_DATA u8 gUnknown_020387DC = 0; const struct { diff --git a/src/field/start_menu.c b/src/field/start_menu.c index 5e76d30a6..105ef1756 100644 --- a/src/field/start_menu.c +++ b/src/field/start_menu.c @@ -967,20 +967,20 @@ static u8 SaveDialogCB_DisplaySavingMessage(void) static u8 SaveDialogCB_DoSave(void) { - bool8 saveSucceeded; + u8 saveStatus; IncrementGameStat(0); if (gDifferentSaveFile == TRUE) { - saveSucceeded = TrySavingData(DIFFERENT_FILE_SAVE); + saveStatus = Save_WriteData(SAVE_OVERWRITE_DIFFERENT_FILE); gDifferentSaveFile = FALSE; } else { - saveSucceeded = TrySavingData(NORMAL_SAVE); + saveStatus = Save_WriteData(SAVE_NORMAL); } - if (saveSucceeded == TRUE) + if (saveStatus == SAVE_STATUS_OK) { //"(Player) saved the game." DisplaySaveMessageWithCallback(gSaveText_PlayerSavedTheGame, SaveDialogCB_SaveSuccess); diff --git a/src/libs/libisagbprn.c b/src/libs/libisagbprn.c index e0e979e95..e0e979e95 100755..100644 --- a/src/libs/libisagbprn.c +++ b/src/libs/libisagbprn.c diff --git a/src/pokemon/pokemon_3.c b/src/pokemon/pokemon_3.c index 221de831a..9346031a6 100644 --- a/src/pokemon/pokemon_3.c +++ b/src/pokemon/pokemon_3.c @@ -1293,15 +1293,15 @@ void BoxMonRestorePP(struct BoxPokemon *boxMon) void sub_8040B8C(void) { - gLastUsedAbility = BATTLE_STRUCT->unk160C0;; + gLastUsedAbility = gBattleStruct->unk160C0;; gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 4; - gBattleTextBuff1[2] = BATTLE_STRUCT->unk16054; + gBattleTextBuff1[2] = gBattleStruct->unk16054; gBattleTextBuff1[4] = EOS; - if (!GetBankSide(BATTLE_STRUCT->unk16054)) - gBattleTextBuff1[3] = pokemon_order_func(gBattlePartyID[BATTLE_STRUCT->unk16054]); + if (!GetBankSide(gBattleStruct->unk16054)) + gBattleTextBuff1[3] = pokemon_order_func(gBattlePartyID[gBattleStruct->unk16054]); else - gBattleTextBuff1[3] = gBattlePartyID[BATTLE_STRUCT->unk16054]; + gBattleTextBuff1[3] = gBattlePartyID[gBattleStruct->unk16054]; gBattleTextBuff2[0] = 0xFD; gBattleTextBuff2[1] = 4; gBattleTextBuff2[2] = gBankInMenu; diff --git a/src/pokemon/pokemon_item_effect.c b/src/pokemon/pokemon_item_effect.c index 66f2ff697..4ebece3b3 100644 --- a/src/pokemon/pokemon_item_effect.c +++ b/src/pokemon/pokemon_item_effect.c @@ -1,7 +1,32 @@ #include "global.h" +#include "constants/battle_constants.h" +#include "constants/hold_effects.h" +#include "constants/items.h" +#include "constants/species.h" +#include "battle.h" +#include "evolution_scene.h" +#include "ewram.h" +#include "item.h" +#include "main.h" +#include "overworld.h" #include "pokemon.h" +#include "pokemon_item_effect.h" +#include "rom_8077ABC.h" +#include "rom_8094928.h" +#include "util.h" -const u8 gUnknown_082082F2[] = { +extern s32 gBattleMoveDamage; +extern u8 gAbsentBankFlags; +extern u8 gBankInMenu; +extern u8 gNoOfAllBanks; +extern u16 gBattlePartyID[]; +extern u8 gActiveBank; +extern u8 gStringBank; +extern struct BattlePokemon gBattleMons[]; +extern struct BattleEnigmaBerry gEnigmaBerries[]; + +static const u8 sGetMonDataEVConstants[] = +{ MON_DATA_HP_EV, MON_DATA_ATK_EV, MON_DATA_DEF_EV, @@ -9,3 +34,517 @@ const u8 gUnknown_082082F2[] = { MON_DATA_SPDEF_EV, MON_DATA_SPATK_EV }; + +extern u8 gUnknown_08208238[]; +extern u8 gUnknown_0820823C[]; +extern u8 gUnknown_08208240[]; + +bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex, u8 e); + +bool8 ExecuteTableBasedItemEffect_(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex) +{ + return PokemonUseItemEffects(pkmn, item, partyIndex, moveIndex, 0); +} + +bool8 PokemonUseItemEffects(struct Pokemon *pkmn, u16 item, u8 partyIndex, u8 moveIndex, u8 e) +{ + u32 data; + s32 friendship; + s32 cmdIndex; + bool8 retVal = TRUE; + const u8 *itemEffect; + u8 sp24 = 6; + u32 sp28; + s8 sp2C = 0; + u8 holdEffect; + u8 sp34 = 4; + u16 heldItem; + u8 r10; + u32 r4; + + heldItem = GetMonData(pkmn, MON_DATA_HELD_ITEM, NULL); + if (heldItem == ITEM_ENIGMA_BERRY) + { + if (gMain.inBattle) + holdEffect = gEnigmaBerries[gBankInMenu].holdEffect; + else + holdEffect = gSaveBlock1.enigmaBerry.holdEffect; + } + else + { + holdEffect = ItemId_GetHoldEffect(heldItem); + } + + gStringBank = gBankInMenu; + if (gMain.inBattle) + { + gActiveBank = gBankInMenu; + cmdIndex = (GetBankSide(gActiveBank) != 0); + while (cmdIndex < gNoOfAllBanks) + { + if (gBattlePartyID[cmdIndex] == partyIndex) + { + sp34 = cmdIndex; + break; + } + cmdIndex += 2; + } + } + else + { + gActiveBank = 0; + sp34 = 4; + } + + if (!IS_POKEMON_ITEM(item)) + return TRUE; + if (gItemEffectTable[item - 13] == NULL && item != ITEM_ENIGMA_BERRY) + return TRUE; + + if (item == ITEM_ENIGMA_BERRY) + { + if (gMain.inBattle) + itemEffect = gEnigmaBerries[gActiveBank].itemEffect; + else + itemEffect = gSaveBlock1.enigmaBerry.itemEffect; + } + else + { + itemEffect = gItemEffectTable[item - 13]; + } + + for (cmdIndex = 0; cmdIndex < 6; cmdIndex++) + { + switch (cmdIndex) + { + // status healing effects + case 0: + if ((itemEffect[cmdIndex] & 0x80) + && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_INFATUATION)) + { + gBattleMons[sp34].status2 &= ~STATUS2_INFATUATION; + retVal = FALSE; + } + if ((itemEffect[cmdIndex] & 0x30) + && !(gBattleMons[gActiveBank].status2 & STATUS2_FOCUS_ENERGY)) + { + gBattleMons[gActiveBank].status2 |= STATUS2_FOCUS_ENERGY; + retVal = FALSE; + } + if ((itemEffect[cmdIndex] & 0xF) + && gBattleMons[gActiveBank].statStages[STAT_STAGE_ATK] < 12) + { + gBattleMons[gActiveBank].statStages[STAT_STAGE_ATK] += itemEffect[cmdIndex] & 0xF; + if (gBattleMons[gActiveBank].statStages[STAT_STAGE_ATK] > 12) + gBattleMons[gActiveBank].statStages[STAT_STAGE_ATK] = 12; + retVal = FALSE; + } + break; + // in-battle stat boosting effects? + case 1: + if ((itemEffect[cmdIndex] & 0xF0) + && gBattleMons[gActiveBank].statStages[STAT_STAGE_DEF] < 12) + { + gBattleMons[gActiveBank].statStages[STAT_STAGE_DEF] += (itemEffect[cmdIndex] & 0xF0) >> 4; + if (gBattleMons[gActiveBank].statStages[STAT_STAGE_DEF] > 12) + gBattleMons[gActiveBank].statStages[STAT_STAGE_DEF] = 12; + retVal = FALSE; + } + if ((itemEffect[cmdIndex] & 0xF) + && gBattleMons[gActiveBank].statStages[STAT_STAGE_SPEED] < 12) + { + gBattleMons[gActiveBank].statStages[STAT_STAGE_SPEED] += itemEffect[cmdIndex] & 0xF; + if (gBattleMons[gActiveBank].statStages[STAT_STAGE_SPEED] > 12) + gBattleMons[gActiveBank].statStages[STAT_STAGE_SPEED] = 12; + retVal = FALSE; + } + break; + // more stat boosting effects? + case 2: + if ((itemEffect[cmdIndex] & 0xF0) + && gBattleMons[gActiveBank].statStages[STAT_STAGE_ACC] < 12) + { + gBattleMons[gActiveBank].statStages[STAT_STAGE_ACC] += (itemEffect[cmdIndex] & 0xF0) >> 4; + if (gBattleMons[gActiveBank].statStages[STAT_STAGE_ACC] > 12) + gBattleMons[gActiveBank].statStages[STAT_STAGE_ACC] = 12; + retVal = FALSE; + } + if ((itemEffect[cmdIndex] & 0xF) + && gBattleMons[gActiveBank].statStages[STAT_STAGE_SPATK] < 12) + { + gBattleMons[gActiveBank].statStages[STAT_STAGE_SPATK] += itemEffect[cmdIndex] & 0xF; + if (gBattleMons[gActiveBank].statStages[STAT_STAGE_SPATK] > 12) + gBattleMons[gActiveBank].statStages[STAT_STAGE_SPATK] = 12; + retVal = FALSE; + } + break; + case 3: + if ((itemEffect[cmdIndex] & 0x80) + && gSideTimers[GetBankSide(gActiveBank)].mistTimer == 0) + { + gSideTimers[GetBankSide(gActiveBank)].mistTimer = 5; + retVal = FALSE; + } + if ((itemEffect[cmdIndex] & 0x40) // raise level + && GetMonData(pkmn, MON_DATA_LEVEL, NULL) != 100) + { + data = gExperienceTables[gBaseStats[GetMonData(pkmn, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(pkmn, MON_DATA_LEVEL, NULL) + 1]; + SetMonData(pkmn, MON_DATA_EXP, &data); + CalculateMonStats(pkmn); + retVal = FALSE; + } + if ((itemEffect[cmdIndex] & 0x20) + && HealStatusConditions(pkmn, partyIndex, 7, sp34) == 0) + { + if (sp34 != 4) + gBattleMons[sp34].status2 &= ~STATUS2_NIGHTMARE; + retVal = FALSE; + } + if ((itemEffect[cmdIndex] & 0x10) && HealStatusConditions(pkmn, partyIndex, 0xF88, sp34) == 0) + retVal = FALSE; + if ((itemEffect[cmdIndex] & 8) && HealStatusConditions(pkmn, partyIndex, 16, sp34) == 0) + retVal = FALSE; + if ((itemEffect[cmdIndex] & 4) && HealStatusConditions(pkmn, partyIndex, 32, sp34) == 0) + retVal = FALSE; + if ((itemEffect[cmdIndex] & 2) && HealStatusConditions(pkmn, partyIndex, 64, sp34) == 0) + retVal = FALSE; + if ((itemEffect[cmdIndex] & 1) // heal confusion + && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_CONFUSION)) + { + gBattleMons[sp34].status2 &= ~STATUS2_CONFUSION; + retVal = FALSE; + } + break; + // EV, HP, and PP raising effects + case 4: + r10 = itemEffect[cmdIndex]; + if (r10 & 0x20) + { + r10 &= ~0x20; + data = (GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) & gUnknown_08208238[moveIndex]) >> (moveIndex * 2); + sp28 = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex); + if (data <= 2 && sp28 > 4) + { + data = GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) + gUnknown_08208240[moveIndex]; + SetMonData(pkmn, MON_DATA_PP_BONUSES, &data); + + data = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - sp28; + data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL) + data; + SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data); + retVal = FALSE; + } + } + sp28 = 0; + while (r10 != 0) + { + if (r10 & 1) + { + u16 evCount; + s32 r5; + + switch (sp28) + { + case 0: + case 1: + evCount = GetMonEVCount(pkmn); + if (evCount >= 510) + return TRUE; + data = GetMonData(pkmn, sGetMonDataEVConstants[sp28], NULL); + if (data < 100) + { + if (data + itemEffect[sp24] > 100) + r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24]; + else + r4 = itemEffect[sp24]; + if (evCount + r4 > 510) + r4 += 510 - (evCount + r4); + data += r4; + SetMonData(pkmn, sGetMonDataEVConstants[sp28], &data); + CalculateMonStats(pkmn); + sp24++; + retVal = FALSE; + } + break; + case 2: + // revive? + if (r10 & 0x10) + { + if (GetMonData(pkmn, MON_DATA_HP, NULL) != 0) + { + sp24++; + break; + } + if (gMain.inBattle) + { + if (sp34 != 4) + { + gAbsentBankFlags &= ~gBitTable[sp34]; + CopyPlayerPartyMonToBattleData(sp34, pokemon_order_func(gBattlePartyID[sp34])); + if (GetBankSide(gActiveBank) == 0 && gBattleResults.unk4 < 255) + gBattleResults.unk4++; + } + else + { + gAbsentBankFlags &= ~gBitTable[gActiveBank ^ 2]; + if (GetBankSide(gActiveBank) == 0 && gBattleResults.unk4 < 255) + gBattleResults.unk4++; + } + } + } + else + { + if (GetMonData(pkmn, MON_DATA_HP, NULL) == 0) + { + sp24++; + break; + } + } + data = itemEffect[sp24++]; + switch (data) + { + case 0xFF: + data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL) - GetMonData(pkmn, MON_DATA_HP, NULL); + break; + case 0xFE: + data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL) / 2; + if (data == 0) + data = 1; + break; + case 0xFD: + data = eStatHp; + break; + } + if (GetMonData(pkmn, MON_DATA_MAX_HP, NULL) != GetMonData(pkmn, MON_DATA_HP, NULL)) + { + if (e == 0) + { + data = GetMonData(pkmn, MON_DATA_HP, NULL) + data; + if (data > GetMonData(pkmn, MON_DATA_MAX_HP, NULL)) + data = GetMonData(pkmn, MON_DATA_MAX_HP, NULL); + SetMonData(pkmn, MON_DATA_HP, &data); + if (gMain.inBattle && sp34 != 4) + { + gBattleMons[sp34].hp = data; + if (!(r10 & 0x10) && GetBankSide(gActiveBank) == 0) + { + if (gBattleResults.unk3 < 255) + gBattleResults.unk3++; + // I have to re-use this variable to match. + r5 = gActiveBank; + gActiveBank = sp34; + EmitGetAttributes(0, 0, 0); + MarkBufferBankForExecution(gActiveBank); + gActiveBank = r5; + } + } + } + else + { + gBattleMoveDamage = -data; + } + retVal = FALSE; + } + r10 &= 0xEF; + break; + case 3: + if (!(r10 & 2)) + { + for (r5 = 0; r5 < 4; r5++) + { + u16 r4; + + data = GetMonData(pkmn, MON_DATA_PP1 + r5, NULL); + r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL); + if (data != CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5)) + { + data += itemEffect[sp24]; + r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL); + if (data > CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5)) + { + r4 = GetMonData(pkmn, MON_DATA_MOVE1 + r5, NULL); + data = CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), r5); + } + SetMonData(pkmn, MON_DATA_PP1 + r5, &data); + if (gMain.inBattle + && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000) + && !(gDisableStructs[sp34].unk18_b & gBitTable[r5])) + gBattleMons[sp34].pp[r5] = data; + retVal = FALSE; + } + } + sp24++; + } + else + { + u16 r4; + + data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL); + r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL); + if (data != CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex)) + { + data += itemEffect[sp24++]; + r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL); + if (data > CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex)) + { + r4 = GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL); + data = CalculatePPWithBonus(r4, GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex); + } + SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data); + if (gMain.inBattle + && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000) + && !(gDisableStructs[sp34].unk18_b & gBitTable[moveIndex])) + gBattleMons[sp34].pp[moveIndex] = data; + retVal = FALSE; + } + } + break; + case 7: + { + u16 targetSpecies = GetEvolutionTargetSpecies(pkmn, 2, item); + + if (targetSpecies != SPECIES_NONE) + { + BeginEvolutionScene(pkmn, targetSpecies, 0, partyIndex); + return FALSE; + } + } + break; + } + } + sp28++; + r10 >>= 1; + } + break; + case 5: + r10 = itemEffect[cmdIndex]; + sp28 = 0; + while (r10 != 0) + { + if (r10 & 1) + { + u16 evCount; + + switch (sp28) + { + case 0: + case 1: + case 2: + case 3: + evCount = GetMonEVCount(pkmn); + if (evCount >= 510) + return TRUE; + data = GetMonData(pkmn, sGetMonDataEVConstants[sp28 + 2], NULL); + if (data < 100) + { + if (data + itemEffect[sp24] > 100) + r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24]; + else + r4 = itemEffect[sp24]; + if (evCount + r4 > 510) + r4 += 510 - (evCount + r4); + data += r4; + SetMonData(pkmn, sGetMonDataEVConstants[sp28 + 2], &data); + CalculateMonStats(pkmn); + retVal = FALSE; + sp24++; + } + break; + case 4: + data = (GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL) & gUnknown_08208238[moveIndex]) >> (moveIndex * 2); + if (data < 3) + { + r4 = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL), moveIndex); + data = GetMonData(pkmn, MON_DATA_PP_BONUSES, NULL); + data &= gUnknown_0820823C[moveIndex]; + data += gUnknown_08208240[moveIndex] * 3; + + SetMonData(pkmn, MON_DATA_PP_BONUSES, &data); + data = CalculatePPWithBonus(GetMonData(pkmn, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - r4; + data = GetMonData(pkmn, MON_DATA_PP1 + moveIndex, NULL) + data; + SetMonData(pkmn, MON_DATA_PP1 + moveIndex, &data); + retVal = FALSE; + } + break; + case 5: + if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == 0 && sp2C == 0) + { + sp2C = itemEffect[sp24]; + friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL); + if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) + friendship += 150 * sp2C / 100; + else + friendship += sp2C; + if (sp2C > 0) + { + if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11) + friendship++; + if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name()) + friendship++; + } + if (friendship < 0) + friendship = 0; + if (friendship > 255) + friendship = 255; + SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship); + } + sp24++; + break; + case 6: + if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) < 200 + && retVal == 0 && sp2C == 0) + { + sp2C = itemEffect[sp24]; + friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL); + if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) + friendship += 150 * sp2C / 100; + else + friendship += sp2C; + if (sp2C > 0) + { + if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11) + friendship++; + if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name()) + friendship++; + } + if (friendship < 0) + friendship = 0; + if (friendship > 255) + friendship = 255; + SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship); + } + sp24++; + break; + case 7: + if (GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == 0 && sp2C == 0) + { + sp2C = itemEffect[sp24]; + friendship = GetMonData(pkmn, MON_DATA_FRIENDSHIP, NULL); + if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) + friendship += 150 * sp2C / 100; + else + friendship += sp2C; + if (sp2C > 0) + { + if (GetMonData(pkmn, MON_DATA_POKEBALL, NULL) == 11) + friendship++; + if (GetMonData(pkmn, MON_DATA_MET_LOCATION, NULL) == sav1_map_get_name()) + friendship++; + } + if (friendship < 0) + friendship = 0; + if (friendship > 255) + friendship = 255; + SetMonData(pkmn, MON_DATA_FRIENDSHIP, &friendship); + } + sp24++; + break; + } + } + sp28++; + r10 >>= 1; + } + break; + } + } + return retVal; +} diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index bf8306fc0..7b40918e9 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -121,7 +121,6 @@ extern u8 ball_number_to_ball_processing_index(u16); extern u8 StorageSystemGetNextMonIndex(struct BoxPokemon *, u8, u8, u8); extern struct MusicPlayerInfo gMPlay_BGM; -extern u8 gUnknown_020384F0; extern u8 gUnknown_08208238[]; extern u16 gBattle_BG3_Y; extern u16 gBattle_BG2_Y; @@ -130,7 +129,6 @@ extern u16 gBattle_BG1_X; extern u16 gBattle_BG2_X; extern u16 gBattle_BG3_X; extern TaskFunc gUnknown_03005CF0; -extern struct Sprite *gUnknown_020384F4; extern struct SpriteTemplate gUnknown_02024E8C; extern const u8 gStatusPal_Icons[]; @@ -157,6 +155,9 @@ extern const u16 gUnknown_08E94550[]; extern const u16 gUnknown_08E94590[]; extern const u8 gUnknown_08E73E88[]; +EWRAM_DATA u8 gUnknown_020384F0 = 0; +EWRAM_DATA struct Sprite *gUnknown_020384F4 = NULL; + #if ENGLISH #include "../data/text/move_descriptions_en.h" #include "../data/text/nature_names_en.h" diff --git a/src/rom3.c b/src/rom3.c index 2b719d14a..0fe67dcec 100644 --- a/src/rom3.c +++ b/src/rom3.c @@ -763,9 +763,9 @@ void EmitPrintString(u8 a, u16 stringID) stringInfo->lastMove = gChosenMove; stringInfo->lastItem = gLastUsedItem; stringInfo->lastAbility = gLastUsedAbility; - stringInfo->scrActive = BATTLE_STRUCT->scriptingActive; - stringInfo->unk1605E = BATTLE_STRUCT->unk1605E; - stringInfo->hpScale = BATTLE_STRUCT->hpScale; + stringInfo->scrActive = gBattleStruct->scriptingActive; + stringInfo->unk1605E = gBattleStruct->unk1605E; + stringInfo->hpScale = gBattleStruct->hpScale; stringInfo->StringBank = gStringBank; stringInfo->moveType = gBattleMoves[gCurrentMove].type; @@ -795,8 +795,8 @@ void EmitPrintStringPlayerOnly(u8 a, u16 stringID) stringInfo->lastMove = gChosenMove; stringInfo->lastItem = gLastUsedItem; stringInfo->lastAbility = gLastUsedAbility; - stringInfo->scrActive = BATTLE_STRUCT->scriptingActive; - stringInfo->unk1605E = BATTLE_STRUCT->unk1605E; + stringInfo->scrActive = gBattleStruct->scriptingActive; + stringInfo->unk1605E = gBattleStruct->unk1605E; for (i = 0; i < 4; i++) stringInfo->abilities[i] = gBattleMons[i].ability; diff --git a/src/rom_800D42C.c b/src/rom_800D42C.c index 9449ca0d1..a1b0f5ecb 100644 --- a/src/rom_800D42C.c +++ b/src/rom_800D42C.c @@ -52,7 +52,7 @@ void PrintLinkBattleWinLossTie(void) { // lp_field_18 = player position? - switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18) + switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18) { case 0: case 2: @@ -70,7 +70,7 @@ void PrintLinkBattleWinLossTie(void) else { - switch (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18) + switch (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18) { case 1: case 3: @@ -92,7 +92,7 @@ void PrintLinkBattleWinLossTie(void) if (gBattleOutcome == 1) { - if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0) + if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 != 0) { PRINT_MESSAGE_RIGHT(BattleText_Win, TILE_OFFSET_WIN); PRINT_MESSAGE_LEFT(BattleText_Loss, TILE_OFFSET_LOSS); @@ -105,7 +105,7 @@ void PrintLinkBattleWinLossTie(void) } else { - if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 != 0) + if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 != 0) { PRINT_MESSAGE_LEFT(BattleText_Win, TILE_OFFSET_WIN); PRINT_MESSAGE_RIGHT(BattleText_Loss, TILE_OFFSET_LOSS); diff --git a/src/scene/hall_of_fame.c b/src/scene/hall_of_fame.c index 303dcf3e0..a9532fd09 100644 --- a/src/scene/hall_of_fame.c +++ b/src/scene/hall_of_fame.c @@ -539,7 +539,7 @@ static void sub_814217C(u8 taskID) ewram1E000(i) = 0; } else - sub_8125EC8(3); + Save_LoadGameData(SAVE_HALL_OF_FAME); for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, lastSavedTeam++) { @@ -566,7 +566,7 @@ static void sub_814217C(u8 taskID) static void sub_8142274(u8 taskID) { gGameContinueCallback = sub_8141FC4; - TrySavingData(3); + Save_WriteData(3); PlaySE(SE_SAVE); gTasks[taskID].func = sub_81422B8; gTasks[taskID].tFrameCount = 32; @@ -840,7 +840,7 @@ void sub_81428CC(void) static void sub_8142A28(u8 taskID) { - if (sub_8125EC8(3) != 1) + if (Save_LoadGameData(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK) gTasks[taskID].func = sub_8142FEC; else { diff --git a/src/scene/intro.c b/src/scene/intro.c index d7d772a40..f7e196133 100644 --- a/src/scene/intro.c +++ b/src/scene/intro.c @@ -930,8 +930,8 @@ void CB2_InitCopyrightScreenAfterBootup(void) if (!SetUpCopyrightScreen()) { sub_8052E4C(); - ResetSaveCounters(); - sub_8125EC8(0); + Save_ResetSaveCounters(); + Save_LoadGameData(SAVE_NORMAL); if (gSaveFileStatus == 0 || gSaveFileStatus == 2) ClearSav2(); SetPokemonCryStereo(gSaveBlock2.optionsSound); diff --git a/src/scene/intro_credits_graphics.c b/src/scene/intro_credits_graphics.c index f0f1264a0..7f6765ef6 100755..100644 --- a/src/scene/intro_credits_graphics.c +++ b/src/scene/intro_credits_graphics.c @@ -301,9 +301,10 @@ const struct CompressedSpriteSheet gUnknown_08416E34[] = { }; -extern u16 gUnknown_02039358; -extern s16 gUnknown_0203935A; -extern s16 gUnknown_0203935C; +EWRAM_DATA u16 gUnknown_02039358 = 0; +EWRAM_DATA s16 gUnknown_0203935A = 0; +EWRAM_DATA s16 gUnknown_0203935C = 0; + extern u8 gReservedSpritePaletteCount; void sub_8149248(); diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c index b13006c13..f991297ab 100644 --- a/src/script_pokemon_util_80C4BF0.c +++ b/src/script_pokemon_util_80C4BF0.c @@ -238,8 +238,8 @@ void ShowContestWinner(void) if(gUnknown_0203856C) { sub_80AAF30(); - BATTLE_STRUCT->unk15DDF = 1; - BATTLE_STRUCT->unk15DDE = sub_80B2C4C(254, 0); + gBattleStruct->unk15DDF = 1; + gBattleStruct->unk15DDE = sub_80B2C4C(254, 0); Contest_SaveWinner(3); gUnknown_0203856C = 0; } diff --git a/sym_ewram.txt b/sym_ewram.txt index 2e4cf48e7..1b3bbe7fe 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -119,7 +119,7 @@ gRandomMove: @ 2024BEA gBattleMoveDamage: @ 2024BEC .space 0x4 -gHP_dealt: @ 2024BF0 +gHpDealt: @ 2024BF0 .space 0x4 gTakenDmg: @ 2024BF4 @@ -170,10 +170,10 @@ gUnknown_02024C2C: @ 2024C2C gLastUsedMove: @ 2024C34 .space 0x8 -gMoveHitWith: @ 2024C3C +gLastLandedMoves: @ 2024C3C .space 0x8 -gUnknown_02024C44: @ 2024C44 +gLastHitByType: @ 2024C44 .space 0x8 gUnknown_02024C4C: @ 2024C4C @@ -296,18 +296,7 @@ gBattleMonForms: @ 2024E84 .include "src/pokemon/pokemon_1.o" .include "src/pokemon/pokemon_2.o" .include "src/engine/load_save.o" - -@ trade - -gUnknown_020296CC: @ 20296CC - .space 0x34 - -gUnknown_02029700: @ 2029700 - .space 0xD8 - -gUnknown_020297D8: @ 20297D8 - .space 0x4 - + .include "src/engine/trade.o" .include "src/scene/berry_blender.o" .include "src/scene/new_game.o" .include "src/field/overworld.o" @@ -319,25 +308,7 @@ gUnknown_020297D8: @ 20297D8 .include "src/field/scrcmd.o" .include "src/field/field_control_avatar.o" .include "src/field/event_data.o" - -@ party_menu - - .align 2 -gUnknown_0202E8F4: @ 202E8F4 - .space 0x1 - -gUnknown_0202E8F5: @ 202E8F5 - .space 0x1 - -gUnknown_0202E8F6: @ 202E8F6 - .space 0x2 - -gUnknown_0202E8F8: @ 202E8F8 - .space 0x2 - -gPartyMenuType: @ 202E8FA - .space 0x2 - + .include "src/field/party_menu.o" .include "src/field/start_menu.o" .include "src/engine/menu.o" .include "src/engine/tileset_anim.o" @@ -346,25 +317,7 @@ gPartyMenuType: @ 202E8FA .include "src/battle/battle_anim.o" .include "src/rom_8077ABC.o" .include "src/scene/title_screen.o" - -@ field_weather - - .align 2 -gWeather: @ 202F7E8 - .space 0x200 - -gUnknown_0202F9E8: @ 202F9E8 - .space 0x260 - -gUnknown_0202FC48: @ 202FC48 - .space 0x2F0 - -gUnknown_0202FF38: @ 202FF38 - .space 0x20 - -gUnknown_0202FF58: @ 202FF58 - .space 0x4 - + .include "src/field/field_weather.o" .include "src/battle/battle_setup.o" .include "src/field/wild_encounter.o" .include "src/field/field_effect.o" @@ -428,110 +381,25 @@ gUnknown_020384EA: @ 20384EA gUnknown_020384EC: @ 20384EC .space 0x4 -@ pokemon_summary_screen - -gUnknown_020384F0: @ 20384F0 - .space 0x4 - -gUnknown_020384F4: @ 20384F4 - .space 0x4 - + .include "src/pokemon/pokemon_summary_screen.o" .include "src/field/script_movement.o" .include "src/field/map_name_popup.o" .include "src/field/item_menu.o" - -@ contest - - .align 2 -gUnknown_0203856C: @ 203856C - .space 0x4 - -gContestMons: @ 2038570 - .space 0xD - -gUnknown_0203857D: @ 203857D - .space 0x11 - - @ contest move space -gUnknown_0203858E: @ 203858E - .space 0x8 - -gUnknown_02038596: @ 2038596 - .space 0xDA - -gUnknown_02038670: @ 2038670 - .space 0x8 - -gUnknown_02038678: @ 2038678 - .space 0x8 - -gUnknown_02038680: @ 2038680 - .space 0x8 - -gUnknown_02038688: @ 2038688 - .space 0x8 - -gContestFinalStandings: @ 2038690 - .space 0x4 - -gUnknown_02038694: @ 2038694 - .space 0x1 - -gContestPlayerMonIndex: @ 2038695 - .space 0x1 - -gUnknown_02038696: @ 2038696 - .space 0x4 - -gIsLinkContest: @ 203869A - .space 0x1 - -gUnknown_0203869B: @ 203869B - .space 0x1 - -gSpecialVar_ContestCategory: @ 203869C - .space 0x2 - -gSpecialVar_ContestRank: @ 203869E - .space 0x2 - + .include "src/contest.o" .include "src/field/shop.o" .include "src/field/money.o" - -@ record_mixing - - .align 2 -gUnknown_02038738: @ 2038738 - .space 0x78 - + .include "src/engine/record_mixing.o" .include "src/debug/sound_check_menu.o" - -@ secret_base - - .align 2 -gUnknown_020387DC: @ 20387DC - .space 0x4 - -@ tv - + .include "src/field/secret_base.o" .include "src/field/tv.o" - -@ fldeff_80C5CD4 - - .align 2 -gUnknown_020387EC: @ 20387EC - .space 0x4 - + .include "src/field/pc_screen_effect.o" .include "src/field/rotating_gate.o" .include "src/field/safari_zone.o" - -@ easy_chat - -gUnknown_020388AC: @ 20388AC - .space 0x4 + .include "src/easy_chat_2.o" @ pokenav + .align 2 gUnknown_020388B0: @ 20388B0 .space 0x4 @@ -570,12 +438,7 @@ gUnknown_0203926A: @ 203926A .space 0x2 .include "src/roulette.o" - -@ battle_message - -gAbilitiesPerBank: @ 203926C - .space 0x4 - + .include "src/battle/battle_message.o" .include "src/field/choose_party.o" .include "src/scene/cable_car.o" .include "src/engine/save.o" @@ -591,20 +454,11 @@ gAbilitiesPerBank: @ 203926C .include "src/engine/mystery_event_menu.o" .include "src/engine/save_failed_screen.o" .include "src/pokemon/pokeblock_feed.o" - -@ intro_credits_graphics - -gUnknown_02039358: @ 2039358 - .space 0x2 - -gUnknown_0203935A: @ 203935A - .space 0x2 - -gUnknown_0203935C: @ 203935C - .space 0x4 + .include "src/scene/intro_credits_graphics.o" @ ??? + .align 4 gTileBuffer: @ 2039360 .space 0x100 |