Added info on how to still update daily events even if the battery is dead.

voloved 2023-04-01 10:55:11 -04:00
parent 50ce8e8198
commit 8fff4da9ee
1 changed files with 48 additions and 1 deletions

@ -29,3 +29,50 @@ static void Task_MainMenuCheckBattery(u8 taskId)
} }
} }
``` ```
## Extra: Update Daily Events and Berries Still Grow When Playing without a RTC
**Goal:** Make it so we grow the berries and update daily events by a set amountevery time we load the game if there is an RTC failure.
In `clock.c` add the folowing function at the bottom.:
```diff
void FastForwardTime(s16 daysToUpdateDay, s16 hoursToGrowBerries){
// Runs the UpdatePerDay function as if daysToUpdateDay days have passed and grows the berries by hoursToGrowBerries
s16 daysBerry = hoursToGrowBerries / 24;
s8 hoursBerry = hoursToGrowBerries % 24;
struct Time localTimeOffset;
localTimeOffset.days = *GetVarPointer(VAR_DAYS) + daysToUpdateDay;
UpdatePerDay(&localTimeOffset);
localTimeOffset = gSaveBlock2Ptr->lastBerryTreeUpdate;
localTimeOffset.days += daysBerry;
localTimeOffset.hours += hoursBerry;
UpdatePerMinute(&localTimeOffset);
}
```
In `clock.h`:
```diff
void DoTimeBasedEvents(void);
+void FastForwardTime(s16, s16);
```
Finally, back in `main_menu.c`:
```diff
static void Task_MainMenuCheckBattery(u8 taskId)
{
if (!gPaletteFade.active)
{
SetGpuReg(REG_OFFSET_WIN0H, 0);
SetGpuReg(REG_OFFSET_WIN0V, 0);
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | WININ_WIN0_OBJ);
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_BG0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
SetGpuReg(REG_OFFSET_BLDY, 7);
+ if (RtcGetErrorStatus() & RTC_ERR_FLAG_MASK)
+ FastForwardTime(2, 4);
gTasks[taskId].func = Task_DisplayMainMenu;
}
}
```
In the example above, we'll grow the berries by 4 hours and update daily events as if 2 days have passed every time we load the game.