Expanded graphicsId field.
This commit is contained in:
parent
a59564fc1e
commit
72e723df65
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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*/
|
||||
};
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user