diff options
-rw-r--r-- | asm/field_map_obj.s | 775 | ||||
-rwxr-xr-x | include/field_map_obj.h | 1 | ||||
-rw-r--r-- | include/field_map_obj_helpers.h | 4 | ||||
-rwxr-xr-x[-rw-r--r--] | include/field_player_avatar.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rwxr-xr-x | src/field_map_obj.c | 297 |
6 files changed, 305 insertions, 776 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s index 6051dc6e6..77d9ca052 100644 --- a/asm/field_map_obj.s +++ b/asm/field_map_obj.s @@ -6,138 +6,7 @@ .text - thumb_func_start sub_805F2FC -sub_805F2FC: @ 805F2FC - push {lr} - adds r1, r0, 0 - movs r0, 0x2E - ldrsh r2, [r1, r0] - lsls r0, r2, 3 - adds r0, r2 - lsls r0, 2 - ldr r2, _0805F318 @ =gMapObjects - adds r0, r2 - ldr r2, _0805F31C @ =sub_805F320 - bl meta_step - pop {r0} - bx r0 - .align 2, 0 -_0805F318: .4byte gMapObjects -_0805F31C: .4byte sub_805F320 - thumb_func_end sub_805F2FC - - thumb_func_start sub_805F320 -sub_805F320: @ 805F320 - push {r4,lr} - ldr r3, _0805F33C @ =gUnknown_08375588 - movs r4, 0x30 - ldrsh r2, [r1, r4] - lsls r2, 2 - adds r2, r3 - ldr r2, [r2] - bl _call_via_r2 - lsls r0, 24 - lsrs r0, 24 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0805F33C: .4byte gUnknown_08375588 - thumb_func_end sub_805F320 - - thumb_func_start mss_npc_reset_oampriv3_1_unk2_unk3 -mss_npc_reset_oampriv3_1_unk2_unk3: @ 805F340 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl npc_reset - adds r4, 0x21 - ldrb r0, [r4] - cmp r0, 0 - bne _0805F358 - bl player_get_direction_lower_nybble - strb r0, [r4] -_0805F358: - movs r0, 0x1 - strh r0, [r5, 0x30] - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end mss_npc_reset_oampriv3_1_unk2_unk3 - - thumb_func_start sub_805F364 -sub_805F364: @ 805F364 - push {r4-r7,lr} - adds r6, r0, 0 - adds r7, r1, 0 - ldr r2, _0805F388 @ =gMapObjects - ldr r3, _0805F38C @ =gPlayerAvatar - ldrb r1, [r3, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1C] - cmp r0, 0xFF - beq _0805F384 - ldrb r0, [r3, 0x3] - cmp r0, 0x2 - bne _0805F390 -_0805F384: - movs r0, 0 - b _0805F3B8 - .align 2, 0 -_0805F388: .4byte gMapObjects -_0805F38C: .4byte gPlayerAvatar -_0805F390: - ldr r5, _0805F3C0 @ =gUnknown_08375594 - bl player_get_x22 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 22 - adds r4, r5 - bl player_get_direction_upper_nybble - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - ldr r4, [r4] - adds r0, r6, 0 - adds r1, r7, 0 - movs r3, 0 - bl _call_via_r4 - lsls r0, 24 - lsrs r0, 24 -_0805F3B8: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0805F3C0: .4byte gUnknown_08375594 - thumb_func_end sub_805F364 - - thumb_func_start sub_805F3C4 -sub_805F3C4: @ 805F3C4 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl FieldObjectExecRegularAnim - lsls r0, 24 - cmp r0, 0 - beq _0805F3E2 - ldrb r0, [r4] - movs r1, 0x3 - negs r1, r1 - ands r1, r0 - strb r1, [r4] - movs r0, 0x1 - strh r0, [r5, 0x30] -_0805F3E2: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_805F3C4 - +.ifndef NONMATCHING thumb_func_start sub_805F3EC sub_805F3EC: @ 805F3EC movs r0, 0 @@ -268,6 +137,7 @@ _0805F4D2: .align 2, 0 _0805F4EC: .4byte gUnknown_0836DC09 thumb_func_end sub_805F438 +.endif thumb_func_start sub_805F4F0 sub_805F4F0: @ 805F4F0 @@ -757,6 +627,8 @@ _0805F8C0: _0805F8DC: .4byte gUnknown_0836DC09 thumb_func_end oac_hopping +.section .text_fmocb2_asm + thumb_func_start sub_805F8E0 sub_805F8E0: @ 805F8E0 push {lr} @@ -1353,645 +1225,6 @@ sub_805FD08: @ 805FD08 .section .text_805fd18 - thumb_func_start sub_806113C -sub_806113C: @ 806113C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x10 - adds r7, r0, 0 - mov r10, r1 - adds r4, r2, 0 - mov r8, r3 - ldr r0, [sp, 0x30] - lsls r4, 24 - lsrs r4, 24 - mov r1, r8 - lsls r1, 24 - lsrs r1, 24 - mov r8, r1 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r1, _080611F4 @ =gUnknown_08375A34 - add r0, sp, 0x4 - movs r2, 0x6 - bl memcpy - add r5, sp, 0xC - movs r0, 0 - strh r0, [r5] - mov r6, sp - adds r6, 0xE - strh r0, [r6] - adds r0, r7, 0 - adds r1, r4, 0 - bl FieldObjectSetDirection - mov r1, r8 - lsls r0, r1, 1 - add r0, sp - adds r0, 0x4 - movs r1, 0 - ldrsh r3, [r0, r1] - str r3, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl sub_8060320 - ldrh r1, [r5] - ldrh r0, [r7, 0x10] - adds r1, r0 - lsls r1, 16 - asrs r1, 16 - ldrh r2, [r6] - ldrh r0, [r7, 0x12] - adds r2, r0 - lsls r2, 16 - asrs r2, 16 - adds r0, r7, 0 - bl npc_coords_shift - mov r0, r10 - adds r1, r4, 0 - mov r2, r8 - mov r3, r9 - bl sub_80646E4 - movs r0, 0x1 - mov r1, r10 - strh r0, [r1, 0x32] - movs r0, 0x2C - add r10, r0 - mov r0, r10 - ldrb r1, [r0] - movs r0, 0x41 - negs r0, r0 - ands r0, r1 - mov r1, r10 - strb r0, [r1] - ldrb r0, [r7] - movs r1, 0x4 - orrs r0, r1 - movs r1, 0x10 - orrs r0, r1 - strb r0, [r7] - add sp, 0x10 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080611F4: .4byte gUnknown_08375A34 - thumb_func_end sub_806113C - - thumb_func_start maybe_shadow_1 -maybe_shadow_1: @ 80611F8 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - ldr r0, [sp, 0x10] - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - adds r0, r4, 0 - bl sub_806113C - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl get_go_image_anim_num - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_805FE28 - adds r0, r4, 0 - bl DoShadowFieldEffect - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end maybe_shadow_1 - - thumb_func_start sub_806123C -sub_806123C: @ 806123C - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - adds r6, r0, 0 - adds r7, r1, 0 - adds r4, r2, 0 - ldr r1, _080612C8 @ =gUnknown_08375A3A - add r0, sp, 0x4 - movs r2, 0x6 - bl memcpy - adds r0, r7, 0 - bl _call_via_r4 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0x1 - bne _080612CC - movs r1, 0x36 - ldrsh r0, [r7, r1] - lsls r0, 1 - add r0, sp - adds r0, 0x4 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r0, 0 - beq _080612CC - add r4, sp, 0xC - movs r0, 0 - strh r0, [r4] - mov r5, sp - adds r5, 0xE - strh r0, [r5] - ldrb r0, [r6, 0x18] - lsrs r0, 4 - movs r2, 0x36 - ldrsh r1, [r7, r2] - lsls r1, 1 - add r1, sp - adds r1, 0x4 - movs r2, 0 - ldrsh r3, [r1, r2] - str r3, [sp] - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_8060320 - ldrh r1, [r4] - ldrh r0, [r6, 0x10] - adds r1, r0 - lsls r1, 16 - asrs r1, 16 - ldrh r2, [r5] - ldrh r0, [r6, 0x12] - adds r2, r0 - lsls r2, 16 - asrs r2, 16 - adds r0, r6, 0 - bl npc_coords_shift - ldrb r0, [r6] - movs r1, 0x4 - orrs r0, r1 - movs r1, 0x10 - orrs r0, r1 - strb r0, [r6] - b _080612F0 - .align 2, 0 -_080612C8: .4byte gUnknown_08375A3A -_080612CC: - mov r1, r8 - cmp r1, 0xFF - bne _080612F0 - adds r0, r6, 0 - bl npc_coords_shift_still - ldrb r0, [r6] - movs r1, 0x8 - orrs r0, r1 - movs r1, 0x20 - orrs r0, r1 - strb r0, [r6] - adds r2, r7, 0 - adds r2, 0x2C - ldrb r0, [r2] - movs r1, 0x40 - orrs r0, r1 - strb r0, [r2] -_080612F0: - mov r0, r8 - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_806123C - - thumb_func_start sub_8061300 -sub_8061300: @ 8061300 - push {lr} - ldr r2, _08061310 @ =sub_8064704 - bl sub_806123C - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08061310: .4byte sub_8064704 - thumb_func_end sub_8061300 - - thumb_func_start sub_8061314 -sub_8061314: @ 8061314 - push {lr} - ldr r2, _08061324 @ =sub_806478C - bl sub_806123C - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08061324: .4byte sub_806478C - thumb_func_end sub_8061314 - - thumb_func_start sub_8061328 -sub_8061328: @ 8061328 - push {lr} - bl sub_8061300 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _0806133A - movs r0, 0 - b _0806133C -_0806133A: - movs r0, 0x1 -_0806133C: - pop {r1} - bx r1 - thumb_func_end sub_8061328 - - thumb_func_start sub_8061340 -sub_8061340: @ 8061340 - push {lr} - bl sub_8061314 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _08061352 - movs r0, 0 - b _08061354 -_08061352: - movs r0, 0x1 -_08061354: - pop {r1} - bx r1 - thumb_func_end sub_8061340 - - thumb_func_start sub_8061358 -sub_8061358: @ 8061358 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl sub_8061300 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08061372 - cmp r0, 0xFF - bne _0806139E - movs r0, 0x1 - b _080613A0 -_08061372: - ldrb r0, [r4, 0x18] - lsrs r0, 4 - bl GetOppositeDirection - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldObjectSetDirection - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl get_go_image_anim_num - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_805FE64 -_0806139E: - movs r0, 0 -_080613A0: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8061358 - - thumb_func_start sub_80613A8 -sub_80613A8: @ 80613A8 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x1 - movs r3, 0x2 - bl maybe_shadow_1 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80613D4 - lsls r0, 24 - lsrs r0, 24 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80613A8 - - thumb_func_start sub_80613D4 -sub_80613D4: @ 80613D4 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl sub_8061328 - lsls r0, 24 - cmp r0, 0 - bne _080613E8 - movs r0, 0 - b _080613F8 -_080613E8: - ldrb r0, [r4, 0x2] - movs r1, 0x41 - negs r1, r1 - ands r1, r0 - strb r1, [r4, 0x2] - movs r0, 0x2 - strh r0, [r5, 0x32] - movs r0, 0x1 -_080613F8: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80613D4 - - thumb_func_start sub_8061400 -sub_8061400: @ 8061400 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x2 - movs r3, 0x2 - bl maybe_shadow_1 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_806142C - lsls r0, 24 - lsrs r0, 24 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8061400 - - thumb_func_start sub_806142C -sub_806142C: @ 806142C - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl sub_8061328 - lsls r0, 24 - cmp r0, 0 - bne _08061440 - movs r0, 0 - b _08061450 -_08061440: - ldrb r0, [r4, 0x2] - movs r1, 0x41 - negs r1, r1 - ands r1, r0 - strb r1, [r4, 0x2] - movs r0, 0x2 - strh r0, [r5, 0x32] - movs r0, 0x1 -_08061450: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_806142C - - thumb_func_start sub_8061458 -sub_8061458: @ 8061458 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x3 - movs r3, 0x2 - bl maybe_shadow_1 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8061484 - lsls r0, 24 - lsrs r0, 24 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8061458 - - thumb_func_start sub_8061484 -sub_8061484: @ 8061484 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl sub_8061328 - lsls r0, 24 - cmp r0, 0 - bne _08061498 - movs r0, 0 - b _080614A8 -_08061498: - ldrb r0, [r4, 0x2] - movs r1, 0x41 - negs r1, r1 - ands r1, r0 - strb r1, [r4, 0x2] - movs r0, 0x2 - strh r0, [r5, 0x32] - movs r0, 0x1 -_080614A8: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8061484 - - thumb_func_start sub_80614B0 -sub_80614B0: @ 80614B0 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - movs r0, 0 - str r0, [sp] - adds r0, r4, 0 - movs r2, 0x4 - movs r3, 0x2 - bl maybe_shadow_1 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_80614DC - lsls r0, 24 - lsrs r0, 24 - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80614B0 - - thumb_func_start sub_80614DC -sub_80614DC: @ 80614DC - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl sub_8061328 - lsls r0, 24 - cmp r0, 0 - bne _080614F0 - movs r0, 0 - b _08061500 -_080614F0: - ldrb r0, [r4, 0x2] - movs r1, 0x41 - negs r1, r1 - ands r1, r0 - strb r1, [r4, 0x2] - movs r0, 0x2 - strh r0, [r5, 0x32] - movs r0, 0x1 -_08061500: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80614DC - - thumb_func_start sub_8061508 -sub_8061508: @ 8061508 - movs r2, 0x1 - strh r2, [r0, 0x32] - strh r1, [r0, 0x34] - bx lr - thumb_func_end sub_8061508 - - thumb_func_start sub_8061510 -sub_8061510: @ 8061510 - push {lr} - ldrh r0, [r1, 0x34] - subs r0, 0x1 - strh r0, [r1, 0x34] - lsls r0, 16 - cmp r0, 0 - beq _08061522 - movs r0, 0 - b _08061528 -_08061522: - movs r0, 0x2 - strh r0, [r1, 0x32] - movs r0, 0x1 -_08061528: - pop {r1} - bx r1 - thumb_func_end sub_8061510 - - thumb_func_start sub_806152C -sub_806152C: @ 806152C - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_8061508 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8061510 - lsls r0, 24 - lsrs r0, 24 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_806152C - - thumb_func_start sub_806154C -sub_806154C: @ 806154C - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - movs r1, 0x2 - bl sub_8061508 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8061510 - lsls r0, 24 - lsrs r0, 24 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_806154C - - thumb_func_start sub_806156C -sub_806156C: @ 806156C - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - movs r1, 0x4 - bl sub_8061508 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8061510 - lsls r0, 24 - lsrs r0, 24 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_806156C - - thumb_func_start sub_806158C -sub_806158C: @ 806158C - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - movs r1, 0x8 - bl sub_8061508 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8061510 - lsls r0, 24 - lsrs r0, 24 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_806158C - - thumb_func_start sub_80615AC -sub_80615AC: @ 80615AC - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - adds r0, r4, 0 - movs r1, 0x10 - bl sub_8061508 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8061510 - lsls r0, 24 - lsrs r0, 24 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80615AC - thumb_func_start sub_80615CC sub_80615CC: @ 80615CC push {r4,r5,lr} diff --git a/include/field_map_obj.h b/include/field_map_obj.h index 2bd875f17..67d96012d 100755 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -89,4 +89,5 @@ extern struct CameraSomething gUnknown_03004880; extern u16 gUnknown_03004898; extern u16 gUnknown_0300489C; +int state_to_direction(u8, u8, u8); #endif // GUARD_FIELD_MAP_OBJ_H diff --git a/include/field_map_obj_helpers.h b/include/field_map_obj_helpers.h index a61dcc63c..119cdd5f8 100644 --- a/include/field_map_obj_helpers.h +++ b/include/field_map_obj_helpers.h @@ -11,5 +11,9 @@ void UnfreezeMapObject(struct MapObject *mapObject); void oamt_npc_ministep_reset(struct Sprite *sprite, u8 a2, u8 a3); void sub_806467C(struct Sprite *sprite, u8 direction); bool8 sub_806468C(struct Sprite *sprite); +void sub_80646E4(struct Sprite *sprite, u8 a2, u8 a3, u8 a4); +void DoShadowFieldEffect(struct MapObject *mapObject); +u8 sub_8064704(struct Sprite *); +u8 sub_806478C(struct Sprite *); #endif diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index d3e4b9132..fc21c4e3c 100644..100755 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -33,7 +33,7 @@ void SetPlayerAvatarTransitionFlags(u16 a); // PlayerAvatarTransition_Underwater // sub_80591F4 void sub_8059204(void); -// player_get_x22 +u8 player_get_x22(void); void PlayerSetAnimId(u8 a, u8 b); void PlayerGoSpeed0(u8 a); void sub_80593C4(u8 a); diff --git a/ld_script.txt b/ld_script.txt index 866dcff5e..bef62c619 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -92,6 +92,8 @@ SECTIONS { src/field_player_avatar.o(.text); src/field_map_obj.o(.text); asm/field_map_obj.o(.text); + src/field_map_obj.o(.text_fmocb2_c); + asm/field_map_obj.o(.text_fmocb2_asm); src/field_map_obj.o(.text_b); asm/field_map_obj.o(.text_805fd18); src/field_ground_effect.o(.text); diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 8c85e7b6d..ede9b2901 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -3182,9 +3182,79 @@ u8 sub_805F2B4(struct MapObject *mapObject, struct Sprite *sprite) return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); }; -void sub_805F2FC(struct Sprite *sprite); +fieldmap_object_cb(sub_805F2FC, sub_805F320, gUnknown_08375588); + +u8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + if (mapObject->mapobj_unk_21 == 0) + { + mapObject->mapobj_unk_21 = player_get_direction_lower_nybble(); + } + sprite->data1 = 1; + return 1; +} + +extern u8 (*const gUnknown_08375594[])(struct MapObject *, struct Sprite *, u8, u8); + +u8 sub_805F364(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2) + { + return 0; + } + return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), 0); +} + +u8 sub_805F3C4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} + +#ifdef NONMATCHING + +u8 sub_805F3EC(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + return 0; +} + +u8 sub_805F3F0(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + int direction; + direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2); + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 2; + return 1; +} + +u8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + s16 x; + s16 y; + int direction; + direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2); + FieldObjectMoveDestCoords(mapObject, direction, &x, &y); + FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(direction)); + if (!npc_block_way(mapObject, x, y, direction) || (a3 != NULL && !a3(MapGridGetMetatileBehaviorAt(x, y)))) + { + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); + } + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 2; + return 1; +} +#endif + void FieldObjectCB_TreeDisguise(struct Sprite *sprite); void FieldObjectCB_MountainDisguise(struct Sprite *sprite); + +asm(".section .text_fmocb2_c\n"); void sub_805F8E0(struct Sprite *sprite); void FieldObjectCB_Hidden1(struct Sprite *sprite); void sub_805FB20(struct Sprite *sprite); @@ -4082,10 +4152,10 @@ int zffu_offset_calc(u8 a0, u8 a1) } #ifdef NONMATCHING -u8 state_to_direction(u8 a0, u8 a1, u8 a2) +int state_to_direction(u8 a0, u8 a1, u8 a2) { int zffuOffset; - asm_comment("For some reason, r2 is being backed up to r3 and restored ahead of the zffu call.") + asm_comment("For some reason, r2 is being backed up to r3 and restored ahead of the zffu call."); if (a1 == 0 || a2 == 0 || a1 > 4 || a2 > 4) { return 0; @@ -4095,7 +4165,7 @@ u8 state_to_direction(u8 a0, u8 a1, u8 a2) } #else __attribute__((naked)) -u8 state_to_direction(u8 a0, u8 a1, u8 a2) +int state_to_direction(u8 a0, u8 a1, u8 a2) { asm(".syntax unified\n\ push {r4,lr}\n\ @@ -4416,3 +4486,222 @@ bool8 sub_806111C(struct MapObject *mapObject, struct Sprite *sprite) return FALSE; } +extern const s16 gUnknown_08375A34[3]; +extern const s16 gUnknown_08375A3A[3]; + +void sub_806113C(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a4, u8 a5) +{ + s16 vSPp4[3]; + s16 x; + s16 y; + memcpy(vSPp4, gUnknown_08375A34, sizeof gUnknown_08375A34); + x = 0; + y = 0; + FieldObjectSetDirection(mapObject, direction); + sub_8060320(direction, &x, &y, vSPp4[a4], vSPp4[a4]); + npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y); + sub_80646E4(sprite, direction, a4, a5); + sprite->data2 = 1; + sprite->animPaused = 0; + mapObject->mapobj_bit_2 = 1; + mapObject->mapobj_bit_4 = 1; +} + +void maybe_shadow_1(struct MapObject *mapObject, struct Sprite *sprite, u8 direction, u8 a4, u8 a5) +{ + sub_806113C(mapObject, sprite, direction, a4, a5); + sub_805FE28(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); + DoShadowFieldEffect(mapObject); +} + +u8 sub_806123C(struct MapObject *mapObject, struct Sprite *sprite, u8 (*const callback)(struct Sprite *)) +{ + s16 vSPp4[3]; + s16 x; + s16 y; + u8 retval; + memcpy(vSPp4, gUnknown_08375A3A, sizeof gUnknown_08375A3A); + retval = callback(sprite); + if (retval == 1 && vSPp4[sprite->data4] != 0) + { + x = 0; + y = 0; + sub_8060320(mapObject->placeholder18, &x, &y, vSPp4[sprite->data4], vSPp4[sprite->data4]); + npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y); + mapObject->mapobj_bit_2 = 1; + mapObject->mapobj_bit_4 = 1; + } else if (retval == 0xff) + { + npc_coords_shift_still(mapObject); + mapObject->mapobj_bit_3 = 1; + mapObject->mapobj_bit_5 = 1; + sprite->animPaused = 1; + } + return retval; +} + +u8 sub_8061300(struct MapObject *mapObject, struct Sprite *sprite) +{ + return sub_806123C(mapObject, sprite, sub_8064704); +} + +u8 sub_8061314(struct MapObject *mapObject, struct Sprite *sprite) +{ + return sub_806123C(mapObject, sprite, sub_806478C); +} + +bool8 sub_8061328(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061300(mapObject, sprite) == 0xFF) + { + return TRUE; + } + return FALSE; +} + +bool8 sub_8061340(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061314(mapObject, sprite) == 0xFF) + { + return TRUE; + } + return FALSE; +} + +bool8 sub_8061358(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 retval; + + retval = sub_8061300(mapObject, sprite); + if (retval != 1) + { + if (retval == 0xFF) + { + return TRUE; + } + return FALSE; + } + FieldObjectSetDirection(mapObject, GetOppositeDirection(mapObject->placeholder18)); + sub_805FE64(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); + return FALSE; +} + +bool8 sub_80613D4(struct MapObject *, struct Sprite *); +bool8 sub_806142C(struct MapObject *, struct Sprite *); +bool8 sub_8061484(struct MapObject *, struct Sprite *); +bool8 sub_80614DC(struct MapObject *, struct Sprite *); + +bool8 sub_80613A8(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_SOUTH, 2, 0); + return sub_80613D4(mapObject, sprite); +} + +bool8 sub_80613D4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061400(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_NORTH, 2, 0); + return sub_806142C(mapObject, sprite); +} + +bool8 sub_806142C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_8061458(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_WEST, 2, 0); + return sub_8061484(mapObject, sprite); +} + +bool8 sub_8061484(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_80614B0(struct MapObject *mapObject, struct Sprite *sprite) +{ + maybe_shadow_1(mapObject, sprite, DIR_EAST, 2, 0); + return sub_80614DC(mapObject, sprite); +} + +bool8 sub_80614DC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8061328(mapObject, sprite)) + { + mapObject->mapobj_bit_22 = 0; + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +void sub_8061508(struct Sprite *sprite, u16 duration) +{ + sprite->data2 = 1; + sprite->data3 = duration; +} + +bool8 sub_8061510(struct MapObject *mapObject, struct Sprite *sprite) +{ + sprite->data3--; + if (!sprite->data3) + { + sprite->data2 = 2; + return TRUE; + } + return FALSE; +} + +bool8 sub_806152C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 1); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_806154C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 2); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_806156C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 4); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_806158C(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 8); + return sub_8061510(mapObject, sprite); +} + +bool8 sub_80615AC(struct MapObject *mapObject, struct Sprite *sprite) +{ + sub_8061508(sprite, 16); + return sub_8061510(mapObject, sprite); +} |