summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-05-24 20:19:30 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-05-25 08:11:10 -0400
commit4e3874a3febde4ba5f8c247004b4f84bf098bc9c (patch)
treed74d995eaab0a7776746c5d74c38fa9a0dc853c8
parent82ad1f63c4b0516e2c8e0975c8bfd750480b9e3d (diff)
Swiss cheese to put off these functions for later
-rw-r--r--asm/field_map_obj.s136
-rwxr-xr-xinclude/field_map_obj.h1
-rwxr-xr-x[-rw-r--r--]include/field_player_avatar.h2
-rw-r--r--ld_script.txt2
-rwxr-xr-xsrc/field_map_obj.c78
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\