summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/field_map_obj.s123
-rwxr-xr-xsrc/field_map_obj.c38
2 files changed, 38 insertions, 123 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index ddde64c0c..ea60b8293 100644
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -6,129 +6,6 @@
.text
- @ thumb_func_start sub_805E4EC
-@ sub_805E4EC: @ 805E4EC
- @ push {r4,lr}
- @ adds r4, r1, 0
- @ bl npc_reset
- @ movs r0, 0x1
- @ strh r0, [r4, 0x30]
- @ pop {r4}
- @ pop {r1}
- @ bx r1
- @ thumb_func_end sub_805E4EC
-
- thumb_func_start MoveFieldObjectInNextDirectionInSequence
-MoveFieldObjectInNextDirectionInSequence: @ 805E500
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- mov r8, r1
- adds r7, r2, 0
- adds r2, r4, 0
- adds r2, 0x21
- ldrb r0, [r2]
- cmp r0, 0x3
- bne _0805E522
- ldr r1, [r4, 0xC]
- ldr r0, [r4, 0x10]
- cmp r1, r0
- bne _0805E522
- movs r0, 0
- strb r0, [r2]
-_0805E522:
- adds r5, r4, 0
- adds r5, 0x21
- ldrb r0, [r5]
- adds r0, r7, r0
- ldrb r1, [r0]
- adds r0, r4, 0
- bl FieldObjectSetDirection
- ldrb r0, [r4, 0x18]
- lsrs r0, 4
- bl GetGoSpeed0AnimId
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r1, [r4, 0x18]
- lsrs r1, 4
- adds r0, r4, 0
- bl sub_805FF20
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0805E57C
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- ldrb r0, [r5]
- adds r0, r7, r0
- ldrb r1, [r0]
- adds r0, r4, 0
- bl FieldObjectSetDirection
- ldrb r0, [r4, 0x18]
- lsrs r0, 4
- bl GetGoSpeed0AnimId
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r1, [r4, 0x18]
- lsrs r1, 4
- adds r0, r4, 0
- bl sub_805FF20
- lsls r0, 24
- lsrs r0, 24
-_0805E57C:
- cmp r0, 0
- beq _0805E58E
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl GetStepInPlaceDelay16AnimId
- lsls r0, 24
- lsrs r6, r0, 24
-_0805E58E:
- adds r0, r4, 0
- mov r1, r8
- adds r2, r6, 0
- bl FieldObjectSetRegularAnim
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- movs r0, 0x2
- mov r1, r8
- strh r0, [r1, 0x30]
- movs r0, 0x1
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end MoveFieldObjectInNextDirectionInSequence
-
- thumb_func_start sub_805E5B4
-sub_805E5B4: @ 805E5B4
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl FieldObjectExecRegularAnim
- lsls r0, 24
- cmp r0, 0
- beq _0805E5D2
- ldrb r0, [r4]
- movs r1, 0x3
- negs r1, r1
- ands r1, r0
- strb r1, [r4]
- movs r0, 0x1
- strh r0, [r5, 0x30]
-_0805E5D2:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_805E5B4
-
thumb_func_start sub_805E5DC
sub_805E5DC: @ 805E5DC
push {lr}
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index d186eea66..845f84a34 100755
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -2829,6 +2829,44 @@ u8 sub_805E4EC(struct MapObject *mapObject, struct Sprite *sprite)
return 1;
}
+u8 MoveFieldObjectInNextDirectionInSequence(struct MapObject *mapObject, struct Sprite *sprite, u8 *directionSequence)
+{
+ u8 v0;
+ u8 goSpeed0AnimId;
+ if (mapObject->mapobj_unk_21 == 3 && mapObject->coords1.x == mapObject->coords2.x && mapObject->coords1.y == mapObject->coords2.y)
+ {
+ mapObject->mapobj_unk_21 = 0;
+ }
+ FieldObjectSetDirection(mapObject, directionSequence[mapObject->mapobj_unk_21]);
+ goSpeed0AnimId = GetGoSpeed0AnimId(mapObject->placeholder18);
+ v0 = sub_805FF20(mapObject, mapObject->placeholder18);
+ if (v0 == 1)
+ {
+ mapObject->mapobj_unk_21 ++;
+ FieldObjectSetDirection(mapObject, directionSequence[mapObject->mapobj_unk_21]);
+ goSpeed0AnimId = GetGoSpeed0AnimId(mapObject->placeholder18);
+ v0 = sub_805FF20(mapObject, mapObject->placeholder18);
+ }
+ if (v0 != 0)
+ {
+ goSpeed0AnimId = GetStepInPlaceDelay16AnimId(mapObject->mapobj_unk_18);
+ }
+ FieldObjectSetRegularAnim(mapObject, sprite, goSpeed0AnimId);
+ mapObject->mapobj_bit_1 = 1;
+ sprite->data1 = 2;
+ return 1;
+}
+
+u8 sub_805E5B4(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (FieldObjectExecRegularAnim(mapObject, sprite))
+ {
+ mapObject->mapobj_bit_1 = 0;
+ sprite->data1 = 1;
+ }
+ return 0;
+}
+
void sub_805E5DC(struct Sprite *sprite);
void sub_805E668(struct Sprite *sprite);
void sub_805E6F4(struct Sprite *sprite);