From 72e723df6589d11a2feb39b8770b4a755bfff5ff Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Sat, 7 Jan 2023 17:54:21 -0500 Subject: [PATCH] Expanded graphicsId field. --- asm/macros/map.inc | 6 +- include/constants/event_objects.h | 4 ++ include/global.fieldmap.h | 20 ++---- src/event_object_movement.c | 114 ++++++++++++++++-------------- src/field_player_avatar.c | 4 +- src/load_save.c | 2 +- src/shop.c | 2 +- 7 files changed, 78 insertions(+), 74 deletions(-) diff --git a/asm/macros/map.inc b/asm/macros/map.inc index 662257e416..c588962467 100644 --- a/asm/macros/map.inc +++ b/asm/macros/map.inc @@ -21,10 +21,8 @@ @ Defines an object event template for map data. Mirrors the struct layout of ObjectEventTemplate in include/global.fieldmap.h .macro object_event index:req, gfx:req, inConnection:req, x:req, y:req, elevation:req, movement_type:req, x_radius:req, y_radius:req, trainer_type:req, sight_radius_tree_etc:req, script:req, event_flag:req - .byte \index - .byte \gfx - .byte \inConnection - .space 1 @ Padding + .byte \index, \inConnection + .2byte \gfx .2byte \x, \y .byte \elevation .byte \movement_type diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index 1d3d7a7013..442d096cc0 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -276,6 +276,10 @@ #define OBJ_EVENT_GFX_VAR_E (OBJ_EVENT_GFX_VARS + 0xE) #define OBJ_EVENT_GFX_VAR_F (OBJ_EVENT_GFX_VARS + 0xF) // 255 +#define OBJ_EVENT_GFX_MON_BASE 0x200 // 512 + +#define OW_SPECIES(x) (x->graphicsId - OBJ_EVENT_GFX_MON_BASE) + #define SHADOW_SIZE_S 0 #define SHADOW_SIZE_M 1 #define SHADOW_SIZE_L 2 diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 601656f894..9b5eb89003 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -66,8 +66,8 @@ struct BackupMapLayout struct ObjectEventTemplate { /*0x00*/ u8 localId; - /*0x01*/ u8 graphicsId; - /*0x02*/ u8 inConnection; // Leftover from FRLG + /*0x02*/ u16 graphicsId; + // /*0x02*/ u8 inConnection; // Leftover from FRLG /*0x04*/ s16 x; /*0x06*/ s16 y; /*0x08*/ u8 elevation; @@ -192,8 +192,9 @@ struct ObjectEvent u32 disableJumpLandingGroundEffect:1; u32 fixedPriority:1; u32 hideReflection:1; - /*0x04*/ u8 spriteId; - /*0x05*/ u8 graphicsId; + u32 shiny:1; // OW mon shininess + /*0x04*/ u16 graphicsId:11; // 11 bits; 2048 entries + /*0x05*/ u16 form:5; /*0x06*/ u8 movementType; /*0x07*/ u8 trainerType; /*0x08*/ u8 localId; @@ -216,15 +217,8 @@ struct ObjectEvent /*0x1F*/ u8 previousMetatileBehavior; /*0x20*/ u8 previousMovementDirection; /*0x21*/ u8 directionSequenceIndex; - /*0x22*/ union __attribute__((packed)) { - u8 playerCopyableMovement; // COPY_MOVE_* - struct __attribute__((packed)) { - u16 species:10; // 11 bits; 1024 species - u16 form:5; // Used for Deoxys, Unown, etc - u16 shiny:1; - } mon; - u16 asU16; - } extra; + /*0x22*/ u8 playerCopyableMovement; // COPY_MOVE_* + /*0x23*/ u8 spriteId; /*size = 0x24*/ }; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 265918d653..cf3cc5e719 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1399,8 +1399,9 @@ 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); + // zero potential species info + objectEvent->graphicsId = objectEvent->form = objectEvent->shiny = 0; } void RemoveObjectEventByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) @@ -1497,6 +1498,9 @@ TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, struct SpriteFrameImage spriteFrameImage; const struct ObjectEventGraphicsInfo *graphicsInfo; const struct SubspriteTable *subspriteTables = NULL; + u16 species; + u8 form; + bool8 shiny; graphicsInfo = GetObjectEventGraphicsInfo(objectEventTemplate->graphicsId); MakeSpriteTemplateFromObjectEventTemplate(objectEventTemplate, &spriteTemplate, &subspriteTables); @@ -1510,26 +1514,25 @@ TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, if (subspriteTables) SetSubspriteTables(&gSprites[gObjectEvents[objectEventId].spriteId], subspriteTables); - // Set species based on script header - if (objectEventTemplate->graphicsId == OBJ_EVENT_GFX_OW_MON && objectEventTemplate->script) { + // Set form & shininess based on script header + if (objectEventTemplate->graphicsId >= OBJ_EVENT_GFX_MON_BASE && objectEventTemplate->script) { const u8 *script = objectEventTemplate->script; if (script[0] == 0x7d) { // bufferspeciesname - u16 species; - u8 form; - bool8 shiny; - gObjectEvents[objectEventId].extra.asU16 = script[2] | script[3] << 8; - species = gObjectEvents[objectEventId].extra.mon.species; - form = gObjectEvents[objectEventId].extra.mon.form; - shiny = gObjectEvents[objectEventId].extra.mon.shiny; + species = script[2] | script[3] << 8; + form = (species >> 10) & 0x1F; + shiny = species >> 15; + gObjectEvents[objectEventId].form = form; + gObjectEvents[objectEventId].shiny = shiny; + species = OW_SPECIES(objectEventTemplate); FollowerSetGraphics(&gObjectEvents[objectEventId], species, form, shiny); } // Set runtime species based on VAR_TEMP_4, if template has a dynamic graphics ID - } else if (objectEventTemplate->graphicsId >= OBJ_EVENT_GFX_VARS && VarGetObjectEventGraphicsId(objectEventTemplate->graphicsId - OBJ_EVENT_GFX_VARS) == OBJ_EVENT_GFX_OW_MON) { - gObjectEvents[objectEventId].extra.asU16 = VarGet(VAR_TEMP_4); - FollowerSetGraphics(&gObjectEvents[objectEventId], - gObjectEvents[objectEventId].extra.mon.species, - gObjectEvents[objectEventId].extra.mon.form, - gObjectEvents[objectEventId].extra.mon.form); + } else if (objectEventTemplate->graphicsId >= OBJ_EVENT_GFX_VARS && VarGetObjectEventGraphicsId(objectEventTemplate->graphicsId - OBJ_EVENT_GFX_VARS) >= OBJ_EVENT_GFX_MON_BASE) { + species = VarGet(VAR_TEMP_4); + gObjectEvents[objectEventId].form = form = (species >> 10) & 0x1F; + gObjectEvents[objectEventId].shiny = shiny = species >> 15; + species = OW_SPECIES(objectEventTemplate); + FollowerSetGraphics(&gObjectEvents[objectEventId], species, form, shiny); } return objectEventId; @@ -1552,7 +1555,7 @@ u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 l y -= MAP_OFFSET; objectEventTemplate.localId = localId; objectEventTemplate.graphicsId = graphicsId; - objectEventTemplate.inConnection = 0; + // objectEventTemplate.inConnection = 0; objectEventTemplate.x = x; objectEventTemplate.y = y; objectEventTemplate.elevation = elevation; @@ -1614,7 +1617,7 @@ u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *), u8 paletteNum; spriteTemplate = Alloc(sizeof(struct SpriteTemplate)); - if (graphicsId == OBJ_EVENT_GFX_OW_MON && GetFollowerInfo(&species, &form, &shiny)) { + if (graphicsId >= OBJ_EVENT_GFX_MON_BASE && GetFollowerInfo(&species, &form, &shiny)) { const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, form); spriteTemplate->tileTag = graphicsInfo->tileTag; spriteTemplate->paletteTag = graphicsInfo->paletteTag; @@ -1748,12 +1751,11 @@ static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool8 shiny) { // Set graphics & sprite for a follower object event by species & shininess. static void FollowerSetGraphics(struct ObjectEvent *objEvent, u16 species, u8 form, bool8 shiny) { const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, form); - objEvent->graphicsId = OBJ_EVENT_GFX_OW_MON; + objEvent->graphicsId = OBJ_EVENT_GFX_MON_BASE + species; ObjectEventSetGraphics(objEvent, graphicsInfo); - objEvent->graphicsId = OBJ_EVENT_GFX_OW_MON; - objEvent->extra.mon.species = species; - objEvent->extra.mon.form = form; - objEvent->extra.mon.shiny = shiny; + objEvent->graphicsId = OBJ_EVENT_GFX_MON_BASE + species; + objEvent->form = form; + objEvent->shiny = shiny; if (graphicsInfo->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) { // Use palette from species palette table struct Sprite *sprite = &gSprites[objEvent->spriteId]; // Free palette if otherwise unused @@ -1768,9 +1770,9 @@ static void FollowerSetGraphics(struct ObjectEvent *objEvent, u16 species, u8 fo // Like FollowerSetGraphics, but does not reposition sprite; intended to be used for mid-movement form changes, etc. // TODO: Reposition sprite if size changes static void RefreshFollowerGraphics(struct ObjectEvent *objEvent) { - u16 species = objEvent->extra.mon.species; - u8 form = objEvent->extra.mon.form; - u8 shiny = objEvent->extra.mon.shiny; + u16 species = OW_SPECIES(objEvent); + u8 form = objEvent->form; + u8 shiny = objEvent->shiny; const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, form); struct Sprite *sprite = &gSprites[objEvent->spriteId]; u8 i = FindObjectEventPaletteIndexByTag(graphicsInfo->paletteTag); @@ -1844,11 +1846,11 @@ void UpdateFollowingPokemon(void) { // Update following pokemon if any bool8 shiny; u8 form; // Avoid spawning large (64x64) follower pokemon inside buildings - if (GetFollowerInfo(&species, &form, &shiny) && !(gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, 0)->height == 64) && !FlagGet(FLAG_TEMP_HIDE_FOLLOWER)) { + if (GetFollowerInfo(&species, &form, &shiny) && !(gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, 0)->height == 64) && !FlagGet(FLAG_TEMP_HIDE_FOLLOWER) && FALSE) { // TODO if (objEvent == NULL) { // Spawn follower struct ObjectEventTemplate template = { .localId = OBJ_EVENT_ID_FOLLOWER, - .graphicsId = OBJ_EVENT_GFX_OW_MON, + .graphicsId = OBJ_EVENT_GFX_MON_BASE + species, .flagId = 0, .x = gSaveBlock1Ptr->pos.x, .y = gSaveBlock1Ptr->pos.y, @@ -1861,15 +1863,12 @@ void UpdateFollowingPokemon(void) { // Update following pokemon if any } sprite = &gSprites[objEvent->spriteId]; // Follower appearance changed; move to player and set invisible - if (species != objEvent->extra.mon.species || shiny != objEvent->extra.mon.shiny || form != objEvent->extra.mon.form) { + if (species != OW_SPECIES(objEvent) || shiny != objEvent->shiny || form != objEvent->form) { MoveObjectEventToMapCoords(objEvent, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y); objEvent->invisible = TRUE; } FollowerSetGraphics(objEvent, species, form, shiny); sprite->data[6] = 0; // set animation data - objEvent->extra.mon.species = species; - objEvent->extra.mon.shiny = shiny; - objEvent->extra.mon.form = form; } else { RemoveFollowingPokemon(); } @@ -2285,8 +2284,8 @@ static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y) sprite->coordOffsetEnabled = TRUE; sprite->sObjEventId = objectEventId; objectEvent->spriteId = i; - if (objectEvent->graphicsId == OBJ_EVENT_GFX_OW_MON) { // Set pokemon graphics - FollowerSetGraphics(objectEvent, objectEvent->extra.mon.species, objectEvent->extra.mon.form, objectEvent->extra.mon.shiny); + if (objectEvent->graphicsId >= OBJ_EVENT_GFX_MON_BASE) { // Set pokemon graphics + FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), objectEvent->form, objectEvent->shiny); } if (!objectEvent->inanimate && objectEvent->movementType != MOVEMENT_TYPE_PLAYER) StartSpriteAnim(sprite, GetFaceDirectionAnimNum(objectEvent->facingDirection)); @@ -2445,15 +2444,17 @@ const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId) { u8 bard; - if (graphicsId >= OBJ_EVENT_GFX_VARS) + if (graphicsId >= OBJ_EVENT_GFX_VARS && graphicsId <= OBJ_EVENT_GFX_VAR_F) graphicsId = VarGetObjectEventGraphicsId(graphicsId - OBJ_EVENT_GFX_VARS); - if (graphicsId == OBJ_EVENT_GFX_BARD) - { + if (graphicsId == OBJ_EVENT_GFX_BARD) { bard = GetCurrentMauvilleOldMan(); return gMauvilleOldManGraphicsInfoPointers[bard]; } + if (graphicsId >= OBJ_EVENT_GFX_MON_BASE) + return SpeciesToGraphicsInfo(graphicsId - OBJ_EVENT_GFX_MON_BASE, 0); + if (graphicsId >= NUM_OBJ_EVENT_GFX) graphicsId = OBJ_EVENT_GFX_NINJA_BOY; @@ -4893,12 +4894,12 @@ static bool8 EndFollowerTransformEffect(struct ObjectEvent *objectEvent, struct static bool8 TryStartFollowerTransformEffect(struct ObjectEvent *objectEvent, struct Sprite *sprite) { u32 multi; - if (objectEvent->extra.mon.species == SPECIES_CASTFORM && objectEvent->extra.mon.form != (multi = GetOverworldCastformForm())) { + if (OW_SPECIES(objectEvent) == SPECIES_CASTFORM && objectEvent->form != (multi = GetOverworldCastformForm())) { sprite->data[7] = TRANSFORM_TYPE_PERMANENT << 8; - objectEvent->extra.mon.form = multi; + objectEvent->form = multi; return TRUE; } else if ((gRngValue >> 16) < 18 && GetLocalWildMon(FALSE) - && (objectEvent->extra.mon.species == SPECIES_MEW || objectEvent->extra.mon.species == SPECIES_DITTO)) { + && (OW_SPECIES(objectEvent) == SPECIES_MEW || OW_SPECIES(objectEvent) == SPECIES_DITTO)) { sprite->data[7] = TRANSFORM_TYPE_RANDOM_WILD << 8; PlaySE(SE_M_MINIMIZE); return TRUE; @@ -4910,7 +4911,7 @@ static bool8 UpdateFollowerTransformEffect(struct ObjectEvent *objectEvent, stru u8 type = sprite->data[7] >> 8; u8 frames = sprite->data[7] & 0xFF; u8 stretch; - u32 multi; + u32 multi, multi2; if (!type) return TryStartFollowerTransformEffect(objectEvent, sprite); sprite->oam.mosaic = TRUE; @@ -4928,15 +4929,18 @@ static bool8 UpdateFollowerTransformEffect(struct ObjectEvent *objectEvent, stru RefreshFollowerGraphics(objectEvent); break; case TRANSFORM_TYPE_RANDOM_WILD: - multi = objectEvent->extra.asU16; - objectEvent->extra.mon.species = GetLocalWildMon(FALSE); - if (!objectEvent->extra.mon.species) { - objectEvent->extra.asU16 = multi; + multi = objectEvent->graphicsId; + objectEvent->graphicsId = GetLocalWildMon(FALSE); + if (!objectEvent->graphicsId) { + objectEvent->graphicsId = multi; break; } - objectEvent->extra.mon.form = 0; + objectEvent->graphicsId += OBJ_EVENT_GFX_MON_BASE; + multi2 = objectEvent->form; + objectEvent->form = 0; RefreshFollowerGraphics(objectEvent); - objectEvent->extra.asU16 = multi; + objectEvent->graphicsId = multi; + objectEvent->form = multi2; break; } } @@ -5529,7 +5533,7 @@ void SetTrainerMovementType(struct ObjectEvent *objectEvent, u8 movementType) { objectEvent->movementType = movementType; objectEvent->directionSequenceIndex = 0; - objectEvent->extra.playerCopyableMovement = 0; + objectEvent->playerCopyableMovement = 0; gSprites[objectEvent->spriteId].callback = sMovementTypeCallbacks[movementType]; gSprites[objectEvent->spriteId].sTypeFuncId = 0; } @@ -6650,6 +6654,7 @@ static u8 LoadWhiteFlashPalette(struct ObjectEvent *objectEvent, struct Sprite * bool8 MovementAction_ExitPokeball_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { u8 direction = gObjectEvents[gPlayerAvatar.objectEventId].facingDirection; + u16 graphicsId = objectEvent->graphicsId; objectEvent->invisible = FALSE; if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH)) { // If player is dashing, the pokemon must come out faster StartSpriteAnimInDirection(objectEvent, sprite, direction, GetMoveDirectionFastestAnimNum(direction) + 4); @@ -6662,6 +6667,7 @@ bool8 MovementAction_ExitPokeball_Step0(struct ObjectEvent *objectEvent, struct } sprite->data[6] |= (direction == DIR_EAST ? 1 : 0) << 4; ObjectEventSetGraphicsId(objectEvent, OBJ_EVENT_GFX_ANIMATED_BALL); + objectEvent->graphicsId = graphicsId; objectEvent->inanimate = FALSE; return MovementAction_ExitPokeball_Step1(objectEvent, sprite); } @@ -6722,7 +6728,7 @@ bool8 MovementAction_ExitPokeball_Step1(struct ObjectEvent *objectEvent, struct return TRUE; // Set graphics, palette, and affine animation } else if ((duration == 0 && sprite->data[3] == 3) || (duration == 1 && sprite->data[3] == 7)) { - FollowerSetGraphics(objectEvent, objectEvent->extra.mon.species, objectEvent->extra.mon.form, objectEvent->extra.mon.shiny); + FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), objectEvent->form, objectEvent->shiny); LoadWhiteFlashPalette(objectEvent, sprite); // Initialize affine animation sprite->affineAnims = sAffineAnims_PokeballFollower; @@ -6734,7 +6740,7 @@ bool8 MovementAction_ExitPokeball_Step1(struct ObjectEvent *objectEvent, struct sprite->affineAnimEnded = TRUE; FreeSpriteOamMatrix(sprite); sprite->oam.affineMode = ST_OAM_AFFINE_OFF; - FollowerSetGraphics(objectEvent, objectEvent->extra.mon.species, objectEvent->extra.mon.form, objectEvent->extra.mon.shiny); + FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), objectEvent->form, objectEvent->shiny); } return FALSE; } @@ -6750,6 +6756,7 @@ bool8 MovementAction_EnterPokeball_Step0(struct ObjectEvent *objectEvent, struct bool8 MovementAction_EnterPokeball_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + u16 graphicsId = objectEvent->graphicsId; sprite->data[3]--; if (sprite->data[3] == 0) { sprite->data[2] = 2; @@ -6765,6 +6772,7 @@ bool8 MovementAction_EnterPokeball_Step1(struct ObjectEvent *objectEvent, struct FreeSpriteOamMatrix(sprite); sprite->oam.affineMode = ST_OAM_AFFINE_OFF; ObjectEventSetGraphicsId(objectEvent, OBJ_EVENT_GFX_ANIMATED_BALL); + objectEvent->graphicsId = graphicsId; objectEvent->inanimate = FALSE; } return FALSE; @@ -6772,7 +6780,7 @@ bool8 MovementAction_EnterPokeball_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_EnterPokeball_Step2(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - FollowerSetGraphics(objectEvent, objectEvent->extra.mon.species, objectEvent->extra.mon.form, objectEvent->extra.mon.shiny); + FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), objectEvent->form, objectEvent->shiny); objectEvent->invisible = TRUE; sprite->data[1] = 0; sprite->data[6] = 0; @@ -8923,13 +8931,13 @@ static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, st void GroundEffect_SandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite) { - const struct ObjectEventGraphicsInfo *info = objEvent->graphicsId == OBJ_EVENT_GFX_OW_MON ? SpeciesToGraphicsInfo(objEvent->extra.mon.species, 0) : GetObjectEventGraphicsInfo(objEvent->graphicsId); + const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId); sGroundEffectTracksFuncs[objEvent->invisible ? TRACKS_NONE : info->tracks](objEvent, sprite, FALSE); } void GroundEffect_DeepSandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite) { - const struct ObjectEventGraphicsInfo *info = objEvent->graphicsId == OBJ_EVENT_GFX_OW_MON ? SpeciesToGraphicsInfo(objEvent->extra.mon.species, 0) : GetObjectEventGraphicsInfo(objEvent->graphicsId); + const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId); sGroundEffectTracksFuncs[objEvent->invisible ? TRACKS_NONE : info->tracks](objEvent, sprite, TRUE); } diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 0afe31ecbf..5f4573c533 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -929,12 +929,12 @@ static bool8 PlayerCheckIfAnimFinishedOrInactive(void) static void PlayerSetCopyableMovement(u8 movement) { - gObjectEvents[gPlayerAvatar.objectEventId].extra.playerCopyableMovement = movement; + gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement = movement; } u8 PlayerGetCopyableMovement(void) { - return gObjectEvents[gPlayerAvatar.objectEventId].extra.playerCopyableMovement; + return gObjectEvents[gPlayerAvatar.objectEventId].playerCopyableMovement; } static void PlayerForceSetHeldMovement(u8 movementActionId) diff --git a/src/load_save.c b/src/load_save.c index 9c10b4b10e..da6997de01 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -199,7 +199,7 @@ void LoadObjectEvents(void) // Try to restore saved inactive follower if (gObjectEvents[i].localId == OBJ_EVENT_ID_FOLLOWER && !gObjectEvents[i].active && - gObjectEvents[i].extra.asU16) + gObjectEvents[i].graphicsId >= OBJ_EVENT_GFX_MON_BASE) gObjectEvents[i].active = TRUE; } } diff --git a/src/shop.c b/src/shop.c index d246fea6f0..3fcebd319d 100644 --- a/src/shop.c +++ b/src/shop.c @@ -867,7 +867,7 @@ static void BuyMenuCollectObjectEventData(void) u8 objEventId = GetObjectEventIdByXY(facingX - 4 + x, facingY - 2 + y); // skip if invalid or an overworld pokemon that is not following the player - if (objEventId != OBJECT_EVENTS_COUNT && !(gObjectEvents[objEventId].active && gObjectEvents[objEventId].graphicsId == OBJ_EVENT_GFX_OW_MON && gObjectEvents[objEventId].localId != OBJ_EVENT_ID_FOLLOWER)) + if (objEventId != OBJECT_EVENTS_COUNT && !(gObjectEvents[objEventId].active && gObjectEvents[objEventId].graphicsId >= OBJ_EVENT_GFX_MON_BASE && gObjectEvents[objEventId].localId != OBJ_EVENT_ID_FOLLOWER)) { sShopData->viewportObjects[numObjects][OBJ_EVENT_ID] = objEventId; sShopData->viewportObjects[numObjects][X_COORD] = x;