From c46f12ed70b5919d58fffbf5cd83240b96dd7a1e Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Tue, 18 Oct 2022 00:10:10 -0400 Subject: [PATCH 1/3] Made follower pokemon inactive on vanilla saves. --- src/event_object_movement.c | 1 + src/load_save.c | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 960755c841..9468ecd372 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1386,6 +1386,7 @@ static bool8 GetAvailableObjectEventId(u16 localId, u8 mapNum, u8 mapGroup, u8 * static void RemoveObjectEvent(struct ObjectEvent *objectEvent) { objectEvent->active = FALSE; + objectEvent->extra.asU16 = 0; // zero potential species info RemoveObjectEventInternal(objectEvent); } diff --git a/src/load_save.c b/src/load_save.c index 44e08b5e9c..9c10b4b10e 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -13,6 +13,7 @@ #include "gba/flash_internal.h" #include "decoration_inventory.h" #include "agb_flash.h" +#include "constants/event_objects.h" static void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey); @@ -181,16 +182,26 @@ void SaveObjectEvents(void) { int i; - for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { gSaveBlock1Ptr->objectEvents[i] = gObjectEvents[i]; + // To avoid crash on vanilla, save follower as inactive + if (gObjectEvents[i].localId == OBJ_EVENT_ID_FOLLOWER) + gSaveBlock1Ptr->objectEvents[i].active = FALSE; + } } void LoadObjectEvents(void) { int i; - for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { gObjectEvents[i] = gSaveBlock1Ptr->objectEvents[i]; + // Try to restore saved inactive follower + if (gObjectEvents[i].localId == OBJ_EVENT_ID_FOLLOWER && + !gObjectEvents[i].active && + gObjectEvents[i].extra.asU16) + gObjectEvents[i].active = TRUE; + } } void CopyPartyAndObjectsToSave(void) From 5d9e9d3e0e3f6dc43678020f655889af50d2b2c4 Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Sat, 22 Oct 2022 17:57:18 -0400 Subject: [PATCH 2/3] Fixed some follower movements. --- data/scripts/follower.inc | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/data/scripts/follower.inc b/data/scripts/follower.inc index 77e2da5cb4..3a81e6fabf 100644 --- a/data/scripts/follower.inc +++ b/data/scripts/follower.inc @@ -376,26 +376,14 @@ FollowerDance: lock_facing_direction jump_in_place_up unlock_facing_direction - walk_in_place_faster_up - walk_in_place_faster_left - walk_in_place_faster_down - walk_in_place_faster_right - walk_in_place_faster_up - walk_in_place_faster_left - walk_in_place_faster_down - walk_in_place_faster_right - walk_in_place_faster_up - walk_in_place_faster_left - walk_in_place_faster_down - walk_in_place_faster_right - walk_in_place_faster_up - walk_in_place_faster_left - walk_in_place_faster_down - walk_in_place_faster_right - walk_in_place_faster_up - walk_in_place_faster_left - walk_in_place_faster_down - walk_in_place_faster_right + walk_in_place_fast_up + walk_in_place_fast_left + walk_in_place_fast_down + walk_in_place_fast_right + walk_in_place_fast_up + walk_in_place_fast_left + walk_in_place_fast_down + walk_in_place_fast_right jump_in_place_up jump_in_place_down jump_in_place_up From 70d95eed695541520c9a79478f49ffe86e806035 Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Thu, 27 Oct 2022 23:42:33 -0400 Subject: [PATCH 3/3] Fixed Mirage Tower falling fossil palette. --- src/mirage_tower.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mirage_tower.c b/src/mirage_tower.c index 37096619d3..6f6a8e8c15 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -4,6 +4,7 @@ #include "event_data.h" #include "event_object_movement.h" #include "field_camera.h" +#include "field_effect.h" #include "fieldmap.h" #include "gpu_regs.h" #include "menu.h" @@ -150,10 +151,13 @@ static const union AnimCmd *const sAnims_FallingFossil[] = sAnim_FallingFossil, }; +// Duplicate of event_object_movement +#define OBJ_EVENT_PAL_TAG_NPC_1 0x1103 + static const struct SpriteTemplate sSpriteTemplate_FallingFossil = { .tileTag = TAG_NONE, - .paletteTag = TAG_NONE, + .paletteTag = OBJ_EVENT_PAL_TAG_NPC_1, .oam = &sOamData_FallingFossil, .anims = sAnims_FallingFossil, .images = NULL, @@ -689,6 +693,7 @@ static void Task_FossilFallAndSink(u8 taskId) { struct SpriteTemplate fossilTemplate = sSpriteTemplate_FallingFossil; fossilTemplate.images = sFallingFossil->frameImage; + LoadObjectEventPalette(sSpriteTemplate_FallingFossil.paletteTag); sFallingFossil->spriteId = CreateSprite(&fossilTemplate, 128, -16, 1); gSprites[sFallingFossil->spriteId].centerToCornerVecX = 0; gSprites[sFallingFossil->spriteId].data[0] = gSprites[sFallingFossil->spriteId].x; @@ -714,6 +719,9 @@ static void Task_FossilFallAndSink(u8 taskId) // Wait for fossil to finish falling / disintegrating if (gSprites[sFallingFossil->spriteId].callback != SpriteCallbackDummy) return; + gSprites[sFallingFossil->spriteId].inUse = FALSE; + FieldEffectFreePaletteIfUnused(gSprites[sFallingFossil->spriteId].oam.paletteNum); + gSprites[sFallingFossil->spriteId].inUse = TRUE; DestroySprite(&gSprites[sFallingFossil->spriteId]); FREE_AND_SET_NULL(sFallingFossil->disintegrateRand);; FREE_AND_SET_NULL(sFallingFossil->frameImage);