diff options
-rw-r--r-- | asm/battle_811DA74.s | 1046 | ||||
-rw-r--r-- | src/battle_811DA74.c | 365 |
2 files changed, 352 insertions, 1059 deletions
diff --git a/asm/battle_811DA74.s b/asm/battle_811DA74.s index c61fb1dac..0715b5110 100644 --- a/asm/battle_811DA74.s +++ b/asm/battle_811DA74.s @@ -6,1052 +6,6 @@ .text - thumb_func_start dp01t_00_3_getattr -dp01t_00_3_getattr: @ 811E3E4 - push {r4-r6,lr} - sub sp, 0x100 - movs r6, 0 - ldr r1, _0811E410 @ =gUnknown_02023A60 - ldr r0, _0811E414 @ =gUnknown_02024A60 - ldrb r2, [r0] - lsls r0, r2, 9 - adds r1, 0x2 - adds r1, r0, r1 - ldrb r0, [r1] - cmp r0, 0 - bne _0811E41C - ldr r0, _0811E418 @ =gUnknown_02024A6A - lsls r1, r2, 1 - adds r1, r0 - ldrb r0, [r1] - mov r1, sp - bl dp01_getattr_by_ch1_for_player_pokemon - adds r6, r0, 0 - b _0811E43E - .align 2, 0 -_0811E410: .4byte gUnknown_02023A60 -_0811E414: .4byte gUnknown_02024A60 -_0811E418: .4byte gUnknown_02024A6A -_0811E41C: - ldrb r4, [r1] - movs r5, 0 -_0811E420: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _0811E436 - lsls r0, r5, 24 - lsrs r0, 24 - mov r2, sp - adds r1, r2, r6 - bl dp01_getattr_by_ch1_for_player_pokemon - adds r6, r0 -_0811E436: - lsrs r4, 1 - adds r5, 0x1 - cmp r5, 0x5 - ble _0811E420 -_0811E43E: - lsls r1, r6, 16 - lsrs r1, 16 - movs r0, 0x1 - mov r2, sp - bl dp01_build_cmdbuf_x1D_1D_numargs_varargs - bl dp01_tbl3_exec_completed - add sp, 0x100 - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end dp01t_00_3_getattr - - thumb_func_start dp01_getattr_by_ch1_for_player_pokemon -dp01_getattr_by_ch1_for_player_pokemon: @ 811E458 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x90 - adds r7, r1, 0 - lsls r0, 24 - lsrs r5, r0, 24 - movs r6, 0 - ldr r2, _0811E48C @ =gUnknown_02023A60 - ldr r3, _0811E490 @ =gUnknown_02024A60 - ldrb r0, [r3] - lsls r0, 9 - adds r1, r2, 0x1 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x3B - bls _0811E482 - bl _0811EBEE -_0811E482: - lsls r0, 2 - ldr r1, _0811E494 @ =_0811E498 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0811E48C: .4byte gUnknown_02023A60 -_0811E490: .4byte gUnknown_02024A60 -_0811E494: .4byte _0811E498 - .align 2, 0 -_0811E498: - .4byte _0811E588 - .4byte _0811E7AC - .4byte _0811E7BC - .4byte _0811E7CC - .4byte _0811E834 - .4byte _0811E834 - .4byte _0811E834 - .4byte _0811E834 - .4byte _0811E850 - .4byte _0811E88C - .4byte _0811E88C - .4byte _0811E88C - .4byte _0811E88C - .4byte _0811EBEE - .4byte _0811EBEE - .4byte _0811EBEE - .4byte _0811EBEE - .4byte _0811E8A8 - .4byte _0811E8B8 - .4byte _0811E8E8 - .4byte _0811E8F8 - .4byte _0811E908 - .4byte _0811E918 - .4byte _0811E928 - .4byte _0811E938 - .4byte _0811E948 - .4byte _0811E958 - .4byte _0811E968 - .4byte _0811E978 - .4byte _0811E988 - .4byte _0811E998 - .4byte _0811E9A8 - .4byte _0811E9F8 - .4byte _0811EA08 - .4byte _0811EA18 - .4byte _0811EA28 - .4byte _0811EA38 - .4byte _0811EA48 - .4byte _0811EA58 - .4byte _0811EA68 - .4byte _0811EA78 - .4byte _0811EAAC - .4byte _0811EABC - .4byte _0811EACC - .4byte _0811EADC - .4byte _0811EAEC - .4byte _0811EAFC - .4byte _0811EB0C - .4byte _0811EB1C - .4byte _0811EB3C - .4byte _0811EB4C - .4byte _0811EB5C - .4byte _0811EB6C - .4byte _0811EB7C - .4byte _0811EB8C - .4byte _0811EB9C - .4byte _0811EBAC - .4byte _0811EBBC - .4byte _0811EBCC - .4byte _0811EBDC -_0811E588: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _0811E79C @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - mov r1, sp - strh r0, [r1] - adds r0, r4, 0 - movs r1, 0xC - bl GetMonData - mov r1, sp - strh r0, [r1, 0x2E] - movs r6, 0 - add r0, sp, 0x24 - mov r9, r0 - movs r1, 0x3B - add r1, sp - mov r10, r1 - mov r2, sp - adds r2, 0x2B - str r2, [sp, 0x80] - mov r0, sp - adds r0, 0x2A - str r0, [sp, 0x7C] - mov r1, sp - adds r1, 0x68 - str r1, [sp, 0x8C] - adds r2, 0x5 - str r2, [sp, 0x84] - adds r0, 0x12 - str r0, [sp, 0x88] - mov r8, r4 - add r4, sp, 0xC -_0811E5D4: - adds r1, r6, 0 - adds r1, 0xD - mov r0, r8 - bl GetMonData - strh r0, [r4] - adds r1, r6, 0 - adds r1, 0x11 - mov r0, r8 - bl GetMonData - mov r2, r9 - adds r1, r2, r6 - strb r0, [r1] - adds r4, 0x2 - adds r6, 0x1 - cmp r6, 0x3 - ble _0811E5D4 - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _0811E79C @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x15 - bl GetMonData - mov r1, r10 - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0x20 - bl GetMonData - ldr r2, [sp, 0x80] - strb r0, [r2] - adds r0, r4, 0 - movs r1, 0x19 - bl GetMonData - str r0, [sp, 0x44] - adds r0, r4, 0 - movs r1, 0x27 - bl GetMonData - mov r3, sp - movs r5, 0x1F - ands r0, r5 - ldrb r2, [r3, 0x14] - movs r1, 0x20 - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x14] - adds r0, r4, 0 - movs r1, 0x28 - bl GetMonData - mov r3, sp - movs r6, 0x1F - ands r0, r6 - lsls r0, 5 - ldrh r2, [r3, 0x14] - ldr r1, _0811E7A0 @ =0xfffffc1f - ands r1, r2 - orrs r1, r0 - strh r1, [r3, 0x14] - adds r0, r4, 0 - movs r1, 0x29 - bl GetMonData - mov r3, sp - ands r0, r5 - lsls r0, 2 - ldrb r2, [r3, 0x15] - movs r1, 0x7D - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x15] - adds r0, r4, 0 - movs r1, 0x2A - bl GetMonData - movs r1, 0x1F - ands r1, r0 - lsls r1, 15 - ldr r0, [sp, 0x14] - ldr r2, _0811E7A4 @ =0xfff07fff - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x14] - adds r0, r4, 0 - movs r1, 0x2B - bl GetMonData - mov r3, sp - ands r0, r6 - lsls r0, 4 - ldrh r2, [r3, 0x16] - ldr r1, _0811E7A8 @ =0xfffffe0f - ands r1, r2 - orrs r1, r0 - strh r1, [r3, 0x16] - adds r0, r4, 0 - movs r1, 0x2C - bl GetMonData - mov r3, sp - ands r0, r5 - lsls r0, 1 - ldrb r2, [r3, 0x17] - movs r1, 0x3F - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x17] - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - str r0, [sp, 0x48] - adds r0, r4, 0 - movs r1, 0x37 - bl GetMonData - str r0, [sp, 0x4C] - adds r0, r4, 0 - movs r1, 0x38 - bl GetMonData - ldr r1, [sp, 0x7C] - strb r0, [r1] - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - mov r1, sp - strh r0, [r1, 0x28] - adds r0, r4, 0 - movs r1, 0x3A - bl GetMonData - mov r1, sp - strh r0, [r1, 0x2C] - adds r0, r4, 0 - movs r1, 0x3B - bl GetMonData - mov r1, sp - strh r0, [r1, 0x2] - adds r0, r4, 0 - movs r1, 0x3C - bl GetMonData - mov r1, sp - strh r0, [r1, 0x4] - adds r0, r4, 0 - movs r1, 0x3D - bl GetMonData - mov r1, sp - strh r0, [r1, 0x6] - adds r0, r4, 0 - movs r1, 0x3E - bl GetMonData - mov r1, sp - strh r0, [r1, 0x8] - adds r0, r4, 0 - movs r1, 0x3F - bl GetMonData - mov r1, sp - strh r0, [r1, 0xA] - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - mov r3, sp - movs r1, 0x1 - ands r0, r1 - lsls r0, 6 - ldrb r2, [r3, 0x17] - movs r1, 0x41 - negs r1, r1 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x17] - adds r0, r4, 0 - movs r1, 0x2E - bl GetMonData - mov r3, sp - lsls r0, 7 - ldrb r2, [r3, 0x17] - movs r1, 0x7F - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x17] - adds r0, r4, 0 - movs r1, 0x1 - bl GetMonData - str r0, [sp, 0x54] - adds r0, r4, 0 - movs r1, 0x2 - ldr r2, [sp, 0x8C] - bl GetMonData - ldr r0, [sp, 0x84] - ldr r1, [sp, 0x8C] - bl StringCopy10 - adds r0, r4, 0 - movs r1, 0x7 - ldr r2, [sp, 0x88] - bl GetMonData - mov r2, sp - movs r6, 0 -_0811E78C: - adds r0, r7, r6 - adds r1, r2, r6 - ldrb r1, [r1] - strb r1, [r0] - adds r6, 0x1 - cmp r6, 0x57 - bls _0811E78C - b _0811EBEE - .align 2, 0 -_0811E79C: .4byte gPlayerParty -_0811E7A0: .4byte 0xfffffc1f -_0811E7A4: .4byte 0xfff07fff -_0811E7A8: .4byte 0xfffffe0f -_0811E7AC: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E7B8 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - b _0811EB26 - .align 2, 0 -_0811E7B8: .4byte gPlayerParty -_0811E7BC: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E7C8 @ =gPlayerParty - adds r0, r1 - movs r1, 0xC - b _0811EB26 - .align 2, 0 -_0811E7C8: .4byte gPlayerParty -_0811E7CC: - movs r6, 0 - add r2, sp, 0x58 - mov r9, r2 - add r0, sp, 0x60 - mov r10, r0 - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _0811E830 @ =gPlayerParty - adds r4, r1, r0 - mov r8, r9 -_0811E7E2: - adds r1, r6, 0 - adds r1, 0xD - adds r0, r4, 0 - bl GetMonData - mov r1, r8 - strh r0, [r1] - adds r1, r6, 0 - adds r1, 0x11 - adds r0, r4, 0 - bl GetMonData - mov r2, r10 - adds r1, r2, r6 - strb r0, [r1] - movs r0, 0x2 - add r8, r0 - adds r6, 0x1 - cmp r6, 0x3 - ble _0811E7E2 - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E830 @ =gPlayerParty - adds r0, r1 - movs r1, 0x15 - bl GetMonData - mov r1, r9 - strb r0, [r1, 0xC] - mov r2, r9 - movs r6, 0 -_0811E820: - adds r0, r7, r6 - adds r1, r2, r6 - ldrb r1, [r1] - strb r1, [r0] - adds r6, 0x1 - cmp r6, 0xF - bls _0811E820 - b _0811EBEE - .align 2, 0 -_0811E830: .4byte gPlayerParty -_0811E834: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E84C @ =gPlayerParty - adds r0, r1 - ldrb r1, [r3] - lsls r1, 9 - adds r2, 0x1 - adds r1, r2 - ldrb r1, [r1] - adds r1, 0x9 - b _0811EB26 - .align 2, 0 -_0811E84C: .4byte gPlayerParty -_0811E850: - movs r6, 0 - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r2, _0811E888 @ =gPlayerParty - mov r8, r2 -_0811E85C: - adds r1, r6, 0 - adds r1, 0x11 - mov r2, r8 - adds r0, r4, r2 - bl GetMonData - adds r1, r7, r6 - strb r0, [r1] - adds r6, 0x1 - cmp r6, 0x3 - ble _0811E85C - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E888 @ =gPlayerParty - adds r0, r1 - movs r1, 0x15 - bl GetMonData - adds r1, r7, r6 - strb r0, [r1] - adds r6, 0x1 - b _0811EBEE - .align 2, 0 -_0811E888: .4byte gPlayerParty -_0811E88C: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E8A4 @ =gPlayerParty - adds r0, r1 - ldrb r1, [r3] - lsls r1, 9 - adds r2, 0x1 - adds r1, r2 - ldrb r1, [r1] - adds r1, 0x8 - b _0811EBE6 - .align 2, 0 -_0811E8A4: .4byte gPlayerParty -_0811E8A8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E8B4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x1 - b _0811E8C2 - .align 2, 0 -_0811E8B4: .4byte gPlayerParty -_0811E8B8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E8E4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x19 -_0811E8C2: - bl GetMonData - adds r1, r0, 0 - strb r1, [r7] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r0, 8 - strb r0, [r7, 0x1] - movs r0, 0xFF - lsls r0, 16 - ands r0, r1 - lsrs r0, 16 - strb r0, [r7, 0x2] - movs r6, 0x3 - b _0811EBEE - .align 2, 0 -_0811E8E4: .4byte gPlayerParty -_0811E8E8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E8F4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x1A - b _0811EBE6 - .align 2, 0 -_0811E8F4: .4byte gPlayerParty -_0811E8F8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E904 @ =gPlayerParty - adds r0, r1 - movs r1, 0x1B - b _0811EBE6 - .align 2, 0 -_0811E904: .4byte gPlayerParty -_0811E908: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E914 @ =gPlayerParty - adds r0, r1 - movs r1, 0x1C - b _0811EBE6 - .align 2, 0 -_0811E914: .4byte gPlayerParty -_0811E918: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E924 @ =gPlayerParty - adds r0, r1 - movs r1, 0x1D - b _0811EBE6 - .align 2, 0 -_0811E924: .4byte gPlayerParty -_0811E928: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E934 @ =gPlayerParty - adds r0, r1 - movs r1, 0x1E - b _0811EBE6 - .align 2, 0 -_0811E934: .4byte gPlayerParty -_0811E938: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E944 @ =gPlayerParty - adds r0, r1 - movs r1, 0x1F - b _0811EBE6 - .align 2, 0 -_0811E944: .4byte gPlayerParty -_0811E948: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E954 @ =gPlayerParty - adds r0, r1 - movs r1, 0x20 - b _0811EBE6 - .align 2, 0 -_0811E954: .4byte gPlayerParty -_0811E958: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E964 @ =gPlayerParty - adds r0, r1 - movs r1, 0x22 - b _0811EBE6 - .align 2, 0 -_0811E964: .4byte gPlayerParty -_0811E968: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E974 @ =gPlayerParty - adds r0, r1 - movs r1, 0x23 - b _0811EBE6 - .align 2, 0 -_0811E974: .4byte gPlayerParty -_0811E978: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E984 @ =gPlayerParty - adds r0, r1 - movs r1, 0x24 - b _0811EBE6 - .align 2, 0 -_0811E984: .4byte gPlayerParty -_0811E988: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E994 @ =gPlayerParty - adds r0, r1 - movs r1, 0x25 - b _0811EBE6 - .align 2, 0 -_0811E994: .4byte gPlayerParty -_0811E998: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811E9A4 @ =gPlayerParty - adds r0, r1 - movs r1, 0x26 - b _0811EBE6 - .align 2, 0 -_0811E9A4: .4byte gPlayerParty -_0811E9A8: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - ldr r0, _0811E9F4 @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x27 - bl GetMonData - strb r0, [r7] - adds r0, r4, 0 - movs r1, 0x28 - bl GetMonData - strb r0, [r7, 0x1] - adds r0, r4, 0 - movs r1, 0x29 - bl GetMonData - strb r0, [r7, 0x2] - adds r0, r4, 0 - movs r1, 0x2A - bl GetMonData - strb r0, [r7, 0x3] - adds r0, r4, 0 - movs r1, 0x2B - bl GetMonData - strb r0, [r7, 0x4] - adds r0, r4, 0 - movs r1, 0x2C - bl GetMonData - strb r0, [r7, 0x5] - movs r6, 0x6 - b _0811EBEE - .align 2, 0 -_0811E9F4: .4byte gPlayerParty -_0811E9F8: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EA04 @ =gPlayerParty - adds r0, r1 - movs r1, 0x27 - b _0811EBE6 - .align 2, 0 -_0811EA04: .4byte gPlayerParty -_0811EA08: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EA14 @ =gPlayerParty - adds r0, r1 - movs r1, 0x28 - b _0811EBE6 - .align 2, 0 -_0811EA14: .4byte gPlayerParty -_0811EA18: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EA24 @ =gPlayerParty - adds r0, r1 - movs r1, 0x29 - b _0811EBE6 - .align 2, 0 -_0811EA24: .4byte gPlayerParty -_0811EA28: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EA34 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2A - b _0811EBE6 - .align 2, 0 -_0811EA34: .4byte gPlayerParty -_0811EA38: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EA44 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2B - b _0811EBE6 - .align 2, 0 -_0811EA44: .4byte gPlayerParty -_0811EA48: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EA54 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2C - b _0811EBE6 - .align 2, 0 -_0811EA54: .4byte gPlayerParty -_0811EA58: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EA64 @ =gPlayerParty - adds r0, r1 - movs r1, 0 - b _0811EA82 - .align 2, 0 -_0811EA64: .4byte gPlayerParty -_0811EA68: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EA74 @ =gPlayerParty - adds r0, r1 - movs r1, 0x9 - b _0811EB26 - .align 2, 0 -_0811EA74: .4byte gPlayerParty -_0811EA78: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EAA8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x37 -_0811EA82: - bl GetMonData - adds r1, r0, 0 - strb r1, [r7] - movs r0, 0xFF - lsls r0, 8 - ands r0, r1 - lsrs r0, 8 - strb r0, [r7, 0x1] - movs r0, 0xFF - lsls r0, 16 - ands r0, r1 - lsrs r0, 16 - strb r0, [r7, 0x2] - lsrs r0, r1, 24 - strb r0, [r7, 0x3] - movs r6, 0x4 - b _0811EBEE - .align 2, 0 -_0811EAA8: .4byte gPlayerParty -_0811EAAC: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EAB8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x38 - b _0811EBE6 - .align 2, 0 -_0811EAB8: .4byte gPlayerParty -_0811EABC: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EAC8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x39 - b _0811EB26 - .align 2, 0 -_0811EAC8: .4byte gPlayerParty -_0811EACC: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EAD8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x3A - b _0811EB26 - .align 2, 0 -_0811EAD8: .4byte gPlayerParty -_0811EADC: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EAE8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x3B - b _0811EB26 - .align 2, 0 -_0811EAE8: .4byte gPlayerParty -_0811EAEC: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EAF8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x3C - b _0811EB26 - .align 2, 0 -_0811EAF8: .4byte gPlayerParty -_0811EAFC: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EB08 @ =gPlayerParty - adds r0, r1 - movs r1, 0x3D - b _0811EB26 - .align 2, 0 -_0811EB08: .4byte gPlayerParty -_0811EB0C: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EB18 @ =gPlayerParty - adds r0, r1 - movs r1, 0x3E - b _0811EB26 - .align 2, 0 -_0811EB18: .4byte gPlayerParty -_0811EB1C: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EB38 @ =gPlayerParty - adds r0, r1 - movs r1, 0x3F -_0811EB26: - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - strb r0, [r7] - lsrs r0, 8 - strb r0, [r7, 0x1] - movs r6, 0x2 - b _0811EBEE - .align 2, 0 -_0811EB38: .4byte gPlayerParty -_0811EB3C: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EB48 @ =gPlayerParty - adds r0, r1 - movs r1, 0x16 - b _0811EBE6 - .align 2, 0 -_0811EB48: .4byte gPlayerParty -_0811EB4C: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EB58 @ =gPlayerParty - adds r0, r1 - movs r1, 0x17 - b _0811EBE6 - .align 2, 0 -_0811EB58: .4byte gPlayerParty -_0811EB5C: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EB68 @ =gPlayerParty - adds r0, r1 - movs r1, 0x18 - b _0811EBE6 - .align 2, 0 -_0811EB68: .4byte gPlayerParty -_0811EB6C: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EB78 @ =gPlayerParty - adds r0, r1 - movs r1, 0x21 - b _0811EBE6 - .align 2, 0 -_0811EB78: .4byte gPlayerParty -_0811EB7C: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EB88 @ =gPlayerParty - adds r0, r1 - movs r1, 0x2F - b _0811EBE6 - .align 2, 0 -_0811EB88: .4byte gPlayerParty -_0811EB8C: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EB98 @ =gPlayerParty - adds r0, r1 - movs r1, 0x30 - b _0811EBE6 - .align 2, 0 -_0811EB98: .4byte gPlayerParty -_0811EB9C: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EBA8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x32 - b _0811EBE6 - .align 2, 0 -_0811EBA8: .4byte gPlayerParty -_0811EBAC: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EBB8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x33 - b _0811EBE6 - .align 2, 0 -_0811EBB8: .4byte gPlayerParty -_0811EBBC: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EBC8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x34 - b _0811EBE6 - .align 2, 0 -_0811EBC8: .4byte gPlayerParty -_0811EBCC: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EBD8 @ =gPlayerParty - adds r0, r1 - movs r1, 0x35 - b _0811EBE6 - .align 2, 0 -_0811EBD8: .4byte gPlayerParty -_0811EBDC: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0811EC00 @ =gPlayerParty - adds r0, r1 - movs r1, 0x36 -_0811EBE6: - bl GetMonData - strb r0, [r7] - movs r6, 0x1 -_0811EBEE: - adds r0, r6, 0 - add sp, 0x90 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811EC00: .4byte gPlayerParty - thumb_func_end dp01_getattr_by_ch1_for_player_pokemon - - thumb_func_start sub_811EC04 -sub_811EC04: @ 811EC04 - push {lr} - bl dp01_tbl3_exec_completed - pop {r0} - bx r0 - thumb_func_end sub_811EC04 - - thumb_func_start sub_811EC10 -sub_811EC10: @ 811EC10 - push {r4,r5,lr} - ldr r1, _0811EC34 @ =gUnknown_02023A60 - ldr r0, _0811EC38 @ =gUnknown_02024A60 - ldrb r2, [r0] - lsls r0, r2, 9 - adds r1, 0x2 - adds r1, r0, r1 - ldrb r0, [r1] - cmp r0, 0 - bne _0811EC40 - ldr r0, _0811EC3C @ =gUnknown_02024A6A - lsls r1, r2, 1 - adds r1, r0 - ldrb r0, [r1] - bl sub_811EC68 - b _0811EC5E - .align 2, 0 -_0811EC34: .4byte gUnknown_02023A60 -_0811EC38: .4byte gUnknown_02024A60 -_0811EC3C: .4byte gUnknown_02024A6A -_0811EC40: - ldrb r4, [r1] - movs r5, 0 -_0811EC44: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _0811EC52 - adds r0, r5, 0 - bl sub_811EC68 -_0811EC52: - lsrs r4, 1 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x5 - bls _0811EC44 -_0811EC5E: - bl dp01_tbl3_exec_completed - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_811EC10 - thumb_func_start sub_811EC68 sub_811EC68: @ 811EC68 push {r4-r7,lr} diff --git a/src/battle_811DA74.c b/src/battle_811DA74.c index 81d1a8d18..1ceb129fe 100644 --- a/src/battle_811DA74.c +++ b/src/battle_811DA74.c @@ -7,6 +7,7 @@ #include "pokemon.h" #include "sound.h" #include "sprite.h" +#include "string_util.h" #include "text.h" struct UnknownStruct1 @@ -25,10 +26,18 @@ struct UnknownStruct2 u8 fillerA[2]; }; +//Possibly PokemonSubstruct1 +struct UnknownStruct3 +{ + u16 moves[4]; + u8 pp[4]; + u8 ppBonuses; +}; + extern u32 gBitTable[]; extern u16 gBattleTypeFlags; -extern struct UnknownStruct1 gUnknown_02023A60[]; +extern u8 gUnknown_02023A60[][0x200]; extern u8 gUnknown_02024A60; extern u32 gUnknown_02024A64; extern u16 gUnknown_02024A6A[]; @@ -62,10 +71,13 @@ extern void sub_8141828(); extern void c2_8011A1C(void); extern void sub_800832C(); extern void dp01_prepare_buffer_wireless_probably(); +extern void dp01_build_cmdbuf_x1D_1D_numargs_varargs(int, u16, void *); void sub_811DA94(void); void sub_811E0A0(void); void dp01_tbl3_exec_completed(void); +u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *b); +void sub_811EC68(u8); void nullsub_74(void) { @@ -80,8 +92,8 @@ void sub_811DA94(void) { if (gUnknown_02024A64 & gBitTable[gUnknown_02024A60]) { - if (gUnknown_02023A60[gUnknown_02024A60].unk0 <= 0x38) - gUnknown_083FE4F4[gUnknown_02023A60[gUnknown_02024A60].unk0](); + if (gUnknown_02023A60[gUnknown_02024A60][0] <= 0x38) + gUnknown_083FE4F4[gUnknown_02023A60[gUnknown_02024A60][0]](); else dp01_tbl3_exec_completed(); } @@ -323,7 +335,7 @@ void dp01_tbl3_exec_completed(void) { multiplayerId = GetMultiplayerId(); dp01_prepare_buffer_wireless_probably(2, 4, &multiplayerId); - gUnknown_02023A60[gUnknown_02024A60].unk0 = 0x38; + gUnknown_02023A60[gUnknown_02024A60][0] = 0x38; } else { @@ -343,23 +355,19 @@ void sub_811E3B8(void) dp01_tbl3_exec_completed(); } -/* -extern int dp01_getattr_by_ch1_for_player_pokemon(u8, void *); -extern void dp01_build_cmdbuf_x1D_1D_numargs_varargs(int, u16, void *); - void dp01t_00_3_getattr(void) { - u8 unk[4]; + u8 unk[256]; int r6 = 0; s32 i; - - if (*((u8 *)&gUnknown_02023A60 + 2 + gUnknown_02024A60 * 0x200) == 0) + + if (gUnknown_02023A60[gUnknown_02024A60][2] == 0) { r6 = dp01_getattr_by_ch1_for_player_pokemon(gUnknown_02024A6A[gUnknown_02024A60], unk); } else { - u8 r4 = *((u8 *)&gUnknown_02023A60 + gUnknown_02024A60 * 0x200 + 2); + u8 r4 = gUnknown_02023A60[gUnknown_02024A60][2]; for (i = 0; i < 6; i++) { @@ -371,4 +379,335 @@ void dp01t_00_3_getattr(void) dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, unk); dp01_tbl3_exec_completed(); } -*/ + +u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer) +{ + struct BattlePokemon battlePokemon; + struct UnknownStruct3 moveData; + u8 nickname[20]; + u8 *src; + s16 data16; + u32 data32; + s32 size = 0; + + switch (gUnknown_02023A60[gUnknown_02024A60][1]) + { + case 0: + battlePokemon.species = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); + battlePokemon.item = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); + for (size = 0; size < 4; size++) + { + battlePokemon.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); + battlePokemon.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + } + battlePokemon.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + battlePokemon.friendship = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); + battlePokemon.experience = GetMonData(&gPlayerParty[a], MON_DATA_EXP); + battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); + battlePokemon.status1 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); + battlePokemon.level = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); + battlePokemon.hp = GetMonData(&gPlayerParty[a], MON_DATA_HP); + battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); + battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK); + battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF); + battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); + battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); + battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG); + battlePokemon.altAbility = GetMonData(&gPlayerParty[a], MON_DATA_ALT_ABILITY); + battlePokemon.otId = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); + GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname); + StringCopy10(battlePokemon.nickname, nickname); + GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName); + src = (u8 *)&battlePokemon; + for (size = 0; size < sizeof(battlePokemon); size++) + buffer[size] = src[size]; + break; + case 1: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 2: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 3: + for (size = 0; size < 4; size++) + { + moveData.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size); + moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + } + moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + src = (u8 *)&moveData; + for (size = 0; size < sizeof(moveData); size++) + buffer[size] = src[size]; + break; + case 4: + case 5: + case 6: + case 7: + data16 = GetMonData(&gPlayerParty[a], gUnknown_02023A60[gUnknown_02024A60][1] + MON_DATA_CHECKSUM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 8: + for (size = 0; size < 4; size++) + buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size); + buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES); + size++; + break; + case 9: + case 10: + case 11: + case 12: + buffer[0] = GetMonData(&gPlayerParty[a], gUnknown_02023A60[gUnknown_02024A60][1] + MON_DATA_MARKINGS); + size = 1; + break; + case 17: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 18: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_EXP); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + size = 3; + break; + case 19: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_EV); + size = 1; + break; + case 20: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_EV); + size = 1; + break; + case 21: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_EV); + size = 1; + break; + case 22: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV); + size = 1; + break; + case 23: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV); + size = 1; + break; + case 24: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV); + size = 1; + break; + case 25: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP); + size = 1; + break; + case 26: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKERUS); + size = 1; + break; + case 27: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION); + size = 1; + break; + case 28: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL); + size = 1; + break; + case 29: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_GAME); + size = 1; + break; + case 30: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKEBALL); + size = 1; + break; + case 31: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + size = 6; + break; + case 32: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV); + size = 1; + break; + case 33: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV); + size = 1; + break; + case 34: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV); + size = 1; + break; + case 35: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV); + size = 1; + break; + case 36: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV); + size = 1; + break; + case 37: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV); + size = 1; + break; + case 38: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 39: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 40: + data32 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS); + buffer[0] = (data32 & 0x000000FF); + buffer[1] = (data32 & 0x0000FF00) >> 8; + buffer[2] = (data32 & 0x00FF0000) >> 16; + buffer[3] = (data32 & 0xFF000000) >> 24; + size = 4; + break; + case 41: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL); + size = 1; + break; + case 42: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 43: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 44: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_ATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 45: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_DEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 46: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 47: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPATK); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 48: + data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF); + buffer[0] = data16; + buffer[1] = data16 >> 8; + size = 2; + break; + case 49: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL); + size = 1; + break; + case 50: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY); + size = 1; + break; + case 51: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE); + size = 1; + break; + case 52: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART); + size = 1; + break; + case 53: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH); + size = 1; + break; + case 54: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SHEEN); + size = 1; + break; + case 55: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON); + size = 1; + break; + case 56: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON); + size = 1; + break; + case 57: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON); + size = 1; + break; + case 58: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON); + size = 1; + break; + case 59: + buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON); + size = 1; + break; + } + return size; +} + +void sub_811EC04(void) +{ + dp01_tbl3_exec_completed(); +} + +void sub_811EC10(void) +{ + u8 i; + u8 r4; + + if (gUnknown_02023A60[gUnknown_02024A60][2] == 0) + { + sub_811EC68(gUnknown_02024A6A[gUnknown_02024A60]); + } + else + { + r4 = gUnknown_02023A60[gUnknown_02024A60][2]; + for (i = 0; i < 6; i++) + { + if (r4 & 1) + sub_811EC68(i); + r4 >>= 1; + } + } + dp01_tbl3_exec_completed(); +} |