diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2017-05-24 20:19:30 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2017-05-25 08:11:10 -0400 |
commit | 4e3874a3febde4ba5f8c247004b4f84bf098bc9c (patch) | |
tree | d74d995eaab0a7776746c5d74c38fa9a0dc853c8 | |
parent | 82ad1f63c4b0516e2c8e0975c8bfd750480b9e3d (diff) |
Swiss cheese to put off these functions for later
-rw-r--r-- | asm/field_map_obj.s | 136 | ||||
-rwxr-xr-x | include/field_map_obj.h | 1 | ||||
-rwxr-xr-x[-rw-r--r--] | include/field_player_avatar.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rwxr-xr-x | src/field_map_obj.c | 78 |
5 files changed, 82 insertions, 137 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s index b5a30d4e5..77d9ca052 100644 --- a/asm/field_map_obj.s +++ b/asm/field_map_obj.s @@ -6,138 +6,7 @@ .text - thumb_func_start sub_805F2FC -sub_805F2FC: @ 805F2FC - 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, _0805F318 @ =gMapObjects - adds r0, r2 - ldr r2, _0805F31C @ =sub_805F320 - bl meta_step - pop {r0} - bx r0 - .align 2, 0 -_0805F318: .4byte gMapObjects -_0805F31C: .4byte sub_805F320 - thumb_func_end sub_805F2FC - - thumb_func_start sub_805F320 -sub_805F320: @ 805F320 - push {r4,lr} - ldr r3, _0805F33C @ =gUnknown_08375588 - 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 -_0805F33C: .4byte gUnknown_08375588 - thumb_func_end sub_805F320 - - thumb_func_start mss_npc_reset_oampriv3_1_unk2_unk3 -mss_npc_reset_oampriv3_1_unk2_unk3: @ 805F340 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl npc_reset - adds r4, 0x21 - ldrb r0, [r4] - cmp r0, 0 - bne _0805F358 - bl player_get_direction_lower_nybble - strb r0, [r4] -_0805F358: - movs r0, 0x1 - strh r0, [r5, 0x30] - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end mss_npc_reset_oampriv3_1_unk2_unk3 - - thumb_func_start sub_805F364 -sub_805F364: @ 805F364 - push {r4-r7,lr} - adds r6, r0, 0 - adds r7, r1, 0 - ldr r2, _0805F388 @ =gMapObjects - ldr r3, _0805F38C @ =gPlayerAvatar - ldrb r1, [r3, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x1C] - cmp r0, 0xFF - beq _0805F384 - ldrb r0, [r3, 0x3] - cmp r0, 0x2 - bne _0805F390 -_0805F384: - movs r0, 0 - b _0805F3B8 - .align 2, 0 -_0805F388: .4byte gMapObjects -_0805F38C: .4byte gPlayerAvatar -_0805F390: - ldr r5, _0805F3C0 @ =gUnknown_08375594 - bl player_get_x22 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 22 - adds r4, r5 - bl player_get_direction_upper_nybble - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - ldr r4, [r4] - adds r0, r6, 0 - adds r1, r7, 0 - movs r3, 0 - bl _call_via_r4 - lsls r0, 24 - lsrs r0, 24 -_0805F3B8: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0805F3C0: .4byte gUnknown_08375594 - thumb_func_end sub_805F364 - - thumb_func_start sub_805F3C4 -sub_805F3C4: @ 805F3C4 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl FieldObjectExecRegularAnim - lsls r0, 24 - cmp r0, 0 - beq _0805F3E2 - ldrb r0, [r4] - movs r1, 0x3 - negs r1, r1 - ands r1, r0 - strb r1, [r4] - movs r0, 0x1 - strh r0, [r5, 0x30] -_0805F3E2: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_805F3C4 - +.ifndef NONMATCHING thumb_func_start sub_805F3EC sub_805F3EC: @ 805F3EC movs r0, 0 @@ -268,6 +137,7 @@ _0805F4D2: .align 2, 0 _0805F4EC: .4byte gUnknown_0836DC09 thumb_func_end sub_805F438 +.endif thumb_func_start sub_805F4F0 sub_805F4F0: @ 805F4F0 @@ -757,6 +627,8 @@ _0805F8C0: _0805F8DC: .4byte gUnknown_0836DC09 thumb_func_end oac_hopping +.section .text_fmocb2_asm + thumb_func_start sub_805F8E0 sub_805F8E0: @ 805F8E0 push {lr} diff --git a/include/field_map_obj.h b/include/field_map_obj.h index 2bd875f17..67d96012d 100755 --- a/include/field_map_obj.h +++ b/include/field_map_obj.h @@ -89,4 +89,5 @@ extern struct CameraSomething gUnknown_03004880; extern u16 gUnknown_03004898; extern u16 gUnknown_0300489C; +int state_to_direction(u8, u8, u8); #endif // GUARD_FIELD_MAP_OBJ_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index d3e4b9132..fc21c4e3c 100644..100755 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -33,7 +33,7 @@ void SetPlayerAvatarTransitionFlags(u16 a); // PlayerAvatarTransition_Underwater // sub_80591F4 void sub_8059204(void); -// player_get_x22 +u8 player_get_x22(void); void PlayerSetAnimId(u8 a, u8 b); void PlayerGoSpeed0(u8 a); void sub_80593C4(u8 a); diff --git a/ld_script.txt b/ld_script.txt index 866dcff5e..bef62c619 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -92,6 +92,8 @@ SECTIONS { src/field_player_avatar.o(.text); src/field_map_obj.o(.text); asm/field_map_obj.o(.text); + src/field_map_obj.o(.text_fmocb2_c); + asm/field_map_obj.o(.text_fmocb2_asm); src/field_map_obj.o(.text_b); asm/field_map_obj.o(.text_805fd18); src/field_ground_effect.o(.text); diff --git a/src/field_map_obj.c b/src/field_map_obj.c index ddf76fef6..ede9b2901 100755 --- a/src/field_map_obj.c +++ b/src/field_map_obj.c @@ -3182,9 +3182,79 @@ u8 sub_805F2B4(struct MapObject *mapObject, struct Sprite *sprite) return MoveFieldObjectInNextDirectionInSequence(mapObject, sprite, directions); }; -void sub_805F2FC(struct Sprite *sprite); +fieldmap_object_cb(sub_805F2FC, sub_805F320, gUnknown_08375588); + +u8 mss_npc_reset_oampriv3_1_unk2_unk3(struct MapObject *mapObject, struct Sprite *sprite) +{ + npc_reset(mapObject, sprite); + if (mapObject->mapobj_unk_21 == 0) + { + mapObject->mapobj_unk_21 = player_get_direction_lower_nybble(); + } + sprite->data1 = 1; + return 1; +} + +extern u8 (*const gUnknown_08375594[])(struct MapObject *, struct Sprite *, u8, u8); + +u8 sub_805F364(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1C == 0xFF || gPlayerAvatar.running1 == 2) + { + return 0; + } + return gUnknown_08375594[player_get_x22()](mapObject, sprite, player_get_direction_upper_nybble(), 0); +} + +u8 sub_805F3C4(struct MapObject *mapObject, struct Sprite *sprite) +{ + if (FieldObjectExecRegularAnim(mapObject, sprite)) + { + mapObject->mapobj_bit_1 = 0; + sprite->data1 = 1; + } + return 0; +} + +#ifdef NONMATCHING + +u8 sub_805F3EC(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + return 0; +} + +u8 sub_805F3F0(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + int direction; + direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2); + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 2; + return 1; +} + +u8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8)) +{ + s16 x; + s16 y; + int direction; + direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2); + FieldObjectMoveDestCoords(mapObject, direction, &x, &y); + FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(direction)); + if (!npc_block_way(mapObject, x, y, direction) || (a3 != NULL && !a3(MapGridGetMetatileBehaviorAt(x, y)))) + { + FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction)); + } + mapObject->mapobj_bit_1 = 1; + sprite->data1 = 2; + return 1; +} +#endif + void FieldObjectCB_TreeDisguise(struct Sprite *sprite); void FieldObjectCB_MountainDisguise(struct Sprite *sprite); + +asm(".section .text_fmocb2_c\n"); void sub_805F8E0(struct Sprite *sprite); void FieldObjectCB_Hidden1(struct Sprite *sprite); void sub_805FB20(struct Sprite *sprite); @@ -4082,10 +4152,10 @@ int zffu_offset_calc(u8 a0, u8 a1) } #ifdef NONMATCHING -u8 state_to_direction(u8 a0, u8 a1, u8 a2) +int state_to_direction(u8 a0, u8 a1, u8 a2) { int zffuOffset; - asm_comment("For some reason, r2 is being backed up to r3 and restored ahead of the zffu call.") + asm_comment("For some reason, r2 is being backed up to r3 and restored ahead of the zffu call."); if (a1 == 0 || a2 == 0 || a1 > 4 || a2 > 4) { return 0; @@ -4095,7 +4165,7 @@ u8 state_to_direction(u8 a0, u8 a1, u8 a2) } #else __attribute__((naked)) -u8 state_to_direction(u8 a0, u8 a1, u8 a2) +int state_to_direction(u8 a0, u8 a1, u8 a2) { asm(".syntax unified\n\ push {r4,lr}\n\ |