diff options
| -rw-r--r-- | asm/field_map_obj.s | 259 | ||||
| -rw-r--r-- | include/field_map_obj_helpers.h | 2 | ||||
| -rwxr-xr-x | src/field_map_obj.c | 106 | 
3 files changed, 108 insertions, 259 deletions
| diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s index 167a5cd13..2eff32e9e 100644 --- a/asm/field_map_obj.s +++ b/asm/field_map_obj.s @@ -1353,265 +1353,6 @@ sub_805FD08: @ 805FD08  	.section .text_805fd18 -	thumb_func_start sub_8060E68 -sub_8060E68: @ 8060E68 -	push {r4-r6,lr} -	mov r6, r8 -	push {r6} -	sub sp, 0x4 -	adds r6, r0, 0 -	mov r8, r1 -	lsls r5, r2, 24 -	lsrs r5, 24 -	ldrh r1, [r6, 0x10] -	mov r0, sp -	strh r1, [r0] -	ldrh r0, [r6, 0x12] -	mov r4, sp -	adds r4, 0x2 -	strh r0, [r4] -	adds r0, r6, 0 -	adds r1, r5, 0 -	bl FieldObjectSetDirection -	adds r0, r5, 0 -	mov r1, sp -	adds r2, r4, 0 -	bl MoveCoords -	mov r0, sp -	movs r2, 0 -	ldrsh r1, [r0, r2] -	movs r0, 0 -	ldrsh r2, [r4, r0] -	adds r0, r6, 0 -	bl npc_coords_shift -	mov r0, r8 -	adds r1, r5, 0 -	bl sub_806467C -	mov r2, r8 -	adds r2, 0x2C -	ldrb r1, [r2] -	movs r0, 0x41 -	negs r0, r0 -	ands r0, r1 -	strb r0, [r2] -	ldrb r0, [r6] -	movs r1, 0x4 -	orrs r0, r1 -	strb r0, [r6] -	movs r0, 0x1 -	mov r1, r8 -	strh r0, [r1, 0x32] -	add sp, 0x4 -	pop {r3} -	mov r8, r3 -	pop {r4-r6} -	pop {r0} -	bx r0 -	thumb_func_end sub_8060E68 - -	thumb_func_start sub_8060ED8 -sub_8060ED8: @ 8060ED8 -	push {r4,r5,lr} -	adds r4, r0, 0 -	adds r5, r1, 0 -	lsls r2, 24 -	lsrs r2, 24 -	bl sub_8060E68 -	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 -	pop {r4,r5} -	pop {r0} -	bx r0 -	thumb_func_end sub_8060ED8 - -	thumb_func_start an_walk_any_2 -an_walk_any_2: @ 8060F04 -	push {r4,r5,lr} -	adds r4, r0, 0 -	adds r5, r1, 0 -	adds r0, r5, 0 -	bl sub_806468C -	lsls r0, 24 -	cmp r0, 0 -	bne _08060F1A -	movs r0, 0 -	b _08060F36 -_08060F1A: -	adds r0, r4, 0 -	bl npc_coords_shift_still -	ldrb r0, [r4] -	movs r1, 0x8 -	orrs r0, r1 -	strb r0, [r4] -	adds r2, r5, 0 -	adds r2, 0x2C -	ldrb r0, [r2] -	movs r1, 0x40 -	orrs r0, r1 -	strb r0, [r2] -	movs r0, 0x1 -_08060F36: -	pop {r4,r5} -	pop {r1} -	bx r1 -	thumb_func_end an_walk_any_2 - -	thumb_func_start sub_8060F3C -sub_8060F3C: @ 8060F3C -	push {r4,r5,lr} -	adds r4, r0, 0 -	adds r5, r1, 0 -	movs r2, 0x1 -	bl sub_8060ED8 -	adds r0, r4, 0 -	adds r1, r5, 0 -	bl sub_8060F5C -	lsls r0, 24 -	lsrs r0, 24 -	pop {r4,r5} -	pop {r1} -	bx r1 -	thumb_func_end sub_8060F3C - -	thumb_func_start sub_8060F5C -sub_8060F5C: @ 8060F5C -	push {r4,lr} -	adds r4, r1, 0 -	bl an_walk_any_2 -	lsls r0, 24 -	cmp r0, 0 -	bne _08060F6E -	movs r0, 0 -	b _08060F74 -_08060F6E: -	movs r0, 0x2 -	strh r0, [r4, 0x32] -	movs r0, 0x1 -_08060F74: -	pop {r4} -	pop {r1} -	bx r1 -	thumb_func_end sub_8060F5C - -	thumb_func_start sub_8060F7C -sub_8060F7C: @ 8060F7C -	push {r4,r5,lr} -	adds r4, r0, 0 -	adds r5, r1, 0 -	movs r2, 0x2 -	bl sub_8060ED8 -	adds r0, r4, 0 -	adds r1, r5, 0 -	bl sub_8060F9C -	lsls r0, 24 -	lsrs r0, 24 -	pop {r4,r5} -	pop {r1} -	bx r1 -	thumb_func_end sub_8060F7C - -	thumb_func_start sub_8060F9C -sub_8060F9C: @ 8060F9C -	push {r4,lr} -	adds r4, r1, 0 -	bl an_walk_any_2 -	lsls r0, 24 -	cmp r0, 0 -	bne _08060FAE -	movs r0, 0 -	b _08060FB4 -_08060FAE: -	movs r0, 0x2 -	strh r0, [r4, 0x32] -	movs r0, 0x1 -_08060FB4: -	pop {r4} -	pop {r1} -	bx r1 -	thumb_func_end sub_8060F9C - -	thumb_func_start sub_8060FBC -sub_8060FBC: @ 8060FBC -	push {r4,r5,lr} -	adds r4, r0, 0 -	adds r5, r1, 0 -	movs r2, 0x3 -	bl sub_8060ED8 -	adds r0, r4, 0 -	adds r1, r5, 0 -	bl sub_8060FDC -	lsls r0, 24 -	lsrs r0, 24 -	pop {r4,r5} -	pop {r1} -	bx r1 -	thumb_func_end sub_8060FBC - -	thumb_func_start sub_8060FDC -sub_8060FDC: @ 8060FDC -	push {r4,lr} -	adds r4, r1, 0 -	bl an_walk_any_2 -	lsls r0, 24 -	cmp r0, 0 -	bne _08060FEE -	movs r0, 0 -	b _08060FF4 -_08060FEE: -	movs r0, 0x2 -	strh r0, [r4, 0x32] -	movs r0, 0x1 -_08060FF4: -	pop {r4} -	pop {r1} -	bx r1 -	thumb_func_end sub_8060FDC - -	thumb_func_start sub_8060FFC -sub_8060FFC: @ 8060FFC -	push {r4,r5,lr} -	adds r4, r0, 0 -	adds r5, r1, 0 -	movs r2, 0x4 -	bl sub_8060ED8 -	adds r0, r4, 0 -	adds r1, r5, 0 -	bl sub_806101C -	lsls r0, 24 -	lsrs r0, 24 -	pop {r4,r5} -	pop {r1} -	bx r1 -	thumb_func_end sub_8060FFC - -	thumb_func_start sub_806101C -sub_806101C: @ 806101C -	push {r4,lr} -	adds r4, r1, 0 -	bl an_walk_any_2 -	lsls r0, 24 -	cmp r0, 0 -	bne _0806102E -	movs r0, 0 -	b _08061034 -_0806102E: -	movs r0, 0x2 -	strh r0, [r4, 0x32] -	movs r0, 0x1 -_08061034: -	pop {r4} -	pop {r1} -	bx r1 -	thumb_func_end sub_806101C -  	thumb_func_start sub_806103C  sub_806103C: @ 806103C  	push {r4,r5,lr} diff --git a/include/field_map_obj_helpers.h b/include/field_map_obj_helpers.h index 2481e143d..a61dcc63c 100644 --- a/include/field_map_obj_helpers.h +++ b/include/field_map_obj_helpers.h @@ -9,5 +9,7 @@ void sub_806487C(struct Sprite *sprite, bool8 invisible);  void sub_8064990(u8, u8);  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);  #endif diff --git a/src/field_map_obj.c b/src/field_map_obj.c index ae5d65ce2..cb68b0140 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -4238,3 +4238,109 @@ bool8 npc_obj_ministep_stop_on_arrival(struct MapObject *mapObject, struct Sprit      }      return 0;  } + +void sub_8060E68(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ +    s16 x; +    s16 y; +    x = mapObject->coords2.x; +    y = mapObject->coords2.y; +    FieldObjectSetDirection(mapObject, direction); +    MoveCoords(direction, &x, &y); +    npc_coords_shift(mapObject, x, y); +    sub_806467C(sprite, direction); +    sprite->animPaused = 0; +    mapObject->mapobj_bit_2 = 1; +    sprite->data2 = 1; +} + +void sub_8060ED8(struct MapObject *mapObject, struct Sprite *sprite, u8 direction) +{ +    sub_8060E68(mapObject, sprite, direction); +    sub_805FE28(mapObject, sprite, get_go_image_anim_num(mapObject->mapobj_unk_18)); +} + +bool8 an_walk_any_2(struct MapObject *mapObject, struct Sprite *sprite) +{ +    if (sub_806468C(sprite)) +    { +        npc_coords_shift_still(mapObject); +        mapObject->mapobj_bit_3 = 1; +        sprite->animPaused = 1; +        return TRUE; +    } +    return FALSE; +} + +bool8 sub_8060F5C(struct MapObject *, struct Sprite *); + +bool8 sub_8060F3C(struct MapObject *mapObject, struct Sprite *sprite) +{ +    sub_8060ED8(mapObject, sprite, DIR_SOUTH); +    return sub_8060F5C(mapObject, sprite); +} + +bool8 sub_8060F5C(struct MapObject *mapObject, struct Sprite *sprite) +{ +    if (an_walk_any_2(mapObject, sprite)) +    { +        sprite->data2 = 2; +        return TRUE; +    } +    return FALSE; +} + +bool8 sub_8060F9C(struct MapObject *, struct Sprite *); + +bool8 sub_8060F7C(struct MapObject *mapObject, struct Sprite *sprite) +{ +    sub_8060ED8(mapObject, sprite, DIR_NORTH); +    return sub_8060F9C(mapObject, sprite); +} + +bool8 sub_8060F9C(struct MapObject *mapObject, struct Sprite *sprite) +{ +    if (an_walk_any_2(mapObject, sprite)) +    { +        sprite->data2 = 2; +        return TRUE; +    } +    return FALSE; +} + +bool8 sub_8060FDC(struct MapObject *, struct Sprite *); + +bool8 sub_8060FBC(struct MapObject *mapObject, struct Sprite *sprite) +{ +    sub_8060ED8(mapObject, sprite, DIR_WEST); +    return sub_8060FDC(mapObject, sprite); +} + +bool8 sub_8060FDC(struct MapObject *mapObject, struct Sprite *sprite) +{ +    if (an_walk_any_2(mapObject, sprite)) +    { +        sprite->data2 = 2; +        return TRUE; +    } +    return FALSE; +} + +bool8 sub_806101C(struct MapObject *, struct Sprite *); + +bool8 sub_8060FFC(struct MapObject *mapObject, struct Sprite *sprite) +{ +    sub_8060ED8(mapObject, sprite, DIR_EAST); +    return sub_806101C(mapObject, sprite); +} + +bool8 sub_806101C(struct MapObject *mapObject, struct Sprite *sprite) +{ +    if (an_walk_any_2(mapObject, sprite)) +    { +        sprite->data2 = 2; +        return TRUE; +    } +    return FALSE; +} + | 
