summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-05-24 16:48:48 -0400
committerscnorton <scnorton@biociphers.org>2017-05-24 16:48:48 -0400
commit7f47c3b8eeece77252c0564c4677e8432caf33ed (patch)
treed3997ddb7b829e07b30e12ab06496189323d42e5
parent3a1e42f8f1929d5c74ee931de511d7f481db9756 (diff)
sub_806123C
-rw-r--r--asm/field_map_obj.s99
-rwxr-xr-xsrc/field_map_obj.c27
2 files changed, 27 insertions, 99 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index ba2d04c4c..65a0db86e 100644
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -1353,105 +1353,6 @@ sub_805FD08: @ 805FD08
.section .text_805fd18
- thumb_func_start 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}
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index f8fd87c64..65ef99b3b 100755
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -4417,6 +4417,7 @@ bool8 sub_806111C(struct MapObject *mapObject, struct Sprite *sprite)
}
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)
{
@@ -4442,3 +4443,29 @@ void maybe_shadow_1(struct MapObject *mapObject, struct Sprite *sprite, u8 direc
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;
+}