summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2017-09-16 18:18:34 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2017-09-16 18:18:34 -0400
commit589c34e30aa30236b13b7f6621808aca581675c3 (patch)
tree88031b34c703cc619c182a957cca2c0af0c74175
parent119c0e96b58b33c0b72ad2a209b42e7aa93cdf19 (diff)
obj_npc_animation_step, npc_apply_anim_looping
-rwxr-xr-xasm/field_map_obj.s79
-rwxr-xr-xsrc/field_map_obj.c55
2 files changed, 50 insertions, 84 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index 06c18eb2c..1c4b5a145 100755
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -5,85 +5,6 @@
.text
- thumb_func_start npc_apply_anim_looping
-@ void npc_apply_anim_looping(struct npc_state *fieldObject, struct obj *object, u8 anim)
-npc_apply_anim_looping: @ 8092A70
- push {r4,lr}
- adds r4, r1, 0
- lsls r2, 24
- lsrs r2, 24
- ldrb r0, [r0, 0x1]
- lsls r0, 27
- cmp r0, 0
- blt _08092AB2
- adds r0, r4, 0
- adds r0, 0x2A
- strb r2, [r0]
- ldr r0, [r4, 0x8]
- bl sub_8092A4C
- adds r1, r4, 0
- adds r1, 0x2B
- cmp r0, 0
- beq _08092AAA
- ldrb r2, [r1]
- ldrb r3, [r0, 0x4]
- cmp r2, r3
- bne _08092AA0
- ldrb r0, [r0, 0x7]
- b _08092AA8
-_08092AA0:
- ldrb r3, [r0, 0x5]
- cmp r2, r3
- bne _08092AAA
- ldrb r0, [r0, 0x6]
-_08092AA8:
- strb r0, [r1]
-_08092AAA:
- ldrb r1, [r1]
- adds r0, r4, 0
- bl SeekSpriteAnim
-_08092AB2:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end npc_apply_anim_looping
-
- thumb_func_start obj_npc_animation_step
-@ void obj_npc_animation_step(struct npc_state *fieldObject, struct obj *object, u8 anim)
-obj_npc_animation_step: @ 8092AB8
- push {r4,lr}
- adds r4, r1, 0
- lsls r2, 24
- lsrs r2, 24
- ldrb r0, [r0, 0x1]
- lsls r0, 27
- cmp r0, 0
- blt _08092AF0
- adds r0, r4, 0
- adds r0, 0x2A
- strb r2, [r0]
- ldr r0, [r4, 0x8]
- bl sub_8092A4C
- adds r2, r0, 0
- cmp r2, 0
- beq _08092AF0
- ldrb r1, [r2, 0x5]
- adds r0, r4, 0
- adds r0, 0x2B
- ldrb r0, [r0]
- ldrb r3, [r2, 0x4]
- cmp r0, r3
- bhi _08092AEA
- ldrb r1, [r2, 0x4]
-_08092AEA:
- adds r0, r4, 0
- bl SeekSpriteAnim
-_08092AF0:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end obj_npc_animation_step
-
thumb_func_start sub_8092AF8
sub_8092AF8: @ 8092AF8
push {lr}
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index 7caa6d03d..f47639a9e 100755
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -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 *);