diff --git a/asm/code_806E8B0.s b/asm/code_806E8B0.s deleted file mode 100644 index a155a5157..000000000 --- a/asm/code_806E8B0.s +++ /dev/null @@ -1,1160 +0,0 @@ - #include "asm/constants/gba_constants.inc" - #include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start sub_806EAF4 -sub_806EAF4: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8C - str r0, [sp, 0x70] - mov r9, r1 - adds r7, r3, 0 - ldr r0, [sp, 0xB8] - ldr r1, [sp, 0xBC] - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0x74] - lsls r0, 16 - lsrs r4, r0, 16 - lsls r1, 24 - lsrs r1, 24 - str r1, [sp, 0x78] - ldr r0, [sp, 0x70] - ldr r0, [r0, 0x70] - mov r10, r0 - mov r1, r9 - ldr r1, [r1, 0x70] - str r1, [sp, 0x7C] - adds r0, r2, 0 - bl IsTypePhysical - movs r2, 0 - str r2, [sp, 0x80] - lsls r0, 24 - cmp r0, 0 - bne _0806EB3A - movs r3, 0x1 - str r3, [sp, 0x80] -_0806EB3A: - bl sub_806F500 - mov r6, r10 - ldrb r0, [r6, 0x7] - cmp r0, 0 - bne _0806EB72 - movs r0, 0x9E - lsls r0, 1 - add r0, r10 - ldr r0, [r0] - bl FixedPointToInt - adds r1, r0, 0 - cmp r1, 0 - bne _0806EB72 - movs r0, 0x1 - ldr r2, [sp, 0xB0] - str r0, [r2] - str r1, [r2, 0x4] - movs r0, 0x2 - str r0, [r2, 0x8] - add r3, sp, 0x74 - ldrb r3, [r3] - strb r3, [r2, 0xC] - strb r1, [r2, 0xD] - strb r1, [r2, 0xE] - strb r1, [r2, 0xF] - b _0806F294 -_0806EB72: - ldr r0, _0806EBA4 - cmp r4, r0 - bne _0806EBA8 - mov r0, r9 - movs r1, 0x35 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806EBA8 - movs r0, 0x1 - ldr r6, [sp, 0xB0] - str r0, [r6] - movs r1, 0 - str r1, [r6, 0x4] - movs r0, 0x2 - str r0, [r6, 0x8] - add r0, sp, 0x74 - ldrb r0, [r0] - strb r0, [r6, 0xC] - strb r1, [r6, 0xD] - strb r1, [r6, 0xE] - strb r1, [r6, 0xF] - b _0806F294 - .align 2, 0 -_0806EBA4: .4byte 0x00000163 -_0806EBA8: - add r1, sp, 0x74 - ldrb r2, [r1] - ldr r1, [sp, 0xB0] - strb r2, [r1, 0xC] - ldr r1, _0806EDA4 - ldr r0, [r1] - movs r2, 0x9A - lsls r2, 1 - adds r0, r2 - add r3, sp, 0x74 - ldrb r3, [r3] - strb r3, [r0] - ldr r2, [r1] - movs r6, 0x9C - lsls r6, 1 - adds r0, r2, r6 - ldr r1, [sp, 0x80] - str r1, [r0] - lsls r1, 1 - mov r0, r10 - adds r0, 0x1C - adds r0, r1 - movs r3, 0 - ldrsh r4, [r0, r3] - mov r8, r1 - ldr r6, [sp, 0x78] - cmp r6, 0 - beq _0806EBF8 - ldr r0, [sp, 0x74] - cmp r0, 0x2 - bne _0806EBF8 - mov r1, r10 - movs r3, 0x28 - ldrsh r0, [r1, r3] - adds r4, r0 - ldrh r1, [r1, 0x28] - movs r6, 0xA2 - lsls r6, 1 - adds r0, r2, r6 - strh r1, [r0] -_0806EBF8: - mov r0, r10 - movs r2, 0x4 - ldrsh r1, [r0, r2] - ldr r0, _0806EDA8 - cmp r1, r0 - bne _0806EC06 - adds r4, 0x2 -_0806EC06: - movs r0, 0xD1 - lsls r0, 1 - cmp r1, r0 - bne _0806EC10 - subs r4, 0x2 -_0806EC10: - ldr r0, _0806EDAC - cmp r1, r0 - bne _0806EC18 - subs r4, 0x2 -_0806EC18: - cmp r4, 0 - bge _0806EC1E - movs r4, 0 -_0806EC1E: - cmp r4, 0x14 - ble _0806EC24 - movs r4, 0x14 -_0806EC24: - ldr r6, _0806EDA4 - ldr r0, [r6] - movs r3, 0x9F - lsls r3, 1 - adds r0, r3 - strb r4, [r0] - ldr r1, [r6] - mov r5, r10 - adds r5, 0x14 - ldr r0, [sp, 0x80] - adds r2, r5, r0 - ldrb r0, [r2] - adds r0, r7 - adds r3, 0x2 - adds r1, r3 - strh r0, [r1] - ldrb r0, [r2] - adds r0, r7 - lsls r0, 8 - ldr r2, _0806EDB0 - lsls r1, r4, 2 - adds r1, r2 - ldr r1, [r1] - bl s24_8_mul - adds r2, r0, 0 - ldr r0, [sp, 0x80] - lsls r4, r0, 2 - mov r0, r10 - adds r0, 0x2C - adds r0, r4 - ldr r1, [r0] - adds r0, r2, 0 - bl s24_8_mul - adds r2, r0, 0 - str r5, [sp, 0x88] - cmp r2, 0 - bge _0806EC74 - adds r0, 0xFF -_0806EC74: - asrs r0, 8 - str r0, [sp, 0x8] - ldr r0, [sp, 0x7C] - adds r0, 0x20 - add r0, r8 - movs r1, 0 - ldrsh r3, [r0, r1] - ldr r2, [sp, 0x80] - cmp r2, 0 - bne _0806ECA0 - ldr r0, [sp, 0x7C] - adds r0, 0xC0 - ldrb r0, [r0] - cmp r0, 0x6 - bne _0806ECA0 - ldr r0, [r6] - movs r6, 0xBD - lsls r6, 1 - adds r1, r0, r6 - movs r0, 0x1 - strb r0, [r1] - adds r3, 0x1 -_0806ECA0: - ldr r0, [sp, 0x7C] - movs r2, 0x4 - ldrsh r1, [r0, r2] - ldr r0, _0806EDA8 - cmp r1, r0 - bne _0806ECAE - subs r3, 0x2 -_0806ECAE: - movs r0, 0xD1 - lsls r0, 1 - cmp r1, r0 - bne _0806ECB8 - adds r3, 0x2 -_0806ECB8: - ldr r0, _0806EDAC - cmp r1, r0 - bne _0806ECC0 - subs r3, 0x2 -_0806ECC0: - cmp r3, 0 - bge _0806ECC6 - movs r3, 0 -_0806ECC6: - cmp r3, 0x14 - ble _0806ECCC - movs r3, 0x14 -_0806ECCC: - ldr r5, _0806EDA4 - ldr r0, [r5] - ldr r6, _0806EDB4 - adds r0, r6 - strb r3, [r0] - ldr r2, [r5] - ldr r0, [sp, 0x7C] - adds r0, 0x16 - ldr r1, [sp, 0x80] - adds r0, r1 - ldrb r1, [r0] - adds r6, 0x3 - adds r2, r6 - strh r1, [r2] - ldrb r0, [r0] - lsls r0, 8 - ldr r2, _0806EDB8 - lsls r1, r3, 2 - adds r1, r2 - ldr r1, [r1] - bl s24_8_mul - adds r2, r0, 0 - ldr r0, [sp, 0x7C] - adds r0, 0x34 - adds r0, r4 - ldr r1, [r0] - adds r0, r2, 0 - bl s24_8_mul - cmp r0, 0 - bge _0806ED0E - adds r0, 0xFF -_0806ED0E: - asrs r0, 8 - str r0, [sp, 0xC] - movs r0, 0x64 - bl DungeonRandInt - str r0, [sp, 0x84] - ldr r0, [sp, 0x80] - cmp r0, 0 - bne _0806EDC8 - ldr r0, [sp, 0x70] - movs r1, 0x13 - bl HasHeldItem - lsls r0, 24 - cmp r0, 0 - beq _0806ED4A - ldr r2, _0806EDBC - movs r3, 0 - ldrsh r1, [r2, r3] - ldr r0, [sp, 0x8] - adds r0, r1 - str r0, [sp, 0x8] - ldr r1, [r5] - movs r6, 0xB0 - lsls r6, 1 - adds r1, r6 - ldrb r0, [r2] - ldrb r2, [r1] - adds r0, r2 - strb r0, [r1] -_0806ED4A: - ldr r0, [sp, 0x70] - movs r1, 0x2B - bl HasHeldItem - lsls r0, 24 - cmp r0, 0 - beq _0806ED74 - ldr r2, _0806EDC0 - movs r3, 0 - ldrsh r1, [r2, r3] - ldr r0, [sp, 0x8] - adds r0, r1 - str r0, [sp, 0x8] - ldr r1, [r5] - movs r6, 0xB0 - lsls r6, 1 - adds r1, r6 - ldrb r0, [r2] - ldrb r2, [r1] - adds r0, r2 - strb r0, [r1] -_0806ED74: - ldr r3, [sp, 0x78] - cmp r3, 0 - beq _0806EE4A - mov r0, r9 - movs r1, 0x1E - bl HasHeldItem - lsls r0, 24 - cmp r0, 0 - beq _0806EE4A - ldr r2, _0806EDC4 - movs r6, 0 - ldrsh r1, [r2, r6] - ldr r0, [sp, 0xC] - adds r0, r1 - str r0, [sp, 0xC] - ldr r0, [r5] - movs r3, 0xB1 - lsls r3, 1 - adds r1, r0, r3 - ldrb r0, [r2] - ldrb r6, [r1] - adds r0, r6 - b _0806EE48 - .align 2, 0 -_0806EDA4: .4byte gDungeon -_0806EDA8: .4byte 0x000001a1 -_0806EDAC: .4byte 0x000001a3 -_0806EDB0: .4byte gUnknown_80F504C -_0806EDB4: .4byte 0x0000013f -_0806EDB8: .4byte gUnknown_80F50A0 -_0806EDBC: .4byte gUnknown_810AC60 -_0806EDC0: .4byte gUnknown_810AC68 -_0806EDC4: .4byte gUnknown_810AC64 -_0806EDC8: - ldr r0, [sp, 0x78] - cmp r0, 0 - beq _0806EDF6 - mov r0, r9 - movs r1, 0x22 - bl HasHeldItem - lsls r0, 24 - cmp r0, 0 - beq _0806EDF6 - ldr r2, _0806EEF8 - movs r3, 0 - ldrsh r1, [r2, r3] - ldr r0, [sp, 0xC] - adds r0, r1 - str r0, [sp, 0xC] - ldr r0, [r5] - ldr r6, _0806EEFC - adds r1, r0, r6 - ldrb r0, [r2] - ldrb r2, [r1] - adds r0, r2 - strb r0, [r1] -_0806EDF6: - ldr r0, [sp, 0x70] - movs r1, 0x21 - bl HasHeldItem - lsls r0, 24 - cmp r0, 0 - beq _0806EE20 - ldr r2, _0806EF00 - movs r3, 0 - ldrsh r1, [r2, r3] - ldr r0, [sp, 0x8] - adds r0, r1 - str r0, [sp, 0x8] - ldr r0, _0806EF04 - ldr r0, [r0] - ldr r6, _0806EF08 - adds r1, r0, r6 - ldrb r0, [r2] - ldrb r2, [r1] - adds r0, r2 - strb r0, [r1] -_0806EE20: - ldr r0, [sp, 0x70] - movs r1, 0x2B - bl HasHeldItem - lsls r0, 24 - cmp r0, 0 - beq _0806EE4A - ldr r2, _0806EF0C - movs r3, 0 - ldrsh r1, [r2, r3] - ldr r0, [sp, 0x8] - adds r0, r1 - str r0, [sp, 0x8] - ldr r0, _0806EF04 - ldr r0, [r0] - ldr r6, _0806EF08 - adds r1, r0, r6 - ldrb r0, [r2] - ldrb r2, [r1] - adds r0, r2 -_0806EE48: - strb r0, [r1] -_0806EE4A: - ldr r0, _0806EF04 - ldr r2, [r0] - movs r3, 0xA3 - lsls r3, 1 - adds r1, r2, r3 - add r0, sp, 0x8 - ldrh r0, [r0] - strh r0, [r1] - movs r6, 0xA4 - lsls r6, 1 - adds r1, r2, r6 - add r4, sp, 0xC - ldrh r0, [r4] - strh r0, [r1] - ldr r0, [sp, 0x8] - cmp r0, 0 - bge _0806EE70 - movs r0, 0 - str r0, [sp, 0x8] -_0806EE70: - ldr r1, _0806EF10 - ldr r0, [sp, 0x8] - cmp r0, r1 - ble _0806EE7C - ldr r0, _0806EF14 - str r0, [sp, 0x8] -_0806EE7C: - movs r3, 0xA8 - lsls r3, 1 - add r3, r10 - ldrh r2, [r3] - ldr r1, _0806EF18 - adds r0, r1, 0 - ands r0, r2 - strh r0, [r3] - movs r2, 0xA7 - lsls r2, 1 - add r2, r10 - ldrh r0, [r2] - ands r1, r0 - strh r1, [r2] - str r4, [sp] - ldr r0, [sp, 0x84] - str r0, [sp, 0x4] - ldr r0, [sp, 0x70] - mov r1, r9 - ldr r2, [sp, 0x74] - add r3, sp, 0x8 - bl sub_806E8B0 - add r5, sp, 0x10 - ldr r1, [sp, 0x8] - ldr r0, [sp, 0xC] - subs r1, r0 - adds r0, r5, 0 - bl sub_800A020 - add r4, sp, 0x18 - adds r0, r4, 0 - movs r1, 0x8 - bl sub_800A020 - adds r0, r5, 0 - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_800A3F0 - mov r1, r10 - ldrb r6, [r1, 0x6] - mov r8, r5 - adds r7, r4, 0 - cmp r6, 0 - bne _0806EF20 - ldrb r1, [r1, 0x9] - adds r0, r7, 0 - bl sub_800A020 - str r6, [sp, 0x20] - ldr r0, _0806EF1C - add r2, sp, 0x20 - str r0, [r2, 0x4] - adds r0, r7, 0 - adds r1, r7, 0 - bl sub_800A34C - mov r2, r10 - ldrb r0, [r2, 0x9] - lsls r0, 1 - b _0806EF60 - .align 2, 0 -_0806EEF8: .4byte gUnknown_810AC66 -_0806EEFC: .4byte 0x00000163 -_0806EF00: .4byte gUnknown_810AC62 -_0806EF04: .4byte gDungeon -_0806EF08: .4byte 0x00000161 -_0806EF0C: .4byte gUnknown_810AC68 -_0806EF10: .4byte 0x000003e6 -_0806EF14: .4byte 0x000003e7 -_0806EF18: .4byte 0x0000feff -_0806EF1C: .4byte 0x0000aaaa -_0806EF20: - ldr r3, [sp, 0x88] - ldr r6, [sp, 0x80] - adds r0, r3, r6 - ldrb r0, [r0] - str r0, [sp, 0x28] - movs r0, 0x1 - str r0, [sp, 0x2C] - add r3, sp, 0x28 - add r0, sp, 0x2C - str r0, [sp] - ldr r0, [sp, 0x84] - str r0, [sp, 0x4] - ldr r0, [sp, 0x70] - mov r1, r9 - ldr r2, [sp, 0x74] - bl sub_806E8B0 - ldr r1, [sp, 0x28] - adds r0, r7, 0 - bl sub_800A020 - add r4, sp, 0x20 - adds r0, r4, 0 - movs r1, 0x3 - bl sub_800A020 - adds r0, r7, 0 - adds r1, r7, 0 - adds r2, r4, 0 - bl sub_800A3F0 - ldr r0, [sp, 0x28] -_0806EF60: - movs r1, 0x3 - bl __divsi3 - adds r6, r0, 0 - add r5, sp, 0x30 - adds r0, r5, 0 - mov r1, r8 - adds r2, r7, 0 - bl sub_800A6D0 - ldr r4, _0806F098 - ldr r0, [r4] - movs r1, 0xA5 - lsls r1, 1 - adds r0, r1 - movs r2, 0 - mov r8, r2 - strh r6, [r0] - adds r0, r5, 0 - bl sub_800A048 - ldr r1, [r4] - movs r3, 0xA6 - lsls r3, 1 - adds r1, r3 - strh r0, [r1] - ldr r0, [sp, 0x30] - ldr r1, [sp, 0x34] - str r0, [sp, 0x38] - str r1, [sp, 0x3C] - str r0, [sp, 0x48] - str r1, [sp, 0x4C] - add r6, sp, 0x38 - adds r0, r6, 0 - adds r1, r6, 0 - adds r2, r6, 0 - bl sub_800A34C - mov r0, r8 - str r0, [sp, 0x40] - ldr r0, _0806F09C - add r5, sp, 0x40 - str r0, [r5, 0x4] - adds r0, r6, 0 - adds r1, r6, 0 - adds r2, r5, 0 - bl sub_800A34C - adds r0, r5, 0 - movs r1, 0x2 - bl sub_800A020 - add r4, sp, 0x48 - adds r0, r4, 0 - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_800A34C - ldr r1, [sp, 0xC] - adds r0, r5, 0 - bl sub_800A020 - adds r0, r4, 0 - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_800A6F0 - adds r0, r5, 0 - movs r1, 0xA - bl sub_800A020 - adds r0, r4, 0 - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_800A6D0 - add r5, sp, 0x50 - adds r0, r5, 0 - adds r1, r6, 0 - adds r2, r4, 0 - bl sub_800A6D0 - ldr r4, _0806F0A0 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_800A2F0 - lsls r0, 24 - mov r8, r5 - cmp r0, 0 - beq _0806F01E - ldr r0, [r4] - ldr r1, [r4, 0x4] - str r0, [sp, 0x50] - str r1, [sp, 0x54] -_0806F01E: - ldr r4, _0806F0A4 - mov r0, r8 - adds r1, r4, 0 - bl sub_800A2F0 - lsls r0, 24 - cmp r0, 0 - beq _0806F036 - ldr r0, [r4] - ldr r1, [r4, 0x4] - str r0, [sp, 0x50] - str r1, [sp, 0x54] -_0806F036: - add r4, sp, 0x58 - ldr r1, [sp, 0xB0] - str r1, [sp] - adds r0, r4, 0 - ldr r1, [sp, 0x70] - mov r2, r9 - ldr r3, [sp, 0x74] - bl sub_806E100 - lsls r0, 24 - lsrs r5, r0, 24 - adds r7, r4, 0 - ldr r2, [sp, 0x74] - cmp r2, 0x2 - bne _0806F0BC - mov r0, r9 - bl GetFlashFireStatus - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - beq _0806F0BC - ldr r3, [sp, 0x7C] - movs r6, 0xA9 - lsls r6, 1 - adds r1, r3, r6 - ldrb r0, [r1] - cmp r0, 0 - bne _0806F0BC - ldr r0, [sp, 0x78] - cmp r0, 0 - beq _0806F118 - movs r0, 0x1 - strb r0, [r1] - ldr r0, _0806F0A8 - mov r1, r9 - movs r2, 0 - bl SetMessageArgument - cmp r4, 0x1 - bne _0806F0B0 - ldr r0, _0806F0AC - ldr r2, [r0] - ldr r0, [sp, 0x70] - mov r1, r9 - bl TryDisplayDungeonLoggableMessage3 - b _0806F0BC - .align 2, 0 -_0806F098: .4byte gDungeon -_0806F09C: .4byte 0x00000ccc -_0806F0A0: .4byte gUnknown_8106F24 -_0806F0A4: .4byte gUnknown_8106F04 -_0806F0A8: .4byte gFormatBuffer_Monsters + 0x50 -_0806F0AC: .4byte gUnknown_80FAE00 -_0806F0B0: - ldr r0, _0806F15C - ldr r2, [r0] - ldr r0, [sp, 0x70] - mov r1, r9 - bl TryDisplayDungeonLoggableMessage3 -_0806F0BC: - ldr r1, [sp, 0x78] - cmp r1, 0 - beq _0806F118 - ldr r2, [sp, 0x80] - cmp r2, 0 - bne _0806F0EE - ldr r0, [sp, 0x7C] - adds r0, 0xC4 - ldrb r4, [r0] - cmp r4, 0x1 - bne _0806F0EE - mov r0, r9 - bl sub_8041B74 - ldr r2, _0806F160 - adds r0, r7, 0 - adds r1, r7, 0 - bl sub_800A34C - ldr r0, _0806F164 - ldr r0, [r0] - movs r3, 0xB3 - lsls r3, 1 - adds r0, r3 - strb r4, [r0] -_0806F0EE: - ldr r6, [sp, 0x80] - cmp r6, 0x1 - bne _0806F118 - ldr r0, [sp, 0x7C] - adds r0, 0xC4 - ldrb r0, [r0] - cmp r0, 0x3 - bne _0806F118 - mov r0, r9 - bl sub_8041B5C - ldr r2, _0806F160 - adds r0, r7, 0 - adds r1, r7, 0 - bl sub_800A34C - ldr r0, _0806F164 - ldr r0, [r0] - ldr r1, _0806F168 - adds r0, r1 - strb r6, [r0] -_0806F118: - mov r0, r9 - movs r1, 0xC - bl HasAbility - lsls r0, 24 - cmp r0, 0 - bne _0806F1F4 - mov r0, r9 - movs r1, 0x13 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - bne _0806F1F4 - mov r3, r10 - ldrb r0, [r3, 0x6] - ldr r4, [sp, 0xAC] - cmp r0, 0 - beq _0806F140 - movs r4, 0 -_0806F140: - mov r0, r10 - adds r0, 0xDC - ldrb r0, [r0] - cmp r0, 0x4 - bne _0806F170 - ldr r4, _0806F16C - ldr r0, _0806F164 - ldr r0, [r0] - movs r6, 0xB4 - lsls r6, 1 - adds r0, r6 - movs r1, 0x1 - strb r1, [r0] - b _0806F1DA - .align 2, 0 -_0806F15C: .4byte gUnknown_80FADD8 -_0806F160: .4byte gUnknown_8106F1C -_0806F164: .4byte gDungeon -_0806F168: .4byte 0x00000167 -_0806F16C: .4byte 0x000003e7 -_0806F170: - ldr r0, [sp, 0x70] - movs r1, 0xC - bl HasHeldItem - lsls r0, 24 - cmp r0, 0 - beq _0806F194 - ldr r0, _0806F2A4 - movs r1, 0 - ldrsh r0, [r0, r1] - adds r4, r0 - ldr r0, _0806F2A8 - ldr r0, [r0] - movs r2, 0xB2 - lsls r2, 1 - adds r0, r2 - movs r1, 0x1 - strb r1, [r0] -_0806F194: - mov r0, r9 - movs r1, 0xD - bl HasHeldItem - lsls r0, 24 - cmp r0, 0 - beq _0806F1B6 - ldr r0, _0806F2A4 - movs r3, 0 - ldrsh r0, [r0, r3] - adds r4, r0 - ldr r0, _0806F2A8 - ldr r0, [r0] - ldr r6, _0806F2AC - adds r1, r0, r6 - movs r0, 0x1 - strb r0, [r1] -_0806F1B6: - cmp r5, 0 - beq _0806F1DA - ldr r0, [sp, 0x70] - movs r1, 0x1 - bl IQSkillIsEnabled - lsls r0, 24 - cmp r0, 0 - beq _0806F1DA - ldr r0, _0806F2B0 - movs r1, 0 - ldrsh r4, [r0, r1] - ldr r0, _0806F2A8 - ldr r0, [r0] - ldr r2, _0806F2B4 - adds r1, r0, r2 - movs r0, 0x1 - strb r0, [r1] -_0806F1DA: - movs r0, 0x64 - bl DungeonRandInt - cmp r0, r4 - bge _0806F1F4 - ldr r2, _0806F2B8 - adds r0, r7, 0 - adds r1, r7, 0 - bl sub_800A34C - movs r0, 0x1 - ldr r3, [sp, 0xB0] - strb r0, [r3, 0xD] -_0806F1F4: - mov r0, r8 - bl sub_800A048 - ldr r5, _0806F2A8 - ldr r1, [r5] - movs r6, 0xAA - lsls r6, 1 - adds r1, r6 - str r0, [r1] - mov r0, r8 - mov r1, r8 - adds r2, r7, 0 - bl sub_800A34C - ldr r0, [r5] - movs r1, 0xAE - lsls r1, 1 - adds r0, r1 - ldr r2, [sp, 0xB4] - str r2, [r0] - add r4, sp, 0x60 - adds r0, r4, 0 - adds r1, r2, 0 - bl sub_800A088 - mov r0, r8 - mov r1, r8 - adds r2, r4, 0 - bl sub_800A34C - mov r0, r8 - bl sub_800A048 - ldr r1, [r5] - movs r3, 0xA8 - lsls r3, 1 - adds r1, r3 - str r0, [r1] - movs r0, 0x80 - lsls r0, 7 - bl DungeonRandInt - movs r6, 0 - str r6, [sp, 0x58] - movs r1, 0xE0 - lsls r1, 8 - adds r0, r1 - str r0, [r7, 0x4] - mov r0, r8 - mov r1, r8 - adds r2, r7, 0 - bl sub_800A34C - add r4, sp, 0x68 - adds r0, r4, 0 - movs r1, 0x64 - bl sub_800A020 - adds r0, r7, 0 - adds r1, r4, 0 - adds r2, r7, 0 - bl sub_800A34C - adds r0, r7, 0 - bl sub_800A048 - ldr r1, [r5] - movs r2, 0xAC - lsls r2, 1 - adds r1, r2 - str r0, [r1] - mov r0, r8 - bl sub_800A048 - ldr r3, [sp, 0xB0] - str r0, [r3] - str r6, [r3, 0x4] - cmp r0, 0 - bne _0806F294 - strb r0, [r3, 0xD] -_0806F294: - add sp, 0x8C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806F2A4: .4byte gUnknown_80F4DAE -_0806F2A8: .4byte gDungeon -_0806F2AC: .4byte 0x00000165 -_0806F2B0: .4byte gUnknown_80F4DB0 -_0806F2B4: .4byte 0x00000169 -_0806F2B8: .4byte gUnknown_8106F14 - thumb_func_end sub_806EAF4 - - thumb_func_start sub_806F2BC -sub_806F2BC: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - adds r5, r0, 0 - mov r12, r1 - ldr r7, [sp, 0x2C] - lsls r2, 24 - lsrs r4, r2, 24 - adds r6, r3, 0 - cmp r6, 0 - bgt _0806F2D6 - movs r6, 0x1 -_0806F2D6: - ldr r0, _0806F320 - cmp r6, r0 - ble _0806F2DE - adds r6, r0, 0 -_0806F2DE: - movs r0, 0 - mov r8, r0 - strb r4, [r7, 0xC] - str r7, [sp] - add r0, sp, 0x4 - adds r1, r5, 0 - mov r2, r12 - adds r3, r4, 0 - bl sub_806E100 - add r4, sp, 0xC - adds r0, r4, 0 - adds r1, r6, 0 - bl sub_800A020 - adds r0, r4, 0 - adds r1, r4, 0 - add r2, sp, 0x4 - bl sub_800A34C - adds r0, r4, 0 - bl sub_800A048 - str r0, [r7] - mov r0, r8 - str r0, [r7, 0x4] - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0806F320: .4byte 0x000003e7 - thumb_func_end sub_806F2BC - - thumb_func_start DealDamageToEntity -DealDamageToEntity: - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x94 - mov r8, r0 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r4, r3, 16 - asrs r4, 16 - add r0, sp, 0x10 - bl sub_80457DC - add r2, sp, 0x84 - str r5, [sp, 0x84] - movs r0, 0x2 - str r0, [r2, 0x8] - movs r0, 0 - strb r0, [r2, 0xC] - str r6, [r2, 0x4] - strb r0, [r2, 0xD] - strb r0, [r2, 0xE] - strb r0, [r2, 0xF] - str r0, [sp] - str r4, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - add r0, sp, 0x10 - mov r1, r8 - movs r3, 0 - bl HandleDealingDamage - add sp, 0x94 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end DealDamageToEntity - - thumb_func_start sub_806F370 -sub_806F370: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x2C - mov r10, r0 - adds r7, r1, 0 - mov r9, r3 - ldr r0, [sp, 0x50] - ldr r1, [sp, 0x54] - ldr r3, [sp, 0x58] - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 16 - asrs r1, 16 - mov r8, r1 - adds r5, r2, 0 - movs r0, 0x2 - str r0, [sp, 0x18] - str r3, [sp, 0x14] - add r0, sp, 0x10 - movs r1, 0 - strb r4, [r0, 0xC] - strb r1, [r0, 0xD] - strb r1, [r0, 0xE] - cmp r4, 0 - beq _0806F3FC - ldr r1, [r7, 0x70] - movs r2, 0 - lsls r0, r4, 3 - mov r3, sp - adds r3, 0x20 - str r3, [sp, 0x28] - ldr r6, _0806F408 - mov r12, r6 - adds r1, 0x5C - adds r0, r4 - lsls r3, r0, 2 - ldr r4, [sp, 0x28] -_0806F3C0: - adds r0, r1, r2 - ldrb r0, [r0] - lsls r0, 1 - adds r0, r3 - add r0, r12 - movs r6, 0 - ldrsh r0, [r0, r6] - stm r4!, {r0} - adds r2, 0x1 - cmp r2, 0x1 - ble _0806F3C0 - adds r0, r7, 0 - movs r1, 0x35 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _0806F3FC - ldr r2, _0806F40C - ldr r1, [sp, 0x28] - ldr r0, [r1, 0x4] - lsls r0, 2 - ldr r1, [sp, 0x20] - lsls r1, 4 - adds r0, r1 - adds r0, r2 - ldr r0, [r0] - cmp r0, 0x3 - beq _0806F3FC - movs r5, 0 -_0806F3FC: - str r5, [sp, 0x10] - cmp r5, 0 - bne _0806F410 - add r1, sp, 0x10 - movs r0, 0x1 - b _0806F414 - .align 2, 0 -_0806F408: .4byte gTypeEffectivenessChart -_0806F40C: .4byte gUnknown_80F54B4 -_0806F410: - add r1, sp, 0x10 - movs r0, 0 -_0806F414: - strb r0, [r1, 0xF] - mov r3, r9 - str r3, [sp] - mov r6, r8 - str r6, [sp, 0x4] - ldr r0, [sp, 0x5C] - str r0, [sp, 0x8] - ldr r0, [sp, 0x60] - str r0, [sp, 0xC] - mov r0, r10 - adds r1, r7, 0 - add r2, sp, 0x10 - movs r3, 0 - bl HandleDealingDamage - ldr r0, [sp, 0x4C] - cmp r0, 0 - beq _0806F440 - add r0, sp, 0x10 - ldrb r0, [r0, 0xF] - ldr r1, [sp, 0x4C] - strb r0, [r1] -_0806F440: - add sp, 0x2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_806F370 - - .align 2,0 diff --git a/include/structs/dungeon_entity.h b/include/structs/dungeon_entity.h index f395a81e5..0575a7d55 100644 --- a/include/structs/dungeon_entity.h +++ b/include/structs/dungeon_entity.h @@ -196,10 +196,8 @@ typedef struct EntityInfo /* 0x10 */ s16 maxHPStat; // Bosses have higher HP than normal for their level. This is the max HP they would normally have given their level. /* 0x12 */ s16 originalHP; - /* 0x14 */ u8 atk; - /* 0x15 */ u8 spAtk; - /* 0x16 */ u8 def; - /* 0x17 */ u8 spDef; + /* 0x14 */ u8 atk[2]; // Index 0 is Attack. Index 1 is Special Attack. + /* 0x16 */ u8 def[2]; // Index 0 is Defense. Index 1 is Special Defense. /* 0x18 */ u32 exp; // Temporary stat boosts/drops from effects like Growl or Swords Dance. // These start at 10 and are in the range [1, 19]. diff --git a/ld_script.txt b/ld_script.txt index 77ff0e155..37b242d81 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -249,7 +249,6 @@ SECTIONS { src/code_806CD90.o(.text); src/type_effectiveness.o(.text); src/code_806E8B0.o(.text); - asm/code_806E8B0.o(.text); src/code_806FDF4.o(.text); src/status_checks.o(.text); src/dungeon_movement.o(.text); diff --git a/src/code_8069D4C.c b/src/code_8069D4C.c index 2ef7cdac6..08a1a25e5 100644 --- a/src/code_8069D4C.c +++ b/src/code_8069D4C.c @@ -33,10 +33,10 @@ void sub_8069D4C(struct unkStruct_8069D4C *r0, Entity *target) GetPokemonLevelData(&leveldata, info->id, info->level); r0->exp = leveldata.expRequired; - r0->offense.att[0] = info->atk; - r0->offense.att[1] = info->spAtk; - r0->offense.def[0] = info->def; - r0->offense.def[1] = info->spDef; + r0->offense.att[0] = info->atk[0]; + r0->offense.att[1] = info->atk[1]; + r0->offense.def[0] = info->def[0]; + r0->offense.def[1] = info->def[1]; r0->heldItem = info->heldItem; memcpy(r0->moves.moves, info->moves.moves, sizeof(r0->moves)); r0->belly = info->belly; diff --git a/src/code_806E8B0.c b/src/code_806E8B0.c index c00a53ce3..b69effc7b 100644 --- a/src/code_806E8B0.c +++ b/src/code_806E8B0.c @@ -5,119 +5,497 @@ #include "status_checks_1.h" #include "text_util.h" #include "dungeon_message.h" - -extern u8 *gUnknown_80FEE04[]; -extern u8 *gUnknown_80FEE2C[]; -extern u8 *gUnknown_80FEE54[]; +#include "string_format.h" +#include "type_effectiveness.h" +#include "constants/move_id.h" +#include "constants/monster.h" +#include "constants/status.h" +#include "constants/type.h" +#include "constants/iq_skill.h" +#include "math.h" +#include "number_util.h" +#include "status.h" +#include "type_chart.h" +#include "dungeon_random.h" +#include "code_8045A00.h" +#include "dungeon_items.h" +#include "structs/str_damage.h" void sub_8042940(Entity *r0); void sub_80428B0(Entity *r0); void sub_80428C4(Entity *r0); -void sub_806E8B0(Entity * pokemon, Entity * target, u8 param_3, s32 *param_4, s32 *param_5, s32 param_6) +extern void sub_806F500(void); +extern void sub_800A020(struct unkStruct_80943A8 *param_1, u32 param_2); +extern void sub_800A3F0(struct unkStruct_80943A8 *param_1, struct unkStruct_80943A8 *param_2, struct unkStruct_80943A8 *); +extern void sub_800A6D0(struct unkStruct_80943A8 *param_1, struct unkStruct_80943A8 *param_2, struct unkStruct_80943A8 *); +extern void sub_800A34C(struct unkStruct_80943A8 *param_1, struct unkStruct_80943A8 *param_2, const struct unkStruct_80943A8 *param3); +extern void sub_800A6F0(struct unkStruct_80943A8 *param_1, struct unkStruct_80943A8 *param_2, struct unkStruct_80943A8 *param3); +extern void sub_800A088(struct unkStruct_80943A8 *param_1, u32 param_2); +extern u32 sub_800A048(struct unkStruct_80943A8 *param_1); +extern bool8 sub_800A2F0(const struct unkStruct_80943A8*, const struct unkStruct_80943A8*); +extern bool8 sub_806E100(struct unkStruct_80943A8 *param_1, Entity *pokemon, Entity *target, u8 type, struct DamageStruct *dmgStruct); +extern void sub_8041B74(Entity *pokemon); +extern void sub_8041B5C(Entity *pokemon); +extern void HandleDealingDamage(Entity *attacker, Entity *target, struct DamageStruct *dmgStruct, bool32 isFalseSwipe, bool32 giveExp, s16 arg4, bool32 arg8, s32 argC); +extern void sub_80457DC(Entity *); + +extern const s32 gUnknown_80F54B4[NUM_EFFECTIVENESS][NUM_EFFECTIVENESS]; +extern const s32 gUnknown_80F504C[]; +extern const s32 gUnknown_80F50A0[]; +extern const s16 gUnknown_810AC60; +extern const s16 gUnknown_810AC68; +extern const s16 gUnknown_810AC64; +extern const s16 gUnknown_810AC66; +extern const s16 gUnknown_810AC68; +extern const s16 gUnknown_810AC62; +extern const s16 gUnknown_80F4DAE; +extern const s16 gUnknown_80F4DB0; +extern const struct unkStruct_80943A8 gUnknown_8106F24; +extern const struct unkStruct_80943A8 gUnknown_8106F04; +extern const struct unkStruct_80943A8 gUnknown_8106F1C; +extern const struct unkStruct_80943A8 gUnknown_8106F14; +extern const u8 *const gUnknown_80FAE00; +extern const u8 *const gUnknown_80FADD8; +extern const u8 *const gUnknown_80FEE04; +extern const u8 *const gUnknown_80FEE2C; +extern const u8 *const gUnknown_80FEE54; + +static void ApplyAtkDefStatBoosts(Entity *attacker, Entity *target, u8 moveType, s32 *atkStat, s32 *defStat, s32 rand) { - bool8 hasNegStatus_pokemon; - bool8 visFlags_pokemon_1; - bool8 visFlags_pokemon_2; - bool8 hasNegStatus_target; - bool8 visFlags_target; - s32 iVar3; - bool32 isNotEnemy; - EntityInfo * entityInfo; - EntityInfo * entityInfo_1; - s32 r7; - s32 r8; - s32 r10; - s32 sp_0x4; - s32 sp_0x8; + bool32 isNotEnemy; + s32 atkMultiplier = 1; + s32 atkDivisor = 1; + s32 defMultiplier = 1; + s32 defDivisor = 1; + s32 splitIndex = (!IsTypePhysical(moveType)) ? 1 : 0; - r7 = 1; - r8 = 1; - sp_0x4 = 1; - sp_0x8 = 1; - r10 = IsTypePhysical(param_3) == 0; + if (HasAbility(attacker, ABILITY_GUTS)) { + EntityInfo *entInfo = GetEntInfo(attacker); + bool8 gutsBoost = HasNegativeStatus(attacker); + bool8 visFlags_attacker_1 = SetVisualFlags(entInfo,1,gutsBoost); - - if (HasAbility(pokemon, ABILITY_GUTS)) { - entityInfo = GetEntInfo(pokemon); - hasNegStatus_pokemon = HasNegativeStatus(pokemon); - visFlags_pokemon_1 = SetVisualFlags(entityInfo,1,hasNegStatus_pokemon); - if (hasNegStatus_pokemon) { - r7 = 2; + if (gutsBoost) { + atkMultiplier = 2; + } + if (visFlags_attacker_1) { + sub_80428B0(attacker); + TryDisplayDungeonLoggableMessage3(attacker,target, gUnknown_80FEE04); // Guts boosted its power + } } - if (visFlags_pokemon_1) { - sub_80428B0(pokemon); - TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FEE04); // Guts boosted its power + + if ((HasAbility(attacker, ABILITY_HUGE_POWER)) || (HasAbility(attacker, ABILITY_PURE_POWER))) { + EntityInfo *entInfo = GetEntInfo(attacker); + bool32 hugePowerBoost = (rand < 33 && splitIndex == 0); + bool8 visFlags_attacker_2 = SetVisualFlags(entInfo,0x100,hugePowerBoost); + + if (hugePowerBoost) { + atkMultiplier *= 3; + atkDivisor *= 2; + } + if (visFlags_attacker_2) { + sub_80428C4(attacker); + TryDisplayDungeonLoggableMessage3(attacker,target, gUnknown_80FEE2C); // It's special ability boosted Attack + } } - } - if ((HasAbility(pokemon, ABILITY_HUGE_POWER)) || (HasAbility(pokemon, ABILITY_PURE_POWER))) { - entityInfo_1 = GetEntInfo(pokemon); - iVar3 = 0; - if ((param_6 < 0x21) && (!r10)) { - iVar3 = 1; + if ((HasAbility(attacker, ABILITY_HUSTLE)) && (splitIndex == 0)) { + atkMultiplier *= 3; + atkDivisor *= 2; } - visFlags_pokemon_2 = SetVisualFlags(entityInfo_1,0x100,iVar3); - if (iVar3 != 0) { - r7 *= 3; - r8 <<= 1; + + if (GetEntInfo(attacker)->isNotTeamMember) { + isNotEnemy = FALSE; } - if (visFlags_pokemon_2) { - sub_80428C4(pokemon); - TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FEE2C); // It's special ability boosted Attack + else { + isNotEnemy = TRUE; } - } - if ((HasAbility(pokemon, ABILITY_HUSTLE)) && (!r10)) { - r7 *= 3; - r8 <<= 1; - } - - if(GetEntInfo(pokemon)->isNotTeamMember) - { - isNotEnemy = FALSE; - } - else - { - isNotEnemy = TRUE; - } - - if ((HasAbility(pokemon, ABILITY_PLUS)) && (r10 == 1) && gDungeon->minusIsActive[isNotEnemy]) { - r7 *= 15; - r8 *= 10; - } - - // ABILITY_MINUS - if ((HasAbility(pokemon, ABILITY_MINUS)) && (r10 == 1) && gDungeon->plusIsActive[isNotEnemy]) { - r7 *= 15; - r8 *= 10; - } - - if (HasAbility(target, ABILITY_INTIMIDATE) && (!r10)) { - r7 <<= 2; - r8 *= 5; - } - - if ((HasAbility(target, ABILITY_MARVEL_SCALE)) && (!r10)) { - entityInfo = GetEntInfo(target); - hasNegStatus_target = HasNegativeStatus(target); - visFlags_target = SetVisualFlags(entityInfo, 8, hasNegStatus_target); - if (hasNegStatus_target) { - sp_0x4 *= 3; - sp_0x8 <<= 1; + if ((HasAbility(attacker, ABILITY_PLUS)) && (splitIndex == 1) && gDungeon->minusIsActive[isNotEnemy]) { + atkMultiplier *= 15; + atkDivisor *= 10; } - if (visFlags_target) { - sub_8042940(target); - TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FEE54); // Its special ability quickened attacks! + if ((HasAbility(attacker, ABILITY_MINUS)) && (splitIndex == 1) && gDungeon->plusIsActive[isNotEnemy]) { + atkMultiplier *= 15; + atkDivisor *= 10; } - } - *param_4 *= r7; - *param_5 *= sp_0x4; - if (r8 != 1) { - *param_4 = *param_4 / r8; - } - if (sp_0x8 != 1) { - *param_5 = *param_5 / sp_0x8; - } + if (HasAbility(target, ABILITY_INTIMIDATE) && (splitIndex == 0)) { + atkMultiplier *= 4; + atkDivisor *= 5; + } + + if ((HasAbility(target, ABILITY_MARVEL_SCALE)) && (splitIndex == 0)) { + EntityInfo *targetInfo = GetEntInfo(target); + bool8 hasNegStatus_target = HasNegativeStatus(target); + bool8 visFlags_target = SetVisualFlags(targetInfo, 8, hasNegStatus_target); + + if (hasNegStatus_target) { + defMultiplier *= 3; + defDivisor *= 2; + } + if (visFlags_target) { + sub_8042940(target); + TryDisplayDungeonLoggableMessage3(attacker,target, gUnknown_80FEE54); // Its special ability quickened attacks! + } + } + + *atkStat *= atkMultiplier; + *defStat *= defMultiplier; + if (atkDivisor != 1) { + *atkStat = *atkStat / atkDivisor; + } + if (defDivisor != 1) { + *defStat = *defStat / defDivisor; + } +} + +static inline void SetDamageOne(struct DamageStruct *dmgStruct, u8 moveType) +{ + dmgStruct->dmg = 1; + dmgStruct->residualDmgType = 0; + dmgStruct->typeEffectiveness = EFFECTIVENESS_NEUTRAL; + dmgStruct->type = moveType; + dmgStruct->isCrit = FALSE; + dmgStruct->unkE = 0; + dmgStruct->unkF = 0; +} + +void CalcDamage(Entity *attacker, Entity *target, u8 moveType, s32 movePower, s32 critChance, struct DamageStruct *dmgStruct, s32 arg8, u16 moveId, bool8 arg_10) +{ + EntityInfo *attackerInfo = GetEntInfo(attacker); + EntityInfo *targetInfo = GetEntInfo(target); + s32 splitIndex = (!IsTypePhysical(moveType)) ? 1 : 0; + + sub_806F500(); + if (!attackerInfo->isTeamLeader && FixedPointToInt(attackerInfo->belly) == 0) { + SetDamageOne(dmgStruct, moveType); + } + else if (moveId == MOVE_REGULAR_ATTACK && HasAbility(target, ABILITY_WONDER_GUARD)) { + SetDamageOne(dmgStruct, moveType); + } + else { + s32 atkStatStage, defStatStage; + s32 statCalc; + s32 atkStat, defStat; + s32 rand; + s32 r6; + struct unkStruct_80943A8 unkSp1; + struct unkStruct_80943A8 unkSp2; + struct unkStruct_80943A8 unkSp3; + struct unkStruct_80943A8 unkSp4; + struct unkStruct_80943A8 unkSp5; + struct unkStruct_80943A8 unkSp6; + struct unkStruct_80943A8 unkSp7; + struct unkStruct_80943A8 unkSp8; + struct unkStruct_80943A8 unkSp9; + struct unkStruct_80943A8 unkSp10; + struct unkStruct_80943A8 unkSp11; + bool8 r5; + + dmgStruct->type = moveType; + gDungeon->unk134.unk134 = moveType; + gDungeon->unk134.unk138 = splitIndex; + + atkStatStage = attackerInfo->offensiveStages[splitIndex]; + if (arg_10 && moveType == TYPE_FIRE) { + atkStatStage += attackerInfo->flashFireBoost; + gDungeon->unk134.unk140[2] = attackerInfo->flashFireBoost; + } + if (attackerInfo->apparentID == MONSTER_DEOXYS_ATTACK) { + atkStatStage += 2; + } + if (attackerInfo->apparentID == MONSTER_DEOXYS_DEFENSE) { + atkStatStage -= 2; + } + if (attackerInfo->apparentID == MONSTER_DEOXYS_SPEED) { + atkStatStage -= 2; + } + + if (atkStatStage < 0) atkStatStage = 0; + if (atkStatStage > 20) atkStatStage = 20; + + gDungeon->unk134.unk13E[0] = atkStatStage; + gDungeon->unk134.unk140[0] = attackerInfo->atk[splitIndex] + movePower; + statCalc = s24_8_mul((attackerInfo->atk[splitIndex] + movePower) * 256, gUnknown_80F504C[atkStatStage]); + statCalc = s24_8_mul(statCalc, attackerInfo->offensiveMultipliers[splitIndex]); + atkStat = statCalc / 256; + + defStatStage = targetInfo->defensiveStages[splitIndex]; + if (splitIndex == 0 && targetInfo->charging.chargingStatus == STATUS_SKULL_BASH) { + gDungeon->unk134.unk17A = 1; + defStatStage++; + } + if (targetInfo->apparentID == MONSTER_DEOXYS_ATTACK) { + defStatStage -= 2; + } + if (targetInfo->apparentID == MONSTER_DEOXYS_DEFENSE) { + defStatStage += 2; + } + if (targetInfo->apparentID == MONSTER_DEOXYS_SPEED) { + defStatStage -= 2; + } + + if (defStatStage < 0) defStatStage = 0; + if (defStatStage > 20) defStatStage = 20; + + gDungeon->unk134.unk13E[1] = defStatStage; + gDungeon->unk134.unk140[1] = targetInfo->def[splitIndex]; + statCalc = s24_8_mul((targetInfo->def[splitIndex]) * 256, gUnknown_80F50A0[defStatStage]); + statCalc = s24_8_mul(statCalc, targetInfo->defensiveMultipliers[splitIndex]); + defStat = statCalc / 256; + + rand = DungeonRandInt(100); + if (splitIndex == 0) { + if (HasHeldItem(attacker, ITEM_POWER_BAND)) { + atkStat += gUnknown_810AC60; + gDungeon->unk134.unk160 += gUnknown_810AC60; + } + if (HasHeldItem(attacker, ITEM_MUNCH_BELT)) { + atkStat += gUnknown_810AC68; + gDungeon->unk134.unk160 += gUnknown_810AC68; + } + if (arg_10 && HasHeldItem(target, ITEM_DEF_SCARF)) { + defStat += gUnknown_810AC64; + gDungeon->unk134.unk162 += gUnknown_810AC64; + } + } + else { + if (arg_10 && HasHeldItem(target, ITEM_ZINC_BAND)) { + defStat += gUnknown_810AC66; + gDungeon->unk134.unk163 += gUnknown_810AC66; + } + if (HasHeldItem(attacker, ITEM_SPECIAL_BAND)) { + atkStat += gUnknown_810AC62; + gDungeon->unk134.unk161 += gUnknown_810AC62; + } + if (HasHeldItem(attacker, ITEM_MUNCH_BELT)) { + atkStat += gUnknown_810AC68; + gDungeon->unk134.unk161 += gUnknown_810AC68; + } + } + + gDungeon->unk134.unk140[3] = atkStat; + gDungeon->unk134.unk140[4] = defStat; + if (atkStat < 0) atkStat = 0; + if (atkStat >= 999) atkStat = 999; + + attackerInfo->previousVisualFlags &= ~(0x100); + attackerInfo->visualFlags &= ~(0x100); + ApplyAtkDefStatBoosts(attacker, target, moveType, &atkStat, &defStat, rand); + sub_800A020(&unkSp1, atkStat - defStat); + sub_800A020(&unkSp2, 8); + sub_800A3F0(&unkSp1, &unkSp1, &unkSp2); + if (!attackerInfo->isNotTeamMember) { + sub_800A020(&unkSp2, attackerInfo->level); + unkSp3.s0 = 0; + unkSp3.s4 = 0xAAAA; + sub_800A34C(&unkSp2, &unkSp2, &unkSp3); + r6 = (attackerInfo->level * 2) / 3; + } + else { + s32 unkAtkStat2 = attackerInfo->atk[splitIndex]; + s32 unkDefStat2 = 1; + ApplyAtkDefStatBoosts(attacker, target, moveType, &unkAtkStat2, &unkDefStat2, rand); + sub_800A020(&unkSp2, unkAtkStat2); + sub_800A020(&unkSp3, 3); + sub_800A3F0(&unkSp2, &unkSp2, &unkSp3); + r6 = unkAtkStat2 / 3; + } + sub_800A6D0(&unkSp4, &unkSp1, &unkSp2); + gDungeon->unk134.unk140[5] = r6; + gDungeon->unk134.unk140[6] = sub_800A048(&unkSp4); + unkSp5 = unkSp4; + unkSp7 = unkSp4; + sub_800A34C(&unkSp5, &unkSp5, &unkSp5); + unkSp6.s0 = 0; + unkSp6.s4 = 0xCCC; + sub_800A34C(&unkSp5, &unkSp5, &unkSp6); + sub_800A020(&unkSp6, 2); + sub_800A34C(&unkSp7, &unkSp7, &unkSp6); + sub_800A020(&unkSp6, defStat); + sub_800A6F0(&unkSp7, &unkSp7, &unkSp6); + sub_800A020(&unkSp6, 10); + sub_800A6D0(&unkSp7, &unkSp7, &unkSp6); + sub_800A6D0(&unkSp8, &unkSp5, &unkSp7); + if (sub_800A2F0(&gUnknown_8106F24, &unkSp8)) { + unkSp8 = gUnknown_8106F24; + } + if (sub_800A2F0(&unkSp8, &gUnknown_8106F04)) { + unkSp8 = gUnknown_8106F04; + } + r5 = sub_806E100(&unkSp9, attacker, target, moveType, dmgStruct); + + if (moveType == TYPE_FIRE) { + s32 flashFireStatus = GetFlashFireStatus(target); + if (flashFireStatus != FLASH_FIRE_STATUS_NONE && targetInfo->unk152 == 0 && arg_10) { + targetInfo->unk152 = 1; + SetMessageArgument(gFormatBuffer_Monsters[1], target, 0); + if (flashFireStatus == FLASH_FIRE_STATUS_MAXED) { + TryDisplayDungeonLoggableMessage3(attacker, target, gUnknown_80FAE00); // Fire moves won't become stronger! + } + else { + TryDisplayDungeonLoggableMessage3(attacker, target, gUnknown_80FADD8); // m1 used Flash Fire to absorb fire! + } + } + } + if (arg_10) { + if (splitIndex == 0 && targetInfo->protection.protectionStatus == STATUS_REFLECT) { + sub_8041B74(target); + sub_800A34C(&unkSp9, &unkSp9, &gUnknown_8106F1C); + gDungeon->unk134.unk166 = 1; + } + if (splitIndex == 1 && targetInfo->protection.protectionStatus == STATUS_LIGHT_SCREEN) { + sub_8041B5C(target); + sub_800A34C(&unkSp9, &unkSp9, &gUnknown_8106F1C); + gDungeon->unk134.unk167 = 1; + } + } + + // Check crit + if (!HasAbility(target, ABILITY_BATTLE_ARMOR) && !HasAbility(target, ABILITY_SHELL_ARMOR)) { + s32 critOdds; + + if (attackerInfo->isNotTeamMember) { + critOdds = 0; + } + else { + critOdds = critChance; + } + + if (attackerInfo->moveStatus.moveStatus == STATUS_FOCUS_ENERGY) { + critOdds = 999; + gDungeon->unk134.unk168 = 1; + } + else { + if (HasHeldItem(attacker, ITEM_SCOPE_LENS)) { + critOdds += gUnknown_80F4DAE; + gDungeon->unk134.unk164 = 1; + } + if (HasHeldItem(target, ITEM_PATSY_BAND)) { + critOdds += gUnknown_80F4DAE; + gDungeon->unk134.unk165 = 1; + } + if (r5 && IQSkillIsEnabled(attacker, IQ_TYPE_ADVANTAGE_MASTER)) { + critOdds = gUnknown_80F4DB0; + gDungeon->unk134.unk169 = 1; + } + } + if (DungeonRandInt(100) < critOdds) { + sub_800A34C(&unkSp9, &unkSp9, &gUnknown_8106F14); + dmgStruct->isCrit = TRUE; + } + } + + gDungeon->unk134.unk154 = sub_800A048(&unkSp8); + sub_800A34C(&unkSp8, &unkSp8, &unkSp9); + { + // Ugly hack needed to match + #ifdef NONMATCHING + s32 arg8_Match; + #else + register s32 arg8_Match asm("r2"); + #endif // NONMATCHING + + gDungeon->unk134.unk15C = arg8_Match = arg8; + ASM_MATCH_TRICK(arg8); + sub_800A088(&unkSp10, arg8_Match); + sub_800A34C(&unkSp8, &unkSp8, &unkSp10); + } + + // ALSO needed to match. unk694 chosen randomly and it worked with matching. + ASM_MATCH_TRICK(gDungeon->unk694); + gDungeon->unk134.unk150 = sub_800A048(&unkSp8); + { + s32 rnd = DungeonRandInt(0x4000); + unkSp9.s0 = 0; + unkSp9.s4 = 0xE000 + rnd; + } + sub_800A34C(&unkSp8, &unkSp8, &unkSp9); + sub_800A020(&unkSp11, 100); + + sub_800A34C(&unkSp9, &unkSp11, &unkSp9); + gDungeon->unk134.unk158 = sub_800A048(&unkSp9); + + dmgStruct->dmg = sub_800A048(&unkSp8); + dmgStruct->residualDmgType = 0; + if (dmgStruct->dmg == 0) { + dmgStruct->isCrit = FALSE; + } + } +} + +void sub_806F2BC(Entity *attacker, Entity *target, u8 moveType, s32 a2, struct DamageStruct *dmgStruct) +{ + struct unkStruct_80943A8 unkSp1; + struct unkStruct_80943A8 unkSp2; + s32 a2New = a2; + + if (a2New <= 0) a2New = 1; + if (a2New > 999) a2New = 999; + + dmgStruct->type = moveType; + sub_806E100(&unkSp1, attacker, target, moveType, dmgStruct); + sub_800A020(&unkSp2, a2New); + sub_800A34C(&unkSp2, &unkSp2, &unkSp1); + dmgStruct->dmg = sub_800A048(&unkSp2); + dmgStruct->residualDmgType = 0; +} + +void DealDamageToEntity(Entity *entity, s32 dmg, s32 r6, s16 r4) +{ + Entity spEntity; + struct DamageStruct dmgStruct; + s32 r4_ = r4; + + sub_80457DC(&spEntity); + dmgStruct.dmg = dmg; + dmgStruct.typeEffectiveness = EFFECTIVENESS_NEUTRAL; + dmgStruct.type = TYPE_NONE; + dmgStruct.residualDmgType = r6; + dmgStruct.isCrit = FALSE; + dmgStruct.unkE = 0; + dmgStruct.unkF = 0; + HandleDealingDamage(&spEntity, entity, &dmgStruct, FALSE, FALSE, r4_, FALSE, 0); +} + +void sub_806F370(Entity *pokemon, Entity *target, s32 dmg, s32 r9, u8 *arg_0, u8 moveType, s16 arg_8, s32 arg_C, s32 arg_10, s32 arg_14) +{ + s32 i; + struct DamageStruct dmgStruct; + s32 arg_8_ = arg_8; + s32 dmgNew = dmg; + + dmgStruct.typeEffectiveness = EFFECTIVENESS_NEUTRAL; + dmgStruct.residualDmgType = arg_C; + dmgStruct.type = moveType; + dmgStruct.isCrit = FALSE; + dmgStruct.unkE = 0; + + if (moveType != TYPE_NONE) { + s32 typeEffectiveness[2]; + EntityInfo *targetInfo = GetEntInfo(target); + for (i = 0; i < 2; i++) { + s32 effectiv = gTypeEffectivenessChart[moveType][targetInfo->types[i]]; + typeEffectiveness[i] = effectiv; + } + if (HasAbility(target, ABILITY_WONDER_GUARD)) { + if (gUnknown_80F54B4[typeEffectiveness[0]][typeEffectiveness[1]] != EFFECTIVENESS_SUPER) { + dmgNew = 0; + } + } + } + + dmgStruct.dmg = dmgNew; + if (dmgNew == 0) { + dmgStruct.unkF = 1; + } + else { + dmgStruct.unkF = 0; + } + + HandleDealingDamage(pokemon, target, &dmgStruct, FALSE, r9, arg_8_, arg_10, arg_14); + if (arg_0 != NULL) { + *arg_0 = dmgStruct.unkF; + } } diff --git a/src/code_80718D8.c b/src/code_80718D8.c index 4865f5e23..264fefc83 100644 --- a/src/code_80718D8.c +++ b/src/code_80718D8.c @@ -514,10 +514,10 @@ void sub_8072008(Entity *pokemon, Entity *target, s32 level, u8 param_4, u8 para GetAvailTacticsforLvl_Bool(tacticsBuffer1,info->level); } maxHP = info->maxHPStat; - atk[0] = info->atk; - atk[1] = info->spAtk; - def[0] = info->def; - def[1] = info->spDef; + atk[0] = info->atk[0]; + atk[1] = info->atk[1]; + def[0] = info->def[0]; + def[1] = info->def[1]; if (!IsClientOrTeamBase(info->joinedAt.joinedAt)) { newLevel = info->level + level; if (99 < newLevel) { @@ -529,10 +529,10 @@ void sub_8072008(Entity *pokemon, Entity *target, s32 level, u8 param_4, u8 para flag |= (sub_80723D0(pokemon,target,param_4,param_5)); if ((flag != 0) && (!info->isNotTeamMember)) { gFormatArgs[0] = info->maxHPStat - maxHP; - gFormatArgs[1] = info->atk - atk[0]; - gFormatArgs[2] = info->def - def[0]; - gFormatArgs[3] = info->spAtk - atk[1]; - gFormatArgs[4] = info->spDef - def[1]; + gFormatArgs[1] = info->atk[0] - atk[0]; + gFormatArgs[2] = info->def[0] - def[0]; + gFormatArgs[3] = info->atk[1] - atk[1]; + gFormatArgs[4] = info->def[1] - def[1]; if (param_4 != 0) { sub_807218C(target); } @@ -734,10 +734,10 @@ bool8 sub_80723D0(Entity *pokemon, Entity *target, u8 param_3, u8 param_4) info->HP = info->maxHPStat; } - gUnknown_202F31C[0] = info->atk; - gUnknown_202F31C[1] = info->spAtk; - gUnknown_202F324[0] = info->def; - gUnknown_202F324[1] = info->spDef; + gUnknown_202F31C[0] = info->atk[0]; + gUnknown_202F31C[1] = info->atk[1]; + gUnknown_202F324[0] = info->def[0]; + gUnknown_202F324[1] = info->def[1]; gUnknown_202F31C[0] += leveldata.gainAtt; gUnknown_202F31C[1] += leveldata.gainSPAtt; @@ -757,10 +757,10 @@ bool8 sub_80723D0(Entity *pokemon, Entity *target, u8 param_3, u8 param_4) LoadIQSkills(target); sub_8079764(target); - info->atk = gUnknown_202F31C[0]; - info->spAtk = gUnknown_202F31C[1]; - info->def = gUnknown_202F324[0]; - info->spDef = gUnknown_202F324[1]; + info->atk[0] = gUnknown_202F31C[0]; + info->atk[1] = gUnknown_202F31C[1]; + info->def[0] = gUnknown_202F324[0]; + info->def[1] = gUnknown_202F324[1]; sub_8072778(pokemon, target, param_3, param_4); } @@ -828,10 +828,10 @@ bool8 sub_80725A4(Entity *pokemon, Entity *target) info->HP = info->maxHPStat; } - gUnknown_202F31C[0] = info->atk; - gUnknown_202F31C[1] = info->spAtk; - gUnknown_202F324[0] = info->def; - gUnknown_202F324[1] = info->spDef; + gUnknown_202F31C[0] = info->atk[0]; + gUnknown_202F31C[1] = info->atk[1]; + gUnknown_202F324[0] = info->def[0]; + gUnknown_202F324[1] = info->def[1]; gUnknown_202F31C[0] -= leveldata.gainAtt; gUnknown_202F31C[1] -= leveldata.gainSPAtt; @@ -851,10 +851,10 @@ bool8 sub_80725A4(Entity *pokemon, Entity *target) LoadIQSkills(target); sub_8079764(target); - info->atk = gUnknown_202F31C[0]; - info->spAtk = gUnknown_202F31C[1]; - info->def = gUnknown_202F324[0]; - info->spDef = gUnknown_202F324[1]; + info->atk[0] = gUnknown_202F31C[0]; + info->atk[1] = gUnknown_202F31C[1]; + info->def[0] = gUnknown_202F324[0]; + info->def[1] = gUnknown_202F324[1]; } } diff --git a/src/code_8077274_1.c b/src/code_8077274_1.c index e05731587..85b2235c4 100644 --- a/src/code_8077274_1.c +++ b/src/code_8077274_1.c @@ -508,14 +508,14 @@ void RaiseAtkStatTarget(Entity * pokemon, Entity *target, s32 increment) SetMessageArgument(gFormatBuffer_Monsters[0],target,0); entityInfo = GetEntInfo(target); - oldStat = entityInfo->atk; + oldStat = entityInfo->atk[0]; oldStat1 = oldStat; - newStat = entityInfo->atk + increment; + newStat = entityInfo->atk[0] + increment; if (0xfe < newStat) { newStat = 0xff; } - entityInfo->atk = newStat; + entityInfo->atk[0] = newStat; if (oldStat1 < (u8)newStat) { sub_8041E60(target); TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FC33C); @@ -538,14 +538,14 @@ void RaiseSpAtkStatTarget(Entity * pokemon, Entity *target, s32 increment) SetMessageArgument(gFormatBuffer_Monsters[0],target,0); entityInfo = GetEntInfo(target); - oldStat = entityInfo->spAtk; + oldStat = entityInfo->atk[1]; oldStat1 = oldStat; - newStat = entityInfo->spAtk + increment; + newStat = entityInfo->atk[1] + increment; if (0xfe < newStat) { newStat = 0xff; } - entityInfo->spAtk = newStat; + entityInfo->atk[1] = newStat; if (oldStat1 < (u8)newStat) { sub_8041E74(target); TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FC388); @@ -568,14 +568,14 @@ void RaiseDefStatTarget(Entity * pokemon, Entity *target, s32 increment) SetMessageArgument(gFormatBuffer_Monsters[0],target,0); entityInfo = GetEntInfo(target); - oldStat = entityInfo->def; + oldStat = entityInfo->def[0]; oldStat1 = oldStat; - newStat = entityInfo->def + increment; + newStat = entityInfo->def[0] + increment; if (0xfe < newStat) { newStat = 0xff; } - entityInfo->def = newStat; + entityInfo->def[0] = newStat; if (oldStat1 < (u8)newStat) { sub_8041E84(target); TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FC3D8); @@ -598,14 +598,14 @@ void RaiseSpDefStatTarget(Entity * pokemon, Entity *target, s32 increment) SetMessageArgument(gFormatBuffer_Monsters[0],target,0); entityInfo = GetEntInfo(target); - oldStat = entityInfo->spDef; + oldStat = entityInfo->def[1]; oldStat1 = oldStat; - newStat = entityInfo->spDef + increment; + newStat = entityInfo->def[1] + increment; if (0xfe < newStat) { newStat = 0xff; } - entityInfo->spDef = newStat; + entityInfo->def[1] = newStat; if (oldStat1 < (u8)newStat) { sub_8041E94(target); TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FC428); diff --git a/src/dungeon_ai_item_weight.c b/src/dungeon_ai_item_weight.c index be795c30b..7c2a404fe 100644 --- a/src/dungeon_ai_item_weight.c +++ b/src/dungeon_ai_item_weight.c @@ -111,7 +111,7 @@ u32 GetAIUseItemProbability(Entity *targetPokemon, Item *item, u32 itemTargetFla } break; case ITEM_PROTEIN: - if (pokemonInfo->atk > 249) + if (pokemonInfo->atk[0] > 249) { itemWeight = 0; } @@ -121,7 +121,7 @@ u32 GetAIUseItemProbability(Entity *targetPokemon, Item *item, u32 itemTargetFla } break; case ITEM_CALCIUM: - if (pokemonInfo->spAtk > 249) + if (pokemonInfo->atk[1] > 249) { itemWeight = 0; } @@ -131,7 +131,7 @@ u32 GetAIUseItemProbability(Entity *targetPokemon, Item *item, u32 itemTargetFla } break; case ITEM_IRON: - if (pokemonInfo->def > 249) + if (pokemonInfo->def[0] > 249) { itemWeight = 0; } @@ -141,7 +141,7 @@ u32 GetAIUseItemProbability(Entity *targetPokemon, Item *item, u32 itemTargetFla } break; case ITEM_ZINC: - if (pokemonInfo->spDef > 249) + if (pokemonInfo->def[1] > 249) { itemWeight = 0; } diff --git a/src/dungeon_move.c b/src/dungeon_move.c index 7c3e23925..21c5ad0e7 100644 --- a/src/dungeon_move.c +++ b/src/dungeon_move.c @@ -42,7 +42,7 @@ extern void sub_80429C8(Entity *r0); extern u8 sub_803F428(Position *); extern bool8 sub_8045888(Entity *r0); extern void HandleDealingDamage(Entity *attacker, Entity *target, struct DamageStruct *dmgStruct, bool32 isFalseSwipe, bool32 giveExp, s16 arg4, bool32 arg8, s32 argC); -extern void sub_806EAF4(Entity *, Entity *, u8, u32, u32, struct DamageStruct *dmgStruct, u32, u16, u32); +extern void CalcDamage(Entity *, Entity *, u8, u32, u32, struct DamageStruct *dmgStruct, u32, u16, u32); extern s16 sub_8057600(Move *move, s32 itemID); extern void sub_803ED30(s32, Entity *r0, u8, s32); extern void sub_8042238(Entity *pokemon, Entity *target); @@ -622,7 +622,6 @@ static void UseMoveAgainstTargets(Entity **targetsArray, Entity *attacker, Move case MOVE_JUMP_KICK: sub_8059E54(attacker, currTarget, move, itemId, 1); break; - } if (sub_8044B28()) @@ -1667,7 +1666,7 @@ s32 HandleDamagingMove(Entity *attacker, Entity *target, Move *move, s32 r9, s32 s32 movePower = GetMovePower(attacker, move); s32 critChance = GetMoveCritChance(move); - sub_806EAF4(attacker, target, moveType, movePower, critChance, &dmgStruct, r9, move->id, 1); + CalcDamage(attacker, target, moveType, movePower, critChance, &dmgStruct, r9, move->id, 1); unk = sub_8057600(move, itemId); return TryHitTarget(attacker, target, move, &dmgStruct, unk); } @@ -1679,7 +1678,7 @@ s32 sub_80556BC(Entity *attacker, Entity *target, u8 moveType, Move *move, s32 r s32 movePower = GetMovePower(attacker, move); s32 critChance = GetMoveCritChance(move); - sub_806EAF4(attacker, target, moveType, movePower, critChance, &dmgStruct, r9, move->id, 1); + CalcDamage(attacker, target, moveType, movePower, critChance, &dmgStruct, r9, move->id, 1); unk = sub_8057600(move, itemId); return TryHitTarget(attacker, target, move, &dmgStruct, unk); } diff --git a/src/dungeon_music.c b/src/dungeon_music.c index d81f044c7..2ddedd72b 100644 --- a/src/dungeon_music.c +++ b/src/dungeon_music.c @@ -58,10 +58,10 @@ void sub_8083AB0(s16 param_0, Entity * target, Entity * entity) temp->exp = entityInfo->exp; temp->level = entityInfo->level; temp->maxHPStat = entityInfo->maxHPStat; - temp->atk = entityInfo->atk; - temp->spAtk = entityInfo->spAtk; - temp->def = entityInfo->def; - temp->spDef = entityInfo->spDef; + temp->atk = entityInfo->atk[0]; + temp->spAtk = entityInfo->atk[1]; + temp->def = entityInfo->def[0]; + temp->spDef = entityInfo->def[1]; temp->dungeonLocation = gDungeon->dungeonLocation; attackPtr = &temp->attBoost; *attackPtr = 0; diff --git a/src/move_actions.c b/src/move_actions.c index 10e706752..ebe52f36a 100644 --- a/src/move_actions.c +++ b/src/move_actions.c @@ -184,11 +184,11 @@ extern u8 sub_803F428(Position *pos); extern void sub_807EC28(bool8); extern void sub_806F370(Entity *r0, Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32); extern void sub_804652C(Entity *, Entity *, Item *, u32, Position *); -extern void sub_806EAF4(Entity *, Entity *, u8, u32, u32, s32 *, u32, u16, u32); +extern void CalcDamage(Entity *, Entity *, u8, u32, u32, s32 *, u32, u16, u32); extern void sub_8045C28(Item *, u8 , u8); extern void sub_805A7D4(Entity *, Entity *, Item *, Position *); extern void MudWaterSportEffect(u32); -extern void sub_806EAF4(Entity *, Entity *, u8, u32, u32, s32 *, u32, u16, u32); +extern void CalcDamage(Entity *, Entity *, u8, u32, u32, s32 *, u32, u16, u32); extern void sub_806A6E8(Entity *); extern void sub_806ABAC(Entity *, Entity *); @@ -2171,7 +2171,7 @@ bool8 sub_8059E54(Entity * pokemon,Entity * target,Move * move,u32 param_4,u8 pa moveType = GetMoveTypeForMonster(pokemon,move); movePower = GetMovePower(pokemon,move); moveCritChance = GetMoveCritChance(move); - sub_806EAF4(pokemon,target,moveType,movePower,moveCritChance,local_30,0x100,move->id,0); + CalcDamage(pokemon,target,moveType,movePower,moveCritChance,local_30,0x100,move->id,0); SetMessageArgument_2(gFormatBuffer_Monsters[0],GetEntInfo(pokemon),0); TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FC7C8); local_30[0] = local_30[0] / 2; @@ -2221,7 +2221,7 @@ bool8 sub_8059FC8(Entity * pokemon,Entity * target,Move * move,u32 param_4,u8 pa moveType = GetMoveTypeForMonster(pokemon,move); movePower = GetMovePower(pokemon,move); moveCritChance = GetMoveCritChance(move); - sub_806EAF4(pokemon,target,moveType,movePower,moveCritChance,local_30,0x200,move->id,0); + CalcDamage(pokemon,target,moveType,movePower,moveCritChance,local_30,0x200,move->id,0); SetMessageArgument_2(gFormatBuffer_Monsters[0],GetEntInfo(pokemon),0); TryDisplayDungeonLoggableMessage3(pokemon,target,*gUnknown_80FC7C8); local_30[0] = local_30[0] / 2; diff --git a/src/trap_1.c b/src/trap_1.c index 26f7f947b..4f0357931 100644 --- a/src/trap_1.c +++ b/src/trap_1.c @@ -333,10 +333,10 @@ void SaveEntity(unkStruct_8094924 *param_1, Entity *param_2) sub_8083048(param_1,info->HP); sub_8083048(param_1,info->maxHPStat); sub_8083048(param_1,info->originalHP); - sub_8083060(param_1,info->atk); - sub_8083060(param_1,info->spAtk); - sub_8083060(param_1,info->def); - sub_8083060(param_1,info->spDef); + sub_8083060(param_1,info->atk[0]); + sub_8083060(param_1,info->atk[1]); + sub_8083060(param_1,info->def[0]); + sub_8083060(param_1,info->def[1]); sub_8083078(param_1,info->exp); sub_8083048(param_1,info->offensiveStages[0]); sub_8083048(param_1,info->offensiveStages[1]);