summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xasm/field_map_obj.s97
-rwxr-xr-xinclude/data3.h1
-rwxr-xr-xsrc/field_map_obj.c28
3 files changed, 29 insertions, 97 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index 23ee23b72..8acfa8114 100755
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -5,103 +5,6 @@
.text
- thumb_func_start sub_80940C4
-@ int sub_80940C4(int a1, int a2, int a3)
-sub_80940C4: @ 80940C4
- 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, =gUnknown_0850DFC2
- 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 _08094154
- 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 _08094154
- 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_8092F88
- 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 _08094178
- .pool
-_08094154:
- mov r1, r8
- cmp r1, 0xFF
- bne _08094178
- 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]
-_08094178:
- mov r0, r8
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80940C4
-
thumb_func_start sub_8094188
sub_8094188: @ 8094188
push {lr}
diff --git a/include/data3.h b/include/data3.h
index b9ddf3e55..8151e418c 100755
--- a/include/data3.h
+++ b/include/data3.h
@@ -45,5 +45,6 @@ extern const u8 gUnknown_0850DBA0[5];
extern bool8 (*const *const gUnknown_0850DC50[])(struct MapObject *, struct Sprite *);
extern u8 (*const gUnknown_0850DEE8[5])(u8);
extern const s16 gUnknown_0850DFBC[3];
+extern const s16 gUnknown_0850DFC2[3];
#endif //GUARD_DATA3_H
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index 5852f220c..3e3bbfa6f 100755
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -4288,3 +4288,31 @@ void maybe_shadow_1(struct MapObject *mapObject, struct Sprite *sprite, u8 direc
npc_apply_anim_looping(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18));
DoShadowFieldEffect(mapObject);
}
+
+u8 sub_80940C4(struct MapObject *mapObject, struct Sprite *sprite, u8 callback(struct Sprite *))
+{
+ s16 displacements[ARRAY_COUNT(gUnknown_0850DFC2)];
+ s16 x;
+ s16 y;
+ u8 result;
+
+ memcpy(displacements, gUnknown_0850DFC2, sizeof gUnknown_0850DFC2);
+ result = callback(sprite);
+ if (result == 1 && displacements[sprite->data4] != 0)
+ {
+ x = 0;
+ y = 0;
+ sub_8092F88(mapObject->placeholder18, &x, &y, displacements[sprite->data4], displacements[sprite->data4]);
+ npc_coords_shift(mapObject, mapObject->coords2.x + x, mapObject->coords2.y + y);
+ mapObject->mapobj_bit_2 = TRUE;
+ mapObject->mapobj_bit_4 = TRUE;
+ }
+ else if (result == 0xFF)
+ {
+ npc_coords_shift_still(mapObject);
+ mapObject->mapobj_bit_3 = TRUE;
+ mapObject->mapobj_bit_5 = TRUE;
+ sprite->animPaused = TRUE;
+ }
+ return result;
+}