feat: static OW pokemon now bob while walking in place (per OW_MON_BOBBING)
This commit is contained in:
parent
25e8c88eb1
commit
839cf2e790
@ -287,6 +287,9 @@
|
||||
#define OW_SPECIES(x) (((x)->graphicsId & OBJ_EVENT_GFX_SPECIES_MASK) - OBJ_EVENT_GFX_MON_BASE)
|
||||
#define OW_FORM(x) ((x)->graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS)
|
||||
|
||||
// Whether Object Event is an OW pokemon
|
||||
#define IS_OW_MON_OBJ(obj) ((obj)->graphicsId >= OBJ_EVENT_GFX_MON_BASE)
|
||||
|
||||
// If true, follower pokemon will bob up and down
|
||||
// during their idle & walking animations
|
||||
#define OW_MON_BOBBING TRUE
|
||||
|
||||
@ -1416,7 +1416,7 @@ static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *tem
|
||||
objectEvent->triggerGroundEffectsOnMove = TRUE;
|
||||
objectEvent->graphicsId = PackGraphicsId(template);
|
||||
SetObjectEventDynamicGraphicsId(objectEvent);
|
||||
if (objectEvent->graphicsId >= OBJ_EVENT_GFX_MON_BASE) {
|
||||
if (IS_OW_MON_OBJ(objectEvent)) {
|
||||
if (template->script && template->script[0] == 0x7d)
|
||||
objectEvent->shiny = T1_READ_16(&template->script[2]) >> 15;
|
||||
else if (template->trainerRange_berryTreeId)
|
||||
@ -1715,7 +1715,7 @@ static u16 PackGraphicsId(const struct ObjectEventTemplate *template) {
|
||||
u32 form = 0;
|
||||
// set form based on template's script,
|
||||
// if first command is bufferspeciesname
|
||||
if (graphicsId >= OBJ_EVENT_GFX_MON_BASE) {
|
||||
if (IS_OW_MON_OBJ(template)) {
|
||||
if (template->script && template->script[0] == 0x7d) {
|
||||
form = T1_READ_16(&template->script[2]);
|
||||
form = (form >> 10) & 0x1F;
|
||||
@ -5300,7 +5300,7 @@ bool8 MovementType_FollowPlayer_Active(struct ObjectEvent *objectEvent, struct S
|
||||
// Animate entering pokeball
|
||||
ClearObjectEventMovement(objectEvent, sprite);
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_ENTER_POKEBALL);
|
||||
objectEvent->singleMovementActive = 1;
|
||||
objectEvent->singleMovementActive = TRUE;
|
||||
sprite->sTypeFuncId = 2; // movement action sets state to 0
|
||||
return TRUE;
|
||||
}
|
||||
@ -5317,7 +5317,7 @@ bool8 MovementType_FollowPlayer_Moving(struct ObjectEvent *objectEvent, struct S
|
||||
#else
|
||||
if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) {
|
||||
#endif
|
||||
objectEvent->singleMovementActive = 0;
|
||||
objectEvent->singleMovementActive = FALSE;
|
||||
if (sprite->sTypeFuncId) // restore nonzero state
|
||||
sprite->sTypeFuncId = 1;
|
||||
} else if (objectEvent->movementActionId < MOVEMENT_ACTION_EXIT_POKEBALL) {
|
||||
@ -5334,11 +5334,11 @@ bool8 FollowablePlayerMovement_Idle(struct ObjectEvent *objectEvent, struct Spri
|
||||
// walk in place
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkInPlaceNormalMovementAction(objectEvent->facingDirection));
|
||||
sprite->sTypeFuncId = 1;
|
||||
objectEvent->singleMovementActive = 1;
|
||||
objectEvent->singleMovementActive = TRUE;
|
||||
return TRUE;
|
||||
} else if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) {
|
||||
// finish movement action
|
||||
objectEvent->singleMovementActive = 0;
|
||||
objectEvent->singleMovementActive = FALSE;
|
||||
} else if (OW_MON_BOBBING == TRUE && (sprite->data[3] & 7) == 2)
|
||||
sprite->y2 ^= -1;
|
||||
UpdateFollowerTransformEffect(objectEvent, sprite);
|
||||
@ -5377,7 +5377,7 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri
|
||||
}
|
||||
MoveObjectEventToMapCoords(objectEvent, targetX, targetY);
|
||||
ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_EXIT_POKEBALL);
|
||||
objectEvent->singleMovementActive = 1;
|
||||
objectEvent->singleMovementActive = TRUE;
|
||||
sprite->sTypeFuncId = 2;
|
||||
if (OW_MON_BOBBING == TRUE)
|
||||
sprite->y2 = 0;
|
||||
@ -5429,7 +5429,7 @@ bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Spri
|
||||
sprite->y2 = -1;
|
||||
}
|
||||
#endif
|
||||
objectEvent->singleMovementActive = 1;
|
||||
objectEvent->singleMovementActive = TRUE;
|
||||
sprite->sTypeFuncId = 2;
|
||||
return TRUE;
|
||||
}
|
||||
@ -5611,6 +5611,14 @@ bool8 MovementType_MoveInPlace_Step1(struct ObjectEvent *objectEvent, struct Spr
|
||||
{
|
||||
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
|
||||
sprite->sTypeFuncId = 0;
|
||||
// similar to FollowablePlayerMovement_Idle
|
||||
else if (
|
||||
OW_MON_BOBBING == TRUE
|
||||
&& IS_OW_MON_OBJ(objectEvent)
|
||||
&& (sprite->data[3] & 7) == 2)
|
||||
{
|
||||
sprite->y2 ^= 1;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user