summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-09-17 13:59:30 -0400
committerscnorton <scnorton@biociphers.org>2017-09-17 13:59:30 -0400
commit283d9060a78cbf618c2c3807f3fa8e3b4b240c0d (patch)
treeb4a969d5d2241cd535245da86798ffb659063167
parent71b40f50c0de173913d11f1e5bc228060cb4a49b (diff)
Some functions relating to affine animations
-rwxr-xr-xasm/field_map_obj.s283
-rwxr-xr-xsrc/field_map_obj.c54
2 files changed, 54 insertions, 283 deletions
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
index 18e4298a0..37c85f20f 100755
--- a/asm/field_map_obj.s
+++ b/asm/field_map_obj.s
@@ -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}
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index cc645751c..3e72f538c 100755
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -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)