From 3a0795d8626449234c48429bcc8f1563203ca207 Mon Sep 17 00:00:00 2001 From: Ariel Antonitis Date: Wed, 10 Mar 2021 18:27:53 -0500 Subject: [PATCH] Followers disappear properly when using Surf. Removed leftover palette 31. --- src/data/object_events/object_event_graphics.h | 2 -- src/event_object_movement.c | 2 ++ src/field_effect.c | 17 +++++++++++++++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h index e3d07cf70b..66e6dd9258 100755 --- a/src/data/object_events/object_event_graphics.h +++ b/src/data/object_events/object_event_graphics.h @@ -340,9 +340,7 @@ const u32 gObjectEventPic_Greta[] = INCBIN_U32("graphics/object_events/pics/peop const u32 gObjectEventPic_Noland[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/noland.4bpp"); const u32 gObjectEventPic_Lucy[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/lucy.4bpp"); const u32 gObjectEventPic_Brandon[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/brandon.4bpp"); -const u16 gObjectEventPalette32[] = INCBIN_U16("graphics/object_events/palettes/32.gbapal"); const u32 gObjectEventPic_AnimatedBall[] = INCBIN_U32("graphics/object_events/pics/misc/animated_ball.4bpp"); -const u16 gObjectEventPalette31[] = INCBIN_U16("graphics/object_events/palettes/31.gbapal"); const u32 gObjectEventPic_Bulbasaur[] = INCBIN_U32("graphics/object_events/pics/pokemon/bulbasaur.4bpp"); const u32 gObjectEventPic_Ivysaur[] = INCBIN_U32("graphics/object_events/pics/pokemon/ivysaur.4bpp"); const u32 gObjectEventPic_Venusaur[] = INCBIN_U32("graphics/object_events/pics/pokemon/venusaur.4bpp"); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index cd77b82be1..8db7b40033 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1695,6 +1695,8 @@ void RemoveFollowingPokemon(void) { // Remove follower object. Idempotent. static bool8 IsFollowerVisible(void) { // Determine whether follower *should* be visible return !(TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_ACRO_BIKE | PLAYER_AVATAR_FLAG_MACH_BIKE) + || MetatileBehavior_IsSurfableWaterOrUnderwater(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior) + || MetatileBehavior_IsSurfableWaterOrUnderwater(gObjectEvents[gPlayerAvatar.objectEventId].previousMetatileBehavior) || MetatileBehavior_IsForcedMovementTile(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior) || MetatileBehavior_IsForcedMovementTile(gObjectEvents[gPlayerAvatar.objectEventId].previousMetatileBehavior)); } diff --git a/src/field_effect.c b/src/field_effect.c index f5344797e4..65c08f8cf4 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2995,8 +2995,19 @@ static void Task_SurfFieldEffect(u8 taskId) static void SurfFieldEffect_Init(struct Task *task) { + struct ObjectEvent *followerObject = GetFollowerObject(); ScriptContext2_Enable(); FreezeObjectEvents(); + // Put follower into pokeball before using Surf + if (followerObject && !followerObject->invisible) { + // TODO: ClearObjectEventMovement ( + followerObject->singleMovementActive = 0; + ObjectEventClearHeldMovement(followerObject); + gSprites[followerObject->spriteId].data[1] = 0; + gSprites[followerObject->spriteId].animCmdIndex = 0; // Needed because of weird animCmdIndex stuff + // ) + ObjectEventSetHeldMovement(followerObject, MOVEMENT_ACTION_ENTER_POKEBALL); + } gPlayerAvatar.preventStep = TRUE; SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING); PlayerGetDestCoords(&task->tDestX, &task->tDestY); @@ -3047,13 +3058,15 @@ static void SurfFieldEffect_JumpOnSurfBlob(struct Task *task) static void SurfFieldEffect_End(struct Task *task) { - struct ObjectEvent *objectEvent; - objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct ObjectEvent *followerObject = GetFollowerObject(); if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { gPlayerAvatar.preventStep = FALSE; gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->movementDirection)); + if (followerObject) + ObjectEventClearHeldMovementIfFinished(followerObject); SetSurfBobState(objectEvent->fieldEffectSpriteId, 1); UnfreezeObjectEvents(); ScriptContext2_Disable();