From 1a8fe435e7deabf06029c8e50201136518e3af73 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sat, 12 Aug 2017 01:26:29 -0400 Subject: split out src/ directory into categorized subdirectories. --- src/engine/clock.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/engine/clock.c (limited to 'src/engine/clock.c') diff --git a/src/engine/clock.c b/src/engine/clock.c new file mode 100644 index 000000000..1f2aac9fd --- /dev/null +++ b/src/engine/clock.c @@ -0,0 +1,90 @@ +#include "global.h" +#include "clock.h" +#include "berry.h" +#include "dewford_trend.h" +#include "event_data.h" +#include "field_specials.h" +#include "field_weather.h" +#include "lottery_corner.h" +#include "main.h" +#include "rom4.h" +#include "rtc.h" +#include "time_events.h" +#include "tv.h" +#include "wallclock.h" + +static void InitTimeBasedEvents(void); +static void UpdatePerDay(struct Time *time); +static void UpdatePerMinute(struct Time *time); +static void ReturnFromStartWallClock(void); + +static void InitTimeBasedEvents(void) +{ + FlagSet(SYS_CLOCK_SET); + RtcCalcLocalTime(); + gSaveBlock2.lastBerryTreeUpdate = gLocalTime; + VarSet(VAR_DAYS, gLocalTime.days); +} + +void DoTimeBasedEvents(void) +{ + if (FlagGet(SYS_CLOCK_SET)) + { + RtcCalcLocalTime(); + UpdatePerDay(&gLocalTime); + UpdatePerMinute(&gLocalTime); + } +} + +static void UpdatePerDay(struct Time *time) +{ + u16 *varPtr = GetVarPointer(VAR_DAYS); + int days = *varPtr; + u16 newDays; + + if (days != time->days && days <= time->days) + { + newDays = time->days - days; + ClearUpperFlags(); + UpdateDewfordTrendPerDay(newDays); + UpdateTVShowsPerDay(newDays); + UpdateWeatherPerDay(newDays); + UpdatePartyPokerusTime(newDays); + UpdateMirageRnd(newDays); + UpdateBirchState(newDays); + SetShoalItemFlag(newDays); + SetRandomLotteryNumber(newDays); + *varPtr = time->days; + } +} + +static void UpdatePerMinute(struct Time *time) +{ + struct Time newTime; + s32 minutes; + + CalcTimeDifference(&newTime, &gSaveBlock2.lastBerryTreeUpdate, time); + minutes = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes; + + // there's no way to get the correct assembly other than with this nested if check. so dumb. + if (minutes != 0) + { + if (minutes >= 0) + { + BerryTreeTimeUpdate(minutes); + gSaveBlock2.lastBerryTreeUpdate = *time; + } + } +} + +static void ReturnFromStartWallClock(void) +{ + InitTimeBasedEvents(); + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); +} + +void StartWallClock(void) +{ + SetMainCallback2(CB2_StartWallClock); + gMain.savedCallback = ReturnFromStartWallClock; +} -- cgit v1.2.3 From b4f9d6d92ea3bf2ce0227324e85311aaa0f828f0 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 23 Oct 2017 19:09:35 -0400 Subject: document berry.c. --- src/engine/clock.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'src/engine/clock.c') diff --git a/src/engine/clock.c b/src/engine/clock.c index 9635514d2..12b82018d 100644 --- a/src/engine/clock.c +++ b/src/engine/clock.c @@ -61,19 +61,18 @@ static void UpdatePerDay(struct Time *time) static void UpdatePerMinute(struct Time *time) { struct Time newTime; - s32 minutes; + s32 totalMinutes; CalcTimeDifference(&newTime, &gSaveBlock2.lastBerryTreeUpdate, time); - minutes = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes; + totalMinutes = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes; - // there's no way to get the correct assembly other than with this nested if check. so dumb. - if (minutes != 0) + if (totalMinutes == 0) // do not do the update for the first minute. + return; + + if (totalMinutes > -1) // do not perform an update on invalid totalMinutes. { - if (minutes >= 0) - { - BerryTreeTimeUpdate(minutes); - gSaveBlock2.lastBerryTreeUpdate = *time; - } + BerryTreeTimeUpdate(totalMinutes); + gSaveBlock2.lastBerryTreeUpdate = *time; } } -- cgit v1.2.3 From e28049651fb7f9f5aa6cbb70961d18e54f9e1721 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Mon, 23 Oct 2017 20:13:31 -0400 Subject: fix bad label --- src/engine/clock.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/engine/clock.c') diff --git a/src/engine/clock.c b/src/engine/clock.c index 12b82018d..cb8af64a8 100644 --- a/src/engine/clock.c +++ b/src/engine/clock.c @@ -61,17 +61,17 @@ static void UpdatePerDay(struct Time *time) static void UpdatePerMinute(struct Time *time) { struct Time newTime; - s32 totalMinutes; + s32 minutesPassed; CalcTimeDifference(&newTime, &gSaveBlock2.lastBerryTreeUpdate, time); - totalMinutes = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes; + minutesPassed = 1440 * newTime.days + 60 * newTime.hours + newTime.minutes; - if (totalMinutes == 0) // do not do the update for the first minute. + if (minutesPassed == 0) // do not do the update for the first minute. return; - if (totalMinutes > -1) // do not perform an update on invalid totalMinutes. + if (minutesPassed > -1) // do not perform an update on invalid minutesPassed. { - BerryTreeTimeUpdate(totalMinutes); + BerryTreeTimeUpdate(minutesPassed); gSaveBlock2.lastBerryTreeUpdate = *time; } } -- cgit v1.2.3