Restored lighting & shadows code removed from follower branch.

This commit is contained in:
Ariel A 2021-12-22 23:12:20 -05:00
parent e1c56d76ac
commit 11c7eee285
11 changed files with 53 additions and 34 deletions

View file

@ -6,4 +6,5 @@ gFieldCallback
gFieldCallback2
gLocalLinkPlayerId
gFieldLinkPlayerCount
gTimeOfDay
currentTimeBlend

View file

@ -100,6 +100,7 @@ void UpdateFollowingPokemon(void);
void RemoveFollowingPokemon(void);
struct ObjectEvent * GetFollowerObject(void);
u8 GetDirectionToFace(s16, s16, s16, s16);
void UpdateLightSprite(struct Sprite *);
void TrySpawnObjectEvents(s16, s16);
u8 CreateObjectGraphicsSprite(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority);
u8 TrySpawnObjectEvent(u8, u8, u8);

View file

@ -183,7 +183,7 @@ struct ObjectEvent
u32 inShallowFlowingWater:1;
u32 inSandPile:1;
u32 inHotSprings:1;
u32 hasShadow:1;
u32 noShadow:1;
u32 spriteAnimPausedBackup:1;
/*0x03*/ u32 spriteAffineAnimPausedBackup:1;
u32 disableJumpLandingGroundEffect:1;

View file

@ -497,6 +497,7 @@ struct SaveBlock2
extern struct SaveBlock2 *gSaveBlock2Ptr;
extern u8 UpdateSpritePaletteWithTime(u8);
extern bool8 IsAccurateGBA(void);
struct SecretBaseParty
@ -871,7 +872,7 @@ struct MysteryGiftSave
struct WonderCardMetadata cardMetadata;
u16 questionnaireWords[NUM_QUESTIONNAIRE_WORDS];
struct WonderNewsMetadata newsMetadata;
u32 trainerIds[2][5]; // Saved ids for 10 trainers, 5 each for battles and trades
u32 trainerIds[2][5]; // Saved ids for 10 trainers, 5 each for battles and trades
}; // 0x36C 0x3598
// For external event data storage. The majority of these may have never been used.

View file

@ -62,6 +62,7 @@ extern void (*gFieldCallback)(void);
extern bool8 (*gFieldCallback2)(void);
extern u8 gLocalLinkPlayerId;
extern u8 gFieldLinkPlayerCount;
extern u8 gTimeOfDay;
extern struct TimeBlendSettings currentTimeBlend;

View file

@ -69,6 +69,7 @@ void TransferPlttBuffer(void);
u8 UpdatePaletteFade(void);
void ResetPaletteFade(void);
bool8 BeginNormalPaletteFade(u32, s8, u8, u8, u16);
bool8 BeginTimeOfDayPaletteFade(u32, s8, u8, u8, struct BlendSettings *, struct BlendSettings *, u16, u16);
void PaletteStruct_ResetById(u16);
void ResetPaletteFadeControl(void);
void InvertPlttBuffer(u32);

View file

