diff --git a/src/Bitmaps.c b/src/Bitmaps.c index 975bc7d..7a52cc1 100644 --- a/src/Bitmaps.c +++ b/src/Bitmaps.c @@ -1,9 +1,13 @@ // Copyright (c) Jon Thysell // Licensed under the MIT License. +#include + #include "Bitmaps.h" -#define TitlePictResID BaseResID +#define BasePictResID BaseResID + +#define TitlePictResID 0 #define NumCharPictBaseResID (TitlePictResID + 1) #define ACharPictResID (NumCharPictBaseResID + NumCharPictCount) #define BCharPictResID (ACharPictResID + 1) @@ -16,14 +20,22 @@ #define LightOffPictResID (SoundOnPictResID + 1) #define LightOnPictResID (LightOffPictResID + 1) -#define StarRectPadding 2 +#define TotalPictCount (LightOnPictResID + 1) + +#define StarRectPadding 2 + +int16_t Bitmaps_GetOverrideBaseResID(); + +PicHandle Bitmaps_GetPict(const int16_t holidayResID, const int16_t offset); void Bitmaps_Init(Bitmaps *pBitmaps) { - int16_t i; + int16_t i, baseResID; + + baseResID = Bitmaps_GetOverrideBaseResID(); // Load title - pBitmaps->TitlePict = GetPicture(TitlePictResID); + pBitmaps->TitlePict = Bitmaps_GetPict(baseResID, TitlePictResID); if (pBitmaps->TitlePict == nil) { ShowError("\pTitle PICT resource missing!", true); @@ -32,7 +44,7 @@ void Bitmaps_Init(Bitmaps *pBitmaps) // Load number chars for (i = 0; i < NumCharPictCount; i++) { - pBitmaps->NumCharPicts[i] = GetPicture(NumCharPictBaseResID + i); + pBitmaps->NumCharPicts[i] = Bitmaps_GetPict(baseResID, NumCharPictBaseResID + i); if (pBitmaps->NumCharPicts[i] == nil) { ShowError("\pNumber char PICT resource missing!", true); @@ -40,21 +52,21 @@ void Bitmaps_Init(Bitmaps *pBitmaps) } // Load "A" char - pBitmaps->ACharPict = GetPicture(ACharPictResID); + pBitmaps->ACharPict = Bitmaps_GetPict(baseResID, ACharPictResID); if (pBitmaps->ACharPict == nil) { ShowError("\pA char PICT resource missing!", true); } // Load "B" char - pBitmaps->BCharPict = GetPicture(BCharPictResID); + pBitmaps->BCharPict = Bitmaps_GetPict(baseResID, BCharPictResID); if (pBitmaps->BCharPict == nil) { ShowError("\pB char PICT resource missing!", true); } // Load "/" char - pBitmaps->SlashCharPict = GetPicture(SlashCharPictResID); + pBitmaps->SlashCharPict = Bitmaps_GetPict(baseResID, SlashCharPictResID); if (pBitmaps->SlashCharPict == nil) { ShowError("\pSlash char PICT resource missing!", true); @@ -63,7 +75,7 @@ void Bitmaps_Init(Bitmaps *pBitmaps) // Load half-stars for (i = 0; i < StarPictCount; i++) { - pBitmaps->StarPicts[i] = GetPicture(StarPictBaseResID + i); + pBitmaps->StarPicts[i] = Bitmaps_GetPict(baseResID, StarPictBaseResID + i); if (pBitmaps->StarPicts[i] == nil) { ShowError("\pStar PICT resource missing!", true); @@ -71,55 +83,85 @@ void Bitmaps_Init(Bitmaps *pBitmaps) } // Load slash char - pBitmaps->SlashCharPict = GetPicture(SlashCharPictResID); + pBitmaps->SlashCharPict = Bitmaps_GetPict(baseResID, SlashCharPictResID); if (pBitmaps->SlashCharPict == nil) { ShowError("\pSlash char PICT resource missing!", true); } // Load next button - pBitmaps->NextButtonPict = GetPicture(NextButtonPictResID); + pBitmaps->NextButtonPict = Bitmaps_GetPict(baseResID, NextButtonPictResID); if (pBitmaps->NextButtonPict == nil) { ShowError("\pNext button PICT resource missing!", true); } // Load retry button - pBitmaps->RetryButtonPict = GetPicture(RetryButtonPictResID); + pBitmaps->RetryButtonPict = Bitmaps_GetPict(baseResID, RetryButtonPictResID); if (pBitmaps->RetryButtonPict == nil) { ShowError("\pRetry button PICT resource missing!", true); } // Load sound off - pBitmaps->SoundOffPict = GetPicture(SoundOffPictResID); + pBitmaps->SoundOffPict = Bitmaps_GetPict(baseResID, SoundOffPictResID); if (pBitmaps->SoundOffPict == nil) { ShowError("\pSound off PICT resource missing!", true); } // Load sound on - pBitmaps->SoundOnPict = GetPicture(SoundOnPictResID); + pBitmaps->SoundOnPict = Bitmaps_GetPict(baseResID, SoundOnPictResID); if (pBitmaps->SoundOnPict == nil) { ShowError("\pSound on PICT resource missing!", true); } // Load light off - pBitmaps->LightOffPict = GetPicture(LightOffPictResID); + pBitmaps->LightOffPict = Bitmaps_GetPict(baseResID, LightOffPictResID); if (pBitmaps->LightOffPict == nil) { ShowError("\pLight off PICT resource missing!", true); } // Load light on - pBitmaps->LightOnPict = GetPicture(LightOnPictResID); + pBitmaps->LightOnPict = Bitmaps_GetPict(baseResID, LightOnPictResID); if (pBitmaps->LightOnPict == nil) { ShowError("\pLight on PICT resource missing!", true); } } +int16_t Bitmaps_GetOverrideBaseResID() +{ + uint32_t seconds; + DateTimeRec dateTime; + int16_t dayOfYear; + + GetDateTime(&seconds); + Secs2Date(seconds, &dateTime); + + // Calculate "day number" (1 - 366, always assume leap year) + dayOfYear = MonthOffset[dateTime.month - 1]; + dayOfYear += dateTime.day; + + return BasePictResID + (dayOfYear * TotalPictCount); +} + +PicHandle Bitmaps_GetPict(const int16_t baseResID, const int16_t offset) +{ + PicHandle pic; + pic = GetPicture(baseResID + offset); + + if (pic == nil) + { + // No override pic, get default + pic = GetPicture(BasePictResID + offset); + } + + return pic; +} + void Bitmaps_GetNumberRect(const Bitmaps *pBitmaps, const uint32_t number, const uint8_t scale, Rect *pDestRect) { bool started; diff --git a/src/MacCommon.c b/src/MacCommon.c index bb1e189..c24bc29 100644 --- a/src/MacCommon.c +++ b/src/MacCommon.c @@ -3,6 +3,21 @@ #include "MacCommon.h" +const int16_t MonthOffset[] = { + 0, // Jan + 31, // Feb + 60, // Mar + 91, // Apr + 121, // May + 152, // Jun + 182, // Jul + 213, // Aug + 244, // Sep + 274, // Oct + 305, // Nov + 335, // Dec +}; + void ShowError(Str255 message, bool isFatal) { ParamText(message, EmptyString, EmptyString, EmptyString); diff --git a/src/MacCommon.h b/src/MacCommon.h index a87be46..da8cb26 100644 --- a/src/MacCommon.h +++ b/src/MacCommon.h @@ -14,6 +14,8 @@ #define ErrorAlertResID BaseResID +extern const int16_t MonthOffset[]; + typedef enum eBoxAlignment { Top, diff --git a/src/MacLO.pi.bin b/src/MacLO.pi.bin index b38102f..208f15f 100644 Binary files a/src/MacLO.pi.bin and b/src/MacLO.pi.bin differ diff --git a/src/MacLO.pi.rsrc.bin b/src/MacLO.pi.rsrc.bin index 03cc204..6210454 100644 Binary files a/src/MacLO.pi.rsrc.bin and b/src/MacLO.pi.rsrc.bin differ diff --git a/src/PlayScene.c b/src/PlayScene.c index 63768db..ce8d252 100644 --- a/src/PlayScene.c +++ b/src/PlayScene.c @@ -10,8 +10,7 @@ #define LightSize 50 #define LightCornerSize 12 -#define HUDMargin PlayfieldMargin -#define HUDCornerSize PlayfieldCornerSize +#define HUDMargin PlayfieldMargin #define LevelTextScale 3 #define HalfStarScale 2 @@ -105,13 +104,11 @@ void PlayScene_Draw(const GameWindow *pGameWindow, bool fullRefresh) { // Draw ON light DrawPicture(pGameWindow->Bitmaps.LightOnPict, &lightRect); - //FillRoundRect(&lightRect, LightCornerSize, LightCornerSize, white); } else { // Draw OFF light DrawPicture(pGameWindow->Bitmaps.LightOffPict, &lightRect); - //FillRoundRect(&lightRect, LightCornerSize, LightCornerSize, dkGray); } } } @@ -146,7 +143,6 @@ void PlayScene_Draw(const GameWindow *pGameWindow, bool fullRefresh) // Draw sound button MoveTo(pGameWindow->PlayScene.SoundButtonRect.left, pGameWindow->PlayScene.SoundButtonRect.top); Bitmaps_DrawSound(&(pGameWindow->Bitmaps), pGameWindow->Sounds.Enabled, 1); - } void PlayScene_Click(GameWindow *pGameWindow, const Point *pPosition)