Some functions relating to affine animations

This commit is contained in:
scnorton 2017-09-17 13:59:30 -04:00
parent 71b40f50c0
commit 283d9060a7
2 changed files with 54 additions and 283 deletions

View File

@ -5,289 +5,6 @@
.text
thumb_func_start sub_80956C4
sub_80956C4: @ 80956C4
push {r4,lr}
adds r4, r1, 0
ldrb r0, [r4, 0x1]
movs r1, 0x3
orrs r0, r1
strb r0, [r4, 0x1]
adds r0, r4, 0
bl InitSpriteAffineAnim
adds r2, r4, 0
adds r2, 0x2C
ldrb r0, [r2]
movs r1, 0x80
orrs r0, r1
strb r0, [r2]
adds r4, 0x42
ldrb r1, [r4]
movs r0, 0x3F
ands r0, r1
strb r0, [r4]
movs r0, 0x1
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_80956C4
thumb_func_start sub_80956F4
sub_80956F4: @ 80956F4
push {r4,lr}
adds r4, r1, 0
ldrb r0, [r4, 0x3]
lsls r0, 26
lsrs r0, 27
bl FreeOamMatrix
ldrb r0, [r4, 0x1]
movs r1, 0x4
negs r1, r1
ands r1, r0
strb r1, [r4, 0x1]
lsrs r1, 6
ldrb r2, [r4, 0x3]
lsrs r2, 6
movs r3, 0
adds r0, r4, 0
bl CalcCenterToCornerVec
movs r0, 0x1
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_80956F4
thumb_func_start sub_8095724
sub_8095724: @ 8095724
ldrb r1, [r0, 0x3]
movs r2, 0x8
orrs r1, r2
strb r1, [r0, 0x3]
movs r0, 0x1
bx lr
thumb_func_end sub_8095724
thumb_func_start sub_8095730
sub_8095730: @ 8095730
ldrb r2, [r0, 0x3]
movs r1, 0x9
negs r1, r1
ands r1, r2
strb r1, [r0, 0x3]
movs r0, 0x1
bx lr
thumb_func_end sub_8095730
thumb_func_start sub_8095740
sub_8095740: @ 8095740
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0x1
bl sub_8093B60
adds r2, r4, 0
adds r2, 0x2C
ldrb r1, [r2]
movs r0, 0x7F
ands r0, r1
strb r0, [r2]
adds r0, r4, 0
movs r1, 0
bl StartSpriteAffineAnimIfDifferent
adds r0, r5, 0
adds r1, r4, 0
bl sub_8095774
lsls r0, 24
lsrs r0, 24
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8095740
thumb_func_start sub_8095774
sub_8095774: @ 8095774
push {r4,lr}
adds r4, r1, 0
bl an_walk_any_2
lsls r0, 24
cmp r0, 0
bne _08095786
movs r0, 0
b _08095798
_08095786:
adds r2, r4, 0
adds r2, 0x2C
ldrb r0, [r2]
movs r1, 0x80
orrs r0, r1
strb r0, [r2]
movs r0, 0x2
strh r0, [r4, 0x32]
movs r0, 0x1
_08095798:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_8095774
thumb_func_start sub_80957A0
sub_80957A0: @ 80957A0
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0x1
bl sub_8093B60
adds r2, r4, 0
adds r2, 0x2C
ldrb r1, [r2]
movs r0, 0x7F
ands r0, r1
strb r0, [r2]
adds r0, r4, 0
movs r1, 0x1
bl ChangeSpriteAffineAnimIfDifferent
adds r0, r5, 0
adds r1, r4, 0
bl sub_80957D4
lsls r0, 24
lsrs r0, 24
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_80957A0
thumb_func_start sub_80957D4
sub_80957D4: @ 80957D4
push {r4,lr}
adds r4, r1, 0
bl an_walk_any_2
lsls r0, 24
cmp r0, 0
bne _080957E6
movs r0, 0
b _080957F8
_080957E6:
adds r2, r4, 0
adds r2, 0x2C
ldrb r0, [r2]
movs r1, 0x80
orrs r0, r1
strb r0, [r2]
movs r0, 0x2
strh r0, [r4, 0x32]
movs r0, 0x1
_080957F8:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_80957D4
thumb_func_start sub_8095800
sub_8095800: @ 8095800
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0x3
movs r3, 0x1
bl do_go_anim
adds r2, r4, 0
adds r2, 0x2C
ldrb r1, [r2]
movs r0, 0x7F
ands r0, r1
strb r0, [r2]
adds r0, r4, 0
movs r1, 0x2
bl ChangeSpriteAffineAnimIfDifferent
adds r0, r5, 0
adds r1, r4, 0
bl sub_8095834
lsls r0, 24
lsrs r0, 24
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8095800
thumb_func_start sub_8095834
sub_8095834: @ 8095834
push {r4,lr}
adds r4, r1, 0
bl npc_obj_ministep_stop_on_arrival
lsls r0, 24
cmp r0, 0
bne _08095846
movs r0, 0
b _08095858
_08095846:
adds r2, r4, 0
adds r2, 0x2C
ldrb r0, [r2]
movs r1, 0x80
orrs r0, r1
strb r0, [r2]
movs r0, 0x2
strh r0, [r4, 0x32]
movs r0, 0x1
_08095858:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_8095834
thumb_func_start sub_8095860
sub_8095860: @ 8095860
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0x4
movs r3, 0x1
bl do_go_anim
adds r2, r4, 0
adds r2, 0x2C
ldrb r1, [r2]
movs r0, 0x7F
ands r0, r1
strb r0, [r2]
adds r0, r4, 0
movs r1, 0x3
bl ChangeSpriteAffineAnimIfDifferent
adds r0, r5, 0
adds r1, r4, 0
bl sub_8095894
lsls r0, 24
lsrs r0, 24
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end sub_8095860
thumb_func_start sub_8095894
sub_8095894: @ 8095894
push {r4,lr}
adds r4, r1, 0
bl npc_obj_ministep_stop_on_arrival
lsls r0, 24
cmp r0, 0
bne _080958A6
movs r0, 0
b _080958B8
_080958A6:
adds r2, r4, 0
adds r2, 0x2C
ldrb r0, [r2]
movs r1, 0x80
orrs r0, r1
strb r0, [r2]
movs r0, 0x2
strh r0, [r4, 0x32]
movs r0, 0x1
_080958B8:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_8095894
thumb_func_start sub_80958C0
sub_80958C0: @ 80958C0
push {r4-r6,lr}

