sub_808E38C

This commit is contained in:
PikalaxALT 2017-09-07 19:45:30 -04:00
parent de8ef5e125
commit 11786cc325
3 changed files with 35 additions and 48 deletions

View file

@ -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

View file

@ -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

View file

@ -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);
}