diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-05-21 11:30:23 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-05-21 11:30:23 -0400 |
commit | e263329671a49fe462e1d4226a53d3ed096eb917 (patch) | |
tree | f7c5d0546409f0435063abe5c1d64d2f6bf26110 | |
parent | 6b58aebeea98dae55c007877d256b62e79004eb7 (diff) |
sub_805CE0C and helpers
-rw-r--r-- | asm/field_map_obj.s | 178 | ||||
-rw-r--r-- | include/field_map_obj.h | 2 | ||||
-rw-r--r-- | src/field_map_obj.c | 75 |
3 files changed, 75 insertions, 180 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s index 782d5dda1..4aa22bad2 100644 --- a/asm/field_map_obj.s +++ b/asm/field_map_obj.s @@ -6,179 +6,6 @@ .text - thumb_func_start sub_805CDE8 -sub_805CDE8: @ 805CDE8 - 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, _0805CE04 @ =gMapObjects - adds r0, r2 - ldr r2, _0805CE08 @ =sub_805CE0C - bl meta_step - pop {r0} - bx r0 - .align 2, 0 -_0805CE04: .4byte gMapObjects -_0805CE08: .4byte sub_805CE0C - thumb_func_end sub_805CDE8 - - thumb_func_start sub_805CE0C -sub_805CE0C: @ 805CE0C - push {r4,lr} - ldr r3, _0805CE28 @ =gUnknown_08375270 - 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 - .align 2, 0 -_0805CE28: .4byte gUnknown_08375270 - thumb_func_end sub_805CE0C - - thumb_func_start sub_805CE2C -sub_805CE2C: @ 805CE2C - 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_805CE2C - - thumb_func_start sub_805CE40 -sub_805CE40: @ 805CE40 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl GetFaceDirectionAnimId - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r5, 0 - bl FieldObjectSetRegularAnim - movs r0, 0x2 - strh r0, [r5, 0x30] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_805CE40 - - thumb_func_start sub_805CE6C -sub_805CE6C: @ 805CE6C - push {r4-r7,lr} - adds r6, r0, 0 - adds r7, r1, 0 - bl FieldObjectExecRegularAnim - lsls r0, 24 - cmp r0, 0 - beq _0805CEA2 - ldr r4, _0805CEAC @ =gUnknown_0837520C - bl Random - movs r5, 0x3 - adds r1, r5, 0 - ands r1, r0 - lsls r1, 1 - adds r1, r4 - movs r0, 0 - ldrsh r1, [r1, r0] - adds r0, r7, 0 - bl sub_8064820 - ldrb r1, [r6] - movs r0, 0x3 - negs r0, r0 - ands r0, r1 - strb r0, [r6] - strh r5, [r7, 0x30] -_0805CEA2: - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0805CEAC: .4byte gUnknown_0837520C - thumb_func_end sub_805CE6C - - thumb_func_start sub_805CEB0 -sub_805CEB0: @ 805CEB0 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r0, r5, 0 - bl sub_8064824 - lsls r0, 24 - cmp r0, 0 - bne _0805CECE - adds r0, r4, 0 - bl FieldObjectIsTrainerAndCloseToPlayer - lsls r0, 24 - cmp r0, 0 - beq _0805CED6 -_0805CECE: - movs r0, 0x4 - strh r0, [r5, 0x30] - movs r0, 0x1 - b _0805CED8 -_0805CED6: - movs r0, 0 -_0805CED8: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_805CEB0 - - thumb_func_start sub_805CEE0 -sub_805CEE0: @ 805CEE0 - push {r4,r5,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - ldr r1, _0805CF24 @ =gUnknown_08375240 - mov r0, sp - movs r2, 0x4 - bl memcpy - adds r0, r4, 0 - movs r1, 0 - bl sub_805CD60 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _0805CF10 - bl Random - movs r1, 0x3 - ands r1, r0 - mov r2, sp - adds r0, r2, r1 - ldrb r1, [r0] -_0805CF10: - adds r0, r4, 0 - bl FieldObjectSetDirection - movs r0, 0x1 - strh r0, [r5, 0x30] - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0805CF24: .4byte gUnknown_08375240 - thumb_func_end sub_805CEE0 - thumb_func_start sub_805CF28 sub_805CF28: @ 805CF28 push {lr} @@ -6526,6 +6353,11 @@ sub_805FD08: @ 805FD08 thumb_func_start npc_reset npc_reset: @ 805FD18 +@ mapObject->mapobj_bit_1 = 0; +@ mapObject->mapobj_bit_6 = 0; +@ mapObject->mapobj_bit_7 = 0; +@ mapObject->mapobj_unk_1C = 0xff; +@ sprite->data1 = 0; ldrb r3, [r0] movs r2, 0x3 negs r2, r2 diff --git a/include/field_map_obj.h b/include/field_map_obj.h index dfc41d38b..ca0852a96 100644 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -6,6 +6,6 @@ void sub_805C058(struct MapObject *mapObject, s16 a, s16 b); void FieldObjectSetDirection(struct MapObject *pObject, u8 unk_18); void MoveCoords(u8 direction, s16 *x, s16 *y); -void meta_step(struct MapObject *pObject, struct Sprite *pSprite, u32 (*d8)()); +void meta_step(struct MapObject *pObject, struct Sprite *pSprite, u8 (*d8)()); #endif // GUARD_FIELD_MAP_OBJ_H diff --git a/src/field_map_obj.c b/src/field_map_obj.c index 9d4a67da3..f6ebbee68 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -35,6 +35,7 @@ void sub_805BDF8(u16); u8 sub_805BE58(const struct SpritePalette *); u8 FindFieldObjectPaletteIndexByTag(u16); extern u8 (*const gUnknown_08375244[])(s16 a0, s16 a1, s16 a2, s16 a3); +extern u16 (*const gUnknown_08375270[])(struct MapObject *mapObject, struct Sprite *sprite); struct PairedPalettes { @@ -1505,19 +1506,19 @@ u16 npc_paltag_by_palslot(u8 a) return 0x11FF; } -u32 sub_805C8A8(void); +u8 sub_805C8A8(struct MapObject *mapObject, struct Sprite *sprite); void sub_805C884(struct Sprite *sprite) { meta_step(&gMapObjects[sprite->data0], sprite, sub_805C8A8); } -u32 sub_805C8A8(void) +u8 sub_805C8A8(struct MapObject *mapObject, struct Sprite *sprite) { return 0; } -u32 sub_805C8D0(struct MapObject *, struct Sprite *); +u8 sub_805C8D0(struct MapObject *, struct Sprite *); void sub_805C8AC(struct Sprite *sprite) { @@ -1526,16 +1527,16 @@ void sub_805C8AC(struct Sprite *sprite) extern u8 (*const gUnknown_08375224[])(); -u32 sub_805C8D0(struct MapObject *mapObject, struct Sprite *sprite) +u8 sub_805C8D0(struct MapObject *mapObject, struct Sprite *sprite) { return gUnknown_08375224[sprite->data1](mapObject, sprite); } -void npc_reset(); +void npc_reset(struct MapObject *mapObject, struct Sprite *sprite); u8 sub_805C8F0(struct MapObject *mapObject, struct Sprite *sprite) { - npc_reset(mapObject); + npc_reset(mapObject, sprite); sprite->data1 = 1; return 1; } @@ -1848,3 +1849,65 @@ u8 sub_805CD60(struct MapObject *mapObject, u8 a1) } return gUnknown_08375244[a1](x, y, x2, y2); } + +u8 sub_805CE0C(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805CDE8(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805CE0C); +} + +u8 sub_805CE0C(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_08375270[sprite->data1](mapObject, sprite); +} + +u16 sub_805CE2C(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u16 sub_805CE40(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u16 sub_805CE6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) + { + sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 3; + } + return 0; +} + +u16 sub_805CEB0(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u16 sub_805CEE0(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[4]; + memcpy(directions, gUnknown_08375240, 4); + direction = sub_805CD60(mapObject, 0); + if (direction == 0) + { + direction = directions[Random() & 3]; + } + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 1; + return 1; +} |