View File

@ -4769,3 +4769,57 @@ bool8 sub_80956B4(struct MapObject *mapObject, struct Sprite *sprite)
sprite->data2 = 1;
return TRUE;
}
bool8 sub_80956C4(struct MapObject *mapObject, struct Sprite *sprite)
{
sprite->oam.affineMode = 3;
InitSpriteAffineAnim(sprite);
sprite->affineAnimPaused = TRUE;
sprite->subspriteMode = 0;
return TRUE;
}
bool8 sub_80956F4(struct MapObject *mapObject, struct Sprite *sprite)
{
FreeOamMatrix(sprite->oam.matrixNum);
sprite->oam.affineMode = 0;
CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode);
return TRUE;
}
bool8 sub_8095724(struct MapObject *mapObject, struct Sprite *sprite)
{
mapObject->mapobj_bit_27 = TRUE;
return TRUE;
}
bool8 sub_8095730(struct MapObject *mapObject, struct Sprite *sprite)
{
mapObject->mapobj_bit_27 = FALSE;
return TRUE;
}
#define affine_an_walk_any_2_macro(name, fn, fn2, action, anim, ...)\
static bool8 name##_2(struct MapObject *, struct Sprite *);\
bool8 name(struct MapObject *mapObject, struct Sprite *sprite)\
{\
fn(mapObject, sprite, __VA_ARGS__);\
sprite->affineAnimPaused = FALSE;\
action(sprite, anim);\
return name##_2(mapObject, sprite);\
}\
static bool8 name##_2(struct MapObject *mapObject, struct Sprite *sprite)\
{\
if (fn2(mapObject, sprite))\
{\
sprite->affineAnimPaused = TRUE;\
sprite->data2 = 2;\
return TRUE;\
}\
return FALSE;\
}\
affine_an_walk_any_2_macro(sub_8095740, sub_8093B60, an_walk_any_2, StartSpriteAffineAnimIfDifferent, 0, DIR_SOUTH)
affine_an_walk_any_2_macro(sub_80957A0, sub_8093B60, an_walk_any_2, ChangeSpriteAffineAnimIfDifferent, 1, DIR_SOUTH)
affine_an_walk_any_2_macro(sub_8095800, do_go_anim, npc_obj_ministep_stop_on_arrival, ChangeSpriteAffineAnimIfDifferent, 2, DIR_WEST, 1)
affine_an_walk_any_2_macro(sub_8095860, do_go_anim, npc_obj_ministep_stop_on_arrival, ChangeSpriteAffineAnimIfDifferent, 3, DIR_EAST, 1)