@ -35,6 +35,7 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch;
const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles;
const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle;
const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza;
const struct SpriteTemplate gFieldEffectObjectTemplate_BallLight;
const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = {
[FLDEFFOBJ_SHADOW_S] = &gFieldEffectObjectTemplate_ShadowSmall,

View file

@ -28,6 +28,12 @@ static const struct SpriteFrameImage sPicTable_ShadowExtraLarge[] = {
obj_frame_tiles(gFieldEffectObjectPic_ShadowExtraLarge),
};
const struct SpriteFrameImage gFieldEffectObjectPicTable_BallLight[] = {
obj_frame_tiles(gFieldEffectObjectPic_BallLight),
};
const struct SpriteTemplate gFieldEffectObjectTemplate_BallLight = {TAG_NONE, OBJ_EVENT_PAL_TAG_LIGHT, &gObjectEventBaseOam_32x32, sAnimTable_Inanimate, gFieldEffectObjectPicTable_BallLight, gDummySpriteAffineAnimTable, UpdateLightSprite};
const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowSmall = {
.tileTag = TAG_NONE,
.paletteTag = TAG_WEATHER_START,

View file

@ -281,6 +281,7 @@ const u32 gFieldEffectObjectPic_ShadowSmall[] = INCBIN_U32("graphics/field_effec
const u32 gFieldEffectObjectPic_ShadowMedium[] = INCBIN_U32("graphics/field_effects/pics/shadow_medium.4bpp");
const u32 gFieldEffectObjectPic_ShadowLarge[] = INCBIN_U32("graphics/field_effects/pics/shadow_large.4bpp");
const u32 gFieldEffectObjectPic_ShadowExtraLarge[] = INCBIN_U32("graphics/field_effects/pics/shadow_extra_large.4bpp");
const u32 gFieldEffectObjectPic_BallLight[] = INCBIN_U32("graphics/object_events/pics/misc/light.4bpp");
static const u32 sFiller[0x48] = {};
const u8 gFieldEffectPic_CutGrass[] = INCBIN_U8("graphics/field_effects/pics/cut_grass.4bpp");
const u32 gFieldEffectPic_CutGrass_Copy[] = INCBIN_U32("graphics/field_effects/pics/cut_grass.4bpp");
@ -778,4 +779,5 @@ const u32 gObjectEventPic_RayquazaCutscene[] = INCBIN_U32("graphics/object_event
const u16 gObjectEventPal_HoOh[] = INCBIN_U16("graphics/object_events/palettes/ho_oh.gbapal");
const u16 gObjectEventPal_Lugia[] = INCBIN_U16("graphics/object_events/palettes/lugia.gbapal");
const u16 gObjectEventPaletteLight[] = INCBIN_U16("graphics/object_events/palettes/light.gbapal");
const u16 gObjectEventPaletteEmotes[] = INCBIN_U16("graphics/misc/emotes.gbapal");

View file

@ -448,6 +448,7 @@ const u8 gInitialMovementTypeFacingDirections[] = {
#define OBJ_EVENT_PAL_TAG_RS_BRENDAN 0x1122
#define OBJ_EVENT_PAL_TAG_RS_MAY 0x1123
#define OBJ_EVENT_PAL_TAG_DYNAMIC 0x1124
#define OBJ_EVENT_PAL_TAG_LIGHT 0x8001
#define OBJ_EVENT_PAL_TAG_EMOTES 0x8002
#define OBJ_EVENT_PAL_TAG_NONE 0x11FF
@ -497,6 +498,7 @@ static const struct SpritePalette sObjectEventSpritePalettes[] = {
{gObjectEventPal_RubySapphireBrendan, OBJ_EVENT_PAL_TAG_RS_BRENDAN},
{gObjectEventPal_RubySapphireMay, OBJ_EVENT_PAL_TAG_RS_MAY},
{gObjectEventPal_Npc1, OBJ_EVENT_PAL_TAG_DYNAMIC},
{gObjectEventPaletteLight, OBJ_EVENT_PAL_TAG_LIGHT},
{gObjectEventPaletteEmotes, OBJ_EVENT_PAL_TAG_EMOTES},
{NULL, 0x0000},
};
@ -2054,6 +2056,7 @@ void TrySpawnObjectEvents(s16 cameraX, s16 cameraY)
TrySpawnObjectEventTemplate(template, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, cameraX, cameraY);
}
}
TrySpawnLightSprites(cameraX, cameraY);
}
void RemoveObjectEventsOutsideView(void)
@ -2107,6 +2110,7 @@ void SpawnObjectEventsOnReturnToField(s16 x, s16 y)
SpawnObjectEventOnReturnToField(i, x, y);
}
CreateReflectionEffectSprites();
TrySpawnLightSprites(x, y);
}
static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y)
@ -2170,7 +2174,7 @@ static void ResetObjectEventFldEffData(struct ObjectEvent *objectEvent)
{
objectEvent->singleMovementActive = FALSE;
objectEvent->triggerGroundEffectsOnMove = TRUE;
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
objectEvent->hasReflection = FALSE;
objectEvent->inShortGrass = FALSE;
objectEvent->inShallowFlowingWater = FALSE;
@ -6160,7 +6164,7 @@ bool8 MovementAction_Jump2Down_Step1(struct ObjectEvent *objectEvent, struct Spr
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -6177,7 +6181,7 @@ bool8 MovementAction_Jump2Up_Step1(struct ObjectEvent *objectEvent, struct Sprit
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -6194,7 +6198,7 @@ bool8 MovementAction_Jump2Left_Step1(struct ObjectEvent *objectEvent, struct Spr
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -6211,7 +6215,7 @@ bool8 MovementAction_Jump2Right_Step1(struct ObjectEvent *objectEvent, struct Sp
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -6982,7 +6986,7 @@ bool8 MovementAction_JumpDown_Step1(struct ObjectEvent *objectEvent, struct Spri
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = 0;
objectEvent->noShadow = 0;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -6999,7 +7003,7 @@ bool8 MovementAction_JumpUp_Step1(struct ObjectEvent *objectEvent, struct Sprite
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = 0;
objectEvent->noShadow = 0;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7016,7 +7020,7 @@ bool8 MovementAction_JumpLeft_Step1(struct ObjectEvent *objectEvent, struct Spri
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = 0;
objectEvent->noShadow = 0;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7033,7 +7037,7 @@ bool8 MovementAction_JumpRight_Step1(struct ObjectEvent *objectEvent, struct Spr
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = 0;
objectEvent->noShadow = 0;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7050,7 +7054,7 @@ bool8 MovementAction_JumpInPlaceDown_Step1(struct ObjectEvent *objectEvent, stru
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = 0;
objectEvent->noShadow = 0;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7067,7 +7071,7 @@ bool8 MovementAction_JumpInPlaceUp_Step1(struct ObjectEvent *objectEvent, struct
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = 0;
objectEvent->noShadow = 0;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7084,7 +7088,7 @@ bool8 MovementAction_JumpInPlaceLeft_Step1(struct ObjectEvent *objectEvent, stru
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = 0;
objectEvent->noShadow = 0;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7101,7 +7105,7 @@ bool8 MovementAction_JumpInPlaceRight_Step1(struct ObjectEvent *objectEvent, str
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = 0;
objectEvent->noShadow = 0;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7118,7 +7122,7 @@ bool8 MovementAction_JumpInPlaceDownUp_Step1(struct ObjectEvent *objectEvent, st
{
if (DoJumpInPlaceAnim(objectEvent, sprite))
{
objectEvent->hasShadow = 0;
objectEvent->noShadow = 0;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7135,7 +7139,7 @@ bool8 MovementAction_JumpInPlaceUpDown_Step1(struct ObjectEvent *objectEvent, st
{
if (DoJumpInPlaceAnim(objectEvent, sprite))
{
objectEvent->hasShadow = 0;
objectEvent->noShadow = 0;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7152,7 +7156,7 @@ bool8 MovementAction_JumpInPlaceLeftRight_Step1(struct ObjectEvent *objectEvent,
{
if (DoJumpInPlaceAnim(objectEvent, sprite))
{
objectEvent->hasShadow = 0;
objectEvent->noShadow = 0;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7169,7 +7173,7 @@ bool8 MovementAction_JumpInPlaceRightLeft_Step1(struct ObjectEvent *objectEvent,
{
if (DoJumpInPlaceAnim(objectEvent, sprite))
{
objectEvent->hasShadow = 0;
objectEvent->noShadow = 0;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7614,7 +7618,7 @@ bool8 MovementAction_AcroWheelieHopFaceDown_Step1(struct ObjectEvent *objectEven
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7631,7 +7635,7 @@ bool8 MovementAction_AcroWheelieHopFaceUp_Step1(struct ObjectEvent *objectEvent,
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7648,7 +7652,7 @@ bool8 MovementAction_AcroWheelieHopFaceLeft_Step1(struct ObjectEvent *objectEven
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7665,7 +7669,7 @@ bool8 MovementAction_AcroWheelieHopFaceRight_Step1(struct ObjectEvent *objectEve
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7682,7 +7686,7 @@ bool8 MovementAction_AcroWheelieHopDown_Step1(struct ObjectEvent *objectEvent, s
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7699,7 +7703,7 @@ bool8 MovementAction_AcroWheelieHopUp_Step1(struct ObjectEvent *objectEvent, str
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7716,7 +7720,7 @@ bool8 MovementAction_AcroWheelieHopLeft_Step1(struct ObjectEvent *objectEvent, s
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7733,7 +7737,7 @@ bool8 MovementAction_AcroWheelieHopRight_Step1(struct ObjectEvent *objectEvent,
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7750,7 +7754,7 @@ bool8 MovementAction_AcroWheelieJumpDown_Step1(struct ObjectEvent *objectEvent,
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7767,7 +7771,7 @@ bool8 MovementAction_AcroWheelieJumpUp_Step1(struct ObjectEvent *objectEvent, st
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7784,7 +7788,7 @@ bool8 MovementAction_AcroWheelieJumpLeft_Step1(struct ObjectEvent *objectEvent,
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -7801,7 +7805,7 @@ bool8 MovementAction_AcroWheelieJumpRight_Step1(struct ObjectEvent *objectEvent,
{
if (DoJumpAnim(objectEvent, sprite))
{
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = FALSE;
sprite->sActionFuncId = 2;
return TRUE;
}
@ -9518,9 +9522,9 @@ u32 StartFieldEffectForObjectEvent(u8 fieldEffectId, struct ObjectEvent *objectE
static void DoShadowFieldEffect(struct ObjectEvent *objectEvent)
{
if (!objectEvent->hasShadow)
if (objectEvent->noShadow)
{
objectEvent->hasShadow = 1;
objectEvent->noShadow = FALSE;
StartFieldEffectForObjectEvent(FLDEFF_SHADOW, objectEvent);
}
}

View file

@ -3270,7 +3270,7 @@ static void FlyOutFieldEffect_FlyOffWithBird(struct Task *task)
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
ObjectEventClearHeldMovementIfActive(objectEvent);
objectEvent->inanimate = FALSE;
objectEvent->hasShadow = FALSE;
objectEvent->noShadow = TRUE; // TODO: Make shadow smaller instead of disappearing completely ?
SetFlyBirdPlayerSpriteId(task->tBirdSpriteId, objectEvent->spriteId);
CameraObjectReset2();
task->tState++;
@ -3490,6 +3490,7 @@ static void FlyInFieldEffect_BirdSwoopDown(struct Task *task)
ObjectEventTurn(objectEvent, DIR_WEST);
StartSpriteAnim(&gSprites[objectEvent->spriteId], ANIM_GET_ON_OFF_POKEMON_WEST);
objectEvent->invisible = FALSE;
objectEvent->noShadow = TRUE;
task->tBirdSpriteId = CreateFlyBirdSprite();
StartFlyBirdSwoopDown(task->tBirdSpriteId);
SetFlyBirdPlayerSpriteId(task->tBirdSpriteId, objectEvent->spriteId);