summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-09-07 19:45:30 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-09-07 19:45:30 -0400
commit11786cc325937ce4c0a37b3db40df26dcd785018 (patch)
tree55e76077837d2f7b54f5c10b7fba6544ceec6661
parentde8ef5e12599098abd71c97f654192f6a8cbe900 (diff)
sub_808E38C
-rw-r--r--asm/field_map_obj.s32
-rw-r--r--include/field_map_obj.h10
-rw-r--r--src/field_map_obj.c41
3 files changed, 35 insertions, 48 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index aeca020ab..299893a29 100644
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -5,38 +5,6 @@
.text
- thumb_func_start sub_808E38C
-@ void sub_808E38C(struct npc_state *fieldObject)
-sub_808E38C: @ 808E38C
- push {lr}
- ldrb r2, [r0]
- movs r3, 0x3
- negs r3, r3
- adds r1, r3, 0
- ands r1, r2
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- ldrb r2, [r0, 0x2]
- movs r1, 0x41
- negs r1, r1
- ands r1, r2
- ands r1, r3
- movs r2, 0x5
- negs r2, r2
- ands r1, r2
- subs r2, 0x4
- ands r1, r2
- subs r2, 0x8
- ands r1, r2
- subs r2, 0x10
- ands r1, r2
- strb r1, [r0, 0x2]
- bl FieldObjectClearAnim
- pop {r0}
- bx r0
- thumb_func_end sub_808E38C
-
thumb_func_start SetPlayerAvatarFieldObjectIdAndObjectId
@ void SetPlayerAvatarFieldObjectIdAndObjectId(u8 fieldObjectId, u8 objectId)
SetPlayerAvatarFieldObjectIdAndObjectId: @ 808E3C4
diff --git a/include/field_map_obj.h b/include/field_map_obj.h
index 40f94ccab..3e7bdf932 100644
--- a/include/field_map_obj.h
+++ b/include/field_map_obj.h
@@ -14,16 +14,22 @@ u8 GetFieldObjectIdByLocalIdAndMap(u8, u8, u8);
bool8 TryGetFieldObjectIdByLocalIdAndMap(u8, u8, u8, u8 *);
u8 GetFieldObjectIdByXY(s16, s16);
void FieldObjectSetDirection(struct MapObject *, u8);
-u8 GetFieldObjectIdByXY(s16, s16);
u8 sub_808D4F4(void);
-void RemoveFieldObject(struct MapObject *);
void RemoveFieldObjectByLocalIdAndMap(u8, u8, u8);
void npc_load_two_palettes__no_record(u16, u8);
void npc_load_two_palettes__and_record(u16, u8);
+void sub_808E16C(s16, s16);
void sub_808EAB0(u16, u8);
void sub_8092FF0(s16, s16, s16 *, s16 *);
u8 FieldObjectDirectionToImageAnimId(u8);
void sub_80930E0(s16 *, s16 *, u8, u8);
+void FieldObjectClearAnim(struct MapObject *);
+void SpawnFieldObjectsInView(s16, s16);
+u8 sprite_new(u8, u8, s16, s16, u8, u8);
+u8 AddPseudoFieldObject(u16, void (*)(struct Sprite *), s16, s16, u8);
+u8 show_sprite(u8, u8, u8);
+u8 SpawnSpecialFieldObjectParametrized(u8, u8, u8, s16, s16, u8);
+u8 SpawnSpecialFieldObject(struct MapObjectTemplate *);
// Exported data declarations
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index 69aa2b8f8..469993068 100644
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -21,7 +21,7 @@
// Static ROM declarations
-void sub_808D450(void);
+static void sub_808D450(void);
static u8 GetFieldObjectIdByLocalId(u8);
static u8 GetFieldObjectIdByLocalIdAndMapInternal(u8, u8, u8);
static bool8 GetAvailableFieldObjectSlot(u16, u8, u8, u8 *);
@@ -30,11 +30,11 @@ static void RemoveFieldObjectInternal (struct MapObject *);
/*static*/ u16 GetFieldObjectFlagIdByFieldObjectId(u8);
/*static*/ const struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8);
void sub_8096518(struct MapObject *, struct Sprite *);
-/*static*/ void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *, struct SpriteTemplate *, const struct SubspriteTable **);
+static void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *, struct SpriteTemplate *, const struct SubspriteTable **);
/*static*/ void GetFieldObjectMovingCameraOffset(s16 *, s16 *);
/*static*/ struct MapObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(u8, u8, u8);
/*static*/ void sub_808E894(u16);
-/*static*/ void RemoveFieldObjectIfOutsideView(struct MapObject *);
+static void RemoveFieldObjectIfOutsideView(struct MapObject *);
static void sub_808E1B8(u8, s16, s16);
/*static*/ void SetPlayerAvatarFieldObjectIdAndObjectId(u8, u8);
/*static*/ void sub_808E38C(struct MapObject *);
@@ -74,7 +74,7 @@ void sub_808D438(void)
sub_808D450();
}
-/*static*/ void sub_808D450(void)
+static void sub_808D450(void)
{
u8 spriteIdx;
@@ -168,7 +168,7 @@ static u8 GetFieldObjectIdByLocalId(u8 localId)
// This function has the same nonmatching quirk as in Ruby/Sapphire.
#ifdef NONMATCHING
-/*static*/ u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 mapId, u8 mapGroupId)
+static u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 mapId, u8 mapGroupId)
{
u8 slot;
struct MapObject *mapObject;
@@ -219,7 +219,7 @@ static u8 GetFieldObjectIdByLocalId(u8 localId)
return slot;
}
#else
-/*static*/ __attribute__((naked)) u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 mapId, u8 mapGroupId)
+static __attribute__((naked)) u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 mapId, u8 mapGroupId)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r9\n"
@@ -435,7 +435,7 @@ static bool8 GetAvailableFieldObjectSlot(u16 localId, u8 mapNum, u8 mapGroup, u8
return FALSE;
}
-void RemoveFieldObject(struct MapObject *mapObject)
+static void RemoveFieldObject(struct MapObject *mapObject)
{
mapObject->active = FALSE;
RemoveFieldObjectInternal(mapObject);
@@ -472,7 +472,7 @@ void unref_sub_808D958(void)
}
}
-u8 SpawnFieldObjectInternal(struct MapObjectTemplate *mapObjectTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY)
+static u8 SpawnFieldObjectInternal(struct MapObjectTemplate *mapObjectTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY)
{
struct MapObject *mapObject;
const struct MapObjectGraphicsInfo *graphicsInfo;
@@ -533,7 +533,7 @@ u8 SpawnFieldObjectInternal(struct MapObjectTemplate *mapObjectTemplate, struct
return mapObjectId;
}
-u8 SpawnFieldObject(struct MapObjectTemplate *mapObjectTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY)
+static u8 SpawnFieldObject(struct MapObjectTemplate *mapObjectTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY)
{
const struct MapObjectGraphicsInfo *graphicsInfo;
struct SpriteTemplate spriteTemplate;
@@ -603,7 +603,7 @@ u8 show_sprite(u8 localId, u8 mapNum, u8 mapGroup)
return SpawnFieldObject(mapObjectTemplate, mapNum, mapGroup, cameraX, cameraY);
}
-void MakeObjectTemplateFromFieldObjectGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables)
+static void MakeObjectTemplateFromFieldObjectGraphicsInfo(u16 graphicsId, void (*callback)(struct Sprite *), struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables)
{
const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(graphicsId);
@@ -617,12 +617,12 @@ void MakeObjectTemplateFromFieldObjectGraphicsInfo(u16 graphicsId, void (*callba
*subspriteTables = gfxInfo->subspriteTables;
}
-void MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(u16 graphicsId, u16 callbackIndex, struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables)
+static void MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(u16 graphicsId, u16 callbackIndex, struct SpriteTemplate *sprTemplate, const struct SubspriteTable **subspriteTables)
{
MakeObjectTemplateFromFieldObjectGraphicsInfo(graphicsId, gUnknown_08505438[callbackIndex], sprTemplate, subspriteTables);
}
-void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *mapObjectTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables)
+static void MakeObjectTemplateFromFieldObjectTemplate(struct MapObjectTemplate *mapObjectTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables)
{
MakeObjectTemplateFromFieldObjectGraphicsInfoWithCallbackIndex(mapObjectTemplate->graphicsId, mapObjectTemplate->movementType, spriteTemplate, subspriteTables);
}
@@ -745,7 +745,7 @@ void SpawnFieldObjectsInView(s16 cameraX, s16 cameraY)
}
}
-void RemoveFieldObjectsOutsideView(void)
+/*static*/ void RemoveFieldObjectsOutsideView(void)
{
u8 i;
u8 j;
@@ -769,7 +769,7 @@ void RemoveFieldObjectsOutsideView(void)
}
}
-void RemoveFieldObjectIfOutsideView(struct MapObject *mapObject)
+static void RemoveFieldObjectIfOutsideView(struct MapObject *mapObject)
{
s16 left;
s16 right;
@@ -879,3 +879,16 @@ static void sub_808E1B8(u8 mapObjectId, s16 x, s16 y)
SetObjectSubpriorityByZCoord(mapObject->elevation, sprite, 1);
}
}
+
+/*static*/ void sub_808E38C(struct MapObject *mapObject)
+{
+ mapObject->mapobj_bit_1 = FALSE;
+ mapObject->mapobj_bit_2 = TRUE;
+ mapObject->mapobj_bit_22 = FALSE;
+ mapObject->mapobj_bit_17 = FALSE;
+ mapObject->mapobj_bit_18 = FALSE;
+ mapObject->mapobj_bit_19 = FALSE;
+ mapObject->mapobj_bit_20 = FALSE;
+ mapObject->mapobj_bit_21 = FALSE;
+ FieldObjectClearAnim(mapObject);
+}