mirror of
https://github.com/pret/pokeruby.git
synced 2026-09-11 04:26:32 -05:00
Special anims; meta_step
This commit is contained in:
@@ -1353,171 +1353,6 @@ sub_805FD08: @ 805FD08
|
||||
|
||||
.section .text_805fd18
|
||||
|
||||
thumb_func_start FieldObjectForceSetSpecialAnim
|
||||
FieldObjectForceSetSpecialAnim: @ 8060598
|
||||
push {r4,r5,lr}
|
||||
adds r5, r0, 0
|
||||
lsls r4, r1, 24
|
||||
lsrs r4, 24
|
||||
bl FieldObjectClearAnimIfSpecialAnimActive
|
||||
adds r0, r5, 0
|
||||
adds r1, r4, 0
|
||||
bl FieldObjectSetSpecialAnim
|
||||
pop {r4,r5}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end FieldObjectForceSetSpecialAnim
|
||||
|
||||
thumb_func_start FieldObjectClearAnimIfSpecialAnimActive
|
||||
FieldObjectClearAnimIfSpecialAnimActive: @ 80605B4
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
ldrb r0, [r1]
|
||||
lsls r0, 25
|
||||
cmp r0, 0
|
||||
bge _080605C6
|
||||
adds r0, r1, 0
|
||||
bl FieldObjectClearAnim
|
||||
_080605C6:
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end FieldObjectClearAnimIfSpecialAnimActive
|
||||
|
||||
thumb_func_start FieldObjectClearAnim
|
||||
FieldObjectClearAnim: @ 80605CC
|
||||
movs r1, 0xFF
|
||||
strb r1, [r0, 0x1C]
|
||||
ldrb r2, [r0]
|
||||
movs r1, 0x41
|
||||
negs r1, r1
|
||||
ands r1, r2
|
||||
movs r2, 0x7F
|
||||
ands r1, r2
|
||||
strb r1, [r0]
|
||||
ldr r3, _080605FC @ =gSprites
|
||||
ldrb r2, [r0, 0x4]
|
||||
lsls r1, r2, 4
|
||||
adds r1, r2
|
||||
lsls r1, 2
|
||||
adds r1, r3
|
||||
movs r2, 0
|
||||
strh r2, [r1, 0x30]
|
||||
ldrb r1, [r0, 0x4]
|
||||
lsls r0, r1, 4
|
||||
adds r0, r1
|
||||
lsls r0, 2
|
||||
adds r0, r3
|
||||
strh r2, [r0, 0x32]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_080605FC: .4byte gSprites
|
||||
thumb_func_end FieldObjectClearAnim
|
||||
|
||||
thumb_func_start FieldObjectCheckIfSpecialAnimFinishedOrInactive
|
||||
FieldObjectCheckIfSpecialAnimFinishedOrInactive: @ 8060600
|
||||
push {lr}
|
||||
ldrb r1, [r0]
|
||||
lsls r0, r1, 25
|
||||
cmp r0, 0
|
||||
blt _0806060E
|
||||
movs r0, 0x10
|
||||
b _08060610
|
||||
_0806060E:
|
||||
lsrs r0, r1, 7
|
||||
_08060610:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end FieldObjectCheckIfSpecialAnimFinishedOrInactive
|
||||
|
||||
thumb_func_start FieldObjectClearAnimIfSpecialAnimFinished
|
||||
FieldObjectClearAnimIfSpecialAnimFinished: @ 8060614
|
||||
push {r4,r5,lr}
|
||||
adds r5, r0, 0
|
||||
bl FieldObjectCheckIfSpecialAnimFinishedOrInactive
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
cmp r4, 0
|
||||
beq _0806062E
|
||||
cmp r4, 0x10
|
||||
beq _0806062E
|
||||
adds r0, r5, 0
|
||||
bl FieldObjectClearAnimIfSpecialAnimActive
|
||||
_0806062E:
|
||||
adds r0, r4, 0
|
||||
pop {r4,r5}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end FieldObjectClearAnimIfSpecialAnimFinished
|
||||
|
||||
thumb_func_start FieldObjectGetSpecialAnim
|
||||
FieldObjectGetSpecialAnim: @ 8060638
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
ldrb r0, [r1]
|
||||
lsls r0, 25
|
||||
cmp r0, 0
|
||||
blt _08060648
|
||||
movs r0, 0xFF
|
||||
b _0806064A
|
||||
_08060648:
|
||||
ldrb r0, [r1, 0x1C]
|
||||
_0806064A:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end FieldObjectGetSpecialAnim
|
||||
|
||||
thumb_func_start meta_step
|
||||
meta_step: @ 8060650
|
||||
push {r4-r6,lr}
|
||||
adds r4, r0, 0
|
||||
adds r5, r1, 0
|
||||
adds r6, r2, 0
|
||||
bl DoGroundEffects_OnSpawn
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
bl sub_80634A0
|
||||
adds r0, r4, 0
|
||||
bl FieldObjectIsSpecialAnimActive
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0806067A
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
bl FieldObjectExecSpecialAnim
|
||||
b _08060690
|
||||
_0806067A:
|
||||
ldrb r0, [r4, 0x1]
|
||||
lsls r0, 31
|
||||
cmp r0, 0
|
||||
bne _08060690
|
||||
_08060682:
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
bl _call_via_r6
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08060682
|
||||
_08060690:
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
bl DoGroundEffects_OnBeginStep
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
bl DoGroundEffects_OnFinishStep
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
bl npc_obj_transfer_image_anim_pause_flag
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
bl sub_80634D0
|
||||
adds r0, r4, 0
|
||||
adds r1, r5, 0
|
||||
bl FieldObjectUpdateSubpriority
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end meta_step
|
||||
|
||||
thumb_func_start GetFaceDirectionAnimId
|
||||
GetFaceDirectionAnimId: @ 80606C0
|
||||
push {r4,lr}
|
||||
|
||||
@@ -22,7 +22,7 @@ extern void ClearPlayerAvatarInfo(void);
|
||||
extern void npc_load_two_palettes__no_record(u16, u8);
|
||||
extern void npc_load_two_palettes__and_record(u16, u8);
|
||||
extern void sub_8060388(s16, s16, s16 *, s16 *);
|
||||
extern void sub_80634D0();
|
||||
extern void sub_80634D0(struct MapObject *, struct Sprite *);
|
||||
extern void pal_patch_for_npc(u16, u16);
|
||||
extern void CameraObjectReset1(void);
|
||||
|
||||
@@ -3628,3 +3628,82 @@ bool8 FieldObjectSetSpecialAnim(struct MapObject *mapObject, u8 specialAnimId)
|
||||
gSprites[mapObject->spriteId].data2 = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void FieldObjectForceSetSpecialAnim(struct MapObject *mapObject, u8 specialAnimId)
|
||||
{
|
||||
FieldObjectClearAnimIfSpecialAnimActive(mapObject);
|
||||
FieldObjectSetSpecialAnim(mapObject, specialAnimId);
|
||||
}
|
||||
|
||||
void FieldObjectClearAnimIfSpecialAnimActive(struct MapObject *mapObject)
|
||||
{
|
||||
if (mapObject->mapobj_bit_6)
|
||||
{
|
||||
FieldObjectClearAnim(mapObject);
|
||||
}
|
||||
}
|
||||
|
||||
void FieldObjectClearAnim(struct MapObject *mapObject)
|
||||
{
|
||||
mapObject->mapobj_unk_1C = 0xFF;
|
||||
mapObject->mapobj_bit_6 = 0;
|
||||
mapObject->mapobj_bit_7 = 0;
|
||||
gSprites[mapObject->spriteId].data1 = 0;
|
||||
gSprites[mapObject->spriteId].data2 = 0;
|
||||
}
|
||||
|
||||
bool8 FieldObjectCheckIfSpecialAnimFinishedOrInactive(struct MapObject *mapObject)
|
||||
{
|
||||
if (mapObject->mapobj_bit_6)
|
||||
return mapObject->mapobj_bit_7;
|
||||
return 0x10;
|
||||
}
|
||||
|
||||
bool8 FieldObjectClearAnimIfSpecialAnimFinished(struct MapObject *mapObject)
|
||||
{
|
||||
u8 specialAnimStatus;
|
||||
specialAnimStatus = FieldObjectCheckIfSpecialAnimFinishedOrInactive(mapObject);
|
||||
if (specialAnimStatus != 0 && specialAnimStatus != 0x10)
|
||||
{
|
||||
FieldObjectClearAnimIfSpecialAnimActive(mapObject);
|
||||
}
|
||||
return specialAnimStatus;
|
||||
}
|
||||
|
||||
u8 FieldObjectGetSpecialAnim(struct MapObject *mapObject)
|
||||
{
|
||||
if (mapObject->mapobj_bit_6)
|
||||
{
|
||||
return mapObject->mapobj_unk_1C;
|
||||
}
|
||||
return 0xFF;
|
||||
}
|
||||
|
||||
extern void DoGroundEffects_OnSpawn(struct MapObject *mapObject, struct Sprite *sprite);
|
||||
extern void DoGroundEffects_OnBeginStep(struct MapObject *mapObject, struct Sprite *sprite);
|
||||
extern void DoGroundEffects_OnFinishStep(struct MapObject *mapObject, struct Sprite *sprite);
|
||||
extern void npc_obj_transfer_image_anim_pause_flag(struct MapObject *mapObject, struct Sprite *sprite);
|
||||
void sub_80634A0(struct MapObject *mapObject, struct Sprite *sprite);
|
||||
void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *sprite);
|
||||
void FieldObjectUpdateSubpriority(struct MapObject *mapObject, struct Sprite *sprite);
|
||||
|
||||
void meta_step(struct MapObject *mapObject, struct Sprite *sprite, u8 (*callback)(struct MapObject *, struct Sprite *))
|
||||
{
|
||||
DoGroundEffects_OnSpawn(mapObject, sprite);
|
||||
sub_80634A0(mapObject, sprite);
|
||||
if (FieldObjectIsSpecialAnimActive(mapObject))
|
||||
{
|
||||
FieldObjectExecSpecialAnim(mapObject, sprite);
|
||||
} else
|
||||
{
|
||||
if (!mapObject->mapobj_bit_8)
|
||||
{
|
||||
while (callback(mapObject, sprite));
|
||||
}
|
||||
}
|
||||
DoGroundEffects_OnBeginStep(mapObject, sprite);
|
||||
DoGroundEffects_OnFinishStep(mapObject, sprite);
|
||||
npc_obj_transfer_image_anim_pause_flag(mapObject, sprite);
|
||||
sub_80634D0(mapObject, sprite);
|
||||
FieldObjectUpdateSubpriority(mapObject, sprite);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user