diff options
| author | PikalaxALT <pikalaxalt@gmail.com> | 2017-09-15 21:26:56 -0400 | 
|---|---|---|
| committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-09-15 21:26:56 -0400 | 
| commit | 79e8235701de373e7d7cb84162343c487c7e1a5e (patch) | |
| tree | f1b81bbcb2790f5e0369b97d6ad652ab749b4f74 | |
| parent | 1c6177f67895a20c99d7dfafd43afd83cf3bfff2 (diff) | |
AlternatelyGoInOppositeDirections
| -rwxr-xr-x | asm/field_map_obj.s | 192 | ||||
| -rwxr-xr-x | include/field_map_obj.h | 2 | ||||
| -rwxr-xr-x | src/field_map_obj.c | 62 | 
3 files changed, 64 insertions, 192 deletions
| diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s index 03453a503..f9992ae3b 100755 --- a/asm/field_map_obj.s +++ b/asm/field_map_obj.s @@ -5,198 +5,6 @@  	.text -	thumb_func_start FieldObjectCB_AlternatelyGoInOppositeDirections -FieldObjectCB_AlternatelyGoInOppositeDirections: @ 8090ED8 -	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, =gMapObjects -	adds r0, r2 -	ldr r2, =sub_8090EFC -	bl FieldObjectStep -	pop {r0} -	bx r0 -	.pool -	thumb_func_end FieldObjectCB_AlternatelyGoInOppositeDirections - -	thumb_func_start sub_8090EFC -sub_8090EFC: @ 8090EFC -	push {r4,lr} -	ldr r3, =gUnknown_0850D8CC -	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 -	.pool -	thumb_func_end sub_8090EFC - -	thumb_func_start sub_8090F1C -sub_8090F1C: @ 8090F1C -	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_8090F1C - -	thumb_func_start sub_8090F30 -@ bool8 sub_8090F30(struct npc_state *fieldObject, struct obj *object) -sub_8090F30: @ 8090F30 -	push {r4,r5,lr} -	adds r4, r0, 0 -	adds r5, r1, 0 -	ldr r0, =gUnknown_085055CD -	ldrb r1, [r4, 0x6] -	adds r1, r0 -	ldrb r1, [r1] -	adds r0, r4, 0 -	adds r0, 0x21 -	ldrb r0, [r0] -	cmp r0, 0 -	beq _08090F52 -	adds r0, r1, 0 -	bl GetOppositeDirection -	lsls r0, 24 -	lsrs r1, r0, 24 -_08090F52: -	adds r0, r4, 0 -	bl FieldObjectSetDirection -	movs r0, 0x2 -	strh r0, [r5, 0x30] -	movs r0, 0x1 -	pop {r4,r5} -	pop {r1} -	bx r1 -	.pool -	thumb_func_end sub_8090F30 - -	thumb_func_start sub_8090F68 -@ bool8 sub_8090F68(struct npc_state *fieldObject, struct obj *object) -sub_8090F68: @ 8090F68 -	push {r4-r7,lr} -	adds r4, r0, 0 -	adds r7, r1, 0 -	adds r2, r4, 0 -	adds r2, 0x21 -	ldrb r0, [r2] -	cmp r0, 0 -	beq _08090F98 -	ldr r1, [r4, 0xC] -	ldr r0, [r4, 0x10] -	cmp r1, r0 -	bne _08090F98 -	movs r0, 0 -	strb r0, [r2] -	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 -_08090F98: -	ldrb r1, [r4, 0x18] -	lsrs r1, 4 -	adds r0, r4, 0 -	bl npc_block_way__next_tile -	lsls r0, 24 -	lsrs r5, r0, 24 -	ldrb r0, [r4, 0x18] -	lsrs r0, 4 -	bl GetGoSpeed0AnimId -	lsls r0, 24 -	lsrs r6, r0, 24 -	cmp r5, 0x1 -	bne _08090FEE -	adds r1, r4, 0 -	adds r1, 0x21 -	ldrb r0, [r1] -	adds r0, 0x1 -	strb r0, [r1] -	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] -	lsrs r0, 4 -	bl GetGoSpeed0AnimId -	lsls r0, 24 -	lsrs r6, r0, 24 -	ldrb r1, [r4, 0x18] -	lsrs r1, 4 -	adds r0, r4, 0 -	bl npc_block_way__next_tile -	lsls r0, 24 -	lsrs r5, r0, 24 -_08090FEE: -	cmp r5, 0 -	beq _08091000 -	ldrb r0, [r4, 0x18] -	lsls r0, 28 -	lsrs r0, 28 -	bl GetStepInPlaceDelay16AnimId -	lsls r0, 24 -	lsrs r6, r0, 24 -_08091000: -	adds r0, r4, 0 -	adds r1, r7, 0 -	adds r2, r6, 0 -	bl FieldObjectSetRegularAnim -	ldrb r0, [r4] -	movs r1, 0x2 -	orrs r0, r1 -	strb r0, [r4] -	movs r0, 0x3 -	strh r0, [r7, 0x30] -	movs r0, 0x1 -	pop {r4-r7} -	pop {r1} -	bx r1 -	thumb_func_end sub_8090F68 - -	thumb_func_start sub_8091020 -@ bool8 sub_8091020(struct npc_state *fieldObject, struct obj *object) -sub_8091020: @ 8091020 -	push {r4,r5,lr} -	adds r4, r0, 0 -	adds r5, r1, 0 -	bl FieldObjectExecRegularAnim -	lsls r0, 24 -	cmp r0, 0 -	beq _0809103E -	ldrb r0, [r4] -	movs r1, 0x3 -	negs r1, r1 -	ands r1, r0 -	strb r1, [r4] -	movs r0, 0x1 -	strh r0, [r5, 0x30] -_0809103E: -	movs r0, 0 -	pop {r4,r5} -	pop {r1} -	bx r1 -	thumb_func_end sub_8091020 -  	thumb_func_start sub_8091048  @ bool8 sub_8091048(struct npc_state *fieldObject, struct obj *object)  sub_8091048: @ 8091048 diff --git a/include/field_map_obj.h b/include/field_map_obj.h index 43446ea84..db1ed233f 100755 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -62,6 +62,8 @@ void npc_coords_shift(struct MapObject *, s16, s16);  void sub_808EB08(struct MapObject *, s16, s16);  void sub_808F254(u8, u8, u8);  void FieldObjectStep(struct MapObject *, struct Sprite *, bool8(struct MapObject *, struct Sprite *)); +u8 GetOppositeDirection(u8); +u8 GetStepInPlaceDelay16AnimId(u8);  // Exported data declarations diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 0ba4cc052..91856d1ee 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -3000,3 +3000,65 @@ bool8 sub_8090E94 (struct MapObject *mapObject, struct Sprite *sprite)      sprite->data1 = 0;      return TRUE;  } + +field_object_step(AlternatelyGoInOppositeDirections, gUnknown_0850D8CC) + +bool8 sub_8090F1C (struct MapObject *mapObject, struct Sprite *sprite) +{ +    npc_reset(mapObject, sprite); +    sprite->data1 = 1; +    return TRUE; +} + +bool8 sub_8090F30 (struct MapObject *mapObject, struct Sprite *sprite) +{ +    u8 direction; + +    direction = gUnknown_085055CD[mapObject->animPattern]; +    if (mapObject->mapobj_unk_21) +    { +        direction = GetOppositeDirection(direction); +    } +    FieldObjectSetDirection(mapObject, direction); +    sprite->data1 = 2; +    return TRUE; +} + +bool8 sub_8090F68 (struct MapObject *mapObject, struct Sprite *sprite) +{ +    bool8 blockingWay; +    u8 animId; + +    if (mapObject->mapobj_unk_21 && mapObject->coords1.x == mapObject->coords2.x && mapObject->coords1.y == mapObject->coords2.y) +    { +        mapObject->mapobj_unk_21 = 0; +        FieldObjectSetDirection(mapObject, GetOppositeDirection(mapObject->placeholder18)); +    } +    blockingWay = npc_block_way__next_tile(mapObject, mapObject->placeholder18); +    animId = GetGoSpeed0AnimId(mapObject->placeholder18); +    if (blockingWay == TRUE) +    { +        mapObject->mapobj_unk_21 ++; +        FieldObjectSetDirection(mapObject, GetOppositeDirection(mapObject->placeholder18)); +        animId = GetGoSpeed0AnimId(mapObject->placeholder18); +        blockingWay = npc_block_way__next_tile(mapObject, mapObject->placeholder18); +    } +    if (blockingWay) +    { +        animId = GetStepInPlaceDelay16AnimId(mapObject->mapobj_unk_18); +    } +    FieldObjectSetRegularAnim(mapObject, sprite, animId); +    mapObject->mapobj_bit_1 = TRUE; +    sprite->data1 = 3; +    return TRUE; +} + +bool8 sub_8091020 (struct MapObject *mapObject, struct Sprite *sprite) +{ +    if (FieldObjectExecRegularAnim(mapObject, sprite)) +    { +        mapObject->mapobj_bit_1 = FALSE; +        sprite->data1 = 1; +    } +    return FALSE; +} | 
