feat: static OW pokemon now bob while walking in place (per OW_MON_BOBBING)

This commit is contained in:
Ariel A 2024-09-01 15:31:12 -04:00
parent 25e8c88eb1
commit 839cf2e790
2 changed files with 19 additions and 8 deletions

View File

@ -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

View File

@ -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;
}