obj_npc_animation_step, npc_apply_anim_looping

This commit is contained in:
PikalaxALT
2017-09-16 18:18:34 -04:00
parent 119c0e96b5
commit 589c34e30a
2 changed files with 50 additions and 84 deletions
+50 -5
View File
@@ -3540,19 +3540,19 @@ dirn2anim(sub_8092A2C, gUnknown_0850DB41)
dirn2anim(get_run_image_anim_num, gUnknown_0850DB4A)
struct UnkStruct_085094AC {
const union AnimCmd **unk00;
u8 unk04[4];
const union AnimCmd *const *anims;
u8 animPos[4];
};
extern const struct UnkStruct_085094AC gUnknown_085094AC[];
const struct UnkStruct_085094AC *sub_8092A4C(const union AnimCmd **a0)
static const struct UnkStruct_085094AC *sub_8092A4C(const union AnimCmd *const *anims)
{
const struct UnkStruct_085094AC *retval;
for (retval = gUnknown_085094AC; retval->unk00 != NULL; retval ++)
for (retval = gUnknown_085094AC; retval->anims != NULL; retval ++)
{
if (retval->unk00 == a0)
if (retval->anims == anims)
{
return retval;
}
@@ -3560,6 +3560,51 @@ const struct UnkStruct_085094AC *sub_8092A4C(const union AnimCmd **a0)
return NULL;
}
void npc_apply_anim_looping(struct MapObject *mapObject, struct Sprite *sprite, u8 animNum)
{
const struct UnkStruct_085094AC *unk85094AC;
if (!mapObject->mapobj_bit_12)
{
sprite->animNum = animNum;
unk85094AC = sub_8092A4C(sprite->anims);
if (unk85094AC != NULL)
{
if (sprite->animCmdIndex == unk85094AC->animPos[0])
{
sprite->animCmdIndex = unk85094AC->animPos[3];
}
else if (sprite->animCmdIndex == unk85094AC->animPos[1])
{
sprite->animCmdIndex = unk85094AC->animPos[2];
}
}
SeekSpriteAnim(sprite, sprite->animCmdIndex);
}
}
void obj_npc_animation_step(struct MapObject *mapObject, struct Sprite *sprite, u8 animNum)
{
const struct UnkStruct_085094AC *unk85094AC;
if (!mapObject->mapobj_bit_12)
{
u8 animPos;
sprite->animNum = animNum;
unk85094AC = sub_8092A4C(sprite->anims);
if (unk85094AC != NULL)
{
animPos = unk85094AC->animPos[1];
if (sprite->animCmdIndex <= unk85094AC->animPos[0])
{
animPos = unk85094AC->animPos[0];
}
SeekSpriteAnim(sprite, animPos);
}
}
}
asm(".section .text.get_face_direction_anim_id");
void FieldObjectClearAnimIfSpecialAnimActive(struct MapObject *);