diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-05-21 11:53:38 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-05-24 16:14:47 -0400 |
commit | 5b3a726820513cebb68ac3a3fc8e97014e415db3 (patch) | |
tree | 23ab2953fa452fec16136033159da017149aef49 | |
parent | 6a02a6f6e5f90ae5ddf38bd69c90734a50d9142b (diff) |
sub_805CF28 and helpers
-rw-r--r-- | asm/field_map_obj.s | 215 | ||||
-rw-r--r-- | src/field_map_obj.c | 94 |
2 files changed, 88 insertions, 221 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s index 4aa22bad2..75f4abb55 100644 --- a/asm/field_map_obj.s +++ b/asm/field_map_obj.s @@ -6,221 +6,6 @@ .text - thumb_func_start sub_805CF28 -sub_805CF28: @ 805CF28 - 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, _0805CF44 @ =gMapObjects - adds r0, r2 - ldr r2, _0805CF48 @ =sub_805CF4C - bl meta_step - pop {r0} - bx r0 - .align 2, 0 -_0805CF44: .4byte gMapObjects -_0805CF48: .4byte sub_805CF4C - thumb_func_end sub_805CF28 - - thumb_func_start sub_805CF4C -sub_805CF4C: @ 805CF4C - push {r4,lr} - ldr r3, _0805CF68 @ =gUnknown_08375284 - 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 -_0805CF68: .4byte gUnknown_08375284 - thumb_func_end sub_805CF4C - - thumb_func_start sub_805CF6C -sub_805CF6C: @ 805CF6C - 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_805CF6C - - thumb_func_start sub_805CF80 -sub_805CF80: @ 805CF80 - 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_805CF80 - - thumb_func_start sub_805CFAC -sub_805CFAC: @ 805CFAC - push {r4-r6,lr} - adds r6, r1, 0 - bl FieldObjectExecRegularAnim - lsls r0, 24 - cmp r0, 0 - beq _0805CFE0 - ldr r5, _0805CFDC @ =gUnknown_0837520C - bl Random - movs r4, 0x3 - adds r1, r4, 0 - ands r1, r0 - lsls r1, 1 - adds r1, r5 - movs r0, 0 - ldrsh r1, [r1, r0] - adds r0, r6, 0 - bl sub_8064820 - strh r4, [r6, 0x30] - movs r0, 0x1 - b _0805CFE2 - .align 2, 0 -_0805CFDC: .4byte gUnknown_0837520C -_0805CFE0: - movs r0, 0 -_0805CFE2: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_805CFAC - - thumb_func_start sub_805CFE8 -sub_805CFE8: @ 805CFE8 - push {r4,lr} - adds r4, r1, 0 - adds r0, r4, 0 - bl sub_8064824 - lsls r0, 24 - cmp r0, 0 - bne _0805CFFC - movs r0, 0 - b _0805D002 -_0805CFFC: - movs r0, 0x4 - strh r0, [r4, 0x30] - movs r0, 0x1 -_0805D002: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_805CFE8 - - thumb_func_start sub_805D008 -sub_805D008: @ 805D008 - push {r4-r7,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r6, r1, 0 - ldr r1, _0805D050 @ =gUnknown_083752A0 - mov r0, sp - movs r2, 0x2 - bl memcpy - bl Random - movs r7, 0x1 - adds r1, r7, 0 - ands r1, r0 - mov r2, sp - adds r0, r2, r1 - ldrb r4, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl FieldObjectSetDirection - movs r0, 0x5 - strh r0, [r6, 0x30] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_805FF20 - lsls r0, 24 - cmp r0, 0 - beq _0805D046 - strh r7, [r6, 0x30] -_0805D046: - movs r0, 0x1 - add sp, 0x4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0805D050: .4byte gUnknown_083752A0 - thumb_func_end sub_805D008 - - thumb_func_start sub_805D054 -sub_805D054: @ 805D054 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - ldrb r0, [r4, 0x18] - lsrs r0, 4 - bl GetGoSpeed0AnimId - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r4, 0 - adds r1, r5, 0 - bl FieldObjectSetRegularAnim - ldrb r0, [r4] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r4] - movs r0, 0x6 - strh r0, [r5, 0x30] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_805D054 - - thumb_func_start sub_805D084 -sub_805D084: @ 805D084 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl FieldObjectExecRegularAnim - lsls r0, 24 - cmp r0, 0 - beq _0805D0A2 - ldrb r0, [r4] - movs r1, 0x3 - negs r1, r1 - ands r1, r0 - strb r1, [r4] - movs r0, 0x1 - strh r0, [r5, 0x30] -_0805D0A2: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_805D084 - thumb_func_start sub_805D0AC sub_805D0AC: @ 805D0AC push {lr} diff --git a/src/field_map_obj.c b/src/field_map_obj.c index f6ebbee68..84d3d1f01 100644 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -35,7 +35,8 @@ 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); +extern u8 (*const gUnknown_08375270[])(struct MapObject *mapObject, struct Sprite *sprite); +extern u8 (*const gUnknown_08375284[])(struct MapObject *mapObject, struct Sprite *sprite); struct PairedPalettes { @@ -1577,6 +1578,7 @@ u8 sub_805C96C(struct MapObject *mapObject, struct Sprite *sprite) return 0; } +extern const u8 gUnknown_083752A0[2]; extern const u8 gUnknown_08375240[4]; extern u8 sub_805FF20(struct MapObject *, u8); @@ -1862,21 +1864,21 @@ 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) +u8 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) +u8 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) +u8 sub_805CE6C(struct MapObject *mapObject, struct Sprite *sprite) { if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) { @@ -1887,7 +1889,7 @@ u16 sub_805CE6C(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -u16 sub_805CEB0(struct MapObject *mapObject, struct Sprite *sprite) +u8 sub_805CEB0(struct MapObject *mapObject, struct Sprite *sprite) { if (sub_8064824(sprite) || FieldObjectIsTrainerAndCloseToPlayer(mapObject)) { @@ -1897,7 +1899,7 @@ u16 sub_805CEB0(struct MapObject *mapObject, struct Sprite *sprite) return 0; } -u16 sub_805CEE0(struct MapObject *mapObject, struct Sprite *sprite) +u8 sub_805CEE0(struct MapObject *mapObject, struct Sprite *sprite) { u8 direction; u8 directions[4]; @@ -1911,3 +1913,83 @@ u16 sub_805CEE0(struct MapObject *mapObject, struct Sprite *sprite) sprite->data1 = 1; return 1; } + +u8 sub_805CF4C(struct MapObject *mapObject, struct Sprite *sprite); + +void sub_805CF28(struct Sprite *sprite) +{ + meta_step(&gMapObjects[sprite->data0], sprite, sub_805CF4C); +} + +u8 sub_805CF4C(struct MapObject *mapObject, struct Sprite *sprite) +{ + return gUnknown_08375284[sprite->data1](mapObject, sprite); +} + +u8 sub_805CF6C(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + sprite->data1 = 1; + return 1; +} + +u8 sub_805CF80(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(mapObject->mapobj_unk_18)); + sprite->data1 = 2; + return 1; +} + +u8 sub_805CFAC(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) == 0) + { + return 0; + } + sub_8064820(sprite, gUnknown_0837520C[Random() & 3]); + sprite->data1 = 3; + return 1; +} + +u8 sub_805CFE8(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (sub_8064824(sprite) != 0) + { + sprite->data1 = 4; + return 1; + } + return 0; +} + +u8 sub_805D008(struct MapObject *mapObject, struct Sprite *sprite) +{ + u8 direction; + u8 directions[2]; + memcpy(directions, gUnknown_083752A0, 2); + direction = directions[Random() & 1]; + FieldObjectSetDirection(mapObject, direction); + sprite->data1 = 5; + if (sub_805FF20(mapObject, direction) != 0) + { + sprite->data1 = 1; + } + return 1; +} + +u8 sub_805D054(struct MapObject *mapObject, struct Sprite *sprite) +{ + FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(mapObject->placeholder18)); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 6; + return 1; +} + +u8 sub_805D084(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite) != 0) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} |