summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_map_obj.s775
-rwxr-xr-xinclude/field_map_obj.h1
-rw-r--r--include/field_map_obj_helpers.h4
-rwxr-xr-x[-rw-r--r--]include/field_player_avatar.h2
-rw-r--r--ld_script.txt2
-rwxr-xr-xsrc/field_map_obj.c297
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);
+}