From 29150322ce833859b6ca27196f52f633c60efa27 Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Sun, 19 Dec 2021 22:27:39 -0500 Subject: [PATCH 1/2] Fixed follower script release bug. --- include/event_object_movement.h | 1 + src/event_object_movement.c | 3 +-- src/scrcmd.c | 34 ++++++++------------------------- 3 files changed, 10 insertions(+), 28 deletions(-) diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 3330c94522..0ba2846f7a 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -92,6 +92,7 @@ void OverrideSecretBaseDecorationSpriteScript(u8 localId, u8 mapNum, u8 mapGroup void GetMapCoordsFromSpritePos(s16, s16, s16 *, s16 *); u8 GetFaceDirectionAnimNum(u8); void SetSpritePosToOffsetMapCoords(s16 *, s16 *, s16, s16); +void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite); void ObjectEventClearHeldMovement(struct ObjectEvent *); void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *); struct Pokemon * GetFirstLiveMon(void); diff --git a/src/event_object_movement.c b/src/event_object_movement.c index d9fd0d2aa2..f71a131ae7 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -157,7 +157,6 @@ static void CameraObject_0(struct Sprite *); static void CameraObject_1(struct Sprite *); static void CameraObject_2(struct Sprite *); static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId, struct ObjectEventTemplate *templates, u8 count); -static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *); static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8); static void SetSpriteDataForNormalStep(struct Sprite *, u8, u8); static void InitSpriteForFigure8Anim(struct Sprite *sprite); @@ -5105,7 +5104,7 @@ bool8 MovementType_Invisible_Step2(struct ObjectEvent *objectEvent, struct Sprit return FALSE; } -static void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite) +void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite) { objectEvent->singleMovementActive = FALSE; objectEvent->heldMovementActive = FALSE; diff --git a/src/scrcmd.c b/src/scrcmd.c index da06fce125..572fb7a601 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1011,14 +1011,8 @@ bool8 ScrCmd_applymovement(struct ScriptContext *ctx) if (objEvent == NULL || gSprites[objEvent->spriteId].data[1] == 0) { return FALSE; } - // ClearEventObjectMovement( - objEvent->singleMovementActive = 0; - objEvent->heldMovementActive = FALSE; - objEvent->heldMovementFinished = FALSE; - objEvent->movementActionId = 0xFF; - gSprites[objEvent->spriteId].data[1] = 0; - // ) - gSprites[objEvent->spriteId].animCmdIndex = 0; // Needed because of weird animCmdIndex stuff + ClearObjectEventMovement(objEvent, &gSprites[objEvent->spriteId]); + gSprites[objEvent->spriteId].animCmdIndex = 0; // Needed to set start frame of animation ScriptMovement_StartObjectMovementScript(OBJ_EVENT_ID_FOLLOWER, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, EnterPokeballMovement); } return FALSE; @@ -1268,15 +1262,9 @@ bool8 ScrCmd_releaseall(struct ScriptContext *ctx) { u8 playerObjectId; struct ObjectEvent *followerObject = GetFollowerObject(); - if (followerObject) { // Release follower from movement - // ObjectEventClearHeldMovement( TODO: Change the way data[1] determines state - followerObject->singleMovementActive = FALSE; - followerObject->movementActionId = 0xFF; - followerObject->heldMovementActive = FALSE; - followerObject->heldMovementFinished = FALSE; - gSprites[followerObject->spriteId].data[2] = 0; - // ) - } + // Release follower from movement iff it exists and is in the shadowing state + if (followerObject && gSprites[followerObject->spriteId].data[1] == 0) + ClearObjectEventMovement(followerObject, &gSprites[followerObject->spriteId]); HideFieldMessageBox(); playerObjectId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); @@ -1290,15 +1278,9 @@ bool8 ScrCmd_release(struct ScriptContext *ctx) { u8 playerObjectId; struct ObjectEvent *followerObject = GetFollowerObject(); - if (followerObject) { // Release follower from movement - // ObjectEventClearHeldMovement( - followerObject->singleMovementActive = FALSE; - followerObject->movementActionId = 0xFF; - followerObject->heldMovementActive = FALSE; - followerObject->heldMovementFinished = FALSE; - gSprites[followerObject->spriteId].data[2] = 0; - // ) - } + // Release follower from movement iff it exists and is in the shadowing state + if (followerObject && gSprites[followerObject->spriteId].data[1] == 0) + ClearObjectEventMovement(followerObject, &gSprites[followerObject->spriteId]); HideFieldMessageBox(); if (gObjectEvents[gSelectedObjectEvent].active) From c29516bc2fa000f20bc73651d819c2f0715f9bdf Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Tue, 21 Dec 2021 21:03:01 -0500 Subject: [PATCH 2/2] Fixed bug with follower update after the party was healed. Credit: Jaizu --- data/event_scripts.s | 1 + data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc | 2 +- data/maps/TrainerHill_Entrance/scripts.inc | 2 ++ data/scripts/pkmn_center_nurse.inc | 3 ++- data/scripts/secret_base.inc | 1 + 5 files changed, 7 insertions(+), 2 deletions(-) diff --git a/data/event_scripts.s b/data/event_scripts.s index 352d004aaf..4318ca2eb0 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -720,6 +720,7 @@ Common_EventScript_OutOfCenterPartyHeal:: playfanfare MUS_HEAL waitfanfare special HealPlayerParty + callnative UpdateFollowingPokemon fadescreen FADE_FROM_BLACK return diff --git a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc index 59131fd7ee..cf3767d0ed 100644 --- a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc +++ b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc @@ -79,6 +79,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_CaptStern:: playfanfare MUS_HEAL waitfanfare special HealPlayerParty + callnative UpdateFollowingPokemon removeobject LOCALID_CAPT_STERN setflag FLAG_HIDE_ROUTE_110_TEAM_AQUA call_if_eq VAR_REGISTER_BIRCH_STATE, 0, SlateportCity_OceanicMuseum_2F_EventScript_ReadyRegisterBirch @@ -437,4 +438,3 @@ SlateportCity_OceanicMuseum_2F_Text_SSAnneReplica: .string "“S.S. ANNE\p" .string "“A replica of the luxury liner that\n" .string "circles the globe.”$" - diff --git a/data/maps/TrainerHill_Entrance/scripts.inc b/data/maps/TrainerHill_Entrance/scripts.inc index 8989883e47..164969618e 100644 --- a/data/maps/TrainerHill_Entrance/scripts.inc +++ b/data/maps/TrainerHill_Entrance/scripts.inc @@ -96,6 +96,7 @@ TrainerHill_Entrance_EventScript_PlayerExitChallenge:: waitmovement 0 setvar VAR_TRAINER_HILL_IS_ACTIVE, 0 special HealPlayerParty + callnative UpdateFollowingPokemon releaseall TrainerHill_Entrance_EventScript_EndExitChallenge:: end @@ -161,6 +162,7 @@ TrainerHill_Entrance_EventScript_ChooseChallenge:: setvar VAR_TRAINER_HILL_IS_ACTIVE, 1 setvar VAR_TEMP_5, 0 special HealPlayerParty + callnative UpdateFollowingPokemon msgbox TrainerHill_Entrance_Text_TimeProgessGetSetGo, MSGBOX_DEFAULT trainerhill_start releaseall diff --git a/data/scripts/pkmn_center_nurse.inc b/data/scripts/pkmn_center_nurse.inc index 64ccdfa77e..925666a275 100644 --- a/data/scripts/pkmn_center_nurse.inc +++ b/data/scripts/pkmn_center_nurse.inc @@ -33,13 +33,14 @@ EventScript_PkmnCenterNurse_IllTakeYourPkmn2:: return EventScript_PkmnCenterNurse_TakeAndHealPkmn:: - applymovement VAR_0x800B, Common_Movement_WalkInPlaceFasterLeft + applymovement VAR_0x800B, Common_Movement_WalkInPlaceFasterLeft @ TODO: Make follower disappear here waitmovement 0 dofieldeffect FLDEFF_POKECENTER_HEAL waitfieldeffect FLDEFF_POKECENTER_HEAL applymovement VAR_0x800B, Common_Movement_WalkInPlaceFasterDown waitmovement 0 special HealPlayerParty + callnative UpdateFollowingPokemon return EventScript_PkmnCenterNurse_CheckTrainerHillAndUnionRoom:: diff --git a/data/scripts/secret_base.inc b/data/scripts/secret_base.inc index d21bb9aab5..6d209b3e40 100644 --- a/data/scripts/secret_base.inc +++ b/data/scripts/secret_base.inc @@ -646,6 +646,7 @@ SecretBase_EventScript_BattleTrainer:: call_if_eq VAR_RESULT, B_OUTCOME_WON, SecretBase_EventScript_WonSecretBaseBattle call_if_eq VAR_RESULT, B_OUTCOME_LOST, SecretBase_EventScript_LostSecretBaseBattle special HealPlayerParty + callnative UpdateFollowingPokemon release end