From 3cd916c96b689f576c5ae1442b2bbfb7a6493148 Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Thu, 18 Jun 2026 13:12:07 +0300 Subject: [PATCH 01/30] added set value to LawnScrollbar --- src/Lawn/LawnCommon.cpp | 14 ++++++++++++++ src/Lawn/LawnCommon.h | 1 + src/Lawn/Widget/AlmanacDialog.cpp | 8 ++++---- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/Lawn/LawnCommon.cpp b/src/Lawn/LawnCommon.cpp index 2402b97..b3f6ac6 100644 --- a/src/Lawn/LawnCommon.cpp +++ b/src/Lawn/LawnCommon.cpp @@ -230,6 +230,20 @@ void LawnScrollbar::MouseWheel(int theDelta) } } +void LawnScrollbar::SetValue(float theValue) +{ + mValue = theValue; + float aNormalized = (mMaxValue > 0.0f) ? mValue / mMaxValue : 0.0f; + if (mIsHorizontal) + { + mThumbRect = Rect(aNormalized * (mWidth - mThumbRect.mWidth), 0, mSliderHeightPercent * mWidth, mHeight); + } + else + { + mThumbRect = Rect(0, aNormalized * (mHeight - mThumbRect.mHeight), mWidth, mSliderHeightPercent * mHeight); + } +} + float LawnScrollbar::GetValue() { return mValue; diff --git a/src/Lawn/LawnCommon.h b/src/Lawn/LawnCommon.h index dd3f86c..e5de9ce 100644 --- a/src/Lawn/LawnCommon.h +++ b/src/Lawn/LawnCommon.h @@ -68,6 +68,7 @@ class LawnScrollbar : public Widget bool IsThumbOver(); bool IsThumbDown(); float GetValue(); + void SetValue(float theValue); }; bool ModInRange(int theNumber, int theMod, int theRange = 0); diff --git a/src/Lawn/Widget/AlmanacDialog.cpp b/src/Lawn/Widget/AlmanacDialog.cpp index cd985d5..194197c 100644 --- a/src/Lawn/Widget/AlmanacDialog.cpp +++ b/src/Lawn/Widget/AlmanacDialog.cpp @@ -140,7 +140,7 @@ void AlmanacDialog::SetupPlant() mDescriptionScrollbar->mAllowedMouseZone = Rect(484, 350, 258, ALMANAC_PLANT_MAX_SPACE); mDescriptionScrollbar->mThumbColor = Color(131, 69, 32); mDescriptionScrollbar->mBaseColor = Color(233, 149, 88); - mDescriptionScrollbar->mValue = 0.0f; + mDescriptionScrollbar->SetValue(0.0f); ClearPlantsAndZombies(); @@ -170,7 +170,7 @@ void AlmanacDialog::SetupZombie() mDescriptionScrollbar->mAllowedMouseZone = Rect(484, 377, 258, ALMANAC_ZOMBIE_MAX_SPACE); mDescriptionScrollbar->mBaseColor = Color(152, 149, 188); mDescriptionScrollbar->mThumbColor = Color(63, 64, 86); - mDescriptionScrollbar->mValue = 0.0f; + mDescriptionScrollbar->SetValue(0.0f); ClearPlantsAndZombies(); @@ -386,7 +386,7 @@ void AlmanacDialog::DrawPlants(Graphics *g) { mDescriptionScrollbar->mDisabled = true; mDescriptionScrollbar->mVisible = false; - mDescriptionScrollbar->mValue = 0.0f; + mDescriptionScrollbar->SetValue(0.0f); } else { @@ -631,7 +631,7 @@ void AlmanacDialog::DrawZombies(Graphics *g) { mDescriptionScrollbar->mDisabled = true; mDescriptionScrollbar->mVisible = false; - mDescriptionScrollbar->mValue = 0.0f; + mDescriptionScrollbar->SetValue(0.0f); } else { From e54e773a44564b2f6913d10759ff34fb94cf861b Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Thu, 18 Jun 2026 13:13:35 +0300 Subject: [PATCH 02/30] bumped version --- src/LawnApp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index c315fc0..983df83 100644 --- a/src/LawnApp.cpp +++ b/src/LawnApp.cpp @@ -64,7 +64,7 @@ #endif //Do not edit this. - Electr0Gunner -Version LawnApp::gResoddedVersion(1, 0, 0, 990); +Version LawnApp::gResoddedVersion(1, 1, 0, 1032); bool gIsPartnerBuild = false; bool gSlowMo = false; From 385c5a758e4d0939ef8bf9a124f567037dd50c8a Mon Sep 17 00:00:00 2001 From: Copyright-1 Date: Fri, 19 Jun 2026 12:25:01 +0300 Subject: [PATCH 03/30] Fix flash plant --- src/Lawn/Challenge.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Lawn/Challenge.cpp b/src/Lawn/Challenge.cpp index 3a6f1f2..fd7ff52 100644 --- a/src/Lawn/Challenge.cpp +++ b/src/Lawn/Challenge.cpp @@ -1324,8 +1324,8 @@ void Challenge::BeghouledFlashPlant(int theFlashX, int theFlashY, int theFromX, } Plant *aFlashPlant = mBoard->GetTopPlantAt(theFlashX, theFlashY, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION); - if (aFlashPlant && aFlashPlant->mEatenFlashCountdown <= 300) - aFlashPlant->mEatenFlashCountdown = 300; + if (aFlashPlant && aFlashPlant->mBeghouledFlashCountdown <= 300) + aFlashPlant->mBeghouledFlashCountdown = 300; } bool Challenge::BeghouledTwistFlashMatch(BeghouledBoardState *theBoardState, int theGridX, int theGridY) @@ -1336,9 +1336,9 @@ bool Challenge::BeghouledTwistFlashMatch(BeghouledBoardState *theBoardState, int for (int i = 0; i < 4; i++) { Plant *aPlant = mBoard->GetTopPlantAt(theGridX + (i % 2), theGridY + (i / 2), PlantPriority::TOPPLANT_ANY); - if (aPlant && aPlant->mEatenFlashCountdown <= 300) + if (aPlant && aPlant->mBeghouledFlashCountdown <= 300) { - aPlant->mEatenFlashCountdown = 300; + aPlant->mBeghouledFlashCountdown = 300; } } return true; From 07aa14df11b25b01503478166b6b8cd51c10fe61 Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Fri, 19 Jun 2026 20:04:42 +0300 Subject: [PATCH 04/30] using std::filesystem for deleting a file --- src/SexyAppFramework/SexyAppBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SexyAppFramework/SexyAppBase.cpp b/src/SexyAppFramework/SexyAppBase.cpp index 844aa5f..83ad06e 100644 --- a/src/SexyAppFramework/SexyAppBase.cpp +++ b/src/SexyAppFramework/SexyAppBase.cpp @@ -2068,7 +2068,7 @@ bool SexyAppBase::EraseFile(const std::string &theFileName) if (mPlayingDemoBuffer) return true; - return DeleteFileA(theFileName.c_str()) != 0; + return std::filesystem::remove(theFileName); } void SexyAppBase::SEHOccured() From 2f295509e70de697b73289860a7e2f5bd4ffbe05 Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Fri, 19 Jun 2026 21:26:28 +0300 Subject: [PATCH 05/30] fixed the (theoretical) last wrong counter for beghouled's flashing this function isn't even used but i don't even care --- src/Lawn/Challenge.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Lawn/Challenge.cpp b/src/Lawn/Challenge.cpp index fd7ff52..e538690 100644 --- a/src/Lawn/Challenge.cpp +++ b/src/Lawn/Challenge.cpp @@ -1397,8 +1397,8 @@ void Challenge::BeghouledCancelMatchFlashing() Plant *aPlant = nullptr; while (mBoard->IteratePlants(aPlant)) { - if (aPlant->mEatenFlashCountdown >= 25) - aPlant->mEatenFlashCountdown = 25; + if (aPlant->mBeghouledFlashCountdown >= 25) + aPlant->mBeghouledFlashCountdown = 25; } } From c72283ca25a7d484f5c46334a9b30b5bcce3d292 Mon Sep 17 00:00:00 2001 From: Michael Zhao <44533763+Pistonight@users.noreply.github.com> Date: Sat, 20 Jun 2026 15:03:52 -0700 Subject: [PATCH 06/30] refactor: remove AutoCrit and CritSec --- src/SexyAppFramework/AutoCrit.h | 29 ------------------- src/SexyAppFramework/CritSect.cpp | 19 ------------ src/SexyAppFramework/CritSect.h | 24 --------------- src/SexyAppFramework/Debug.cpp | 12 ++++---- src/SexyAppFramework/ImageFont.cpp | 5 ++-- src/SexyAppFramework/OpenGL/OpenGLImage.cpp | 8 ++--- .../OpenGL/OpenGLRenderer.cpp | 7 ++--- src/SexyAppFramework/Renderer.cpp | 8 ++--- src/SexyAppFramework/Renderer.h | 4 +-- .../SDL3Renderer/SDL3Image.cpp | 6 ++-- .../SDL3Renderer/SDL3Renderer.cpp | 8 ++--- .../SDL3Renderer/SDL3Renderer.h | 5 +--- src/SexyAppFramework/SexyAppBase.cpp | 11 ++++--- src/SexyAppFramework/SexyAppBase.h | 3 +- 14 files changed, 30 insertions(+), 119 deletions(-) delete mode 100644 src/SexyAppFramework/AutoCrit.h delete mode 100644 src/SexyAppFramework/CritSect.cpp delete mode 100644 src/SexyAppFramework/CritSect.h diff --git a/src/SexyAppFramework/AutoCrit.h b/src/SexyAppFramework/AutoCrit.h deleted file mode 100644 index f23a631..0000000 --- a/src/SexyAppFramework/AutoCrit.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef __AUTOCRIT_INCLUDED__ -#define __AUTOCRIT_INCLUDED__ - -#include "CritSect.h" - -namespace Sexy -{ - -class AutoCrit -{ - std::unique_lock mLock; - - public: - AutoCrit(std::recursive_mutex theCritSec) : mLock(theCritSec) - { - } - - AutoCrit(CritSect &theCritSect) : mLock(theCritSect.mCriticalSection) - { - } - - ~AutoCrit() - { - } -}; - -} // namespace Sexy - -#endif //__AUTOCRIT_INCLUDED__ diff --git a/src/SexyAppFramework/CritSect.cpp b/src/SexyAppFramework/CritSect.cpp deleted file mode 100644 index 5c561b6..0000000 --- a/src/SexyAppFramework/CritSect.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#pragma warning(disable : 4786) - -#include "CritSect.h" - -using namespace Sexy; - -//////////////////////////////////////////////////////////////////////////////// - -CritSect::CritSect() -{ - -} - -//////////////////////////////////////////////////////////////////////////////// - -CritSect::~CritSect() -{ - -} diff --git a/src/SexyAppFramework/CritSect.h b/src/SexyAppFramework/CritSect.h deleted file mode 100644 index 09b1db7..0000000 --- a/src/SexyAppFramework/CritSect.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _H_CritSect -#define _H_CritSect - -#include - -class CritSync; - -namespace Sexy -{ - -class CritSect -{ - private: - std::recursive_mutex mCriticalSection; - friend class AutoCrit; - - public: - CritSect(void); - ~CritSect(void); -}; - -} // namespace Sexy - -#endif // _H_CritSect diff --git a/src/SexyAppFramework/Debug.cpp b/src/SexyAppFramework/Debug.cpp index 6ca259b..399284c 100644 --- a/src/SexyAppFramework/Debug.cpp +++ b/src/SexyAppFramework/Debug.cpp @@ -1,9 +1,7 @@ +#include #include "Common.h" #include "Debug.h" -#include "AutoCrit.h" -#include "CritSect.h" - #include "memmgr.h" #ifndef _MAX_PATH @@ -37,7 +35,7 @@ static bool gSexyAllocMapValid = false; class SexyAllocMap : public std::map { public: - CritSect mCrit; + std::mutex mCrit; public: SexyAllocMap() @@ -120,7 +118,7 @@ void SexyMemAddTrack(void *addr, int asize, const char *fname, int lnum) if (!gSexyAllocMapValid) return; - AutoCrit aCrit(gSexyAllocMap.mCrit); + auto aLock = std::scoped_lock(gSexyAllocMap.mCrit); gShowLeaks = true; SEXY_ALLOC_INFO &info = gSexyAllocMap[addr]; @@ -136,7 +134,7 @@ void SexyMemRemoveTrack(void *addr) if (!gSexyAllocMapValid) return; - AutoCrit aCrit(gSexyAllocMap.mCrit); + auto aLock = std::scoped_lock(gSexyAllocMap.mCrit); SexyAllocMap::iterator anItr = gSexyAllocMap.find(addr); if (anItr != gSexyAllocMap.end()) gSexyAllocMap.erase(anItr); @@ -149,7 +147,7 @@ void SexyDumpUnfreed() if (!gSexyAllocMapValid) return; - AutoCrit aCrit(gSexyAllocMap.mCrit); + auto aLock = std::scoped_lock(gSexyAllocMap.mCrit); SexyAllocMap::iterator i; int totalSize = 0; char buf[8192]; diff --git a/src/SexyAppFramework/ImageFont.cpp b/src/SexyAppFramework/ImageFont.cpp index 97d1214..57884c5 100644 --- a/src/SexyAppFramework/ImageFont.cpp +++ b/src/SexyAppFramework/ImageFont.cpp @@ -3,7 +3,6 @@ #include "Image.h" #include "SexyAppBase.h" #include "MemoryImage.h" -#include "../SexyAppFramework/AutoCrit.h" using namespace Sexy; @@ -1420,7 +1419,7 @@ int ImageFont::CharWidth(uint32_t theChar) return CharWidthKern(theChar, 0); } -CritSect gRenderCritSec; +std::mutex gRenderCritSec; static const int POOL_SIZE = 4096; static RenderCommand gRenderCommandPool[POOL_SIZE]; static RenderCommand *gRenderTail[256]; @@ -1435,7 +1434,7 @@ void ImageFont::DrawStringEx(Graphics *g, RectList *theDrawnAreas, int *theWidth) { - AutoCrit anAutoCrit(gRenderCritSec); + auto aLock = std::scoped_lock(gRenderCritSec); int aPoolIdx; diff --git a/src/SexyAppFramework/OpenGL/OpenGLImage.cpp b/src/SexyAppFramework/OpenGL/OpenGLImage.cpp index 89122c4..e2b8dab 100644 --- a/src/SexyAppFramework/OpenGL/OpenGLImage.cpp +++ b/src/SexyAppFramework/OpenGL/OpenGLImage.cpp @@ -5,8 +5,6 @@ #include "Rect.h" #include "Graphics.h" #include "SexyAppBase.h" -#include "AutoCrit.h" -#include "Debug.h" #include "PerfTimer.h" #include @@ -111,8 +109,8 @@ bool OpenGLImage::GenerateSurface() if (mColorTable != NULL) GetBits(); - AutoCrit aCrit(mRenderer->mCritSect); // prevent mSurface from being released while we're in this code - + // prevent mSurface from being released while we're in this code + auto aLock = std::scoped_lock(mRenderer->mCritSect); if (!LockSurface()) return false; @@ -967,4 +965,4 @@ void OpenGLImage::ImplBltRawTexture(void *theTexture, glBindFramebuffer(GL_FRAMEBUFFER, 0); } -#endif \ No newline at end of file +#endif diff --git a/src/SexyAppFramework/OpenGL/OpenGLRenderer.cpp b/src/SexyAppFramework/OpenGL/OpenGLRenderer.cpp index 6c25251..2a7fb17 100644 --- a/src/SexyAppFramework/OpenGL/OpenGLRenderer.cpp +++ b/src/SexyAppFramework/OpenGL/OpenGLRenderer.cpp @@ -4,7 +4,6 @@ #include "TriVertex.h" #include "SexyMatrix.h" #include "Window.h" -#include "AutoCrit.h" #include "SysFont.h" #include #include @@ -243,7 +242,7 @@ void OpenGLRenderer::Remove3DData(MemoryImage *theImage) delete (OpenGLTextureData *)theImage->mGPUData; theImage->mGPUData = nullptr; - AutoCrit aCrit(mCritSect); // Make images thread safe + auto aLock = std::scoped_lock(mCritSect); // Make images thread safe mImageSet.erase(theImage); } } @@ -570,7 +569,7 @@ bool OpenGLRenderer::CreateImageTexture(MemoryImage *theImage) // The actual purging was deferred wantPurge = theImage->mPurgeBits; - AutoCrit aCrit(mCritSect); // Make images thread safe + auto aLock = std::scoped_lock(mCritSect); // Make images thread safe mImageSet.insert(theImage); } @@ -1396,4 +1395,4 @@ bool OpenGLRenderer::TestOpenGL(SDL_Window *theWindow) return true; } -#endif \ No newline at end of file +#endif diff --git a/src/SexyAppFramework/Renderer.cpp b/src/SexyAppFramework/Renderer.cpp index c94cd7a..4e7d5e9 100644 --- a/src/SexyAppFramework/Renderer.cpp +++ b/src/SexyAppFramework/Renderer.cpp @@ -1,7 +1,6 @@ #include "Renderer.h" #include "SexyAppBase.h" #include "Graphics.h" -#include "AutoCrit.h" using namespace Sexy; @@ -83,14 +82,13 @@ BlendMode Renderer::ChooseBlendMode(int theBlendMode) void Renderer::AddImage(Image *theImage) { - AutoCrit anAutoCrit(mCritSect); - + auto lock = std::scoped_lock(mCritSect); mImageSet.insert((MemoryImage *)theImage); } void Renderer::RemoveImage(Image *theImage) { - AutoCrit anAutoCrit(mCritSect); + auto lock = std::scoped_lock(mCritSect); ImageSet::iterator anItr = mImageSet.find((MemoryImage *)theImage); if (anItr != mImageSet.end()) @@ -109,4 +107,4 @@ TextureData::TextureData() TextureData::~TextureData() { ReleaseTextures(); -} \ No newline at end of file +} diff --git a/src/SexyAppFramework/Renderer.h b/src/SexyAppFramework/Renderer.h index b24e876..9c1f4be 100644 --- a/src/SexyAppFramework/Renderer.h +++ b/src/SexyAppFramework/Renderer.h @@ -2,8 +2,8 @@ #include "GPUImage.h" #include "SexyMatrix.h" -#include "CritSect.h" #include +#include #include #define MAX_VERTICES 16384 @@ -150,7 +150,7 @@ namespace Sexy TransformStack mTransformStack; static std::string mErrorString; - CritSect mCritSect; + std::recursive_mutex mCritSect; GPUImage *mScreenImage; diff --git a/src/SexyAppFramework/SDL3Renderer/SDL3Image.cpp b/src/SexyAppFramework/SDL3Renderer/SDL3Image.cpp index 068a3c7..18b7730 100644 --- a/src/SexyAppFramework/SDL3Renderer/SDL3Image.cpp +++ b/src/SexyAppFramework/SDL3Renderer/SDL3Image.cpp @@ -5,8 +5,6 @@ #include "Rect.h" #include "Graphics.h" #include "SexyAppBase.h" -#include "AutoCrit.h" -#include "Debug.h" #include "PerfTimer.h" using namespace Sexy; @@ -103,7 +101,7 @@ bool SDL3Image::GenerateSurface() if (mColorTable != NULL) GetBits(); - AutoCrit aCrit(mRenderer->mCritSect); // prevent mSurface from being released while we're in this code + auto aLock = std::scoped_lock(mRenderer->mCritSect); // prevent mSurface from being released while we're in this code if (!LockSurface()) return false; @@ -498,4 +496,4 @@ void SDL3Image::ImplBltRawTexture(void *theTexture, int theTexWidth, int theTexH SDL_SetRenderTarget(mSDL3Renderer->mBackendRenderer, nullptr); } -#endif \ No newline at end of file +#endif diff --git a/src/SexyAppFramework/SDL3Renderer/SDL3Renderer.cpp b/src/SexyAppFramework/SDL3Renderer/SDL3Renderer.cpp index a45205d..efe2cfb 100644 --- a/src/SexyAppFramework/SDL3Renderer/SDL3Renderer.cpp +++ b/src/SexyAppFramework/SDL3Renderer/SDL3Renderer.cpp @@ -4,7 +4,6 @@ #include "SysFont.h" #include "TriVertex.h" #include "SexyMatrix.h" -#include "AutoCrit.h" #include "SexyAppBase.h" #include "Window.h" #if SEXY_USE_IMGUI @@ -208,7 +207,7 @@ void SDL3Renderer::Remove3DData(MemoryImage *theImage) delete (SDL3TextureData *)theImage->mGPUData; theImage->mGPUData = nullptr; - AutoCrit aCrit(mCritSect); // Make images thread safe + auto aLock = std::scoped_lock(mCritSect); // Make images thread safe mImageSet.erase(theImage); } } @@ -349,7 +348,7 @@ bool SDL3Renderer::CreateImageTexture(MemoryImage *theImage) // The actual purging was deferred wantPurge = theImage->mPurgeBits; - AutoCrit aCrit(mCritSect); // Make images thread safe + auto aLock = std::scoped_lock(mCritSect); // Make images thread safe mImageSet.insert(theImage); } @@ -470,8 +469,7 @@ void SDL3TextureData::CreateTextures(MemoryImage *theImage, void *theRendererDat mWidth = theImage->mWidth; mHeight = theImage->mHeight; mBitsChangedCount = theImage->mBitsChangedCount; - if (mTexData != nullptr) - delete mTexData; + delete mTexData; mTexData = mTexturePtr; mTexMemSize = mWidth * mHeight * 4; //Using ARGB SDL3Renderer::gSDLUsedMemoryCount += mTexMemSize; diff --git a/src/SexyAppFramework/SDL3Renderer/SDL3Renderer.h b/src/SexyAppFramework/SDL3Renderer/SDL3Renderer.h index e2766d2..727afd2 100644 --- a/src/SexyAppFramework/SDL3Renderer/SDL3Renderer.h +++ b/src/SexyAppFramework/SDL3Renderer/SDL3Renderer.h @@ -5,9 +5,6 @@ #include "SDL3Image.h" #include -#include -#include - namespace Sexy { @@ -133,4 +130,4 @@ class SDL3Renderer : public Renderer } }; }; // namespace Sexy -#endif \ No newline at end of file +#endif diff --git a/src/SexyAppFramework/SexyAppBase.cpp b/src/SexyAppFramework/SexyAppBase.cpp index 83ad06e..ec48c65 100644 --- a/src/SexyAppFramework/SexyAppBase.cpp +++ b/src/SexyAppFramework/SexyAppBase.cpp @@ -39,7 +39,6 @@ #include "SysFont.h" #include "ResourceManager.h" #include "BassMusicInterface.h" -#include "AutoCrit.h" #include "../PakLib/PakInterface.h" #include @@ -4193,7 +4192,7 @@ void SexyAppBase::DeleteNativeImageData() void SexyAppBase::DeleteExtraImageData() { - AutoCrit anAutoCrit(mRenderer->mCritSect); + auto aLock = std::scoped_lock(mRenderer->mCritSect); MemoryImageSet::iterator anItr = mMemoryImageSet.begin(); while (anItr != mMemoryImageSet.end()) { @@ -6120,13 +6119,13 @@ void SexyAppBase::SetMasterVolume(double theMasterVolume) void SexyAppBase::AddMemoryImage(MemoryImage *theMemoryImage) { - AutoCrit anAutoCrit(mRenderer->mCritSect); + auto aLock = std::scoped_lock(mRenderer->mCritSect); mMemoryImageSet.insert(theMemoryImage); } void SexyAppBase::RemoveMemoryImage(MemoryImage *theMemoryImage) { - AutoCrit anAutoCrit(mRenderer->mCritSect); + auto aLock = std::scoped_lock(mRenderer->mCritSect); MemoryImageSet::iterator anItr = mMemoryImageSet.find(theMemoryImage); if (anItr != mMemoryImageSet.end()) mMemoryImageSet.erase(anItr); @@ -6210,7 +6209,7 @@ SharedImageRef SexyAppBase::GetSharedImage(const std::string &theFileName, const SharedImageRef aSharedImageRef; { - AutoCrit anAutoCrit(mRenderer->mCritSect); + auto aLock = std::scoped_lock(mRenderer->mCritSect); aResultPair = mSharedImageMap.insert( SharedImageMap::value_type(SharedImageMap::key_type(anUpperFileName, anUpperVariant), SharedImage())); aSharedImageRef = &aResultPair.first->second; @@ -6233,7 +6232,7 @@ SharedImageRef SexyAppBase::GetSharedImage(const std::string &theFileName, const void SexyAppBase::CleanSharedImages() { - AutoCrit anAutoCrit(mRenderer->mCritSect); + auto aLock = std::scoped_lock(mRenderer->mCritSect); if (mCleanupSharedImages) { diff --git a/src/SexyAppFramework/SexyAppBase.h b/src/SexyAppFramework/SexyAppBase.h index 7f4c550..6d3d402 100644 --- a/src/SexyAppFramework/SexyAppBase.h +++ b/src/SexyAppFramework/SexyAppBase.h @@ -10,13 +10,13 @@ #include "ButtonListener.h" #include "DialogListener.h" #include "Buffer.h" -#include "CritSect.h" #include "SharedImage.h" #include #include #include #include #include +#include #include FT_FREETYPE_H @@ -190,7 +190,6 @@ class SexyAppBase : public ButtonListener, public DialogListener #ifdef _WIN32 HANDLE mCopyMutex; #endif - CritSect mCritSect; bool mBetaValidate; uint8_t mAdd8BitMaxTable[512]; WidgetManager *mWidgetManager; From 99635c576d73f3560a4efc629b6aac4e4b10fa78 Mon Sep 17 00:00:00 2001 From: Michael Zhao <44533763+Pistonight@users.noreply.github.com> Date: Sat, 20 Jun 2026 17:57:01 -0700 Subject: [PATCH 07/30] fix MessageWidget utf8 --- src/Lawn/MessageWidget.cpp | 154 ++++++++++++++++++++--------------- src/Lawn/MessageWidget.h | 20 +++-- src/Lawn/System/SaveGame.cpp | 78 ++++++++++-------- src/LawnApp.cpp | 7 +- 4 files changed, 148 insertions(+), 111 deletions(-) diff --git a/src/Lawn/MessageWidget.cpp b/src/Lawn/MessageWidget.cpp index f75c99b..60b8a8a 100644 --- a/src/Lawn/MessageWidget.cpp +++ b/src/Lawn/MessageWidget.cpp @@ -17,12 +17,11 @@ MessageWidget::MessageWidget(LawnApp *theApp) mLabelNext[0] = '\0'; mMessageStyleNext = MessageStyle::MESSAGE_STYLE_OFF; mSlideOffTime = 100; - memset(mTextReanimID, (int)ReanimationID::REANIMATIONID_NULL, MAX_MESSAGE_LENGTH); } void MessageWidget::ClearReanim() { - for (int i = 0; i < MAX_MESSAGE_LENGTH; i++) + for (int i = 0; i < mTextReanimID.size(); i++) { if (mTextReanimID[i] == ReanimationID::REANIMATIONID_NULL) continue; @@ -30,8 +29,8 @@ void MessageWidget::ClearReanim() if (aReanim) { aReanim->ReanimationDie(); - mTextReanimID[i] = ReanimationID::REANIMATIONID_NULL; } + mTextReanimID[i] = ReanimationID::REANIMATIONID_NULL; } } @@ -47,46 +46,48 @@ void MessageWidget::ClearLabel() } } +namespace +{ + +// copy theInput to theTarget (both UTF-8 encoded), truncating at the final codepoint boundary that fits +void CopyTruncatedToLabel(std::array &theTarget, const SexyString &theInput) +{ + auto it = theInput.begin(); + const auto end = theInput.end(); + size_t aByteLen = 0; + while (it != end) + { + auto itStart = it; + utf8::next(it, end); + auto aCodepointByteSize = it - itStart; + if (aByteLen + aCodepointByteSize >= theTarget.size()) + { + it = itStart; // backtrack the last codepoint we saw which doesn't fit + break; + } + aByteLen += aCodepointByteSize; + } + std::copy(theInput.begin(), it, theTarget.begin()); + theTarget[aByteLen] = '\0'; +} + +} // namespace + void MessageWidget::SetLabel(const SexyString &theNewLabel, MessageStyle theMessageStyle) { SexyString aLabel = TodStringTranslate(theNewLabel); TOD_ASSERT(utf8::is_valid(aLabel)); - TOD_ASSERT(utf8::distance(aLabel.begin(), aLabel.end()) < MAX_MESSAGE_LENGTH - 1); if (mReanimType != ReanimationType::REANIM_NONE && mDuration > 0) { mMessageStyleNext = theMessageStyle; - size_t count = 0; - - auto it = aLabel.begin(); - auto end = aLabel.end(); - - while (it != end && count < MAX_MESSAGE_LENGTH - 1) - { - mLabelNext[count++] = utf8::next(it, end); - } - - mLabelNext[count] = '\0'; + CopyTruncatedToLabel(mLabelNext, aLabel); ClearLabel(); } else { ClearReanim(); - size_t aByteCount = 0; - auto it = aLabel.begin(); - auto end = aLabel.end(); - size_t count = 0; - - while (it != end && count < MAX_MESSAGE_LENGTH - 1) //get the amount of bytes so we can use strncpy properly - { - auto charStart = it; - utf8::next(it, end); - aByteCount += it - charStart; - count++; - } - - strncpy(mLabel, aLabel.c_str(), aByteCount); - mLabel[aByteCount] = '\0'; + CopyTruncatedToLabel(mLabel, aLabel); mMessageStyle = theMessageStyle; mReanimType = ReanimationType::REANIM_NONE; @@ -151,53 +152,65 @@ void MessageWidget::SetLabel(const SexyString &theNewLabel, MessageStyle theMess void MessageWidget::LayoutReanimText() { float aMaxWidth = 0; - int aCurLine = 0, aCurPos = 0; Font *aFont = GetFont(); - int aLabelLen = strlen(mLabel); + size_t aLabelByteLen = strlen(mLabel.data()); - mSlideOffTime = aLabelLen + 100; - - float aLineWidth[MAX_REANIM_LINES]; - for (int aPos = 0; aPos <= aLabelLen; aPos++) + // calculate line widths and codepoint count + size_t aCodepointCount = 0; + float aLineWidth[MAX_REANIM_LINES] = {0.}; { - if (aPos == aLabelLen || mLabel[aPos] == '\n') - { - TOD_ASSERT(aCurLine < MAX_REANIM_LINES); + int aCurLine = 0; + SexyString aLine; - int aLen = aPos - aCurPos; - int aOff = aCurPos; - aCurPos = aPos + 1; - SexyString aLine; - - for (int i = 0; i < aLen; i++) + auto it = mLabel.begin(); + const auto end = mLabel.begin() + aLabelByteLen; + while (it != end) + { + uint32_t aCodepoint = utf8::next(it, end); + aCodepointCount++; + if (aCodepoint == '\n') { - utf8::append(mLabel[aOff + i], aLine); + TOD_ASSERT(aCurLine < MAX_REANIM_LINES); + aLineWidth[aCurLine++] = aFont->StringWidth(aLine); + aLine.clear(); + continue; } - + utf8::append(aCodepoint, aLine); + } + if (!aLine.empty()) + { + TOD_ASSERT(aCurLine < MAX_REANIM_LINES); aLineWidth[aCurLine] = aFont->StringWidth(aLine); - aMaxWidth = std::max(aMaxWidth, aLineWidth[aCurLine]); - aCurLine++; } } - aCurLine = 0; + mSlideOffTime = aCodepointCount + 100; + + int aCurLine = 0; float aCurPosY = 0.0f; float aCurPosX = -aLineWidth[0] * 0.5f; - for (int aPos = 0; aPos < aLabelLen; aPos++) + auto it = mLabel.begin(); + const auto end = mLabel.begin() + aLabelByteLen; + size_t aReanimIdx = 0; + while (it != end && aReanimIdx < mTextReanimID.size()) { Reanimation *aReanimText = mApp->AddReanimation(aCurPosX, aCurPosY, 0, mReanimType); aReanimText->mIsAttachment = true; aReanimText->PlayReanim("anim_enter", ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD, 0.0f, 0.0f); - mTextReanimID[aPos] = mApp->ReanimationGetID(aReanimText); + mTextReanimID[aReanimIdx++] = mApp->ReanimationGetID(aReanimText); - aCurPosX += aFont->CharWidth(mLabel[aPos]); - if (mLabel[aPos] == '\n') + uint32_t aCodepoint = utf8::next(it, end); + if (aCodepoint == '\n') { aCurLine++; TOD_ASSERT(aCurLine < MAX_REANIM_LINES); aCurPosX = -aLineWidth[aCurLine] * 0.5f; aCurPosY += aFont->GetLineSpacing(); } + else + { + aCurPosX += aFont->CharWidth(aCodepoint); + } } } @@ -214,15 +227,18 @@ void MessageWidget::Update() mMessageStyle = MessageStyle::MESSAGE_STYLE_OFF; if (mMessageStyleNext != MessageStyle::MESSAGE_STYLE_OFF) { - SetLabel(mLabelNext, mMessageStyleNext); + SetLabel(mLabelNext.data(), mMessageStyleNext); mMessageStyleNext = MessageStyle::MESSAGE_STYLE_OFF; } } } - int aLabelLen = strlen(mLabel); - for (int aPos = 0; aPos < aLabelLen; aPos++) + for (int aPos = 0; aPos < mTextReanimID.size(); aPos++) { + if (mTextReanimID[aPos] == ReanimationID::REANIMATIONID_NULL) + { + break; + } Reanimation *aTextReanim = mApp->ReanimationTryToGet(mTextReanimID[aPos]); if (aTextReanim == nullptr) { @@ -258,9 +274,14 @@ void MessageWidget::Update() void MessageWidget::DrawReanimatedText(Graphics *g, Font *theFont, const Color &theColor, float thePosY) { - int aLabelLen = strlen(mLabel); - for (int aPos = 0; aPos < aLabelLen; aPos++) + auto it = mLabel.begin(); + const auto end = mLabel.begin() + strlen(mLabel.data()); + for (int aPos = 0; it != end && aPos < mTextReanimID.size(); aPos++) { + if (mTextReanimID[aPos] == ReanimationID::REANIMATIONID_NULL) + { + break; + } Reanimation *aTextReanim = mApp->ReanimationTryToGet(mTextReanimID[aPos]); if (aTextReanim == nullptr) { @@ -279,7 +300,7 @@ void MessageWidget::DrawReanimatedText(Graphics *g, Font *theFont, const Color & aFinalColor.mAlpha = anAlpha; aTransform.mTransX += aTextReanim->mOverlayMatrix.m02; - aTransform.mTransY += aTextReanim->mOverlayMatrix.m12 + thePosY - BOARD_HEIGHT / 2; + aTransform.mTransY += aTextReanim->mOverlayMatrix.m12 + thePosY - BOARD_HEIGHT / 2.0; if (mReanimType == ReanimationType::REANIM_TEXT_FADE_ON && mDisplayTime - mDuration < mSlideOffTime) { float aStretch = 1.0f - aTextReanim->mAnimTime; @@ -288,9 +309,9 @@ void MessageWidget::DrawReanimatedText(Graphics *g, Font *theFont, const Color & SexyMatrix3 aMatrix; Reanimation::MatrixFromTransform(aTransform, aMatrix); - SexyString aLetter; - aLetter.append(1, mLabel[aPos]); - TodDrawStringMatrix(g, theFont, aMatrix, aLetter, aFinalColor); + SexyString aSingleCodepoint; + utf8::append(utf8::next(it, end), aSingleCodepoint); + TodDrawStringMatrix(g, theFont, aMatrix, aSingleCodepoint, aFinalColor); } } @@ -448,18 +469,19 @@ void MessageWidget::Draw(Graphics *g) g->FillRect(aRect); aRect.mY += aTextOffsetY; - TodDrawStringWrapped(g, mLabel, aRect, aFont, aColor, + TodDrawStringWrapped(g, mLabel.data(), aRect, aFont, aColor, DrawStringJustification::DS_ALIGN_CENTER_VERTICAL_MIDDLE); } else { + SexyString aLabelStr = mLabel.data(); Rect aRect(aPosX - mApp->mBoard->mX - BOARD_WIDTH / 2, aPosY - aFont->mAscent, BOARD_WIDTH, BOARD_HEIGHT); if (aOutlineFont) { - TodDrawStringWrapped(g, mLabel, aRect, aOutlineFont, aOutlineColor, + TodDrawStringWrapped(g, aLabelStr, aRect, aOutlineFont, aOutlineColor, DrawStringJustification::DS_ALIGN_CENTER); } - TodDrawStringWrapped(g, mLabel, aRect, aFont, aColor, DrawStringJustification::DS_ALIGN_CENTER); + TodDrawStringWrapped(g, aLabelStr, aRect, aFont, aColor, DrawStringJustification::DS_ALIGN_CENTER); } if (mMessageStyle == MessageStyle::MESSAGE_STYLE_HOUSE_NAME) diff --git a/src/Lawn/MessageWidget.h b/src/Lawn/MessageWidget.h index 0dbcbea..e732445 100644 --- a/src/Lawn/MessageWidget.h +++ b/src/Lawn/MessageWidget.h @@ -1,10 +1,12 @@ #ifndef __MESSAGEWIDGET_H__ #define __MESSAGEWIDGET_H__ +#include #include "../ConstEnums.h" #include "../SexyAppFramework/Common.h" -#define MAX_MESSAGE_LENGTH 128 +// max length of mLabel and mLabelNext +#define MAX_MESSAGE_BYTES 128 #define MAX_REANIM_LINES 5 class LawnApp; @@ -12,20 +14,26 @@ namespace Sexy { class Font; class Graphics; +class Color; } // namespace Sexy class MessageWidget { public: LawnApp *mApp; - SexyCharByte mLabel[MAX_MESSAGE_LENGTH]; + // UTF-8 encoded; due to this being saved in SaveGame it has to be an array + // this also means we can show fewer than MAX_MESSAGE_BYTES codepoints when there are + // non-ascii characters + std::array mLabel; int mDisplayTime; int mDuration; MessageStyle mMessageStyle; - ReanimationID mTextReanimID[MAX_MESSAGE_LENGTH]; + // Each ID corresponds to a codepoint in the label + // i.e. NOT a 1-1 mapping to mLabel! + std::array mTextReanimID = {ReanimationID::REANIMATIONID_NULL}; ReanimationType mReanimType; int mSlideOffTime; - SexyCharByte mLabelNext[MAX_MESSAGE_LENGTH]; + std::array mLabelNext; // UTF-8 encoded, similar to mLabel MessageStyle mMessageStyleNext; public: @@ -57,7 +65,7 @@ class MessageWidget } /// @brief Get the font used to render this MessageWidget /// @return The font of the MessageStyle - Font *GetFont(); + Sexy::Font *GetFont(); /// @brief Draw the Reanimation Message /// @param g Graphics object /// @param theFont The font to use to draw the text @@ -68,4 +76,4 @@ class MessageWidget void LayoutReanimText(); }; -#endif \ No newline at end of file +#endif diff --git a/src/Lawn/System/SaveGame.cpp b/src/Lawn/System/SaveGame.cpp index b347396..57c70f2 100644 --- a/src/Lawn/System/SaveGame.cpp +++ b/src/Lawn/System/SaveGame.cpp @@ -59,8 +59,6 @@ void SaveContext::SyncBytes(void *aValue, size_t aSize, const std::string &aName } } - - void SaveContext::SyncReanimationDef(ReanimatorDefinition *&theDefinition, const std::string &theOwner) { if (mReading) @@ -197,7 +195,8 @@ void SaveContext::SyncImage(Image *&theImage, const std::string &theOwner) } } -void SyncDataIDList(TodList *theDataIDList, SaveContext &theContext, TodAllocator *theAllocator, const std::string &aListOwner) +void SyncDataIDList(TodList *theDataIDList, SaveContext &theContext, TodAllocator *theAllocator, + const std::string &aListOwner) { try { @@ -239,9 +238,11 @@ void SyncDataIDList(TodList *theDataIDList, SaveContext &theContex } } -void SyncParticleEmitter(TodParticleSystem *theParticleSystem, TodParticleEmitter *theParticleEmitter, SaveContext &theContext) +void SyncParticleEmitter(TodParticleSystem *theParticleSystem, TodParticleEmitter *theParticleEmitter, + SaveContext &theContext) { - std::string aIDStr = StrFormat("%u", theParticleSystem->mParticleHolder->mEmitters.DataArrayGetID(theParticleEmitter)); + std::string aIDStr = + StrFormat("%u", theParticleSystem->mParticleHolder->mEmitters.DataArrayGetID(theParticleEmitter)); int aEmitterDefIndex = 0; if (theContext.mReading) { @@ -257,7 +258,8 @@ void SyncParticleEmitter(TodParticleSystem *theParticleSystem, TodParticleEmitte theContext.SyncImage(theParticleEmitter->mImageOverride, StrFormat("ParticleEmitter_%s", aIDStr.c_str())); SyncDataIDList((TodList *)&theParticleEmitter->mParticleList, theContext, - &theParticleSystem->mParticleHolder->mParticleListNodeAllocator, StrFormat("ParticleEmitter_%s", aIDStr.c_str())); + &theParticleSystem->mParticleHolder->mParticleListNodeAllocator, + StrFormat("ParticleEmitter_%s", aIDStr.c_str())); for (TodListNode *aNode = theParticleEmitter->mParticleList.mHead; aNode != nullptr; aNode = aNode->mNext) { @@ -272,7 +274,8 @@ void SyncParticleEmitter(TodParticleSystem *theParticleSystem, TodParticleEmitte void SyncParticleSystem(Board *theBoard, TodParticleSystem *theParticleSystem, SaveContext &theContext) { - std::string aIDStr = StrFormat("%u", theBoard->mApp->mEffectSystem->mParticleHolder->mParticleSystems.DataArrayGetID(theParticleSystem)); + std::string aIDStr = StrFormat( + "%u", theBoard->mApp->mEffectSystem->mParticleHolder->mParticleSystems.DataArrayGetID(theParticleSystem)); theContext.SyncParticleDef(theParticleSystem->mParticleDef, StrFormat("ParticleSystem_%s", aIDStr.c_str())); if (theContext.mReading) @@ -294,7 +297,8 @@ void SyncParticleSystem(Board *theBoard, TodParticleSystem *theParticleSystem, S void SyncReanimation(Board *theBoard, Reanimation *theReanimation, SaveContext &theContext) { - std::string aIDStr = StrFormat("%u", theBoard->mApp->mEffectSystem->mReanimationHolder->mReanimations.DataArrayGetID(theReanimation)); + std::string aIDStr = StrFormat( + "%u", theBoard->mApp->mEffectSystem->mReanimationHolder->mReanimations.DataArrayGetID(theReanimation)); theContext.SyncReanimationDef(theReanimation->mDefinition, StrFormat("Reanimation_%s", aIDStr.c_str())); if (theContext.mReading) { @@ -308,12 +312,14 @@ void SyncReanimation(Board *theBoard, Reanimation *theReanimation, SaveContext & { theReanimation->mTrackInstances = (ReanimatorTrackInstance *)FindGlobalAllocator(aSize)->Calloc(aSize); } - theContext.SyncBytes(theReanimation->mTrackInstances, aSize, StrFormat("Reanimation_%s_Tracks", aIDStr.c_str())); + theContext.SyncBytes(theReanimation->mTrackInstances, aSize, + StrFormat("Reanimation_%s_Tracks", aIDStr.c_str())); for (int aTrackIndex = 0; aTrackIndex < theReanimation->mDefinition->mTrackCount; aTrackIndex++) { ReanimatorTrackInstance &aTrackInstance = theReanimation->mTrackInstances[aTrackIndex]; - theContext.SyncImage(aTrackInstance.mImageOverride, StrFormat("Reanimation_%s_Track[%d]", aIDStr.c_str(), aTrackIndex)); + theContext.SyncImage(aTrackInstance.mImageOverride, + StrFormat("Reanimation_%s_Track[%d]", aIDStr.c_str(), aTrackIndex)); if (theContext.mReading) { @@ -333,7 +339,9 @@ void SyncReanimation(Board *theBoard, Reanimation *theReanimation, SaveContext & void SyncTrail(Board *theBoard, Trail *theTrail, SaveContext &theContext) { - theContext.SyncTrailDef(theTrail->mDefinition, StrFormat("Trail_%u", theBoard->mApp->mEffectSystem->mTrailHolder->mTrails.DataArrayGetID(theTrail))); + theContext.SyncTrailDef( + theTrail->mDefinition, + StrFormat("Trail_%u", theBoard->mApp->mEffectSystem->mTrailHolder->mTrails.DataArrayGetID(theTrail))); if (theContext.mReading) { theTrail->mTrailHolder = theBoard->mApp->mEffectSystem->mTrailHolder; @@ -367,20 +375,20 @@ void SaveContext::LoadScheme(std::string thePath) aSeparatedLine.push_back(aLine.substr(start)); size_t aCurrentIndex = 0; std::string aVarName = "VAL_UNKNOWN"; - for (auto& aValue : aSeparatedLine) + for (auto &aValue : aSeparatedLine) { switch (aCurrentIndex) { - case 0: - aVarName = aValue; - break; - case 1: - sscanf(aValue.c_str(), "%zu", &anEntry.mOffset); - break; - case 2: - sscanf(aValue.c_str(), "%zu", &anEntry.mSize); - aCurrentIndex = -1; - break; + case 0: + aVarName = aValue; + break; + case 1: + sscanf(aValue.c_str(), "%zu", &anEntry.mOffset); + break; + case 2: + sscanf(aValue.c_str(), "%zu", &anEntry.mSize); + aCurrentIndex = -1; + break; } aCurrentIndex++; } @@ -388,9 +396,9 @@ void SaveContext::LoadScheme(std::string thePath) } } - #define SYNC_VAR(name) theContext.SyncVar(name, #name) #define SYNC_ARRAY(name) theContext.SyncBytes(name, sizeof(name), #name) +#define SYNC_STD_ARRAY(name) theContext.SyncBytes(name.data(), name.size(), #name) #define SYNC_CLASS(obj) theContext.SyncBytes(obj, sizeof(*obj), #obj) #define SYNC_DATA_ARRAY(type, arr) \ theContext.SyncVar(arr.mMaxUsedCount, #arr ".mMaxUsedCount"); \ @@ -398,16 +406,16 @@ void SaveContext::LoadScheme(std::string thePath) theContext.SyncVar(arr.mSize, #arr ".mSize"); \ theContext.SyncBytes(arr.mBlock, sizeof(DataArray::DataArrayItem) * arr.mMaxUsedCount, #arr ".mBlock"); -#define SYNC_GAMEOBJECT(obj) \ - theContext.SyncVar(obj->mX, #obj "->mX"); \ - theContext.SyncVar(obj->mY, #obj "->mY"); \ - theContext.SyncVar(obj->mWidth, #obj "->mWidth"); \ - theContext.SyncVar(obj->mHeight, #obj "->mHeight"); \ - theContext.SyncVar(obj->mVisible, #obj "->mVisible"); \ - theContext.SyncVar(obj->mRow, #obj "->mRow"); \ - theContext.SyncVar(obj->mRenderOrder, #obj "->mRenderOrder"); \ +#define SYNC_GAMEOBJECT(obj) \ + theContext.SyncVar(obj->mX, #obj "->mX"); \ + theContext.SyncVar(obj->mY, #obj "->mY"); \ + theContext.SyncVar(obj->mWidth, #obj "->mWidth"); \ + theContext.SyncVar(obj->mHeight, #obj "->mHeight"); \ + theContext.SyncVar(obj->mVisible, #obj "->mVisible"); \ + theContext.SyncVar(obj->mRow, #obj "->mRow"); \ + theContext.SyncVar(obj->mRenderOrder, #obj "->mRenderOrder"); -void LawnSyncGame(Board* theBoard, SaveContext &theContext) +void LawnSyncGame(Board *theBoard, SaveContext &theContext) { SYNC_ARRAY(theBoard->mGridSquareType); @@ -601,14 +609,14 @@ void LawnSyncGame(Board* theBoard, SaveContext &theContext) SYNC_VAR(theBoard->mSeedBank->mAxisProgress); #endif - SYNC_ARRAY(theBoard->mAdvice->mLabel); + SYNC_STD_ARRAY(theBoard->mAdvice->mLabel); SYNC_VAR(theBoard->mAdvice->mDisplayTime); SYNC_VAR(theBoard->mAdvice->mDuration); SYNC_VAR(theBoard->mAdvice->mMessageStyle); - SYNC_ARRAY(theBoard->mAdvice->mTextReanimID); + SYNC_STD_ARRAY(theBoard->mAdvice->mTextReanimID); SYNC_VAR(theBoard->mAdvice->mReanimType); SYNC_VAR(theBoard->mAdvice->mSlideOffTime); - SYNC_ARRAY(theBoard->mAdvice->mLabelNext); + SYNC_STD_ARRAY(theBoard->mAdvice->mLabelNext); SYNC_VAR(theBoard->mAdvice->mMessageStyleNext); SYNC_VAR(theBoard->mCursorPreview->mGridX); diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index 983df83..5ee53e9 100644 --- a/src/LawnApp.cpp +++ b/src/LawnApp.cpp @@ -727,9 +727,8 @@ void LawnApp::DoPauseDialog() mBoard->Pause(true); //FinishModelessDialogs(); - LawnDialog *aDialog = - (LawnDialog *)DoDialog(Dialogs::DIALOG_PAUSED, true, "GAME PAUSED" /*"[GAME_PAUSED]"*/, "Click to resume game", - "Resume Game" /*"[RESUME_GAME]"*/, Dialog::BUTTONS_FOOTER); + LawnDialog *aDialog = (LawnDialog *)DoDialog(Dialogs::DIALOG_PAUSED, true, "[GAME_PAUSED]", "[CLICK_TO_RESUME]", + "[RESUME_GAME]", Dialog::BUTTONS_FOOTER); aDialog->mReanimation->AddReanimation(72.0f, 42.0f, ReanimationType::REANIM_ZOMBIE_NEWSPAPER); aDialog->mSpaceAfterHeader = 155; @@ -2937,7 +2936,7 @@ void LawnApp::DrawCrazyDave(Graphics *g) DrawStringJustification::DS_ALIGN_CENTER_VERTICAL_MIDDLE); if (clickToContinue) { - TodDrawString(g, "click to continue", aPosX + 139, aPosY + 140, FONT_PICO129, Color::Black, + TodDrawString(g, "[CLICK_TO_CONTINUE]", aPosX + 139, aPosY + 140, FONT_PICO129, Color::Black, DrawStringJustification::DS_ALIGN_CENTER); } } From f103c825a0914fbb461752ecf85c3cbc37a2e915 Mon Sep 17 00:00:00 2001 From: Michael Zhao <44533763+Pistonight@users.noreply.github.com> Date: Sun, 21 Jun 2026 00:06:14 -0700 Subject: [PATCH 08/30] fix: Buffer.cpp ToUTF8String should accept string without BOM --- src/SexyAppFramework/Buffer.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/SexyAppFramework/Buffer.cpp b/src/SexyAppFramework/Buffer.cpp index 6460035..d8e7a94 100644 --- a/src/SexyAppFramework/Buffer.cpp +++ b/src/SexyAppFramework/Buffer.cpp @@ -8,7 +8,7 @@ static unsigned long crc_table[256]; using namespace Sexy; -static char *gWebEncodeMap = ".-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; +static const char *gWebEncodeMap = ".-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; static int gWebDecodeMap[256] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -205,17 +205,15 @@ bool Buffer::ToUTF8String(std::string *theString) const { // UTF-8 BOM: strip it *theString = std::string(aData + 3, aLen - 3); - return true; } else { // no BOM: just copy as-is *theString = std::string(aData, aLen); } - - return false; -} + return true; +} void Buffer::FromWebString(const std::string &theString) { From 3b734e710db762361a83726f7ffa9504178215ad Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Sun, 21 Jun 2026 19:04:21 +0300 Subject: [PATCH 09/30] fixed Potato Mine unlocking Spudow in IZombie --- src/Lawn/Plant.cpp | 3 ++- src/LawnApp.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Lawn/Plant.cpp b/src/Lawn/Plant.cpp index 9f3fded..dbeea01 100644 --- a/src/Lawn/Plant.cpp +++ b/src/Lawn/Plant.cpp @@ -4536,7 +4536,8 @@ void Plant::DoSpecial() mApp->PlaySample(SOUND_POTATO_MINE); mBoard->KillAllZombiesInRadius(mRow, aPosX, aPosY, 60, 0, false, aDamageRangeFlags); - mApp->mAchievements->GiveAchievement(AchievementID::ACHIEVEMENT_SPUDOW); + if (!mApp->IsIZombieLevel()) + mApp->mAchievements->GiveAchievement(AchievementID::ACHIEVEMENT_SPUDOW); int aRenderPosition = Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_PARTICLE, mRow, 0); mApp->AddTodParticle(aPosX + 20.0f, aPosY, aRenderPosition, ParticleEffect::PARTICLE_POTATO_MINE); diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index 983df83..d928e0b 100644 --- a/src/LawnApp.cpp +++ b/src/LawnApp.cpp @@ -64,7 +64,7 @@ #endif //Do not edit this. - Electr0Gunner -Version LawnApp::gResoddedVersion(1, 1, 0, 1032); +Version LawnApp::gResoddedVersion(1, 1, 0, 1033); bool gIsPartnerBuild = false; bool gSlowMo = false; From e5ff398712e9f1246326073bd92321c3f73bc3ad Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Sun, 21 Jun 2026 19:35:41 +0300 Subject: [PATCH 10/30] redid the formatting file --- .clang-format | 8 +- src/Lawn/Board.cpp | 945 ++++----- src/Lawn/Challenge.cpp | 328 ++-- src/Lawn/Coin.cpp | 125 +- src/Lawn/CursorObject.cpp | 42 +- src/Lawn/CutScene.cpp | 178 +- src/Lawn/GridItem.cpp | 14 +- src/Lawn/LawnCommon.cpp | 14 +- src/Lawn/LawnMower.cpp | 36 +- src/Lawn/MessageWidget.cpp | 16 +- src/Lawn/Plant.cpp | 444 ++--- src/Lawn/Projectile.cpp | 98 +- src/Lawn/ResoddedFramework/DebuggerWindow.cpp | 1681 +++++++++-------- src/Lawn/ResoddedFramework/SettingsDialog.cpp | 203 +- src/Lawn/ResoddedFramework/UpdateChecker.cpp | 22 +- src/Lawn/SeedPacket.cpp | 108 +- src/Lawn/System/Achievements.cpp | 48 +- src/Lawn/System/Music.cpp | 34 +- src/Lawn/System/PlayerInfo.cpp | 71 +- src/Lawn/System/PoolEffect.cpp | 26 +- src/Lawn/System/PopDRMComm.cpp | 2 +- src/Lawn/System/ProfileMgr.cpp | 7 +- src/Lawn/System/ReanimationLawn.cpp | 158 +- src/Lawn/System/SaveGame.cpp | 73 +- src/Lawn/ToolTipWidget.cpp | 4 +- src/Lawn/Widget/AchievementsWidget.cpp | 10 +- src/Lawn/Widget/AlmanacDialog.cpp | 100 +- src/Lawn/Widget/AwardScreen.cpp | 53 +- src/Lawn/Widget/ChallengeScreen.cpp | 222 +-- src/Lawn/Widget/CheatDialog.cpp | 24 +- src/Lawn/Widget/ContinueDialog.cpp | 44 +- src/Lawn/Widget/CreditScreen.cpp | 738 ++++---- src/Lawn/Widget/GameButton.cpp | 27 +- src/Lawn/Widget/GameSelector.cpp | 313 +-- src/Lawn/Widget/ImitaterDialog.cpp | 16 +- src/Lawn/Widget/LawnDialog.cpp | 56 +- src/Lawn/Widget/NewOptionsDialog.cpp | 57 +- src/Lawn/Widget/SeedChooserScreen.cpp | 76 +- src/Lawn/Widget/TitleScreen.cpp | 26 +- src/Lawn/Widget/ZombatarTOS.cpp | 7 +- src/Lawn/Widget/ZombatarWidget.cpp | 1674 ++++++++-------- src/Lawn/ZenGarden.cpp | 241 ++- src/Lawn/Zombie.cpp | 813 ++++---- 43 files changed, 4652 insertions(+), 4530 deletions(-) diff --git a/.clang-format b/.clang-format index e7c90f4..168979b 100644 --- a/.clang-format +++ b/.clang-format @@ -1,7 +1,8 @@ --- Language: Cpp BasedOnStyle: Microsoft -UseTab: Always +UseTab: ForIndentation +TabWidth: 4 SortIncludes: false ReflowComments: false AllowShortFunctionsOnASingleLine: false @@ -9,5 +10,6 @@ BinPackParameters: true BinPackArguments: true AlignConsecutiveAssignments: false AlignConsecutiveDeclarations: false -AlignArrayOfStructures: None -BreakArrays: false \ No newline at end of file +AlignArrayOfStructures: Left +Cpp11BracedListStyle: false +ColumnLimit: 0 \ No newline at end of file diff --git a/src/Lawn/Board.cpp b/src/Lawn/Board.cpp index acb7aa1..548c96d 100644 --- a/src/Lawn/Board.cpp +++ b/src/Lawn/Board.cpp @@ -206,7 +206,7 @@ Board::Board(LawnApp *theApp) #endif if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) { mMenuButton->SetLabel("[MAIN_MENU_BUTTON]"); mMenuButton->Resize(628, -10, 163, 46); @@ -340,7 +340,7 @@ int Board::CountUntriggerLawnMowers() while (IterateLawnMowers(aLawnMower)) { if (aLawnMower->mMowerState != LawnMowerState::MOWER_TRIGGERED && - aLawnMower->mMowerState != LawnMowerState::MOWER_SQUISHED) + aLawnMower->mMowerState != LawnMowerState::MOWER_SQUISHED) { aCount++; } @@ -371,8 +371,8 @@ void Board::TryToSaveGame() bool Board::NeedSaveGame() { return mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ICE && mApp->mGameMode != GameMode::GAMEMODE_UPSELL && - mApp->mGameMode != GameMode::GAMEMODE_INTRO && mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN && - mApp->mGameMode != GameMode::GAMEMODE_TREE_OF_WISDOM && mApp->mGameScene == GameScenes::SCENE_PLAYING; + mApp->mGameMode != GameMode::GAMEMODE_INTRO && mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN && + mApp->mGameMode != GameMode::GAMEMODE_TREE_OF_WISDOM && mApp->mGameScene == GameScenes::SCENE_PLAYING; } void Board::SaveGame(const std::string &theFileName) @@ -407,7 +407,7 @@ GridItem *Board::GetGridItemAt(GridItemType theGridItemType, int theGridX, int t while (IterateGridItems(aGridItem)) { if (aGridItem->mGridX == theGridX && aGridItem->mGridY == theGridY && - aGridItem->mGridItemType == theGridItemType) + aGridItem->mGridItemType == theGridItemType) { return aGridItem; } @@ -461,7 +461,7 @@ GridItem *Board::GetZenToolAt(int theGridX, int theGridY) bool Board::CanAddGraveStoneAt(int theGridX, int theGridY) { if (mGridSquareType[theGridX][theGridY] != GridSquareType::GRIDSQUARE_GRASS && - mGridSquareType[theGridX][theGridY] != GridSquareType::GRIDSQUARE_HIGH_GROUND) + mGridSquareType[theGridX][theGridY] != GridSquareType::GRIDSQUARE_HIGH_GROUND) { return false; } @@ -472,8 +472,8 @@ bool Board::CanAddGraveStoneAt(int theGridX, int theGridY) if (aGridItem->mGridX == theGridX && aGridItem->mGridY == theGridY) { if (aGridItem->mGridItemType == GridItemType::GRIDITEM_GRAVESTONE || - aGridItem->mGridItemType == GridItemType::GRIDITEM_CRATER || - aGridItem->mGridItemType == GridItemType::GRIDITEM_LADDER) + aGridItem->mGridItemType == GridItemType::GRIDITEM_CRATER || + aGridItem->mGridItemType == GridItemType::GRIDITEM_LADDER) return false; } } @@ -589,10 +589,10 @@ void Board::PutZombieInWave(ZombieType theZombieType, int theWaveNumber, ZombieP void Board::PutInMissingZombies(int theWaveNumber, ZombiePicker *theZombiePicker) { for (ZombieType aZombieType = ZombieType::ZOMBIE_NORMAL; aZombieType < ZombieType::NUM_ZOMBIE_TYPES; - aZombieType = (ZombieType)((int)aZombieType + 1)) + aZombieType = (ZombieType)((int)aZombieType + 1)) { if (theZombiePicker->mZombieTypeCount[(int)aZombieType] <= 0 && aZombieType != ZombieType::ZOMBIE_YETI && - CanZombieSpawnOnLevel(aZombieType, mLevel)) + CanZombieSpawnOnLevel(aZombieType, mLevel)) { PutZombieInWave(aZombieType, theWaveNumber, theZombiePicker); } @@ -622,23 +622,23 @@ void Board::PickZombieWaves() if (mApp->IsSurvivalMode() || aGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND) mNumWaves = GetNumWavesPerSurvivalStage(); else if (aGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - aGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || mApp->IsSquirrelLevel()) + aGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || mApp->IsSquirrelLevel()) mNumWaves = 0; else if (aGameMode == GameMode::GAMEMODE_CHALLENGE_WHACK_A_ZOMBIE) mNumWaves = 12; else if (aGameMode == GameMode::GAMEMODE_CHALLENGE_WALLNUT_BOWLING || - aGameMode == GameMode::GAMEMODE_CHALLENGE_AIR_RAID || - aGameMode == GameMode::GAMEMODE_CHALLENGE_GRAVE_DANGER || - aGameMode == GameMode::GAMEMODE_CHALLENGE_HIGH_GRAVITY || - aGameMode == GameMode::GAMEMODE_CHALLENGE_PORTAL_COMBAT || - aGameMode == GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS || - aGameMode == GameMode::GAMEMODE_CHALLENGE_INVISIGHOUL) + aGameMode == GameMode::GAMEMODE_CHALLENGE_AIR_RAID || + aGameMode == GameMode::GAMEMODE_CHALLENGE_GRAVE_DANGER || + aGameMode == GameMode::GAMEMODE_CHALLENGE_HIGH_GRAVITY || + aGameMode == GameMode::GAMEMODE_CHALLENGE_PORTAL_COMBAT || + aGameMode == GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS || + aGameMode == GameMode::GAMEMODE_CHALLENGE_INVISIGHOUL) mNumWaves = 20; else if (mApp->IsStormyNightLevel() || mApp->IsLittleTroubleLevel() || mApp->IsBungeeBlitzLevel() || - aGameMode == GameMode::GAMEMODE_CHALLENGE_COLUMN || mApp->IsShovelLevel() || - aGameMode == GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS_2 || - aGameMode == GameMode::GAMEMODE_CHALLENGE_WALLNUT_BOWLING_2 || - aGameMode == GameMode::GAMEMODE_CHALLENGE_POGO_PARTY) + aGameMode == GameMode::GAMEMODE_CHALLENGE_COLUMN || mApp->IsShovelLevel() || + aGameMode == GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS_2 || + aGameMode == GameMode::GAMEMODE_CHALLENGE_WALLNUT_BOWLING_2 || + aGameMode == GameMode::GAMEMODE_CHALLENGE_POGO_PARTY) mNumWaves = 30; else mNumWaves = 40; @@ -690,7 +690,7 @@ void Board::PickZombieWaves() aZombiePoints *= 2.5f; if (mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS && - mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS_2) + mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS_2) { for (int _i = 0; _i < aPlainZombiesNum; _i++) { @@ -717,8 +717,8 @@ void Board::PickZombieWaves() aZombiePoints *= 3; } else if (mApp->IsShovelLevel() || mApp->IsBungeeBlitzLevel() || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_PORTAL_COMBAT || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_INVISIGHOUL) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_PORTAL_COMBAT || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_INVISIGHOUL) { aZombiePoints *= 2; } @@ -1019,7 +1019,7 @@ void Board::PickBackground() LoadBackgroundImages(); if (mBackground == BackgroundType::BACKGROUND_1_DAY || mBackground == BackgroundType::BACKGROUND_GREENHOUSE || - mBackground == BackgroundType::BACKGROUND_TREEOFWISDOM) + mBackground == BackgroundType::BACKGROUND_TREEOFWISDOM) { mPlantRow[0] = PlantRowType::PLANTROW_NORMAL; mPlantRow[1] = PlantRowType::PLANTROW_NORMAL; @@ -1059,7 +1059,7 @@ void Board::PickBackground() mPlantRow[5] = PlantRowType::PLANTROW_DIRT; } else if (mBackground == BackgroundType::BACKGROUND_3_POOL || - mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM || mBackground == BackgroundType::BACKGROUND_4_FOG) + mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM || mBackground == BackgroundType::BACKGROUND_4_FOG) { mPlantRow[0] = PlantRowType::PLANTROW_NORMAL; mPlantRow[1] = PlantRowType::PLANTROW_NORMAL; @@ -1191,7 +1191,7 @@ bool Board::IsZombieWaveDistributionOk() if (!mApp->IsAdventureMode()) return true; - int aZombieTypeCount[(int)ZombieType::NUM_ZOMBIE_TYPES] = {0}; + int aZombieTypeCount[(int)ZombieType::NUM_ZOMBIE_TYPES] = { 0 }; for (int aWave = 0; aWave < mNumWaves; aWave++) { for (int aIndex = 0; aIndex < MAX_ZOMBIES_IN_WAVE; aIndex++) @@ -1208,13 +1208,13 @@ bool Board::IsZombieWaveDistributionOk() } for (ZombieType aZombieType = ZombieType::ZOMBIE_NORMAL; aZombieType < ZombieType::NUM_ZOMBIE_TYPES; - aZombieType = (ZombieType)((int)aZombieType + 1)) + aZombieType = (ZombieType)((int)aZombieType + 1)) { if (aZombieType != ZombieType::ZOMBIE_YETI && CanZombieSpawnOnLevel(aZombieType, mLevel) && - aZombieTypeCount[(int)aZombieType] == 0) + aZombieTypeCount[(int)aZombieType] == 0) { TodTraceAndLog("[LawnProject] - Didn't spawn required zombie %s, level %d", - GetZombieDefinition(aZombieType).mZombieName, mLevel); + GetZombieDefinition(aZombieType).mZombieName, mLevel); return false; } } @@ -1342,7 +1342,7 @@ void Board::GetZenButtonRect(GameObjectType theObjectType, Rect &theRect) theRect.mX = 30; bool usable = true; for (int anObject = GameObjectType::OBJECT_TYPE_WATERING_CAN; anObject <= GameObjectType::OBJECT_TYPE_NEXT_GARDEN; - anObject++) + anObject++) { if (!CanUseGameObject((GameObjectType)anObject)) { @@ -1380,8 +1380,8 @@ void Board::InitLevel() PickBackground(); InitZombieWaves(); if (aGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - aGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || mApp->IsScaryPotterLevel() || - mApp->IsWhackAZombieLevel()) + aGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || mApp->IsScaryPotterLevel() || + mApp->IsWhackAZombieLevel()) { mSunMoney = 0; } @@ -1548,7 +1548,7 @@ void Board::InitLevel() mSeedBank->mSeedPackets[0].SetPacketType(SeedType::SEED_POTATOMINE); mSeedBank->mSeedPackets[1].SetPacketType(SeedType::SEED_GRAVEBUSTER); mSeedBank->mSeedPackets[2].SetPacketType(mApp->IsAdventureMode() ? SeedType::SEED_CHERRYBOMB - : SeedType::SEED_ICESHROOM); + : SeedType::SEED_ICESHROOM); } else if (!ChooseSeedsOnCurrentLevel() && !HasConveyorBeltSeedBank()) { @@ -1573,7 +1573,7 @@ void Board::InitLevel() Reanimation *Board::CreateRakeReanim(float theRakeX, float theRakeY, int theRenderOrder) { Reanimation *aReanim = mApp->AddReanimation(GridToPixelX(theRakeX, theRakeY) + 20, GridToPixelY(theRakeX, theRakeY), - theRenderOrder, REANIM_RAKE); + theRenderOrder, REANIM_RAKE); aReanim->mAnimRate = 0; aReanim->mLoopType = ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD; aReanim->mIsAttachment = true; @@ -1592,7 +1592,7 @@ void Board::PlaceRake() while (IterateGridItems(aGridItem)) { if (aGridItem->mGridItemType == GridItemType::GRIDITEM_SCARY_POT && aGridItem->mGridX <= aGridX && - aGridItem->mGridX > 0) + aGridItem->mGridX > 0) { aGridX = aGridItem->mGridX - 1; } @@ -1601,8 +1601,8 @@ void Board::PlaceRake() else { if (!StageHasZombieWalkInFromRight() || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BOBSLED_BONANZA) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BOBSLED_BONANZA) return; } @@ -1637,18 +1637,18 @@ void Board::InitLawnMowers() { GameMode aGameMode = mApp->mGameMode; if (aGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - aGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || - aGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || aGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || - aGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND || - aGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || mApp->IsSquirrelLevel() || mApp->IsIZombieLevel() || - (StageHasRoof() && !mApp->mPlayerInfo->mPurchases[StoreItem::STORE_ITEM_ROOF_CLEANER])) + aGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || + aGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || aGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || + aGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND || + aGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || mApp->IsSquirrelLevel() || mApp->IsIZombieLevel() || + (StageHasRoof() && !mApp->mPlayerInfo->mPurchases[StoreItem::STORE_ITEM_ROOF_CLEANER])) return; for (int aRow = 0; aRow < MAX_GRID_SIZE_Y; aRow++) { if ((aGameMode == GameMode::GAMEMODE_CHALLENGE_RESODDED && aRow <= 4) || - (mApp->IsAdventureMode() && mLevel == 35) || - (!mApp->IsScaryPotterLevel() && mPlantRow[aRow] != PlantRowType::PLANTROW_DIRT)) + (mApp->IsAdventureMode() && mLevel == 35) || + (!mApp->IsScaryPotterLevel() && mPlantRow[aRow] != PlantRowType::PLANTROW_DIRT)) { LawnMower *aLawnMower = mLawnMowers.DataArrayAlloc(); aLawnMower->LawnMowerInitialize(aRow); @@ -1663,9 +1663,9 @@ bool Board::ChooseSeedsOnCurrentLevel() return false; if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ICE || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM) return false; if (mApp->IsIZombieLevel() || mApp->IsSlotMachineLevel()) @@ -1689,9 +1689,9 @@ void Board::StartLevel() } if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ICE || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || mApp->mGameMode == GameMode::GAMEMODE_UPSELL || - mApp->mGameMode == GameMode::GAMEMODE_INTRO || mApp->IsFinalBossLevel()) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || mApp->mGameMode == GameMode::GAMEMODE_UPSELL || + mApp->mGameMode == GameMode::GAMEMODE_INTRO || mApp->IsFinalBossLevel()) return; mApp->mMusic->StartGameMusic(); @@ -1704,7 +1704,7 @@ LawnMower *Board::GetBottomLawnMower() while (IterateLawnMowers(aLawnMower)) { if (aLawnMower->mMowerState == LawnMowerState::MOWER_TRIGGERED || - aLawnMower->mMowerState == LawnMowerState::MOWER_SQUISHED) + aLawnMower->mMowerState == LawnMowerState::MOWER_SQUISHED) continue; if (aBottomMower == nullptr || aBottomMower->mRow < aLawnMower->mRow) @@ -1779,7 +1779,7 @@ void Board::UpdateLevelEndSequence() if (mBoardFadeOutCounter == 300) { if (!IsSurvivalStageWithRepick() && - !(mLevel == 9 || mLevel == 19 || mLevel == 29 || mLevel == 39 || mLevel == 49)) + !(mLevel == 9 || mLevel == 19 || mLevel == 29 || mLevel == 39 || mLevel == 49)) { mApp->PlaySample(Sexy::SOUND_LIGHTFILL); } @@ -1801,7 +1801,7 @@ void Board::UpdateLevelEndSequence() if (aLawnMower) { AddCoin(aLawnMower->mPosX + 40, aLawnMower->mPosY + 40, CoinType::COIN_GOLD, - CoinMotion::COIN_MOTION_LAWNMOWER_COIN); + CoinMotion::COIN_MOTION_LAWNMOWER_COIN); SoundInstance *aSoundInstance = mApp->mSoundManager->GetSoundInstance(Sexy::SOUND_POINTS); if (aSoundInstance) { @@ -1822,7 +1822,7 @@ void Board::CompleteEndLevelSequenceForSaving() while (IterateLawnMowers(aLawnMower)) { if (aLawnMower->mMowerState != LawnMowerState::MOWER_TRIGGERED && - aLawnMower->mMowerState != LawnMowerState::MOWER_SQUISHED) + aLawnMower->mMowerState != LawnMowerState::MOWER_SQUISHED) { int aCoinValue = Coin::GetCoinValue(CoinType::COIN_GOLD); mApp->mPlayerInfo->AddCoins(aCoinValue); @@ -1893,7 +1893,7 @@ void Board::FadeOutLevel() { mLevelAwardSpawned = true; SexyString aStreakStr = - mApp->IsEndlessScaryPotter(mApp->mGameMode) ? "[ADVICE_MORE_SCARY_POTS]" : "[ADVICE_3_IN_A_ROW]"; + mApp->IsEndlessScaryPotter(mApp->mGameMode) ? "[ADVICE_MORE_SCARY_POTS]" : "[ADVICE_3_IN_A_ROW]"; SexyString aMessage = TodReplaceNumberString(aStreakStr, "{STREAK}", mChallenge->mSurvivalStage + 1); PuzzleSaveStreak(); ClearAdvice(AdviceType::ADVICE_NONE); @@ -1906,7 +1906,7 @@ void Board::FadeOutLevel() { mNextSurvivalStageCounter = 500; SexyString aMessage = - TodReplaceNumberString("[ADVICE_MORE_IZOMBIE]", "{STREAK}", mChallenge->mSurvivalStage + 1); + TodReplaceNumberString("[ADVICE_MORE_IZOMBIE]", "{STREAK}", mChallenge->mSurvivalStage + 1); PuzzleSaveStreak(); ClearAdvice(AdviceType::ADVICE_NONE); DisplayAdvice(aMessage, MessageStyle::MESSAGE_STYLE_BIG_MIDDLE, AdviceType::ADVICE_NONE); @@ -2003,7 +2003,7 @@ Coin *Board::AddCoin(int theX, int theY, CoinType theCoinType, CoinMotion theCoi if (mApp->IsFirstTimeAdventureMode() && mLevel == 1) { DisplayAdvice("[ADVICE_CLICK_ON_SUN]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL1_STAY, - AdviceType::ADVICE_CLICK_ON_SUN); + AdviceType::ADVICE_CLICK_ON_SUN); } return aCoin; } @@ -2011,10 +2011,10 @@ Coin *Board::AddCoin(int theX, int theY, CoinType theCoinType, CoinMotion theCoi bool Board::IsPlantInCursor() { return mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_BANK || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_USABLE_COIN || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_GLOVE || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_DUPLICATOR || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_WHEEL_BARROW; + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_USABLE_COIN || + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_GLOVE || + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_DUPLICATOR || + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_WHEEL_BARROW; } SeedType Board::GetSeedTypeInCursor() @@ -2120,8 +2120,8 @@ Plant *Board::AddPlant(int theGridX, int theGridY, SeedType theSeedType, SeedTyp if (StageHasPool() && !StageIsNight()) { if (aActualType == SeedType::SEED_PEASHOOTER || aActualType == SeedType::SEED_REPEATER || - aActualType == SeedType::SEED_THREEPEATER || aActualType == SeedType::SEED_GATLINGPEA || - aActualType == SeedType::SEED_SNOWPEA || aActualType == SeedType::SEED_SPLITPEA) + aActualType == SeedType::SEED_THREEPEATER || aActualType == SeedType::SEED_GATLINGPEA || + aActualType == SeedType::SEED_SNOWPEA || aActualType == SeedType::SEED_SPLITPEA) { mDontPeaUsedPeashooter = true; } @@ -2130,17 +2130,17 @@ Plant *Board::AddPlant(int theGridX, int theGridY, SeedType theSeedType, SeedTyp if (StageHasRoof() && !StageIsNight()) { if (aActualType == SeedType::SEED_CABBAGEPULT || aActualType == SeedType::SEED_KERNELPULT || - aActualType == SeedType::SEED_MELONPULT || aActualType == SeedType::SEED_WINTERMELON) + aActualType == SeedType::SEED_MELONPULT || aActualType == SeedType::SEED_WINTERMELON) { mGroundedUsedCatapult = true; } } bool aIsMushroom = (aActualType == SeedType::SEED_PUFFSHROOM || aActualType == SeedType::SEED_SUNSHROOM || - aActualType == SeedType::SEED_FUMESHROOM || aActualType == SeedType::SEED_HYPNOSHROOM || - aActualType == SeedType::SEED_SCAREDYSHROOM || aActualType == SeedType::SEED_ICESHROOM || - aActualType == SeedType::SEED_DOOMSHROOM || aActualType == SeedType::SEED_SEASHROOM || - aActualType == SeedType::SEED_GLOOMSHROOM || aActualType == SeedType::SEED_MAGNETSHROOM); + aActualType == SeedType::SEED_FUMESHROOM || aActualType == SeedType::SEED_HYPNOSHROOM || + aActualType == SeedType::SEED_SCAREDYSHROOM || aActualType == SeedType::SEED_ICESHROOM || + aActualType == SeedType::SEED_DOOMSHROOM || aActualType == SeedType::SEED_SEASHROOM || + aActualType == SeedType::SEED_GLOOMSHROOM || aActualType == SeedType::SEED_MAGNETSHROOM); if (!StageIsNight() && !StageHasPool() && !StageHasRoof()) { @@ -2178,7 +2178,7 @@ Plant *Board::GetPumpkinAt(int theGridX, int theGridY) while (IteratePlants(aPlant)) { if (aPlant->mPlantCol == theGridX && aPlant->mRow == theGridY && !aPlant->NotOnGround() && - aPlant->mSeedType == SeedType::SEED_PUMPKINSHELL) + aPlant->mSeedType == SeedType::SEED_PUMPKINSHELL) { return aPlant; } @@ -2192,7 +2192,7 @@ Plant *Board::GetFlowerPotAt(int theGridX, int theGridY) while (IteratePlants(aPlant)) { if (aPlant->mPlantCol == theGridX && aPlant->mRow == theGridY && !aPlant->NotOnGround() && - aPlant->mSeedType == SeedType::SEED_FLOWERPOT) + aPlant->mSeedType == SeedType::SEED_FLOWERPOT) { return aPlant; } @@ -2251,7 +2251,7 @@ void Board::GetPlantsOnLawn(int theGridX, int theGridY, PlantsOnLawn *thePlantOn thePlantOnLawn->mFlyingPlant = aPlant; } else if (aSeedType == SeedType::SEED_FLOWERPOT || - (aSeedType == SeedType::SEED_LILYPAD && mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN)) + (aSeedType == SeedType::SEED_LILYPAD && mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN)) { thePlantOnLawn->mUnderPlant = aPlant; } @@ -2361,7 +2361,7 @@ int Board::CountEmptyPotsOrLilies(SeedType theSeedType) while (IteratePlants(aPlant)) { if (aPlant->mSeedType == theSeedType && - !GetTopPlantAt(aPlant->mPlantCol, aPlant->mRow, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION)) + !GetTopPlantAt(aPlant->mPlantCol, aPlant->mRow, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION)) { aCount++; } @@ -2380,7 +2380,7 @@ bool Board::IsValidCobCannonSpotHelper(int theGridX, int theGridY) return true; return mApp->mEasyPlantingCheat && - CanPlantAt(theGridX, theGridY, SeedType::SEED_KERNELPULT) == PlantingReason::PLANTING_OK; + CanPlantAt(theGridX, theGridY, SeedType::SEED_KERNELPULT) == PlantingReason::PLANTING_OK; } bool Board::IsValidCobCannonSpot(int theGridX, int theGridY) @@ -2436,7 +2436,7 @@ ZombieType Board::GetIntroducedZombieType() } for (ZombieType aZombieType = ZombieType::ZOMBIE_NORMAL; aZombieType < ZombieType::NUM_ZOMBIE_TYPES; - aZombieType = (ZombieType)((int)aZombieType + 1)) + aZombieType = (ZombieType)((int)aZombieType + 1)) { const ZombieDefinition &aZombieDef = GetZombieDefinition(aZombieType); if ((aZombieType != ZombieType::ZOMBIE_YETI || mApp->CanSpawnYetis()) && aZombieDef.mStartingLevel == mLevel) @@ -2467,7 +2467,7 @@ ZombieType Board::PickGraveRisingZombieType(int theZombiePoints) ZombieType aZombieType = (ZombieType)aZombieWeightArray[i].mItem; const ZombieDefinition &aZombieDef = GetZombieDefinition(aZombieType); if ((mApp->IsFirstTimeAdventureMode() && mLevel < aZombieDef.mStartingLevel) || - (!mZombieAllowed[aZombieType] && aZombieType != ZombieType::ZOMBIE_NORMAL)) + (!mZombieAllowed[aZombieType] && aZombieType != ZombieType::ZOMBIE_NORMAL)) { aZombieWeightArray[i].mWeight = 0; } @@ -2496,8 +2496,8 @@ ZombieType Board::PickZombieType(int theZombiePoints, int theWaveIndex, ZombiePi } } else if (aGameMode != GameMode::GAMEMODE_CHALLENGE_POGO_PARTY && - aGameMode != GameMode::GAMEMODE_CHALLENGE_BOBSLED_BONANZA && - aGameMode != GameMode::GAMEMODE_CHALLENGE_AIR_RAID) + aGameMode != GameMode::GAMEMODE_CHALLENGE_BOBSLED_BONANZA && + aGameMode != GameMode::GAMEMODE_CHALLENGE_AIR_RAID) { int aFirstAllowedWave = aZombieDef.mFirstAllowedWave; if (mApp->IsSurvivalEndless(aGameMode)) @@ -2519,7 +2519,7 @@ ZombieType Board::PickZombieType(int theZombiePoints, int theWaveIndex, ZombiePi if (aZombieType == ZombieType::ZOMBIE_GARGANTUAR || aZombieType == ZombieType::ZOMBIE_ZAMBONI) { if (theZombiePicker->mZombieTypeCount[aZombieType] >= - TodAnimateCurve(10, 50, aFlags, 2, 50, TodCurves::CURVE_LINEAR)) + TodAnimateCurve(10, 50, aFlags, 2, 50, TodCurves::CURVE_LINEAR)) { continue; } @@ -2529,7 +2529,7 @@ ZombieType Board::PickZombieType(int theZombiePoints, int theWaveIndex, ZombiePi if (IsFlagWave(theWaveIndex)) { if (theZombiePicker->mZombieTypeCount[aZombieType] >= - TodAnimateCurve(14, 100, aFlags, 1, 50, TodCurves::CURVE_LINEAR)) + TodAnimateCurve(14, 100, aFlags, 1, 50, TodCurves::CURVE_LINEAR)) { continue; } @@ -2537,7 +2537,7 @@ ZombieType Board::PickZombieType(int theZombiePoints, int theWaveIndex, ZombiePi else { if (theZombiePicker->mAllWavesZombieTypeCount[aZombieType] >= - TodAnimateCurve(10, 110, aFlags, 1, 50, TodCurves::CURVE_LINEAR)) + TodAnimateCurve(10, 110, aFlags, 1, 50, TodCurves::CURVE_LINEAR)) { continue; } @@ -2574,7 +2574,7 @@ bool Board::RowCanHaveZombieType(int theRow, ZombieType theZombieType) } if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_RESODDED && mPlantRow[theRow] == PlantRowType::PLANTROW_DIRT && - mCurrentWave < 5) + mCurrentWave < 5) { return false; } @@ -2625,7 +2625,7 @@ int Board::PickRowForNewZombie(ZombieType theZombieType) { GridItem *aRake = GetRake(); if (aRake && aRake->mGridItemState == GridItemState::GRIDITEM_STATE_RAKE_ATTRACTING && - RowCanHaveZombieType(aRake->mGridY, theZombieType)) + RowCanHaveZombieType(aRake->mGridY, theZombieType)) { aRake->mGridItemState = GridItemState::GRIDITEM_STATE_RAKE_WAITING; TodUpdateSmoothArrayPick(mRowPickingArray, MAX_GRID_SIZE_Y, aRake->mGridY); @@ -2702,7 +2702,7 @@ Zombie *Board::AddZombieInRow(ZombieType theZombieType, int theRow, int theFromW for (int _i = 0; _i < 3; _i++) { mZombies.DataArrayAlloc()->ZombieInitialize(theRow, ZombieType::ZOMBIE_BOBSLED, false, aZombie, - theFromWave); + theFromWave); } } return aZombie; @@ -2776,7 +2776,7 @@ PlantingReason Board::CanPlantAt(int theGridX, int theGridY, SeedType theSeedTyp if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) { if (aPlantOnLawn.mUnderPlant || aPlantOnLawn.mPumpkinPlant || aPlantOnLawn.mFlyingPlant || - aPlantOnLawn.mNormalPlant) + aPlantOnLawn.mNormalPlant) { return PlantingReason::PLANTING_NOT_HERE; } @@ -2806,8 +2806,8 @@ PlantingReason Board::CanPlantAt(int theGridX, int theGridY, SeedType theSeedTyp } if (!aPlantOnLawn.mNormalPlant || !aPlantOnLawn.mNormalPlant->mIsAsleep || - aPlantOnLawn.mNormalPlant->mWakeUpCounter > 0 || - aPlantOnLawn.mNormalPlant->mOnBungeeState == PlantOnBungeeState::GETTING_GRABBED_BY_BUNGEE) + aPlantOnLawn.mNormalPlant->mWakeUpCounter > 0 || + aPlantOnLawn.mNormalPlant->mOnBungeeState == PlantOnBungeeState::GETTING_GRABBED_BY_BUNGEE) { return PlantingReason::PLANTING_NEEDS_SLEEPING; } @@ -2846,7 +2846,7 @@ PlantingReason Board::CanPlantAt(int theGridX, int theGridY, SeedType theSeedTyp } Plant *aNormalPlant = aPlantOnLawn.mNormalPlant; if (theSeedType == SeedType::SEED_LILYPAD || theSeedType == SeedType::SEED_TANGLEKELP || - theSeedType == SeedType::SEED_SEASHROOM) + theSeedType == SeedType::SEED_SEASHROOM) { if (!IsPoolSquare(theGridX, theGridY)) { @@ -2870,7 +2870,7 @@ PlantingReason Board::CanPlantAt(int theGridX, int theGridY, SeedType theSeedTyp if (aGridSquare == GridSquareType::GRIDSQUARE_POOL && !aHasLilypad && theSeedType != SeedType::SEED_CATTAIL) { if (!aNormalPlant || aNormalPlant->mSeedType != SeedType::SEED_CATTAIL || - theSeedType != SeedType::SEED_PUMPKINSHELL) + theSeedType != SeedType::SEED_PUMPKINSHELL) { return PlantingReason::PLANTING_NOT_ON_WATER; } @@ -2878,7 +2878,7 @@ PlantingReason Board::CanPlantAt(int theGridX, int theGridY, SeedType theSeedTyp if (theSeedType == SeedType::SEED_FLOWERPOT) { return (aNormalPlant || aUnderPlant || aPumpkinPlant) ? PlantingReason::PLANTING_NOT_HERE - : PlantingReason::PLANTING_OK; + : PlantingReason::PLANTING_OK; } if (StageHasRoof() && !aHasFlowerPot) { @@ -2896,8 +2896,8 @@ PlantingReason Board::CanPlantAt(int theGridX, int theGridY, SeedType theSeedTyp return PlantingReason::PLANTING_OK; } if (aAidPurchased && aPumpkinPlant->mPlantHealth < aPumpkinPlant->mPlantMaxHealth * 2 / 3 && - aPumpkinPlant->mSeedType == SeedType::SEED_PUMPKINSHELL && - aPumpkinPlant->mOnBungeeState != PlantOnBungeeState::GETTING_GRABBED_BY_BUNGEE) + aPumpkinPlant->mSeedType == SeedType::SEED_PUMPKINSHELL && + aPumpkinPlant->mOnBungeeState != PlantOnBungeeState::GETTING_GRABBED_BY_BUNGEE) { return PlantingReason::PLANTING_OK; } @@ -2918,7 +2918,7 @@ PlantingReason Board::CanPlantAt(int theGridX, int theGridY, SeedType theSeedTyp return PlantingReason::PLANTING_NOT_HERE; } if (aUnderPlant->IsUpgradableTo(theSeedType) && - aUnderPlant->mOnBungeeState != PlantOnBungeeState::GETTING_GRABBED_BY_BUNGEE) + aUnderPlant->mOnBungeeState != PlantOnBungeeState::GETTING_GRABBED_BY_BUNGEE) { return PlantingReason::PLANTING_OK; } @@ -2939,7 +2939,7 @@ PlantingReason Board::CanPlantAt(int theGridX, int theGridY, SeedType theSeedTyp if (aNormalPlant) { if (aNormalPlant->IsUpgradableTo(theSeedType) && - aNormalPlant->mOnBungeeState != PlantOnBungeeState::GETTING_GRABBED_BY_BUNGEE) + aNormalPlant->mOnBungeeState != PlantOnBungeeState::GETTING_GRABBED_BY_BUNGEE) { return PlantingReason::PLANTING_OK; } @@ -2951,8 +2951,8 @@ PlantingReason Board::CanPlantAt(int theGridX, int theGridY, SeedType theSeedTyp if ((theSeedType == SeedType::SEED_WALLNUT || theSeedType == SeedType::SEED_TALLNUT) && aAidPurchased) { if (aNormalPlant->mPlantHealth < aNormalPlant->mPlantMaxHealth * 2 / 3 && - aNormalPlant->mSeedType == theSeedType && - aNormalPlant->mOnBungeeState != PlantOnBungeeState::GETTING_GRABBED_BY_BUNGEE) + aNormalPlant->mSeedType == theSeedType && + aNormalPlant->mOnBungeeState != PlantOnBungeeState::GETTING_GRABBED_BY_BUNGEE) { return PlantingReason::PLANTING_OK; } @@ -2997,7 +2997,7 @@ void Board::UpdateCursor() return; if (mPaused || mBoardFadeOutCounter >= 0 || mTimeStopCounter > 0 || - mApp->mGameScene == GameScenes::SCENE_ZOMBIES_WON) + mApp->mGameScene == GameScenes::SCENE_ZOMBIES_WON) { mApp->SetCursor(Sexy::CURSOR_POINTER); return; @@ -3045,8 +3045,8 @@ void Board::UpdateCursor() case GameObjectType::OBJECT_TYPE_PLANT: if ((mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST) && - !HasLevelAwardDropped()) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST) && + !HasLevelAwardDropped()) { aShowFinger = true; } @@ -3137,7 +3137,7 @@ bool Board::IsPlantInGoldWateringCanRange(int theMouseX, int theMouseY, Plant *t if (GetTopPlantAt(thePlant->mPlantCol, thePlant->mRow, PlantPriority::TOPPLANT_ZEN_TOOL_ORDER) == thePlant) { return thePlant->mX + 40 >= aMinX && thePlant->mX + 40 < aMaxX && thePlant->mY + 40 >= aMinY && - thePlant->mY + 40 < aMaxY; + thePlant->mY + 40 < aMaxY; } return false; } @@ -3145,7 +3145,7 @@ bool Board::IsPlantInGoldWateringCanRange(int theMouseX, int theMouseY, Plant *t void Board::HighlightPlantsForMouse(int theMouseX, int theMouseY) { if (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_WATERING_CAN && - mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_GOLD_WATERINGCAN]) + mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_GOLD_WATERINGCAN]) { Plant *aPlant = nullptr; while (IteratePlants(aPlant)) @@ -3154,7 +3154,7 @@ void Board::HighlightPlantsForMouse(int theMouseX, int theMouseY) { aPlant->mHighlighted = true; Plant *aFlowerPot = - GetTopPlantAt(aPlant->mPlantCol, aPlant->mRow, PlantPriority::TOPPLANT_ONLY_UNDER_PLANT); + GetTopPlantAt(aPlant->mPlantCol, aPlant->mRow, PlantPriority::TOPPLANT_ONLY_UNDER_PLANT); if (aFlowerPot) { aFlowerPot->mHighlighted = true; @@ -3171,7 +3171,7 @@ void Board::HighlightPlantsForMouse(int theMouseX, int theMouseY) if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) { Plant *aFlowerPot = - GetTopPlantAt(aPlant->mPlantCol, aPlant->mRow, PlantPriority::TOPPLANT_ONLY_UNDER_PLANT); + GetTopPlantAt(aPlant->mPlantCol, aPlant->mRow, PlantPriority::TOPPLANT_ONLY_UNDER_PLANT); if (aFlowerPot) { aFlowerPot->mHighlighted = true; @@ -3228,15 +3228,15 @@ void Board::UpdateMousePosition() } if (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_SHOVEL || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_WATERING_CAN || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_FERTILIZER || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_BUG_SPRAY || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PHONOGRAPH || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_CHOCOLATE || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_GLOVE || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_MONEY_SIGN || - (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_WHEEELBARROW && - !mApp->mZenGarden->GetPottedPlantInWheelbarrow())) + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_WATERING_CAN || + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_FERTILIZER || + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_BUG_SPRAY || + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PHONOGRAPH || + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_CHOCOLATE || + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_GLOVE || + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_MONEY_SIGN || + (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_WHEEELBARROW && + !mApp->mZenGarden->GetPottedPlantInWheelbarrow())) { HighlightPlantsForMouse(aMouseX, aMouseY); return; @@ -3245,13 +3245,13 @@ void Board::UpdateMousePosition() if (aCursorSeedType == SeedType::SEED_INSTANT_COFFEE) { int aGridX = - PlantingPixelToGridX(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY, aCursorSeedType); + PlantingPixelToGridX(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY, aCursorSeedType); int aGridY = - PlantingPixelToGridY(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY, aCursorSeedType); + PlantingPixelToGridY(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY, aCursorSeedType); Plant *aPlant = GetTopPlantAt(aGridX, aGridY, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION); if (aPlant && aPlant->mIsAsleep && - CanPlantAt(aGridX, aGridY, SeedType::SEED_INSTANT_COFFEE) == PlantingReason::PLANTING_OK) + CanPlantAt(aGridX, aGridY, SeedType::SEED_INSTANT_COFFEE) == PlantingReason::PLANTING_OK) { aPlant->mHighlighted = true; } @@ -3259,13 +3259,13 @@ void Board::UpdateMousePosition() else if (aCursorSeedType == SeedType::SEED_WALLNUT || aCursorSeedType == SeedType::SEED_TALLNUT) { int aGridX = - PlantingPixelToGridX(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY, aCursorSeedType); + PlantingPixelToGridX(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY, aCursorSeedType); int aGridY = - PlantingPixelToGridY(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY, aCursorSeedType); + PlantingPixelToGridY(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY, aCursorSeedType); Plant *aPlant = GetTopPlantAt(aGridX, aGridY, PlantPriority::TOPPLANT_ONLY_PUMPKIN); if (aPlant && aPlant->mSeedType == aCursorSeedType && - CanPlantAt(aGridX, aGridY, aCursorSeedType) == PlantingReason::PLANTING_OK) + CanPlantAt(aGridX, aGridY, aCursorSeedType) == PlantingReason::PLANTING_OK) { aPlant->mHighlighted = true; } @@ -3273,13 +3273,13 @@ void Board::UpdateMousePosition() else if (aCursorSeedType == SeedType::SEED_PUMPKINSHELL) { int aGridX = - PlantingPixelToGridX(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY, aCursorSeedType); + PlantingPixelToGridX(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY, aCursorSeedType); int aGridY = - PlantingPixelToGridY(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY, aCursorSeedType); + PlantingPixelToGridY(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY, aCursorSeedType); Plant *aPlant = GetTopPlantAt(aGridX, aGridY, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION); if (aPlant && aPlant->mSeedType == SeedType::SEED_PUMPKINSHELL && - CanPlantAt(aGridX, aGridY, SeedType::SEED_PUMPKINSHELL) == PlantingReason::PLANTING_OK) + CanPlantAt(aGridX, aGridY, SeedType::SEED_PUMPKINSHELL) == PlantingReason::PLANTING_OK) { aPlant->mHighlighted = true; } @@ -3289,7 +3289,7 @@ void Board::UpdateMousePosition() void Board::UpdateToolTip() { if (!mApp->mWidgetManager->mMouseIn || !mApp->mActive || mTimeStopCounter > 0 || mApp->GetDialogCount() > 0 || - mApp->mGameScene == GameScenes::SCENE_ZOMBIES_WON) + mApp->mGameScene == GameScenes::SCENE_ZOMBIES_WON) { mToolTip->mVisible = false; return; @@ -3307,9 +3307,9 @@ void Board::UpdateToolTip() } if (mSeedBank->ContainsPoint(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY) || - mApp->mSeedChooserScreen->mAlmanacButton->IsMouseOver() || - mApp->mSeedChooserScreen->mStoreButton->IsMouseOver() || - mApp->mSeedChooserScreen->mImitaterButton->IsMouseOver()) + mApp->mSeedChooserScreen->mAlmanacButton->IsMouseOver() || + mApp->mSeedChooserScreen->mStoreButton->IsMouseOver() || + mApp->mSeedChooserScreen->mImitaterButton->IsMouseOver()) { mToolTip->mVisible = false; return; @@ -3409,14 +3409,14 @@ void Board::UpdateToolTip() } if (aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_WATERING_CAN || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_FERTILIZER || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_BUG_SPRAY || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_PHONOGRAPH || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_CHOCOLATE || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_GLOVE || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_MONEY_SIGN || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_WHEELBARROW || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_TREE_FOOD) + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_FERTILIZER || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_BUG_SPRAY || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_PHONOGRAPH || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_CHOCOLATE || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_GLOVE || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_MONEY_SIGN || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_WHEELBARROW || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_TREE_FOOD) { if (aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_WATERING_CAN) { @@ -3478,7 +3478,7 @@ void Board::UpdateToolTip() } if (gLawnApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - gLawnApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST) + gLawnApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST) { if (aUseSeedType == SeedType::SEED_REPEATER) { @@ -3588,7 +3588,7 @@ void Board::UpdateToolTip() mToolTip->SetWarningText("FREE_PLANTING_CHEAT"); } else if (!aSeedPacket->mActive && (gLawnApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - gLawnApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST)) + gLawnApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST)) { if (aSeedPacket->mPacketType == SeedType::SEED_BEGHOULED_BUTTON_CRATER) { @@ -3729,14 +3729,14 @@ void Board::MouseDownWithPlant(int x, int y, int theClickCount) if (aReason == PlantingReason::PLANTING_ONLY_ON_GRAVES) { DisplayAdvice("[ADVICE_GRAVEBUSTERS_ON_GRAVES]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_GRAVEBUSTERS_ON_GRAVES); + AdviceType::ADVICE_PLANT_GRAVEBUSTERS_ON_GRAVES); } else if (aPlantingSeedType == SeedType::SEED_LILYPAD) { if (aReason == PlantingReason::PLANTING_ONLY_IN_POOL) { DisplayAdvice("[ADVICE_LILYPAD_ON_WATER]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_LILYPAD_ON_WATER); + AdviceType::ADVICE_PLANT_LILYPAD_ON_WATER); } } else if (aPlantingSeedType == SeedType::SEED_TANGLEKELP) @@ -3744,7 +3744,7 @@ void Board::MouseDownWithPlant(int x, int y, int theClickCount) if (aReason == PlantingReason::PLANTING_ONLY_IN_POOL) { DisplayAdvice("[ADVICE_TANGLEKELP_ON_WATER]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_TANGLEKELP_ON_WATER); + AdviceType::ADVICE_PLANT_TANGLEKELP_ON_WATER); } } else if (aPlantingSeedType == SeedType::SEED_SEASHROOM) @@ -3752,18 +3752,18 @@ void Board::MouseDownWithPlant(int x, int y, int theClickCount) if (aReason == PlantingReason::PLANTING_ONLY_IN_POOL) { DisplayAdvice("[ADVICE_SEASHROOM_ON_WATER]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_SEASHROOM_ON_WATER); + AdviceType::ADVICE_PLANT_SEASHROOM_ON_WATER); } } else if (aReason == PlantingReason::PLANTING_ONLY_ON_GROUND) { DisplayAdvice("[ADVICE_POTATO_MINE_ON_LILY]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_POTATOE_MINE_ON_LILY); + AdviceType::ADVICE_PLANT_POTATOE_MINE_ON_LILY); } else if (aReason == PlantingReason::PLANTING_NOT_PASSED_LINE) { DisplayAdvice("[ADVICE_NOT_PASSED_LINE]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_NOT_PASSED_LINE); + AdviceType::ADVICE_PLANT_NOT_PASSED_LINE); } else if (aReason == PlantingReason::PLANTING_NEEDS_UPGRADE) { @@ -3771,49 +3771,49 @@ void Board::MouseDownWithPlant(int x, int y, int theClickCount) { case SeedType::SEED_GATLINGPEA: DisplayAdvice("[ADVICE_ONLY_ON_REPEATERS]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_ONLY_ON_REPEATERS); + AdviceType::ADVICE_PLANT_ONLY_ON_REPEATERS); break; case SeedType::SEED_TWINSUNFLOWER: DisplayAdvice("[ADVICE_ONLY_ON_SUNFLOWER]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_ONLY_ON_SUNFLOWER); + AdviceType::ADVICE_PLANT_ONLY_ON_SUNFLOWER); break; case SeedType::SEED_GLOOMSHROOM: DisplayAdvice("[ADVICE_ONLY_ON_FUMESHROOM]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_ONLY_ON_FUMESHROOM); + AdviceType::ADVICE_PLANT_ONLY_ON_FUMESHROOM); break; case SeedType::SEED_CATTAIL: DisplayAdvice("[ADVICE_ONLY_ON_LILYPAD]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_ONLY_ON_LILYPAD); + AdviceType::ADVICE_PLANT_ONLY_ON_LILYPAD); break; case SeedType::SEED_WINTERMELON: DisplayAdvice("[ADVICE_ONLY_ON_MELONPULT]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_ONLY_ON_MELONPULT); + AdviceType::ADVICE_PLANT_ONLY_ON_MELONPULT); break; case SeedType::SEED_GOLD_MAGNET: DisplayAdvice("[ADVICE_ONLY_ON_MAGNETSHROOM]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_ONLY_ON_MAGNETSHROOM); + AdviceType::ADVICE_PLANT_ONLY_ON_MAGNETSHROOM); break; case SeedType::SEED_SPIKEROCK: DisplayAdvice("[ADVICE_ONLY_ON_SPIKEWEED]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_ONLY_ON_SPIKEWEED); + AdviceType::ADVICE_PLANT_ONLY_ON_SPIKEWEED); break; case SeedType::SEED_COBCANNON: DisplayAdvice("[ADVICE_ONLY_ON_KERNELPULT]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_ONLY_ON_KERNELPULT); + AdviceType::ADVICE_PLANT_ONLY_ON_KERNELPULT); break; } } else if (aReason == PlantingReason::PLANTING_NOT_ON_ART) { SexyString aSeedName = - Plant::GetNameString(mChallenge->GetArtChallengeSeed(aGridX, aGridY), SeedType::SEED_NONE); + Plant::GetNameString(mChallenge->GetArtChallengeSeed(aGridX, aGridY), SeedType::SEED_NONE); SexyString aMessage = TodReplaceString("[ADVICE_WRONG_ART_TYPE]", "{SEED}", aSeedName); DisplayAdvice(aMessage, MessageStyle::MESSAGE_STYLE_HINT_FAST, AdviceType::ADVICE_PLANT_WRONG_ART_TYPE); } @@ -3822,60 +3822,60 @@ void Board::MouseDownWithPlant(int x, int y, int theClickCount) if (mApp->IsFirstTimeAdventureMode() && mLevel == 41) { DisplayAdvice("[ADVICE_PLANT_NEED_POT1]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_NEED_POT); + AdviceType::ADVICE_PLANT_NEED_POT); } else { DisplayAdvice("[ADVICE_PLANT_NEED_POT2]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_NEED_POT); + AdviceType::ADVICE_PLANT_NEED_POT); } } else if (aReason == PlantingReason::PLANTING_NOT_ON_GRAVE) { DisplayAdvice("[ADVICE_PLANT_NOT_ON_GRAVE]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_NOT_ON_GRAVE); + AdviceType::ADVICE_PLANT_NOT_ON_GRAVE); } else if (aReason == PlantingReason::PLANTING_NOT_ON_CRATER) { if (IsPoolSquare(aGridX, aGridY)) { DisplayAdvice("[ADVICE_CANT_PLANT_THERE]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_CANT_PLANT_THERE); + AdviceType::ADVICE_CANT_PLANT_THERE); } else { DisplayAdvice("[ADVICE_PLANT_NOT_ON_CRATER]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_NOT_ON_CRATER); + AdviceType::ADVICE_PLANT_NOT_ON_CRATER); } } else if (aReason == PlantingReason::PLANTING_NOT_ON_WATER) { if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN && - mApp->mZenGarden->mGardenType == GardenType::GARDEN_AQUARIUM) + mApp->mZenGarden->mGardenType == GardenType::GARDEN_AQUARIUM) { DisplayAdvice("[ZEN_ONLY_AQUATIC_PLANTS]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); } else if (aPlantingSeedType == SeedType::SEED_POTATOMINE) { DisplayAdvice("[ADVICE_POTATO_MINE_ON_LILY]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_POTATOE_MINE_ON_LILY); + AdviceType::ADVICE_PLANT_POTATOE_MINE_ON_LILY); } else { DisplayAdvice("[ADVICE_PLANT_NOT_ON_WATER]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANT_NOT_ON_WATER); + AdviceType::ADVICE_PLANT_NOT_ON_WATER); } } else if (aReason == PlantingReason::PLANTING_NEEDS_GROUND) { DisplayAdvice("[ADVICE_PLANTING_NEEDS_GROUND]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANTING_NEEDS_GROUND); + AdviceType::ADVICE_PLANTING_NEEDS_GROUND); } else if (aReason == PlantingReason::PLANTING_NEEDS_SLEEPING) { DisplayAdvice("[ADVICE_PLANTING_NEED_SLEEPING]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_PLANTING_NEED_SLEEPING); + AdviceType::ADVICE_PLANTING_NEED_SLEEPING); } if (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_GLOVE || mApp->IsWhackAZombieLevel()) @@ -3911,7 +3911,7 @@ void Board::MouseDownWithPlant(int x, int y, int theClickCount) ClearAdvice(AdviceType::ADVICE_SURVIVE_FLAGS); if (!mApp->mEasyPlantingCheat && mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_BANK && - !HasConveyorBeltSeedBank()) + !HasConveyorBeltSeedBank()) { if (!TakeSunMoney(GetCurrentPlantCost(aPlantingSeedType, SeedType::SEED_NONE))) { @@ -4032,7 +4032,7 @@ void Board::MouseDownWithPlant(int x, int y, int theClickCount) if (mTutorialState == TutorialState::TUTORIAL_LEVEL_1_PLANT_PEASHOOTER) { SetTutorialState(mPlants.mSize >= 2 ? TutorialState::TUTORIAL_LEVEL_1_COMPLETED - : TutorialState::TUTORIAL_LEVEL_1_REFRESH_PEASHOOTER); + : TutorialState::TUTORIAL_LEVEL_1_REFRESH_PEASHOOTER); } else if (mTutorialState == TutorialState::TUTORIAL_LEVEL_2_PLANT_SUNFLOWER) { @@ -4040,7 +4040,7 @@ void Board::MouseDownWithPlant(int x, int y, int theClickCount) if (aPlantingSeedType == SeedType::SEED_SUNFLOWER && aSunFlowersCount == 2) { DisplayAdvice("[ADVICE_MORE_SUNFLOWERS]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL2, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); if (!mSeedBank->mSeedPackets[1].CanPickUp()) { SetTutorialState(TutorialState::TUTORIAL_LEVEL_2_REFRESH_SUNFLOWER); @@ -4069,7 +4069,7 @@ void Board::MouseDownWithPlant(int x, int y, int theClickCount) { SetTutorialState(TutorialState::TUTORIAL_MORESUN_COMPLETED); DisplayAdvice("[ADVICE_PLANT_SUNFLOWER5]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LATER, - AdviceType::ADVICE_PLANT_SUNFLOWER5); + AdviceType::ADVICE_PLANT_SUNFLOWER5); mTutorialTimer = -1; } else if (!mSeedBank->mSeedPackets[1].CanPickUp()) @@ -4095,9 +4095,9 @@ Plant *Board::ToolHitTestHelper(HitResult *theHitResult) theHitResult->mObjectType = GameObjectType::OBJECT_TYPE_PLANT; Plant *aPlant = (Plant *)theHitResult->mObject; return (aPlant->mSeedType != SeedType::SEED_GRAVEBUSTER || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) - ? aPlant - : nullptr; + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) + ? aPlant + : nullptr; } Plant *Board::ToolHitTest(int theX, int theY) @@ -4115,7 +4115,7 @@ void Board::TutorialArrowShow(int theX, int theY) { TutorialArrowRemove(); TodParticleSystem *aParticle = mApp->AddTodParticle( - theX, theY, MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 0), ParticleEffect::PARTICLE_SEED_PACKET_PICK); + theX, theY, MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 0), ParticleEffect::PARTICLE_SEED_PACKET_PICK); mTutorialParticleID = mApp->ParticleGetID(aParticle); } @@ -4157,16 +4157,16 @@ void Board::MouseDownWithTool(int x, int y, int theClickCount, CursorType theCur aPlant->Die(); if (aPlant->mSeedType == SeedType::SEED_CATTAIL && - GetTopPlantAt(aPlant->mPlantCol, aPlant->mRow, PlantPriority::TOPPLANT_ONLY_PUMPKIN)) + GetTopPlantAt(aPlant->mPlantCol, aPlant->mRow, PlantPriority::TOPPLANT_ONLY_PUMPKIN)) { NewPlant(aPlant->mPlantCol, aPlant->mRow, SeedType::SEED_LILYPAD, SeedType::SEED_NONE); } if (mTutorialState == TutorialState::TUTORIAL_SHOVEL_DIG || - mTutorialState == TutorialState::TUTORIAL_SHOVEL_KEEP_DIGGING) + mTutorialState == TutorialState::TUTORIAL_SHOVEL_KEEP_DIGGING) { SetTutorialState(CountPlantByType(SeedType::SEED_PEASHOOTER) == 0 - ? TutorialState::TUTORIAL_SHOVEL_COMPLETED - : TutorialState::TUTORIAL_SHOVEL_KEEP_DIGGING); + ? TutorialState::TUTORIAL_SHOVEL_COMPLETED + : TutorialState::TUTORIAL_SHOVEL_KEEP_DIGGING); } } @@ -4181,7 +4181,7 @@ Plant *Board::SpecialPlantHitTest(int x, int y) if (aPlant->mSeedType == SeedType::SEED_PUMPKINSHELL) { float aMinDist = - GetTopPlantAt(aPlant->mPlantCol, aPlant->mRow, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION) ? 25 : 0; + GetTopPlantAt(aPlant->mPlantCol, aPlant->mRow, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION) ? 25 : 0; float aDistance = Distance2D(x, y, aPlant->mX + 40, aPlant->mY + 40); if (aDistance >= aMinDist && aDistance <= 50 && y > aPlant->mY + 25) { @@ -4202,7 +4202,7 @@ Plant *Board::SpecialPlantHitTest(int x, int y) bool Board::MouseHitTestPlant(int x, int y, HitResult *theHitResult) { if (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_COBCANNON_TARGET || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_HAMMER) + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_HAMMER) return false; Plant *aPlant; @@ -4220,10 +4220,10 @@ bool Board::MouseHitTestPlant(int x, int y, HitResult *theHitResult) { aPlant = GetTopPlantAt(aGridX, aGridY, PlantPriority::TOPPLANT_ZEN_TOOL_ORDER); if (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_WATERING_CAN && - (!aPlant || !mApp->mZenGarden->PlantCanBeWatered(aPlant))) + (!aPlant || !mApp->mZenGarden->PlantCanBeWatered(aPlant))) { Plant *aTopPlant = GetTopPlantAt(PixelToGridX(x - 30, y - 20), PixelToGridY(x - 30, y - 20), - PlantPriority::TOPPLANT_ZEN_TOOL_ORDER); + PlantPriority::TOPPLANT_ZEN_TOOL_ORDER); if (aTopPlant && mApp->mZenGarden->PlantCanBeWatered(aTopPlant)) { aPlant = aTopPlant; @@ -4247,7 +4247,7 @@ bool Board::MouseHitTestPlant(int x, int y, HitResult *theHitResult) return false; } if (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_CHOCOLATE && - !mApp->mZenGarden->PlantCanHaveChocolate(aPlant)) + !mApp->mZenGarden->PlantCanHaveChocolate(aPlant)) { theHitResult->mObject = nullptr; theHitResult->mObjectType = GameObjectType::OBJECT_TYPE_NONE; @@ -4283,8 +4283,8 @@ bool Board::MouseHitTest(int x, int y, HitResult *theHitResult) if (mSeedBank->MouseHitTest(x, y, theHitResult)) { if (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_NORMAL || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_COBCANNON_TARGET || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_HAMMER) + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_COBCANNON_TARGET || + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_HAMMER) return true; } if (mShowShovel && aShovelButtonRect.Contains(x, y) && CanInteractWithBoardButtons()) @@ -4294,7 +4294,7 @@ bool Board::MouseHitTest(int x, int y, HitResult *theHitResult) } if (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_NORMAL || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_HAMMER) + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_HAMMER) { Coin *aCoin = nullptr; Coin *aTopCoin = nullptr; @@ -4322,7 +4322,7 @@ bool Board::MouseHitTest(int x, int y, HitResult *theHitResult) { bool canClick = false; if (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_CHOCOLATE && - !mApp->mZenGarden->IsStinkyHighOnChocolate()) + !mApp->mZenGarden->IsStinkyHighOnChocolate()) { canClick = true; } @@ -4345,21 +4345,21 @@ bool Board::MouseHitTest(int x, int y, HitResult *theHitResult) if (mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) { if (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_TREE_FOOD && - mChallenge->TreeOfWisdomHitTest(x, y, theHitResult)) + mChallenge->TreeOfWisdomHitTest(x, y, theHitResult)) { return true; } } if ((mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) && - CanInteractWithBoardButtons()) + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) && + CanInteractWithBoardButtons()) { for (int i = (int)GameObjectType::OBJECT_TYPE_WATERING_CAN; i <= (int)GameObjectType::OBJECT_TYPE_NEXT_GARDEN; - i++) + i++) { GameObjectType aTool = (GameObjectType)i; if (CanUseGameObject(aTool) && - (aTool != GameObjectType::OBJECT_TYPE_TREE_FOOD || mChallenge->TreeOfWisdomCanFeed())) + (aTool != GameObjectType::OBJECT_TYPE_TREE_FOOD || mChallenge->TreeOfWisdomCanFeed())) { Rect aButtonRect = GetShovelButtonRect(); if (aTool == GameObjectType::OBJECT_TYPE_NEXT_GARDEN) @@ -4384,9 +4384,9 @@ bool Board::MouseHitTest(int x, int y, HitResult *theHitResult) return true; if (mApp->IsScaryPotterLevel() && mCursorObject->mCursorType == CursorType::CURSOR_TYPE_NORMAL && - mChallenge->mChallengeState != ChallengeState::STATECHALLENGE_SCARY_POTTER_MALLETING && - mApp->mGameScene == GameScenes::SCENE_PLAYING && mApp->GetDialog(Dialogs::DIALOG_GAME_OVER) == nullptr && - mApp->GetDialog(Dialogs::DIALOG_CONTINUE) == nullptr) + mChallenge->mChallengeState != ChallengeState::STATECHALLENGE_SCARY_POTTER_MALLETING && + mApp->mGameScene == GameScenes::SCENE_PLAYING && mApp->GetDialog(Dialogs::DIALOG_GAME_OVER) == nullptr && + mApp->GetDialog(Dialogs::DIALOG_CONTINUE) == nullptr) { GridItem *aScaryPot = GetGridItemAt(GridItemType::GRIDITEM_SCARY_POT, PixelToGridX(x, y), PixelToGridY(x, y)); if (aScaryPot) @@ -4401,7 +4401,7 @@ bool Board::MouseHitTest(int x, int y, HitResult *theHitResult) { Rect aSlotMachineHandleRect = mChallenge->SlotMachineGetHandleRect(); if (aSlotMachineHandleRect.Contains(x, y) && - mChallenge->mChallengeState == ChallengeState::STATECHALLENGE_NORMAL && !HasLevelAwardDropped()) + mChallenge->mChallengeState == ChallengeState::STATECHALLENGE_NORMAL && !HasLevelAwardDropped()) { theHitResult->mObjectType = GameObjectType::OBJECT_TYPE_SLOT_MACHINE_HANDLE; return true; @@ -4434,7 +4434,7 @@ void Board::PickUpTool(GameObjectType theObjectType) { mTutorialState = TutorialState::TUTORIAL_ZEN_GARDEN_WATER_PLANT; DisplayAdvice("[ADVICE_ZEN_GARDEN_WATER_PLANT]", MessageStyle::MESSAGE_STYLE_ZEN_GARDEN_LONG, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); TutorialArrowRemove(); } mCursorObject->mCursorType = CursorType::CURSOR_TYPE_WATERING_CAN; @@ -4555,7 +4555,7 @@ void Board::MouseDown(int x, int y, int theClickCount) #if LAWN_USE_UNFINISHED_GAMEPAD_SUPPORT if (mApp->UsingGamepad() && mApp->mGamepads[0] != nullptr && - mApp->mGamepads[0]->IsButtonDown(GamepadButtons::BUTTON_WEST)) + mApp->mGamepads[0]->IsButtonDown(GamepadButtons::BUTTON_WEST)) { // For combat minigames, we use the grid-centered coordinates. // These are derived from mCursorObject which is updated in CursorObject::Update to snap to grid. @@ -4588,12 +4588,12 @@ void Board::MouseDown(int x, int y, int theClickCount) else if (mStoreButton && mStoreButton->IsMouseOver() && CanInteractWithBoardButtons() && theClickCount > 0) { if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) { mApp->PlaySample(Sexy::SOUND_TAP); } else if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND || - mApp->mGameMode == GameMode::GAMEMODE_UPSELL) + mApp->mGameMode == GameMode::GAMEMODE_UPSELL) { mApp->PlaySample(Sexy::SOUND_GRAVEBUTTON); } @@ -4647,10 +4647,10 @@ void Board::MouseDown(int x, int y, int theClickCount) } if (aCursor == CursorType::CURSOR_TYPE_SHOVEL || aCursor == CursorType::CURSOR_TYPE_WATERING_CAN || - aCursor == CursorType::CURSOR_TYPE_FERTILIZER || aCursor == CursorType::CURSOR_TYPE_BUG_SPRAY || - aCursor == CursorType::CURSOR_TYPE_PHONOGRAPH || aCursor == CursorType::CURSOR_TYPE_CHOCOLATE || - aCursor == CursorType::CURSOR_TYPE_GLOVE || aCursor == CursorType::CURSOR_TYPE_MONEY_SIGN || - aCursor == CursorType::CURSOR_TYPE_WHEEELBARROW || aCursor == CursorType::CURSOR_TYPE_TREE_FOOD) + aCursor == CursorType::CURSOR_TYPE_FERTILIZER || aCursor == CursorType::CURSOR_TYPE_BUG_SPRAY || + aCursor == CursorType::CURSOR_TYPE_PHONOGRAPH || aCursor == CursorType::CURSOR_TYPE_CHOCOLATE || + aCursor == CursorType::CURSOR_TYPE_GLOVE || aCursor == CursorType::CURSOR_TYPE_MONEY_SIGN || + aCursor == CursorType::CURSOR_TYPE_WHEEELBARROW || aCursor == CursorType::CURSOR_TYPE_TREE_FOOD) { MouseDownWithTool(x, y, theClickCount, aCursor); } @@ -4678,15 +4678,15 @@ void Board::MouseDown(int x, int y, int theClickCount) mApp->PlaySample(Sexy::SOUND_TAP); } else if (aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_SHOVEL || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_WATERING_CAN || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_FERTILIZER || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_BUG_SPRAY || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_PHONOGRAPH || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_CHOCOLATE || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_GLOVE || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_MONEY_SIGN || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_WHEELBARROW || - aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_TREE_FOOD) + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_WATERING_CAN || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_FERTILIZER || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_BUG_SPRAY || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_PHONOGRAPH || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_CHOCOLATE || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_GLOVE || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_MONEY_SIGN || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_WHEELBARROW || + aHitResult.mObjectType == GameObjectType::OBJECT_TYPE_TREE_FOOD) { PickUpTool(aHitResult.mObjectType); } @@ -4703,17 +4703,17 @@ void Board::ClearCursor() if (mAdvice->mDuration > 0) { if (mHelpIndex == AdviceType::ADVICE_PLANT_GRAVEBUSTERS_ON_GRAVES || - mHelpIndex == AdviceType::ADVICE_PLANT_LILYPAD_ON_WATER || - mHelpIndex == AdviceType::ADVICE_PLANT_TANGLEKELP_ON_WATER || - mHelpIndex == AdviceType::ADVICE_PLANT_SEASHROOM_ON_WATER || - mHelpIndex == AdviceType::ADVICE_PLANT_POTATOE_MINE_ON_LILY || - mHelpIndex == AdviceType::ADVICE_PLANT_WRONG_ART_TYPE || mHelpIndex == AdviceType::ADVICE_PLANT_NEED_POT || - mHelpIndex == AdviceType::ADVICE_PLANT_NOT_PASSED_LINE || - mHelpIndex == AdviceType::ADVICE_PLANT_ONLY_ON_REPEATERS || - mHelpIndex == AdviceType::ADVICE_PLANT_ONLY_ON_MELONPULT || - mHelpIndex == AdviceType::ADVICE_PLANT_ONLY_ON_SUNFLOWER || - mHelpIndex == AdviceType::ADVICE_PLANT_ONLY_ON_SPIKEWEED || - mHelpIndex == AdviceType::ADVICE_PLANT_ONLY_ON_KERNELPULT) + mHelpIndex == AdviceType::ADVICE_PLANT_LILYPAD_ON_WATER || + mHelpIndex == AdviceType::ADVICE_PLANT_TANGLEKELP_ON_WATER || + mHelpIndex == AdviceType::ADVICE_PLANT_SEASHROOM_ON_WATER || + mHelpIndex == AdviceType::ADVICE_PLANT_POTATOE_MINE_ON_LILY || + mHelpIndex == AdviceType::ADVICE_PLANT_WRONG_ART_TYPE || mHelpIndex == AdviceType::ADVICE_PLANT_NEED_POT || + mHelpIndex == AdviceType::ADVICE_PLANT_NOT_PASSED_LINE || + mHelpIndex == AdviceType::ADVICE_PLANT_ONLY_ON_REPEATERS || + mHelpIndex == AdviceType::ADVICE_PLANT_ONLY_ON_MELONPULT || + mHelpIndex == AdviceType::ADVICE_PLANT_ONLY_ON_SUNFLOWER || + mHelpIndex == AdviceType::ADVICE_PLANT_ONLY_ON_SPIKEWEED || + mHelpIndex == AdviceType::ADVICE_PLANT_ONLY_ON_KERNELPULT) { ClearAdvice(mHelpIndex); } @@ -4734,7 +4734,7 @@ void Board::ClearCursor() SetTutorialState(TutorialState::TUTORIAL_LEVEL_1_PICK_UP_PEASHOOTER); } else if (mTutorialState == TutorialState::TUTORIAL_LEVEL_2_PLANT_SUNFLOWER || - mTutorialState == TutorialState::TUTORIAL_LEVEL_2_REFRESH_SUNFLOWER) + mTutorialState == TutorialState::TUTORIAL_LEVEL_2_REFRESH_SUNFLOWER) { if (!mSeedBank->mSeedPackets[1].CanPickUp()) { @@ -4746,7 +4746,7 @@ void Board::ClearCursor() } } else if (mTutorialState == TutorialState::TUTORIAL_MORESUN_PLANT_SUNFLOWER || - mTutorialState == TutorialState::TUTORIAL_MORESUN_REFRESH_SUNFLOWER) + mTutorialState == TutorialState::TUTORIAL_MORESUN_REFRESH_SUNFLOWER) { if (!mSeedBank->mSeedPackets[1].CanPickUp()) { @@ -4769,8 +4769,8 @@ bool Board::CanInteractWithBoardButtons() return false; if (mCursorObject->mCursorType != CursorType::CURSOR_TYPE_NORMAL && - mCursorObject->mCursorType != CursorType::CURSOR_TYPE_HAMMER && - mCursorObject->mCursorType != CursorType::CURSOR_TYPE_COBCANNON_TARGET) + mCursorObject->mCursorType != CursorType::CURSOR_TYPE_HAMMER && + mCursorObject->mCursorType != CursorType::CURSOR_TYPE_COBCANNON_TARGET) return false; if (mChallenge->mChallengeState == ChallengeState::STATECHALLENGE_ZEN_FADING) @@ -4794,7 +4794,7 @@ void Board::MouseUp(int x, int y, int theClickCount) if (CanInteractWithBoardButtons() && theClickCount > 0) { if (mMenuButton->IsMouseOver() && !mApp->GetDialog(Dialogs::DIALOG_GAME_OVER) && - !mApp->GetDialog(Dialogs::DIALOG_LEVEL_COMPLETE)) + !mApp->GetDialog(Dialogs::DIALOG_LEVEL_COMPLETE)) { mMenuButton->mIsOver = false; mMenuButton->mIsDown = false; @@ -4805,7 +4805,7 @@ void Board::MouseUp(int x, int y, int theClickCount) mApp->FinishZenGardenToturial(); } else if (mApp->mGameMode != GAMEMODE_CHALLENGE_ZEN_GARDEN && mApp->mGameMode != GAMEMODE_TREE_OF_WISDOM && - mApp->mGameMode != GAMEMODE_UPSELL) + mApp->mGameMode != GAMEMODE_UPSELL) { mApp->PlaySample(Sexy::SOUND_PAUSE); mApp->DoNewOptions(false); @@ -4906,7 +4906,7 @@ void Board::PickSpecialGraveStone() if (aPickCount > 0) { ((GridItem *)TodPickFromArray(aPicks, aPickCount))->mGridItemState = - GridItemState::GRIDITEM_STATE_GRAVESTONE_SPECIAL; + GridItemState::GRIDITEM_STATE_GRAVESTONE_SPECIAL; } } @@ -4991,7 +4991,7 @@ void Board::SetupBungeeDrop(BungeeDropGrid *theBungeeDropGrid) void Board::BungeeDropZombie(BungeeDropGrid *theBungeeDropGrid, ZombieType theZombieType) { TodWeightedGridArray *aGrid = - TodPickFromWeightedGridArray(theBungeeDropGrid->mGridArray, theBungeeDropGrid->mGridArrayCount); + TodPickFromWeightedGridArray(theBungeeDropGrid->mGridArray, theBungeeDropGrid->mGridArrayCount); aGrid->mWeight = 1; Zombie *aBungeeZombie = AddZombie(ZombieType::ZOMBIE_BUNGEE, mCurrentWave); @@ -5048,7 +5048,7 @@ void Board::SpawnZombiesFromSky() void Board::SpawnZombiesFromGraves() { if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS_2) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS_2) return; if (StageHasRoof()) @@ -5097,10 +5097,10 @@ int Board::TotalZombiesHealthInWave(int theWaveIndex) while (IterateZombies(aZombie)) { if (aZombie->mFromWave == theWaveIndex && !aZombie->mMindControlled && !aZombie->IsDeadOrDying() && - aZombie->mZombieType != ZombieType::ZOMBIE_BUNGEE && aZombie->mRelatedZombieID == ZombieID::ZOMBIEID_NULL) + aZombie->mZombieType != ZombieType::ZOMBIE_BUNGEE && aZombie->mRelatedZombieID == ZombieID::ZOMBIEID_NULL) { aTotalHealth += - aZombie->mBodyHealth + aZombie->mHelmHealth + aZombie->mShieldHealth * 0.2f + aZombie->mFlyingHealth; + aZombie->mBodyHealth + aZombie->mHelmHealth + aZombie->mShieldHealth * 0.2f + aZombie->mFlyingHealth; } } return aTotalHealth; @@ -5269,11 +5269,11 @@ void Board::ZombiesWon(Zombie *theZombie) continue; if (aZombie->GetZombieRect().mX < -50 || aZombie->mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || - aZombie->mZombiePhase == ZombiePhase::PHASE_DANCER_RISING) + aZombie->mZombiePhase == ZombiePhase::PHASE_DANCER_RISING) { if ((aZombie->mZombieType == ZombieType::ZOMBIE_GARGANTUAR || - aZombie->mZombieType == ZombieType::ZOMBIE_REDEYE_GARGANTUAR) && - aZombie->IsDeadOrDying() && aZombie->mPosX < 140) + aZombie->mZombieType == ZombieType::ZOMBIE_REDEYE_GARGANTUAR) && + aZombie->IsDeadOrDying() && aZombie->mPosX < 140) { aZombie->DieNoLoot(); } @@ -5324,8 +5324,8 @@ void Board::ZombiesWon(Zombie *theZombie) ReanimatorEnsureDefinitionLoaded(ReanimationType::REANIM_ZOMBIES_WON, true); Reanimation *aReanim = - mApp->AddReanimation(-BOARD_OFFSET, 0, MakeRenderOrder(RenderLayer::RENDER_LAYER_SCREEN_FADE, 0, 0), - ReanimationType::REANIM_ZOMBIES_WON); + mApp->AddReanimation(-BOARD_OFFSET, 0, MakeRenderOrder(RenderLayer::RENDER_LAYER_SCREEN_FADE, 0, 0), + ReanimationType::REANIM_ZOMBIES_WON); aReanim->mLoopType = ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD; aReanim->GetTrackInstanceByName("fullscreen")->mTrackColor = Color::Black; aReanim->SetFramesForLayer("anim_screen"); @@ -5365,7 +5365,7 @@ bool Board::IsFinalSurvivalStage() bool Board::IsLastStandFinalStage() { return mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND && - mChallenge->mSurvivalStage == LAST_STAND_FLAGS - 1; + mChallenge->mSurvivalStage == LAST_STAND_FLAGS - 1; } bool Board::IsSurvivalStageWithRepick() @@ -5386,17 +5386,17 @@ bool Board::HasLevelAwardDropped() void Board::UpdateSunSpawning() { if (StageIsNight() || HasLevelAwardDropped() || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_RAINING_SEEDS || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ICE || mApp->mGameMode == GameMode::GAMEMODE_UPSELL || - mApp->mGameMode == GameMode::GAMEMODE_INTRO || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND || mApp->IsIZombieLevel() || - mApp->IsScaryPotterLevel() || mApp->IsSquirrelLevel() || HasConveyorBeltSeedBank() || - mTutorialState == TutorialState::TUTORIAL_SLOT_MACHINE_PULL) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ICE || mApp->mGameMode == GameMode::GAMEMODE_UPSELL || + mApp->mGameMode == GameMode::GAMEMODE_INTRO || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND || mApp->IsIZombieLevel() || + mApp->IsScaryPotterLevel() || mApp->IsSquirrelLevel() || HasConveyorBeltSeedBank() || + mTutorialState == TutorialState::TUTORIAL_SLOT_MACHINE_PULL) return; if (mTutorialState == TutorialState::TUTORIAL_LEVEL_1_PICK_UP_PEASHOOTER || - mTutorialState == TutorialState::TUTORIAL_LEVEL_1_PLANT_PEASHOOTER) + mTutorialState == TutorialState::TUTORIAL_LEVEL_1_PLANT_PEASHOOTER) { if (mPlants.mSize == 0) { @@ -5411,7 +5411,7 @@ void Board::UpdateSunSpawning() mNumSunsFallen++; mSunCountDown = std::min(SUN_COUNTDOWN_MAX, SUN_COUNTDOWN + mNumSunsFallen * 10) + Rand(SUN_COUNTDOWN_RANGE); CoinType aSunType = - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_SUNNY_DAY ? CoinType::COIN_LARGESUN : CoinType::COIN_SUN; + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_SUNNY_DAY ? CoinType::COIN_LARGESUN : CoinType::COIN_SUN; AddCoin(RandRangeInt(100, 649), 60, aSunType, CoinMotion::COIN_MOTION_FROM_SKY); } @@ -5424,7 +5424,7 @@ void Board::NextWaveComing() if ((!IsSurvivalStageWithRepick() || anIsLastStandFinal) && !mApp->IsContinuousChallenge()) { mApp->AddReanimation(0, 30, MakeRenderOrder(RenderLayer::RENDER_LAYER_ABOVE_UI, 0, 0), - ReanimationType::REANIM_FINAL_WAVE); + ReanimationType::REANIM_FINAL_WAVE); mFinalWaveSoundCounter = 60; } } @@ -5454,9 +5454,9 @@ void Board::UpdateZombieSpawning() } if (mTutorialState == TutorialState::TUTORIAL_LEVEL_1_PICK_UP_PEASHOOTER || - mTutorialState == TutorialState::TUTORIAL_LEVEL_1_PLANT_PEASHOOTER || - mTutorialState == TutorialState::TUTORIAL_LEVEL_1_REFRESH_PEASHOOTER || - mTutorialState == TutorialState::TUTORIAL_SLOT_MACHINE_PULL) + mTutorialState == TutorialState::TUTORIAL_LEVEL_1_PLANT_PEASHOOTER || + mTutorialState == TutorialState::TUTORIAL_LEVEL_1_REFRESH_PEASHOOTER || + mTutorialState == TutorialState::TUTORIAL_SLOT_MACHINE_PULL) return; if (HasLevelAwardDropped()) @@ -5489,9 +5489,9 @@ void Board::UpdateZombieSpawning() else { if (mApp->mMusic->mCurMusicTune == MusicTune::MUSIC_TUNE_DAY_GRASSWALK || - mApp->mMusic->mCurMusicTune == MusicTune::MUSIC_TUNE_POOL_WATERYGRAVES || - mApp->mMusic->mCurMusicTune == MusicTune::MUSIC_TUNE_FOG_RIGORMORMIST || - mApp->mMusic->mCurMusicTune == MusicTune::MUSIC_TUNE_ROOF_GRAZETHEROOF) + mApp->mMusic->mCurMusicTune == MusicTune::MUSIC_TUNE_POOL_WATERYGRAVES || + mApp->mMusic->mCurMusicTune == MusicTune::MUSIC_TUNE_FOG_RIGORMORMIST || + mApp->mMusic->mCurMusicTune == MusicTune::MUSIC_TUNE_ROOF_GRAZETHEROOF) { if (mHugeWaveCountDown == 400) { @@ -5540,7 +5540,7 @@ void Board::UpdateZombieSpawning() } if (mZombieCountDown > 200 && mZombieCountDownStart - mZombieCountDown > 400 && - TotalZombiesHealthInWave(mCurrentWave - 1) <= mZombieHealthToNextWave) + TotalZombiesHealthInWave(mCurrentWave - 1) <= mZombieHealthToNextWave) { mZombieCountDown = 200; } @@ -5550,7 +5550,7 @@ void Board::UpdateZombieSpawning() { ClearAdviceImmediately(); DisplayAdviceAgain("[ADVICE_HUGE_WAVE]", MessageStyle::MESSAGE_STYLE_HUGE_WAVE, - AdviceType::ADVICE_HUGE_WAVE); + AdviceType::ADVICE_HUGE_WAVE); mHugeWaveCountDown = 750; return; } @@ -5567,7 +5567,7 @@ void Board::UpdateZombieSpawning() mZombieCountDown = ZOMBIE_COUNTDOWN_BEFORE_REPICK + 1; } else if (IsFlagWave(mCurrentWave) && - (mApp->IsWallnutBowlingLevel() || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND)) + (mApp->IsWallnutBowlingLevel() || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND)) { mZombieHealthToNextWave = 0; mZombieCountDown = ZOMBIE_COUNTDOWN_BEFORE_FLAG; @@ -5576,7 +5576,7 @@ void Board::UpdateZombieSpawning() { mZombieHealthToNextWave = RandRangeFloat(0.5f, 0.65f) * mZombieHealthWaveStart; if (mApp->IsLittleTroubleLevel() || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_COLUMN || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND) { mZombieCountDown = 750; } @@ -5617,7 +5617,7 @@ void Board::UpdateIce() { int aRenderPosition = MakeRenderOrder(RenderLayer::RENDER_LAYER_GROUND, aRow, 3); aParticleIce = - mApp->AddTodParticle(aPosX, aPosY, aRenderPosition, ParticleEffect::PARTICLE_ICE_SPARKLE); + mApp->AddTodParticle(aPosX, aPosY, aRenderPosition, ParticleEffect::PARTICLE_ICE_SPARKLE); mIceParticleID[aRow] = mApp->ParticleGetID(aParticleIce); } } @@ -5679,7 +5679,7 @@ void Board::UpdateProgressMeter() } int aLength = - ClampInt(aCurrentWaveLength + FloatRoundToInt((aNextWaveLength - aCurrentWaveLength) * aFraction), 1, 150); + ClampInt(aCurrentWaveLength + FloatRoundToInt((aNextWaveLength - aCurrentWaveLength) * aFraction), 1, 150); int aDelta = aLength - mProgressMeterWidth; if ((aDelta > aWaveLength && (mMainCounter % 5 == 0)) || (aDelta > 0 && (mMainCounter % 20 == 0))) { @@ -5696,45 +5696,45 @@ void Board::UpdateTutorial() if (mTutorialState == TutorialState::TUTORIAL_LEVEL_1_PICK_UP_PEASHOOTER && mTutorialTimer == 0) { DisplayAdvice("[ADVICE_CLICK_PEASHOOTER]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL1_STAY, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); TutorialArrowShow(mSeedBank->mX + mSeedBank->mSeedPackets[0].mX, mSeedBank->mY + mSeedBank->mSeedPackets[0].mY); mTutorialTimer = -1; } else if (mTutorialState == TutorialState::TUTORIAL_LEVEL_2_PICK_UP_SUNFLOWER || - mTutorialState == TutorialState::TUTORIAL_LEVEL_2_PLANT_SUNFLOWER || - mTutorialState == TutorialState::TUTORIAL_LEVEL_2_REFRESH_SUNFLOWER) + mTutorialState == TutorialState::TUTORIAL_LEVEL_2_PLANT_SUNFLOWER || + mTutorialState == TutorialState::TUTORIAL_LEVEL_2_REFRESH_SUNFLOWER) { if (mTutorialTimer == 0) { DisplayAdvice("[ADVICE_PLANT_SUNFLOWER2]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL2, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); mTutorialTimer = -1; } else if (mZombieCountDown == 750 && mCurrentWave == 0) { DisplayAdvice("[ADVICE_PLANT_SUNFLOWER3]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL2, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); } } else if (mTutorialState == TutorialState::TUTORIAL_MORESUN_PICK_UP_SUNFLOWER || - mTutorialState == TutorialState::TUTORIAL_MORESUN_PLANT_SUNFLOWER || - mTutorialState == TutorialState::TUTORIAL_MORESUN_REFRESH_SUNFLOWER) + mTutorialState == TutorialState::TUTORIAL_MORESUN_PLANT_SUNFLOWER || + mTutorialState == TutorialState::TUTORIAL_MORESUN_REFRESH_SUNFLOWER) { if (mTutorialTimer == 0) { DisplayAdvice("[ADVICE_PLANT_SUNFLOWER5]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LATER, - AdviceType::ADVICE_PLANT_SUNFLOWER5); + AdviceType::ADVICE_PLANT_SUNFLOWER5); mTutorialTimer = -1; } } if (mApp->IsFirstTimeAdventureMode() && mLevel >= 3 && mLevel != 5 && mLevel <= 7 && - mTutorialState == TutorialState::TUTORIAL_OFF && mCurrentWave >= 5 && !gShownMoreSunTutorial && - mSeedBank->mSeedPackets[1].CanPickUp() && CountPlantByType(SeedType::SEED_SUNFLOWER) < 3) + mTutorialState == TutorialState::TUTORIAL_OFF && mCurrentWave >= 5 && !gShownMoreSunTutorial && + mSeedBank->mSeedPackets[1].CanPickUp() && CountPlantByType(SeedType::SEED_SUNFLOWER) < 3) { TOD_ASSERT(!ChooseSeedsOnCurrentLevel()); DisplayAdvice("[ADVICE_PLANT_SUNFLOWER4]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LATER_STAY, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); gShownMoreSunTutorial = true; SetTutorialState(TutorialState::TUTORIAL_MORESUN_PICK_UP_SUNFLOWER); mTutorialTimer = 500; @@ -5752,12 +5752,12 @@ void Board::SetTutorialState(TutorialState theTutorialState) float aPosY = mSeedBank->mY + mSeedBank->mSeedPackets[0].mY; TutorialArrowShow(aPosX, aPosY); DisplayAdvice("[ADVICE_CLICK_SEED_PACKET]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL1_STAY, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); } else { DisplayAdvice("[ADVICE_ENOUGH_SUN]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL1_STAY, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); mTutorialTimer = 400; } break; @@ -5768,7 +5768,7 @@ void Board::SetTutorialState(TutorialState theTutorialState) if (mPlants.mSize == 0) { DisplayAdvice("[ADVICE_CLICK_ON_GRASS]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL1_STAY, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); } else { @@ -5778,13 +5778,13 @@ void Board::SetTutorialState(TutorialState theTutorialState) case TutorialState::TUTORIAL_LEVEL_1_REFRESH_PEASHOOTER: DisplayAdvice("[ADVICE_PLANTED_PEASHOOTER]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL1_STAY, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); mSunCountDown = 400; break; case TutorialState::TUTORIAL_LEVEL_1_COMPLETED: DisplayAdvice("[ADVICE_ZOMBIE_ONSLAUGHT]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL1, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); mZombieCountDown = 99; mZombieCountDownStart = mZombieCountDown; break; @@ -5811,7 +5811,7 @@ void Board::SetTutorialState(TutorialState theTutorialState) case TutorialState::TUTORIAL_SLOT_MACHINE_PULL: DisplayAdvice("[ADVICE_SLOT_MACHINE_PULL]", MessageStyle::MESSAGE_STYLE_SLOT_MACHINE, - AdviceType::ADVICE_SLOT_MACHINE_PULL); + AdviceType::ADVICE_SLOT_MACHINE_PULL); break; case TutorialState::TUTORIAL_SLOT_MACHINE_COMPLETED: @@ -5863,7 +5863,7 @@ void Board::UpdateGame() else if (mFogOffset < aMaxFogOffset) { mFogOffset = - TodAnimateCurveFloat(-5, aMaxFogOffset, mFogOffset * 1.1f, 0, aMaxFogOffset, TodCurves::CURVE_LINEAR); + TodAnimateCurveFloat(-5, aMaxFogOffset, mFogOffset * 1.1f, 0, aMaxFogOffset, TodCurves::CURVE_LINEAR); } } @@ -5902,7 +5902,7 @@ void Board::UpdateGame() { SetTutorialState(TutorialState::TUTORIAL_LEVEL_2_PICK_UP_SUNFLOWER); DisplayAdvice("[ADVICE_PLANT_SUNFLOWER1]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL2, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); mTutorialTimer = 500; } } @@ -5989,16 +5989,16 @@ void Board::Update() mEffectCounter++; if (StageHasPool() && !mIceTrapCounter && mApp->mGameScene != GameScenes::SCENE_ZOMBIES_WON && - !mCutScene->IsSurvivalRepick()) + !mCutScene->IsSurvivalRepick()) { mApp->mPoolEffect->mPoolCounter++; } if (mBackground == BackgroundType::BACKGROUND_3_POOL && - mPoolSparklyParticleID == ParticleSystemID::PARTICLESYSTEMID_NULL && mDrawCount > 0) + mPoolSparklyParticleID == ParticleSystemID::PARTICLESYSTEMID_NULL && mDrawCount > 0) { int aRenderPosition = MakeRenderOrder(RenderLayer::RENDER_LAYER_GROUND, 2, 0); TodParticleSystem *aPoolParticle = - mApp->AddTodParticle(450, 295, aRenderPosition, ParticleEffect::PARTICLE_POOL_SPARKLY); + mApp->AddTodParticle(450, 295, aRenderPosition, ParticleEffect::PARTICLE_POOL_SPARKLY); mPoolSparklyParticleID = mApp->ParticleGetID(aPoolParticle); } @@ -6013,7 +6013,7 @@ void Board::Update() #if LAWN_USE_UNFINISHED_GAMEPAD_SUPPORT if (mApp->mGamepads[0] == nullptr || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) goto gamepad_update_end; { @@ -6023,11 +6023,11 @@ void Board::Update() float aRawStickX = aPad->GetLeftAxisXPosition(); float aRawStickY = aPad->GetLeftAxisYPosition(); if (std::abs(aRawStickX) > 0.2f || std::abs(aRawStickY) > 0.2f || - aPad->IsButtonDown(GamepadButtons::BUTTON_SOUTH) || aPad->IsButtonDown(GamepadButtons::BUTTON_EAST) || - aPad->IsButtonDown(GamepadButtons::BUTTON_WEST) || aPad->IsButtonDown(GamepadButtons::BUTTON_NORTH) || - aPad->IsButtonDown(GamepadButtons::BUTTON_START) || - aPad->IsButtonDown(GamepadButtons::BUTTON_LEFT_SHOULDER) || - aPad->IsButtonDown(GamepadButtons::BUTTON_RIGHT_SHOULDER)) + aPad->IsButtonDown(GamepadButtons::BUTTON_SOUTH) || aPad->IsButtonDown(GamepadButtons::BUTTON_EAST) || + aPad->IsButtonDown(GamepadButtons::BUTTON_WEST) || aPad->IsButtonDown(GamepadButtons::BUTTON_NORTH) || + aPad->IsButtonDown(GamepadButtons::BUTTON_START) || + aPad->IsButtonDown(GamepadButtons::BUTTON_LEFT_SHOULDER) || + aPad->IsButtonDown(GamepadButtons::BUTTON_RIGHT_SHOULDER)) { if (!mApp->mUsingGamepad) { @@ -6164,19 +6164,19 @@ void Board::Update() // Detect active gamepad input to switch into gamepad mode if (abs(aPad->GetLeftAxisXPosition()) > 0.1f || abs(aPad->GetLeftAxisYPosition()) > 0.1f || - aPad->IsButtonDown(GamepadButtons::BUTTON_DPAD_UP) || - aPad->IsButtonDown(GamepadButtons::BUTTON_DPAD_DOWN) || - aPad->IsButtonDown(GamepadButtons::BUTTON_DPAD_LEFT) || - aPad->IsButtonDown(GamepadButtons::BUTTON_DPAD_RIGHT) || aPad->IsButtonDown(GamepadButtons::BUTTON_SOUTH) || - aPad->IsButtonDown(GamepadButtons::BUTTON_EAST) || aPad->IsButtonDown(GamepadButtons::BUTTON_WEST) || - aPad->IsButtonDown(GamepadButtons::BUTTON_NORTH) || - aPad->IsButtonDown(GamepadButtons::BUTTON_LEFT_SHOULDER) || - aPad->IsButtonDown(GamepadButtons::BUTTON_RIGHT_SHOULDER) || - aPad->IsButtonDown(GamepadButtons::BUTTON_START) || - abs(aPad->GetAxisPosition(SDL_GAMEPAD_AXIS_LEFTX)) > 0.2f || - abs(aPad->GetAxisPosition(SDL_GAMEPAD_AXIS_LEFTY)) > 0.2f || - abs(aPad->GetAxisPosition(SDL_GAMEPAD_AXIS_RIGHTX)) > 0.2f || - abs(aPad->GetAxisPosition(SDL_GAMEPAD_AXIS_RIGHTY)) > 0.2f) + aPad->IsButtonDown(GamepadButtons::BUTTON_DPAD_UP) || + aPad->IsButtonDown(GamepadButtons::BUTTON_DPAD_DOWN) || + aPad->IsButtonDown(GamepadButtons::BUTTON_DPAD_LEFT) || + aPad->IsButtonDown(GamepadButtons::BUTTON_DPAD_RIGHT) || aPad->IsButtonDown(GamepadButtons::BUTTON_SOUTH) || + aPad->IsButtonDown(GamepadButtons::BUTTON_EAST) || aPad->IsButtonDown(GamepadButtons::BUTTON_WEST) || + aPad->IsButtonDown(GamepadButtons::BUTTON_NORTH) || + aPad->IsButtonDown(GamepadButtons::BUTTON_LEFT_SHOULDER) || + aPad->IsButtonDown(GamepadButtons::BUTTON_RIGHT_SHOULDER) || + aPad->IsButtonDown(GamepadButtons::BUTTON_START) || + abs(aPad->GetAxisPosition(SDL_GAMEPAD_AXIS_LEFTX)) > 0.2f || + abs(aPad->GetAxisPosition(SDL_GAMEPAD_AXIS_LEFTY)) > 0.2f || + abs(aPad->GetAxisPosition(SDL_GAMEPAD_AXIS_RIGHTX)) > 0.2f || + abs(aPad->GetAxisPosition(SDL_GAMEPAD_AXIS_RIGHTY)) > 0.2f) { if (!mApp->UsingGamepad()) { @@ -6203,7 +6203,7 @@ void Board::Update() while (IterateCoins(aCoin)) { if (!aCoin || aCoin->mDead || aCoin->mIsBeingCollected || - aCoin->mCoinMotion == CoinMotion::COIN_MOTION_GAMEPAD_CURSOR) + aCoin->mCoinMotion == CoinMotion::COIN_MOTION_GAMEPAD_CURSOR) continue; // USABLE_SEED_PACKET coins handled via MouseHitTest, skip in proximity loop @@ -6224,8 +6224,8 @@ void Board::Update() // Only process actions when the game scene is active and unpaused if ((mApp->mGameScene == GameScenes::SCENE_PLAYING || mApp->mGameScene == GameScenes::SCENE_LEVEL_INTRO || - mApp->mGameScene == GameScenes::SCENE_ZOMBIES_WON) && - !mPaused && mApp->GetDialogCount() == 0) + mApp->mGameScene == GameScenes::SCENE_ZOMBIES_WON) && + !mPaused && mApp->GetDialogCount() == 0) { // Use grid-snapped coordinates for all actions so the click always // lands in the center of the visually-highlighted cell. @@ -6252,7 +6252,7 @@ void Board::Update() // True for modes without a standard seed bank (no pick-up logic) bool aIsGardenMode = (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM); + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM); // --------------------------------------------------- // A (SOUTH): Confirm @@ -6265,9 +6265,9 @@ void Board::Update() // a specific plant) but the plant under the cursor is incompatible, // play SOUND_BUZZER and skip pick-up rather than picking it up blindly. if (!aIsGardenMode && - (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_NORMAL || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_HAMMER) && - mSeedBank->mNumPackets > 0) + (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_NORMAL || + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_HAMMER) && + mSeedBank->mNumPackets > 0) { SeedPacket *aSP = &mSeedBank->mSeedPackets[mSeedBank->mIndexGamepad]; if (aSP->mPacketType != SeedType::SEED_NONE) @@ -6278,7 +6278,7 @@ void Board::Update() // can actually be placed there. This prevents picking up // upgrade seeds (Gatling/CobCannon/etc) over incompatible plants. Plant *aPlantBelow = - GetTopPlantAt(aActGridX, aActGridY, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION); + GetTopPlantAt(aActGridX, aActGridY, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION); if (aPlantBelow != nullptr) { PlantingReason aSeedReason = CanPlantAt(aActGridX, aActGridY, aSP->mPacketType); @@ -6309,7 +6309,7 @@ void Board::Update() // In Whack-a-Zombie / Scary Potter, A should only click if holding a seed. // If cursor is empty, A does nothing on board (X triggers the hammer). bool aHoldingSeed = (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_BANK || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_USABLE_COIN); + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_USABLE_COIN); bool aIsWhackLevel = mApp->IsWhackAZombieLevel() || mApp->IsScaryPotterLevel(); if (aHoldingSeed || !aIsWhackLevel) @@ -6388,9 +6388,9 @@ void Board::Update() if (mCursorObject->mCursorType == CursorType::CURSOR_TYPE_NORMAL) { Plant *aPlantBelow = - GetTopPlantAt(aActGridX, aActGridY, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION); + GetTopPlantAt(aActGridX, aActGridY, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION); if (aPlantBelow && aPlantBelow->mSeedType == SeedType::SEED_COBCANNON && - aPlantBelow->mState == PlantState::STATE_COBCANNON_READY) + aPlantBelow->mState == PlantState::STATE_COBCANNON_READY) { MouseDown(aVX, aVY, 1); MouseUp(aVX, aVY, 1); @@ -6404,7 +6404,7 @@ void Board::Update() if (aVY >= 80) // must be below the seed bank area { bool aTooClose = (mCobCannonCursorDelayCounter > 0 && - Distance2D(aVX, aVY, mCobCannonMouseX, mCobCannonMouseY) < 100.0f); + Distance2D(aVX, aVY, mCobCannonMouseX, mCobCannonMouseY) < 100.0f); if (!aTooClose) { Plant *aCobcannon = mPlants.DataArrayTryToGet(mCursorObject->mCobCannonPlantID); @@ -6525,7 +6525,7 @@ bool Board::RowCanHaveZombies(int theRow) return false; return (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_RESODDED && theRow <= 4) || - mPlantRow[theRow] != PlantRowType::PLANTROW_DIRT; + mPlantRow[theRow] != PlantRowType::PLANTROW_DIRT; } int Board::GetIceZPos(int theRow) @@ -6608,17 +6608,17 @@ void Board::DrawBackdrop(Graphics *g) { g->DrawImage(Sexy::IMAGE_BACKGROUND1UNSODDED, -BOARD_OFFSET, 0); int aWidth = - TodAnimateCurve(0, 1000, mSodPosition, 0, Sexy::IMAGE_SOD1ROW->GetWidth(), TodCurves::CURVE_LINEAR); + TodAnimateCurve(0, 1000, mSodPosition, 0, Sexy::IMAGE_SOD1ROW->GetWidth(), TodCurves::CURVE_LINEAR); Rect aSrcRect(0, 0, aWidth, Sexy::IMAGE_SOD1ROW->GetHeight()); g->DrawImage(Sexy::IMAGE_SOD1ROW, 239 - BOARD_OFFSET, 265, aSrcRect); } else if (((mLevel == 2 || mLevel == 3) && mApp->IsFirstTimeAdventureMode()) || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_RESODDED) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_RESODDED) { g->DrawImage(Sexy::IMAGE_BACKGROUND1UNSODDED, -BOARD_OFFSET, 0); g->DrawImage(Sexy::IMAGE_SOD1ROW, 239 - BOARD_OFFSET, 265); int aWidth = - TodAnimateCurve(0, 1000, mSodPosition, 0, Sexy::IMAGE_SOD3ROW->GetWidth(), TodCurves::CURVE_LINEAR); + TodAnimateCurve(0, 1000, mSodPosition, 0, Sexy::IMAGE_SOD3ROW->GetWidth(), TodCurves::CURVE_LINEAR); Rect aSrcRect(0, 0, aWidth, Sexy::IMAGE_SOD3ROW->GetHeight()); g->DrawImage(Sexy::IMAGE_SOD3ROW, 235 - BOARD_OFFSET, 149, aSrcRect); } @@ -6633,7 +6633,7 @@ void Board::DrawBackdrop(Graphics *g) else if (aBgImage) { if (aBgImage == Sexy::IMAGE_BACKGROUND_MUSHROOMGARDEN || aBgImage == Sexy::IMAGE_BACKGROUND_GREENHOUSE || - aBgImage == Sexy::IMAGE_AQUARIUM1) + aBgImage == Sexy::IMAGE_AQUARIUM1) { g->DrawImage(aBgImage, 0, 0); } @@ -6735,7 +6735,7 @@ void Board::AddBossRenderItem(RenderItem *theRenderList, int &theCurRenderItem, } static inline void AddGameObjectRenderItem(RenderItem *theRenderList, int &theCurRenderItem, - RenderObjectType theRenderObjectType, GameObject *theGameObject) + RenderObjectType theRenderObjectType, GameObject *theGameObject) { TOD_ASSERT(theCurRenderItem < MAX_RENDER_ITEMS); RenderItem &aRenderItem = theRenderList[theCurRenderItem]; @@ -6746,7 +6746,7 @@ static inline void AddGameObjectRenderItem(RenderItem *theRenderList, int &theCu } static inline void AddGameObjectRenderItemCursorPreview(RenderItem *theRenderList, int &theCurRenderItem, - RenderObjectType theRenderObjectType, GameObject *theGameObject) + RenderObjectType theRenderObjectType, GameObject *theGameObject) { TOD_ASSERT(theCurRenderItem < MAX_RENDER_ITEMS); RenderItem &aRenderItem = theRenderList[theCurRenderItem]; @@ -6759,7 +6759,7 @@ static inline void AddGameObjectRenderItemCursorPreview(RenderItem *theRenderLis } static inline void AddGameObjectRenderItemPlant(RenderItem *theRenderList, int &theCurRenderItem, - RenderObjectType theRenderObjectType, GameObject *theGameObject) + RenderObjectType theRenderObjectType, GameObject *theGameObject) { TOD_ASSERT(theCurRenderItem < MAX_RENDER_ITEMS); RenderItem &aRenderItem = theRenderList[theCurRenderItem]; @@ -6772,7 +6772,7 @@ static inline void AddGameObjectRenderItemPlant(RenderItem *theRenderList, int & } static inline void AddGameObjectRenderItemZombie(RenderItem *theRenderList, int &theCurRenderItem, - RenderObjectType theRenderObjectType, GameObject *theGameObject) + RenderObjectType theRenderObjectType, GameObject *theGameObject) { TOD_ASSERT(theCurRenderItem < MAX_RENDER_ITEMS); RenderItem &aRenderItem = theRenderList[theCurRenderItem]; @@ -6784,7 +6784,7 @@ static inline void AddGameObjectRenderItemZombie(RenderItem *theRenderList, int } static inline void AddGameObjectRenderItemProjectile(RenderItem *theRenderList, int &theCurRenderItem, - RenderObjectType theRenderObjectType, GameObject *theGameObject) + RenderObjectType theRenderObjectType, GameObject *theGameObject) { TOD_ASSERT(theCurRenderItem < MAX_RENDER_ITEMS); RenderItem &aRenderItem = theRenderList[theCurRenderItem]; @@ -6796,7 +6796,7 @@ static inline void AddGameObjectRenderItemProjectile(RenderItem *theRenderList, } static inline void AddGameObjectRenderItemCoin(RenderItem *theRenderList, int &theCurRenderItem, - RenderObjectType theRenderObjectType, GameObject *theGameObject) + RenderObjectType theRenderObjectType, GameObject *theGameObject) { TOD_ASSERT(theCurRenderItem < MAX_RENDER_ITEMS); RenderItem &aRenderItem = theRenderList[theCurRenderItem]; @@ -6808,7 +6808,7 @@ static inline void AddGameObjectRenderItemCoin(RenderItem *theRenderList, int &t } static inline void AddUIRenderItem(RenderItem *theRenderList, int &theCurRenderItem, - RenderObjectType theRenderObjectType, int thePosZ) + RenderObjectType theRenderObjectType, int thePosZ) { TOD_ASSERT(theCurRenderItem < MAX_RENDER_ITEMS); RenderItem &aRenderItem = theRenderList[theCurRenderItem]; @@ -6832,7 +6832,7 @@ void Board::DrawGameObjects(Graphics *g) if (aPlant->mOnBungeeState == PlantOnBungeeState::NOT_ON_BUNGEE) { AddGameObjectRenderItemPlant(aRenderList, aRenderItemCount, RenderObjectType::RENDER_ITEM_PLANT, - aPlant); + aPlant); if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN && aPlant->mPottedPlantIndex != -1) { @@ -6844,8 +6844,8 @@ void Board::DrawGameObjects(Graphics *g) } if ((aPlant->mSeedType == SeedType::SEED_MAGNETSHROOM || - aPlant->mSeedType == SeedType::SEED_GOLD_MAGNET) && - aPlant->DrawMagnetItemsOnTop()) + aPlant->mSeedType == SeedType::SEED_GOLD_MAGNET) && + aPlant->DrawMagnetItemsOnTop()) { RenderItem &aRenderItem = aRenderList[aRenderItemCount]; aRenderItem.mRenderObjectType = RenderObjectType::RENDER_ITEM_PLANT_MAGNET_ITEMS; @@ -6874,7 +6874,7 @@ void Board::DrawGameObjects(Graphics *g) else { AddGameObjectRenderItemZombie(aRenderList, aRenderItemCount, RenderObjectType::RENDER_ITEM_ZOMBIE, - aZombie); + aZombie); if (aZombie->HasShadow()) { @@ -6901,7 +6901,7 @@ void Board::DrawGameObjects(Graphics *g) while (IterateProjectiles(aProjectile)) { AddGameObjectRenderItemProjectile(aRenderList, aRenderItemCount, RenderObjectType::RENDER_ITEM_PROJECTILE, - aProjectile); + aProjectile); RenderItem &aRenderItem = aRenderList[aRenderItemCount]; aRenderItem.mRenderObjectType = RenderObjectType::RENDER_ITEM_PROJECTILE_SHADOW; @@ -6960,7 +6960,7 @@ void Board::DrawGameObjects(Graphics *g) aRenderItemCount++; if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN && - aGridItem->mGridItemType == GridItemType::GRIDITEM_STINKY) + aGridItem->mGridItemType == GridItemType::GRIDITEM_STINKY) { RenderItem &aRenderItem = aRenderList[aRenderItemCount]; aRenderItem.mRenderObjectType = RenderObjectType::RENDER_ITEM_GRID_ITEM_OVERLAY; @@ -6992,7 +6992,7 @@ void Board::DrawGameObjects(Graphics *g) aZPos = MakeRenderOrder(RenderLayer::RENDER_LAYER_UI_BOTTOM, 0, 1); } else if (mCutScene->IsAfterSeedChooser() || mCutScene->IsInShovelTutorial() || - mHelpIndex == AdviceType::ADVICE_CLICK_TO_CONTINUE) + mHelpIndex == AdviceType::ADVICE_CLICK_TO_CONTINUE) { aZPos = MakeRenderOrder(RenderLayer::RENDER_LAYER_UI_BOTTOM, 0, 1); } @@ -7002,14 +7002,14 @@ void Board::DrawGameObjects(Graphics *g) } AddUIRenderItem(aRenderList, aRenderItemCount, RenderObjectType::RENDER_ITEM_BACKDROP, - MakeRenderOrder(RenderLayer::RENDER_LAYER_UI_BOTTOM, 0, 0)); + MakeRenderOrder(RenderLayer::RENDER_LAYER_UI_BOTTOM, 0, 0)); AddUIRenderItem(aRenderList, aRenderItemCount, RenderObjectType::RENDER_ITEM_BOTTOM_UI, aZPos); AddUIRenderItem(aRenderList, aRenderItemCount, RenderObjectType::RENDER_ITEM_COIN_BANK, - MakeRenderOrder(RenderLayer::RENDER_LAYER_COIN_BANK, 0, 0)); + MakeRenderOrder(RenderLayer::RENDER_LAYER_COIN_BANK, 0, 0)); AddUIRenderItem(aRenderList, aRenderItemCount, RenderObjectType::RENDER_ITEM_TOP_UI, - MakeRenderOrder(RenderLayer::RENDER_LAYER_UI_TOP, 0, 0)); + MakeRenderOrder(RenderLayer::RENDER_LAYER_UI_TOP, 0, 0)); AddUIRenderItem(aRenderList, aRenderItemCount, RenderObjectType::RENDER_ITEM_SCREEN_FADE, - MakeRenderOrder(RenderLayer::RENDER_LAYER_SCREEN_FADE, 0, 0)); + MakeRenderOrder(RenderLayer::RENDER_LAYER_SCREEN_FADE, 0, 0)); } if (mApp->mGameScene == GameScenes::SCENE_ZOMBIES_WON) { @@ -7027,22 +7027,22 @@ void Board::DrawGameObjects(Graphics *g) if (StageHasFog()) { AddUIRenderItem(aRenderList, aRenderItemCount, RenderObjectType::RENDER_ITEM_FOG, - MakeRenderOrder(RenderLayer::RENDER_LAYER_FOG, 0, 0)); + MakeRenderOrder(RenderLayer::RENDER_LAYER_FOG, 0, 0)); } if (mApp->IsStormyNightLevel() || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_RAINING_SEEDS) { AddUIRenderItem(aRenderList, aRenderItemCount, RenderObjectType::RENDER_ITEM_STORM, - MakeRenderOrder(RenderLayer::RENDER_LAYER_FOG, 0, 3)); + MakeRenderOrder(RenderLayer::RENDER_LAYER_FOG, 0, 3)); } AddGameObjectRenderItemCursorPreview(aRenderList, aRenderItemCount, RenderObjectType::RENDER_ITEM_CURSOR_PREVIEW, - mCursorPreview); + mCursorPreview); #if LAWN_USE_UNFINISHED_GAMEPAD_SUPPORT // Draw the gamepad grid cursor. During cutscenes (SCENE_LEVEL_INTRO), // we still draw it but it will stay stationary since movement is blocked. // We hide it during cobcannon targeting since the cobcannon uses its own reticule. if (mApp->UsingGamepad() && mVisualGamepadX >= 0.0f && - mCursorObject->mCursorType != CursorType::CURSOR_TYPE_COBCANNON_TARGET) + mCursorObject->mCursorType != CursorType::CURSOR_TYPE_COBCANNON_TARGET) { int aGridX = PixelToGridXKeepOnBoard((int)mGamepadX, (int)mGamepadY); int aGridY = PixelToGridYKeepOnBoard((int)mGamepadX, (int)mGamepadY); @@ -7152,8 +7152,8 @@ void Board::DrawGameObjects(Graphics *g) // Guard: skip if visual position is not yet initialized, // or if the cobcannon targeting cursor is active (it has its own reticule). if (!mApp->UsingGamepad() || mVisualGamepadX < 0.0f || - mCursorObject->mCursorType == CursorType::CURSOR_TYPE_COBCANNON_TARGET || - mApp->mGameScene != SCENE_PLAYING) + mCursorObject->mCursorType == CursorType::CURSOR_TYPE_COBCANNON_TARGET || + mApp->mGameScene != SCENE_PLAYING) break; { // mVisualGamepadX/Y = grid-locked lerp position (matches console's grid-snapped cursor). @@ -7199,9 +7199,9 @@ void Board::DrawGameObjects(Graphics *g) { SexyMatrix3 aMatrix; TodScaleTransformMatrix(aMatrix, aX + IMAGE_GAMEPAD_CURSOR_FRAME->mWidth / 2 - 12 + g->mTransX, - aY + IMAGE_GAMEPAD_CURSOR_FRAME->mHeight / 2 - 12 + g->mTransY, - (float)aW / IMAGE_GAMEPAD_CURSOR_FRAME->mWidth, - (float)aH / IMAGE_GAMEPAD_CURSOR_FRAME->mHeight); + aY + IMAGE_GAMEPAD_CURSOR_FRAME->mHeight / 2 - 12 + g->mTransY, + (float)aW / IMAGE_GAMEPAD_CURSOR_FRAME->mWidth, + (float)aH / IMAGE_GAMEPAD_CURSOR_FRAME->mHeight); // Use raw mGamepadX/Y for grid check — immediate skew response (no lerp delay). int aGridX = PixelToGridXKeepOnBoard((int)mGamepadX, (int)mGamepadY); if (aGridX <= 4) @@ -7211,25 +7211,25 @@ void Board::DrawGameObjects(Graphics *g) Color aFrameColor(255, 255, 255, 200 + (int)(55 * v9)); g->SetColor(aFrameColor); TodBltMatrix( - g, IMAGE_GAMEPAD_CURSOR_FRAME, aMatrix, g->mClipRect, aFrameColor, g->mDrawMode, - Rect(0, 0, IMAGE_GAMEPAD_CURSOR_FRAME->mWidth, IMAGE_GAMEPAD_CURSOR_FRAME->mHeight)); + g, IMAGE_GAMEPAD_CURSOR_FRAME, aMatrix, g->mClipRect, aFrameColor, g->mDrawMode, + Rect(0, 0, IMAGE_GAMEPAD_CURSOR_FRAME->mWidth, IMAGE_GAMEPAD_CURSOR_FRAME->mHeight)); // Frame shadow SexyMatrix3 aShadowMatrix; TodScaleTransformMatrix(aShadowMatrix, - aX + IMAGE_GAMEPAD_CURSOR_FRAME_SHADOW->mWidth - 8 + g->mTransX, - aY + IMAGE_GAMEPAD_CURSOR_FRAME_SHADOW->mHeight - 8 + g->mTransY, - (float)(aW - 8) / IMAGE_GAMEPAD_CURSOR_FRAME_SHADOW->mWidth, - (float)(aH - 8) / IMAGE_GAMEPAD_CURSOR_FRAME_SHADOW->mHeight); + aX + IMAGE_GAMEPAD_CURSOR_FRAME_SHADOW->mWidth - 8 + g->mTransX, + aY + IMAGE_GAMEPAD_CURSOR_FRAME_SHADOW->mHeight - 8 + g->mTransY, + (float)(aW - 8) / IMAGE_GAMEPAD_CURSOR_FRAME_SHADOW->mWidth, + (float)(aH - 8) / IMAGE_GAMEPAD_CURSOR_FRAME_SHADOW->mHeight); if (aGridX <= 4) { aShadowMatrix.m10 = tan(DEG_TO_RAD(-6)); } TodBltMatrix(g, IMAGE_GAMEPAD_CURSOR_FRAME_SHADOW, aShadowMatrix, g->mClipRect, - Color(255, 255, 200, 80 + (int)(40 * cosf(mMainCounter * 0.05f))), - Graphics::DRAWMODE_ADDITIVE, - Rect(0, 0, IMAGE_GAMEPAD_CURSOR_FRAME_SHADOW->mWidth, - IMAGE_GAMEPAD_CURSOR_FRAME_SHADOW->mHeight)); + Color(255, 255, 200, 80 + (int)(40 * cosf(mMainCounter * 0.05f))), + Graphics::DRAWMODE_ADDITIVE, + Rect(0, 0, IMAGE_GAMEPAD_CURSOR_FRAME_SHADOW->mWidth, + IMAGE_GAMEPAD_CURSOR_FRAME_SHADOW->mHeight)); } else { @@ -7350,15 +7350,15 @@ void Board::DrawGameObjects(Graphics *g) bool Board::HasProgressMeter() { if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || mApp->IsFinalBossLevel() || - mApp->IsSlotMachineLevel() || mApp->IsSquirrelLevel() || mApp->IsIZombieLevel()) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || mApp->IsFinalBossLevel() || + mApp->IsSlotMachineLevel() || mApp->IsSquirrelLevel() || mApp->IsIZombieLevel()) return true; if (mProgressMeterWidth == 0) return false; if (mApp->IsContinuousChallenge() || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || mApp->IsScaryPotterLevel()) + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || mApp->IsScaryPotterLevel()) return false; return true; @@ -7370,9 +7370,9 @@ bool Board::ProgressMeterHasFlags() return false; if (mApp->IsWhackAZombieLevel() || mApp->IsFinalBossLevel() || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || mApp->IsSlotMachineLevel() || - mApp->IsSquirrelLevel() || mApp->IsIZombieLevel()) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || mApp->IsSlotMachineLevel() || + mApp->IsSquirrelLevel() || mApp->IsIZombieLevel()) return false; return true; @@ -7394,40 +7394,40 @@ void Board::DrawProgressMeter(Graphics *g) int aPosX = aCelWidth / 2 + 600; Color aColor(224, 187, 98); if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST) { SexyString aMatchStr = - StrFormat("%d / %d %s", mChallenge->mChallengeScore, 75, TodStringTranslate("[MATCHES]").c_str()); + StrFormat("%d / %d %s", mChallenge->mChallengeScore, 75, TodStringTranslate("[MATCHES]").c_str()); TodDrawString(g, aMatchStr, aPosX, 589, Sexy::FONT_DWARVENTODCRAFT12, aColor, - DrawStringJustification::DS_ALIGN_CENTER); + DrawStringJustification::DS_ALIGN_CENTER); } else if (mApp->IsSquirrelLevel()) { SexyString aMatchStr = - StrFormat("%d / %d %s", mChallenge->mChallengeScore, 7, TodStringTranslate("[SQUIRRELS]").c_str()); + StrFormat("%d / %d %s", mChallenge->mChallengeScore, 7, TodStringTranslate("[SQUIRRELS]").c_str()); TodDrawString(g, aMatchStr, aPosX, 589, Sexy::FONT_DWARVENTODCRAFT12, aColor, - DrawStringJustification::DS_ALIGN_CENTER); + DrawStringJustification::DS_ALIGN_CENTER); } else if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_SLOT_MACHINE) { int aSunMoney = ClampInt(mSunMoney, 0, 2000); SexyString aMatchStr = StrFormat("%d / %d %s", aSunMoney, 2000, TodStringTranslate("[SUN]").c_str()); TodDrawString(g, aMatchStr, aPosX, 589, Sexy::FONT_DWARVENTODCRAFT12, aColor, - DrawStringJustification::DS_ALIGN_CENTER); + DrawStringJustification::DS_ALIGN_CENTER); } else if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM) { int aSunMoney = ClampInt(mSunMoney, 0, 1000); SexyString aMatchStr = StrFormat("%d / %d %s", aSunMoney, 1000, TodStringTranslate("[SUN]").c_str()); TodDrawString(g, aMatchStr, aPosX, 589, Sexy::FONT_DWARVENTODCRAFT12, aColor, - DrawStringJustification::DS_ALIGN_CENTER); + DrawStringJustification::DS_ALIGN_CENTER); } else if (mApp->IsIZombieLevel()) { SexyString aMatchStr = - StrFormat("%d / %d %s", mChallenge->mChallengeScore, 5, TodStringTranslate("[BRAINS]").c_str()); + StrFormat("%d / %d %s", mChallenge->mChallengeScore, 5, TodStringTranslate("[BRAINS]").c_str()); TodDrawString(g, aMatchStr, aPosX, 589, Sexy::FONT_DWARVENTODCRAFT12, aColor, - DrawStringJustification::DS_ALIGN_CENTER); + DrawStringJustification::DS_ALIGN_CENTER); } else if (ProgressMeterHasFlags()) { @@ -7457,9 +7457,9 @@ void Board::DrawProgressMeter(Graphics *g) g->DrawImage(Sexy::IMAGE_FLAGMETERLEVELPROGRESS, 638, 589); if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || mApp->IsSquirrelLevel() || - mApp->IsSlotMachineLevel() || mApp->IsIZombieLevel() || mApp->IsFinalBossLevel()) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || mApp->IsSquirrelLevel() || + mApp->IsSlotMachineLevel() || mApp->IsIZombieLevel() || mApp->IsFinalBossLevel()) return; int aHeadProgress = TodAnimateCurve(0, 150, mProgressMeterWidth, 0, 135, CURVE_LINEAR); g->DrawImageCel(Sexy::IMAGE_FLAGMETERPARTS, aCelWidth - aHeadProgress + 580, 572, 0, 0); @@ -7560,7 +7560,7 @@ void Board::DrawLevel(Graphics *g) aPosY += TodAnimateCurve(50, 0, mChallenge->mChallengeStateCounter, 0, 50, TodCurves::CURVE_EASE_IN_OUT); } TodDrawString(g, aLevelStr, aPosX, aPosY, Sexy::FONT_HOUSEOFTERROR16, Color(224, 187, 98), - DrawStringJustification::DS_ALIGN_RIGHT); + DrawStringJustification::DS_ALIGN_RIGHT); } void Board::DrawZenWheelBarrowButton(Graphics *g, int theOffsetY) @@ -7582,17 +7582,17 @@ void Board::DrawZenWheelBarrowButton(Graphics *g, int theOffsetY) if (aPlant->mPlantAge == PottedPlantAge::PLANTAGE_SMALL) { mApp->mZenGarden->DrawPottedPlant(g, aButtonRect.mX + 23, aButtonRect.mY + theOffsetY - 8, aPlant, 0.6f, - true); + true); } else if (aPlant->mPlantAge == PottedPlantAge::PLANTAGE_MEDIUM) { mApp->mZenGarden->DrawPottedPlant(g, aButtonRect.mX + 28, aButtonRect.mY + theOffsetY + 2, aPlant, 0.5f, - true); + true); } else { mApp->mZenGarden->DrawPottedPlant(g, aButtonRect.mX + 34, aButtonRect.mY + theOffsetY + 12, aPlant, 0.4f, - true); + true); } } else @@ -7610,7 +7610,7 @@ void Board::DrawZenButtons(Graphics *g) } for (GameObjectType aTool = GameObjectType::OBJECT_TYPE_WATERING_CAN; - aTool <= GameObjectType::OBJECT_TYPE_NEXT_GARDEN; aTool = (GameObjectType)(aTool + 1)) + aTool <= GameObjectType::OBJECT_TYPE_NEXT_GARDEN; aTool = (GameObjectType)(aTool + 1)) { if (!CanUseGameObject(aTool)) continue; @@ -7647,7 +7647,7 @@ void Board::DrawZenButtons(Graphics *g) else if (aTool == GameObjectType::OBJECT_TYPE_FERTILIZER) { int aCharges = - mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_FERTILIZER] - PURCHASE_COUNT_OFFSET; + mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_FERTILIZER] - PURCHASE_COUNT_OFFSET; if (aCharges == 0) { g->SetColorizeImages(true); @@ -7663,12 +7663,12 @@ void Board::DrawZenButtons(Graphics *g) SexyString aChargeString = StrFormat("x%d", aCharges); TodDrawString(g, aChargeString, aButtonRect.mX + 64, aButtonRect.mY + aOffsetY + 65, - Sexy::FONT_HOUSEOFTERROR16, Color::White, DS_ALIGN_RIGHT); + Sexy::FONT_HOUSEOFTERROR16, Color::White, DS_ALIGN_RIGHT); } else if (aTool == GameObjectType::OBJECT_TYPE_BUG_SPRAY) { int aCharges = - mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_BUG_SPRAY] - PURCHASE_COUNT_OFFSET; + mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_BUG_SPRAY] - PURCHASE_COUNT_OFFSET; if (aCharges == 0) { g->SetColorizeImages(true); @@ -7679,7 +7679,7 @@ void Board::DrawZenButtons(Graphics *g) SexyString aChargeString = StrFormat("x%d", aCharges); TodDrawString(g, aChargeString, aButtonRect.mX + 64, aButtonRect.mY + aOffsetY + 65, - Sexy::FONT_HOUSEOFTERROR16, Color::White, DS_ALIGN_RIGHT); + Sexy::FONT_HOUSEOFTERROR16, Color::White, DS_ALIGN_RIGHT); } else if (aTool == GameObjectType::OBJECT_TYPE_PHONOGRAPH) { @@ -7688,7 +7688,7 @@ void Board::DrawZenButtons(Graphics *g) else if (aTool == GameObjectType::OBJECT_TYPE_CHOCOLATE) { int aCharges = - mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_CHOCOLATE] - PURCHASE_COUNT_OFFSET; + mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_CHOCOLATE] - PURCHASE_COUNT_OFFSET; if (aCharges == 0) { g->SetColorizeImages(true); @@ -7699,12 +7699,12 @@ void Board::DrawZenButtons(Graphics *g) SexyString aChargeString = StrFormat("x%d", aCharges); TodDrawString(g, aChargeString, aButtonRect.mX + 64, aButtonRect.mY + aOffsetY + 65, - Sexy::FONT_HOUSEOFTERROR16, Color::White, DS_ALIGN_RIGHT); + Sexy::FONT_HOUSEOFTERROR16, Color::White, DS_ALIGN_RIGHT); } else if (aTool == GameObjectType::OBJECT_TYPE_GLOVE) { if (mCursorObject->mCursorType != CursorType::CURSOR_TYPE_PLANT_FROM_GLOVE && - mCursorObject->mCursorType != CursorType::CURSOR_TYPE_PLANT_FROM_WHEEL_BARROW) + mCursorObject->mCursorType != CursorType::CURSOR_TYPE_PLANT_FROM_WHEEL_BARROW) { g->DrawImage(Sexy::IMAGE_ZEN_GARDENGLOVE, aButtonRect.mX - 6, aButtonRect.mY + aOffsetY - 4); } @@ -7720,7 +7720,7 @@ void Board::DrawZenButtons(Graphics *g) else if (aTool == GameObjectType::OBJECT_TYPE_TREE_FOOD) { int aCharges = - mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_TREE_FOOD] - PURCHASE_COUNT_OFFSET; + mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_TREE_FOOD] - PURCHASE_COUNT_OFFSET; if (aCharges <= 0) { g->SetColorizeImages(true); @@ -7737,7 +7737,7 @@ void Board::DrawZenButtons(Graphics *g) SexyString aChargeString = StrFormat("x%d", aCharges); TodDrawString(g, aChargeString, aButtonRect.mX + 64, aButtonRect.mY + aOffsetY + 65, - Sexy::FONT_HOUSEOFTERROR16, Color::White, DS_ALIGN_RIGHT); + Sexy::FONT_HOUSEOFTERROR16, Color::White, DS_ALIGN_RIGHT); } } } @@ -7746,7 +7746,7 @@ void Board::DrawZenButtons(Graphics *g) void Board::DrawShovel(Graphics *g) { if (mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN && - mApp->mGameMode != GameMode::GAMEMODE_TREE_OF_WISDOM) + mApp->mGameMode != GameMode::GAMEMODE_TREE_OF_WISDOM) { if (mShowShovel) { @@ -7767,7 +7767,7 @@ void Board::DrawShovel(Graphics *g) } if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) { DrawZenButtons(g); } @@ -7790,16 +7790,16 @@ void Board::DrawDebugText(Graphics *g) aText += StrFormat("CurrentWave: %d of %d\n", mCurrentWave, mNumWaves); aText += StrFormat("TimeSinseLastSpawn: %d %s\n", aTime, aTime > 400 ? "" : "(too soon)"); aText += - StrFormat("ZombieCountDown: %d/%d (%.0f%%)\n", mZombieCountDown, mZombieCountDownStart, aCountDownFraction); + StrFormat("ZombieCountDown: %d/%d (%.0f%%)\n", mZombieCountDown, mZombieCountDownStart, aCountDownFraction); if (mZombieHealthToNextWave != -1) { int aTotalHealth = TotalZombiesHealthInWave(mCurrentWave - 1); int aHealthRange = std::max(mZombieHealthWaveStart - mZombieHealthToNextWave, 1); float aHealthFraction = - (float)(mZombieHealthToNextWave - aTotalHealth + aHealthRange) / (float)aHealthRange; + (float)(mZombieHealthToNextWave - aTotalHealth + aHealthRange) / (float)aHealthRange; aText += StrFormat("ZombieHealth: CurZombieHealth %d trigger %d (%.0f%%)\n", aTotalHealth, - mZombieHealthToNextWave, aHealthFraction * 100); + mZombieHealthToNextWave, aHealthFraction * 100); } else { @@ -7880,11 +7880,11 @@ void Board::DrawDebugText(Graphics *g) int aPackedOrderMain = mApp->mMusic->GetMusicOrder(mApp->mMusic->mCurMusicFileMain); int aCurrentOrder = LOWORD(aPackedOrderMain); aText += - StrFormat("Music order %02d row %02d\n", LOWORD(aPackedOrderMain), HIWORD(aPackedOrderMain) / 4); + StrFormat("Music order %02d row %02d\n", LOWORD(aPackedOrderMain), HIWORD(aPackedOrderMain) / 4); if (mApp->mMusic->mCurMusicTune == MusicTune::MUSIC_TUNE_DAY_GRASSWALK || - mApp->mMusic->mCurMusicTune == MusicTune::MUSIC_TUNE_POOL_WATERYGRAVES || - mApp->mMusic->mCurMusicTune == MusicTune::MUSIC_TUNE_FOG_RIGORMORMIST || - mApp->mMusic->mCurMusicTune == MusicTune::MUSIC_TUNE_ROOF_GRAZETHEROOF) + mApp->mMusic->mCurMusicTune == MusicTune::MUSIC_TUNE_POOL_WATERYGRAVES || + mApp->mMusic->mCurMusicTune == MusicTune::MUSIC_TUNE_FOG_RIGORMORMIST || + mApp->mMusic->mCurMusicTune == MusicTune::MUSIC_TUNE_ROOF_GRAZETHEROOF) { int aPackedOrderHihats = mApp->mMusic->GetMusicOrder(mApp->mMusic->mCurMusicFileHihats); int aPackedOrderDrums = mApp->mMusic->GetMusicOrder(mApp->mMusic->mCurMusicFileDrums); @@ -7911,7 +7911,7 @@ void Board::DrawDebugText(Graphics *g) { int aPackedOrderDrums = mApp->mMusic->GetMusicOrder(mApp->mMusic->mCurMusicFileDrums); aText += StrFormat("Drum order %02d row %02d\n", LOWORD(aPackedOrderDrums), - HIWORD(aPackedOrderDrums) / 4); + HIWORD(aPackedOrderDrums) / 4); int aDiffDrums = HIWORD(aPackedOrderDrums) - HIWORD(aPackedOrderMain); if (abs(aDiffDrums) > 0 && abs(aDiffDrums) <= 128) { @@ -7982,7 +7982,7 @@ void Board::DrawDebugText(Graphics *g) aText += StrFormat("axis X Right: %.2f\n", mApp->mGamepads[0]->GetRightAxisXPosition()); aText += StrFormat("axis Y Right: %.2f\n", mApp->mGamepads[0]->GetRightAxisYPosition()); aText += StrFormat("rumble: %s\n", - mApp->mGamepads[0]->IsButtonDown(GamepadButtons::BUTTON_LEFT_SHOULDER) ? "on" : "off"); + mApp->mGamepads[0]->IsButtonDown(GamepadButtons::BUTTON_LEFT_SHOULDER) ? "on" : "off"); if (mApp->mGamepads[0]->IsButtonDown(GamepadButtons::BUTTON_LEFT_SHOULDER)) { @@ -8138,9 +8138,9 @@ void Board::DrawTopRightUI(Graphics *g) if (mChallenge->mChallengeState == STATECHALLENGE_ZEN_FADING) { mMenuButton->mY = - TodAnimateCurve(50, 0, mChallenge->mChallengeStateCounter, -10, -50, TodCurves::CURVE_EASE_IN_OUT); + TodAnimateCurve(50, 0, mChallenge->mChallengeStateCounter, -10, -50, TodCurves::CURVE_EASE_IN_OUT); mStoreButton->mX = - TodAnimateCurve(50, 0, mChallenge->mChallengeStateCounter, 678, 800, TodCurves::CURVE_EASE_IN_OUT); + TodAnimateCurve(50, 0, mChallenge->mChallengeStateCounter, 678, 800, TodCurves::CURVE_EASE_IN_OUT); } else { @@ -8187,8 +8187,8 @@ void Board::DrawUIBottom(Graphics *g) { g->SetDrawMode(Graphics::DRAWMODE_ADDITIVE); g->DrawImage( - IMAGE_BACKGROUND_GREENHOUSE_OVERLAY, Rect(0, 0, BOARD_WIDTH, BOARD_HEIGHT), - Rect(0, 0, IMAGE_BACKGROUND_GREENHOUSE_OVERLAY->mWidth, IMAGE_BACKGROUND_GREENHOUSE_OVERLAY->mHeight)); + IMAGE_BACKGROUND_GREENHOUSE_OVERLAY, Rect(0, 0, BOARD_WIDTH, BOARD_HEIGHT), + Rect(0, 0, IMAGE_BACKGROUND_GREENHOUSE_OVERLAY->mWidth, IMAGE_BACKGROUND_GREENHOUSE_OVERLAY->mHeight)); g->SetDrawMode(Graphics::DRAWMODE_NORMAL); } @@ -8224,7 +8224,7 @@ void Board::DrawUICoinBank(Graphics *g) int aPosX = 57; int aPosY = 599 - Sexy::IMAGE_COINBANK->GetHeight(); if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mCrazyDaveState != CrazyDaveState::CRAZY_DAVE_OFF) + mApp->mCrazyDaveState != CrazyDaveState::CRAZY_DAVE_OFF) { aPosX = 450 - mX; } @@ -8383,7 +8383,7 @@ void Board::DrawFog(Graphics *g) bool Board::IsScaryPotterDaveTalking() { return mApp->IsScaryPotterLevel() && mNextSurvivalStageCounter > 0 && - mApp->mCrazyDaveState != CrazyDaveState::CRAZY_DAVE_OFF; + mApp->mCrazyDaveState != CrazyDaveState::CRAZY_DAVE_OFF; } void Board::DrawUITop(Graphics *g) @@ -8410,7 +8410,7 @@ void Board::DrawUITop(Graphics *g) } if ((mApp->mGameMode == GameMode::GAMEMODE_UPSELL || mApp->mGameMode == GameMode::GAMEMODE_INTRO) && - mCutScene->mUpsellHideBoard) + mCutScene->mUpsellHideBoard) { g->SetColor(Color(0, 0, 0)); g->FillRect(0, 0, BOARD_WIDTH, BOARD_HEIGHT); @@ -8426,8 +8426,8 @@ void Board::DrawUITop(Graphics *g) } if (mApp->mGameScene == GameScenes::SCENE_LEVEL_INTRO || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || IsScaryPotterDaveTalking()) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || IsScaryPotterDaveTalking()) { Graphics aScreenSpace(*g); aScreenSpace.mTransX -= mX; @@ -8667,8 +8667,8 @@ void Board::KeyDown(KeyCode theKey) DoTypingCheck(theKey); if (mApp->mGameScene == GameScenes::SCENE_LEVEL_INTRO && - mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN && - mApp->mGameMode != GameMode::GAMEMODE_TREE_OF_WISDOM) + mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN && + mApp->mGameMode != GameMode::GAMEMODE_TREE_OF_WISDOM) { mCutScene->KeyDown(theKey); } @@ -8679,7 +8679,7 @@ void Board::KeyDown(KeyCode theKey) mChallenge->AdvanceCrazyDaveDialog(); } else if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) { mApp->mZenGarden->AdvanceCrazyDaveDialog(); } @@ -8723,7 +8723,7 @@ void Board::KeyChar(SexyChar theChar) PottedPlant aPottedPlant; aPottedPlant.InitializePottedPlant(SeedType::SEED_MARIGOLD); aPottedPlant.mDrawVariation = (DrawVariation)RandRangeInt( - (int)DrawVariation::VARIATION_MARIGOLD_WHITE, (int)DrawVariation::VARIATION_MARIGOLD_LIGHT_GREEN); + (int)DrawVariation::VARIATION_MARIGOLD_WHITE, (int)DrawVariation::VARIATION_MARIGOLD_LIGHT_GREEN); mApp->mZenGarden->AddPottedPlant(&aPottedPlant); } return; @@ -8765,40 +8765,40 @@ void Board::KeyChar(SexyChar theChar) { aPlant->mHighlighted = true; mApp->mZenGarden->MouseDownWithFeedingTool(aPlant->mX, aPlant->mY, - CursorType::CURSOR_TYPE_WATERING_CAN); + CursorType::CURSOR_TYPE_WATERING_CAN); return; } else if (aNeed == PottedPlantNeed::PLANTNEED_FERTILIZER) { aPlant->mHighlighted = true; if (mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_FERTILIZER] <= - PURCHASE_COUNT_OFFSET) + PURCHASE_COUNT_OFFSET) { mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_FERTILIZER] = - PURCHASE_COUNT_OFFSET + 1; + PURCHASE_COUNT_OFFSET + 1; } mApp->mZenGarden->MouseDownWithFeedingTool(aPlant->mX, aPlant->mY, - CursorType::CURSOR_TYPE_FERTILIZER); + CursorType::CURSOR_TYPE_FERTILIZER); return; } else if (aNeed == PottedPlantNeed::PLANTNEED_BUGSPRAY) { aPlant->mHighlighted = true; if (mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_BUG_SPRAY] <= - PURCHASE_COUNT_OFFSET) + PURCHASE_COUNT_OFFSET) { mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_BUG_SPRAY] = - PURCHASE_COUNT_OFFSET + 1; + PURCHASE_COUNT_OFFSET + 1; } mApp->mZenGarden->MouseDownWithFeedingTool(aPlant->mX, aPlant->mY, - CursorType::CURSOR_TYPE_BUG_SPRAY); + CursorType::CURSOR_TYPE_BUG_SPRAY); return; } else if (aNeed == PottedPlantNeed::PLANTNEED_PHONOGRAPH) { aPlant->mHighlighted = true; mApp->mZenGarden->MouseDownWithFeedingTool(aPlant->mX, aPlant->mY, - CursorType::CURSOR_TYPE_PHONOGRAPH); + CursorType::CURSOR_TYPE_PHONOGRAPH); return; } } @@ -9104,7 +9104,7 @@ void Board::KeyChar(SexyChar theChar) } if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS_2) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS_2) { if (theChar == 'w') { @@ -9459,8 +9459,8 @@ void Board::KeyChar(SexyChar theChar) if (theChar == 'M') { mApp->mMusic->mBurstOverride = - (MusicBurstType)((int)MusicBurstType::MUSIC_BURST_REPLACE - - (mApp->mMusic->mBurstOverride != MusicBurstType::MUSIC_BURST_ADDON)); + (MusicBurstType)((int)MusicBurstType::MUSIC_BURST_REPLACE - + (mApp->mMusic->mBurstOverride != MusicBurstType::MUSIC_BURST_ADDON)); return; } @@ -9604,10 +9604,10 @@ void Board::ProcessDeleteQueue() bool Board::HasConveyorBeltSeedBank() { return mApp->IsFinalBossLevel() || mApp->IsMiniBossLevel() || mApp->IsShovelLevel() || - mApp->IsWallnutBowlingLevel() || mApp->IsLittleTroubleLevel() || mApp->IsStormyNightLevel() || - mApp->IsBungeeBlitzLevel() || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_PORTAL_COMBAT || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_COLUMN || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_INVISIGHOUL; + mApp->IsWallnutBowlingLevel() || mApp->IsLittleTroubleLevel() || mApp->IsStormyNightLevel() || + mApp->IsBungeeBlitzLevel() || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_PORTAL_COMBAT || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_COLUMN || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_INVISIGHOUL; } int Board::GetNumSeedsInBank() @@ -9637,7 +9637,7 @@ int Board::GetNumSeedsInBank() return 6; } if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST) { return 0; } @@ -9646,15 +9646,15 @@ int Board::GetNumSeedsInBank() return 2; } if (mApp->mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_1 || - mApp->mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_2 || - mApp->mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_3 || - mApp->mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_4) + mApp->mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_2 || + mApp->mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_3 || + mApp->mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_4) { return 3; } if (mApp->mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_5 || - mApp->mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_6 || - mApp->mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_7) + mApp->mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_6 || + mApp->mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_7) { return 4; } @@ -9673,25 +9673,25 @@ int Board::GetNumSeedsInBank() int aNumSeeds = mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_PACKET_UPGRADE] + 6; int aSeedsAvailable = mApp->GetSeedsAvailable(); - return std::min({aNumSeeds, aSeedsAvailable, SEEDBANK_MAX}); + return std::min({ aNumSeeds, aSeedsAvailable, SEEDBANK_MAX }); } bool Board::StageIsNight() { return mBackground == BackgroundType::BACKGROUND_2_NIGHT || mBackground == BackgroundType::BACKGROUND_4_FOG || - mBackground == BackgroundType::BACKGROUND_6_BOSS || - mBackground == BackgroundType::BACKGROUND_MUSHROOM_GARDEN || - mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM; + mBackground == BackgroundType::BACKGROUND_6_BOSS || + mBackground == BackgroundType::BACKGROUND_MUSHROOM_GARDEN || + mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM; } bool Board::StageHasGraveStones() { if (mApp->IsWallnutBowlingLevel() || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_POGO_PARTY || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_PORTAL_COMBAT || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND || mApp->IsIZombieLevel() || - mApp->IsScaryPotterLevel()) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_PORTAL_COMBAT || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND || mApp->IsIZombieLevel() || + mApp->IsScaryPotterLevel()) return false; return mBackground == BackgroundType::BACKGROUND_2_NIGHT; @@ -9715,10 +9715,10 @@ bool Board::StageHas6Rows() bool Board::StageHasZombieWalkInFromRight() { if (mApp->IsWhackAZombieLevel() || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ICE || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || mApp->IsFinalBossLevel() || - mApp->IsIZombieLevel() || mApp->IsSquirrelLevel() || mApp->IsScaryPotterLevel()) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || mApp->IsFinalBossLevel() || + mApp->IsIZombieLevel() || mApp->IsSquirrelLevel() || mApp->IsScaryPotterLevel()) return false; return true; @@ -9727,7 +9727,7 @@ bool Board::StageHasZombieWalkInFromRight() bool Board::StageHasFog() { return !mApp->IsStormyNightLevel() && mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_INVISIGHOUL && - mBackground == BackgroundType::BACKGROUND_4_FOG; + mBackground == BackgroundType::BACKGROUND_4_FOG; } int Board::LeftFogColumn() @@ -9766,7 +9766,10 @@ int Board::GetSeedPacketPositionX(int theIndex) int Board::GetSeedBankExtraWidth() { int aNumPackets = mSeedBank->mNumPackets; - return aNumPackets <= 6 ? 0 : aNumPackets == 7 ? 60 : aNumPackets == 8 ? 76 : aNumPackets == 9 ? 112 : 153; + return aNumPackets <= 6 ? 0 : aNumPackets == 7 ? 60 + : aNumPackets == 8 ? 76 + : aNumPackets == 9 ? 112 + : 153; } void Board::OffsetYForPlanting(int &theY, SeedType theSeedType) @@ -9780,7 +9783,7 @@ void Board::OffsetYForPlanting(int &theY, SeedType theSeedType) theY -= 15; } if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN && - mBackground == BackgroundType::BACKGROUND_GREENHOUSE) + mBackground == BackgroundType::BACKGROUND_GREENHOUSE) { theY -= 25; } @@ -9835,8 +9838,8 @@ int Board::PixelToGridX(int theX, int theY) if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) { if (mBackground == BackgroundType::BACKGROUND_GREENHOUSE || - mBackground == BackgroundType::BACKGROUND_MUSHROOM_GARDEN || - mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM) + mBackground == BackgroundType::BACKGROUND_MUSHROOM_GARDEN || + mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM) { return mApp->mZenGarden->PixelToGridX(theX, theY); } @@ -9859,8 +9862,8 @@ int Board::PixelToGridY(int theX, int theY) if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) { if (mBackground == BackgroundType::BACKGROUND_GREENHOUSE || - mBackground == BackgroundType::BACKGROUND_MUSHROOM_GARDEN || - mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM) + mBackground == BackgroundType::BACKGROUND_MUSHROOM_GARDEN || + mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM) { return mApp->mZenGarden->PixelToGridY(theX, theY); } @@ -9901,8 +9904,8 @@ int Board::GridToPixelX(int theGridX, int theGridY) if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) { if (mBackground == BackgroundType::BACKGROUND_GREENHOUSE || - mBackground == BackgroundType::BACKGROUND_MUSHROOM_GARDEN || - mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM) + mBackground == BackgroundType::BACKGROUND_MUSHROOM_GARDEN || + mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM) { return mApp->mZenGarden->GridToPixelX(theGridX, theGridY); } @@ -9934,8 +9937,8 @@ int Board::GridToPixelY(int theGridX, int theGridY) if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) { if (mBackground == BackgroundType::BACKGROUND_GREENHOUSE || - mBackground == BackgroundType::BACKGROUND_MUSHROOM_GARDEN || - mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM) + mBackground == BackgroundType::BACKGROUND_MUSHROOM_GARDEN || + mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM) { return mApp->mZenGarden->GridToPixelY(theGridX, theGridY); } @@ -10257,14 +10260,14 @@ void Board::DropLootPiece(int thePosX, int thePosY, int theDropFactor) if (mApp->IsFirstTimeAdventureMode()) { if (mLevel == 22 && mCurrentWave > 5 && !mApp->mPlayerInfo->mHasUnlockedMinigames && - CountCoinByType(CoinType::COIN_PRESENT_MINIGAMES) == 0) + CountCoinByType(CoinType::COIN_PRESENT_MINIGAMES) == 0) { mApp->PlayFoley(FoleyType::FOLEY_ART_CHALLENGE); AddCoin(thePosX, thePosY, CoinType::COIN_PRESENT_MINIGAMES, CoinMotion::COIN_MOTION_COIN); return; } if (mLevel == 36 && mCurrentWave > 5 && !mApp->mPlayerInfo->mHasUnlockedPuzzleMode && - CountCoinByType(CoinType::COIN_PRESENT_PUZZLE_MODE) == 0) + CountCoinByType(CoinType::COIN_PRESENT_PUZZLE_MODE) == 0) { mApp->PlayFoley(FoleyType::FOLEY_ART_CHALLENGE); AddCoin(thePosX, thePosY, CoinType::COIN_PRESENT_PUZZLE_MODE, CoinMotion::COIN_MOTION_COIN); @@ -10285,7 +10288,9 @@ void Board::DropLootPiece(int thePosX, int thePosY, int theDropFactor) if (mApp->IsWhackAZombieLevel()) { int aSunChanceMin = 2500; - int aSunChanceMax = mSunMoney > 500 ? 2800 : mSunMoney > 350 ? 3100 : mSunMoney > 200 ? 3700 : 5000; + int aSunChanceMax = mSunMoney > 500 ? 2800 : mSunMoney > 350 ? 3100 + : mSunMoney > 200 ? 3700 + : 5000; if (aDropHit >= aSunChanceMin * theDropFactor && aDropHit <= aSunChanceMax * theDropFactor) { mApp->PlayFoley(FoleyType::FOLEY_SPAWN_SUN); @@ -10342,7 +10347,7 @@ void Board::DropLootPiece(int thePosX, int thePosY, int theDropFactor) else if (aDropHit < aDiamondChance * theDropFactor) { aCoinType = mApp->mPlayerInfo->mPurchases[StoreItem::STORE_ITEM_PACKET_UPGRADE] < 1 ? CoinType::COIN_GOLD - : CoinType::COIN_DIAMOND; + : CoinType::COIN_DIAMOND; } else if (aDropHit < aGoldChance * theDropFactor) { @@ -10385,7 +10390,7 @@ bool Board::BungeeIsTargetingCell(int theGridX, int theGridY) while (IterateZombies(aZombie)) { if (!aZombie->IsDeadOrDying() && aZombie->mZombieType == ZombieType::ZOMBIE_BUNGEE && - aZombie->mRow == theGridY && aZombie->mTargetCol == theGridX) + aZombie->mRow == theGridY && aZombie->mTargetCol == theGridX) { return true; } @@ -10426,7 +10431,7 @@ Plant *Board::FindUmbrellaPlant(int theGridX, int theGridY) while (IteratePlants(aPlant)) { if (aPlant->mSeedType == SeedType::SEED_UMBRELLA && !aPlant->NotOnGround() && - GridInRange(theGridX, theGridY, aPlant->mPlantCol, aPlant->mRow, 1, 1)) + GridInRange(theGridX, theGridY, aPlant->mPlantCol, aPlant->mRow, 1, 1)) { return aPlant; } @@ -10489,7 +10494,7 @@ void Board::UpdateGridItems() while (IterateGridItems(aGridItem)) { if (mEnableGraveStones && aGridItem->mGridItemType == GridItemType::GRIDITEM_GRAVESTONE && - aGridItem->mGridItemCounter < 100) + aGridItem->mGridItemCounter < 100) { aGridItem->mGridItemCounter++; } @@ -10535,7 +10540,7 @@ bool Board::PlantingRequirementsMet(SeedType theSeedType) } std::vector Board::GetZombiesInRadius(int theRow, int theX, int theY, int theRadius, int theRowRange, - int theDamageRangeFlags) + int theDamageRangeFlags) { std::vector aVec; aVec.reserve(mZombies.mSize); @@ -10552,7 +10557,7 @@ std::vector Board::GetZombiesInRadius(int theRow, int theX, int theY, } if (aRowDist <= theRowRange && aRowDist >= -theRowRange && - GetCircleRectOverlap(theX, theY, theRadius, aZombieRect)) + GetCircleRectOverlap(theX, theY, theRadius, aZombieRect)) { aVec.push_back(aZombie); } @@ -10562,7 +10567,7 @@ std::vector Board::GetZombiesInRadius(int theRow, int theX, int theY, } void Board::KillAllZombiesInRadius(int theRow, int theX, int theY, int theRadius, int theRowRange, bool theBurn, - int theDamageRangeFlags) + int theDamageRangeFlags) { Zombie *aZombie = nullptr; while (IterateZombies(aZombie)) @@ -10577,7 +10582,7 @@ void Board::KillAllZombiesInRadius(int theRow, int theX, int theY, int theRadius } if (aRowDist <= theRowRange && aRowDist >= -theRowRange && - GetCircleRectOverlap(theX, theY, theRadius, aZombieRect)) + GetCircleRectOverlap(theX, theY, theRadius, aZombieRect)) { if (theBurn) { @@ -10586,7 +10591,7 @@ void Board::KillAllZombiesInRadius(int theRow, int theX, int theY, int theRadius else { aZombie->TakeDamage(1800, GetBit(DamageFlags::DAMAGE_HITS_SHIELD_AND_BODY) | - GetBit(DamageFlags::DAMAGE_DOESNT_LEAVE_BODY)); + GetBit(DamageFlags::DAMAGE_DOESNT_LEAVE_BODY)); } } } @@ -10654,7 +10659,7 @@ bool Board::CanUseGameObject(GameObjectType theGameObject) if (mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) { return theGameObject == GameObjectType::OBJECT_TYPE_TREE_FOOD || - theGameObject == GameObjectType::OBJECT_TYPE_NEXT_GARDEN; + theGameObject == GameObjectType::OBJECT_TYPE_NEXT_GARDEN; } if (mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) { @@ -10668,8 +10673,8 @@ bool Board::CanUseGameObject(GameObjectType theGameObject) if (theGameObject == GameObjectType::OBJECT_TYPE_NEXT_GARDEN) { return mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_MUSHROOM_GARDEN] || - mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_AQUARIUM_GARDEN] || - mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_TREE_OF_WISDOM]; + mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_AQUARIUM_GARDEN] || + mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_TREE_OF_WISDOM]; } if (theGameObject == GameObjectType::OBJECT_TYPE_FERTILIZER) { @@ -10776,5 +10781,5 @@ int Board::NumberZombiesInWave(int theWaveIndex) bool Board::IsZombieTypeSpawnedOnly(ZombieType theZombieType) { return (theZombieType == ZombieType::ZOMBIE_BACKUP_DANCER || theZombieType == ZombieType::ZOMBIE_BOBSLED || - theZombieType == ZombieType::ZOMBIE_IMP); + theZombieType == ZombieType::ZOMBIE_IMP); } diff --git a/src/Lawn/Challenge.cpp b/src/Lawn/Challenge.cpp index e538690..d73f2f8 100644 --- a/src/Lawn/Challenge.cpp +++ b/src/Lawn/Challenge.cpp @@ -31,6 +31,8 @@ #include "../Sexy.TodLib/TodStringFile.h" #include "../SexyAppFramework/WidgetManager.h" +// clang-format off + int gZombieWaves[NUM_LEVELS] = { 4, 6, 8, 10, 8, 10, 20, 10, 20, 20, 10, 20, 10, 20, 10, 10, 20, 10, 20, 20, 10, 20, 20, 30, 20, 20, 30, 20, 30, 30, 10, 20, 10, 20, 20, 10, 20, 10, 20, 20, 10, 20, 20, 30, 20, 20, 30, 20, 30, 30, @@ -161,31 +163,36 @@ ZombieAllowedLevels gZombieAllowedLevels[NUM_ZOMBIE_TYPES] = { {ZOMBIE_REDEYE_GARGANTUAR, {0}}, }; +// clang-format on + SeedType gArtChallengeWallnut[MAX_GRID_SIZE_Y][MAX_GRID_SIZE_X] = { - {SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_WALLNUT, SEED_WALLNUT, SEED_NONE, SEED_NONE}, - {SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_NONE}, - {SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_NONE}, - {SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_NONE}, - {SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_WALLNUT, SEED_WALLNUT, SEED_NONE, SEED_NONE}, - {SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE}}; + { SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_WALLNUT, SEED_WALLNUT, SEED_NONE, SEED_NONE }, + { SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_NONE }, + { SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_NONE }, + { SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_NONE }, + { SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_WALLNUT, SEED_WALLNUT, SEED_NONE, SEED_NONE }, + { SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE } +}; SeedType gArtChallengeSunFlower[MAX_GRID_SIZE_Y][MAX_GRID_SIZE_X] = { - {SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE}, - {SEED_NONE, SEED_STARFRUIT, SEED_WALLNUT, SEED_WALLNUT, SEED_WALLNUT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, - SEED_NONE}, - {SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE}, - {SEED_NONE, SEED_NONE, SEED_NONE, SEED_UMBRELLA, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE}, - {SEED_NONE, SEED_NONE, SEED_UMBRELLA, SEED_UMBRELLA, SEED_UMBRELLA, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE}, - {SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE}}; + { SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE }, + { SEED_NONE, SEED_STARFRUIT, SEED_WALLNUT, SEED_WALLNUT, SEED_WALLNUT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, + SEED_NONE }, + { SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE }, + { SEED_NONE, SEED_NONE, SEED_NONE, SEED_UMBRELLA, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE }, + { SEED_NONE, SEED_NONE, SEED_UMBRELLA, SEED_UMBRELLA, SEED_UMBRELLA, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE }, + { SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE } +}; SeedType gArtChallengeStarFruit[MAX_GRID_SIZE_Y][MAX_GRID_SIZE_X] = { - {SEED_NONE, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE}, - {SEED_NONE, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE}, - {SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, - SEED_NONE, SEED_NONE}, - {SEED_NONE, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE}, - {SEED_NONE, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_NONE, SEED_NONE}, - {SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE}}; + { SEED_NONE, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE }, + { SEED_NONE, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE }, + { SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, + SEED_NONE, SEED_NONE }, + { SEED_NONE, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE }, + { SEED_NONE, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_NONE, SEED_NONE }, + { SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE } +}; Challenge::Challenge() { @@ -220,7 +227,7 @@ Challenge::Challenge() Rect aHandleRect = SlotMachineGetHandleRect(); ReanimatorEnsureDefinitionLoaded(REANIM_SLOT_MACHINE_HANDLE, true); Reanimation *aHandleReanim = - mApp->AddReanimation(aHandleRect.mX - 377, aHandleRect.mY - 20, 0, REANIM_SLOT_MACHINE_HANDLE); + mApp->AddReanimation(aHandleRect.mX - 377, aHandleRect.mY - 20, 0, REANIM_SLOT_MACHINE_HANDLE); aHandleReanim->mIsAttachment = true; aHandleReanim->mAnimRate = 0; mReanimChallenge = mApp->ReanimationGetID(aHandleReanim); @@ -347,7 +354,7 @@ void Challenge::StartLevel() ScaryPotterStart(); } if (mApp->IsLittleTroubleLevel() || mApp->IsStormyNightLevel() || mApp->IsBungeeBlitzLevel() || - aGameMode == GAMEMODE_CHALLENGE_INVISIGHOUL) + aGameMode == GAMEMODE_CHALLENGE_INVISIGHOUL) { mBoard->mZombieCountDown = 200; mBoard->mZombieCountDownStart = mBoard->mZombieCountDown; @@ -360,18 +367,18 @@ void Challenge::StartLevel() if (mSurvivalStage == 0) { SexyString aMessage = - mApp->IsSurvivalNormal(aGameMode) - ? TodReplaceNumberString("[ADVICE_SURVIVE_FLAGS]", "{FLAGS}", SURVIVAL_NORMAL_FLAGS) - : mApp->IsSurvivalHard(aGameMode) - ? TodReplaceNumberString("[ADVICE_SURVIVE_FLAGS]", "{FLAGS}", SURVIVAL_HARD_FLAGS) - : "[ADVICE_SURVIVE_ENDLESS]"; + mApp->IsSurvivalNormal(aGameMode) + ? TodReplaceNumberString("[ADVICE_SURVIVE_FLAGS]", "{FLAGS}", SURVIVAL_NORMAL_FLAGS) + : mApp->IsSurvivalHard(aGameMode) + ? TodReplaceNumberString("[ADVICE_SURVIVE_FLAGS]", "{FLAGS}", SURVIVAL_HARD_FLAGS) + : "[ADVICE_SURVIVE_ENDLESS]"; mBoard->DisplayAdvice(aMessage, MESSAGE_STYLE_HINT_FAST, ADVICE_SURVIVE_FLAGS); } } if (aGameMode == GAMEMODE_CHALLENGE_LAST_STAND && mSurvivalStage == 0) { mBoard->DisplayAdvice(TodReplaceNumberString("[ADVICE_SURVIVE_FLAGS]", "{FLAGS}", LAST_STAND_FLAGS), - MESSAGE_STYLE_BIG_MIDDLE_FAST, ADVICE_SURVIVE_FLAGS); + MESSAGE_STYLE_BIG_MIDDLE_FAST, ADVICE_SURVIVE_FLAGS); } if (aGameMode == GAMEMODE_CHALLENGE_ART_CHALLENGE_WALLNUT) { @@ -432,7 +439,7 @@ void Challenge::StartLevel() if (aGameMode == GAMEMODE_CHALLENGE_ZOMBIQUARIUM) { mBoard->DisplayAdvice("[ADVICE_ZOMBIQUARIUM_CLICK_TO_FEED]", MESSAGE_STYLE_HINT_TALL_FAST, - ADVICE_ZOMBIQUARIUM_CLICK_TO_FEED); + ADVICE_ZOMBIQUARIUM_CLICK_TO_FEED); ZombiquariumSpawnSnorkle(); ZombiquariumSpawnSnorkle(); } @@ -452,9 +459,9 @@ bool Challenge::BeghouledTwistValidMove(int theGridX, int theGridY, BeghouledBoa return false; return theBoardState->mSeedType[theGridX][theGridY] != SEED_NONE && - theBoardState->mSeedType[theGridX + 1][theGridY] != SEED_NONE && - theBoardState->mSeedType[theGridX][theGridY + 1] != SEED_NONE && - theBoardState->mSeedType[theGridX + 1][theGridY + 1] != SEED_NONE; + theBoardState->mSeedType[theGridX + 1][theGridY] != SEED_NONE && + theBoardState->mSeedType[theGridX][theGridY + 1] != SEED_NONE && + theBoardState->mSeedType[theGridX + 1][theGridY + 1] != SEED_NONE; } bool Challenge::BeghouledTwistMoveCausesMatch(int theGridX, int theGridY, BeghouledBoardState *theBoardState) @@ -541,11 +548,11 @@ void Challenge::BeghouledStartFalling(ChallengeState theState) } bool Challenge::BeghouledIsValidMove(int theFromX, int theFromY, int theToX, int theToY, - BeghouledBoardState *theBoardState) + BeghouledBoardState *theBoardState) { if (theFromX < 0 || theFromX > BEGHOULED_MAX_GRIDSIZEX || theToX < 0 || theToX > BEGHOULED_MAX_GRIDSIZEX || - theFromY < 0 || theFromY > BEGHOULED_MAX_GRIDSIZEY || theToY < 0 || theToY > BEGHOULED_MAX_GRIDSIZEY || - mBeghouledEated[theFromX][theFromY] || mBeghouledEated[theToX][theToY]) + theFromY < 0 || theFromY > BEGHOULED_MAX_GRIDSIZEY || theToY < 0 || theToY > BEGHOULED_MAX_GRIDSIZEY || + mBeghouledEated[theFromX][theFromY] || mBeghouledEated[theToX][theToY]) return false; SeedType aSeedFrom = theBoardState->mSeedType[theFromX][theFromY]; @@ -739,11 +746,13 @@ void Challenge::BeghouledScore(int theGridX, int theGridY, int theNumPlants, boo float aPosY = mBoard->GridToPixelY(theGridX, theGridY); if (theIsHorizontal) { - aPosX += theNumPlants == 3 ? 80.0f : theNumPlants == 4 ? 120.0f : 160.0f; + aPosX += theNumPlants == 3 ? 80.0f : theNumPlants == 4 ? 120.0f + : 160.0f; } else { - aPosY += theNumPlants == 3 ? 80.0f : theNumPlants == 4 ? 120.0f : 160.0f; + aPosY += theNumPlants == 3 ? 80.0f : theNumPlants == 4 ? 120.0f + : 160.0f; } mChallengeScore++; @@ -854,7 +863,7 @@ bool Challenge::BeghouledBoardHasMatch(BeghouledBoardState *theBoardState) for (int aRow = 0; aRow < 5; aRow++) { if (BeghouledHorizontalMatchLength(aCol, aRow, theBoardState) >= 3 || - BeghouledVerticalMatchLength(aCol, aRow, theBoardState) >= 3) + BeghouledVerticalMatchLength(aCol, aRow, theBoardState) >= 3) return true; } } @@ -862,7 +871,7 @@ bool Challenge::BeghouledBoardHasMatch(BeghouledBoardState *theBoardState) } SeedType Challenge::BeghouledPickSeed(int theGridX, int theGridY, BeghouledBoardState *theBoardState, - bool theAllowMatches) + bool theAllowMatches) { TOD_ASSERT(theBoardState->mSeedType[theGridX][theGridY] == SEED_NONE); SeedType *aSeedState = &theBoardState->mSeedType[theGridX][theGridY]; @@ -898,17 +907,17 @@ SeedType Challenge::BeghouledPickSeed(int theGridX, int theGridY, BeghouledBoard } if (mBeghouledPurcasedUpgrade[(int)BeghouledUpgrade::BEGHOULED_UPGRADE_REPEATER] && - aSeedType == SeedType::SEED_PEASHOOTER) + aSeedType == SeedType::SEED_PEASHOOTER) { aSeedType = SeedType::SEED_REPEATER; } if (mBeghouledPurcasedUpgrade[(int)BeghouledUpgrade::BEGHOULED_UPGRADE_FUMESHROOM] && - aSeedType == SeedType::SEED_PUFFSHROOM) + aSeedType == SeedType::SEED_PUFFSHROOM) { aSeedType = SeedType::SEED_FUMESHROOM; } if (mBeghouledPurcasedUpgrade[(int)BeghouledUpgrade::BEGHOULED_UPGRADE_TALLNUT] && - aSeedType == SeedType::SEED_WALLNUT) + aSeedType == SeedType::SEED_WALLNUT) { aSeedType = SeedType::SEED_TALLNUT; } @@ -1002,7 +1011,7 @@ bool Challenge::BeghouledCheckForPossibleMoves(BeghouledBoardState *theBoardStat if (aGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED) { if (BeghouledIsValidMove(aCol, aRow, aCol + 1, aRow, theBoardState) || - BeghouledIsValidMove(aCol, aRow, aCol, aRow + 1, theBoardState)) + BeghouledIsValidMove(aCol, aRow, aCol, aRow + 1, theBoardState)) { return true; } @@ -1062,8 +1071,8 @@ bool Challenge::UpdateToolTip(int theX, int theY) HitResult aHitResult; mBoard->MouseHitTest(theX, theY, &aHitResult); if (aHitResult.mObjectType != GameObjectType::OBJECT_TYPE_SLOT_MACHINE_HANDLE || - mBoard->mCursorObject->mCursorType != CursorType::CURSOR_TYPE_NORMAL || - mChallengeState != ChallengeState::STATECHALLENGE_NORMAL) + mBoard->mCursorObject->mCursorType != CursorType::CURSOR_TYPE_NORMAL || + mChallengeState != ChallengeState::STATECHALLENGE_NORMAL) return false; if (!mBoard->CanTakeSunMoney(25)) @@ -1185,7 +1194,7 @@ bool Challenge::MouseDown(int x, int y, int theClickCount, HitResult *theHitResu } if (mApp->IsSlotMachineLevel() && theHitResult->mObjectType == OBJECT_TYPE_SLOT_MACHINE_HANDLE && - mBoard->mCursorObject->mCursorType == CURSOR_TYPE_NORMAL && mChallengeState == STATECHALLENGE_NORMAL) + mBoard->mCursorObject->mCursorType == CURSOR_TYPE_NORMAL && mChallengeState == STATECHALLENGE_NORMAL) { if (mBoard->TakeSunMoney(25)) { @@ -1207,7 +1216,7 @@ bool Challenge::MouseDown(int x, int y, int theClickCount, HitResult *theHitResu } if (mApp->IsWhackAZombieLevel() && theHitResult->mObjectType == OBJECT_TYPE_NONE && - mBoard->mCursorObject->mCursorType == CURSOR_TYPE_HAMMER && theClickCount >= 0) + mBoard->mCursorObject->mCursorType == CURSOR_TYPE_HAMMER && theClickCount >= 0) { MouseDownWhackAZombie(x, y); return true; @@ -1244,7 +1253,7 @@ bool Challenge::MouseUp(int x, int y) if (mBeghouledMouseCapture && !mBoard->mAdvice->IsBeingDisplayed() && mChallengeScore == 0) { mBoard->DisplayAdvice("[ADVICE_BEGHOULED_DRAG_TO_MATCH_3]", MESSAGE_STYLE_HINT_FAST, - ADVICE_BEGHOULED_DRAG_TO_MATCH_3); + ADVICE_BEGHOULED_DRAG_TO_MATCH_3); } BeghouledDragCancel(); @@ -1272,8 +1281,8 @@ bool Challenge::UpdateBeghouledPlant(Plant *thePlant) int aDiffX = mBoard->GridToPixelX(thePlant->mPlantCol, thePlant->mRow) - thePlant->mX; int aDiffY = mBoard->GridToPixelY(thePlant->mPlantCol, thePlant->mRow) - thePlant->mY; int aDelta = mChallengeState == STATECHALLENGE_BEGHOULED_MOVING - ? 3 - : TodAnimateCurve(90, 30, mChallengeStateCounter, 1, 20, CURVE_EASE_IN); + ? 3 + : TodAnimateCurve(90, 30, mChallengeStateCounter, 1, 20, CURVE_EASE_IN); int aDeltaX = 0, aDeltaY = 0; if (aDiffX > 0) @@ -1345,10 +1354,10 @@ bool Challenge::BeghouledTwistFlashMatch(BeghouledBoardState *theBoardState, int } bool Challenge::BeghouledFlashFromBoardState(BeghouledBoardState *theBoardState, int theFromX, int theFromY, int theToX, - int theToY) + int theToY) { TOD_ASSERT(theFromX >= 0 && theFromX < BEGHOULED_MAX_GRIDSIZEX && theFromY >= 0 && - theFromY < BEGHOULED_MAX_GRIDSIZEY); + theFromY < BEGHOULED_MAX_GRIDSIZEY); TOD_ASSERT(theToX >= 0 && theToX < BEGHOULED_MAX_GRIDSIZEX && theToY >= 0 && theToY < BEGHOULED_MAX_GRIDSIZEY); if (mBeghouledEated[theFromX][theFromY] || mBeghouledEated[theToX][theToY]) @@ -1415,9 +1424,9 @@ void Challenge::BeghouledFlashAMatch() for (int aCol = 0; aCol <= BEGHOULED_MAX_GRIDSIZEX - 1; aCol++) { if ((aCol < BEGHOULED_MAX_GRIDSIZEX - 1 && - BeghouledFlashFromBoardState(&aBoardState, aCol, aRow, aCol + 1, aRow)) || - (aRow < BEGHOULED_MAX_GRIDSIZEY - 1 && - BeghouledFlashFromBoardState(&aBoardState, aCol, aRow, aCol, aRow + 1))) + BeghouledFlashFromBoardState(&aBoardState, aCol, aRow, aCol + 1, aRow)) || + (aRow < BEGHOULED_MAX_GRIDSIZEY - 1 && + BeghouledFlashFromBoardState(&aBoardState, aCol, aRow, aCol, aRow + 1))) return; } } @@ -1438,7 +1447,7 @@ void Challenge::BeghouledFlashAMatch() void Challenge::UpdateBeghouled() { mBoard->mProgressMeterWidth = - TodAnimateCurve(0, BEGHOULED_WINNING_SCORE, mChallengeScore, 0, PROGRESS_METER_COUNTER, CURVE_LINEAR); + TodAnimateCurve(0, BEGHOULED_WINNING_SCORE, mChallengeScore, 0, PROGRESS_METER_COUNTER, CURVE_LINEAR); bool aMovingPlant = false; Plant *aPlant = nullptr; @@ -1451,20 +1460,20 @@ void Challenge::UpdateBeghouled() } if (mBoard->mSeedBank->mNumPackets > 4 && !mBoard->mAdvice->IsBeingDisplayed() && - !mBoard->mHelpDisplayed[ADVICE_BEGHOULED_USE_CRATER_2]) + !mBoard->mHelpDisplayed[ADVICE_BEGHOULED_USE_CRATER_2]) { int aCost = mBoard->GetCurrentPlantCost(SEED_BEGHOULED_BUTTON_CRATER, SEED_NONE); if (mBoard->CanTakeSunMoney(aCost) && BeghouledCanClearCrater() && !mBoard->HasLevelAwardDropped()) { mBoard->DisplayAdvice("[ADVICE_BEGHOULED_USE_CRATER_2]", MESSAGE_STYLE_HINT_FAST, - ADVICE_BEGHOULED_USE_CRATER_2); + ADVICE_BEGHOULED_USE_CRATER_2); } } if (mApp->mGameMode == GAMEMODE_CHALLENGE_BEGHOULED_TWIST && mChallengeState == STATECHALLENGE_NORMAL) { if (BeghouledTwistSquareFromMouse(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY, - mChallengeGridX, mChallengeGridY)) + mChallengeGridX, mChallengeGridY)) { BeghouledBoardState aBoardState; LoadBeghouledBoardState(&aBoardState); @@ -1482,7 +1491,7 @@ void Challenge::UpdateBeghouled() } if (!aMovingPlant && - (mChallengeState == STATECHALLENGE_BEGHOULED_FALLING || mChallengeState == STATECHALLENGE_BEGHOULED_MOVING)) + (mChallengeState == STATECHALLENGE_BEGHOULED_FALLING || mChallengeState == STATECHALLENGE_BEGHOULED_MOVING)) { mChallengeState = STATECHALLENGE_NORMAL; mChallengeStateCounter = 1500; @@ -1549,10 +1558,10 @@ void Challenge::UpdateConveyorBelt() aConveyorSpeedMultiplier = 3.0f; } int aNumSeedsOnConveyor = mBoard->mSeedBank->GetNumSeedsOnConveyorBelt(); - mConveyorBeltCounter = aConveyorSpeedMultiplier * (aNumSeedsOnConveyor > 8 ? 1000 - : aNumSeedsOnConveyor > 6 ? 500 - : aNumSeedsOnConveyor > 4 ? 425 - : 400); + mConveyorBeltCounter = aConveyorSpeedMultiplier * (aNumSeedsOnConveyor > 8 ? 1000 + : aNumSeedsOnConveyor > 6 ? 500 + : aNumSeedsOnConveyor > 4 ? 425 + : 400); TodWeightedArray aSeedPickArray[20]; int aSeedPickCount = 0; @@ -1783,7 +1792,7 @@ void Challenge::UpdateConveyorBelt() else if (aSeedType == SEED_FLOWERPOT) { aSeedPick.mWeight = TodAnimateCurve(0, mApp->mGameMode == GAMEMODE_CHALLENGE_COLUMN ? 45 : 35, aTotalCount, - aSeedPick.mWeight, 1, CURVE_LINEAR); + aSeedPick.mWeight, 1, CURVE_LINEAR); } if (mApp->IsFinalBossLevel()) @@ -1842,9 +1851,9 @@ void Challenge::UpdateRainingSeeds() do aSeedType = (SeedType)Rand(mApp->GetSeedsAvailable()); while (mBoard->SeedNotRecommendedForLevel(aSeedType) || !mApp->SeedTypeAvailable(aSeedType) || - Plant::IsUpgrade(aSeedType) || aSeedType == SEED_SUNFLOWER || aSeedType == SEED_TWINSUNFLOWER || - aSeedType == SEED_INSTANT_COFFEE || aSeedType == SEED_UMBRELLA || aSeedType == SEED_SUNSHROOM || - aSeedType == SEED_IMITATER); + Plant::IsUpgrade(aSeedType) || aSeedType == SEED_SUNFLOWER || aSeedType == SEED_TWINSUNFLOWER || + aSeedType == SEED_INSTANT_COFFEE || aSeedType == SEED_UMBRELLA || aSeedType == SEED_SUNSHROOM || + aSeedType == SEED_IMITATER); if (Rand(100) < TodAnimateCurve(0, 18, mBoard->CountPlantByType(SEED_LILYPAD), 30, 1, CURVE_LINEAR)) aSeedType = SEED_LILYPAD; @@ -1867,9 +1876,9 @@ void Challenge::UpdateStormyNight() mChallengeStateCounter--; if ((mChallengeStateCounter == 300 && - (mChallengeState == STATECHALLENGE_STORM_FLASH_1 || mChallengeState == STATECHALLENGE_STORM_FLASH_2)) || - (mChallengeStateCounter == 150 && - (mChallengeState == STATECHALLENGE_STORM_FLASH_1 || mChallengeState == STATECHALLENGE_STORM_FLASH_3))) + (mChallengeState == STATECHALLENGE_STORM_FLASH_1 || mChallengeState == STATECHALLENGE_STORM_FLASH_2)) || + (mChallengeStateCounter == 150 && + (mChallengeState == STATECHALLENGE_STORM_FLASH_1 || mChallengeState == STATECHALLENGE_STORM_FLASH_3))) { mApp->PlayFoley(FoleyType::FOLEY_THUNDER); } @@ -1902,7 +1911,7 @@ void Challenge::UpdateStormyNight() } mChallengeState = - (ChallengeState)RandRangeInt((int)STATECHALLENGE_STORM_FLASH_1, (int)STATECHALLENGE_STORM_FLASH_3); + (ChallengeState)RandRangeInt((int)STATECHALLENGE_STORM_FLASH_1, (int)STATECHALLENGE_STORM_FLASH_3); } } @@ -1919,12 +1928,12 @@ void Challenge::UpdateSlotMachine() mBoard->ClearAdvice(ADVICE_NONE); } mBoard->mProgressMeterWidth = - TodAnimateCurve(0, SLOT_MACHINE_WINNING_SCORE, aSunMoney, 0, PROGRESS_METER_COUNTER, CURVE_LINEAR); + TodAnimateCurve(0, SLOT_MACHINE_WINNING_SCORE, aSunMoney, 0, PROGRESS_METER_COUNTER, CURVE_LINEAR); if (!mBoard->mAdvice->IsBeingDisplayed()) { SexyString aMsg = - TodReplaceNumberString("[ADVICE_SLOT_MACHINE_COLLECT_SUN]", "{SCORE}", SLOT_MACHINE_WINNING_SCORE); + TodReplaceNumberString("[ADVICE_SLOT_MACHINE_COLLECT_SUN]", "{SCORE}", SLOT_MACHINE_WINNING_SCORE); mBoard->DisplayAdvice(aMsg, MESSAGE_STYLE_SLOT_MACHINE, ADVICE_SLOT_MACHINE_COLLECT_SUN); } @@ -1933,7 +1942,7 @@ void Challenge::UpdateSlotMachine() if (!mBoard->mAdvice->IsBeingDisplayed() && !mBoard->HasLevelAwardDropped()) { mBoard->DisplayAdviceAgain("[ADVICE_SLOT_MACHINE_SPIN_AGAIN]", MESSAGE_STYLE_SLOT_MACHINE, - ADVICE_SLOT_MACHINE_SPIN_AGAIN); + ADVICE_SLOT_MACHINE_SPIN_AGAIN); } } else if (mBoard->mSeedBank->mSeedPackets[0].mSlotMachineCountDown <= 0) @@ -1995,7 +2004,7 @@ void Challenge::UpdateSlotMachine() for (int i = 0; i < 3; i++) { mBoard->AddCoin(320 + i * 20, 85, COIN_USABLE_SEED_PACKET, COIN_MOTION_COIN)->mUsableSeedType = - aPacket1; + aPacket1; } } } @@ -2029,7 +2038,7 @@ void Challenge::ZombieAtePlant(Zombie *theZombie, Plant *thePlant) mBoard->mSeedBank->mSeedPackets[4].SetPacketType(SEED_BEGHOULED_BUTTON_CRATER); mBoard->mSeedBank->mNumPackets = 5; mBoard->DisplayAdvice("[ADVICE_BEGHOULED_USE_CRATER_1]", MESSAGE_STYLE_HINT_FAST, - ADVICE_BEGHOULED_USE_CRATER_1); + ADVICE_BEGHOULED_USE_CRATER_1); } BeghouledCheckStuckState(); @@ -2074,7 +2083,7 @@ void Challenge::Update() if ((mApp->IsScaryPotterLevel() || mApp->IsWhackAZombieLevel()) && mBoard->mSeedBank->mY < 0) { if (mBoard->mSunMoney + mBoard->CountSunBeingCollected() > 0 || - mBoard->mSeedBank->mY > Sexy::IMAGE_SEEDBANK->mWidth) + mBoard->mSeedBank->mY > Sexy::IMAGE_SEEDBANK->mWidth) { mBoard->mSeedBank->mY += 2; if (mBoard->mSeedBank->mY > 0) @@ -2161,9 +2170,9 @@ void Challenge::SpawnLevelAward(int theGridX, int theGridY) float aPosX = mBoard->GridToPixelX(theGridX, theGridY) + 40; float aPosY = mBoard->GridToPixelY(theGridX, theGridY) + 40; - CoinType aCoinType = mApp->IsFirstTimeAdventureMode() ? COIN_FINAL_SEED_PACKET - : mApp->IsAdventureMode() || mApp->HasBeatenChallenge(mApp->mGameMode) ? COIN_AWARD_MONEY_BAG - : COIN_TROPHY; + CoinType aCoinType = mApp->IsFirstTimeAdventureMode() ? COIN_FINAL_SEED_PACKET + : mApp->IsAdventureMode() || mApp->HasBeatenChallenge(mApp->mGameMode) ? COIN_AWARD_MONEY_BAG + : COIN_TROPHY; mBoard->mLevelAwardSpawned = true; mApp->mBoardResult = BOARDRESULT_WON; @@ -2224,7 +2233,7 @@ void Challenge::DrawArtChallenge(Graphics *g) if (aSeedType != SEED_NONE && mBoard->GetTopPlantAt(aCol, aRow, TOPPLANT_ONLY_NORMAL_POSITION) == nullptr) { Plant::DrawSeedType(g, aSeedType, SEED_NONE, VARIATION_NORMAL, mBoard->GridToPixelX(aCol, aRow), - mBoard->GridToPixelY(aCol, aRow)); + mBoard->GridToPixelY(aCol, aRow)); } } } @@ -2248,7 +2257,7 @@ void Challenge::DrawBeghouled(Graphics *g) if (mBeghouledEated[aGridX][aGridY]) { g->DrawImageCel(Sexy::IMAGE_CRATER, mBoard->GridToPixelX(aGridX, aGridY) - 8, - mBoard->GridToPixelY(aGridX, aGridY) + 40, 1, 0); + mBoard->GridToPixelY(aGridX, aGridY) + 40, 1, 0); } } } @@ -2279,7 +2288,7 @@ void Challenge::DrawSlotMachine(Graphics *g) Graphics gBoardParent = Graphics(*g); if (mSlotMachineRollCount < 3 && mBoard->mCursorObject->mCursorType == CURSOR_TYPE_NORMAL && - mChallengeState != STATECHALLENGE_SLOT_MACHINE_ROLLING && !mBoard->HasLevelAwardDropped()) + mChallengeState != STATECHALLENGE_SLOT_MACHINE_ROLLING && !mBoard->HasLevelAwardDropped()) { gBoardParent.SetColor(GetFlashingColor(mBoard->mMainCounter, 75)); gBoardParent.SetColorizeImages(true); @@ -2310,13 +2319,13 @@ void Challenge::DrawBackdrop(Graphics *g) g->DrawImage(Sexy::IMAGE_WALLNUT_BOWLINGSTRIPE, 268, 77); } if (mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_1 || mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_2 || - mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_3 || mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_4 || - mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_5) + mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_3 || mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_4 || + mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_5) { g->DrawImage(Sexy::IMAGE_WALLNUT_BOWLINGSTRIPE, 352, 73); } if (mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_6 || mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_7 || - mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_8 || mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS) + mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_8 || mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS) { g->DrawImage(Sexy::IMAGE_WALLNUT_BOWLINGSTRIPE, 432, 73); } @@ -2359,13 +2368,13 @@ PlantingReason Challenge::CanPlantAt(int theGridX, int theGridY, SeedType theSee { int aLimit = 6; if (mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_1 || mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_2 || - mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_3 || mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_4 || - mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_5) + mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_3 || mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_4 || + mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_5) { aLimit = 4; } if (mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_6 || mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_7 || - mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_8 || mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS) + mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_8 || mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS) { aLimit = 5; } @@ -2383,7 +2392,7 @@ PlantingReason Challenge::CanPlantAt(int theGridX, int theGridY, SeedType theSee { SeedType anArtSeed = GetArtChallengeSeed(theGridX, theGridY); if (anArtSeed != SEED_NONE && anArtSeed != theSeedType && theSeedType != SEED_LILYPAD && - theSeedType != SEED_PUMPKINSHELL) + theSeedType != SEED_PUMPKINSHELL) { return PLANTING_NOT_ON_ART; } @@ -2436,7 +2445,7 @@ void Challenge::InitZombieWavesSurvival() if (mApp->IsSurvivalNormal(mApp->mGameMode) && aRandZombie > ZOMBIE_SNORKEL) continue; if (mBoard->IsZombieTypeSpawnedOnly(aRandZombie) || Zombie::IsZombotany(aRandZombie) || - aRandZombie == ZOMBIE_DUCKY_TUBE || aRandZombie == ZOMBIE_YETI) + aRandZombie == ZOMBIE_DUCKY_TUBE || aRandZombie == ZOMBIE_YETI) continue; mBoard->mZombieAllowed[aRandZombie] = true; @@ -2728,10 +2737,10 @@ void Challenge::WhackAZombieSpawning() if (--mChallengeStateCounter == 0) { int aPhase = ClampInt((mBoard->mCurrentWave - 1) * 6 / 12, 0, 5); - const int aDoubleChance[6] = {0, 30, 10, 10, 15, 18}; - const int aTripleChance[6] = {0, 0, 0, 0, 10, 13}; - const int aPailChance[6] = {0, 0, 0, 10, 15, 15}; - const int aConeChance[6] = {0, 0, 30, 30, 30, 30}; + const int aDoubleChance[6] = { 0, 30, 10, 10, 15, 18 }; + const int aTripleChance[6] = { 0, 0, 0, 0, 10, 13 }; + const int aPailChance[6] = { 0, 0, 0, 10, 15, 15 }; + const int aConeChance[6] = { 0, 0, 30, 30, 30, 30 }; int aZombieCount = 1; ZombieType aZombieType = ZOMBIE_NORMAL; int aNumHit = Rand(100); @@ -2769,7 +2778,7 @@ void Challenge::WhackAZombieSpawning() if (aGridItem->mGridItemType == GRIDITEM_GRAVESTONE) { Plant *aPlant = - mBoard->GetTopPlantAt(aGridItem->mGridX, aGridItem->mGridY, TOPPLANT_ONLY_NORMAL_POSITION); + mBoard->GetTopPlantAt(aGridItem->mGridX, aGridItem->mGridY, TOPPLANT_ONLY_NORMAL_POSITION); if (aPlant == nullptr || aPlant->mSeedType != SEED_GRAVEBUSTER) { aGridPicks[aGridPicksCount].mItem = (uintptr_t)aGridItem; @@ -2826,10 +2835,10 @@ bool Challenge::UpdateZombieSpawning() } return mApp->IsFinalBossLevel() || mApp->mGameMode == GAMEMODE_CHALLENGE_ICE || - mApp->mGameMode == GAMEMODE_CHALLENGE_ZEN_GARDEN || mApp->mGameMode == GAMEMODE_TREE_OF_WISDOM || - mApp->mGameMode == GAMEMODE_CHALLENGE_ZOMBIQUARIUM || mApp->IsIZombieLevel() || mApp->IsSquirrelLevel() || - mApp->IsScaryPotterLevel() || - (mApp->mGameMode == GAMEMODE_CHALLENGE_LAST_STAND && mChallengeState != STATECHALLENGE_LAST_STAND_ONSLAUGHT); + mApp->mGameMode == GAMEMODE_CHALLENGE_ZEN_GARDEN || mApp->mGameMode == GAMEMODE_TREE_OF_WISDOM || + mApp->mGameMode == GAMEMODE_CHALLENGE_ZOMBIQUARIUM || mApp->IsIZombieLevel() || mApp->IsSquirrelLevel() || + mApp->IsScaryPotterLevel() || + (mApp->mGameMode == GAMEMODE_CHALLENGE_LAST_STAND && mChallengeState != STATECHALLENGE_LAST_STAND_ONSLAUGHT); } void Challenge::GraveDangerSpawnGraveAt(int theGridX, int theGridY) @@ -2909,7 +2918,7 @@ void Challenge::SpawnZombieWave() } } if (mApp->IsSurvivalMode() && mBoard->mBackground == BACKGROUND_2_NIGHT && - mBoard->mCurrentWave == mBoard->mNumWaves - 1) + mBoard->mCurrentWave == mBoard->mNumWaves - 1) { int aNumGraves = mBoard->GetGraveStonesCount(); if ((mApp->IsSurvivalNormal(mApp->mGameMode) && aNumGraves < 8) || aNumGraves < 12) @@ -2927,7 +2936,7 @@ void Challenge::DrawStormFlash(Graphics *g, int theTime, int theMaxAmount) { MTRand aDrawRand = MTRand(mBoard->mMainCounter / 6); int aDarkness = TodAnimateCurve(150, 0, theTime, 255 - theMaxAmount, 255, CURVE_LINEAR) + - aDrawRand.NextNoAssert((unsigned long)64) - 32; + aDrawRand.NextNoAssert((unsigned long)64) - 32; g->SetColor(Color(0, 0, 0, ClampInt(aDarkness, 0, 255))); g->FillRect(-1000, -1000, 2800, 2600); @@ -3095,7 +3104,7 @@ void Challenge::UpdatePortal(GridItem *thePortal) while (mBoard->IterateProjectiles(aProjectile)) { if (aProjectile->mMotionType == MOTION_STRAIGHT && aProjectile->mRow == thePortal->mGridY && - aProjectile->mLastPortalX != thePortal->mGridX) + aProjectile->mLastPortalX != thePortal->mGridX) { Rect aProjectileRect = aProjectile->GetProjectileRect(); int aProjectileX = aProjectileRect.mX + aProjectileRect.mWidth / 2; @@ -3121,7 +3130,7 @@ void Challenge::UpdatePortal(GridItem *thePortal) while (mBoard->IterateLawnMowers(aLawnMower)) { if (aLawnMower->mMowerState == MOWER_TRIGGERED && aLawnMower->mRow == thePortal->mGridY && - aLawnMower->mLastPortalX != thePortal->mGridX) + aLawnMower->mLastPortalX != thePortal->mGridX) { int aMowerX = aLawnMower->mPosX + 45; int aPortalX = thePortal->mGridX * 80 + 25; @@ -3193,7 +3202,7 @@ void Challenge::MoveAPortal() for (int aGridY = 0; aGridY < 5; aGridY++) { if (GetPortalAt(aGridX, aGridY) == nullptr && aOtherPortal->mGridX != aGridX && - aOtherPortal->mGridY != aGridY) + aOtherPortal->mGridY != aGridY) { TOD_ASSERT(aGridArrayCount < MAX_PICK_GRID_SIZE); aGridArray[aGridArrayCount].mX = aGridX; @@ -3428,7 +3437,7 @@ void Challenge::BeghouledPacketClicked(SeedPacket *theSeedPacket) return; if (theSeedPacket->mPacketType == SEED_REPEATER && - !mBoard->mChallenge->mBeghouledPurcasedUpgrade[(int)BeghouledUpgrade::BEGHOULED_UPGRADE_REPEATER]) + !mBoard->mChallenge->mBeghouledPurcasedUpgrade[(int)BeghouledUpgrade::BEGHOULED_UPGRADE_REPEATER]) { mBoard->mChallenge->mBeghouledPurcasedUpgrade[(int)BeghouledUpgrade::BEGHOULED_UPGRADE_REPEATER] = true; @@ -3444,7 +3453,7 @@ void Challenge::BeghouledPacketClicked(SeedPacket *theSeedPacket) theSeedPacket->Deactivate(); } else if (theSeedPacket->mPacketType == SEED_FUMESHROOM && - !mBoard->mChallenge->mBeghouledPurcasedUpgrade[(int)BeghouledUpgrade::BEGHOULED_UPGRADE_FUMESHROOM]) + !mBoard->mChallenge->mBeghouledPurcasedUpgrade[(int)BeghouledUpgrade::BEGHOULED_UPGRADE_FUMESHROOM]) { mBoard->mChallenge->mBeghouledPurcasedUpgrade[(int)BeghouledUpgrade::BEGHOULED_UPGRADE_FUMESHROOM] = true; @@ -3460,7 +3469,7 @@ void Challenge::BeghouledPacketClicked(SeedPacket *theSeedPacket) theSeedPacket->Deactivate(); } else if (theSeedPacket->mPacketType == SEED_TALLNUT && - !mBoard->mChallenge->mBeghouledPurcasedUpgrade[(int)BeghouledUpgrade::BEGHOULED_UPGRADE_TALLNUT]) + !mBoard->mChallenge->mBeghouledPurcasedUpgrade[(int)BeghouledUpgrade::BEGHOULED_UPGRADE_TALLNUT]) { mBoard->mChallenge->mBeghouledPurcasedUpgrade[(int)BeghouledUpgrade::BEGHOULED_UPGRADE_TALLNUT] = true; @@ -3485,7 +3494,7 @@ void Challenge::BeghouledPacketClicked(SeedPacket *theSeedPacket) else if (theSeedPacket->mPacketType == SEED_BEGHOULED_BUTTON_CRATER) { if (!BeghouledCanClearCrater() || mChallengeState == STATECHALLENGE_BEGHOULED_FALLING || - mChallengeState == STATECHALLENGE_BEGHOULED_MOVING) + mChallengeState == STATECHALLENGE_BEGHOULED_MOVING) return; BeghouledClearCrater(1); @@ -3552,7 +3561,7 @@ void Challenge::ZombiquariumPacketClicked(SeedPacket *theSeedPacket) Zombie *aZombie = ZombiquariumSpawnSnorkle(); mApp->PlayFoley(FOLEY_ZOMBIESPLASH); mApp->AddTodParticle(aZombie->mPosX + 60.0f, aZombie->mPosY + 20.0f, RENDER_LAYER_TOP, - PARTICLE_PLANTING_POOL); + PARTICLE_PLANTING_POOL); } else if (theSeedPacket->mPacketType == SEED_ZOMBIQUARIUM_TROPHY) { @@ -3612,13 +3621,13 @@ void Challenge::ZombiquariumUpdate() if (!mBoard->mAdvice->IsBeingDisplayed() && !mBoard->mHelpDisplayed[ADVICE_ZOMBIQUARIUM_COLLECT_SUN]) { SexyString aMsg = - TodReplaceNumberString("[ADVICE_ZOMBIQUARIUM_COLLECT_SUN]", "{SCORE}", ZOMBIQUARIUM_WINNING_SCORE); + TodReplaceNumberString("[ADVICE_ZOMBIQUARIUM_COLLECT_SUN]", "{SCORE}", ZOMBIQUARIUM_WINNING_SCORE); mBoard->DisplayAdvice(aMsg, MESSAGE_STYLE_HINT_TALL_FAST, ADVICE_ZOMBIQUARIUM_COLLECT_SUN); } int aScore = ClampInt(mBoard->mSunMoney, 0, ZOMBIQUARIUM_WINNING_SCORE); mBoard->mProgressMeterWidth = - TodAnimateCurve(0, ZOMBIQUARIUM_WINNING_SCORE, aScore, 0, PROGRESS_METER_COUNTER, CURVE_LINEAR); + TodAnimateCurve(0, ZOMBIQUARIUM_WINNING_SCORE, aScore, 0, PROGRESS_METER_COUNTER, CURVE_LINEAR); if (aScore >= ZOMBIQUARIUM_WINNING_SCORE - 100) { mBoard->DisplayAdvice("[ADVICE_ALMOST_THERE]", MESSAGE_STYLE_HINT_TALL_FAST, ADVICE_ALMOST_THERE); @@ -3630,7 +3639,7 @@ void Challenge::ZombiquariumUpdate() float aPosY = mBoard->mSeedBank->mY + mBoard->mSeedBank->mSeedPackets[0].mY; mBoard->TutorialArrowShow(aPosX, aPosY); mBoard->DisplayAdvice("[ADVICE_ZOMBIQUARIUM_BUY_SNORKEL]", MESSAGE_STYLE_HINT_TALL_FAST, - ADVICE_ZOMBIQUARIUM_BUY_SNORKEL); + ADVICE_ZOMBIQUARIUM_BUY_SNORKEL); } else if (aScore < 100 && mBoard->mTutorialState == TUTORIAL_ZOMBIQUARIUM_BUY_SNORKEL) { @@ -3645,7 +3654,7 @@ void Challenge::ZombiquariumUpdate() float aPosY = mBoard->mSeedBank->mY + mBoard->mSeedBank->mSeedPackets[1].mY; mBoard->TutorialArrowShow(aPosX, aPosY); mBoard->DisplayAdvice("[ADVICE_ZOMBIQUARIUM_CLICK_TROPHY]", MESSAGE_STYLE_HINT_TALL_FAST, - ADVICE_ZOMBIQUARIUM_CLICK_TROPHY); + ADVICE_ZOMBIQUARIUM_CLICK_TROPHY); } else if (aScore < ZOMBIQUARIUM_WINNING_SCORE && mBoard->mTutorialState == TUTORIAL_ZOMBIQUARIUM_CLICK_TROPHY) { @@ -3692,7 +3701,7 @@ void Challenge::ScaryPotterDontPlaceInCol(int theCol, TodWeightedGridArray *theG } void Challenge::ScaryPotterFillColumnWithPlant(int theCol, SeedType theSeedType, TodWeightedGridArray *theGridArray, - int theGridArrayCount) + int theGridArrayCount) { ScaryPotterDontPlaceInCol(theCol, theGridArray, theGridArrayCount); @@ -3707,7 +3716,7 @@ void Challenge::ScaryPotterFillColumnWithPlant(int theCol, SeedType theSeedType, } void Challenge::ScaryPotterPlacePot(ScaryPotType theScaryPotType, ZombieType theZombieType, SeedType theSeedType, - int theCount, TodWeightedGridArray *theGridArray, int theGridArrayCount) + int theCount, TodWeightedGridArray *theGridArray, int theGridArrayCount) { ScaryPotType aPotType = theScaryPotType; while (theCount > 0) @@ -3745,7 +3754,7 @@ void Challenge::ScaryPotterChangePotType(GridItemState thePotType, int theCount) if (aGridItem->mGridItemType == GRIDITEM_SCARY_POT) { if ((thePotType == GRIDITEM_STATE_SCARY_POT_LEAF && aGridItem->mScaryPotType == SCARYPOT_SEED) || - (thePotType == GRIDITEM_STATE_SCARY_POT_ZOMBIE && aGridItem->mZombieType == ZOMBIE_GARGANTUAR)) + (thePotType == GRIDITEM_STATE_SCARY_POT_ZOMBIE && aGridItem->mZombieType == ZOMBIE_GARGANTUAR)) { aPotArray[aPotCount].mItem = (uintptr_t)aGridItem; aPotArray[aPotCount].mWeight = 1; @@ -3969,11 +3978,11 @@ void Challenge::ScaryPotterPopulate() ScaryPotterPlacePot(SCARYPOT_SEED, ZOMBIE_INVALID, SEED_PLANTERN, 1, aGridArray, aGridArrayCount); ScaryPotterPlacePot(SCARYPOT_SUN, ZOMBIE_INVALID, SEED_NONE, 1, aGridArray, aGridArrayCount); ScaryPotterPlacePot(SCARYPOT_ZOMBIE, ZOMBIE_NORMAL, SEED_NONE, 8 - aNumExtraGargantuars, aGridArray, - aGridArrayCount); + aGridArrayCount); ScaryPotterPlacePot(SCARYPOT_ZOMBIE, ZOMBIE_PAIL, SEED_NONE, 5, aGridArray, aGridArrayCount); ScaryPotterPlacePot(SCARYPOT_ZOMBIE, ZOMBIE_JACK_IN_THE_BOX, SEED_NONE, 1, aGridArray, aGridArrayCount); ScaryPotterPlacePot(SCARYPOT_ZOMBIE, ZOMBIE_GARGANTUAR, SEED_NONE, 1 + aNumExtraGargantuars, aGridArray, - aGridArrayCount); + aGridArrayCount); ScaryPotterChangePotType(GRIDITEM_STATE_SCARY_POT_LEAF, 2); break; } @@ -4063,8 +4072,8 @@ bool Challenge::PuzzleIsAwardStage() return false; int aGoal = mApp->mGameMode == GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS ? 3 - : mApp->mGameMode == GAMEMODE_SCARY_POTTER_ENDLESS ? 10 - : 1; + : mApp->mGameMode == GAMEMODE_SCARY_POTTER_ENDLESS ? 10 + : 1; return (mSurvivalStage + 1) % aGoal == 0; } @@ -4110,7 +4119,7 @@ void Challenge::ScaryPotterOpenPot(GridItem *theScaryPot) { case SCARYPOT_SEED: mBoard->AddCoin(aXPos + 20, aYPos, COIN_USABLE_SEED_PACKET, COIN_MOTION_FROM_PLANT)->mUsableSeedType = - theScaryPot->mSeedType; + theScaryPot->mSeedType; break; case SCARYPOT_ZOMBIE: mBoard->AddZombieInRow(theScaryPot->mZombieType, theScaryPot->mGridY, 0)->mPosX = aXPos; @@ -4133,7 +4142,7 @@ void Challenge::ScaryPotterOpenPot(GridItem *theScaryPot) if (mBoard->mHelpIndex == ADVICE_USE_SHOVEL_ON_POTS) { mBoard->DisplayAdvice("[ADVICE_DESTROY_POTS_TO_FINISH_LEVEL]", MESSAGE_STYLE_HINT_FAST, - ADVICE_DESTORY_POTS_TO_FINISIH_LEVEL); + ADVICE_DESTORY_POTS_TO_FINISIH_LEVEL); } if (ScaryPotterIsCompleted()) { @@ -4150,9 +4159,9 @@ void Challenge::ScaryPotterOpenPot(GridItem *theScaryPot) mApp->PlaySample(Sexy::SOUND_BONK); mApp->PlayFoley(FOLEY_VASE_BREAKING); ParticleEffect anEffect = theScaryPot->mGridItemState == GRIDITEM_STATE_SCARY_POT_LEAF ? PARTICLE_VASE_SHATTER_LEAF - : theScaryPot->mGridItemState == GRIDITEM_STATE_SCARY_POT_ZOMBIE - ? PARTICLE_VASE_SHATTER_ZOMBIE - : PARTICLE_VASE_SHATTER; + : theScaryPot->mGridItemState == GRIDITEM_STATE_SCARY_POT_ZOMBIE + ? PARTICLE_VASE_SHATTER_ZOMBIE + : PARTICLE_VASE_SHATTER; mApp->AddTodParticle(aXPos + 20, aYPos, RENDER_LAYER_TOP, anEffect); } @@ -4165,7 +4174,7 @@ void Challenge::ScaryPotterJackExplode(int thePosX, int thePosY) while (mBoard->IterateGridItems(aGridItem)) { if (aGridItem->mGridItemType == GRIDITEM_SCARY_POT && - GridInRange(aGridItem->mGridX, aGridItem->mGridY, aGridX, aGridY, 1, 1)) + GridInRange(aGridItem->mGridX, aGridItem->mGridY, aGridX, aGridY, 1, 1)) { ScaryPotterOpenPot(aGridItem); } @@ -4314,7 +4323,7 @@ void Challenge::IZombieMouseDownWithZombie(int theX, int theY, int theClickCount IZombiePlaceZombie(aZombieType, aGridX, aGridY); TOD_ASSERT(mBoard->mCursorObject->mSeedBankIndex >= 0 && - mBoard->mCursorObject->mSeedBankIndex < mBoard->mSeedBank->mNumPackets); + mBoard->mCursorObject->mSeedBankIndex < mBoard->mSeedBank->mNumPackets); mBoard->mSeedBank->mSeedPackets[mBoard->mCursorObject->mSeedBankIndex].WasPlanted(); mApp->PlayFoley(FOLEY_PLANT); mBoard->ClearCursor(); @@ -4326,12 +4335,12 @@ void Challenge::IZombieMouseDownWithZombie(int theX, int theY, int theClickCount if (aSeedType == SEED_ZOMBIE_BUNGEE) { mBoard->DisplayAdvice("[ADVICE_I_ZOMBIE_LEFT_OF_LINE]", MESSAGE_STYLE_HINT_LONG, - ADVICE_I_ZOMBIE_LEFT_OF_LINE); + ADVICE_I_ZOMBIE_LEFT_OF_LINE); } else { mBoard->DisplayAdvice("[ADVICE_I_ZOMBIE_NOT_PASSED_LINE]", MESSAGE_STYLE_HINT_LONG, - ADVICE_I_ZOMBIE_NOT_PASSED_LINE); + ADVICE_I_ZOMBIE_NOT_PASSED_LINE); } } @@ -4559,7 +4568,7 @@ void Challenge::IZombieInitLevel() int aFormationHit = RandRangeInt(0, 4); int aPuffshroomCount = - RandRangeInt(ClampInt(2 + mSurvivalStage / 3, 2, 4), ClampInt(3 + mSurvivalStage / 2, 2, 6)); + RandRangeInt(ClampInt(2 + mSurvivalStage / 3, 2, 4), ClampInt(3 + mSurvivalStage / 2, 2, 6)); if (mSurvivalStage == 0) { aPuffshroomCount = 0; @@ -4571,7 +4580,7 @@ void Challenge::IZombieInitLevel() else if (mSurvivalStage >= 10) { aPuffshroomCount = - RandRangeInt(ClampInt(2 + mSurvivalStage / 3, 2, 5), ClampInt(3 + mSurvivalStage / 2, 2, 7)); + RandRangeInt(ClampInt(2 + mSurvivalStage / 3, 2, 5), ClampInt(3 + mSurvivalStage / 2, 2, 7)); } int aSunflowerCount = 8 - aPuffshroomCount; IZombiePlacePlants(SEED_SUNFLOWER, aSunflowerCount, -1); @@ -4669,7 +4678,7 @@ void Challenge::IZombieUpdate() while (mBoard->IterateZombies(aZombie)) { if (!aZombie->IsDeadOrDying() && aZombie->mZombiePhase != PHASE_POLEVAULTER_IN_VAULT && !aZombie->mIsEating && - aZombie->mJustGotShotCounter < -500) + aZombie->mJustGotShotCounter < -500) { aZombie->PickRandomSpeed(); } @@ -4681,7 +4690,7 @@ void Challenge::IZombieUpdate() { PlantState aState = aPlant->mState; if (aState == STATE_SQUASH_FALLING || aState == STATE_SQUASH_DONE_FALLING || aState == STATE_CHOMPER_BITING || - aState == STATE_CHOMPER_BITING_GOT_ONE) + aState == STATE_CHOMPER_BITING_GOT_ONE) { anActive = true; } @@ -4713,13 +4722,13 @@ void Challenge::IZombieUpdate() bool Challenge::IsZombieSeedType(SeedType theSeedType) { return theSeedType == SEED_ZOMBIQUARIUM_SNORKLE || theSeedType == SEED_ZOMBIQUARIUM_TROPHY || - theSeedType == SEED_ZOMBIE_NORMAL || theSeedType == SEED_ZOMBIE_TRAFFIC_CONE || - theSeedType == SEED_ZOMBIE_POLEVAULTER || theSeedType == SEED_ZOMBIE_PAIL || - theSeedType == SEED_ZOMBIE_LADDER || theSeedType == SEED_ZOMBIE_DIGGER || - theSeedType == SEED_ZOMBIE_BUNGEE || theSeedType == SEED_ZOMBIE_FOOTBALL || - theSeedType == SEED_ZOMBIE_BALLOON || theSeedType == SEED_ZOMBIE_SCREEN_DOOR || - theSeedType == SEED_ZOMBONI || theSeedType == SEED_ZOMBIE_POGO || theSeedType == SEED_ZOMBIE_DANCER || - theSeedType == SEED_ZOMBIE_GARGANTUAR || theSeedType == SEED_ZOMBIE_IMP; + theSeedType == SEED_ZOMBIE_NORMAL || theSeedType == SEED_ZOMBIE_TRAFFIC_CONE || + theSeedType == SEED_ZOMBIE_POLEVAULTER || theSeedType == SEED_ZOMBIE_PAIL || + theSeedType == SEED_ZOMBIE_LADDER || theSeedType == SEED_ZOMBIE_DIGGER || + theSeedType == SEED_ZOMBIE_BUNGEE || theSeedType == SEED_ZOMBIE_FOOTBALL || + theSeedType == SEED_ZOMBIE_BALLOON || theSeedType == SEED_ZOMBIE_SCREEN_DOOR || + theSeedType == SEED_ZOMBONI || theSeedType == SEED_ZOMBIE_POGO || theSeedType == SEED_ZOMBIE_DANCER || + theSeedType == SEED_ZOMBIE_GARGANTUAR || theSeedType == SEED_ZOMBIE_IMP; } void Challenge::IZombieSetPlantFilterEffect(Plant *thePlant, FilterEffect theFilterEffect) @@ -4800,7 +4809,7 @@ void Challenge::IZombieScoreBrain(GridItem *theBrain) { mBoard->mChallenge->mChallengeScore++; mBoard->mProgressMeterWidth = TodAnimateCurve(0, I_ZOMBIE_WINNING_SCORE, mBoard->mChallenge->mChallengeScore, 0, - PROGRESS_METER_COUNTER, CURVE_LINEAR); + PROGRESS_METER_COUNTER, CURVE_LINEAR); if (mBoard->mChallenge->mChallengeScore == I_ZOMBIE_WINNING_SCORE) { @@ -4866,8 +4875,8 @@ int Challenge::SquirrelCountUncaught() while (mBoard->IterateGridItems(aGridItem)) { if (aGridItem->mGridItemType == GRIDITEM_SQUIRREL && - aGridItem->mGridItemState != GRIDITEM_STATE_SQUIRREL_CAUGHT && - aGridItem->mGridItemState != GRIDITEM_STATE_SQUIRREL_ZOMBIE) + aGridItem->mGridItemState != GRIDITEM_STATE_SQUIRREL_CAUGHT && + aGridItem->mGridItemState != GRIDITEM_STATE_SQUIRREL_ZOMBIE) { aCount++; } @@ -4978,7 +4987,7 @@ void Challenge::SquirrelFound(GridItem *theSquirrel) } if (!mBoard->GetGridItemAt(GRIDITEM_SQUIRREL, aGridX, aGridY) && - mBoard->GetTopPlantAt(aGridX, aGridY, TOPPLANT_EATING_ORDER)) + mBoard->GetTopPlantAt(aGridX, aGridY, TOPPLANT_EATING_ORDER)) { aPicks[aPickCount].mX = aGridX; aPicks[aPickCount].mY = aGridY; @@ -4991,10 +5000,10 @@ void Challenge::SquirrelFound(GridItem *theSquirrel) { TodWeightedGridArray *aGrid = TodPickFromWeightedGridArray(aPicks, aPickCount); - theSquirrel->mGridItemState = aGrid->mX < theSquirrel->mGridX ? GRIDITEM_STATE_SQUIRREL_RUNNING_LEFT - : aGrid->mX >= theSquirrel->mGridX ? GRIDITEM_STATE_SQUIRREL_RUNNING_RIGHT - : aGrid->mY < theSquirrel->mGridY ? GRIDITEM_STATE_SQUIRREL_RUNNING_UP - : GRIDITEM_STATE_SQUIRREL_RUNNING_DOWN; + theSquirrel->mGridItemState = aGrid->mX < theSquirrel->mGridX ? GRIDITEM_STATE_SQUIRREL_RUNNING_LEFT + : aGrid->mX >= theSquirrel->mGridX ? GRIDITEM_STATE_SQUIRREL_RUNNING_RIGHT + : aGrid->mY < theSquirrel->mGridY ? GRIDITEM_STATE_SQUIRREL_RUNNING_UP + : GRIDITEM_STATE_SQUIRREL_RUNNING_DOWN; theSquirrel->mGridX = aGrid->mX; theSquirrel->mGridY = aGrid->mY; @@ -5009,7 +5018,7 @@ void Challenge::SquirrelFound(GridItem *theSquirrel) if (aSquirrelsRemaining) { SexyString aMessage = - mApp->Pluralize(aSquirrelsRemaining, "[ADVICE_SQUIRRELS_ONE_LEFT]", "[ADVICE_SQUIRRELS_LEFT]"); + mApp->Pluralize(aSquirrelsRemaining, "[ADVICE_SQUIRRELS_ONE_LEFT]", "[ADVICE_SQUIRRELS_LEFT]"); mBoard->DisplayAdvice(aMessage, MESSAGE_STYLE_HINT_FAST, ADVICE_NONE); } else @@ -5071,7 +5080,7 @@ void Challenge::SquirrelUpdate() mChallengeScore = MAX_SQUIRRELS - SquirrelCountUncaught(); mBoard->mProgressMeterWidth = - TodAnimateCurve(0, MAX_SQUIRRELS, mChallengeScore, 0, PROGRESS_METER_COUNTER, CURVE_LINEAR); + TodAnimateCurve(0, MAX_SQUIRRELS, mChallengeScore, 0, PROGRESS_METER_COUNTER, CURVE_LINEAR); } void Challenge::UpdateRain() @@ -5107,7 +5116,7 @@ void Challenge::UpdateRain() void Challenge::LastStandUpdate() { if (mBoard->mNextSurvivalStageCounter == 0 && mChallengeState == STATECHALLENGE_NORMAL && - mBoard->mStoreButton->mBtnNoDraw) + mBoard->mStoreButton->mBtnNoDraw) { GameButton *aButton = mBoard->mStoreButton; aButton->mBtnNoDraw = false; @@ -5139,7 +5148,7 @@ void Challenge::LastStandCompletedStage() while (mBoard->IteratePlants(aPlant)) { if (aPlant->mState == STATE_CHOMPER_DIGESTING || aPlant->mState == STATE_COBCANNON_ARMING || - aPlant->mState == STATE_MAGNETSHROOM_SUCKING || aPlant->mState == STATE_MAGNETSHROOM_CHARGING) + aPlant->mState == STATE_MAGNETSHROOM_SUCKING || aPlant->mState == STATE_MAGNETSHROOM_CHARGING) { aPlant->mStateCountdown = std::min(aPlant->mStateCountdown, 200); } @@ -5177,7 +5186,7 @@ bool Challenge::TreeOfWisdomMouseOn(int theX, int theY) HitResult aHitResult; mBoard->MouseHitTest(theX, theY, &aHitResult); return (aHitResult.mObjectType == OBJECT_TYPE_TREE_OF_WISDOM && - mBoard->mCursorObject->mCursorType == CURSOR_TYPE_TREE_FOOD); + mBoard->mCursorObject->mCursorType == CURSOR_TYPE_TREE_FOOD); } int Challenge::TreeOfWisdomGetSize() @@ -5188,7 +5197,7 @@ int Challenge::TreeOfWisdomGetSize() void Challenge::TreeOfWisdomDraw(Graphics *g) { bool aMouseOn = TreeOfWisdomMouseOn(mApp->mWidgetManager->mLastMouseX - mBoard->mX, - mApp->mWidgetManager->mLastMouseY - mBoard->mY); + mApp->mWidgetManager->mLastMouseY - mBoard->mY); Reanimation *aReanimTree = mApp->ReanimationGet(mReanimChallenge); aReanimTree->mEnableExtraOverlayDraw = false; @@ -5246,7 +5255,7 @@ void Challenge::TreeOfWisdomDraw(Graphics *g) g->DrawImage(Sexy::IMAGE_STORE_SPEECHBUBBLE2, aPosX, aPosY); SexyString aText = StrFormat("[TREE_OF_WISDOM_%d]", mTreeOfWisdomTalkIndex); TodDrawStringWrapped(g, aText, Rect(aPosX + 25, aPosY + 6, 233, 144), Sexy::FONT_BRIANNETOD16, Color::Black, - DS_ALIGN_CENTER_VERTICAL_MIDDLE); + DS_ALIGN_CENTER_VERTICAL_MIDDLE); } int aCurSize = aHeight; @@ -5330,7 +5339,7 @@ void Challenge::TreeOfWisdomGrow() mApp->mAchievements->GiveAchievement(AchievementID::ACHIEVEMENT_TOWERING_WISDOM); mApp->ReanimationGet(mReanimChallenge) - ->PlayReanim(StrFormat("anim_grow%d", ClampInt(aTreeSize, 1, 51)).c_str(), REANIM_PLAY_ONCE_AND_HOLD, 0, 8.0f); + ->PlayReanim(StrFormat("anim_grow%d", ClampInt(aTreeSize, 1, 51)).c_str(), REANIM_PLAY_ONCE_AND_HOLD, 0, 8.0f); mApp->PlayFoley(FOLEY_PLANTGROW); if (aTreeSize > 1) @@ -5385,7 +5394,8 @@ void Challenge::TreeOfWisdomBabble() } else { - mTreeOfWisdomTalkIndex = Rand(4) + (aTreeSize < 12 ? 201 : aTreeSize < 50 ? 301 : 401); + mTreeOfWisdomTalkIndex = Rand(4) + (aTreeSize < 12 ? 201 : aTreeSize < 50 ? 301 + : 401); } } diff --git a/src/Lawn/Coin.cpp b/src/Lawn/Coin.cpp index 34d00ec..7a2c82f 100644 --- a/src/Lawn/Coin.cpp +++ b/src/Lawn/Coin.cpp @@ -183,53 +183,53 @@ void Coin::CoinInitialize(int theX, int theY, CoinType theCoinType, CoinMotion t mWidth = IMAGE_PRESENT->GetCelWidth(); mHeight = IMAGE_PRESENT->GetCelHeight(); if (mApp->IsSurvivalEndless(mApp->mGameMode) || mApp->IsEndlessIZombie(mApp->mGameMode) || - mApp->IsEndlessScaryPotter(mApp->mGameMode)) + mApp->IsEndlessScaryPotter(mApp->mGameMode)) { SeedType aSeedType = mApp->mZenGarden->PickRandomSeedType(); mPottedPlantSpec.InitializePottedPlant(aSeedType); } else if (mBoard->mBackground == BackgroundType::BACKGROUND_1_DAY) { - SeedType aSeedList[] = {SeedType::SEED_PEASHOOTER, SeedType::SEED_SUNFLOWER, SeedType::SEED_CHERRYBOMB, - SeedType::SEED_WALLNUT, SeedType::SEED_REPEATER, SeedType::SEED_POTATOMINE, - SeedType::SEED_SNOWPEA, SeedType::SEED_CHOMPER}; + SeedType aSeedList[] = { SeedType::SEED_PEASHOOTER, SeedType::SEED_SUNFLOWER, SeedType::SEED_CHERRYBOMB, + SeedType::SEED_WALLNUT, SeedType::SEED_REPEATER, SeedType::SEED_POTATOMINE, + SeedType::SEED_SNOWPEA, SeedType::SEED_CHOMPER }; SeedType aSeedType = (SeedType)TodPickFromArray(aSeedList, LENGTH(aSeedList)); mPottedPlantSpec.InitializePottedPlant(aSeedType); } else if (mBoard->mBackground == BackgroundType::BACKGROUND_2_NIGHT) { - SeedType aSeedList[] = {SeedType::SEED_PUFFSHROOM, SeedType::SEED_SUNSHROOM, - SeedType::SEED_FUMESHROOM, SeedType::SEED_GRAVEBUSTER, - SeedType::SEED_HYPNOSHROOM, SeedType::SEED_SCAREDYSHROOM, - SeedType::SEED_ICESHROOM, SeedType::SEED_DOOMSHROOM}; + SeedType aSeedList[] = { SeedType::SEED_PUFFSHROOM, SeedType::SEED_SUNSHROOM, + SeedType::SEED_FUMESHROOM, SeedType::SEED_GRAVEBUSTER, + SeedType::SEED_HYPNOSHROOM, SeedType::SEED_SCAREDYSHROOM, + SeedType::SEED_ICESHROOM, SeedType::SEED_DOOMSHROOM }; SeedType aSeedType = (SeedType)TodPickFromArray(aSeedList, LENGTH(aSeedList)); mPottedPlantSpec.InitializePottedPlant(aSeedType); } else if (mBoard->mBackground == BackgroundType::BACKGROUND_3_POOL) { - SeedType aSeedList[] = {SeedType::SEED_LILYPAD, SeedType::SEED_SQUASH, SeedType::SEED_THREEPEATER, - SeedType::SEED_TANGLEKELP, SeedType::SEED_JALAPENO, SeedType::SEED_SPIKEWEED, - SeedType::SEED_TORCHWOOD, SeedType::SEED_TALLNUT}; + SeedType aSeedList[] = { SeedType::SEED_LILYPAD, SeedType::SEED_SQUASH, SeedType::SEED_THREEPEATER, + SeedType::SEED_TANGLEKELP, SeedType::SEED_JALAPENO, SeedType::SEED_SPIKEWEED, + SeedType::SEED_TORCHWOOD, SeedType::SEED_TALLNUT }; SeedType aSeedType = (SeedType)TodPickFromArray(aSeedList, LENGTH(aSeedList)); mPottedPlantSpec.InitializePottedPlant(aSeedType); } else if (mBoard->mBackground == BackgroundType::BACKGROUND_4_FOG) { - SeedType aSeedList[] = {SeedType::SEED_SEASHROOM, SeedType::SEED_PLANTERN, SeedType::SEED_CACTUS, - SeedType::SEED_BLOVER, SeedType::SEED_SPLITPEA, SeedType::SEED_STARFRUIT, - SeedType::SEED_PUMPKINSHELL, SeedType::SEED_MAGNETSHROOM}; + SeedType aSeedList[] = { SeedType::SEED_SEASHROOM, SeedType::SEED_PLANTERN, SeedType::SEED_CACTUS, + SeedType::SEED_BLOVER, SeedType::SEED_SPLITPEA, SeedType::SEED_STARFRUIT, + SeedType::SEED_PUMPKINSHELL, SeedType::SEED_MAGNETSHROOM }; SeedType aSeedType = (SeedType)TodPickFromArray(aSeedList, LENGTH(aSeedList)); mPottedPlantSpec.InitializePottedPlant(aSeedType); } else if (mBoard->mBackground == BackgroundType::BACKGROUND_5_ROOF) { - SeedType aSeedList[] = {SeedType::SEED_CABBAGEPULT, SeedType::SEED_KERNELPULT, - SeedType::SEED_INSTANT_COFFEE, SeedType::SEED_GARLIC, - SeedType::SEED_UMBRELLA, SeedType::SEED_MELONPULT}; + SeedType aSeedList[] = { SeedType::SEED_CABBAGEPULT, SeedType::SEED_KERNELPULT, + SeedType::SEED_INSTANT_COFFEE, SeedType::SEED_GARLIC, + SeedType::SEED_UMBRELLA, SeedType::SEED_MELONPULT }; SeedType aSeedType = (SeedType)TodPickFromArray(aSeedList, LENGTH(aSeedList)); mPottedPlantSpec.InitializePottedPlant(aSeedType); @@ -302,9 +302,9 @@ void Coin::CoinInitialize(int theX, int theY, CoinType theCoinType, CoinMotion t } } if (mType == CoinType::COIN_FINAL_SEED_PACKET || mType == CoinType::COIN_USABLE_SEED_PACKET || - mType == CoinType::COIN_TROPHY || mType == CoinType::COIN_SHOVEL || mType == CoinType::COIN_CARKEYS || - mType == CoinType::COIN_ALMANAC || mType == CoinType::COIN_VASE || mType == CoinType::COIN_WATERING_CAN || - mType == CoinType::COIN_TACO || mType == CoinType::COIN_NOTE) + mType == CoinType::COIN_TROPHY || mType == CoinType::COIN_SHOVEL || mType == CoinType::COIN_CARKEYS || + mType == CoinType::COIN_ALMANAC || mType == CoinType::COIN_VASE || mType == CoinType::COIN_WATERING_CAN || + mType == CoinType::COIN_TACO || mType == CoinType::COIN_NOTE) { mGroundY -= 30; } @@ -381,7 +381,7 @@ bool Coin::IsSun() bool Coin::IsPresentWithAdvice() { return mType == CoinType::COIN_PRESENT_MINIGAMES || mType == CoinType::COIN_PRESENT_PUZZLE_MODE || - mType == CoinType::COIN_PRESENT_SURVIVAL_MODE; + mType == CoinType::COIN_PRESENT_SURVIVAL_MODE; } void Coin::ScoreCoin() @@ -417,7 +417,7 @@ void Coin::StartFade() void Coin::UpdateFade() { if (mApp->IsEndlessIZombie(mApp->mGameMode) || mApp->IsEndlessScaryPotter(mApp->mGameMode) || - mType == CoinType::COIN_NOTE || !IsLevelAward()) + mType == CoinType::COIN_NOTE || !IsLevelAward()) { mFadeCount--; if (mFadeCount == 0) @@ -552,7 +552,7 @@ void Coin::UpdateFall() } TodParticleSystem *aParticle = - mApp->AddTodParticle(mPosX + aParticleOffsetX, mPosY + aParticleOffsetY, 0, aEffect); + mApp->AddTodParticle(mPosX + aParticleOffsetX, mPosY + aParticleOffsetY, 0, aEffect); AttachParticle(mAttachmentID, aParticle, aParticleOffsetX, aParticleOffsetY); mHasBouncyArrow = true; } @@ -567,7 +567,7 @@ void Coin::UpdateFall() mPosX = FloatRoundToInt(mPosX); if (mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_LAST_STAND || mBoard == nullptr || - mBoard->mChallenge->mChallengeState == ChallengeState::STATECHALLENGE_LAST_STAND_ONSLAUGHT) + mBoard->mChallenge->mChallengeState == ChallengeState::STATECHALLENGE_LAST_STAND_ONSLAUGHT) { if (!IsLevelAward() && !IsPresentWithAdvice()) { @@ -613,7 +613,7 @@ void Coin::UpdateCollected() aDestY = 546; } else if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mCrazyDaveState != CrazyDaveState::CRAZY_DAVE_OFF) + mApp->mCrazyDaveState != CrazyDaveState::CRAZY_DAVE_OFF) { aDestX = 442; } @@ -688,12 +688,12 @@ void Coin::UpdateCollected() { mBoard->DisplayAdvice("[UNLOCKED_MINIGAMES]", MessageStyle::MESSAGE_STYLE_HINT_TALL_UNLOCKMESSAGE, - AdviceType::ADVICE_UNLOCKED_MODE); + AdviceType::ADVICE_UNLOCKED_MODE); } else if (mType == CoinType::COIN_PRESENT_PUZZLE_MODE) { mBoard->DisplayAdvice("[UNLOCKED_PUZZLE_MODE]", MessageStyle::MESSAGE_STYLE_HINT_TALL_UNLOCKMESSAGE, - AdviceType::ADVICE_UNLOCKED_MODE); + AdviceType::ADVICE_UNLOCKED_MODE); } } else if (mBoard->mHelpIndex != AdviceType::ADVICE_UNLOCKED_MODE || !mBoard->mAdvice->IsBeingDisplayed()) @@ -724,7 +724,7 @@ void Coin::Update() { mCoinAge++; if (mApp->mGameScene != GameScenes::SCENE_PLAYING && mApp->mGameScene != GameScenes::SCENE_AWARD && mBoard && - !mBoard->mCutScene->ShouldRunUpsellBoard()) + !mBoard->mCutScene->ShouldRunUpsellBoard()) { return; } @@ -874,7 +874,7 @@ void Coin::Draw(Graphics *g) SeedType aSeedType = GetFinalSeedPacketType(); g->SetScale(mScale, mScale, 0.0f, 0.0f); DrawSeedPacket(g, 0.5f * (mWidth - mScale * mWidth) + mPosX, 0.5f * (mHeight - mScale * mHeight) + mPosY, - aSeedType, SeedType::SEED_NONE, 0.0f, 255, true, false); + aSeedType, SeedType::SEED_NONE, 0.0f, 255, true, false); g->SetScale(1.0f, 1.0f, 0.0f, 0.0f); return; } @@ -995,7 +995,7 @@ void Coin::Draw(Graphics *g) g->SetColorizeImages(true); TodDrawImageCelCenterScaledF(g, aImage, mPosX + aOffsetX, mPosY + aOffsetY, aImageCelCol, 0, aDrawScale, - aDrawScale); + aDrawScale); g->SetColorizeImages(false); } @@ -1068,15 +1068,15 @@ void Coin::Collect() if (mApp->mZenGarden->IsZenGardenFull(false)) { mBoard->DisplayAdvice("[DIALOG_ZEN_GARDEN_FULL]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); } else { mBoard->mPottedPlantsCollected++; mBoard->DisplayAdvice("[ADVICE_FOUND_PLANT]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); mApp->AddTodParticle(mPosX + 30.0f, mPosY + 30.0f, mRenderOrder + 1, - ParticleEffect::PARTICLE_PRESENT_PICKUP); + ParticleEffect::PARTICLE_PRESENT_PICKUP); mApp->mZenGarden->AddPottedPlant(&mPottedPlantSpec); } @@ -1144,7 +1144,7 @@ void Coin::Collect() if (mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_CHOCOLATE] < PURCHASE_COUNT_OFFSET) { mBoard->DisplayAdvice("[ADVICE_FOUND_CHOCOLATE]", MessageStyle::MESSAGE_STYLE_HINT_TALL_FAST, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_CHOCOLATE] = PURCHASE_COUNT_OFFSET + 1; } else @@ -1202,7 +1202,7 @@ void Coin::Collect() mApp->PlaySample(SOUND_SHOVEL); } else if (mApp->IsFirstTimeAdventureMode() && - (mBoard->mLevel == 24 || mBoard->mLevel == 34 || mBoard->mLevel == 44)) + (mBoard->mLevel == 24 || mBoard->mLevel == 34 || mBoard->mLevel == 44)) { mApp->PlaySample(SOUND_TAP2); } @@ -1234,7 +1234,7 @@ void Coin::Collect() if (mType == CoinType::COIN_NOTE) { mApp->AddTodParticle(mPosX + 30.0f, mPosY + 30.0f, mRenderOrder + 1, - ParticleEffect::PARTICLE_PRESENT_PICKUP); + ParticleEffect::PARTICLE_PRESENT_PICKUP); StartFade(); } else if (!aIsEndlessAward && mApp->Is3DAccelerated()) @@ -1242,7 +1242,7 @@ void Coin::Collect() float aParticleOffsetX = mWidth / 2; float aParticleOffsetY = mHeight / 2; TodParticleSystem *aParticle = mApp->AddTodParticle(mPosX + aParticleOffsetX, mPosY + aParticleOffsetY, - mRenderOrder - 1, PARTICLE_SEED_PACKET_PICKUP); + mRenderOrder - 1, PARTICLE_SEED_PACKET_PICKUP); AttachParticle(mAttachmentID, aParticle, aParticleOffsetX, aParticleOffsetY); } @@ -1291,39 +1291,40 @@ void Coin::Collect() AttachmentDetachCrossFadeParticleType(mAttachmentID, ParticleEffect::PARTICLE_COIN_PICKUP_ARROW, nullptr); if (mApp->IsFirstTimeAdventureMode() && mBoard && mBoard->mLevel == 11 && - (mType == CoinType::COIN_GOLD || mType == CoinType::COIN_SILVER)) + (mType == CoinType::COIN_GOLD || mType == CoinType::COIN_SILVER)) { mBoard->DisplayAdvice("[ADVICE_CLICKED_ON_COIN]", MessageStyle::MESSAGE_STYLE_HINT_FAST, - AdviceType::ADVICE_CLICKED_ON_COIN); + AdviceType::ADVICE_CLICKED_ON_COIN); } } float Coin::GetSunScale() { - return mType == CoinType::COIN_SMALLSUN ? 0.5f : mType == CoinType::COIN_LARGESUN ? 2.0f : 1.0f; + return mType == CoinType::COIN_SMALLSUN ? 0.5f : mType == CoinType::COIN_LARGESUN ? 2.0f + : 1.0f; } int Coin::GetSunValue() { - return mType == CoinType::COIN_SUN ? 25 - : mType == CoinType::COIN_SMALLSUN ? 15 - : mType == CoinType::COIN_LARGESUN ? 50 - : 0; + return mType == CoinType::COIN_SUN ? 25 + : mType == CoinType::COIN_SMALLSUN ? 15 + : mType == CoinType::COIN_LARGESUN ? 50 + : 0; } int Coin::GetCoinValue(CoinType theCoinType) { - return theCoinType == CoinType::COIN_SILVER ? 1 - : theCoinType == CoinType::COIN_GOLD ? 5 - : theCoinType == CoinType::COIN_DIAMOND ? 100 - : 0; + return theCoinType == CoinType::COIN_SILVER ? 1 + : theCoinType == CoinType::COIN_GOLD ? 5 + : theCoinType == CoinType::COIN_DIAMOND ? 100 + : 0; } void Coin::PlayLaunchSound() { if (mType == CoinType::COIN_DIAMOND || mType == CoinType::COIN_CHOCOLATE || - mType == CoinType::COIN_AWARD_CHOCOLATE || mType == CoinType::COIN_PRESENT_PLANT || - mType == CoinType::COIN_AWARD_PRESENT || IsPresentWithAdvice()) + mType == CoinType::COIN_AWARD_CHOCOLATE || mType == CoinType::COIN_PRESENT_PLANT || + mType == CoinType::COIN_AWARD_PRESENT || IsPresentWithAdvice()) { mApp->PlayFoley(FoleyType::FOLEY_CHIME); } @@ -1365,7 +1366,7 @@ void Coin::PlayCollectSound() } if (mType == CoinType::COIN_CHOCOLATE || mType == CoinType::COIN_PRESENT_PLANT || IsPresentWithAdvice() || - mType == CoinType::COIN_AWARD_PRESENT || mType == CoinType::COIN_AWARD_CHOCOLATE) + mType == CoinType::COIN_AWARD_PRESENT || mType == CoinType::COIN_AWARD_CHOCOLATE) { mApp->PlayFoley(FoleyType::FOLEY_PRIZE); return; @@ -1416,7 +1417,7 @@ void Coin::GamepadCursorOver() if (mApp->IsFirstTimeAdventureMode() && mBoard && mBoard->mLevel == 1) { mBoard->DisplayAdvice("[ADVICE_CLICKED_ON_SUN]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL1_STAY, - AdviceType::ADVICE_CLICKED_ON_SUN); + AdviceType::ADVICE_CLICKED_ON_SUN); } } #endif @@ -1436,7 +1437,7 @@ void Coin::MouseDown(int x, int y, int theClickCount) if (mApp->IsFirstTimeAdventureMode() && mBoard->mLevel == 1) { mBoard->DisplayAdvice("[ADVICE_CLICKED_ON_SUN]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL1_STAY, - AdviceType::ADVICE_CLICKED_ON_SUN); + AdviceType::ADVICE_CLICKED_ON_SUN); } } } @@ -1483,8 +1484,8 @@ bool Coin::MouseHitTest(int theX, int theY, HitResult *theHitResult) } if (aCanHitCoin && theX >= mPosX - aExtraClickSize && theX < mPosX + mWidth + aExtraClickSize && - theY >= mPosY + aOffsetY - aExtraClickSize && - theY < mPosY + mHeight + aOffsetY + aExtraClickSize + aExtraClickHeight) + theY >= mPosY + aOffsetY - aExtraClickSize && + theY < mPosY + mHeight + aOffsetY + aExtraClickSize + aExtraClickHeight) { theHitResult->mObject = this; theHitResult->mObjectType = GameObjectType::OBJECT_TYPE_COIN; @@ -1499,12 +1500,12 @@ bool Coin::MouseHitTest(int theX, int theY, HitResult *theHitResult) bool Coin::IsLevelAward() { return mType == CoinType::COIN_FINAL_SEED_PACKET || mType == CoinType::COIN_TROPHY || - mType == CoinType::COIN_AWARD_SILVER_SUNFLOWER || mType == CoinType::COIN_AWARD_GOLD_SUNFLOWER || - mType == CoinType::COIN_SHOVEL || mType == CoinType::COIN_CARKEYS || mType == CoinType::COIN_ALMANAC || - mType == CoinType::COIN_VASE || mType == CoinType::COIN_WATERING_CAN || mType == CoinType::COIN_TACO || - mType == CoinType::COIN_NOTE || mType == CoinType::COIN_AWARD_MONEY_BAG || - mType == CoinType::COIN_AWARD_BAG_DIAMOND || mType == CoinType::COIN_AWARD_PRESENT || - mType == CoinType::COIN_AWARD_CHOCOLATE; + mType == CoinType::COIN_AWARD_SILVER_SUNFLOWER || mType == CoinType::COIN_AWARD_GOLD_SUNFLOWER || + mType == CoinType::COIN_SHOVEL || mType == CoinType::COIN_CARKEYS || mType == CoinType::COIN_ALMANAC || + mType == CoinType::COIN_VASE || mType == CoinType::COIN_WATERING_CAN || mType == CoinType::COIN_TACO || + mType == CoinType::COIN_NOTE || mType == CoinType::COIN_AWARD_MONEY_BAG || + mType == CoinType::COIN_AWARD_BAG_DIAMOND || mType == CoinType::COIN_AWARD_PRESENT || + mType == CoinType::COIN_AWARD_CHOCOLATE; } bool Coin::CoinGetsBouncyArrow() @@ -1528,7 +1529,7 @@ int Coin::GetDisappearTime() int aTime = 750; if (mType == CoinType::COIN_DIAMOND || mType == CoinType::COIN_PRESENT_PLANT || mType == CoinType::COIN_CHOCOLATE || - mHasBouncyArrow) + mHasBouncyArrow) { aTime = 1500; } diff --git a/src/Lawn/CursorObject.cpp b/src/Lawn/CursorObject.cpp index 41772c8..015768b 100644 --- a/src/Lawn/CursorObject.cpp +++ b/src/Lawn/CursorObject.cpp @@ -43,11 +43,11 @@ void CursorObject::Update() return; } - if (!mApp->mWidgetManager->mMouseIn -#if LAWN_USE_UNFINISHED_GAMEPAD_SUPPORT - && !mApp->UsingGamepad() + if (!mApp->mWidgetManager->mMouseIn +#if LAWN_USE_UNFINISHED_GAMEPAD_SUPPORT + && !mApp->UsingGamepad() #endif - ) + ) { mVisible = false; return; @@ -149,7 +149,7 @@ void CursorObject::Draw(Graphics *g) Plant *aPlant = mBoard->mPlants.DataArrayGet((unsigned int)mGlovePlantID); PottedPlant *aPottedPlant = &mApp->mPlayerInfo->mPottedPlant[aPlant->mPottedPlantIndex]; if (mBoard->mBackground == BackgroundType::BACKGROUND_MUSHROOM_GARDEN || - mBoard->mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM) + mBoard->mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM) { mApp->mZenGarden->DrawPottedPlant(g, -10.0f, -10.0f, aPottedPlant, 1.0f, false); } @@ -164,7 +164,7 @@ void CursorObject::Draw(Graphics *g) case CursorType::CURSOR_TYPE_PLANT_FROM_WHEEL_BARROW: { PottedPlant *aPottedPlant = mApp->mZenGarden->GetPottedPlantInWheelbarrow(); if (mBoard->mBackground == BackgroundType::BACKGROUND_MUSHROOM_GARDEN || - mBoard->mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM) + mBoard->mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM) { mApp->mZenGarden->DrawPottedPlant(g, -10.0f, -10.0f, aPottedPlant, 1.0f, false); } @@ -253,7 +253,7 @@ void CursorPreview::Update() else if (mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_WHEEELBARROW) { if (mApp->mZenGarden->GetPottedPlantInWheelbarrow() && - mBoard->CanPlantAt(mGridX, mGridY, aSeedType) == PlantingReason::PLANTING_OK) + mBoard->CanPlantAt(mGridX, mGridY, aSeedType) == PlantingReason::PLANTING_OK) { aShow = true; } @@ -282,22 +282,22 @@ void CursorPreview::Draw(Graphics *g) PottedPlant *aPottedPlant = nullptr; if (mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_WHEEELBARROW || - mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_WHEEL_BARROW) + mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_WHEEL_BARROW) { aPottedPlant = mApp->mZenGarden->GetPottedPlantInWheelbarrow(); } else if (mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_GLOVE) { aPottedPlant = - &mApp->mPlayerInfo->mPottedPlant - [mBoard->mPlants.DataArrayGet((unsigned int)mBoard->mCursorObject->mGlovePlantID)->mPottedPlantIndex]; + &mApp->mPlayerInfo->mPottedPlant + [mBoard->mPlants.DataArrayGet((unsigned int)mBoard->mCursorObject->mGlovePlantID)->mPottedPlantIndex]; } if (aPottedPlant) { bool aDrawPot = true; if (mBoard->mBackground == BackgroundType::BACKGROUND_MUSHROOM_GARDEN || - mBoard->mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM) + mBoard->mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM) { aDrawPot = false; } @@ -324,11 +324,11 @@ void CursorPreview::Draw(Graphics *g) } Plant::DrawSeedType(g, - mBoard->mCursorObject->mType, - mBoard->mCursorObject->mImitaterType, - DrawVariation::VARIATION_NORMAL, - aOffsetX, - aOffsetY); + mBoard->mCursorObject->mType, + mBoard->mCursorObject->mImitaterType, + DrawVariation::VARIATION_NORMAL, + aOffsetX, + aOffsetY); } if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_COLUMN) @@ -339,11 +339,11 @@ void CursorPreview::Draw(Graphics *g) { float aOffsetY = 85.0f * (y - mGridY) + PlantDrawHeightOffset(mBoard, nullptr, aSeedType, mGridX, y); Plant::DrawSeedType(g, - mBoard->mCursorObject->mType, - mBoard->mCursorObject->mImitaterType, - DrawVariation::VARIATION_NORMAL, - 0.0f, - aOffsetY); + mBoard->mCursorObject->mType, + mBoard->mCursorObject->mImitaterType, + DrawVariation::VARIATION_NORMAL, + 0.0f, + aOffsetY); } } } diff --git a/src/Lawn/CutScene.cpp b/src/Lawn/CutScene.cpp index 541acfe..cb05262 100644 --- a/src/Lawn/CutScene.cpp +++ b/src/Lawn/CutScene.cpp @@ -70,7 +70,7 @@ static const int TimeIntro_FadeOut = 10890; static const int TimeIntro_FadeOutEnd = 11890; static const int TimeIntro_End = 13890; static const int TimeLawnMowerDuration = 250; -static const int TimeLawnMowerStart[6] = {6300, 6250, 6200, 6150, 6100, 6050}; +static const int TimeLawnMowerStart[6] = { 6300, 6250, 6200, 6150, 6100, 6050 }; CutScene::CutScene() { @@ -110,7 +110,7 @@ void CutScene::PlaceAZombie(ZombieType theZombieType, int theGridX, int theGridY { bool aPutOnDuckyTube = false; if (theZombieType == ZombieType::ZOMBIE_DUCKY_TUBE && - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS_2) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS_2) { theZombieType = ZombieType::ZOMBIE_PEA_HEAD; aPutOnDuckyTube = true; @@ -159,7 +159,7 @@ void CutScene::PlaceAZombie(ZombieType theZombieType, int theGridX, int theGridY aZombie->mPosX += Rand(15); //RandRangeInt(0, 14); } aZombie->mRenderOrder = - Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_LAWN, 0, (theGridX % 2) * 2 + theGridY * 4); + Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_LAWN, 0, (theGridX % 2) * 2 + theGridY * 4); if (theZombieType == ZombieType::ZOMBIE_BUNGEE) { @@ -192,7 +192,7 @@ bool CutScene::CanZombieGoInGridSpot(ZombieType theZombieType, int theGridX, int } if (theZombieGrid[theGridX - 1][theGridY] || theZombieGrid[theGridX][theGridY - 1] || - theZombieGrid[theGridX - 1][theGridY - 1]) + theZombieGrid[theGridX - 1][theGridY - 1]) { return false; } @@ -228,7 +228,7 @@ bool CutScene::CanZombieGoInGridSpot(ZombieType theZombieType, int theGridX, int } if (Is2x2Zombie(theZombieType) || theZombieType == ZombieType::ZOMBIE_ZAMBONI || - theZombieType == ZombieType::ZOMBIE_BOBSLED || theZombieType == ZombieType::ZOMBIE_POLEVAULTER) + theZombieType == ZombieType::ZOMBIE_BOBSLED || theZombieType == ZombieType::ZOMBIE_POLEVAULTER) { if (theGridX == 0) { @@ -341,7 +341,7 @@ void CutScene::PreloadResources() } for (SeedType aSeedType = SeedType::SEED_PEASHOOTER; aSeedType < SeedType::NUM_SEED_TYPES; - aSeedType = (SeedType)((int)aSeedType + 1)) + aSeedType = (SeedType)((int)aSeedType + 1)) { if (mApp->SeedTypeAvailable(aSeedType)) { @@ -489,7 +489,7 @@ void CutScene::PlaceStreetZombies() int aZombieValueTotal = 0; int aTotalZombieCount = 0; - int aZombieTypeCount[(int)ZombieType::NUM_ZOMBIE_TYPES] = {0}; + int aZombieTypeCount[(int)ZombieType::NUM_ZOMBIE_TYPES] = { 0 }; TOD_ASSERT(mBoard->mNumWaves <= MAX_ZOMBIE_WAVES); for (int aWave = 0; aWave < mBoard->mNumWaves; aWave++) @@ -513,7 +513,7 @@ void CutScene::PlaceStreetZombies() continue; } if (aZombieType == ZombieType::ZOMBIE_BOBSLED && - mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_BOBSLED_BONANZA) + mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_BOBSLED_BONANZA) { continue; } @@ -544,7 +544,7 @@ void CutScene::PlaceStreetZombies() aZombieTypeCount[(int)ZombieType::ZOMBIE_DUCKY_TUBE] = 1; } - bool aZombieGrid[5][5] = {false}; + bool aZombieGrid[5][5] = { false }; int aPreviewCapacity = 10; if (mApp->IsLittleTroubleLevel()) { @@ -556,19 +556,19 @@ void CutScene::PlaceStreetZombies() } for (ZombieType aZombieType = ZombieType::ZOMBIE_NORMAL; aZombieType < ZombieType::NUM_ZOMBIE_TYPES; - aZombieType = (ZombieType)((int)aZombieType + 1)) + aZombieType = (ZombieType)((int)aZombieType + 1)) { if (aZombieTypeCount[(int)aZombieType] && - (Is2x2Zombie(aZombieType) || aZombieType == ZombieType::ZOMBIE_ZAMBONI)) + (Is2x2Zombie(aZombieType) || aZombieType == ZombieType::ZOMBIE_ZAMBONI)) { FindAndPlaceZombie(aZombieType, aZombieGrid); } } for (ZombieType aZombieType = ZombieType::ZOMBIE_NORMAL; aZombieType < ZombieType::NUM_ZOMBIE_TYPES; - aZombieType = (ZombieType)((int)aZombieType + 1)) + aZombieType = (ZombieType)((int)aZombieType + 1)) { if (aZombieTypeCount[(int)aZombieType] && !Is2x2Zombie(aZombieType) && - aZombieType != ZombieType::ZOMBIE_ZAMBONI) + aZombieType != ZombieType::ZOMBIE_ZAMBONI) { int aZombieNumInWave = aZombieTypeCount[(int)aZombieType]; int aZombiePreviewNum = aZombieNumInWave * aPreviewCapacity / aTotalZombieCount; @@ -604,17 +604,17 @@ void CutScene::PlaceLawnItems() bool CutScene::IsSurvivalRepick() { return (mApp->IsSurvivalMode() && mBoard->mChallenge->mSurvivalStage > 0 && - mApp->mGameScene == GameScenes::SCENE_LEVEL_INTRO); + mApp->mGameScene == GameScenes::SCENE_LEVEL_INTRO); } bool CutScene::IsNonScrollingCutscene() { return mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ICE || mApp->mGameMode == GameMode::GAMEMODE_UPSELL || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || mApp->IsScaryPotterLevel() || - mApp->IsIZombieLevel() || mApp->IsWhackAZombieLevel() || mApp->IsShovelLevel() || mApp->IsSquirrelLevel() || - mApp->IsWallnutBowlingLevel(); + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || mApp->IsScaryPotterLevel() || + mApp->IsIZombieLevel() || mApp->IsWhackAZombieLevel() || mApp->IsShovelLevel() || mApp->IsSquirrelLevel() || + mApp->IsWallnutBowlingLevel(); } bool CutScene::IsScrolledLeftAtStart() @@ -630,7 +630,7 @@ bool CutScene::CanGetPacketUpgrade() int aCost = StoreScreen::GetItemCost(StoreItem::STORE_ITEM_PACKET_UPGRADE); return mApp->mPlayerInfo->mPurchases[StoreItem::STORE_ITEM_PACKET_UPGRADE] == 0 && - mApp->mPlayerInfo->mCoins >= aCost && mApp->mPlayerInfo->mDidntPurchasePacketUpgrade < 2; + mApp->mPlayerInfo->mCoins >= aCost && mApp->mPlayerInfo->mDidntPurchasePacketUpgrade < 2; } bool CutScene::CanGetSecondPacketUpgrade() @@ -638,7 +638,7 @@ bool CutScene::CanGetSecondPacketUpgrade() int aCost = StoreScreen::GetItemCost(StoreItem::STORE_ITEM_PACKET_UPGRADE); return mApp->mPlayerInfo->mPurchases[StoreItem::STORE_ITEM_PACKET_UPGRADE] == 1 && - mApp->mPlayerInfo->mCoins >= aCost && mApp->mPlayerInfo->mDidntPurchasePacketUpgrade < 2; + mApp->mPlayerInfo->mCoins >= aCost && mApp->mPlayerInfo->mDidntPurchasePacketUpgrade < 2; } bool CutScene::CanGetPacketUpgrade(int theUpgradeIndex) @@ -646,7 +646,7 @@ bool CutScene::CanGetPacketUpgrade(int theUpgradeIndex) int aCost = StoreScreen::GetItemCost(StoreItem::STORE_ITEM_PACKET_UPGRADE); return mApp->mPlayerInfo->mPurchases[StoreItem::STORE_ITEM_PACKET_UPGRADE] == theUpgradeIndex && - mApp->mPlayerInfo->mCoins >= aCost && mApp->mPlayerInfo->mDidntPurchasePacketUpgrade < 2; + mApp->mPlayerInfo->mCoins >= aCost && mApp->mPlayerInfo->mDidntPurchasePacketUpgrade < 2; } void CutScene::StartLevelIntro() @@ -695,10 +695,10 @@ void CutScene::StartLevelIntro() mReadySetPlantTime = 0; } else if (mApp->IsShovelLevel() || mApp->IsSquirrelLevel() || mApp->IsWallnutBowlingLevel() || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || mApp->IsIZombieLevel() || - mApp->IsWhackAZombieLevel() || mApp->IsScaryPotterLevel()) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND || + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || mApp->IsIZombieLevel() || + mApp->IsWhackAZombieLevel() || mApp->IsScaryPotterLevel()) { mReadySetPlantTime = 0; } @@ -715,7 +715,7 @@ void CutScene::StartLevelIntro() bool isRestart = false; if (mBoard->mPrevBoardResult == BoardResult::BOARDRESULT_LOST || - mBoard->mPrevBoardResult == BoardResult::BOARDRESULT_RESTART) + mBoard->mPrevBoardResult == BoardResult::BOARDRESULT_RESTART) { isRestart = true; } @@ -729,12 +729,12 @@ void CutScene::StartLevelIntro() mCrazyDaveDialogStart = 1401; } else if (mApp->IsFirstTimeAdventureMode() && aLevel >= 13 && aLevel <= 24 && aLevel != 15 && aLevel != 20 && - aLevel != 21 && CanGetPacketUpgrade()) + aLevel != 21 && CanGetPacketUpgrade()) { mCrazyDaveDialogStart = 1501; } else if (mApp->IsFirstTimeAdventureMode() && aLevel >= 16 && aLevel <= 24 && aLevel != 20 && aLevel != 21 && - CanGetSecondPacketUpgrade()) + CanGetSecondPacketUpgrade()) { mCrazyDaveDialogStart = 1551; } @@ -798,7 +798,7 @@ void CutScene::StartLevelIntro() mBoard->mMenuButton->mBtnNoDraw = false; } else if (mApp->mGameMode == GameMode::GAMEMODE_SCARY_POTTER_1 && - !mApp->HasBeatenChallenge(GameMode::GAMEMODE_SCARY_POTTER_1)) + !mApp->HasBeatenChallenge(GameMode::GAMEMODE_SCARY_POTTER_1)) { mCrazyDaveDialogStart = 3000; } @@ -867,17 +867,17 @@ void CutScene::StartLevelIntro() else if (mApp->IsAdventureMode()) { if (mBoard->mBackground == BackgroundType::BACKGROUND_1_DAY || - mBoard->mBackground == BackgroundType::BACKGROUND_2_NIGHT) + mBoard->mBackground == BackgroundType::BACKGROUND_2_NIGHT) { aHouseMessage = TodStringTranslate("[PLAYERS_HOUSE]"); } else if (mBoard->mBackground == BackgroundType::BACKGROUND_3_POOL || - mBoard->mBackground == BackgroundType::BACKGROUND_4_FOG) + mBoard->mBackground == BackgroundType::BACKGROUND_4_FOG) { aHouseMessage = TodStringTranslate("[PLAYERS_BACKYARD]"); } else if (mBoard->mBackground == BackgroundType::BACKGROUND_5_ROOF || - mBoard->mBackground == BackgroundType::BACKGROUND_6_BOSS) + mBoard->mBackground == BackgroundType::BACKGROUND_6_BOSS) { aHouseMessage = TodStringTranslate("[PLAYERS_ROOF]"); } @@ -973,7 +973,7 @@ void CutScene::CancelIntro() if (mCutsceneTime > mCrazyDaveTime + TimePanLeftStart || !mBoard->ChooseSeedsOnCurrentLevel()) { mCutsceneTime = TimeIntroEnd + mLawnMowerTime + mSodTime + mGraveStoneTime + mCrazyDaveTime + mFogTime + - mBossTime + mReadySetPlantTime - 20; + mBossTime + mReadySetPlantTime - 20; PlaceLawnItems(); if (mApp->IsStormyNightLevel()) @@ -1062,7 +1062,7 @@ void CutScene::AddFlowerPots() int CutScene::CalcPosition(int theTimeStart, int theTimeEnd, int thePositionStart, int thePositionEnd) { return TodAnimateCurve(theTimeStart, theTimeEnd, mCutsceneTime, thePositionStart, thePositionEnd, - TodCurves::CURVE_EASE_IN_OUT); + TodCurves::CURVE_EASE_IN_OUT); } void CutScene::AnimateBoard() @@ -1105,7 +1105,7 @@ void CutScene::AnimateBoard() if (mCutsceneTime > aTimePanRightStart && mCutsceneTime <= aTimePanRightEnd) { int aPanOffset = - CalcPosition(aTimePanRightStart, aTimePanRightEnd, -aBoardOffset, BOARD_IMAGE_WIDTH_OFFSET - mApp->mWidth); + CalcPosition(aTimePanRightStart, aTimePanRightEnd, -aBoardOffset, BOARD_IMAGE_WIDTH_OFFSET - mApp->mWidth); mBoard->Move(-aPanOffset, 0); } @@ -1118,9 +1118,9 @@ void CutScene::AnimateBoard() if (mCutsceneTime > aTimeSeedChoserSlideOnStart && mCutsceneTime <= aTimeSeedChoserSlideOnEnd) { aSeedChoser->Move( - 0, CalcPosition(aTimeSeedChoserSlideOnStart, aTimeSeedChoserSlideOnEnd, SEED_CHOOSER_OFFSET_Y, 0)); + 0, CalcPosition(aTimeSeedChoserSlideOnStart, aTimeSeedChoserSlideOnEnd, SEED_CHOOSER_OFFSET_Y, 0)); aSeedChoser->mMenuButton->mY = - CalcPosition(aTimeSeedChoserSlideOnStart, aTimeSeedChoserSlideOnEnd, -50, -10); + CalcPosition(aTimeSeedChoserSlideOnStart, aTimeSeedChoserSlideOnEnd, -50, -10); aSeedChoser->mMenuButton->mBtnNoDraw = false; } @@ -1129,7 +1129,7 @@ void CutScene::AnimateBoard() if (mCutsceneTime > aTimeSeedChoserSlideOffStart && mCutsceneTime <= aTimeSeedChoserSlideOffEnd) { aSeedChoser->Move( - 0, CalcPosition(aTimeSeedChoserSlideOffStart, aTimeSeedChoserSlideOffEnd, 0, SEED_CHOOSER_OFFSET_Y)); + 0, CalcPosition(aTimeSeedChoserSlideOffStart, aTimeSeedChoserSlideOffEnd, 0, SEED_CHOOSER_OFFSET_Y)); aSeedChoser->mMenuButton->mDisabled = true; } } @@ -1144,12 +1144,12 @@ void CutScene::AnimateBoard() if (!mBoard->ChooseSeedsOnCurrentLevel()) { aTimePrepareEnd = - mBossTime + mFogTime + mGraveStoneTime + mSodTime - TimeSeedChoserSlideOnStart + TimePanLeftEnd; + mBossTime + mFogTime + mGraveStoneTime + mSodTime - TimeSeedChoserSlideOnStart + TimePanLeftEnd; } int aTimeSeedBankOnStart = TimeSeedBankOnStart + aTimePrepareEnd + mCrazyDaveTime; int aTimeSeedBankOnEnd = TimeSeedBankOnEnd + aTimePrepareEnd + mCrazyDaveTime; if (!mApp->IsChallengeWithoutSeedBank() && mCutsceneTime > aTimeSeedBankOnStart && - mCutsceneTime <= aTimeSeedBankOnEnd) + mCutsceneTime <= aTimeSeedBankOnEnd) { int aSeedBankY = CalcPosition(aTimeSeedBankOnStart, aTimeSeedBankOnEnd, -IMAGE_SEEDBANK->GetHeight(), 0); mBoard->mSeedBank->Move(SEED_BANK_OFFSET_X, aSeedBankY); @@ -1159,9 +1159,9 @@ void CutScene::AnimateBoard() if (mCutsceneTime > aTimeSeedBankRightStart) { int aSeedBankX = - CalcPosition(aTimeSeedBankRightStart, aTimeSeedBankRightEnd, SEED_BANK_OFFSET_X, SEED_BANK_OFFSET_X_END); + CalcPosition(aTimeSeedBankRightStart, aTimeSeedBankRightEnd, SEED_BANK_OFFSET_X, SEED_BANK_OFFSET_X_END); int aDarken = TodAnimateCurve(aTimeSeedBankRightStart, aTimeSeedBankRightEnd, mCutsceneTime, 255, 128, - TodCurves::CURVE_EASE_OUT); + TodCurves::CURVE_EASE_OUT); mBoard->mSeedBank->mCutSceneDarken = aDarken; mBoard->mSeedBank->Move(aSeedBankX, mBoard->mSeedBank->mY); } @@ -1171,7 +1171,7 @@ void CutScene::AnimateBoard() int aTimeRollSodStart = TimeRollSodStart + mCrazyDaveTime; int aTimeRollSodEnd = TimeRollSodEnd + mCrazyDaveTime; mBoard->mSodPosition = - TodAnimateCurve(aTimeRollSodStart, aTimeRollSodEnd, mCutsceneTime, 0, 1000, TodCurves::CURVE_LINEAR); + TodAnimateCurve(aTimeRollSodStart, aTimeRollSodEnd, mCutsceneTime, 0, 1000, TodCurves::CURVE_LINEAR); if (mCutsceneTime == aTimeRollSodStart) { @@ -1179,31 +1179,31 @@ void CutScene::AnimateBoard() if (mBoard->mLevel == 1) { mApp->AddReanimation(0, 0, Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 0), - ReanimationType::REANIM_SODROLL); + ReanimationType::REANIM_SODROLL); mApp->AddTodParticle(35, 348, Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 1), - ParticleEffect::PARTICLE_SOD_ROLL); + ParticleEffect::PARTICLE_SOD_ROLL); } else if (mBoard->mLevel == 2) { mApp->AddReanimation(0, -102, Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 0), - ReanimationType::REANIM_SODROLL); + ReanimationType::REANIM_SODROLL); mApp->AddReanimation(0, 111, Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 0), - ReanimationType::REANIM_SODROLL); + ReanimationType::REANIM_SODROLL); mApp->AddTodParticle(35, 246, Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 1), - ParticleEffect::PARTICLE_SOD_ROLL); + ParticleEffect::PARTICLE_SOD_ROLL); mApp->AddTodParticle(35, 459, Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 1), - ParticleEffect::PARTICLE_SOD_ROLL); + ParticleEffect::PARTICLE_SOD_ROLL); } else if (mBoard->mLevel == 4) { mApp->AddReanimation(-3, -198, Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 0), - ReanimationType::REANIM_SODROLL); + ReanimationType::REANIM_SODROLL); mApp->AddReanimation(-3, 203, Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 0), - ReanimationType::REANIM_SODROLL); + ReanimationType::REANIM_SODROLL); mApp->AddTodParticle(32, 150, Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 1), - ParticleEffect::PARTICLE_SOD_ROLL); + ParticleEffect::PARTICLE_SOD_ROLL); mApp->AddTodParticle(32, 511, Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 1), - ParticleEffect::PARTICLE_SOD_ROLL); + ParticleEffect::PARTICLE_SOD_ROLL); } } @@ -1240,7 +1240,7 @@ void CutScene::AnimateBoard() { aLawnMower->mVisible = true; aLawnMower->mPosX = - CalcPosition(aTimeLawnMowerStart, aTimeLawnMowerStart + TimeLawnMowerDuration, -80, -21); + CalcPosition(aTimeLawnMowerStart, aTimeLawnMowerStart + TimeLawnMowerDuration, -80, -21); } } } @@ -1280,11 +1280,11 @@ void CutScene::AnimateBoard() } int aTimeReadySetPlant = - TimeReadySetPlantStart + mLawnMowerTime + mSodTime + mGraveStoneTime + mCrazyDaveTime + mFogTime + mBossTime; + TimeReadySetPlantStart + mLawnMowerTime + mSodTime + mGraveStoneTime + mCrazyDaveTime + mFogTime + mBossTime; if (mReadySetPlantTime > 0 && mCutsceneTime == aTimeReadySetPlant) { mApp->AddReanimation(400, 324, Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_SCREEN_FADE, 0, 0), - ReanimationType::REANIM_READYSETPLANT); + ReanimationType::REANIM_READYSETPLANT); mApp->PlaySample(SOUND_READYSETPLANT); if (!mApp->IsFinalBossLevel()) { @@ -1304,11 +1304,11 @@ void CutScene::AnimateBoard() void CutScene::ShowShovel() { if (mApp->IsWhackAZombieLevel() || mApp->IsWallnutBowlingLevel() || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || mApp->IsIZombieLevel()) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || mApp->IsIZombieLevel()) return; if (!mApp->IsFirstTimeAdventureMode() || mBoard->mLevel > 4) @@ -1320,8 +1320,8 @@ void CutScene::ShowShovel() bool CutScene::IsInShovelTutorial() { return mBoard->mTutorialState == TutorialState::TUTORIAL_SHOVEL_PICKUP || - mBoard->mTutorialState == TutorialState::TUTORIAL_SHOVEL_DIG || - mBoard->mTutorialState == TutorialState::TUTORIAL_SHOVEL_KEEP_DIGGING; + mBoard->mTutorialState == TutorialState::TUTORIAL_SHOVEL_DIG || + mBoard->mTutorialState == TutorialState::TUTORIAL_SHOVEL_KEEP_DIGGING; } void CutScene::StartSeedChooser() @@ -1342,7 +1342,7 @@ void CutScene::EndSeedChooser() bool CutScene::IsShowingCrazyDave() { return mApp->mGameScene == GameScenes::SCENE_LEVEL_INTRO && - (mCrazyDaveTime > 0 && mCutsceneTime < TimePanRightEnd + mCrazyDaveTime); + (mCrazyDaveTime > 0 && mCutsceneTime < TimePanRightEnd + mCrazyDaveTime); } void CutScene::Update() @@ -1390,7 +1390,7 @@ void CutScene::Update() { UpdateUpsell(); if (mApp->mCrazyDaveState != CrazyDaveState::CRAZY_DAVE_OFF && - mApp->mCrazyDaveState != CrazyDaveState::CRAZY_DAVE_ENTERING) + mApp->mCrazyDaveState != CrazyDaveState::CRAZY_DAVE_ENTERING) { aCutsceneTimeStop = true; } @@ -1411,7 +1411,7 @@ void CutScene::Update() } int aTimeStart = TimeIntroEnd + mLawnMowerTime + mSodTime + mGraveStoneTime + mCrazyDaveTime + mFogTime + - mBossTime + mReadySetPlantTime; + mBossTime + mReadySetPlantTime; if (mCutsceneTime >= aTimeStart) { mBoard->RemoveCutsceneZombies(); @@ -1455,7 +1455,7 @@ void CutScene::UpdateZombiesWon() ReanimatorEnsureDefinitionLoaded(ReanimationType::REANIM_ZOMBIES_WON, true); int aRenderPosition = Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_SCREEN_FADE, 0, 0); Reanimation *aReanimation = - mApp->AddReanimation(-BOARD_OFFSET, 0, aRenderPosition, ReanimationType::REANIM_ZOMBIES_WON); + mApp->AddReanimation(-BOARD_OFFSET, 0, aRenderPosition, ReanimationType::REANIM_ZOMBIES_WON); aReanimation->mAnimRate = 12.0f; aReanimation->mLoopType = ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD; aReanimation->GetTrackInstanceByName("fullscreen")->mTrackColor = Color::Black; @@ -1575,7 +1575,7 @@ void CutScene::AdvanceCrazyDaveDialog(bool theJustSkipping) SexyString aBodyString = TodReplaceNumberString("[UPGRADE_DIALOG_BODY]", "{SLOTS}", aNumPackets + 1); SexyString aAmountString = mApp->GetMoneyString(aCost); Dialog *aDialog = mApp->DoDialog(Dialogs::DIALOG_PURCHASE_PACKET_SLOT, true, aAmountString, aBodyString, "", - Dialog::BUTTONS_YES_NO); + Dialog::BUTTONS_YES_NO); aDialog->mX += 120; aDialog->mY += 130; mBoard->ShowCoinBank(100); @@ -1648,14 +1648,14 @@ void CutScene::KeyDown(KeyCode theKey) mCrazyDaveCountDown = 1; } else if (theKey == KeyCode::KEYCODE_SPACE || theKey == KeyCode::KEYCODE_RETURN || - theKey == KeyCode::KEYCODE_ESCAPE) + theKey == KeyCode::KEYCODE_ESCAPE) { mApp->CrazyDaveStopSound(); mApp->PlaySample(SOUND_PAUSE); mApp->mMusic->GameMusicPause(true); int aResult = mApp->LawnMessageBox(Dialogs::DIALOG_MESSAGE, "[UPSELL_PAUSE_HEADER]", "[UPSELL_PAUSE_BODY]", - "[UPSELL_RESUME_BUTTON]", "[MAIN_MENU_BUTTON]", Dialog::BUTTONS_YES_NO); + "[UPSELL_RESUME_BUTTON]", "[MAIN_MENU_BUTTON]", Dialog::BUTTONS_YES_NO); if (aResult == Dialog::ID_NO) { mApp->KillCreditScreen(); @@ -1672,7 +1672,7 @@ void CutScene::KeyDown(KeyCode theKey) AdvanceCrazyDaveDialog(false); } else if (mApp->mTodCheatKeys && (theKey == KeyCode::KEYCODE_SPACE || theKey == KeyCode::KEYCODE_RETURN || - theKey == KeyCode::KEYCODE_ESCAPE)) + theKey == KeyCode::KEYCODE_ESCAPE)) { CancelIntro(); } @@ -2035,7 +2035,7 @@ void CutScene::UpdateUpsell() mApp->SetCursor(CURSOR_POINTER); } if (mApp->mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_OFF || - mApp->mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_ENTERING) + mApp->mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_ENTERING) return; if (mCrazyDaveLastTalkIndex == -1) @@ -2088,7 +2088,7 @@ void CutScene::UpdateUpsell() Reanimation *aReanimSquash = mApp->AddReanimation(0, 0, 0, ReanimationType::REANIM_SQUASH); aReanimSquash->PlayReanim("anim_idle", ReanimLoopType::REANIM_LOOP, 0, 15.0f); AttachEffect *anAttachEffect = AttachReanim( - aCrazyDaveReanim->GetTrackInstanceByName("Dave_handinghand")->mAttachmentID, aReanimSquash, 92.0f, 387.0f); + aCrazyDaveReanim->GetTrackInstanceByName("Dave_handinghand")->mAttachmentID, aReanimSquash, 92.0f, 387.0f); anAttachEffect->mOffset.m11 = 1.2f; anAttachEffect->mOffset.m22 = 1.2f; aCrazyDaveReanim->Update(); @@ -2107,7 +2107,7 @@ void CutScene::UpdateUpsell() aReanimHead->AttachToAnotherReanimation(aReanimThreepeater, StrFormat("anim_head%d", i).c_str()); } AttachEffect *anAttachEffect = AttachReanim( - aCrazyDaveReanim->GetTrackInstanceByName("Dave_body1")->mAttachmentID, aReanimThreepeater, 0.0f, 0.0f); + aCrazyDaveReanim->GetTrackInstanceByName("Dave_body1")->mAttachmentID, aReanimThreepeater, 0.0f, 0.0f); TodScaleRotateTransformMatrix(anAttachEffect->mOffset, -50, 230, 0.5f, 1.2f, 1.2f); aCrazyDaveReanim->Update(); aReanimThreepeater->Update(); @@ -2119,7 +2119,7 @@ void CutScene::UpdateUpsell() aReanimMagnet->PlayReanim("anim_idle", ReanimLoopType::REANIM_LOOP, 0, 15.0f); TodScaleRotateTransformMatrix(aReanimMagnet->mOverlayMatrix, 0, 0, 0.3f, 1, 1); AttachEffect *anAttachEffect = AttachReanim(aCrazyDaveReanim->GetTrackInstanceByName("Dave_pot")->mAttachmentID, - aReanimMagnet, 49.0f, 25.0f); + aReanimMagnet, 49.0f, 25.0f); anAttachEffect->mOffset.m11 = 1.2f; anAttachEffect->mOffset.m22 = 1.2f; aCrazyDaveReanim->Update(); @@ -2155,7 +2155,7 @@ void CutScene::UpdateUpsell() mApp->PlaySample(SOUND_FINALWAVE); mUpsellHideBoard = true; mApp->AddTodParticle(592, 240, Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_SCREEN_FADE, 0, 0), - ParticleEffect::PARTICLE_PERSENT_PICK_UP_ARROW); + ParticleEffect::PARTICLE_PERSENT_PICK_UP_ARROW); break; case 3316: @@ -2195,8 +2195,8 @@ void CutScene::DrawUpsell(Graphics *g) void CutScene::UpdateIntro() { mBoard->Move(TodAnimateCurve(TimeIntro_PanRightStart, TimeIntro_PanRightEnd, mCutsceneTime, 100, -100, - TodCurves::CURVE_LINEAR), - 0); + TodCurves::CURVE_LINEAR), + 0); if (mCutsceneTime == 10) { @@ -2239,19 +2239,19 @@ void CutScene::DrawIntro(Graphics *g) if (mCutsceneTime > TimeIntro_PresentsFadeIn && mCutsceneTime <= aTimePanRightStart) { int anAlpha = mCutsceneTime < aTimePanRightStart - 600 - ? TodAnimateCurve(TimeIntro_PresentsFadeIn, TimeIntro_PresentsFadeIn + 300, mCutsceneTime, 0, - 255, TodCurves::CURVE_LINEAR) - : TodAnimateCurve(aTimePanRightStart - 600, aTimePanRightStart - 300, mCutsceneTime, 255, 0, - TodCurves::CURVE_LINEAR); + ? TodAnimateCurve(TimeIntro_PresentsFadeIn, TimeIntro_PresentsFadeIn + 300, mCutsceneTime, 0, + 255, TodCurves::CURVE_LINEAR) + : TodAnimateCurve(aTimePanRightStart - 600, aTimePanRightStart - 300, mCutsceneTime, 255, 0, + TodCurves::CURVE_LINEAR); TodDrawString(g, "[INTRO_PRESENTS]", BOARD_WIDTH / 2 - mBoard->mX, 310 - mBoard->mY, FONT_BRIANNETOD32, - Color(255, 255, 255, anAlpha), DrawStringJustification::DS_ALIGN_CENTER); + Color(255, 255, 255, anAlpha), DrawStringJustification::DS_ALIGN_CENTER); } if (mCutsceneTime > TimeIntro_LogoStart && mCutsceneTime <= TimeIntro_PanRightEnd) { float aScale = TodAnimateCurveFloat(TimeIntro_LogoStart, TimeIntro_LogoEnd, mCutsceneTime, 5, 1, - TodCurves::CURVE_EASE_OUT); + TodCurves::CURVE_EASE_OUT); float aCenter = aScale * 0.5; int aOffsetX = BOARD_WIDTH / 2 - mBoard->mX, aOffsetY = BOARD_HEIGHT / 2 - mBoard->mY; Rect aRect(aOffsetX - BOARD_WIDTH * aCenter, aOffsetY - 75 * aScale, BOARD_WIDTH * aScale, 150 * aScale); @@ -2259,14 +2259,14 @@ void CutScene::DrawIntro(Graphics *g) g->FillRect(aRect); Image *aImage = IMAGE_PVZ_LOGO; TodDrawImageScaledF(g, aImage, aOffsetX - aImage->GetWidth() * aCenter, - aOffsetY - aImage->GetHeight() * aCenter, aScale, aScale); + aOffsetY - aImage->GetHeight() * aCenter, aScale, aScale); } if (mCutsceneTime > TimeIntro_FadeOut && mCutsceneTime <= TimeIntro_FadeOutEnd) { g->SetColor(Color( - 0, 0, 0, - TodAnimateCurve(TimeIntro_FadeOut, TimeIntro_FadeOutEnd, mCutsceneTime, 0, 255, TodCurves::CURVE_LINEAR))); + 0, 0, 0, + TodAnimateCurve(TimeIntro_FadeOut, TimeIntro_FadeOutEnd, mCutsceneTime, 0, 255, TodCurves::CURVE_LINEAR))); g->FillRect(-mBoard->mX, -mBoard->mY, BOARD_WIDTH, BOARD_HEIGHT); } } @@ -2274,7 +2274,7 @@ void CutScene::DrawIntro(Graphics *g) bool CutScene::ShouldRunUpsellBoard() { return (mApp->mGameMode == GameMode::GAMEMODE_UPSELL || mApp->mGameMode == GameMode::GAMEMODE_INTRO) && - !mUpsellHideBoard; + !mUpsellHideBoard; } bool CutScene::IsAfterSeedChooser() diff --git a/src/Lawn/GridItem.cpp b/src/Lawn/GridItem.cpp index 45ab910..b3a735e 100644 --- a/src/Lawn/GridItem.cpp +++ b/src/Lawn/GridItem.cpp @@ -63,7 +63,7 @@ void GridItem::DrawGridItemOverlay(Graphics *g) if (mGridItemType == GridItemType::GRIDITEM_STINKY) { if (mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_CHOCOLATE && - !mApp->mZenGarden->IsStinkyHighOnChocolate()) + !mApp->mZenGarden->IsStinkyHighOnChocolate()) { g->DrawImage(IMAGE_PLANTSPEECHBUBBLE, mPosX + 50.0f, mPosY - 36.0f); TodDrawImageScaledF(g, IMAGE_CHOCOLATE, mPosX + 63.0f, mPosY - 28.0f, 0.44f, 0.44f); @@ -191,7 +191,7 @@ void GridItem::DrawGraveStone(Graphics *g) } Rect aSrcRect(aCelWidth * aGraveCol, aCelHeight * aGraveRow + aExtraTopClip, aCelWidth, - aVisibleHeight - aExtraBottomClip - aExtraTopClip); + aVisibleHeight - aExtraBottomClip - aExtraTopClip); Rect aSrcRectDirt(aCelWidth * aGraveCol, aCelHeight * aGraveRow, aCelWidth, aVisibleHeightDirt); int x = mBoard->GridToPixelX(mGridX, mGridY) + aGridCelOffsetX - 4; int y = mBoard->GridToPixelY(mGridX, mGridY) + aCelHeight + aGridCelOffsetY - 9; @@ -327,7 +327,7 @@ void GridItem::DrawScaryPot(Graphics *g) aInsideGraphics.mScaleX = 0.7f; aInsideGraphics.mScaleY = 0.7f; DrawSeedPacket(&aInsideGraphics, aXPos + 23.0f, aYPos + 33.0f, mSeedType, SeedType::SEED_NONE, 0.0f, 255, - false, false); + false, false); } else if (mScaryPotType == ScaryPotType::SCARYPOT_ZOMBIE) { @@ -513,8 +513,8 @@ void GridItem::ClosePortal() bool GridItem::IsOpenPortal() { return mGridItemState != GridItemState::GRIDITEM_STATE_PORTAL_CLOSED && - (mGridItemType == GridItemType::GRIDITEM_PORTAL_CIRCLE || - mGridItemType == GridItemType::GRIDITEM_PORTAL_SQUARE); + (mGridItemType == GridItemType::GRIDITEM_PORTAL_CIRCLE || + mGridItemType == GridItemType::GRIDITEM_PORTAL_SQUARE); } void GridItem::UpdatePortal() @@ -638,7 +638,7 @@ Zombie *GridItem::RakeFindZombie() while (mBoard->IterateZombies(aZombie)) { if (!aZombie->IsDeadOrDying() && !aZombie->IsBobsledTeamWithSled() && aZombie->mRow - mGridY == 0 && - aZombie->EffectedByDamage(GetBit(DamageRangeFlags::DAMAGES_GROUND))) + aZombie->EffectedByDamage(GetBit(DamageRangeFlags::DAMAGES_GROUND))) { Rect aZombieRect = aZombie->GetZombieRect(); if (GetRectOverlap(aRakeRect, aZombieRect) >= 0) @@ -654,7 +654,7 @@ Zombie *GridItem::RakeFindZombie() void GridItem::UpdateRake() { if (mGridItemState == GridItemState::GRIDITEM_STATE_RAKE_ATTRACTING || - mGridItemState == GridItemState::GRIDITEM_STATE_RAKE_WAITING) + mGridItemState == GridItemState::GRIDITEM_STATE_RAKE_WAITING) { if (RakeFindZombie()) { diff --git a/src/Lawn/LawnCommon.cpp b/src/Lawn/LawnCommon.cpp index b3f6ac6..0f24315 100644 --- a/src/Lawn/LawnCommon.cpp +++ b/src/Lawn/LawnCommon.cpp @@ -12,7 +12,11 @@ #include "../SexyAppFramework/Checkbox.h" int gLawnEditWidgetColors[][4] = { - {0, 0, 0, 0}, {0, 0, 0, 0}, {240, 240, 255, 255}, {255, 255, 255, 255}, {0, 0, 0, 255}, + { 0, 0, 0, 0 }, + { 0, 0, 0, 0 }, + { 240, 240, 255, 255 }, + { 255, 255, 255, 255 }, + { 0, 0, 0, 255 }, }; bool ModInRange(int theNumber, int theMod, int theRange) @@ -98,7 +102,7 @@ void DrawEditBox(Graphics *g, EditWidget *theWidget) Checkbox *MakeNewCheckbox(int theId, CheckboxListener *theListener, bool theDefault) { Checkbox *aCheckbox = - new Checkbox(Sexy::IMAGE_OPTIONS_CHECKBOX0, Sexy::IMAGE_OPTIONS_CHECKBOX1, theId, theListener); + new Checkbox(Sexy::IMAGE_OPTIONS_CHECKBOX0, Sexy::IMAGE_OPTIONS_CHECKBOX1, theId, theListener); aCheckbox->mChecked = theDefault; aCheckbox->mHasAlpha = true; aCheckbox->mHasTransparencies = true; @@ -164,7 +168,7 @@ void LawnScrollbar::Update() { if (aIsOver) mValue = std::max( - 0.0f, std::min((aMouseX - mGrabOffsetX) / (mWidth - mThumbRect.mWidth) * mMaxValue, mMaxValue)); + 0.0f, std::min((aMouseX - mGrabOffsetX) / (mWidth - mThumbRect.mWidth) * mMaxValue, mMaxValue)); mThumbRect = Rect(aNormalized * (mWidth - mThumbRect.mWidth), 0, mSliderHeightPercent * mWidth, mHeight); } else @@ -172,7 +176,7 @@ void LawnScrollbar::Update() if (aIsOver) mValue = std::max( - 0.0f, std::min((aMouseY - mGrabOffsetY) / (mHeight - mThumbRect.mHeight) * mMaxValue, mMaxValue)); + 0.0f, std::min((aMouseY - mGrabOffsetY) / (mHeight - mThumbRect.mHeight) * mMaxValue, mMaxValue)); mThumbRect = Rect(0, aNormalized * (mHeight - mThumbRect.mHeight), mWidth, mSliderHeightPercent * mHeight); } } @@ -252,7 +256,7 @@ float LawnScrollbar::GetValue() Color DeriveLawnSliderColor(Color aColor, int r, int g, int b) { return Color(std::clamp(aColor.mRed + r, 0, 255), std::clamp(aColor.mGreen + g, 0, 255), - std::clamp(aColor.mBlue + b, 0, 255)); + std::clamp(aColor.mBlue + b, 0, 255)); } void LawnScrollbar::Resize(int theX, int theY, int theWidth, int theHeight) diff --git a/src/Lawn/LawnMower.cpp b/src/Lawn/LawnMower.cpp index c96b127..b78f575 100644 --- a/src/Lawn/LawnMower.cpp +++ b/src/Lawn/LawnMower.cpp @@ -30,7 +30,7 @@ void LawnMower::LawnMowerInitialize(int theRow) aReanimType = ReanimationType::REANIM_ROOF_CLEANER; } else if (mBoard->mPlantRow[mRow] == PlantRowType::PLANTROW_POOL && - mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_POOL_CLEANER]) + mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_POOL_CLEANER]) { mMowerType = LawnMowerType::LAWNMOWER_POOL; aReanimType = ReanimationType::REANIM_POOL_CLEANER; @@ -77,10 +77,10 @@ void LawnMower::UpdatePool() if (isPoolRange && mMowerHeight == MowerHeight::MOWER_HEIGHT_LAND) { Reanimation *aSplashReanim = - mApp->AddReanimation(mPosX + 0.0f, mPosY + 25.0f, mRenderOrder + 1, ReanimationType::REANIM_SPLASH); + mApp->AddReanimation(mPosX + 0.0f, mPosY + 25.0f, mRenderOrder + 1, ReanimationType::REANIM_SPLASH); aSplashReanim->OverrideScale(1.2f, 0.8f); mApp->AddTodParticle( - mPosX + 0.0f + 50.0f, mPosY + 0.0f + 42.0f, mRenderOrder + 1, ParticleEffect::PARTICLE_PLANTING_POOL); + mPosX + 0.0f + 50.0f, mPosY + 0.0f + 42.0f, mRenderOrder + 1, ParticleEffect::PARTICLE_PLANTING_POOL); mApp->PlayFoley(FoleyType::FOLEY_ZOMBIESPLASH); mMowerHeight = MowerHeight::MOWER_HEIGHT_DOWN_TO_POOL; } @@ -101,10 +101,10 @@ void LawnMower::UpdatePool() mAltitude = -28.0f; mMowerHeight = MowerHeight::MOWER_HEIGHT_UP_TO_LAND; Reanimation *aSplashReanim = - mApp->AddReanimation(mPosX + 0.0f, mPosY + 25.0f, mRenderOrder + 1, ReanimationType::REANIM_SPLASH); + mApp->AddReanimation(mPosX + 0.0f, mPosY + 25.0f, mRenderOrder + 1, ReanimationType::REANIM_SPLASH); aSplashReanim->OverrideScale(1.2f, 0.8f); mApp->AddTodParticle( - mPosX + 0.0f + 50.0f, mPosY + 0.0f + 42.0f, mRenderOrder + 1, ParticleEffect::PARTICLE_PLANTING_POOL); + mPosX + 0.0f + 50.0f, mPosY + 0.0f + 42.0f, mRenderOrder + 1, ParticleEffect::PARTICLE_PLANTING_POOL); mApp->PlayFoley(FoleyType::FOLEY_PLANT_WATER); aMowerReanim->PlayReanim("anim_land", ReanimLoopType::REANIM_LOOP, 0, 0.0f); } @@ -120,7 +120,7 @@ void LawnMower::UpdatePool() } if (mMowerHeight == MowerHeight::MOWER_HEIGHT_IN_POOL && - aMowerReanim->mLoopType == ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD && aMowerReanim->mLoopCount > 0) + aMowerReanim->mLoopType == ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD && aMowerReanim->mLoopCount > 0) { aMowerReanim->PlayReanim("anim_water", ReanimLoopType::REANIM_LOOP, 10, 35.0f); } @@ -200,19 +200,19 @@ void LawnMower::Update() continue; if (aZombie->mZombieType != ZombieType::ZOMBIE_BOSS && aZombie->mRow - mRow == 0 && - aZombie->mZombiePhase != ZombiePhase::PHASE_ZOMBIE_MOWERED && !aZombie->IsTangleKelpTarget() && - aZombie->EffectedByDamage( - GetBit(DamageRangeFlags::DAMAGES_GROUND) | GetBit(DamageRangeFlags::DAMAGES_SUBMERGED) | - GetBit(DamageRangeFlags::DAMAGES_FLYING) | GetBit(DamageRangeFlags::DAMAGES_DOG) | - GetBit(DamageRangeFlags::DAMAGES_OFF_GROUND) | GetBit(DamageRangeFlags::DAMAGES_DYING) | - GetBit(DamageRangeFlags::DAMAGES_UNDERGROUND))) + aZombie->mZombiePhase != ZombiePhase::PHASE_ZOMBIE_MOWERED && !aZombie->IsTangleKelpTarget() && + aZombie->EffectedByDamage( + GetBit(DamageRangeFlags::DAMAGES_GROUND) | GetBit(DamageRangeFlags::DAMAGES_SUBMERGED) | + GetBit(DamageRangeFlags::DAMAGES_FLYING) | GetBit(DamageRangeFlags::DAMAGES_DOG) | + GetBit(DamageRangeFlags::DAMAGES_OFF_GROUND) | GetBit(DamageRangeFlags::DAMAGES_DYING) | + GetBit(DamageRangeFlags::DAMAGES_UNDERGROUND))) { Rect aZombieRect = aZombie->GetZombieRect(); int aOverlap = GetRectOverlap(aAttackRect, aZombieRect); if (aOverlap > (aZombie->mZombieType == ZombieType::ZOMBIE_BALLOON ? 20 : 0)) { if (mMowerState != LawnMowerState::MOWER_READY || - (aZombie->mZombieType != ZombieType::ZOMBIE_BUNGEE && aZombie->mHasHead)) + (aZombie->mZombieType != ZombieType::ZOMBIE_BUNGEE && aZombie->mHasHead)) { MowZombie(aZombie); } @@ -243,10 +243,10 @@ void LawnMower::Update() UpdatePool(); } if (mMowerType == LawnMowerType::LAWNMOWER_LAWN && mBoard->mPlantRow[mRow] == PlantRowType::PLANTROW_POOL && - mPosX > 50.0f) + mPosX > 50.0f) { Reanimation *aSplashReanim = - mApp->AddReanimation(mPosX, mPosY + 25.0f, mRenderOrder + 1, ReanimationType::REANIM_SPLASH); + mApp->AddReanimation(mPosX, mPosY + 25.0f, mRenderOrder + 1, ReanimationType::REANIM_SPLASH); aSplashReanim->OverrideScale(1.2f, 0.8f); mApp->AddTodParticle(mPosX + 50.0f, mPosY + 67.0f, mRenderOrder + 1, ParticleEffect::PARTICLE_PLANTING_POOL); mApp->PlaySample(SOUND_ZOMBIE_ENTERING_WATER); @@ -267,8 +267,8 @@ void LawnMower::Draw(Graphics *g) return; if (mMowerHeight != MowerHeight::MOWER_HEIGHT_UP_TO_LAND && - mMowerHeight != MowerHeight::MOWER_HEIGHT_DOWN_TO_POOL && mMowerHeight != MowerHeight::MOWER_HEIGHT_IN_POOL && - mMowerState != LawnMowerState::MOWER_SQUISHED) + mMowerHeight != MowerHeight::MOWER_HEIGHT_DOWN_TO_POOL && mMowerHeight != MowerHeight::MOWER_HEIGHT_IN_POOL && + mMowerState != LawnMowerState::MOWER_SQUISHED) { int aShadowType = 0; float aScaleX = 1.0f; @@ -322,7 +322,7 @@ void LawnMower::Draw(Graphics *g) } if (mMowerHeight == MowerHeight::MOWER_HEIGHT_UP_TO_LAND || - mMowerHeight == MowerHeight::MOWER_HEIGHT_DOWN_TO_POOL) + mMowerHeight == MowerHeight::MOWER_HEIGHT_DOWN_TO_POOL) { aMowerGraphics.SetClipRect(-50, -50, 150, 132 + mAltitude); } diff --git a/src/Lawn/MessageWidget.cpp b/src/Lawn/MessageWidget.cpp index 60b8a8a..fcb047d 100644 --- a/src/Lawn/MessageWidget.cpp +++ b/src/Lawn/MessageWidget.cpp @@ -157,7 +157,7 @@ void MessageWidget::LayoutReanimText() // calculate line widths and codepoint count size_t aCodepointCount = 0; - float aLineWidth[MAX_REANIM_LINES] = {0.}; + float aLineWidth[MAX_REANIM_LINES] = { 0. }; { int aCurLine = 0; SexyString aLine; @@ -255,7 +255,7 @@ void MessageWidget::Update() else { aTextReanim->mAnimRate = TodAnimateCurveFloat(0, 50, (mDisplayTime - mDuration) * aTextSpeed - aPos, - 0.0f, 40.0f, TodCurves::CURVE_LINEAR); + 0.0f, 40.0f, TodCurves::CURVE_LINEAR); } } else @@ -265,7 +265,7 @@ void MessageWidget::Update() aTextReanim->PlayReanim("anim_leave", ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD, 0, 0.0f); } aTextReanim->mAnimRate = TodAnimateCurveFloat(0, 50, (mSlideOffTime - mDuration) * aTextSpeed - aPos, 0.0f, - 40.0f, TodCurves::CURVE_LINEAR); + 40.0f, TodCurves::CURVE_LINEAR); } aTextReanim->Update(); @@ -452,7 +452,7 @@ void MessageWidget::Draw(Graphics *g) if (aMinAlpha != 255) { aColor.mAlpha = - TodAnimateCurve(75, 0, mApp->mAppCounter % 75, aMinAlpha, 255, TodCurves::CURVE_BOUNCE_SLOW_MIDDLE); + TodAnimateCurve(75, 0, mApp->mAppCounter % 75, aMinAlpha, 255, TodCurves::CURVE_BOUNCE_SLOW_MIDDLE); aOutlineColor.mAlpha = aColor.mAlpha; } if (aFadeOut) @@ -470,7 +470,7 @@ void MessageWidget::Draw(Graphics *g) aRect.mY += aTextOffsetY; TodDrawStringWrapped(g, mLabel.data(), aRect, aFont, aColor, - DrawStringJustification::DS_ALIGN_CENTER_VERTICAL_MIDDLE); + DrawStringJustification::DS_ALIGN_CENTER_VERTICAL_MIDDLE); } else { @@ -479,7 +479,7 @@ void MessageWidget::Draw(Graphics *g) if (aOutlineFont) { TodDrawStringWrapped(g, aLabelStr, aRect, aOutlineFont, aOutlineColor, - DrawStringJustification::DS_ALIGN_CENTER); + DrawStringJustification::DS_ALIGN_CENTER); } TodDrawStringWrapped(g, aLabelStr, aRect, aFont, aColor, DrawStringJustification::DS_ALIGN_CENTER); } @@ -490,7 +490,7 @@ void MessageWidget::Draw(Graphics *g) if (mApp->IsSurvivalMode() && mApp->mBoard->mChallenge->mSurvivalStage > 0) { int aFlags = mApp->mBoard->GetNumWavesPerSurvivalStage() * mApp->mBoard->mChallenge->mSurvivalStage / - mApp->mBoard->GetNumWavesPerFlag(); + mApp->mBoard->GetNumWavesPerFlag(); SexyString aFlagStr = mApp->Pluralize(aFlags, "[ONE_FLAG]", "[COUNT_FLAGS]"); SexyString aSubStr = TodReplaceString("[FLAGS_COMPLETED]", "{FLAGS}", aFlagStr); } @@ -498,7 +498,7 @@ void MessageWidget::Draw(Graphics *g) if (aSubStr.size() > 0) { TodDrawString(g, aSubStr, BOARD_WIDTH / 2 - mApp->mBoard->mX, aPosY + 26, Sexy::FONT_HOUSEOFTERROR16, - Color(224, 187, 62, aColor.mAlpha), DrawStringJustification::DS_ALIGN_CENTER); + Color(224, 187, 62, aColor.mAlpha), DrawStringJustification::DS_ALIGN_CENTER); } } } diff --git a/src/Lawn/Plant.cpp b/src/Lawn/Plant.cpp index dbeea01..b30d2ad 100644 --- a/src/Lawn/Plant.cpp +++ b/src/Lawn/Plant.cpp @@ -23,112 +23,60 @@ #include "../Sexy.TodLib/TodStringFile.h" PlantDefinition gPlantDefs[SeedType::NUM_SEED_TYPES] = { - {SeedType::SEED_PEASHOOTER, nullptr, ReanimationType::REANIM_PEASHOOTER, 0, 100, 750, - PlantSubClass::SUBCLASS_SHOOTER, 150, "PEASHOOTER"}, - {SeedType::SEED_SUNFLOWER, nullptr, ReanimationType::REANIM_SUNFLOWER, 1, 50, 750, PlantSubClass::SUBCLASS_NORMAL, - 2500, "SUNFLOWER"}, - {SeedType::SEED_CHERRYBOMB, nullptr, ReanimationType::REANIM_CHERRYBOMB, 3, 150, 5000, - PlantSubClass::SUBCLASS_NORMAL, 0, "CHERRY_BOMB"}, - {SeedType::SEED_WALLNUT, nullptr, ReanimationType::REANIM_WALLNUT, 2, 50, 3000, PlantSubClass::SUBCLASS_NORMAL, 0, - "WALL_NUT"}, - {SeedType::SEED_POTATOMINE, nullptr, ReanimationType::REANIM_POTATOMINE, 37, 25, 3000, - PlantSubClass::SUBCLASS_NORMAL, 0, "POTATO_MINE"}, - {SeedType::SEED_SNOWPEA, nullptr, ReanimationType::REANIM_SNOWPEA, 4, 175, 750, PlantSubClass::SUBCLASS_SHOOTER, - 150, "SNOW_PEA"}, - {SeedType::SEED_CHOMPER, nullptr, ReanimationType::REANIM_CHOMPER, 31, 150, 750, PlantSubClass::SUBCLASS_NORMAL, 0, - "CHOMPER"}, - {SeedType::SEED_REPEATER, nullptr, ReanimationType::REANIM_REPEATER, 5, 200, 750, PlantSubClass::SUBCLASS_SHOOTER, - 150, "REPEATER"}, - {SeedType::SEED_PUFFSHROOM, nullptr, ReanimationType::REANIM_PUFFSHROOM, 6, 0, 750, PlantSubClass::SUBCLASS_SHOOTER, - 150, "PUFF_SHROOM"}, - {SeedType::SEED_SUNSHROOM, nullptr, ReanimationType::REANIM_SUNSHROOM, 7, 25, 750, PlantSubClass::SUBCLASS_NORMAL, - 2500, "SUN_SHROOM"}, - {SeedType::SEED_FUMESHROOM, nullptr, ReanimationType::REANIM_FUMESHROOM, 9, 75, 750, - PlantSubClass::SUBCLASS_SHOOTER, 150, "FUME_SHROOM"}, - {SeedType::SEED_GRAVEBUSTER, nullptr, ReanimationType::REANIM_GRAVE_BUSTER, 40, 75, 750, - PlantSubClass::SUBCLASS_NORMAL, 0, "GRAVE_BUSTER"}, - {SeedType::SEED_HYPNOSHROOM, nullptr, ReanimationType::REANIM_HYPNOSHROOM, 10, 75, 3000, - PlantSubClass::SUBCLASS_NORMAL, 0, "HYPNO_SHROOM"}, - {SeedType::SEED_SCAREDYSHROOM, nullptr, ReanimationType::REANIM_SCRAREYSHROOM, 33, 25, 750, - PlantSubClass::SUBCLASS_SHOOTER, 150, "SCAREDY_SHROOM"}, - {SeedType::SEED_ICESHROOM, nullptr, ReanimationType::REANIM_ICESHROOM, 36, 75, 5000, PlantSubClass::SUBCLASS_NORMAL, - 0, "ICE_SHROOM"}, - {SeedType::SEED_DOOMSHROOM, nullptr, ReanimationType::REANIM_DOOMSHROOM, 20, 125, 5000, - PlantSubClass::SUBCLASS_NORMAL, 0, "DOOM_SHROOM"}, - {SeedType::SEED_LILYPAD, nullptr, ReanimationType::REANIM_LILYPAD, 19, 25, 750, PlantSubClass::SUBCLASS_NORMAL, 0, - "LILY_PAD"}, - {SeedType::SEED_SQUASH, nullptr, ReanimationType::REANIM_SQUASH, 21, 50, 3000, PlantSubClass::SUBCLASS_NORMAL, 0, - "SQUASH"}, - {SeedType::SEED_THREEPEATER, nullptr, ReanimationType::REANIM_THREEPEATER, 12, 325, 750, - PlantSubClass::SUBCLASS_SHOOTER, 150, "THREEPEATER"}, - {SeedType::SEED_TANGLEKELP, nullptr, ReanimationType::REANIM_TANGLEKELP, 17, 25, 3000, - PlantSubClass::SUBCLASS_NORMAL, 0, "TANGLE_KELP"}, - {SeedType::SEED_JALAPENO, nullptr, ReanimationType::REANIM_JALAPENO, 11, 125, 5000, PlantSubClass::SUBCLASS_NORMAL, - 0, "JALAPENO"}, - {SeedType::SEED_SPIKEWEED, nullptr, ReanimationType::REANIM_SPIKEWEED, 22, 100, 750, PlantSubClass::SUBCLASS_NORMAL, - 0, "SPIKEWEED"}, - {SeedType::SEED_TORCHWOOD, nullptr, ReanimationType::REANIM_TORCHWOOD, 29, 175, 750, PlantSubClass::SUBCLASS_NORMAL, - 0, "TORCHWOOD"}, - {SeedType::SEED_TALLNUT, nullptr, ReanimationType::REANIM_TALLNUT, 28, 125, 3000, PlantSubClass::SUBCLASS_NORMAL, 0, - "TALL_NUT"}, - {SeedType::SEED_SEASHROOM, nullptr, ReanimationType::REANIM_SEASHROOM, 39, 0, 3000, PlantSubClass::SUBCLASS_SHOOTER, - 150, "SEA_SHROOM"}, - {SeedType::SEED_PLANTERN, nullptr, ReanimationType::REANIM_PLANTERN, 38, 25, 3000, PlantSubClass::SUBCLASS_NORMAL, - 2500, "PLANTERN"}, - {SeedType::SEED_CACTUS, nullptr, ReanimationType::REANIM_CACTUS, 15, 125, 750, PlantSubClass::SUBCLASS_SHOOTER, 150, - "CACTUS"}, - {SeedType::SEED_BLOVER, nullptr, ReanimationType::REANIM_BLOVER, 18, 100, 750, PlantSubClass::SUBCLASS_NORMAL, 0, - "BLOVER"}, - {SeedType::SEED_SPLITPEA, nullptr, ReanimationType::REANIM_SPLITPEA, 32, 125, 750, PlantSubClass::SUBCLASS_SHOOTER, - 150, "SPLIT_PEA"}, - {SeedType::SEED_STARFRUIT, nullptr, ReanimationType::REANIM_STARFRUIT, 30, 125, 750, - PlantSubClass::SUBCLASS_SHOOTER, 150, "STARFRUIT"}, - {SeedType::SEED_PUMPKINSHELL, nullptr, ReanimationType::REANIM_PUMPKIN, 25, 125, 3000, - PlantSubClass::SUBCLASS_NORMAL, 0, "PUMPKIN"}, - {SeedType::SEED_MAGNETSHROOM, nullptr, ReanimationType::REANIM_MAGNETSHROOM, 35, 100, 750, - PlantSubClass::SUBCLASS_NORMAL, 0, "MAGNET_SHROOM"}, - {SeedType::SEED_CABBAGEPULT, nullptr, ReanimationType::REANIM_CABBAGEPULT, 13, 100, 750, - PlantSubClass::SUBCLASS_SHOOTER, 300, "CABBAGE_PULT"}, - {SeedType::SEED_FLOWERPOT, nullptr, ReanimationType::REANIM_FLOWER_POT, 33, 25, 750, PlantSubClass::SUBCLASS_NORMAL, - 0, "FLOWER_POT"}, - {SeedType::SEED_KERNELPULT, nullptr, ReanimationType::REANIM_KERNELPULT, 13, 100, 750, - PlantSubClass::SUBCLASS_SHOOTER, 300, "KERNEL_PULT"}, - {SeedType::SEED_INSTANT_COFFEE, nullptr, ReanimationType::REANIM_COFFEEBEAN, 33, 75, 750, - PlantSubClass::SUBCLASS_NORMAL, 0, "COFFEE_BEAN"}, - {SeedType::SEED_GARLIC, nullptr, ReanimationType::REANIM_GARLIC, 8, 50, 750, PlantSubClass::SUBCLASS_NORMAL, 0, - "GARLIC"}, - {SeedType::SEED_UMBRELLA, nullptr, ReanimationType::REANIM_UMBRELLALEAF, 23, 100, 750, - PlantSubClass::SUBCLASS_NORMAL, 0, "UMBRELLA_LEAF"}, - {SeedType::SEED_MARIGOLD, nullptr, ReanimationType::REANIM_MARIGOLD, 24, 50, 3000, PlantSubClass::SUBCLASS_NORMAL, - 2500, "MARIGOLD"}, - {SeedType::SEED_MELONPULT, nullptr, ReanimationType::REANIM_MELONPULT, 14, 300, 750, - PlantSubClass::SUBCLASS_SHOOTER, 300, "MELON_PULT"}, - {SeedType::SEED_GATLINGPEA, nullptr, ReanimationType::REANIM_GATLINGPEA, 5, 250, 5000, - PlantSubClass::SUBCLASS_SHOOTER, 150, "GATLING_PEA"}, - {SeedType::SEED_TWINSUNFLOWER, nullptr, ReanimationType::REANIM_TWIN_SUNFLOWER, 1, 150, 5000, - PlantSubClass::SUBCLASS_NORMAL, 2500, "TWIN_SUNFLOWER"}, - {SeedType::SEED_GLOOMSHROOM, nullptr, ReanimationType::REANIM_GLOOMSHROOM, 27, 150, 5000, - PlantSubClass::SUBCLASS_SHOOTER, 200, "GLOOM_SHROOM"}, - {SeedType::SEED_CATTAIL, nullptr, ReanimationType::REANIM_CATTAIL, 27, 225, 5000, PlantSubClass::SUBCLASS_SHOOTER, - 150, "CATTAIL"}, - {SeedType::SEED_WINTERMELON, nullptr, ReanimationType::REANIM_WINTER_MELON, 27, 200, 5000, - PlantSubClass::SUBCLASS_SHOOTER, 300, "WINTER_MELON"}, - {SeedType::SEED_GOLD_MAGNET, nullptr, ReanimationType::REANIM_GOLD_MAGNET, 27, 50, 5000, - PlantSubClass::SUBCLASS_NORMAL, 0, "GOLD_MAGNET"}, - {SeedType::SEED_SPIKEROCK, nullptr, ReanimationType::REANIM_SPIKEROCK, 27, 125, 5000, - PlantSubClass::SUBCLASS_NORMAL, 0, "SPIKEROCK"}, - {SeedType::SEED_COBCANNON, nullptr, ReanimationType::REANIM_COBCANNON, 16, 500, 5000, - PlantSubClass::SUBCLASS_NORMAL, 600, "COB_CANNON"}, - {SeedType::SEED_IMITATER, nullptr, ReanimationType::REANIM_IMITATER, 33, 0, 750, PlantSubClass::SUBCLASS_NORMAL, 0, - "IMITATER"}, - {SeedType::SEED_EXPLODE_O_NUT, nullptr, ReanimationType::REANIM_WALLNUT, 2, 0, 3000, PlantSubClass::SUBCLASS_NORMAL, - 0, "EXPLODE_O_NUT"}, - {SeedType::SEED_GIANT_WALLNUT, nullptr, ReanimationType::REANIM_WALLNUT, 2, 0, 3000, PlantSubClass::SUBCLASS_NORMAL, - 0, "GIANT_WALLNUT"}, - {SeedType::SEED_SPROUT, nullptr, ReanimationType::REANIM_ZENGARDEN_SPROUT, 33, 0, 3000, - PlantSubClass::SUBCLASS_NORMAL, 0, "SPROUT"}, - {SeedType::SEED_LEFTPEATER, nullptr, ReanimationType::REANIM_REPEATER, 5, 200, 750, PlantSubClass::SUBCLASS_SHOOTER, - 150, "REPEATER"}}; + { SeedType::SEED_PEASHOOTER, nullptr, ReanimationType::REANIM_PEASHOOTER, 0, 100, 750, PlantSubClass::SUBCLASS_SHOOTER, 150, "PEASHOOTER" }, + { SeedType::SEED_SUNFLOWER, nullptr, ReanimationType::REANIM_SUNFLOWER, 1, 50, 750, PlantSubClass::SUBCLASS_NORMAL, 2500, "SUNFLOWER" }, + { SeedType::SEED_CHERRYBOMB, nullptr, ReanimationType::REANIM_CHERRYBOMB, 3, 150, 5000, PlantSubClass::SUBCLASS_NORMAL, 0, "CHERRY_BOMB" }, + { SeedType::SEED_WALLNUT, nullptr, ReanimationType::REANIM_WALLNUT, 2, 50, 3000, PlantSubClass::SUBCLASS_NORMAL, 0, "WALL_NUT" }, + { SeedType::SEED_POTATOMINE, nullptr, ReanimationType::REANIM_POTATOMINE, 37, 25, 3000, PlantSubClass::SUBCLASS_NORMAL, 0, "POTATO_MINE" }, + { SeedType::SEED_SNOWPEA, nullptr, ReanimationType::REANIM_SNOWPEA, 4, 175, 750, PlantSubClass::SUBCLASS_SHOOTER, 150, "SNOW_PEA" }, + { SeedType::SEED_CHOMPER, nullptr, ReanimationType::REANIM_CHOMPER, 31, 150, 750, PlantSubClass::SUBCLASS_NORMAL, 0, "CHOMPER" }, + { SeedType::SEED_REPEATER, nullptr, ReanimationType::REANIM_REPEATER, 5, 200, 750, PlantSubClass::SUBCLASS_SHOOTER, 150, "REPEATER" }, + { SeedType::SEED_PUFFSHROOM, nullptr, ReanimationType::REANIM_PUFFSHROOM, 6, 0, 750, PlantSubClass::SUBCLASS_SHOOTER, 150, "PUFF_SHROOM" }, + { SeedType::SEED_SUNSHROOM, nullptr, ReanimationType::REANIM_SUNSHROOM, 7, 25, 750, PlantSubClass::SUBCLASS_NORMAL, 2500, "SUN_SHROOM" }, + { SeedType::SEED_FUMESHROOM, nullptr, ReanimationType::REANIM_FUMESHROOM, 9, 75, 750, PlantSubClass::SUBCLASS_SHOOTER, 150, "FUME_SHROOM" }, + { SeedType::SEED_GRAVEBUSTER, nullptr, ReanimationType::REANIM_GRAVE_BUSTER, 40, 75, 750, PlantSubClass::SUBCLASS_NORMAL, 0, "GRAVE_BUSTER" }, + { SeedType::SEED_HYPNOSHROOM, nullptr, ReanimationType::REANIM_HYPNOSHROOM, 10, 75, 3000, PlantSubClass::SUBCLASS_NORMAL, 0, "HYPNO_SHROOM" }, + { SeedType::SEED_SCAREDYSHROOM, nullptr, ReanimationType::REANIM_SCRAREYSHROOM, 33, 25, 750, PlantSubClass::SUBCLASS_SHOOTER, 150, "SCAREDY_SHROOM" }, + { SeedType::SEED_ICESHROOM, nullptr, ReanimationType::REANIM_ICESHROOM, 36, 75, 5000, PlantSubClass::SUBCLASS_NORMAL, 0, "ICE_SHROOM" }, + { SeedType::SEED_DOOMSHROOM, nullptr, ReanimationType::REANIM_DOOMSHROOM, 20, 125, 5000, PlantSubClass::SUBCLASS_NORMAL, 0, "DOOM_SHROOM" }, + { SeedType::SEED_LILYPAD, nullptr, ReanimationType::REANIM_LILYPAD, 19, 25, 750, PlantSubClass::SUBCLASS_NORMAL, 0, "LILY_PAD" }, + { SeedType::SEED_SQUASH, nullptr, ReanimationType::REANIM_SQUASH, 21, 50, 3000, PlantSubClass::SUBCLASS_NORMAL, 0, "SQUASH" }, + { SeedType::SEED_THREEPEATER, nullptr, ReanimationType::REANIM_THREEPEATER, 12, 325, 750, PlantSubClass::SUBCLASS_SHOOTER, 150, "THREEPEATER" }, + { SeedType::SEED_TANGLEKELP, nullptr, ReanimationType::REANIM_TANGLEKELP, 17, 25, 3000, PlantSubClass::SUBCLASS_NORMAL, 0, "TANGLE_KELP" }, + { SeedType::SEED_JALAPENO, nullptr, ReanimationType::REANIM_JALAPENO, 11, 125, 5000, PlantSubClass::SUBCLASS_NORMAL, 0, "JALAPENO" }, + { SeedType::SEED_SPIKEWEED, nullptr, ReanimationType::REANIM_SPIKEWEED, 22, 100, 750, PlantSubClass::SUBCLASS_NORMAL, 0, "SPIKEWEED" }, + { SeedType::SEED_TORCHWOOD, nullptr, ReanimationType::REANIM_TORCHWOOD, 29, 175, 750, PlantSubClass::SUBCLASS_NORMAL, 0, "TORCHWOOD" }, + { SeedType::SEED_TALLNUT, nullptr, ReanimationType::REANIM_TALLNUT, 28, 125, 3000, PlantSubClass::SUBCLASS_NORMAL, 0, "TALL_NUT" }, + { SeedType::SEED_SEASHROOM, nullptr, ReanimationType::REANIM_SEASHROOM, 39, 0, 3000, PlantSubClass::SUBCLASS_SHOOTER, 150, "SEA_SHROOM" }, + { SeedType::SEED_PLANTERN, nullptr, ReanimationType::REANIM_PLANTERN, 38, 25, 3000, PlantSubClass::SUBCLASS_NORMAL, 2500, "PLANTERN" }, + { SeedType::SEED_CACTUS, nullptr, ReanimationType::REANIM_CACTUS, 15, 125, 750, PlantSubClass::SUBCLASS_SHOOTER, 150, "CACTUS" }, + { SeedType::SEED_BLOVER, nullptr, ReanimationType::REANIM_BLOVER, 18, 100, 750, PlantSubClass::SUBCLASS_NORMAL, 0, "BLOVER" }, + { SeedType::SEED_SPLITPEA, nullptr, ReanimationType::REANIM_SPLITPEA, 32, 125, 750, PlantSubClass::SUBCLASS_SHOOTER, 150, "SPLIT_PEA" }, + { SeedType::SEED_STARFRUIT, nullptr, ReanimationType::REANIM_STARFRUIT, 30, 125, 750, PlantSubClass::SUBCLASS_SHOOTER, 150, "STARFRUIT" }, + { SeedType::SEED_PUMPKINSHELL, nullptr, ReanimationType::REANIM_PUMPKIN, 25, 125, 3000, PlantSubClass::SUBCLASS_NORMAL, 0, "PUMPKIN" }, + { SeedType::SEED_MAGNETSHROOM, nullptr, ReanimationType::REANIM_MAGNETSHROOM, 35, 100, 750, PlantSubClass::SUBCLASS_NORMAL, 0, "MAGNET_SHROOM" }, + { SeedType::SEED_CABBAGEPULT, nullptr, ReanimationType::REANIM_CABBAGEPULT, 13, 100, 750, PlantSubClass::SUBCLASS_SHOOTER, 300, "CABBAGE_PULT" }, + { SeedType::SEED_FLOWERPOT, nullptr, ReanimationType::REANIM_FLOWER_POT, 33, 25, 750, PlantSubClass::SUBCLASS_NORMAL, 0, "FLOWER_POT" }, + { SeedType::SEED_KERNELPULT, nullptr, ReanimationType::REANIM_KERNELPULT, 13, 100, 750, PlantSubClass::SUBCLASS_SHOOTER, 300, "KERNEL_PULT" }, + { SeedType::SEED_INSTANT_COFFEE, nullptr, ReanimationType::REANIM_COFFEEBEAN, 33, 75, 750, PlantSubClass::SUBCLASS_NORMAL, 0, "COFFEE_BEAN" }, + { SeedType::SEED_GARLIC, nullptr, ReanimationType::REANIM_GARLIC, 8, 50, 750, PlantSubClass::SUBCLASS_NORMAL, 0, "GARLIC" }, + { SeedType::SEED_UMBRELLA, nullptr, ReanimationType::REANIM_UMBRELLALEAF, 23, 100, 750, PlantSubClass::SUBCLASS_NORMAL, 0, "UMBRELLA_LEAF" }, + { SeedType::SEED_MARIGOLD, nullptr, ReanimationType::REANIM_MARIGOLD, 24, 50, 3000, PlantSubClass::SUBCLASS_NORMAL, 2500, "MARIGOLD" }, + { SeedType::SEED_MELONPULT, nullptr, ReanimationType::REANIM_MELONPULT, 14, 300, 750, PlantSubClass::SUBCLASS_SHOOTER, 300, "MELON_PULT" }, + { SeedType::SEED_GATLINGPEA, nullptr, ReanimationType::REANIM_GATLINGPEA, 5, 250, 5000, PlantSubClass::SUBCLASS_SHOOTER, 150, "GATLING_PEA" }, + { SeedType::SEED_TWINSUNFLOWER, nullptr, ReanimationType::REANIM_TWIN_SUNFLOWER, 1, 150, 5000, PlantSubClass::SUBCLASS_NORMAL, 2500, "TWIN_SUNFLOWER" }, + { SeedType::SEED_GLOOMSHROOM, nullptr, ReanimationType::REANIM_GLOOMSHROOM, 27, 150, 5000, PlantSubClass::SUBCLASS_SHOOTER, 200, "GLOOM_SHROOM" }, + { SeedType::SEED_CATTAIL, nullptr, ReanimationType::REANIM_CATTAIL, 27, 225, 5000, PlantSubClass::SUBCLASS_SHOOTER, 150, "CATTAIL" }, + { SeedType::SEED_WINTERMELON, nullptr, ReanimationType::REANIM_WINTER_MELON, 27, 200, 5000, PlantSubClass::SUBCLASS_SHOOTER, 300, "WINTER_MELON" }, + { SeedType::SEED_GOLD_MAGNET, nullptr, ReanimationType::REANIM_GOLD_MAGNET, 27, 50, 5000, PlantSubClass::SUBCLASS_NORMAL, 0, "GOLD_MAGNET" }, + { SeedType::SEED_SPIKEROCK, nullptr, ReanimationType::REANIM_SPIKEROCK, 27, 125, 5000, PlantSubClass::SUBCLASS_NORMAL, 0, "SPIKEROCK" }, + { SeedType::SEED_COBCANNON, nullptr, ReanimationType::REANIM_COBCANNON, 16, 500, 5000, PlantSubClass::SUBCLASS_NORMAL, 600, "COB_CANNON" }, + { SeedType::SEED_IMITATER, nullptr, ReanimationType::REANIM_IMITATER, 33, 0, 750, PlantSubClass::SUBCLASS_NORMAL, 0, "IMITATER" }, + { SeedType::SEED_EXPLODE_O_NUT, nullptr, ReanimationType::REANIM_WALLNUT, 2, 0, 3000, PlantSubClass::SUBCLASS_NORMAL, 0, "EXPLODE_O_NUT" }, + { SeedType::SEED_GIANT_WALLNUT, nullptr, ReanimationType::REANIM_WALLNUT, 2, 0, 3000, PlantSubClass::SUBCLASS_NORMAL, 0, "GIANT_WALLNUT" }, + { SeedType::SEED_SPROUT, nullptr, ReanimationType::REANIM_ZENGARDEN_SPROUT, 33, 0, 3000, PlantSubClass::SUBCLASS_NORMAL, 0, "SPROUT" }, + { SeedType::SEED_LEFTPEATER, nullptr, ReanimationType::REANIM_REPEATER, 5, 200, 750, PlantSubClass::SUBCLASS_SHOOTER, 150, "REPEATER" } +}; Plant::Plant() { @@ -437,7 +385,7 @@ void Plant::PlantInitialize(int theGridX, int theGridY, SeedType theSeedType, Se if (!IsOnBoard() || mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) { AddAttachedParticle(mX + 40, mY + 40, (int)RenderLayer::RENDER_LAYER_FOG + 1, - ParticleEffect::PARTICLE_LANTERN_SHINE); + ParticleEffect::PARTICLE_LANTERN_SHINE); } if (IsInPlay()) { @@ -505,8 +453,8 @@ void Plant::PlantInitialize(int theGridX, int theGridY, SeedType theSeedType, Se } if ((mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BIG_TIME) && - (theSeedType == SeedType::SEED_WALLNUT || theSeedType == SeedType::SEED_SUNFLOWER || - theSeedType == SeedType::SEED_MARIGOLD)) + (theSeedType == SeedType::SEED_WALLNUT || theSeedType == SeedType::SEED_SUNFLOWER || + theSeedType == SeedType::SEED_MARIGOLD)) { mPlantHealth *= 2; } @@ -543,7 +491,7 @@ int Plant::CalcRenderOrder() anOrder = PLANT_ORDER::PLANT_ORDER_FLYER; } else if (aSeedType == SeedType::SEED_FLOWERPOT || - (aSeedType == SeedType::SEED_LILYPAD && mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN)) + (aSeedType == SeedType::SEED_LILYPAD && mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN)) { anOrder = PLANT_ORDER::PLANT_ORDER_LILYPAD; } @@ -569,7 +517,7 @@ void Plant::SetSleeping(bool theIsAsleep) aPosY -= 12.0f; Reanimation *aSleepReanim = - mApp->AddReanimation(aPosX, aPosY, mRenderOrder + 2, ReanimationType::REANIM_SLEEPING); + mApp->AddReanimation(aPosX, aPosY, mRenderOrder + 2, ReanimationType::REANIM_SLEEPING); aSleepReanim->mLoopType = ReanimLoopType::REANIM_LOOP; aSleepReanim->mAnimRate = RandRangeFloat(6.0f, 8.0f); aSleepReanim->mAnimTime = RandRangeFloat(0.0f, 0.9f); @@ -630,27 +578,27 @@ int Plant::GetDamageRangeFlags(PlantWeapon thePlantWeapon) { case SeedType::SEED_CACTUS: return thePlantWeapon == PlantWeapon::WEAPON_SECONDARY ? GetBit(DamageRangeFlags::DAMAGES_GROUND) - : GetBit(DamageRangeFlags::DAMAGES_FLYING); + : GetBit(DamageRangeFlags::DAMAGES_FLYING); case SeedType::SEED_CHERRYBOMB: case SeedType::SEED_JALAPENO: case SeedType::SEED_COBCANNON: case SeedType::SEED_DOOMSHROOM: return GetBit(DamageRangeFlags::DAMAGES_GROUND) | GetBit(DamageRangeFlags::DAMAGES_FLYING) | - GetBit(DamageRangeFlags::DAMAGES_DOG) | GetBit(DamageRangeFlags::DAMAGES_SUBMERGED) | - GetBit(DamageRangeFlags::DAMAGES_DYING) | GetBit(DamageRangeFlags::DAMAGES_UNDERGROUND) | - GetBit(DamageRangeFlags::DAMAGES_OFF_GROUND); + GetBit(DamageRangeFlags::DAMAGES_DOG) | GetBit(DamageRangeFlags::DAMAGES_SUBMERGED) | + GetBit(DamageRangeFlags::DAMAGES_DYING) | GetBit(DamageRangeFlags::DAMAGES_UNDERGROUND) | + GetBit(DamageRangeFlags::DAMAGES_OFF_GROUND); case SeedType::SEED_MELONPULT: case SeedType::SEED_CABBAGEPULT: case SeedType::SEED_KERNELPULT: case SeedType::SEED_WINTERMELON: return GetBit(DamageRangeFlags::DAMAGES_GROUND) | GetBit(DamageRangeFlags::DAMAGES_SUBMERGED) | - GetBit(DamageRangeFlags::DAMAGES_DOG); + GetBit(DamageRangeFlags::DAMAGES_DOG); case SeedType::SEED_POTATOMINE: return GetBit(DamageRangeFlags::DAMAGES_GROUND) | GetBit(DamageRangeFlags::DAMAGES_SUBMERGED) | - GetBit(DamageRangeFlags::DAMAGES_DOG) | GetBit(DamageRangeFlags::DAMAGES_UNDERGROUND); + GetBit(DamageRangeFlags::DAMAGES_DOG) | GetBit(DamageRangeFlags::DAMAGES_UNDERGROUND); case SeedType::SEED_SQUASH: return GetBit(DamageRangeFlags::DAMAGES_GROUND) | GetBit(DamageRangeFlags::DAMAGES_SUBMERGED) | - GetBit(DamageRangeFlags::DAMAGES_DOG); + GetBit(DamageRangeFlags::DAMAGES_DOG); case SeedType::SEED_PUFFSHROOM: case SeedType::SEED_SEASHROOM: case SeedType::SEED_FUMESHROOM: @@ -659,7 +607,7 @@ int Plant::GetDamageRangeFlags(PlantWeapon thePlantWeapon) return GetBit(DamageRangeFlags::DAMAGES_GROUND) | GetBit(DamageRangeFlags::DAMAGES_DOG); case SeedType::SEED_CATTAIL: return GetBit(DamageRangeFlags::DAMAGES_GROUND) | GetBit(DamageRangeFlags::DAMAGES_FLYING) | - GetBit(DamageRangeFlags::DAMAGES_DOG); + GetBit(DamageRangeFlags::DAMAGES_DOG); case SeedType::SEED_TANGLEKELP: return GetBit(DamageRangeFlags::DAMAGES_GROUND) | GetBit(DamageRangeFlags::DAMAGES_SUBMERGED); @@ -727,8 +675,8 @@ void Plant::DoRowAreaDamage(int theDamage, unsigned int theDamageFlags) { int aDamage = theDamage; if ((aZombie->mZombieType == ZombieType::ZOMBIE_ZAMBONI || - aZombie->mZombieType == ZombieType::ZOMBIE_CATAPULT) && - (TestBit(theDamageFlags, DamageFlags::DAMAGE_SPIKE))) + aZombie->mZombieType == ZombieType::ZOMBIE_CATAPULT) && + (TestBit(theDamageFlags, DamageFlags::DAMAGE_SPIKE))) { aDamage = 1800; @@ -790,7 +738,7 @@ bool Plant::FindTargetAndFire(int theRow, PlantWeapon thePlantWeapon) mShootingCounter = 33; if (mSeedType == SeedType::SEED_REPEATER || mSeedType == SeedType::SEED_SPLITPEA || - mSeedType == SeedType::SEED_LEFTPEATER) + mSeedType == SeedType::SEED_LEFTPEATER) { aHeadReanim->mAnimRate = 45.0f; mShootingCounter = 26; @@ -870,8 +818,8 @@ void Plant::LaunchThreepeater() int rowBelow = mRow + 1; if ((FindTargetZombie(mRow, PlantWeapon::WEAPON_PRIMARY)) || - (mBoard->RowCanHaveZombies(rowAbove) && FindTargetZombie(rowAbove, PlantWeapon::WEAPON_PRIMARY)) || - (mBoard->RowCanHaveZombies(rowBelow) && FindTargetZombie(rowBelow, PlantWeapon::WEAPON_PRIMARY))) + (mBoard->RowCanHaveZombies(rowAbove) && FindTargetZombie(rowAbove, PlantWeapon::WEAPON_PRIMARY)) || + (mBoard->RowCanHaveZombies(rowBelow) && FindTargetZombie(rowBelow, PlantWeapon::WEAPON_PRIMARY))) { Reanimation *aHeadReanim1 = mApp->ReanimationGet(mHeadReanimID); Reanimation *aHeadReanim2 = mApp->ReanimationGet(mHeadReanimID2); @@ -931,8 +879,8 @@ bool Plant::FindStarFruitTarget() aZombieRect.mX += 10; float aProjectileTime = Distance2D(aCenterStarX, aCenterStarY, aZombieRect.mX + aZombieRect.mWidth / 2, - aZombieRect.mY + aZombieRect.mHeight / 2) / - 3.33f; + aZombieRect.mY + aZombieRect.mHeight / 2) / + 3.33f; int aZombieHitX = aZombie->ZombieTargetLeadX(aProjectileTime) - aZombieRect.mWidth / 2; if ((aZombieHitX + aZombieRect.mWidth > aCenterStarX) && (aZombieHitX < aCenterStarX)) return true; @@ -975,7 +923,7 @@ void Plant::StarFruitFire() for (int i = 0; i < 5; i++) { Projectile *aProjectile = - mBoard->AddProjectile(mX + 25, mY + 25, mRenderOrder - 1, mRow, ProjectileType::PROJECTILE_STAR); + mBoard->AddProjectile(mX + 25, mY + 25, mRenderOrder - 1, mRow, ProjectileType::PROJECTILE_STAR); aProjectile->mDamageRangeFlags = GetDamageRangeFlags(PlantWeapon::WEAPON_PRIMARY); aProjectile->mMotionType = ProjectileMotion::MOTION_STAR; @@ -1065,13 +1013,13 @@ void Plant::UpdateShooter() bool Plant::MakesSun() { return mSeedType == SeedType::SEED_SUNFLOWER || mSeedType == SeedType::SEED_TWINSUNFLOWER || - mSeedType == SeedType::SEED_SUNSHROOM; + mSeedType == SeedType::SEED_SUNSHROOM; } void Plant::UpdateProductionPlant() { if (!IsInPlay() || mApp->IsIZombieLevel() || mApp->mGameMode == GameMode::GAMEMODE_UPSELL || - mApp->mGameMode == GameMode::GAMEMODE_INTRO) + mApp->mGameMode == GameMode::GAMEMODE_INTRO) return; if (mBoard->HasLevelAwardDropped()) @@ -1089,7 +1037,7 @@ void Plant::UpdateProductionPlant() } if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND && - mBoard->mChallenge->mChallengeState != ChallengeState::STATECHALLENGE_LAST_STAND_ONSLAUGHT) + mBoard->mChallenge->mChallengeState != ChallengeState::STATECHALLENGE_LAST_STAND_ONSLAUGHT) return; mLaunchCounter--; @@ -1126,7 +1074,7 @@ void Plant::UpdateProductionPlant() else if (mSeedType == SeedType::SEED_MARIGOLD) { mBoard->AddCoin(mX, mY, (Sexy::Rand(100) < 10) ? CoinType::COIN_GOLD : CoinType::COIN_SILVER, - CoinMotion::COIN_MOTION_COIN); + CoinMotion::COIN_MOTION_COIN); } if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BIG_TIME) @@ -1221,7 +1169,7 @@ void Plant::UpdatePotato() if (mStateCountdown == 0) { mApp->AddTodParticle(mX + mWidth / 2, mY + mHeight / 2, mRenderOrder, - ParticleEffect::PARTICLE_POTATO_MINE_RISE); + ParticleEffect::PARTICLE_POTATO_MINE_RISE); PlayBodyReanim("anim_rise", ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD, 20, 18.0f); mState = PlantState::STATE_POTATO_RISING; mApp->PlayFoley(FoleyType::FOLEY_DIRT_RISE); @@ -1235,7 +1183,7 @@ void Plant::UpdatePotato() PlayBodyReanim("anim_armed", ReanimLoopType::REANIM_LOOP, 0, aRate); Reanimation *aLightReanim = - mApp->AddReanimation(0.0f, 0.0f, mRenderOrder + 2, GetPlantDefinition(mSeedType).mReanimationType); + mApp->AddReanimation(0.0f, 0.0f, mRenderOrder + 2, GetPlantDefinition(mSeedType).mReanimationType); aLightReanim->mLoopType = ReanimLoopType::REANIM_LOOP; aLightReanim->mAnimRate = aRate - 2.0f; aLightReanim->SetFramesForLayer("anim_glow"); @@ -1261,7 +1209,7 @@ void Plant::UpdatePotato() if (aLightReanim) { aLightReanim->mFrameCount = - TodAnimateCurve(200, 50, DistanceToClosestZombie(), 10, 3, TodCurves::CURVE_LINEAR); + TodAnimateCurve(200, 50, DistanceToClosestZombie(), 10, 3, TodCurves::CURVE_LINEAR); } } } @@ -1292,7 +1240,7 @@ void Plant::UpdateTanglekelp() aVinesPosY = 37.0f; } Reanimation *aGrabReanim = - aZombie->AddAttachedReanim(aVinesPosX, aVinesPosY, ReanimationType::REANIM_TANGLEKELP); + aZombie->AddAttachedReanim(aVinesPosX, aVinesPosY, ReanimationType::REANIM_TANGLEKELP); if (aGrabReanim) { aGrabReanim->SetFramesForLayer("anim_grab"); @@ -1319,7 +1267,7 @@ void Plant::UpdateTanglekelp() { int aRenderPosition = Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_PARTICLE, mRow, 0); Reanimation *aSplashReanim = - mApp->AddReanimation(mX - 23, mY + 7, aRenderPosition, ReanimationType::REANIM_SPLASH); + mApp->AddReanimation(mX - 23, mY + 7, aRenderPosition, ReanimationType::REANIM_SPLASH); aSplashReanim->OverrideScale(1.3f, 1.3f); mApp->AddTodParticle(mX + 31, mY + 64, aRenderPosition, ParticleEffect::PARTICLE_PLANTING_POOL); @@ -1398,7 +1346,7 @@ void Plant::UpdateScaredyShroom() Rect aZombieRect = aZombie->GetZombieRect(); int aDiffY = (aZombie->mZombieType == ZombieType::ZOMBIE_BOSS) ? 0 : (aZombie->mRow - mRow); if (!aZombie->mMindControlled && !aZombie->IsDeadOrDying() && aDiffY <= 1 && aDiffY >= -1 && - GetCircleRectOverlap(mX, mY + 20.0f, 120, aZombieRect)) + GetCircleRectOverlap(mX, mY + 20.0f, 120, aZombieRect)) { aHasZombieNearby = true; break; @@ -1457,7 +1405,7 @@ void Plant::UpdateTorchwood() while (mBoard->IterateProjectiles(aProjectile)) { if ((aProjectile->mRow == mRow) && (aProjectile->mProjectileType == ProjectileType::PROJECTILE_PEA || - aProjectile->mProjectileType == ProjectileType::PROJECTILE_SNOWPEA)) + aProjectile->mProjectileType == ProjectileType::PROJECTILE_SNOWPEA)) { Rect aProjectileRect = aProjectile->GetProjectileRect(); if (GetRectOverlap(aAttackRect, aProjectileRect) >= 10) @@ -1484,14 +1432,14 @@ void Plant::DoSquashDamage() while (mBoard->IterateZombies(aZombie)) { if ((aZombie->mRow == mRow || aZombie->mZombieType == ZombieType::ZOMBIE_BOSS) && - aZombie->EffectedByDamage(aDamageRangeFlags)) + aZombie->EffectedByDamage(aDamageRangeFlags)) { Rect aZombieRect = aZombie->GetZombieRect(); if (GetRectOverlap(aAttackRect, aZombieRect) > - (aZombie->mZombieType == ZombieType::ZOMBIE_FOOTBALL ? -20 : 0)) + (aZombie->mZombieType == ZombieType::ZOMBIE_FOOTBALL ? -20 : 0)) { aZombie->TakeDamage(1800, GetBit(DamageFlags::DAMAGE_HITS_SHIELD_AND_BODY) | - GetBit(DamageFlags::DAMAGE_DOESNT_LEAVE_BODY)); + GetBit(DamageFlags::DAMAGE_DOESNT_LEAVE_BODY)); } } } @@ -1509,27 +1457,27 @@ Zombie *Plant::FindSquashTarget() while (mBoard->IterateZombies(aZombie)) { if ((aZombie->mRow == mRow || aZombie->mZombieType == ZombieType::ZOMBIE_BOSS) && aZombie->mHasHead && - !aZombie->IsTangleKelpTarget() && aZombie->EffectedByDamage(aDamageRangeFlags)) + !aZombie->IsTangleKelpTarget() && aZombie->EffectedByDamage(aDamageRangeFlags)) { Rect aZombieRect = aZombie->GetZombieRect(); if ((aZombie->mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_PRE_VAULT && aZombieRect.mX < mX + 20) || - (aZombie->mZombiePhase != ZombiePhase::PHASE_POLEVAULTER_PRE_VAULT && - aZombie->mZombiePhase != ZombiePhase::PHASE_POLEVAULTER_IN_VAULT && - aZombie->mZombiePhase != ZombiePhase::PHASE_SNORKEL_INTO_POOL && - aZombie->mZombiePhase != ZombiePhase::PHASE_DOLPHIN_INTO_POOL && - aZombie->mZombiePhase != ZombiePhase::PHASE_DOLPHIN_RIDING && - aZombie->mZombiePhase != ZombiePhase::PHASE_DOLPHIN_IN_JUMP && !aZombie->IsBobsledTeamWithSled())) + (aZombie->mZombiePhase != ZombiePhase::PHASE_POLEVAULTER_PRE_VAULT && + aZombie->mZombiePhase != ZombiePhase::PHASE_POLEVAULTER_IN_VAULT && + aZombie->mZombiePhase != ZombiePhase::PHASE_SNORKEL_INTO_POOL && + aZombie->mZombiePhase != ZombiePhase::PHASE_DOLPHIN_INTO_POOL && + aZombie->mZombiePhase != ZombiePhase::PHASE_DOLPHIN_RIDING && + aZombie->mZombiePhase != ZombiePhase::PHASE_DOLPHIN_IN_JUMP && !aZombie->IsBobsledTeamWithSled())) { int aRange = -GetRectOverlap(aAttackRect, aZombieRect); if (aRange <= (aZombie->mIsEating ? 110 : 70)) { int aPlantX = aAttackRect.mX; if (aZombie->mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_POST_VAULT || - aZombie->mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_PRE_VAULT || - aZombie->mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING_IN_POOL || - aZombie->mZombieType == ZombieType::ZOMBIE_IMP || - aZombie->mZombieType == ZombieType::ZOMBIE_FOOTBALL || mApp->IsScaryPotterLevel()) + aZombie->mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_PRE_VAULT || + aZombie->mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING_IN_POOL || + aZombie->mZombieType == ZombieType::ZOMBIE_IMP || + aZombie->mZombieType == ZombieType::ZOMBIE_FOOTBALL || mApp->IsScaryPotterLevel()) { aPlantX = aAttackRect.mX - 60; } @@ -1568,7 +1516,7 @@ void Plant::UpdateSquash() mState = PlantState::STATE_SQUASH_LOOK; mStateCountdown = 80; PlayBodyReanim(mTargetX < mX ? "anim_lookleft" : "anim_lookright", - ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD, 10, 24.0f); + ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD, 10, 24.0f); mApp->PlayFoley(FoleyType::FOLEY_SQUASH_HMM); } } @@ -1604,9 +1552,9 @@ void Plant::UpdateSquash() if (mState == PlantState::STATE_SQUASH_RISING) { mX = TodAnimateCurve(50, 20, mStateCountdown, mBoard->GridToPixelX(mPlantCol, mStartRow), mTargetX, - TodCurves::CURVE_EASE_IN_OUT); + TodCurves::CURVE_EASE_IN_OUT); mY = TodAnimateCurve(50, 20, mStateCountdown, mBoard->GridToPixelY(mPlantCol, mStartRow), aDestY - 120, - TodCurves::CURVE_EASE_IN_OUT); + TodCurves::CURVE_EASE_IN_OUT); if (mStateCountdown == 0) { @@ -1643,7 +1591,7 @@ void Plant::UpdateSquash() mApp->PlayFoley(FoleyType::FOLEY_THUMP); float aOffsetY = mBoard->StageHasRoof() ? 69.0f : 80.0f; mApp->AddTodParticle(mX + 40, mY + aOffsetY, mRenderOrder + 4, - ParticleEffect::PARTICLE_DUST_SQUASH); + ParticleEffect::PARTICLE_DUST_SQUASH); } } } @@ -1853,8 +1801,8 @@ void Plant::UpdateChomper() if (aZombie) { if (aZombie->mZombieType == ZombieType::ZOMBIE_GARGANTUAR || - aZombie->mZombieType == ZombieType::ZOMBIE_REDEYE_GARGANTUAR || - aZombie->mZombieType == ZombieType::ZOMBIE_BOSS) + aZombie->mZombieType == ZombieType::ZOMBIE_REDEYE_GARGANTUAR || + aZombie->mZombieType == ZombieType::ZOMBIE_BOSS) { doBite = true; } @@ -1867,7 +1815,7 @@ void Plant::UpdateChomper() else if (!aZombie->IsImmobilizied()) { if (aZombie->IsBouncingPogo() || aZombie->mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT || - aZombie->mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_PRE_VAULT) + aZombie->mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_PRE_VAULT) { doMiss = true; } @@ -1913,7 +1861,7 @@ void Plant::UpdateChomper() } } else if ((mState == PlantState::STATE_CHOMPER_SWALLOWING || mState == PlantState::STATE_CHOMPER_BITING_MISSED) && - aBodyReanim->mLoopCount > 0) + aBodyReanim->mLoopCount > 0) { PlayIdleAnim(aBodyReanim->mDefinition->mFPS); mState = PlantState::STATE_READY; @@ -2023,7 +1971,7 @@ void Plant::MagnetShroomAttactItem(Zombie *theZombie) aMagnetItem->mDestOffsetX = RandRangeFloat(-10.0f, 10.0f) + 30.0f; aMagnetItem->mDestOffsetY = RandRangeFloat(-10.0f, 10.0f); aMagnetItem->mItemType = - theZombie->mHasArm ? MagnetItemType::MAGNET_ITEM_POGO_1 : MagnetItemType::MAGNET_ITEM_POGO_3; + theZombie->mHasArm ? MagnetItemType::MAGNET_ITEM_POGO_1 : MagnetItemType::MAGNET_ITEM_POGO_3; } else if (theZombie->mZombiePhase == ZombiePhase::PHASE_JACK_IN_THE_BOX_RUNNING) { @@ -2076,7 +2024,7 @@ bool Plant::DrawMagnetItemsOnTop() if (aMagnetItem->mItemType != MagnetItemType::MAGNET_ITEM_NONE) { SexyVector2 aVectorToPlant(mX + aMagnetItem->mDestOffsetX - aMagnetItem->mPosX, - mY + aMagnetItem->mDestOffsetY - aMagnetItem->mPosY); + mY + aMagnetItem->mDestOffsetY - aMagnetItem->mPosY); if (aVectorToPlant.Magnitude() > 20.0f) { return true; @@ -2097,7 +2045,7 @@ void Plant::UpdateMagnetShroom() if (aMagnetItem->mItemType != MagnetItemType::MAGNET_ITEM_NONE) { SexyVector2 aVectorToPlant(mX + aMagnetItem->mDestOffsetX - aMagnetItem->mPosX, - mY + aMagnetItem->mDestOffsetY - aMagnetItem->mPosY); + mY + aMagnetItem->mDestOffsetY - aMagnetItem->mPosY); if (aVectorToPlant.Magnitude() > 20.0f) { aMagnetItem->mPosX += aVectorToPlant.x * 0.05f; @@ -2156,7 +2104,7 @@ void Plant::UpdateMagnetShroom() continue; if (aZombie->mZombieHeight != ZombieHeight::HEIGHT_ZOMBIE_NORMAL || - aZombie->mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE) + aZombie->mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE) continue; if (aZombie->IsDeadOrDying()) @@ -2166,18 +2114,18 @@ void Plant::UpdateMagnetShroom() continue; if (aZombie->mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING || - aZombie->mZombiePhase == ZombiePhase::PHASE_DIGGER_STUNNED || - aZombie->mZombiePhase == ZombiePhase::PHASE_DIGGER_WALKING || - aZombie->mZombieType == ZombieType::ZOMBIE_POGO) + aZombie->mZombiePhase == ZombiePhase::PHASE_DIGGER_STUNNED || + aZombie->mZombiePhase == ZombiePhase::PHASE_DIGGER_WALKING || + aZombie->mZombieType == ZombieType::ZOMBIE_POGO) { if (!aZombie->mHasObject) continue; } else if (!(aZombie->mHelmType == HelmType::HELMTYPE_PAIL || - aZombie->mHelmType == HelmType::HELMTYPE_FOOTBALL || - aZombie->mShieldType == ShieldType::SHIELDTYPE_DOOR || - aZombie->mShieldType == ShieldType::SHIELDTYPE_LADDER || - aZombie->mZombiePhase == ZombiePhase::PHASE_JACK_IN_THE_BOX_RUNNING)) + aZombie->mHelmType == HelmType::HELMTYPE_FOOTBALL || + aZombie->mShieldType == ShieldType::SHIELDTYPE_DOOR || + aZombie->mShieldType == ShieldType::SHIELDTYPE_LADDER || + aZombie->mZombiePhase == ZombiePhase::PHASE_JACK_IN_THE_BOX_RUNNING)) continue; int aRadius = aZombie->mIsEating ? 320 : 270; @@ -2253,10 +2201,10 @@ Coin *Plant::FindGoldMagnetTarget() while (mBoard->IterateCoins(aCoin)) { if (aCoin->IsMoney() && aCoin->mCoinMotion != CoinMotion::COIN_MOTION_FROM_PRESENT && - !aCoin->mIsBeingCollected && aCoin->mCoinAge >= 50) + !aCoin->mIsBeingCollected && aCoin->mCoinAge >= 50) { float aDistance = Distance2D(mX + mWidth / 2, mY + mHeight / 2, aCoin->mPosX + aCoin->mWidth / 2, - aCoin->mPosY + aCoin->mHeight / 2); + aCoin->mPosY + aCoin->mHeight / 2); if (aClosestCoin == nullptr || aDistance < aClosestDistance) { aClosestCoin = aCoin; @@ -2317,7 +2265,7 @@ bool Plant::IsAGoldMagnetAboutToSuck() while (mBoard->IteratePlants(aPlant)) { if (!aPlant->NotOnGround() && aPlant->mSeedType == SeedType::SEED_GOLD_MAGNET && - aPlant->mState == PlantState::STATE_MAGNETSHROOM_SUCKING) + aPlant->mState == PlantState::STATE_MAGNETSHROOM_SUCKING) { Reanimation *aBodyReanim = mApp->ReanimationGet(aPlant->mBodyReanimID); if (aBodyReanim->mAnimTime < 0.5f) @@ -2341,7 +2289,7 @@ void Plant::UpdateGoldMagnetShroom() if (aMagnetItem->mItemType != MagnetItemType::MAGNET_ITEM_NONE) { SexyVector2 aVectorToPlant(mX + aMagnetItem->mDestOffsetX - aMagnetItem->mPosX, - mY + aMagnetItem->mDestOffsetY - aMagnetItem->mPosY); + mY + aMagnetItem->mDestOffsetY - aMagnetItem->mPosY); float aDistance = aVectorToPlant.Magnitude(); if (aDistance < 20.0f) { @@ -2430,7 +2378,7 @@ void Plant::Squish() if (!mIsAsleep) { if (mSeedType == SeedType::SEED_CHERRYBOMB || mSeedType == SeedType::SEED_JALAPENO || - mSeedType == SeedType::SEED_DOOMSHROOM || mSeedType == SeedType::SEED_ICESHROOM) + mSeedType == SeedType::SEED_DOOMSHROOM || mSeedType == SeedType::SEED_ICESHROOM) { DoSpecial(); return; @@ -2560,7 +2508,7 @@ void Plant::UpdateBowling() } if ((!mApp->IsFirstTimeAdventureMode() || mApp->mPlayerInfo->GetLevel() > 10) && - mSeedType == SeedType::SEED_WALLNUT) + mSeedType == SeedType::SEED_WALLNUT) { mLaunchCounter++; if (mLaunchCounter == 2) @@ -2799,7 +2747,7 @@ void Plant::UpdateReanimColor() aColorOverride = GetFlashingColor(mBoard->mMainCounter, 90); } else if (aSeedType == SeedType::SEED_COBCANNON && mSeedType == SeedType::SEED_KERNELPULT && - mBoard->CanPlantAt(mPlantCol - 1, mRow, aSeedType) == PLANTING_OK) + mBoard->CanPlantAt(mPlantCol - 1, mRow, aSeedType) == PLANTING_OK) { aColorOverride = GetFlashingColor(mBoard->mMainCounter, 90); } @@ -2866,7 +2814,7 @@ bool Plant::IsOnBoard() bool Plant::IsInPlay() { return IsOnBoard() && mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN && - mApp->mGameMode != GameMode::GAMEMODE_TREE_OF_WISDOM; + mApp->mGameMode != GameMode::GAMEMODE_TREE_OF_WISDOM; } void Plant::UpdateReanim() @@ -2881,8 +2829,8 @@ void Plant::UpdateReanim() float aOffsetY = PlantDrawHeightOffset(mBoard, this, mSeedType, mPlantCol, mRow) + mShakeOffsetY; float aScaleX = 1.0f, aScaleY = 1.0f; if ((mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BIG_TIME) && - (mSeedType == SeedType::SEED_WALLNUT || mSeedType == SeedType::SEED_SUNFLOWER || - mSeedType == SeedType::SEED_MARIGOLD)) + (mSeedType == SeedType::SEED_WALLNUT || mSeedType == SeedType::SEED_SUNFLOWER || + mSeedType == SeedType::SEED_MARIGOLD)) { aScaleX = 1.5f; aScaleY = 1.5f; @@ -2971,11 +2919,11 @@ void Plant::UpdateReanim() } float aAnimatedOffsetX = - TodAnimateCurveFloat(100, 0, mStateCountdown, aOffsetXStart, aOffsetXEnd, TodCurves::CURVE_LINEAR); + TodAnimateCurveFloat(100, 0, mStateCountdown, aOffsetXStart, aOffsetXEnd, TodCurves::CURVE_LINEAR); float aAnimatedOffsetY = - TodAnimateCurveFloat(100, 0, mStateCountdown, aOffsetYStart, aOffsetYEnd, TodCurves::CURVE_LINEAR); + TodAnimateCurveFloat(100, 0, mStateCountdown, aOffsetYStart, aOffsetYEnd, TodCurves::CURVE_LINEAR); float aAnimatedScale = - TodAnimateCurveFloat(100, 0, mStateCountdown, aScaleStart, aScaleEnd, TodCurves::CURVE_LINEAR); + TodAnimateCurveFloat(100, 0, mStateCountdown, aScaleStart, aScaleEnd, TodCurves::CURVE_LINEAR); aOffsetX += aAnimatedOffsetX * aScaleX; aOffsetY += aAnimatedOffsetY * aScaleY; @@ -3018,7 +2966,7 @@ bool Plant::NotOnGround() if (mSeedType == SeedType::SEED_SQUASH) { if (mState == PlantState::STATE_SQUASH_RISING || mState == PlantState::STATE_SQUASH_FALLING || - mState == PlantState::STATE_SQUASH_DONE_FALLING) + mState == PlantState::STATE_SQUASH_DONE_FALLING) return true; } @@ -3034,7 +2982,7 @@ Reanimation *Plant::AttachBlinkAnim(Reanimation *theReanimBody) const char *aTrackToAttach = nullptr; if (mSeedType == SeedType::SEED_WALLNUT || mSeedType == SeedType::SEED_TALLNUT || - mSeedType == SeedType::SEED_EXPLODE_O_NUT || mSeedType == SeedType::SEED_GIANT_WALLNUT) + mSeedType == SeedType::SEED_EXPLODE_O_NUT || mSeedType == SeedType::SEED_GIANT_WALLNUT) { int aHit = Rand(10); if (aHit < 1 && theReanimBody->TrackExists("anim_blink_twitch")) @@ -3100,8 +3048,8 @@ Reanimation *Plant::AttachBlinkAnim(Reanimation *theReanimBody) } } else if (mSeedType == SeedType::SEED_PEASHOOTER || mSeedType == SeedType::SEED_SNOWPEA || - mSeedType == SeedType::SEED_REPEATER || mSeedType == SeedType::SEED_LEFTPEATER || - mSeedType == SeedType::SEED_GATLINGPEA) + mSeedType == SeedType::SEED_REPEATER || mSeedType == SeedType::SEED_LEFTPEATER || + mSeedType == SeedType::SEED_GATLINGPEA) { if (theReanimBody->TrackExists("anim_stem")) { @@ -3125,7 +3073,7 @@ Reanimation *Plant::AttachBlinkAnim(Reanimation *theReanimBody) return nullptr; Reanimation *aBlinkReanim = - aApp->mEffectSystem->mReanimationHolder->AllocReanimation(0.0f, 0.0f, 0, aPlantDef.mReanimationType); + aApp->mEffectSystem->mReanimationHolder->AllocReanimation(0.0f, 0.0f, 0, aPlantDef.mReanimationType); aBlinkReanim->SetFramesForLayer(aTrackToPlay); aBlinkReanim->mLoopType = ReanimLoopType::REANIM_PLAY_ONCE_FULL_LAST_FRAME_AND_HOLD; aBlinkReanim->mAnimRate = 15.0f; @@ -3163,8 +3111,8 @@ void Plant::DoBlink() return; if (mState == PlantState::STATE_CACTUS_RISING || mState == PlantState::STATE_CACTUS_HIGH || - mState == PlantState::STATE_CACTUS_LOWERING || mState == PlantState::STATE_MAGNETSHROOM_SUCKING || - mState == PlantState::STATE_MAGNETSHROOM_CHARGING) + mState == PlantState::STATE_CACTUS_LOWERING || mState == PlantState::STATE_MAGNETSHROOM_SUCKING || + mState == PlantState::STATE_MAGNETSHROOM_CHARGING) return; EndBlink(); @@ -3173,12 +3121,12 @@ void Plant::DoBlink() return; if ((mSeedType == SeedType::SEED_TALLNUT && - aBodyReanim->GetImageOverride("anim_idle") == IMAGE_REANIM_TALLNUT_CRACKED2) || - (mSeedType == SeedType::SEED_GARLIC && aBodyReanim->GetImageOverride("anim_face") == IMAGE_REANIM_GARLIC_BODY3)) + aBodyReanim->GetImageOverride("anim_idle") == IMAGE_REANIM_TALLNUT_CRACKED2) || + (mSeedType == SeedType::SEED_GARLIC && aBodyReanim->GetImageOverride("anim_face") == IMAGE_REANIM_GARLIC_BODY3)) return; if (mSeedType == SeedType::SEED_WALLNUT || mSeedType == SeedType::SEED_TALLNUT || - mSeedType == SeedType::SEED_EXPLODE_O_NUT || mSeedType == SeedType::SEED_GIANT_WALLNUT) + mSeedType == SeedType::SEED_EXPLODE_O_NUT || mSeedType == SeedType::SEED_GIANT_WALLNUT) { mBlinkCountdown = 1000 + Rand(1000); } @@ -3429,7 +3377,7 @@ void Plant::UpdateShooting() Fire(nullptr, mRow, PlantWeapon::WEAPON_SECONDARY); } else if (mSeedType == SeedType::SEED_CABBAGEPULT || mSeedType == SeedType::SEED_KERNELPULT || - mSeedType == SeedType::SEED_MELONPULT || mSeedType == SeedType::SEED_WINTERMELON) + mSeedType == SeedType::SEED_MELONPULT || mSeedType == SeedType::SEED_WINTERMELON) { PlantWeapon aPlantWeapon = PlantWeapon::WEAPON_PRIMARY; if (mState == PlantState::STATE_KERNELPULT_BUTTER) @@ -3564,7 +3512,7 @@ void Plant::UpdateShooting() void Plant::Animate() { if ((mSeedType == SeedType::SEED_CHERRYBOMB || mSeedType == SeedType::SEED_JALAPENO) && - mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) + mApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) { mShakeOffsetX = RandRangeFloat(-1.0f, 1.0f); mShakeOffsetY = RandRangeFloat(-1.0f, 1.0f); @@ -3788,7 +3736,7 @@ float PlantDrawHeightOffset(Board *theBoard, Plant *thePlant, SeedType theSeedTy } if (theBoard && theBoard->GetFlowerPotAt(theCol, theRow) && - gLawnApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) + gLawnApp->mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) { aHeightOffset += 5.0f; } @@ -3888,7 +3836,7 @@ void Plant::DrawMagnetItems(Graphics *g) aImage = IMAGE_REANIM_ZOMBIE_SCREENDOOR3; } else if (aMagnetItem->mItemType >= MagnetItemType::MAGNET_ITEM_POGO_1 && - aMagnetItem->mItemType <= MagnetItemType::MAGNET_ITEM_POGO_3) + aMagnetItem->mItemType <= MagnetItemType::MAGNET_ITEM_POGO_3) { aCelCol = (int)aMagnetItem->mItemType - (int)MagnetItemType::MAGNET_ITEM_POGO_1; aImage = IMAGE_ZOMBIEPOGO; @@ -3940,12 +3888,12 @@ void Plant::DrawMagnetItems(Graphics *g) if (aScale == 1.0f) { g->DrawImageCel(aImage, aMagnetItem->mPosX - mX + aOffsetX, aMagnetItem->mPosY - mY + aOffsetY, aCelCol, - aCelRow); + aCelRow); } else { TodDrawImageCelScaledF(g, aImage, aMagnetItem->mPosX - mX + aOffsetX, - aMagnetItem->mPosY - mY + aOffsetY, aCelCol, aCelRow, aScale, aScale); + aMagnetItem->mPosY - mY + aOffsetY, aCelCol, aCelRow, aScale, aScale); } } } @@ -3960,14 +3908,14 @@ Image *Plant::GetImage(SeedType theSeedType) void Plant::DrawShadow(Sexy::Graphics *g, float theOffsetX, float theOffsetY) { if (mSeedType == SeedType::SEED_LILYPAD || mSeedType == SeedType::SEED_STARFRUIT || - mSeedType == SeedType::SEED_TANGLEKELP || mSeedType == SeedType::SEED_SEASHROOM || - mSeedType == SeedType::SEED_COBCANNON || mSeedType == SeedType::SEED_SPIKEWEED || - mSeedType == SeedType::SEED_SPIKEROCK || mSeedType == SeedType::SEED_GRAVEBUSTER || - mSeedType == SeedType::SEED_CATTAIL || mOnBungeeState == PlantOnBungeeState::RISING_WITH_BUNGEE) + mSeedType == SeedType::SEED_TANGLEKELP || mSeedType == SeedType::SEED_SEASHROOM || + mSeedType == SeedType::SEED_COBCANNON || mSeedType == SeedType::SEED_SPIKEWEED || + mSeedType == SeedType::SEED_SPIKEROCK || mSeedType == SeedType::SEED_GRAVEBUSTER || + mSeedType == SeedType::SEED_CATTAIL || mOnBungeeState == PlantOnBungeeState::RISING_WITH_BUNGEE) return; if (IsOnBoard() && mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN && - mApp->mZenGarden->mGardenType == GardenType::GARDEN_MAIN) + mApp->mZenGarden->mGardenType == GardenType::GARDEN_MAIN) return; int aShadowType = 0; @@ -4017,7 +3965,7 @@ void Plant::DrawShadow(Sexy::Graphics *g, float theOffsetX, float theOffsetY) aShadowOffsetY = 47.0f; } else if (mSeedType == SeedType::SEED_CABBAGEPULT || mSeedType == SeedType::SEED_MELONPULT || - mSeedType == SeedType::SEED_WINTERMELON) + mSeedType == SeedType::SEED_WINTERMELON) { aShadowOffsetY = 47.0f; } @@ -4075,19 +4023,19 @@ void Plant::DrawShadow(Sexy::Graphics *g, float theOffsetX, float theOffsetY) { aShadowOffsetY += 10.0f; if (mBoard && (mBoard->GetTopPlantAt(mPlantCol, mRow, TOPPLANT_ONLY_NORMAL_POSITION) || - mBoard->GetTopPlantAt(mPlantCol, mRow, TOPPLANT_ONLY_PUMPKIN))) + mBoard->GetTopPlantAt(mPlantCol, mRow, TOPPLANT_ONLY_PUMPKIN))) return; } if (aShadowType == 0) { TodDrawImageCelCenterScaledF(g, IMAGE_PLANTSHADOW, theOffsetX + aShadowOffsetX, theOffsetY + aShadowOffsetY, 0, - 0, aScale, aScale); + 0, aScale, aScale); } else { TodDrawImageCelCenterScaledF(g, IMAGE_PLANTSHADOW2, theOffsetX + aShadowOffsetX, theOffsetY + aShadowOffsetY, 0, - 0, aScale, aScale); + 0, aScale, aScale); } } @@ -4129,11 +4077,11 @@ void Plant::Draw(Graphics *g) if (aPumpkin) { Plant *aPlantInPumpkin = - mBoard->GetTopPlantAt(mPlantCol, mRow, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION); + mBoard->GetTopPlantAt(mPlantCol, mRow, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION); if (aPlantInPumpkin) { if (aPlantInPumpkin->mRenderOrder > aPumpkin->mRenderOrder || - aPlantInPumpkin->mOnBungeeState == GETTING_GRABBED_BY_BUNGEE) + aPlantInPumpkin->mOnBungeeState == GETTING_GRABBED_BY_BUNGEE) { aPlantInPumpkin = nullptr; } @@ -4200,10 +4148,10 @@ void Plant::Draw(Graphics *g) if (aBodyReanim) { if (!mApp->Is3DAccelerated() && mSeedType == SeedType::SEED_FLOWERPOT && IsOnBoard() && - aBodyReanim->mAnimRate == 0.0f && aBodyReanim->IsAnimPlaying("anim_idle")) + aBodyReanim->mAnimRate == 0.0f && aBodyReanim->IsAnimPlaying("anim_idle")) { mApp->mReanimatorCache->DrawCachedPlant(g, aOffsetX, aOffsetY, mSeedType, - DrawVariation::VARIATION_NORMAL); + DrawVariation::VARIATION_NORMAL); } else { @@ -4220,13 +4168,13 @@ void Plant::Draw(Graphics *g) } if (IsPartOfUpgradableTo(aSeedType) && - mBoard->CanPlantAt(mPlantCol, mRow, aSeedType) == PlantingReason::PLANTING_OK) + mBoard->CanPlantAt(mPlantCol, mRow, aSeedType) == PlantingReason::PLANTING_OK) { g->SetColorizeImages(true); g->SetColor(GetFlashingColor(mBoard->mMainCounter, 90)); } else if (aSeedType == SeedType::SEED_COBCANNON && - mBoard->CanPlantAt(mPlantCol - 1, mRow, aSeedType) == PlantingReason::PLANTING_OK) + mBoard->CanPlantAt(mPlantCol - 1, mRow, aSeedType) == PlantingReason::PLANTING_OK) { g->SetColorizeImages(true); g->SetColor(GetFlashingColor(mBoard->mMainCounter, 90)); @@ -4267,7 +4215,7 @@ void Plant::Draw(Graphics *g) } void Plant::DrawSeedType(Graphics *g, SeedType theSeedType, SeedType theImitaterType, DrawVariation theDrawVariation, - float thePosX, float thePosY) + float thePosX, float thePosY) { Graphics aSeedG(*g); int aCelRow = 0; @@ -4282,8 +4230,8 @@ void Plant::DrawSeedType(Graphics *g, SeedType theSeedType, SeedType theImitater aSeedType = theImitaterType; aDrawVariation = DrawVariation::VARIATION_IMITATER; if (theImitaterType == SeedType::SEED_HYPNOSHROOM || theImitaterType == SeedType::SEED_SQUASH || - theImitaterType == SeedType::SEED_POTATOMINE || theImitaterType == SeedType::SEED_GARLIC || - theImitaterType == SeedType::SEED_LILYPAD) + theImitaterType == SeedType::SEED_POTATOMINE || theImitaterType == SeedType::SEED_GARLIC || + theImitaterType == SeedType::SEED_LILYPAD) aDrawVariation = DrawVariation::VARIATION_IMITATER_LESS; } else if (theDrawVariation == DrawVariation::VARIATION_NORMAL && theSeedType == SeedType::SEED_TANGLEKELP) @@ -4292,8 +4240,8 @@ void Plant::DrawSeedType(Graphics *g, SeedType theSeedType, SeedType theImitater } if (((LawnApp *)gSexyAppBase)->mGameMode == GameMode::GAMEMODE_CHALLENGE_BIG_TIME && - (aSeedType == SeedType::SEED_WALLNUT || aSeedType == SeedType::SEED_SUNFLOWER || - aSeedType == SeedType::SEED_MARIGOLD)) + (aSeedType == SeedType::SEED_WALLNUT || aSeedType == SeedType::SEED_SUNFLOWER || + aSeedType == SeedType::SEED_MARIGOLD)) { aSeedG.mScaleX *= 1.5f; aSeedG.mScaleY *= 1.5f; @@ -4320,12 +4268,12 @@ void Plant::DrawSeedType(Graphics *g, SeedType theSeedType, SeedType theImitater aSeedG.mScaleX *= 1.4f; aSeedG.mScaleY *= 1.4f; TodDrawImageScaledF(&aSeedG, IMAGE_REANIM_WALLNUT_BODY, thePosX - 53.0f, thePosY - 56.0f, aSeedG.mScaleX, - aSeedG.mScaleY); + aSeedG.mScaleY); } else if (aPlantDef.mReanimationType != ReanimationType::REANIM_NONE) { gLawnApp->mReanimatorCache->DrawCachedPlant(&aSeedG, thePosX + aOffsetX, thePosY + aOffsetY, aSeedType, - aDrawVariation); + aDrawVariation); } else { @@ -4345,7 +4293,7 @@ void Plant::DrawSeedType(Graphics *g, SeedType theSeedType, SeedType theImitater } TodDrawImageCelScaledF(&aSeedG, aPlantImage, thePosX + aOffsetX, thePosY + aOffsetY, aCelCol, aCelRow, - aSeedG.mScaleX, aSeedG.mScaleY); + aSeedG.mScaleX, aSeedG.mScaleY); } } } @@ -4399,7 +4347,7 @@ void Plant::BurnRow(int theRow) while (mBoard->IterateZombies(aZombie)) { if ((aZombie->mZombieType == ZombieType::ZOMBIE_BOSS || aZombie->mRow == theRow) && - aZombie->EffectedByDamage(aDamageRangeFlags)) + aZombie->EffectedByDamage(aDamageRangeFlags)) { aZombie->RemoveColdEffects(); aZombie->ApplyBurn(); @@ -4474,7 +4422,7 @@ void Plant::DoSpecial() mApp->PlayFoley(FoleyType::FOLEY_JUICY); std::vector aZombiesInRange = - mBoard->GetZombiesInRadius(mRow, aPosX, aPosY, 250, 3, aDamageRangeFlags); + mBoard->GetZombiesInRadius(mRow, aPosX, aPosY, 250, 3, aDamageRangeFlags); if (aZombiesInRange.size() > 10) mApp->mAchievements->GiveAchievement(AchievementID::ACHIEVEMENT_EXPLODONATOR); mBoard->KillAllZombiesInRadius(mRow, aPosX, aPosY, 115, 1, true, aDamageRangeFlags); @@ -4569,8 +4517,8 @@ void Plant::ImitaterMorph() FilterEffect aFilter = FilterEffect::FILTER_EFFECT_WASHED_OUT; if (mImitaterType == SeedType::SEED_HYPNOSHROOM || mImitaterType == SeedType::SEED_SQUASH || - mImitaterType == SeedType::SEED_POTATOMINE || mImitaterType == SeedType::SEED_GARLIC || - mImitaterType == SeedType::SEED_LILYPAD) + mImitaterType == SeedType::SEED_POTATOMINE || mImitaterType == SeedType::SEED_GARLIC || + mImitaterType == SeedType::SEED_LILYPAD) aFilter = FilterEffect::FILTER_EFFECT_LESS_WASHED_OUT; Reanimation *aBodyReanim = mApp->ReanimationTryToGet(aPlant->mBodyReanimID); @@ -4611,7 +4559,7 @@ void Plant::UpdateImitater() if (aBodyReanim->ShouldTriggerTimedEvent(0.8f)) { mApp->AddTodParticle(mX + 40, mY + 40, (int)RenderLayer::RENDER_LAYER_TOP, - ParticleEffect::PARTICLE_IMITATER_MORPH); + ParticleEffect::PARTICLE_IMITATER_MORPH); } if (aBodyReanim->mLoopCount > 0) { @@ -4708,7 +4656,7 @@ void Plant::Fire(Zombie *theTargetZombie, int theRow, PlantWeapon thePlantWeapon mApp->PlayFoley(FoleyType::FOLEY_SNOW_PEA_SPARKLES); } else if (mSeedType == SeedType::SEED_PUFFSHROOM || mSeedType == SeedType::SEED_SCAREDYSHROOM || - mSeedType == SeedType::SEED_SEASHROOM) + mSeedType == SeedType::SEED_SEASHROOM) { mApp->PlayFoley(FoleyType::FOLEY_PUFF); } @@ -4750,7 +4698,7 @@ void Plant::Fire(Zombie *theTargetZombie, int theRow, PlantWeapon thePlantWeapon aOriginY = mY - 56; } else if (mSeedType == SeedType::SEED_PEASHOOTER || mSeedType == SeedType::SEED_SNOWPEA || - mSeedType == SeedType::SEED_REPEATER) + mSeedType == SeedType::SEED_REPEATER) { int aOffsetX, aOffsetY; GetPeaHeadOffset(aOffsetX, aOffsetY); @@ -4844,7 +4792,7 @@ void Plant::Fire(Zombie *theTargetZombie, int theRow, PlantWeapon thePlantWeapon aProjectile->mDamageRangeFlags = GetDamageRangeFlags(thePlantWeapon); if (mSeedType == SeedType::SEED_CABBAGEPULT || mSeedType == SeedType::SEED_KERNELPULT || - mSeedType == SeedType::SEED_MELONPULT || mSeedType == SeedType::SEED_WINTERMELON) + mSeedType == SeedType::SEED_MELONPULT || mSeedType == SeedType::SEED_WINTERMELON) { float aRangeX, aRangeY; if (theTargetZombie) @@ -4951,7 +4899,7 @@ Zombie *Plant::FindTargetZombie(int theRow, PlantWeapon thePlantWeapon) if (!aZombie->mHasHead || aZombie->IsTangleKelpTarget()) { if (mSeedType == SeedType::SEED_POTATOMINE || mSeedType == SeedType::SEED_CHOMPER || - mSeedType == SeedType::SEED_TANGLEKELP) + mSeedType == SeedType::SEED_TANGLEKELP) { continue; } @@ -4961,7 +4909,7 @@ Zombie *Plant::FindTargetZombie(int theRow, PlantWeapon thePlantWeapon) if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_PORTAL_COMBAT) { if (mSeedType == SeedType::SEED_PEASHOOTER || mSeedType == SeedType::SEED_CACTUS || - mSeedType == SeedType::SEED_REPEATER) + mSeedType == SeedType::SEED_REPEATER) { needPortalCheck = true; } @@ -5002,7 +4950,7 @@ Zombie *Plant::FindTargetZombie(int theRow, PlantWeapon thePlantWeapon) } if (aZombie->mZombiePhase == ZombiePhase::PHASE_POGO_BOUNCING || - (aZombie->mZombieType == ZombieType::ZOMBIE_BUNGEE && aZombie->mTargetCol == mPlantCol)) + (aZombie->mZombieType == ZombieType::ZOMBIE_BUNGEE && aZombie->mTargetCol == mPlantCol)) { continue; } @@ -5016,8 +4964,8 @@ Zombie *Plant::FindTargetZombie(int theRow, PlantWeapon thePlantWeapon) if (mSeedType == SeedType::SEED_POTATOMINE) { if ((aZombie->mZombieType == ZombieType::ZOMBIE_POGO && aZombie->mHasObject) || - aZombie->mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT || - aZombie->mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_PRE_VAULT) + aZombie->mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT || + aZombie->mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_PRE_VAULT) { continue; } @@ -5040,8 +4988,8 @@ Zombie *Plant::FindTargetZombie(int theRow, PlantWeapon thePlantWeapon) } if ((mSeedType == SeedType::SEED_EXPLODE_O_NUT && - aZombie->mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT) || - (mSeedType == SeedType::SEED_TANGLEKELP && !aZombie->mInPool)) + aZombie->mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT) || + (mSeedType == SeedType::SEED_TANGLEKELP && !aZombie->mInPool)) { continue; } @@ -5058,7 +5006,7 @@ Zombie *Plant::FindTargetZombie(int theRow, PlantWeapon thePlantWeapon) if (mSeedType == SeedType::SEED_CATTAIL) { aWeight = -Distance2D(mX + 40.0f, mY + 40.0f, aZombieRect.mX + aZombieRect.mWidth / 2, - aZombieRect.mY + aZombieRect.mHeight / 2); + aZombieRect.mY + aZombieRect.mHeight / 2); if (aZombie->IsFlying()) { aWeight += 10000; @@ -5150,7 +5098,7 @@ PlantDefinition &GetPlantDefinition(SeedType theSeedType) int Plant::GetCost(SeedType theSeedType, SeedType theImitaterType) { if (gLawnApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - gLawnApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST) + gLawnApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST) { if (theSeedType == SeedType::SEED_REPEATER) { @@ -5275,16 +5223,16 @@ int Plant::GetRefreshTime(SeedType theSeedType, SeedType theImitaterType) bool Plant::IsNocturnal(SeedType theSeedtype) { return theSeedtype == SeedType::SEED_PUFFSHROOM || theSeedtype == SeedType::SEED_SEASHROOM || - theSeedtype == SeedType::SEED_SUNSHROOM || theSeedtype == SeedType::SEED_FUMESHROOM || - theSeedtype == SeedType::SEED_HYPNOSHROOM || theSeedtype == SeedType::SEED_DOOMSHROOM || - theSeedtype == SeedType::SEED_ICESHROOM || theSeedtype == SeedType::SEED_MAGNETSHROOM || - theSeedtype == SeedType::SEED_SCAREDYSHROOM || theSeedtype == SeedType::SEED_GLOOMSHROOM; + theSeedtype == SeedType::SEED_SUNSHROOM || theSeedtype == SeedType::SEED_FUMESHROOM || + theSeedtype == SeedType::SEED_HYPNOSHROOM || theSeedtype == SeedType::SEED_DOOMSHROOM || + theSeedtype == SeedType::SEED_ICESHROOM || theSeedtype == SeedType::SEED_MAGNETSHROOM || + theSeedtype == SeedType::SEED_SCAREDYSHROOM || theSeedtype == SeedType::SEED_GLOOMSHROOM; } bool Plant::IsAquatic(SeedType theSeedType) { return theSeedType == SeedType::SEED_LILYPAD || theSeedType == SeedType::SEED_TANGLEKELP || - theSeedType == SeedType::SEED_SEASHROOM || theSeedType == SeedType::SEED_CATTAIL; + theSeedType == SeedType::SEED_SEASHROOM || theSeedType == SeedType::SEED_CATTAIL; } bool Plant::IsFlying(SeedType theSeedtype) @@ -5295,9 +5243,9 @@ bool Plant::IsFlying(SeedType theSeedtype) bool Plant::IsUpgrade(SeedType theSeedtype) { return theSeedtype == SeedType::SEED_GATLINGPEA || theSeedtype == SeedType::SEED_WINTERMELON || - theSeedtype == SeedType::SEED_TWINSUNFLOWER || theSeedtype == SeedType::SEED_SPIKEROCK || - theSeedtype == SeedType::SEED_COBCANNON || theSeedtype == SeedType::SEED_GOLD_MAGNET || - theSeedtype == SeedType::SEED_GLOOMSHROOM || theSeedtype == SeedType::SEED_CATTAIL; + theSeedtype == SeedType::SEED_TWINSUNFLOWER || theSeedtype == SeedType::SEED_SPIKEROCK || + theSeedtype == SeedType::SEED_COBCANNON || theSeedtype == SeedType::SEED_GOLD_MAGNET || + theSeedtype == SeedType::SEED_GLOOMSHROOM || theSeedtype == SeedType::SEED_CATTAIL; } Rect Plant::GetPlantRect() diff --git a/src/Lawn/Projectile.cpp b/src/Lawn/Projectile.cpp index 49f9c16..4850dbe 100644 --- a/src/Lawn/Projectile.cpp +++ b/src/Lawn/Projectile.cpp @@ -13,13 +13,21 @@ #include "../Sexy.TodLib/Attachment.h" ProjectileDefinition gProjectileDefinition[] = { - {ProjectileType::PROJECTILE_PEA, 0, 20}, {ProjectileType::PROJECTILE_SNOWPEA, 0, 20}, - {ProjectileType::PROJECTILE_CABBAGE, 0, 40}, {ProjectileType::PROJECTILE_MELON, 0, 80}, - {ProjectileType::PROJECTILE_PUFF, 0, 20}, {ProjectileType::PROJECTILE_WINTERMELON, 0, 80}, - {ProjectileType::PROJECTILE_FIREBALL, 0, 40}, {ProjectileType::PROJECTILE_STAR, 0, 20}, - {ProjectileType::PROJECTILE_SPIKE, 0, 20}, {ProjectileType::PROJECTILE_BASKETBALL, 0, 75}, - {ProjectileType::PROJECTILE_KERNEL, 0, 20}, {ProjectileType::PROJECTILE_COBBIG, 0, 300}, - {ProjectileType::PROJECTILE_BUTTER, 0, 40}, {ProjectileType::PROJECTILE_ZOMBIE_PEA, 0, 20}}; + { ProjectileType::PROJECTILE_PEA, 0, 20 }, + { ProjectileType::PROJECTILE_SNOWPEA, 0, 20 }, + { ProjectileType::PROJECTILE_CABBAGE, 0, 40 }, + { ProjectileType::PROJECTILE_MELON, 0, 80 }, + { ProjectileType::PROJECTILE_PUFF, 0, 20 }, + { ProjectileType::PROJECTILE_WINTERMELON, 0, 80 }, + { ProjectileType::PROJECTILE_FIREBALL, 0, 40 }, + { ProjectileType::PROJECTILE_STAR, 0, 20 }, + { ProjectileType::PROJECTILE_SPIKE, 0, 20 }, + { ProjectileType::PROJECTILE_BASKETBALL, 0, 75 }, + { ProjectileType::PROJECTILE_KERNEL, 0, 20 }, + { ProjectileType::PROJECTILE_COBBIG, 0, 300 }, + { ProjectileType::PROJECTILE_BUTTER, 0, 40 }, + { ProjectileType::PROJECTILE_ZOMBIE_PEA, 0, 20 } +}; Projectile::Projectile() { @@ -31,7 +39,7 @@ Projectile::~Projectile() } void Projectile::ProjectileInitialize(int theX, int theY, int theRenderOrder, int theRow, - ProjectileType theProjectileType) + ProjectileType theProjectileType) { int aGridX = mBoard->PixelToGridXKeepOnBoard(theX, theY); mProjectileType = theProjectileType; @@ -74,7 +82,7 @@ void Projectile::ProjectileInitialize(int theX, int theY, int theRenderOrder, in mRotationSpeed = RandRangeFloat(-0.08f, -0.02f); } else if (mProjectileType == ProjectileType::PROJECTILE_MELON || - mProjectileType == ProjectileType::PROJECTILE_WINTERMELON) + mProjectileType == ProjectileType::PROJECTILE_WINTERMELON) { mRotation = DEG_TO_RAD(-72.0f); mRotationSpeed = RandRangeFloat(-0.08f, -0.02f); @@ -87,7 +95,7 @@ void Projectile::ProjectileInitialize(int theX, int theY, int theRenderOrder, in else if (mProjectileType == ProjectileType::PROJECTILE_SNOWPEA) { TodParticleSystem *aParticle = - mApp->AddTodParticle(mPosX + 8.0f, mPosY + 13.0f, 400000, ParticleEffect::PARTICLE_SNOWPEA_TRAIL); + mApp->AddTodParticle(mPosX + 8.0f, mPosY + 13.0f, 400000, ParticleEffect::PARTICLE_SNOWPEA_TRAIL); AttachParticle(mAttachmentID, aParticle, 8.0f, 13.0f); } else if (mProjectileType == ProjectileType::PROJECTILE_FIREBALL) @@ -103,7 +111,7 @@ void Projectile::ProjectileInitialize(int theX, int theY, int theRenderOrder, in else if (mProjectileType == ProjectileType::PROJECTILE_PUFF) { TodParticleSystem *aParticle = - mApp->AddTodParticle(mPosX + 13.0f, mPosY + 13.0f, 400000, ParticleEffect::PARTICLE_PUFFSHROOM_TRAIL); + mApp->AddTodParticle(mPosX + 13.0f, mPosY + 13.0f, 400000, ParticleEffect::PARTICLE_PUFFSHROOM_TRAIL); AttachParticle(mAttachmentID, aParticle, 13.0f, 13.0f); } else if (mProjectileType == ProjectileType::PROJECTILE_BASKETBALL) @@ -139,8 +147,8 @@ Plant *Projectile::FindCollisionTargetPlant() if (mProjectileType == ProjectileType::PROJECTILE_ZOMBIE_PEA) { if (aPlant->mSeedType == SeedType::SEED_PUFFSHROOM || aPlant->mSeedType == SeedType::SEED_SUNSHROOM || - aPlant->mSeedType == SeedType::SEED_POTATOMINE || aPlant->mSeedType == SeedType::SEED_SPIKEWEED || - aPlant->mSeedType == SeedType::SEED_SPIKEROCK || aPlant->mSeedType == SeedType::SEED_LILYPAD) + aPlant->mSeedType == SeedType::SEED_POTATOMINE || aPlant->mSeedType == SeedType::SEED_SPIKEWEED || + aPlant->mSeedType == SeedType::SEED_SPIKEROCK || aPlant->mSeedType == SeedType::SEED_LILYPAD) continue; } @@ -173,7 +181,7 @@ bool Projectile::PeaAboutToHitTorchwood() while (mBoard->IteratePlants(aPlant)) { if (aPlant->mSeedType == SeedType::SEED_TORCHWOOD && aPlant->mRow == mRow && !aPlant->NotOnGround() && - mHitTorchwoodGridX != aPlant->mPlantCol) + mHitTorchwoodGridX != aPlant->mPlantCol) { Rect aPlantAttackRect = aPlant->GetPlantAttackRect(PlantWeapon::WEAPON_PRIMARY); Rect aProjectileRect = GetProjectileRect(); @@ -211,7 +219,7 @@ Zombie *Projectile::FindCollisionTarget() } if (mProjectileType == ProjectileType::PROJECTILE_STAR && mProjectileAge < 25 && mVelX >= 0.0f && - aZombie->mZombieType == ZombieType::ZOMBIE_DIGGER) + aZombie->mZombieType == ZombieType::ZOMBIE_DIGGER) { continue; } @@ -253,7 +261,7 @@ void Projectile::CheckForCollision() Rect aProjectileRect = GetProjectileRect(); Rect aZombieRect = aZombie->GetZombieRect(); if (GetRectOverlap(aProjectileRect, aZombieRect) >= 0 && mPosY > aZombieRect.mY && - mPosY < aZombieRect.mY + aZombieRect.mHeight) + mPosY < aZombieRect.mY + aZombieRect.mHeight) { DoImpact(aZombie); } @@ -268,7 +276,7 @@ void Projectile::CheckForCollision() } if ((mProjectileType == ProjectileType::PROJECTILE_PEA || mProjectileType == ProjectileType::PROJECTILE_STAR) && - mShadowY - mPosY > 90.0f) + mShadowY - mPosY > 90.0f) { return; } @@ -298,7 +306,7 @@ void Projectile::CheckForCollision() if (aZombie) { if ((aZombie->mOnHighGround && CantHitHighGround()) || - (mProjectileType == ProjectileType::PROJECTILE_ZOMBIE_PEA && !aZombie->mMindControlled)) + (mProjectileType == ProjectileType::PROJECTILE_ZOMBIE_PEA && !aZombie->mMindControlled)) { return; } @@ -313,10 +321,10 @@ bool Projectile::CantHitHighGround() return false; return (mProjectileType == ProjectileType::PROJECTILE_PEA || - mProjectileType == ProjectileType::PROJECTILE_SNOWPEA || - mProjectileType == ProjectileType::PROJECTILE_STAR || mProjectileType == ProjectileType::PROJECTILE_PUFF || - mProjectileType == ProjectileType::PROJECTILE_FIREBALL) && - !mOnHighGround; + mProjectileType == ProjectileType::PROJECTILE_SNOWPEA || + mProjectileType == ProjectileType::PROJECTILE_STAR || mProjectileType == ProjectileType::PROJECTILE_PUFF || + mProjectileType == ProjectileType::PROJECTILE_FIREBALL) && + !mOnHighGround; } void Projectile::CheckForHighGround() @@ -324,8 +332,8 @@ void Projectile::CheckForHighGround() float aShadowDelta = mShadowY - mPosY; if (mProjectileType == ProjectileType::PROJECTILE_PEA || mProjectileType == ProjectileType::PROJECTILE_SNOWPEA || - mProjectileType == ProjectileType::PROJECTILE_FIREBALL || mProjectileType == ProjectileType::PROJECTILE_SPIKE || - mProjectileType == ProjectileType::PROJECTILE_COBBIG) + mProjectileType == ProjectileType::PROJECTILE_FIREBALL || mProjectileType == ProjectileType::PROJECTILE_SPIKE || + mProjectileType == ProjectileType::PROJECTILE_COBBIG) { if (aShadowDelta < 28.0f) { @@ -362,8 +370,8 @@ bool Projectile::IsSplashDamage(Zombie *theZombie) return false; return mProjectileType == ProjectileType::PROJECTILE_MELON || - mProjectileType == ProjectileType::PROJECTILE_WINTERMELON || - mProjectileType == ProjectileType::PROJECTILE_FIREBALL; + mProjectileType == ProjectileType::PROJECTILE_WINTERMELON || + mProjectileType == ProjectileType::PROJECTILE_FIREBALL; } unsigned int Projectile::GetDamageFlags(Zombie *theZombie) @@ -384,7 +392,7 @@ unsigned int Projectile::GetDamageFlags(Zombie *theZombie) } if (mProjectileType == ProjectileType::PROJECTILE_SNOWPEA || - mProjectileType == ProjectileType::PROJECTILE_WINTERMELON) + mProjectileType == ProjectileType::PROJECTILE_WINTERMELON) { SetBit(aDamageFlags, (int)DamageFlags::DAMAGE_FREEZE, true); } @@ -424,7 +432,7 @@ bool Projectile::IsZombieHitBySplash(Zombie *theZombie) } return theZombie->EffectedByDamage((unsigned int)mDamageRangeFlags) && - GetRectOverlap(aProjectileRect, aZombieRect) >= 0; + GetRectOverlap(aProjectileRect, aZombieRect) >= 0; } void Projectile::DoSplashDamage(Zombie *theZombie) @@ -498,7 +506,7 @@ void Projectile::UpdateLobMotion() bool isRising = mVelZ < 0.0f; if (isRising && (mProjectileType == ProjectileType::PROJECTILE_BASKETBALL || - mProjectileType == ProjectileType::PROJECTILE_COBBIG)) + mProjectileType == ProjectileType::PROJECTILE_COBBIG)) { return; } @@ -519,12 +527,12 @@ void Projectile::UpdateLobMotion() aMinCollisionZ = 60.0f; } else if (mProjectileType == ProjectileType::PROJECTILE_MELON || - mProjectileType == ProjectileType::PROJECTILE_WINTERMELON) + mProjectileType == ProjectileType::PROJECTILE_WINTERMELON) { aMinCollisionZ = -35.0f; } else if (mProjectileType == ProjectileType::PROJECTILE_CABBAGE || - mProjectileType == ProjectileType::PROJECTILE_KERNEL) + mProjectileType == ProjectileType::PROJECTILE_KERNEL) { aMinCollisionZ = -30.0f; } @@ -546,7 +554,7 @@ void Projectile::UpdateLobMotion() Plant *aPlant = nullptr; Zombie *aZombie = nullptr; if (mProjectileType == ProjectileType::PROJECTILE_BASKETBALL || - mProjectileType == ProjectileType::PROJECTILE_ZOMBIE_PEA) + mProjectileType == ProjectileType::PROJECTILE_ZOMBIE_PEA) { aPlant = FindCollisionTargetPlant(); } @@ -576,7 +584,7 @@ void Projectile::UpdateLobMotion() mApp->PlayFoley(FoleyType::FOLEY_SPLAT); int aRenderPosition = Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 1); mApp->AddTodParticle(mPosX + 20.0f, mPosY + 20.0f, aRenderPosition, - ParticleEffect::PARTICLE_UMBRELLA_REFLECT); + ParticleEffect::PARTICLE_UMBRELLA_REFLECT); Die(); } else if (aUmbrellaPlant->mState != PlantState::STATE_UMBRELLA_TRIGGERED) @@ -773,7 +781,7 @@ void Projectile::PlayImpactSound(Zombie *theZombie) aPlaySplatSound = false; } else if (mProjectileType == ProjectileType::PROJECTILE_MELON || - mProjectileType == ProjectileType::PROJECTILE_WINTERMELON) + mProjectileType == ProjectileType::PROJECTILE_WINTERMELON) { mApp->PlayFoley(FoleyType::FOLEY_MELONIMPACT); aPlaySplatSound = false; @@ -787,7 +795,7 @@ void Projectile::PlayImpactSound(Zombie *theZombie) aPlaySplatSound = false; } else if (theZombie->mHelmType == HELMTYPE_TRAFFIC_CONE || theZombie->mHelmType == HELMTYPE_DIGGER || - theZombie->mHelmType == HELMTYPE_FOOTBALL) + theZombie->mHelmType == HELMTYPE_FOOTBALL) { mApp->PlayFoley(FoleyType::FOLEY_PLASTIC_HIT); } @@ -826,12 +834,12 @@ void Projectile::DoImpact(Zombie *theZombie) if (mProjectileType == ProjectileType::PROJECTILE_MELON) { mApp->AddTodParticle(aLastPosX + 30.0f, aLastPosY + 30.0f, mRenderOrder + 1, - ParticleEffect::PARTICLE_MELONSPLASH); + ParticleEffect::PARTICLE_MELONSPLASH); } else if (mProjectileType == ProjectileType::PROJECTILE_WINTERMELON) { mApp->AddTodParticle(aLastPosX + 30.0f, aLastPosY + 30.0f, mRenderOrder + 1, - ParticleEffect::PARTICLE_WINTERMELON); + ParticleEffect::PARTICLE_WINTERMELON); } else if (mProjectileType == ProjectileType::PROJECTILE_COBBIG) { @@ -856,7 +864,7 @@ void Projectile::DoImpact(Zombie *theZombie) if (IsSplashDamage(theZombie)) { Reanimation *aFireReanim = mApp->AddReanimation(mPosX + 38.0f, mPosY - 20.0f, mRenderOrder + 1, - ReanimationType::REANIM_JALAPENO_FIRE); + ReanimationType::REANIM_JALAPENO_FIRE); aFireReanim->mAnimTime = 0.25f; aFireReanim->mAnimRate = 24.0f; aFireReanim->OverrideScale(0.7f, 0.4f); @@ -896,7 +904,7 @@ void Projectile::DoImpact(Zombie *theZombie) float aPosX = aSplatPosX + 52.0f - theZombie->mX; float aPosY = aSplatPosY - theZombie->mY; if (theZombie->mZombiePhase == ZombiePhase::PHASE_SNORKEL_WALKING_IN_POOL || - theZombie->mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING_IN_POOL) + theZombie->mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING_IN_POOL) { aPosY += 60.0f; } @@ -929,7 +937,7 @@ void Projectile::Update() int aTime = 20; if (mProjectileType != ProjectileType::PROJECTILE_PUFF && mProjectileType != ProjectileType::PROJECTILE_FIREBALL && - mProjectileType != ProjectileType::PROJECTILE_STAR && mProjectileType != ProjectileType::PROJECTILE_BASKETBALL) + mProjectileType != ProjectileType::PROJECTILE_STAR && mProjectileType != ProjectileType::PROJECTILE_BASKETBALL) { aTime = 0; } @@ -960,7 +968,7 @@ void Projectile::Draw(Graphics *g) aScale = 0.9f; } else if (mProjectileType == ProjectileType::PROJECTILE_PEA || - mProjectileType == ProjectileType::PROJECTILE_ZOMBIE_PEA) + mProjectileType == ProjectileType::PROJECTILE_ZOMBIE_PEA) { aImage = IMAGE_PROJECTILEPEA; } @@ -1045,7 +1053,7 @@ void Projectile::Draw(Graphics *g) float aOffsetY = mPosZ + mPosY + aCelHeight * 0.5f; SexyTransform2D aTransform; TodScaleRotateTransformMatrix(aTransform, aOffsetX + mBoard->mX, aOffsetY + mBoard->mY, mRotation, aScale, - aScale); + aScale); TodBltMatrix(g, aImage, aTransform, g->mClipRect, Color::White, g->mDrawMode, aSrcRect); } } @@ -1133,7 +1141,7 @@ void Projectile::DrawShadow(Graphics *g) } TodDrawImageCelScaledF(g, IMAGE_PEA_SHADOWS, aOffsetX, (mShadowY - mPosY + aOffsetY), aCelCol, 0, aScale * aStretch, - aScale); + aScale); } void Projectile::Die() @@ -1154,7 +1162,7 @@ void Projectile::Die() Rect Projectile::GetProjectileRect() { if (mProjectileType == ProjectileType::PROJECTILE_PEA || mProjectileType == ProjectileType::PROJECTILE_SNOWPEA || - mProjectileType == ProjectileType::PROJECTILE_ZOMBIE_PEA) + mProjectileType == ProjectileType::PROJECTILE_ZOMBIE_PEA) { return Rect(mX - 15, mY, mWidth + 15, mHeight); } @@ -1163,7 +1171,7 @@ Rect Projectile::GetProjectileRect() return Rect(mX + mWidth / 2 - 115, mY + mHeight / 2 - 115, 230, 230); } else if (mProjectileType == ProjectileType::PROJECTILE_MELON || - mProjectileType == ProjectileType::PROJECTILE_WINTERMELON) + mProjectileType == ProjectileType::PROJECTILE_WINTERMELON) { return Rect(mX + 20, mY, 60, mHeight); } diff --git a/src/Lawn/ResoddedFramework/DebuggerWindow.cpp b/src/Lawn/ResoddedFramework/DebuggerWindow.cpp index aea01fb..2e7076a 100644 --- a/src/Lawn/ResoddedFramework/DebuggerWindow.cpp +++ b/src/Lawn/ResoddedFramework/DebuggerWindow.cpp @@ -23,116 +23,174 @@ using namespace Sexy; // ───────────────────────────────────────────────────────────── // Static name helpers (no hardcoded gameplay values) // ───────────────────────────────────────────────────────────── -const char* DebuggerWindow::SeedTypeName(int i) +const char *DebuggerWindow::SeedTypeName(int i) { - if (i < 0 || i >= (int)SeedType::NUM_SEED_TYPES) return "???"; - return gPlantDefs[i].mPlantName; + if (i < 0 || i >= (int)SeedType::NUM_SEED_TYPES) + return "???"; + return gPlantDefs[i].mPlantName; } -const char* DebuggerWindow::ZombieTypeName(int i) +const char *DebuggerWindow::ZombieTypeName(int i) { - if (i < 0 || i >= (int)ZombieType::NUM_ZOMBIE_TYPES) return "???"; - return gZombieDefs[i].mZombieName; + if (i < 0 || i >= (int)ZombieType::NUM_ZOMBIE_TYPES) + return "???"; + return gZombieDefs[i].mZombieName; } -const char* DebuggerWindow::GameModeName(int m) +const char *DebuggerWindow::GameModeName(int m) { - switch ((GameMode)m) - { - case GAMEMODE_ADVENTURE: return "Adventure"; - case GAMEMODE_SURVIVAL_NORMAL_STAGE_1: return "Surv Normal 1"; - case GAMEMODE_SURVIVAL_HARD_STAGE_1: return "Surv Hard 1"; - case GAMEMODE_SURVIVAL_ENDLESS_STAGE_1: return "Surv Endless 1"; - case GAMEMODE_CHALLENGE_ZEN_GARDEN: return "Zen Garden"; - case GAMEMODE_CHALLENGE_FINAL_BOSS: return "Final Boss"; - case GAMEMODE_TREE_OF_WISDOM: return "Tree of Wisdom"; - default: return "Other"; - } + switch ((GameMode)m) + { + case GAMEMODE_ADVENTURE: + return "Adventure"; + case GAMEMODE_SURVIVAL_NORMAL_STAGE_1: + return "Surv Normal 1"; + case GAMEMODE_SURVIVAL_HARD_STAGE_1: + return "Surv Hard 1"; + case GAMEMODE_SURVIVAL_ENDLESS_STAGE_1: + return "Surv Endless 1"; + case GAMEMODE_CHALLENGE_ZEN_GARDEN: + return "Zen Garden"; + case GAMEMODE_CHALLENGE_FINAL_BOSS: + return "Final Boss"; + case GAMEMODE_TREE_OF_WISDOM: + return "Tree of Wisdom"; + default: + return "Other"; + } } -const char* DebuggerWindow::GameSceneName(int s) +const char *DebuggerWindow::GameSceneName(int s) { - switch ((GameScenes)s) - { - case SCENE_LOADING: return "Loading"; - case SCENE_MENU: return "Menu"; - case SCENE_PLAYING: return "Playing"; - case SCENE_AWARD: return "Award"; - case SCENE_CREDIT: return "Credit"; - default: return "Other"; - } + switch ((GameScenes)s) + { + case SCENE_LOADING: + return "Loading"; + case SCENE_MENU: + return "Menu"; + case SCENE_PLAYING: + return "Playing"; + case SCENE_AWARD: + return "Award"; + case SCENE_CREDIT: + return "Credit"; + default: + return "Other"; + } } -const char* DebuggerWindow::ZombiePhaseName(ZombiePhase p) +const char *DebuggerWindow::ZombiePhaseName(ZombiePhase p) { - switch (p) - { - case PHASE_ZOMBIE_NORMAL: return "Normal"; - case PHASE_ZOMBIE_DYING: return "Dying"; - case PHASE_ZOMBIE_BURNED: return "Burned"; - case PHASE_ZOMBIE_MOWERED: return "Mowered"; - case PHASE_DIGGER_TUNNELING:return "Tunneling"; - case PHASE_POGO_BOUNCING: return "Pogo"; - case PHASE_BUNGEE_DIVING: return "Bungee"; - case PHASE_DANCER_DANCING_IN: return "Dancing"; - default: return "Other"; - } + switch (p) + { + case PHASE_ZOMBIE_NORMAL: + return "Normal"; + case PHASE_ZOMBIE_DYING: + return "Dying"; + case PHASE_ZOMBIE_BURNED: + return "Burned"; + case PHASE_ZOMBIE_MOWERED: + return "Mowered"; + case PHASE_DIGGER_TUNNELING: + return "Tunneling"; + case PHASE_POGO_BOUNCING: + return "Pogo"; + case PHASE_BUNGEE_DIVING: + return "Bungee"; + case PHASE_DANCER_DANCING_IN: + return "Dancing"; + default: + return "Other"; + } } -const char* DebuggerWindow::PlantStateName(PlantState s) +const char *DebuggerWindow::PlantStateName(PlantState s) { - switch (s) - { - case STATE_NOTREADY: return "Not Ready"; - case STATE_READY: return "Ready"; - case STATE_DOINGSPECIAL: return "Special"; - case STATE_SQUASH_RISING: return "Squash Rise"; - case STATE_SQUASH_FALLING: return "Squash Fall"; - case STATE_CHOMPER_BITING: return "Chomper Bite"; - case STATE_POTATO_ARMED: return "Potato Armed"; - case STATE_COBCANNON_READY: return "CobReady"; - case STATE_COBCANNON_FIRING:return "CobFiring"; - default: return "Other"; - } + switch (s) + { + case STATE_NOTREADY: + return "Not Ready"; + case STATE_READY: + return "Ready"; + case STATE_DOINGSPECIAL: + return "Special"; + case STATE_SQUASH_RISING: + return "Squash Rise"; + case STATE_SQUASH_FALLING: + return "Squash Fall"; + case STATE_CHOMPER_BITING: + return "Chomper Bite"; + case STATE_POTATO_ARMED: + return "Potato Armed"; + case STATE_COBCANNON_READY: + return "CobReady"; + case STATE_COBCANNON_FIRING: + return "CobFiring"; + default: + return "Other"; + } } -const char* DebuggerWindow::DebugTextModeName(DebugTextMode m) +const char *DebuggerWindow::DebugTextModeName(DebugTextMode m) { - switch (m) - { - case DEBUG_TEXT_NONE: return "None"; - case DEBUG_TEXT_ZOMBIE_SPAWN: return "Zombie Spawn"; - case DEBUG_TEXT_MUSIC: return "Music"; - case DEBUG_TEXT_MEMORY: return "Memory"; - case DEBUG_TEXT_COLLISION: return "Collision"; - case DEBUG_TEXT_GRID: return "Grid"; + switch (m) + { + case DEBUG_TEXT_NONE: + return "None"; + case DEBUG_TEXT_ZOMBIE_SPAWN: + return "Zombie Spawn"; + case DEBUG_TEXT_MUSIC: + return "Music"; + case DEBUG_TEXT_MEMORY: + return "Memory"; + case DEBUG_TEXT_COLLISION: + return "Collision"; + case DEBUG_TEXT_GRID: + return "Grid"; #if LAWN_USE_UNFINISHED_GAMEPAD_SUPPORT - case DEBUG_TEXT_CONTROLLER: return "Controller"; + case DEBUG_TEXT_CONTROLLER: + return "Controller"; #endif - default: return "Other"; - } + default: + return "Other"; + } } -const char* DebuggerWindow::CoinTypeName(CoinType c) +const char *DebuggerWindow::CoinTypeName(CoinType c) { - switch (c) - { - case COIN_SILVER: return "Silver"; - case COIN_GOLD: return "Gold"; - case COIN_DIAMOND: return "Diamond"; - case COIN_SUN: return "Sun (50)"; - case COIN_SMALLSUN: return "Small Sun (15)"; - case COIN_LARGESUN: return "Large Sun (50)"; - default: return "Other"; - } + switch (c) + { + case COIN_SILVER: + return "Silver"; + case COIN_GOLD: + return "Gold"; + case COIN_DIAMOND: + return "Diamond"; + case COIN_SUN: + return "Sun (50)"; + case COIN_SMALLSUN: + return "Small Sun (15)"; + case COIN_LARGESUN: + return "Large Sun (50)"; + default: + return "Other"; + } } -const char* DebuggerWindow::CoinMotionName(CoinMotion m) +const char *DebuggerWindow::CoinMotionName(CoinMotion m) { - switch (m) - { - case COIN_MOTION_FROM_SKY: return "From Sky"; - case COIN_MOTION_FROM_SKY_SLOW: return "Sky Slow"; - case COIN_MOTION_FROM_PLANT: return "From Plant"; - case COIN_MOTION_COIN: return "Coin"; - case COIN_MOTION_LAWNMOWER_COIN:return "From Lawnmower"; - case COIN_MOTION_FROM_PRESENT: return "From Present"; - case COIN_MOTION_FROM_BOSS: return "From Boss"; - default: return "Other"; - } + switch (m) + { + case COIN_MOTION_FROM_SKY: + return "From Sky"; + case COIN_MOTION_FROM_SKY_SLOW: + return "Sky Slow"; + case COIN_MOTION_FROM_PLANT: + return "From Plant"; + case COIN_MOTION_COIN: + return "Coin"; + case COIN_MOTION_LAWNMOWER_COIN: + return "From Lawnmower"; + case COIN_MOTION_FROM_PRESENT: + return "From Present"; + case COIN_MOTION_FROM_BOSS: + return "From Boss"; + default: + return "Other"; + } } // ───────────────────────────────────────────────────────────── @@ -140,56 +198,72 @@ const char* DebuggerWindow::CoinMotionName(CoinMotion m) // ───────────────────────────────────────────────────────────── DebuggerWindow::DebuggerWindow(LawnApp *theApp) : ImGuiWindow(theApp->mImGuiManager) { - mApp = theApp; - mSelectedPlant = nullptr; - mQuickPlantSeedIdx = 0; - mQuickPlantCol = 0; - mQuickPlantRow = 0; - mSpawnZombieTypeIdx = 0; - mSpawnZombieRow = 0; - mWaveEditorWaveIdx = 0; - mAddSunAmount = 100; - mSpawnCoinType = (int)COIN_GOLD; - mSpawnCoinMotion = (int)COIN_MOTION_COIN; - mShowImGuiDemo = false; - mDebugDrawGrid = false; - mDebugDrawRects = false; - mFastLoadModeIdx = 0; + mApp = theApp; + mSelectedPlant = nullptr; + mQuickPlantSeedIdx = 0; + mQuickPlantCol = 0; + mQuickPlantRow = 0; + mSpawnZombieTypeIdx = 0; + mSpawnZombieRow = 0; + mWaveEditorWaveIdx = 0; + mAddSunAmount = 100; + mSpawnCoinType = (int)COIN_GOLD; + mSpawnCoinMotion = (int)COIN_MOTION_COIN; + mShowImGuiDemo = false; + mDebugDrawGrid = false; + mDebugDrawRects = false; + mFastLoadModeIdx = 0; } DebuggerWindow::~DebuggerWindow() { - ImGuiWindow::~ImGuiWindow(); + ImGuiWindow::~ImGuiWindow(); } - // ───────────────────────────────────────────────────────────── // Main Update // ───────────────────────────────────────────────────────────── void DebuggerWindow::Update() { - MTRand::gIgnoreAssert = true; - ImGui::Begin("LawnTools", nullptr, ImGuiWindowFlags_MenuBar); - - if (ImGui::BeginMenuBar()) - { - if (ImGui::BeginMenu("View")) - { - ImGui::MenuItem("ImGui Demo", nullptr, &mShowImGuiDemo); - ImGui::EndMenu(); - } - ImGui::EndMenuBar(); - } - if (mShowImGuiDemo) ImGui::ShowDemoWindow(&mShowImGuiDemo); - - if (ImGui::BeginTabBar("LawnTabs")) - { - if (ImGui::BeginTabItem("Board")) { DrawBoardTab(); ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("Save")) { DrawSaveFileTab(); ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("Debug")) { DrawDebugTab(); ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("App")) { DrawAppTab(); ImGui::EndTabItem(); } - ImGui::EndTabBar(); - } - ImGui::End(); + MTRand::gIgnoreAssert = true; + ImGui::Begin("LawnTools", nullptr, ImGuiWindowFlags_MenuBar); + + if (ImGui::BeginMenuBar()) + { + if (ImGui::BeginMenu("View")) + { + ImGui::MenuItem("ImGui Demo", nullptr, &mShowImGuiDemo); + ImGui::EndMenu(); + } + ImGui::EndMenuBar(); + } + if (mShowImGuiDemo) + ImGui::ShowDemoWindow(&mShowImGuiDemo); + + if (ImGui::BeginTabBar("LawnTabs")) + { + if (ImGui::BeginTabItem("Board")) + { + DrawBoardTab(); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Save")) + { + DrawSaveFileTab(); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Debug")) + { + DrawDebugTab(); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("App")) + { + DrawAppTab(); + ImGui::EndTabItem(); + } + ImGui::EndTabBar(); + } + ImGui::End(); MTRand::gIgnoreAssert = false; } @@ -198,63 +272,89 @@ void DebuggerWindow::Update() // ───────────────────────────────────────────────────────────── void DebuggerWindow::DrawBoardTab() { - if (mApp->mBoard == nullptr) { ImGui::TextDisabled("No board active"); return; } - - if (ImGui::BeginTabBar("BoardTabs")) - { - if (ImGui::BeginTabItem("Cheats")) { DrawBoardCheats(); ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("Plants")) { DrawBoardPlants(); ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("Zombies")) { DrawBoardZombies(); ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("Waves")) { DrawBoardWaves(); ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("Stats")) { DrawBoardStats(); ImGui::EndTabItem(); } - ImGui::EndTabBar(); - } + if (mApp->mBoard == nullptr) + { + ImGui::TextDisabled("No board active"); + return; + } + + if (ImGui::BeginTabBar("BoardTabs")) + { + if (ImGui::BeginTabItem("Cheats")) + { + DrawBoardCheats(); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Plants")) + { + DrawBoardPlants(); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Zombies")) + { + DrawBoardZombies(); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Waves")) + { + DrawBoardWaves(); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Stats")) + { + DrawBoardStats(); + ImGui::EndTabItem(); + } + ImGui::EndTabBar(); + } } -static const CoinType kCTypes[] = {COIN_SILVER, COIN_GOLD, COIN_DIAMOND, COIN_SUN, COIN_SMALLSUN, COIN_LARGESUN}; +static const CoinType kCTypes[] = { COIN_SILVER, COIN_GOLD, COIN_DIAMOND, COIN_SUN, COIN_SMALLSUN, COIN_LARGESUN }; -static const CoinMotion kCMotionTypes[] = {COIN_MOTION_FROM_SKY, COIN_MOTION_FROM_SKY_SLOW, COIN_MOTION_FROM_PLANT, - COIN_MOTION_COIN, COIN_MOTION_LAWNMOWER_COIN, COIN_MOTION_FROM_PRESENT, - COIN_MOTION_FROM_BOSS}; +static const CoinMotion kCMotionTypes[] = { COIN_MOTION_FROM_SKY, COIN_MOTION_FROM_SKY_SLOW, COIN_MOTION_FROM_PLANT, + COIN_MOTION_COIN, COIN_MOTION_LAWNMOWER_COIN, COIN_MOTION_FROM_PRESENT, + COIN_MOTION_FROM_BOSS }; // ───────────────────────────────────────────────────────────── // Cheats sub-tab // ───────────────────────────────────────────────────────────── void DebuggerWindow::DrawBoardCheats() { - Board* b = mApp->mBoard; - - // Sun - ImGui::SeparatorText("Sun / Economy"); - ImGui::SetNextItemWidth(120); - ImGui::InputInt("Sun Money", &b->mSunMoney); - ImGui::SameLine(); - ImGui::SetNextItemWidth(80); - ImGui::InputInt("##addamt", &mAddSunAmount); - ImGui::SameLine(); - if (ImGui::Button("+Sun")) - b->AddSunMoney(mAddSunAmount); - ImGui::SameLine(); - if (ImGui::Button("Max")) b->mSunMoney = 9990; - - // Spawn coin - ImGui::SetNextItemWidth(130); - { - const char* cPreview = CoinTypeName(kCTypes[mSpawnCoinType < 6 ? mSpawnCoinType : 0]); - if (ImGui::BeginCombo("Coin Type", cPreview)) - { - for (int i = 0; i < 6; i++) - { - bool sel = (mSpawnCoinType == i); - if (ImGui::Selectable(CoinTypeName(kCTypes[i]), sel)) mSpawnCoinType = i; - if (sel) ImGui::SetItemDefaultFocus(); - } - ImGui::EndCombo(); - } - - } - ImGui::SetNextItemWidth(130); - { + Board *b = mApp->mBoard; + + // Sun + ImGui::SeparatorText("Sun / Economy"); + ImGui::SetNextItemWidth(120); + ImGui::InputInt("Sun Money", &b->mSunMoney); + ImGui::SameLine(); + ImGui::SetNextItemWidth(80); + ImGui::InputInt("##addamt", &mAddSunAmount); + ImGui::SameLine(); + if (ImGui::Button("+Sun")) + b->AddSunMoney(mAddSunAmount); + ImGui::SameLine(); + if (ImGui::Button("Max")) + b->mSunMoney = 9990; + + // Spawn coin + ImGui::SetNextItemWidth(130); + { + const char *cPreview = CoinTypeName(kCTypes[mSpawnCoinType < 6 ? mSpawnCoinType : 0]); + if (ImGui::BeginCombo("Coin Type", cPreview)) + { + for (int i = 0; i < 6; i++) + { + bool sel = (mSpawnCoinType == i); + if (ImGui::Selectable(CoinTypeName(kCTypes[i]), sel)) + mSpawnCoinType = i; + if (sel) + ImGui::SetItemDefaultFocus(); + } + ImGui::EndCombo(); + } + } + ImGui::SetNextItemWidth(130); + { const char *motionPreview = CoinMotionName(kCMotionTypes[mSpawnCoinMotion < NUM_COIN_MOTIONS ? mSpawnCoinMotion : 0]); if (ImGui::BeginCombo("Motion Type", motionPreview)) { @@ -268,73 +368,88 @@ void DebuggerWindow::DrawBoardCheats() } ImGui::EndCombo(); } - } - - if (ImGui::Button("Spawn Coin")) - { + } + + if (ImGui::Button("Spawn Coin")) + { b->AddCoin(BOARD_WIDTH / 2, BOARD_HEIGHT / 2, kCTypes[mSpawnCoinType], kCMotionTypes[mSpawnCoinMotion]); - } - - // Cheat modes - ImGui::SeparatorText("Cheat Modes"); - bool mu = b->mMustacheMode; - if (ImGui::Checkbox("Mustache", &mu)) b->SetMustacheMode(mu); - ImGui::SameLine(); - bool sm = b->mSuperMowerMode; - if (ImGui::Checkbox("SuperMower", &sm)) b->SetSuperMowerMode(sm); - ImGui::SameLine(); - bool fu = b->mFutureMode; - if (ImGui::Checkbox("Future", &fu)) b->SetFutureMode(fu); - - bool pi = b->mPinataMode; - if (ImGui::Checkbox("Pinata", &pi)) b->SetPinataMode(pi); - ImGui::SameLine(); - bool da = b->mDanceMode; - if (ImGui::Checkbox("Dance", &da)) b->SetDanceMode(da); - ImGui::SameLine(); - bool di = b->mDaisyMode; - if (ImGui::Checkbox("Daisy", &di)) b->SetDaisyMode(di); - ImGui::SameLine(); - bool su = b->mSukhbirMode; - if (ImGui::Checkbox("Sukhbir", &su)) b->SetSukhbirMode(su); - - // Time / Flow controls - ImGui::SeparatorText("Time Control"); - - bool paused = b->mPaused; - if (ImGui::Checkbox("Paused", &paused)) b->Pause(paused); - - // Fog - ImGui::SeparatorText("Fog"); - if (b->StageHasFog()) - { - ImGui::SliderFloat("Fog Offset", &b->mFogOffset, -200.0f, 800.0f); - if (ImGui::Button("Blow All Fog")) b->mFogBlownCountDown = 4000; - } - else ImGui::TextDisabled("(no fog on this level)"); - - // Actions - ImGui::SeparatorText("Actions"); - if (ImGui::Button("Kill All Zombies")) b->RemoveAllZombies(); - ImGui::SameLine(); - if (ImGui::Button("End Level")) mApp->EndLevel(); - ImGui::SameLine(); - if (ImGui::Button("Fade Out Level")) b->FadeOutLevel(); - - if (ImGui::Button("Skip to Last Wave")) - { - b->mCurrentWave = b->mNumWaves - 1; - b->mZombieCountDown = 1; - } - ImGui::SameLine(); - if (ImGui::Button("Trigger Huge Wave")) b->mHugeWaveCountDown = 1; - - ImGui::SetNextItemWidth(120); - ImGui::InputInt("Bonus Mowers", &b->mBonusLawnMowersRemaining); - ImGui::InputInt("Time Stop Ctr", &b->mTimeStopCounter); - ImGui::InputInt("Shake (X)", &b->mShakeAmountX); - ImGui::InputInt("Shake (Y)", &b->mShakeAmountY); - if (ImGui::Button("Do Shake")) b->ShakeBoard(b->mShakeAmountX, b->mShakeAmountY); + } + + // Cheat modes + ImGui::SeparatorText("Cheat Modes"); + bool mu = b->mMustacheMode; + if (ImGui::Checkbox("Mustache", &mu)) + b->SetMustacheMode(mu); + ImGui::SameLine(); + bool sm = b->mSuperMowerMode; + if (ImGui::Checkbox("SuperMower", &sm)) + b->SetSuperMowerMode(sm); + ImGui::SameLine(); + bool fu = b->mFutureMode; + if (ImGui::Checkbox("Future", &fu)) + b->SetFutureMode(fu); + + bool pi = b->mPinataMode; + if (ImGui::Checkbox("Pinata", &pi)) + b->SetPinataMode(pi); + ImGui::SameLine(); + bool da = b->mDanceMode; + if (ImGui::Checkbox("Dance", &da)) + b->SetDanceMode(da); + ImGui::SameLine(); + bool di = b->mDaisyMode; + if (ImGui::Checkbox("Daisy", &di)) + b->SetDaisyMode(di); + ImGui::SameLine(); + bool su = b->mSukhbirMode; + if (ImGui::Checkbox("Sukhbir", &su)) + b->SetSukhbirMode(su); + + // Time / Flow controls + ImGui::SeparatorText("Time Control"); + + bool paused = b->mPaused; + if (ImGui::Checkbox("Paused", &paused)) + b->Pause(paused); + + // Fog + ImGui::SeparatorText("Fog"); + if (b->StageHasFog()) + { + ImGui::SliderFloat("Fog Offset", &b->mFogOffset, -200.0f, 800.0f); + if (ImGui::Button("Blow All Fog")) + b->mFogBlownCountDown = 4000; + } + else + ImGui::TextDisabled("(no fog on this level)"); + + // Actions + ImGui::SeparatorText("Actions"); + if (ImGui::Button("Kill All Zombies")) + b->RemoveAllZombies(); + ImGui::SameLine(); + if (ImGui::Button("End Level")) + mApp->EndLevel(); + ImGui::SameLine(); + if (ImGui::Button("Fade Out Level")) + b->FadeOutLevel(); + + if (ImGui::Button("Skip to Last Wave")) + { + b->mCurrentWave = b->mNumWaves - 1; + b->mZombieCountDown = 1; + } + ImGui::SameLine(); + if (ImGui::Button("Trigger Huge Wave")) + b->mHugeWaveCountDown = 1; + + ImGui::SetNextItemWidth(120); + ImGui::InputInt("Bonus Mowers", &b->mBonusLawnMowersRemaining); + ImGui::InputInt("Time Stop Ctr", &b->mTimeStopCounter); + ImGui::InputInt("Shake (X)", &b->mShakeAmountX); + ImGui::InputInt("Shake (Y)", &b->mShakeAmountY); + if (ImGui::Button("Do Shake")) + b->ShakeBoard(b->mShakeAmountX, b->mShakeAmountY); } // ───────────────────────────────────────────────────────────── @@ -342,487 +457,553 @@ void DebuggerWindow::DrawBoardCheats() // ───────────────────────────────────────────────────────────── void DebuggerWindow::DrawBoardPlants() { - Board* b = mApp->mBoard; - - // Quick Plant - ImGui::SeparatorText("Quick Plant"); - { - // Seed combo - static char sSeedFilter[64] = ""; - ImGui::SetNextItemWidth(160); - const char* seedPreview = SeedTypeName(mQuickPlantSeedIdx); - if (ImGui::BeginCombo("Seed##qp", seedPreview)) - { - ImGui::InputText("Filter", sSeedFilter, sizeof(sSeedFilter)); - for (int i = 0; i < (int)SeedType::NUM_SEED_TYPES; i++) - { - const char* name = SeedTypeName(i); - if (sSeedFilter[0] != '\0' && strstr(name, sSeedFilter) == nullptr) continue; - bool sel = (mQuickPlantSeedIdx == i); - if (ImGui::Selectable(name, sel)) mQuickPlantSeedIdx = i; - if (sel) ImGui::SetItemDefaultFocus(); - } - ImGui::EndCombo(); - } - ImGui::SameLine(); - ImGui::SetNextItemWidth(60); - ImGui::InputInt("Col##qp", &mQuickPlantCol); - mQuickPlantCol = std::max(0, std::min(mQuickPlantCol, MAX_GRID_SIZE_X - 1)); - ImGui::SameLine(); - ImGui::SetNextItemWidth(60); - ImGui::InputInt("Row##qp", &mQuickPlantRow); - mQuickPlantRow = std::max(0, std::min(mQuickPlantRow, MAX_GRID_SIZE_Y - 1)); - ImGui::SameLine(); - if (ImGui::Button("Plant!")) - b->AddPlant(mQuickPlantCol, mQuickPlantRow, (SeedType)mQuickPlantSeedIdx); - } - - // Plant inspector table - ImGui::SeparatorText("Plant Inspector"); - if (mApp->mBoard->mDebugSelectedPlant) - { - Plant* p = mApp->mBoard->mDebugSelectedPlant; - ImGui::Text("Selected: %s Col=%d Row=%d", SeedTypeName(p->mSeedType), p->mPlantCol, p->mRow); - ImGui::PushID("selplant"); - - int hp = p->mPlantHealth; - if (ImGui::InputInt("HP", &hp)) p->mPlantHealth = std::max(0, hp); - ImGui::SameLine(); - if (ImGui::Button("Full HP")) p->mPlantHealth = p->mPlantMaxHealth; - - ImGui::InputInt("Max HP", &p->mPlantMaxHealth); - ImGui::InputInt("Launch Rate", &p->mLaunchRate); - ImGui::InputInt("State Countdown", &p->mStateCountdown); - ImGui::Checkbox("Is Asleep", &p->mIsAsleep); - ImGui::SameLine(); - ImGui::Checkbox("Squished", &p->mSquished); - ImGui::SameLine(); - ImGui::Checkbox("Dead", &p->mDead); - - if (ImGui::Button("Kill Plant")) p->Die(); - ImGui::SameLine(); - if (ImGui::Button("Squish Plant")) p->Squish(); - ImGui::SameLine(); - if (ImGui::Button("Do Special")) p->DoSpecial(); - ImGui::SameLine(); - if (ImGui::Button("Deselect")) mApp->mBoard->mDebugSelectedPlant = nullptr; - ImGui::PopID(); - ImGui::Separator(); - } - - // Table of all plants - ImGui::Text("Total Plants: %d", b->mPlants.mSize); - if (ImGui::BeginTable("PlantTable", 7, - ImGuiTableFlags_Borders | ImGuiTableFlags_ScrollY | ImGuiTableFlags_RowBg)) - { - ImGui::TableSetupScrollFreeze(0, 1); - ImGui::TableSetupColumn("Type"); - ImGui::TableSetupColumn("Col"); - ImGui::TableSetupColumn("Row"); - ImGui::TableSetupColumn("HP"); - ImGui::TableSetupColumn("MaxHP"); - ImGui::TableSetupColumn("State"); - ImGui::TableSetupColumn("Action"); - ImGui::TableHeadersRow(); - - Plant* aPlant = nullptr; - int idx = 0; - while (b->IteratePlants(aPlant)) - { - ImGui::PushID(idx++); - ImGui::TableNextRow(); - ImGui::TableSetColumnIndex(0); ImGui::TextUnformatted(SeedTypeName(aPlant->mSeedType)); - ImGui::TableSetColumnIndex(1); ImGui::Text("%d", aPlant->mPlantCol); - ImGui::TableSetColumnIndex(2); ImGui::Text("%d", aPlant->mRow); - ImGui::TableSetColumnIndex(3); - { - int hp = aPlant->mPlantHealth; - ImGui::SetNextItemWidth(70); - if (ImGui::InputInt("##hp", &hp)) aPlant->mPlantHealth = std::max(0, hp); - } - ImGui::TableSetColumnIndex(4); ImGui::Text("%d", aPlant->mPlantMaxHealth); - ImGui::TableSetColumnIndex(5); ImGui::TextUnformatted(PlantStateName(aPlant->mState)); - ImGui::TableSetColumnIndex(6); - if (ImGui::SmallButton("Select")) - { - b->mDebugSelectedPlant = aPlant; - mSelectedPlant = aPlant; - } - ImGui::SameLine(); - if (ImGui::SmallButton("Kill")) aPlant->Die(); - ImGui::SameLine(); - if (ImGui::SmallButton("Heal")) aPlant->mPlantHealth = aPlant->mPlantMaxHealth; - ImGui::PopID(); - } - ImGui::EndTable(); - } - - ImGui::Separator(); - if (ImGui::Button("Kill ALL Plants")) - { - Plant* aP = nullptr; - while (b->IteratePlants(aP)) aP->Die(); - } - ImGui::SameLine(); - if (ImGui::Button("Heal ALL Plants")) - { - Plant* aP = nullptr; - while (b->IteratePlants(aP)) aP->mPlantHealth = aP->mPlantMaxHealth; - } + Board *b = mApp->mBoard; + + // Quick Plant + ImGui::SeparatorText("Quick Plant"); + { + // Seed combo + static char sSeedFilter[64] = ""; + ImGui::SetNextItemWidth(160); + const char *seedPreview = SeedTypeName(mQuickPlantSeedIdx); + if (ImGui::BeginCombo("Seed##qp", seedPreview)) + { + ImGui::InputText("Filter", sSeedFilter, sizeof(sSeedFilter)); + for (int i = 0; i < (int)SeedType::NUM_SEED_TYPES; i++) + { + const char *name = SeedTypeName(i); + if (sSeedFilter[0] != '\0' && strstr(name, sSeedFilter) == nullptr) + continue; + bool sel = (mQuickPlantSeedIdx == i); + if (ImGui::Selectable(name, sel)) + mQuickPlantSeedIdx = i; + if (sel) + ImGui::SetItemDefaultFocus(); + } + ImGui::EndCombo(); + } + ImGui::SameLine(); + ImGui::SetNextItemWidth(60); + ImGui::InputInt("Col##qp", &mQuickPlantCol); + mQuickPlantCol = std::max(0, std::min(mQuickPlantCol, MAX_GRID_SIZE_X - 1)); + ImGui::SameLine(); + ImGui::SetNextItemWidth(60); + ImGui::InputInt("Row##qp", &mQuickPlantRow); + mQuickPlantRow = std::max(0, std::min(mQuickPlantRow, MAX_GRID_SIZE_Y - 1)); + ImGui::SameLine(); + if (ImGui::Button("Plant!")) + b->AddPlant(mQuickPlantCol, mQuickPlantRow, (SeedType)mQuickPlantSeedIdx); + } + + // Plant inspector table + ImGui::SeparatorText("Plant Inspector"); + if (mApp->mBoard->mDebugSelectedPlant) + { + Plant *p = mApp->mBoard->mDebugSelectedPlant; + ImGui::Text("Selected: %s Col=%d Row=%d", SeedTypeName(p->mSeedType), p->mPlantCol, p->mRow); + ImGui::PushID("selplant"); + + int hp = p->mPlantHealth; + if (ImGui::InputInt("HP", &hp)) + p->mPlantHealth = std::max(0, hp); + ImGui::SameLine(); + if (ImGui::Button("Full HP")) + p->mPlantHealth = p->mPlantMaxHealth; + + ImGui::InputInt("Max HP", &p->mPlantMaxHealth); + ImGui::InputInt("Launch Rate", &p->mLaunchRate); + ImGui::InputInt("State Countdown", &p->mStateCountdown); + ImGui::Checkbox("Is Asleep", &p->mIsAsleep); + ImGui::SameLine(); + ImGui::Checkbox("Squished", &p->mSquished); + ImGui::SameLine(); + ImGui::Checkbox("Dead", &p->mDead); + + if (ImGui::Button("Kill Plant")) + p->Die(); + ImGui::SameLine(); + if (ImGui::Button("Squish Plant")) + p->Squish(); + ImGui::SameLine(); + if (ImGui::Button("Do Special")) + p->DoSpecial(); + ImGui::SameLine(); + if (ImGui::Button("Deselect")) + mApp->mBoard->mDebugSelectedPlant = nullptr; + ImGui::PopID(); + ImGui::Separator(); + } + + // Table of all plants + ImGui::Text("Total Plants: %d", b->mPlants.mSize); + if (ImGui::BeginTable("PlantTable", 7, + ImGuiTableFlags_Borders | ImGuiTableFlags_ScrollY | ImGuiTableFlags_RowBg)) + { + ImGui::TableSetupScrollFreeze(0, 1); + ImGui::TableSetupColumn("Type"); + ImGui::TableSetupColumn("Col"); + ImGui::TableSetupColumn("Row"); + ImGui::TableSetupColumn("HP"); + ImGui::TableSetupColumn("MaxHP"); + ImGui::TableSetupColumn("State"); + ImGui::TableSetupColumn("Action"); + ImGui::TableHeadersRow(); + + Plant *aPlant = nullptr; + int idx = 0; + while (b->IteratePlants(aPlant)) + { + ImGui::PushID(idx++); + ImGui::TableNextRow(); + ImGui::TableSetColumnIndex(0); + ImGui::TextUnformatted(SeedTypeName(aPlant->mSeedType)); + ImGui::TableSetColumnIndex(1); + ImGui::Text("%d", aPlant->mPlantCol); + ImGui::TableSetColumnIndex(2); + ImGui::Text("%d", aPlant->mRow); + ImGui::TableSetColumnIndex(3); + { + int hp = aPlant->mPlantHealth; + ImGui::SetNextItemWidth(70); + if (ImGui::InputInt("##hp", &hp)) + aPlant->mPlantHealth = std::max(0, hp); + } + ImGui::TableSetColumnIndex(4); + ImGui::Text("%d", aPlant->mPlantMaxHealth); + ImGui::TableSetColumnIndex(5); + ImGui::TextUnformatted(PlantStateName(aPlant->mState)); + ImGui::TableSetColumnIndex(6); + if (ImGui::SmallButton("Select")) + { + b->mDebugSelectedPlant = aPlant; + mSelectedPlant = aPlant; + } + ImGui::SameLine(); + if (ImGui::SmallButton("Kill")) + aPlant->Die(); + ImGui::SameLine(); + if (ImGui::SmallButton("Heal")) + aPlant->mPlantHealth = aPlant->mPlantMaxHealth; + ImGui::PopID(); + } + ImGui::EndTable(); + } + + ImGui::Separator(); + if (ImGui::Button("Kill ALL Plants")) + { + Plant *aP = nullptr; + while (b->IteratePlants(aP)) + aP->Die(); + } + ImGui::SameLine(); + if (ImGui::Button("Heal ALL Plants")) + { + Plant *aP = nullptr; + while (b->IteratePlants(aP)) + aP->mPlantHealth = aP->mPlantMaxHealth; + } } // ─── Zombies ───────────────────────────────────────────────── void DebuggerWindow::DrawBoardZombies() { - Board* b = mApp->mBoard; - - ImGui::SeparatorText("Debug Spawn"); - { - static char sZFilter[64] = ""; - ImGui::SetNextItemWidth(180); - const char* zPrev = ZombieTypeName(mSpawnZombieTypeIdx); - if (ImGui::BeginCombo("Type##zsp", zPrev)) - { - ImGui::InputText("Filter##zf", sZFilter, sizeof(sZFilter)); - for (int i = 0; i < (int)ZombieType::NUM_ZOMBIE_TYPES; i++) - { - const char* n = ZombieTypeName(i); - if (sZFilter[0] && !strstr(n, sZFilter)) continue; - bool s = (mSpawnZombieTypeIdx == i); - if (ImGui::Selectable(n, s)) mSpawnZombieTypeIdx = i; - if (s) ImGui::SetItemDefaultFocus(); - } - ImGui::EndCombo(); - } - ImGui::SameLine(); - ImGui::SetNextItemWidth(60); - ImGui::InputInt("Row##zsp", &mSpawnZombieRow); - mSpawnZombieRow = std::max(0, std::min(mSpawnZombieRow, MAX_GRID_SIZE_Y-1)); - ImGui::SameLine(); - if (ImGui::Button("Spawn##z")) - b->AddZombieInRow((ZombieType)mSpawnZombieTypeIdx, mSpawnZombieRow, Zombie::ZOMBIE_WAVE_DEBUG); - ImGui::SameLine(); - if (ImGui::Button("Kill All##z")) b->RemoveAllZombies(); - } - - // Selected zombie inspector - ImGui::SeparatorText("Selected Zombie"); - if (b->mDebugSelectedZombie) - { - Zombie* z = b->mDebugSelectedZombie; - ZombieDefinition def = GetZombieDefinition(z->mZombieType); - ImGui::Text("%s | Row %d | Wave %d", def.mZombieName, z->mRow, z->mFromWave); - ImGui::Text("Pos: %.1f, %.1f Vel: %.2f", z->mPosX, z->mPosY, z->mVelX); - ImGui::Text("Phase: %s", ZombiePhaseName(z->mZombiePhase)); - ImGui::PushID("selz"); - - ImGui::InputInt("Body HP", &z->mBodyHealth); - ImGui::SameLine(); - if (ImGui::Button("Full")) z->mBodyHealth = z->mBodyMaxHealth; - if (z->mHelmType != HELMTYPE_NONE) ImGui::InputInt("Helm HP", &z->mHelmHealth); - if (z->mShieldType != SHIELDTYPE_NONE) ImGui::InputInt("Shield HP", &z->mShieldHealth); - - ImGui::InputInt("Chilled", &z->mChilledCounter); - ImGui::InputInt("Buttered", &z->mButteredCounter); - ImGui::Checkbox("MindControl", &z->mMindControlled); - ImGui::SameLine(); - ImGui::Checkbox("InPool", &z->mInPool); - ImGui::SameLine(); - ImGui::Checkbox("BlowAway", &z->mBlowingAway); - - ImGui::SliderFloat("Scale", &z->mScaleZombie, 0.1f, 5.0f); - ImGui::SliderFloat("VelX", &z->mVelX, -5.0f, 0.0f); - - if (ImGui::Button("Chill")) z->ApplyChill(false); - ImGui::SameLine(); - if (ImGui::Button("Butter")) z->ApplyButter(); - ImGui::SameLine(); - if (ImGui::Button("Burn")) z->ApplyBurn(); - ImGui::SameLine(); - if (ImGui::Button("Kill (Loot)")) z->DieWithLoot(); - ImGui::SameLine(); - if (ImGui::Button("Kill (No Loot)"))z->DieNoLoot(); - ImGui::SameLine(); - if (ImGui::Button("Deselect")) b->mDebugSelectedZombie = nullptr; - - ImGui::PopID(); - ImGui::Separator(); - } - else ImGui::TextDisabled("Click a zombie in-game to select it"); - - // Zombie list table - ImGui::SeparatorText("All Zombies"); - ImGui::Text("Count: %d", b->mZombies.mSize); - if (ImGui::BeginTable("ZTable", 6, - ImGuiTableFlags_Borders|ImGuiTableFlags_ScrollY|ImGuiTableFlags_RowBg, - ImVec2(0,220))) - { - ImGui::TableSetupScrollFreeze(0,1); - ImGui::TableSetupColumn("Type"); ImGui::TableSetupColumn("Row"); - ImGui::TableSetupColumn("BodyHP"); ImGui::TableSetupColumn("Phase"); - ImGui::TableSetupColumn("Chill"); ImGui::TableSetupColumn("Act"); - ImGui::TableHeadersRow(); - Zombie* z = nullptr; int idx=0; - while (b->IterateZombies(z)) - { - ImGui::PushID(idx++); - ImGui::TableNextRow(); - ImGui::TableSetColumnIndex(0); ImGui::TextUnformatted(ZombieTypeName(z->mZombieType)); - ImGui::TableSetColumnIndex(1); ImGui::Text("%d", z->mRow); - ImGui::TableSetColumnIndex(2); - { - int hp=z->mBodyHealth; - ImGui::SetNextItemWidth(55); - if(ImGui::InputInt("##bh",&hp)) z->mBodyHealth=hp; - } - ImGui::TableSetColumnIndex(3); ImGui::TextUnformatted(ZombiePhaseName(z->mZombiePhase)); - ImGui::TableSetColumnIndex(4); ImGui::Text("%d",z->mChilledCounter); - ImGui::TableSetColumnIndex(5); - if(ImGui::SmallButton("Sel")) b->mDebugSelectedZombie=z; - ImGui::SameLine(); - if(ImGui::SmallButton("Kill")) z->DieWithLoot(); - ImGui::PopID(); - } - ImGui::EndTable(); - } + Board *b = mApp->mBoard; + + ImGui::SeparatorText("Debug Spawn"); + { + static char sZFilter[64] = ""; + ImGui::SetNextItemWidth(180); + const char *zPrev = ZombieTypeName(mSpawnZombieTypeIdx); + if (ImGui::BeginCombo("Type##zsp", zPrev)) + { + ImGui::InputText("Filter##zf", sZFilter, sizeof(sZFilter)); + for (int i = 0; i < (int)ZombieType::NUM_ZOMBIE_TYPES; i++) + { + const char *n = ZombieTypeName(i); + if (sZFilter[0] && !strstr(n, sZFilter)) + continue; + bool s = (mSpawnZombieTypeIdx == i); + if (ImGui::Selectable(n, s)) + mSpawnZombieTypeIdx = i; + if (s) + ImGui::SetItemDefaultFocus(); + } + ImGui::EndCombo(); + } + ImGui::SameLine(); + ImGui::SetNextItemWidth(60); + ImGui::InputInt("Row##zsp", &mSpawnZombieRow); + mSpawnZombieRow = std::max(0, std::min(mSpawnZombieRow, MAX_GRID_SIZE_Y - 1)); + ImGui::SameLine(); + if (ImGui::Button("Spawn##z")) + b->AddZombieInRow((ZombieType)mSpawnZombieTypeIdx, mSpawnZombieRow, Zombie::ZOMBIE_WAVE_DEBUG); + ImGui::SameLine(); + if (ImGui::Button("Kill All##z")) + b->RemoveAllZombies(); + } + + // Selected zombie inspector + ImGui::SeparatorText("Selected Zombie"); + if (b->mDebugSelectedZombie) + { + Zombie *z = b->mDebugSelectedZombie; + ZombieDefinition def = GetZombieDefinition(z->mZombieType); + ImGui::Text("%s | Row %d | Wave %d", def.mZombieName, z->mRow, z->mFromWave); + ImGui::Text("Pos: %.1f, %.1f Vel: %.2f", z->mPosX, z->mPosY, z->mVelX); + ImGui::Text("Phase: %s", ZombiePhaseName(z->mZombiePhase)); + ImGui::PushID("selz"); + + ImGui::InputInt("Body HP", &z->mBodyHealth); + ImGui::SameLine(); + if (ImGui::Button("Full")) + z->mBodyHealth = z->mBodyMaxHealth; + if (z->mHelmType != HELMTYPE_NONE) + ImGui::InputInt("Helm HP", &z->mHelmHealth); + if (z->mShieldType != SHIELDTYPE_NONE) + ImGui::InputInt("Shield HP", &z->mShieldHealth); + + ImGui::InputInt("Chilled", &z->mChilledCounter); + ImGui::InputInt("Buttered", &z->mButteredCounter); + ImGui::Checkbox("MindControl", &z->mMindControlled); + ImGui::SameLine(); + ImGui::Checkbox("InPool", &z->mInPool); + ImGui::SameLine(); + ImGui::Checkbox("BlowAway", &z->mBlowingAway); + + ImGui::SliderFloat("Scale", &z->mScaleZombie, 0.1f, 5.0f); + ImGui::SliderFloat("VelX", &z->mVelX, -5.0f, 0.0f); + + if (ImGui::Button("Chill")) + z->ApplyChill(false); + ImGui::SameLine(); + if (ImGui::Button("Butter")) + z->ApplyButter(); + ImGui::SameLine(); + if (ImGui::Button("Burn")) + z->ApplyBurn(); + ImGui::SameLine(); + if (ImGui::Button("Kill (Loot)")) + z->DieWithLoot(); + ImGui::SameLine(); + if (ImGui::Button("Kill (No Loot)")) + z->DieNoLoot(); + ImGui::SameLine(); + if (ImGui::Button("Deselect")) + b->mDebugSelectedZombie = nullptr; + + ImGui::PopID(); + ImGui::Separator(); + } + else + ImGui::TextDisabled("Click a zombie in-game to select it"); + + // Zombie list table + ImGui::SeparatorText("All Zombies"); + ImGui::Text("Count: %d", b->mZombies.mSize); + if (ImGui::BeginTable("ZTable", 6, + ImGuiTableFlags_Borders | ImGuiTableFlags_ScrollY | ImGuiTableFlags_RowBg, + ImVec2(0, 220))) + { + ImGui::TableSetupScrollFreeze(0, 1); + ImGui::TableSetupColumn("Type"); + ImGui::TableSetupColumn("Row"); + ImGui::TableSetupColumn("BodyHP"); + ImGui::TableSetupColumn("Phase"); + ImGui::TableSetupColumn("Chill"); + ImGui::TableSetupColumn("Act"); + ImGui::TableHeadersRow(); + Zombie *z = nullptr; + int idx = 0; + while (b->IterateZombies(z)) + { + ImGui::PushID(idx++); + ImGui::TableNextRow(); + ImGui::TableSetColumnIndex(0); + ImGui::TextUnformatted(ZombieTypeName(z->mZombieType)); + ImGui::TableSetColumnIndex(1); + ImGui::Text("%d", z->mRow); + ImGui::TableSetColumnIndex(2); + { + int hp = z->mBodyHealth; + ImGui::SetNextItemWidth(55); + if (ImGui::InputInt("##bh", &hp)) + z->mBodyHealth = hp; + } + ImGui::TableSetColumnIndex(3); + ImGui::TextUnformatted(ZombiePhaseName(z->mZombiePhase)); + ImGui::TableSetColumnIndex(4); + ImGui::Text("%d", z->mChilledCounter); + ImGui::TableSetColumnIndex(5); + if (ImGui::SmallButton("Sel")) + b->mDebugSelectedZombie = z; + ImGui::SameLine(); + if (ImGui::SmallButton("Kill")) + z->DieWithLoot(); + ImGui::PopID(); + } + ImGui::EndTable(); + } } // ─── Wave editor ───────────────────────────────────────────── void DebuggerWindow::DrawBoardWaves() { - Board* b = mApp->mBoard; - ImGui::Text("Waves: %d Current: %d Spawned: %d", - b->mNumWaves, b->mCurrentWave, b->mTotalSpawnedWaves); - - ImGui::InputInt("ZombieCountDown", &b->mZombieCountDown); - ImGui::SameLine(); - if (ImGui::Button("Trigger Next")) b->mZombieCountDown=1; - - ImGui::InputInt("HugeWaveCountDown",&b->mHugeWaveCountDown); - ImGui::Separator(); - - // Wave selector - ImGui::SetNextItemWidth(120); - ImGui::SliderInt("Edit Wave##we", &mWaveEditorWaveIdx, 0, b->mNumWaves-1); - - int wi = mWaveEditorWaveIdx; - if (wi >= 0 && wi < b->mNumWaves) - { - ImGui::Text("Wave %d (%d zombies)", wi, b->NumberZombiesInWave(wi)); - if (ImGui::BeginTable("WaveTable", 2, - ImGuiTableFlags_Borders|ImGuiTableFlags_ScrollY|ImGuiTableFlags_RowBg, - ImVec2(0,200))) - { - ImGui::TableSetupColumn("Slot"); ImGui::TableSetupColumn("Type"); - ImGui::TableHeadersRow(); - for (int s=0; smZombiesInWave[wi][s]; - if (zt == ZOMBIE_INVALID) break; - ImGui::PushID(s); - ImGui::TableNextRow(); - ImGui::TableSetColumnIndex(0); ImGui::Text("%d", s); - ImGui::TableSetColumnIndex(1); - { - int cur=(int)zt; - ImGui::SetNextItemWidth(160); - if (ImGui::BeginCombo("##wzt", ZombieTypeName(cur))) - { - for(int t=0;t<(int)ZombieType::NUM_ZOMBIE_TYPES;t++) - { - bool sel=(cur==t); - if(ImGui::Selectable(ZombieTypeName(t),sel)) - b->mZombiesInWave[wi][s]=(ZombieType)t; - if(sel) ImGui::SetItemDefaultFocus(); - } - ImGui::EndCombo(); - } - ImGui::SameLine(); - if(ImGui::SmallButton("Spawn Now")) - b->AddZombieInRow((ZombieType)b->mZombiesInWave[wi][s], - b->PickRowForNewZombie((ZombieType)b->mZombiesInWave[wi][s]), - Zombie::ZOMBIE_WAVE_DEBUG); - } - ImGui::PopID(); - } - ImGui::EndTable(); - } - } + Board *b = mApp->mBoard; + ImGui::Text("Waves: %d Current: %d Spawned: %d", + b->mNumWaves, b->mCurrentWave, b->mTotalSpawnedWaves); + + ImGui::InputInt("ZombieCountDown", &b->mZombieCountDown); + ImGui::SameLine(); + if (ImGui::Button("Trigger Next")) + b->mZombieCountDown = 1; + + ImGui::InputInt("HugeWaveCountDown", &b->mHugeWaveCountDown); + ImGui::Separator(); + + // Wave selector + ImGui::SetNextItemWidth(120); + ImGui::SliderInt("Edit Wave##we", &mWaveEditorWaveIdx, 0, b->mNumWaves - 1); + + int wi = mWaveEditorWaveIdx; + if (wi >= 0 && wi < b->mNumWaves) + { + ImGui::Text("Wave %d (%d zombies)", wi, b->NumberZombiesInWave(wi)); + if (ImGui::BeginTable("WaveTable", 2, + ImGuiTableFlags_Borders | ImGuiTableFlags_ScrollY | ImGuiTableFlags_RowBg, + ImVec2(0, 200))) + { + ImGui::TableSetupColumn("Slot"); + ImGui::TableSetupColumn("Type"); + ImGui::TableHeadersRow(); + for (int s = 0; s < MAX_ZOMBIES_IN_WAVE; s++) + { + ZombieType zt = b->mZombiesInWave[wi][s]; + if (zt == ZOMBIE_INVALID) + break; + ImGui::PushID(s); + ImGui::TableNextRow(); + ImGui::TableSetColumnIndex(0); + ImGui::Text("%d", s); + ImGui::TableSetColumnIndex(1); + { + int cur = (int)zt; + ImGui::SetNextItemWidth(160); + if (ImGui::BeginCombo("##wzt", ZombieTypeName(cur))) + { + for (int t = 0; t < (int)ZombieType::NUM_ZOMBIE_TYPES; t++) + { + bool sel = (cur == t); + if (ImGui::Selectable(ZombieTypeName(t), sel)) + b->mZombiesInWave[wi][s] = (ZombieType)t; + if (sel) + ImGui::SetItemDefaultFocus(); + } + ImGui::EndCombo(); + } + ImGui::SameLine(); + if (ImGui::SmallButton("Spawn Now")) + b->AddZombieInRow((ZombieType)b->mZombiesInWave[wi][s], + b->PickRowForNewZombie((ZombieType)b->mZombiesInWave[wi][s]), + Zombie::ZOMBIE_WAVE_DEBUG); + } + ImGui::PopID(); + } + ImGui::EndTable(); + } + } } // ─── Stats ─────────────────────────────────────────────────── void DebuggerWindow::DrawBoardStats() { - Board* b = mApp->mBoard; - ImGui::SeparatorText("Game Objects"); - ImGui::Text("Plants: %d", b->mPlants.mSize); - ImGui::Text("Zombies: %d", b->mZombies.mSize); - ImGui::Text("Projectiles: %d", b->mProjectiles.mSize); - ImGui::Text("Coins: %d", b->mCoins.mSize); - ImGui::Text("Mowers: %d", b->mLawnMowers.mSize); - ImGui::Text("Grid Items: %d", b->mGridItems.mSize); - - ImGui::SeparatorText("Effects"); - ImGui::Text("Reanimations: %d", mApp->mEffectSystem->mReanimationHolder->mReanimations.mSize); - ImGui::Text("Particle Systems:%d", mApp->mEffectSystem->mParticleHolder->mParticleSystems.mSize); - ImGui::Text("Particles: %d", mApp->mEffectSystem->mParticleHolder->mParticles.mSize); - ImGui::Text("Trails: %d", mApp->mEffectSystem->mTrailHolder->mTrails.mSize); - ImGui::Text("Attachments: %d", mApp->mEffectSystem->mAttachmentHolder->mAttachments.mSize); - - ImGui::SeparatorText("Counters"); - ImGui::Text("Sun Money: %d", b->mSunMoney); - ImGui::Text("Sun Count Down: %d", b->mSunCountDown); - ImGui::Text("Suns Fallen: %d", b->mNumSunsFallen); - ImGui::Text("Wave: %d / %d", b->mCurrentWave, b->mNumWaves); - ImGui::Text("Total Spawned: %d", b->mTotalSpawnedWaves); - int activeSecs = b->mPlayTimeActiveLevel / 100; - ImGui::Text("Play Time Active: %02d:%02d", activeSecs/60, activeSecs%60); - ImGui::Text("Main Counter: %d", b->mMainCounter); - ImGui::Text("Min FPS: %.1f", b->mMinFPS); - ImGui::Text("Draw Count: %d", b->mDrawCount); - - ImGui::SeparatorText("Session Stats"); - ImGui::Text("Graves Cleared: %d", b->mGravesCleared); - ImGui::Text("Plants Eaten: %d", b->mPlantsEaten); - ImGui::Text("Plants Shoveled: %d", b->mPlantsShoveled); - ImGui::Text("Coins Collected: %d", b->mCoinsCollected); - ImGui::Text("Diamonds: %d", b->mDiamondsCollected); - ImGui::Text("Gargantuars CC: %d", b->mGargantuarsKillsByCornCob); - ImGui::Text("Triggered Mowers: %d", b->mTriggeredLawnMowers); - - ImGui::Separator(); - if (ImGui::Button("Reset Session Stats")) - { - b->mGravesCleared=b->mPlantsEaten=b->mPlantsShoveled=0; - b->mCoinsCollected=b->mDiamondsCollected=b->mPottedPlantsCollected=0; - b->mChocolateCollected=b->mTriggeredLawnMowers=0; - b->mGargantuarsKillsByCornCob=0; - } + Board *b = mApp->mBoard; + ImGui::SeparatorText("Game Objects"); + ImGui::Text("Plants: %d", b->mPlants.mSize); + ImGui::Text("Zombies: %d", b->mZombies.mSize); + ImGui::Text("Projectiles: %d", b->mProjectiles.mSize); + ImGui::Text("Coins: %d", b->mCoins.mSize); + ImGui::Text("Mowers: %d", b->mLawnMowers.mSize); + ImGui::Text("Grid Items: %d", b->mGridItems.mSize); + + ImGui::SeparatorText("Effects"); + ImGui::Text("Reanimations: %d", mApp->mEffectSystem->mReanimationHolder->mReanimations.mSize); + ImGui::Text("Particle Systems:%d", mApp->mEffectSystem->mParticleHolder->mParticleSystems.mSize); + ImGui::Text("Particles: %d", mApp->mEffectSystem->mParticleHolder->mParticles.mSize); + ImGui::Text("Trails: %d", mApp->mEffectSystem->mTrailHolder->mTrails.mSize); + ImGui::Text("Attachments: %d", mApp->mEffectSystem->mAttachmentHolder->mAttachments.mSize); + + ImGui::SeparatorText("Counters"); + ImGui::Text("Sun Money: %d", b->mSunMoney); + ImGui::Text("Sun Count Down: %d", b->mSunCountDown); + ImGui::Text("Suns Fallen: %d", b->mNumSunsFallen); + ImGui::Text("Wave: %d / %d", b->mCurrentWave, b->mNumWaves); + ImGui::Text("Total Spawned: %d", b->mTotalSpawnedWaves); + int activeSecs = b->mPlayTimeActiveLevel / 100; + ImGui::Text("Play Time Active: %02d:%02d", activeSecs / 60, activeSecs % 60); + ImGui::Text("Main Counter: %d", b->mMainCounter); + ImGui::Text("Min FPS: %.1f", b->mMinFPS); + ImGui::Text("Draw Count: %d", b->mDrawCount); + + ImGui::SeparatorText("Session Stats"); + ImGui::Text("Graves Cleared: %d", b->mGravesCleared); + ImGui::Text("Plants Eaten: %d", b->mPlantsEaten); + ImGui::Text("Plants Shoveled: %d", b->mPlantsShoveled); + ImGui::Text("Coins Collected: %d", b->mCoinsCollected); + ImGui::Text("Diamonds: %d", b->mDiamondsCollected); + ImGui::Text("Gargantuars CC: %d", b->mGargantuarsKillsByCornCob); + ImGui::Text("Triggered Mowers: %d", b->mTriggeredLawnMowers); + + ImGui::Separator(); + if (ImGui::Button("Reset Session Stats")) + { + b->mGravesCleared = b->mPlantsEaten = b->mPlantsShoveled = 0; + b->mCoinsCollected = b->mDiamondsCollected = b->mPottedPlantsCollected = 0; + b->mChocolateCollected = b->mTriggeredLawnMowers = 0; + b->mGargantuarsKillsByCornCob = 0; + } } // ─── Save File ─────────────────────────────────────────────── void DebuggerWindow::DrawSaveFileTab() { - if (!mApp->mPlayerInfo) { ImGui::TextDisabled("No profile loaded"); return; } - PlayerInfo* pi = mApp->mPlayerInfo; - - ImGui::SeparatorText(StrFormat("Profile: %s", pi->mName.c_str()).c_str()); - - if (ImGui::BeginTabBar("SaveTabs")) - { - if (ImGui::BeginTabItem("Info")) - { - int area = std::max(1, (pi->mLevel-1)/LEVELS_PER_AREA+1); - int sub = pi->mLevel - (area-1)*LEVELS_PER_AREA; - if (ImGui::InputInt("Area", &area)) { area=std::max(1,std::min(area,ADVENTURE_AREAS+1)); pi->mLevel=(area-1)*LEVELS_PER_AREA+sub; } - if (ImGui::InputInt("SubLevel",&sub)) { sub=std::max(1,std::min(sub,LEVELS_PER_AREA)); pi->mLevel=(area-1)*LEVELS_PER_AREA+sub; } - ImGui::InputInt("Level ID",&pi->mLevel); - pi->mLevel = std::max(1,std::min(pi->mLevel, NUM_LEVELS)); - if (mApp->mGameSelector) mApp->mGameSelector->mLevel=pi->mLevel; - - ImGui::InputInt("Coins", &pi->mCoins); - ImGui::SameLine(); - if (ImGui::Button("+1M Coins")) pi->mCoins += 1000000; - ImGui::InputInt("Finished Adventure", &pi->mFinishedAdventure); - pi->mFinishedAdventure=std::max(0,pi->mFinishedAdventure); - ImGui::Checkbox("Used Cheat Keys", &pi->mHasUsedCheatKeys); - - ImGui::SeparatorText("Flags"); - ImGui::Checkbox("Minigames Unlocked", &pi->mHasUnlockedMinigames); - ImGui::SameLine(); - ImGui::Checkbox("Puzzle Unlocked", &pi->mHasUnlockedPuzzleMode); - ImGui::SameLine(); - ImGui::Checkbox("Survival Unlocked", &pi->mHasUnlockedSurvivalMode); - ImGui::Checkbox("New MiniGame", &pi->mHasNewMiniGame); - - ImGui::Checkbox("New IZombie", &pi->mHasNewIZombie); + if (!mApp->mPlayerInfo) + { + ImGui::TextDisabled("No profile loaded"); + return; + } + PlayerInfo *pi = mApp->mPlayerInfo; + + ImGui::SeparatorText(StrFormat("Profile: %s", pi->mName.c_str()).c_str()); + + if (ImGui::BeginTabBar("SaveTabs")) + { + if (ImGui::BeginTabItem("Info")) + { + int area = std::max(1, (pi->mLevel - 1) / LEVELS_PER_AREA + 1); + int sub = pi->mLevel - (area - 1) * LEVELS_PER_AREA; + if (ImGui::InputInt("Area", &area)) + { + area = std::max(1, std::min(area, ADVENTURE_AREAS + 1)); + pi->mLevel = (area - 1) * LEVELS_PER_AREA + sub; + } + if (ImGui::InputInt("SubLevel", &sub)) + { + sub = std::max(1, std::min(sub, LEVELS_PER_AREA)); + pi->mLevel = (area - 1) * LEVELS_PER_AREA + sub; + } + ImGui::InputInt("Level ID", &pi->mLevel); + pi->mLevel = std::max(1, std::min(pi->mLevel, NUM_LEVELS)); + if (mApp->mGameSelector) + mApp->mGameSelector->mLevel = pi->mLevel; + + ImGui::InputInt("Coins", &pi->mCoins); ImGui::SameLine(); - ImGui::Checkbox("New Vasebreaker", &pi->mHasNewScaryPotter); + if (ImGui::Button("+1M Coins")) + pi->mCoins += 1000000; + ImGui::InputInt("Finished Adventure", &pi->mFinishedAdventure); + pi->mFinishedAdventure = std::max(0, pi->mFinishedAdventure); + ImGui::Checkbox("Used Cheat Keys", &pi->mHasUsedCheatKeys); + + ImGui::SeparatorText("Flags"); + ImGui::Checkbox("Minigames Unlocked", &pi->mHasUnlockedMinigames); ImGui::SameLine(); - ImGui::Checkbox("New Survival", &pi->mHasNewSurvival); - - ImGui::Checkbox("Has Seen Stinky", &pi->mHasSeenStinky); - ImGui::SameLine(); - ImGui::Checkbox("Need Magic Taco Reward", &pi->mNeedsMagicTacoReward); - - ImGui::SeparatorText("Actions"); - if (ImGui::Button("Full Unlock")) - { - pi->mFinishedAdventure = std::max(1, pi->mFinishedAdventure); - pi->mHasUnlockedMinigames = pi->mHasUnlockedPuzzleMode = pi->mHasUnlockedSurvivalMode = true; - pi->mHasNewMiniGame = pi->mHasNewScaryPotter = pi->mHasNewIZombie = pi->mHasNewSurvival = true; - pi->mCoins += 100000; - for (int i=0;imEarnedAchievements[i] = pi->mShownAchievements[i] = true; - } - ImGui::SameLine(); - if (ImGui::Button("Save Now")) pi->SaveDetails(); - ImGui::EndTabItem(); - } - if (ImGui::BeginTabItem("Achievements")) - { - for (int i=0;imEarnedAchievements[i]; - if (ImGui::Checkbox("Earned",&pi->mEarnedAchievements[i])) - if(!old && pi->mEarnedAchievements[i]) - mApp->mAchievements->GiveAchievement((AchievementID)i,true); - ImGui::SameLine(); - ImGui::Checkbox("Shown",&pi->mShownAchievements[i]); - ImGui::PopID(); - } - ImGui::EndTabItem(); - } - if (ImGui::BeginTabItem("Records")) - { - for (int i=0;imChallengeRecords[i]); - ImGui::PopID(); - } - ImGui::EndTabItem(); - } - if (ImGui::BeginTabItem("Purchases")) - { - for (int i=0;imPurchases[i]); - ImGui::PopID(); - } - if (ImGui::Button("Buy All")) - for(int i=0;imPurchases[i]=std::max(pi->mPurchases[i],1); - ImGui::EndTabItem(); - } - ImGui::EndTabBar(); - } + ImGui::Checkbox("Puzzle Unlocked", &pi->mHasUnlockedPuzzleMode); + ImGui::SameLine(); + ImGui::Checkbox("Survival Unlocked", &pi->mHasUnlockedSurvivalMode); + ImGui::Checkbox("New MiniGame", &pi->mHasNewMiniGame); + + ImGui::Checkbox("New IZombie", &pi->mHasNewIZombie); + ImGui::SameLine(); + ImGui::Checkbox("New Vasebreaker", &pi->mHasNewScaryPotter); + ImGui::SameLine(); + ImGui::Checkbox("New Survival", &pi->mHasNewSurvival); + + ImGui::Checkbox("Has Seen Stinky", &pi->mHasSeenStinky); + ImGui::SameLine(); + ImGui::Checkbox("Need Magic Taco Reward", &pi->mNeedsMagicTacoReward); + + ImGui::SeparatorText("Actions"); + if (ImGui::Button("Full Unlock")) + { + pi->mFinishedAdventure = std::max(1, pi->mFinishedAdventure); + pi->mHasUnlockedMinigames = pi->mHasUnlockedPuzzleMode = pi->mHasUnlockedSurvivalMode = true; + pi->mHasNewMiniGame = pi->mHasNewScaryPotter = pi->mHasNewIZombie = pi->mHasNewSurvival = true; + pi->mCoins += 100000; + for (int i = 0; i < NUM_ACHIEVEMENT_TYPES; i++) + pi->mEarnedAchievements[i] = pi->mShownAchievements[i] = true; + } + ImGui::SameLine(); + if (ImGui::Button("Save Now")) + pi->SaveDetails(); + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Achievements")) + { + for (int i = 0; i < NUM_ACHIEVEMENT_TYPES; i++) + { + ImGui::PushID(i); + ImGui::SeparatorText(TodStringTranslate(gAchievementDefs[i].mName).c_str()); + bool old = pi->mEarnedAchievements[i]; + if (ImGui::Checkbox("Earned", &pi->mEarnedAchievements[i])) + if (!old && pi->mEarnedAchievements[i]) + mApp->mAchievements->GiveAchievement((AchievementID)i, true); + ImGui::SameLine(); + ImGui::Checkbox("Shown", &pi->mShownAchievements[i]); + ImGui::PopID(); + } + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Records")) + { + for (int i = 0; i < NUM_GAME_MODES - 1; i++) + { + ImGui::PushID(i); + ImGui::InputInt(TodStringTranslate(gChallengeDefs[i].mChallengeName).c_str(), + &pi->mChallengeRecords[i]); + ImGui::PopID(); + } + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("Purchases")) + { + for (int i = 0; i < NUM_STORE_ITEM_MAX; i++) + { + ImGui::PushID(i); + ImGui::InputInt(StrFormat("Item %d", i).c_str(), &pi->mPurchases[i]); + ImGui::PopID(); + } + if (ImGui::Button("Buy All")) + for (int i = 0; i < NUM_STORE_ITEM_MAX; i++) + pi->mPurchases[i] = std::max(pi->mPurchases[i], 1); + ImGui::EndTabItem(); + } + ImGui::EndTabBar(); + } } // ─── Debug panel ───────────────────────────────────────────── void DebuggerWindow::DrawDebugTab() { - ImGui::SeparatorText("Debug Text Mode"); - if (mApp->mBoard) - { - int dtm = (int)mApp->mBoard->mDebugTextMode; - if (ImGui::BeginCombo("Mode##dtm", DebugTextModeName((DebugTextMode)dtm))) - { - for (int i=0;i<(int)DEBUG_TEXT_MAX;i++) - { - bool s=(dtm==i); - if (ImGui::Selectable(DebugTextModeName((DebugTextMode)i),s)) - mApp->mBoard->mDebugTextMode=(DebugTextMode)i; - if(s) ImGui::SetItemDefaultFocus(); - } - ImGui::EndCombo(); - } - } - - ImGui::SeparatorText("Misc"); + ImGui::SeparatorText("Debug Text Mode"); + if (mApp->mBoard) + { + int dtm = (int)mApp->mBoard->mDebugTextMode; + if (ImGui::BeginCombo("Mode##dtm", DebugTextModeName((DebugTextMode)dtm))) + { + for (int i = 0; i < (int)DEBUG_TEXT_MAX; i++) + { + bool s = (dtm == i); + if (ImGui::Selectable(DebugTextModeName((DebugTextMode)i), s)) + mApp->mBoard->mDebugTextMode = (DebugTextMode)i; + if (s) + ImGui::SetItemDefaultFocus(); + } + ImGui::EndCombo(); + } + } + + ImGui::SeparatorText("Misc"); ImGui::Checkbox("Slow-Mo", &gSlowMo); ImGui::SameLine(); ImGui::Checkbox("Fast-Mo", &gFastMo); @@ -832,57 +1013,59 @@ void DebuggerWindow::DrawDebugTab() // ─── App panel ─────────────────────────────────────────────── void DebuggerWindow::DrawAppTab() { - ImGui::SeparatorText("App State"); - ImGui::Text("Scene: %s", GameSceneName((int)mApp->mGameScene)); - ImGui::Text("GameMode: %d", (int)mApp->mGameMode); - ImGui::Text("AppCounter:%d", mApp->mAppCounter); - - ImGui::SeparatorText("Cheats"); - ImGui::Checkbox("Easy Planting", &mApp->mEasyPlantingCheat); - ImGui::SameLine(); - ImGui::Checkbox("TodCheatKeys", &mApp->mTodCheatKeys); - ImGui::SameLine(); - ImGui::Checkbox("Debug Mode", &mApp->mDebuggerEnabled); - - ImGui::SeparatorText("Fast Load"); - { - static const GameMode kModes[] = { - GAMEMODE_ADVENTURE, - GAMEMODE_SURVIVAL_NORMAL_STAGE_1, GAMEMODE_SURVIVAL_HARD_STAGE_1, GAMEMODE_SURVIVAL_ENDLESS_STAGE_1, - GAMEMODE_CHALLENGE_WAR_AND_PEAS, GAMEMODE_CHALLENGE_WALLNUT_BOWLING, - GAMEMODE_CHALLENGE_LAST_STAND, GAMEMODE_CHALLENGE_FINAL_BOSS, - GAMEMODE_CHALLENGE_ZEN_GARDEN, GAMEMODE_TREE_OF_WISDOM - }; - static const char* kModeNames[] = { - "Adventure","Surv Normal","Surv Hard","Surv Endless", - "War&Peas","Wallnut Bowl","Last Stand","Final Boss", - "Zen Garden","Tree Wisdom" - }; - constexpr int kCount = 10; - ImGui::SetNextItemWidth(180); - if (ImGui::BeginCombo("##flmode", kModeNames[mFastLoadModeIdx])) - { - for (int i=0;iFastLoad(kModes[mFastLoadModeIdx]); - } - - if (mApp->mPlayerInfo) - { - ImGui::SeparatorText("Profile"); - ImGui::Text("Name: %s Coins: %d Level: %d", - mApp->mPlayerInfo->mName.c_str(), - mApp->mPlayerInfo->mCoins, - mApp->mPlayerInfo->mLevel); - } + ImGui::SeparatorText("App State"); + ImGui::Text("Scene: %s", GameSceneName((int)mApp->mGameScene)); + ImGui::Text("GameMode: %d", (int)mApp->mGameMode); + ImGui::Text("AppCounter:%d", mApp->mAppCounter); + + ImGui::SeparatorText("Cheats"); + ImGui::Checkbox("Easy Planting", &mApp->mEasyPlantingCheat); + ImGui::SameLine(); + ImGui::Checkbox("TodCheatKeys", &mApp->mTodCheatKeys); + ImGui::SameLine(); + ImGui::Checkbox("Debug Mode", &mApp->mDebuggerEnabled); + + ImGui::SeparatorText("Fast Load"); + { + static const GameMode kModes[] = { + GAMEMODE_ADVENTURE, + GAMEMODE_SURVIVAL_NORMAL_STAGE_1, GAMEMODE_SURVIVAL_HARD_STAGE_1, GAMEMODE_SURVIVAL_ENDLESS_STAGE_1, + GAMEMODE_CHALLENGE_WAR_AND_PEAS, GAMEMODE_CHALLENGE_WALLNUT_BOWLING, + GAMEMODE_CHALLENGE_LAST_STAND, GAMEMODE_CHALLENGE_FINAL_BOSS, + GAMEMODE_CHALLENGE_ZEN_GARDEN, GAMEMODE_TREE_OF_WISDOM + }; + static const char *kModeNames[] = { + "Adventure", "Surv Normal", "Surv Hard", "Surv Endless", + "War&Peas", "Wallnut Bowl", "Last Stand", "Final Boss", + "Zen Garden", "Tree Wisdom" + }; + constexpr int kCount = 10; + ImGui::SetNextItemWidth(180); + if (ImGui::BeginCombo("##flmode", kModeNames[mFastLoadModeIdx])) + { + for (int i = 0; i < kCount; i++) + { + bool s = (mFastLoadModeIdx == i); + if (ImGui::Selectable(kModeNames[i], s)) + mFastLoadModeIdx = i; + if (s) + ImGui::SetItemDefaultFocus(); + } + ImGui::EndCombo(); + } + ImGui::SameLine(); + if (ImGui::Button("Fast Load!")) + mApp->FastLoad(kModes[mFastLoadModeIdx]); + } + + if (mApp->mPlayerInfo) + { + ImGui::SeparatorText("Profile"); + ImGui::Text("Name: %s Coins: %d Level: %d", + mApp->mPlayerInfo->mName.c_str(), + mApp->mPlayerInfo->mCoins, + mApp->mPlayerInfo->mLevel); + } } #endif diff --git a/src/Lawn/ResoddedFramework/SettingsDialog.cpp b/src/Lawn/ResoddedFramework/SettingsDialog.cpp index 99a0845..198a6cf 100644 --- a/src/Lawn/ResoddedFramework/SettingsDialog.cpp +++ b/src/Lawn/ResoddedFramework/SettingsDialog.cpp @@ -11,36 +11,35 @@ #include "../../Sexy.TodLib/TodStringFile.h" static int gUserListWidgetColors[][3] = { - {23, 24, 35}, - {0, 0, 0}, - {235, 225, 180}, - {255, 255, 255}, - {20, 180, 15}}; + { 23, 24, 35 }, + { 0, 0, 0 }, + { 235, 225, 180 }, + { 255, 255, 255 }, + { 20, 180, 15 } +}; static int gDefaultWindowSizes[8][2] = { - {800, 600}, - {1200, 900}, - {1600, 1200}, + { 800, 600 }, + { 1200, 900 }, + { 1600, 1200 }, // 16:9 - {1280, 720}, - {1600, 900}, - {1920, 1080}, + { 1280, 720 }, + { 1600, 900 }, + { 1920, 1080 }, // 16:10 - {1280, 800}, - {1680, 1050}, + { 1280, 800 }, + { 1680, 1050 }, }; -static const char *gTranslationFilterKeys[OutputFilteringMode::NUM_MODES] = {"[FILTER_NEAREST]", "[FILTER_LINEAR]"}; - +static const char *gTranslationFilterKeys[OutputFilteringMode::NUM_MODES] = { "[FILTER_NEAREST]", "[FILTER_LINEAR]" }; SettingsDialog::SettingsDialog(LawnApp *theApp) - : LawnDialog(theApp, DIALOG_SETTINGS, true, "[SETTINGS_HEADER]", "", "", BUTTONS_NONE) + : LawnDialog(theApp, DIALOG_SETTINGS, true, "[SETTINGS_HEADER]", "", "", BUTTONS_NONE) { mApp = theApp; - SDL_Rect aUsableBounds{}; SDL_GetDisplayUsableBounds(SDL_GetDisplayForWindow(mApp->mWindow->mInternalWindow), &aUsableBounds); @@ -50,7 +49,7 @@ SettingsDialog::SettingsDialog(LawnApp *theApp) { if (aSize[0] <= aUsableBounds.w - aPadding && aSize[1] <= aUsableBounds.h - aPadding) { - mValidSizes.push_back({aSize[0], aSize[1]}); + mValidSizes.push_back({ aSize[0], aSize[1] }); } } @@ -70,7 +69,7 @@ SettingsDialog::SettingsDialog(LawnApp *theApp) mSaveFileButton = MakeButton(SETTINGS_OPEN_SAVE_FOLDER, this, "[SETTINGS_OPEN_SAVE_FOLDER]"); mApplyButton = MakeButton(SETTINGS_BACK, this, "[SETTINGS_BACK]"); - + mRendererList = new ListWidget(SETTINGS_RENDER_LIST, Sexy::FONT_PICO129, this); mRendererList->SetColors(gUserListWidgetColors, LENGTH(gUserListWidgetColors)); mRendererList->mDrawOutline = true; @@ -82,12 +81,10 @@ SettingsDialog::SettingsDialog(LawnApp *theApp) { if (backend.first == i) mRendererList->AddLine(backend.second, false); - } } mRendererList->SetSelect(mApp->mDesiredBackend - 1); - - + mFilterList = new ListWidget(SETTINGS_FILTER_LIST, Sexy::FONT_PICO129, this); mFilterList->SetColors(gUserListWidgetColors, LENGTH(gUserListWidgetColors)); mFilterList->mDrawOutline = true; @@ -98,7 +95,7 @@ SettingsDialog::SettingsDialog(LawnApp *theApp) mFilterList->AddLine(StrFormat("%s", TodStringTranslate(gTranslationFilterKeys[i]).c_str()), false); } mFilterList->SetSelect(mApp->mScreenFiltering); - + mSizesList = new ListWidget(SETTINGS_WINDOW_SIZES, Sexy::FONT_PICO129, this); mSizesList->SetColors(gUserListWidgetColors, LENGTH(gUserListWidgetColors)); mSizesList->mDrawOutline = true; @@ -132,7 +129,7 @@ SettingsDialog::~SettingsDialog() delete mFilterList; } -void SettingsDialog::Draw(Graphics* g) +void SettingsDialog::Draw(Graphics *g) { LawnDialog::Draw(g); @@ -147,9 +144,9 @@ void SettingsDialog::Draw(Graphics* g) g->PopState(); g->PushState(); g->SetClipRect(Rect(mOptionsSlider->mAllowedMouseZone.mX - mX, - mOptionsSlider->mAllowedMouseZone.mY - mY, - mOptionsSlider->mAllowedMouseZone.mWidth, - mOptionsSlider->mAllowedMouseZone.mHeight)); + mOptionsSlider->mAllowedMouseZone.mY - mY, + mOptionsSlider->mAllowedMouseZone.mWidth, + mOptionsSlider->mAllowedMouseZone.mHeight)); g->Translate(35, 120 - aScrollOffset); int aY = 0; @@ -161,67 +158,67 @@ void SettingsDialog::Draw(Graphics* g) mVSyncCheckbox->Resize(40, aY - aScrollOffset + GetTop(), 46, 45); mVSyncCheckbox->mDisabled = - (mVSyncCheckbox->mY + mY + mVSyncCheckbox->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || - (mVSyncCheckbox->mY + mY) > (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); + (mVSyncCheckbox->mY + mY + mVSyncCheckbox->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || + (mVSyncCheckbox->mY + mY) > (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); TodDrawString(g, "[SETTINGS_VSYNC]", mVSyncCheckbox->mX + 20, aY + 30, Sexy::FONT_BRIANNETOD12, Color::White, - DrawStringJustification::DS_ALIGN_LEFT); + DrawStringJustification::DS_ALIGN_LEFT); aY += 50; mFullscreenCheckbox->Resize(40, aY - aScrollOffset + GetTop(), 46, 45); mFullscreenCheckbox->mDisabled = - (mFullscreenCheckbox->mY + mY + mFullscreenCheckbox->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || - (mFullscreenCheckbox->mY + mY) > - (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); + (mFullscreenCheckbox->mY + mY + mFullscreenCheckbox->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || + (mFullscreenCheckbox->mY + mY) > + (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); TodDrawString(g, "[SETTINGS_FULLSCREEN]", mFullscreenCheckbox->mX + 20, aY + 30, Sexy::FONT_BRIANNETOD12, - Color::White, DrawStringJustification::DS_ALIGN_LEFT); + Color::White, DrawStringJustification::DS_ALIGN_LEFT); aY += 50; mHighQualityCheckbox->Resize(40, aY - aScrollOffset + GetTop(), 46, 45); mHighQualityCheckbox->mDisabled = - (mHighQualityCheckbox->mY + mY + mHighQualityCheckbox->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || - (mHighQualityCheckbox->mY + mY) > - (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); + (mHighQualityCheckbox->mY + mY + mHighQualityCheckbox->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || + (mHighQualityCheckbox->mY + mY) > + (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); TodDrawString(g, "[SETTINGS_HIGHQUALITY]", mHighQualityCheckbox->mX + 20, aY + 30, Sexy::FONT_BRIANNETOD12, - Color::White, DrawStringJustification::DS_ALIGN_LEFT); + Color::White, DrawStringJustification::DS_ALIGN_LEFT); aY += 50; mHighResolutionCheckbox->Resize(40, aY - aScrollOffset + GetTop(), 46, 45); mHighResolutionCheckbox->mDisabled = - (mHighResolutionCheckbox->mY + mY + mHighResolutionCheckbox->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || - (mHighResolutionCheckbox->mY + mY) > - (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); + (mHighResolutionCheckbox->mY + mY + mHighResolutionCheckbox->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || + (mHighResolutionCheckbox->mY + mY) > + (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); TodDrawString(g, "[SETTINGS_RESOLUTION]", mHighResolutionCheckbox->mX + 20, aY + 30, Sexy::FONT_BRIANNETOD12, - Color::White, DrawStringJustification::DS_ALIGN_LEFT); + Color::White, DrawStringJustification::DS_ALIGN_LEFT); aY += 85; TodDrawString(g, "[SETTINGS_RENDERER_BACKEND]", 20, aY, Sexy::FONT_BRIANNETOD12, Color::White, - DrawStringJustification::DS_ALIGN_LEFT); + DrawStringJustification::DS_ALIGN_LEFT); aY += 12; mRendererList->Resize(40, aY - aScrollOffset + GetTop(), 130, 70); mRendererList->mDisabled = - (mRendererList->mY + mY + mRendererList->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || - (mRendererList->mY + mY) > (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); + (mRendererList->mY + mY + mRendererList->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || + (mRendererList->mY + mY) > (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); aY += mRendererList->mHeight + 30; if (mApp->mRenderer->mCurrentBackend != mApp->mDesiredBackend) { TodDrawString(g, "[SETTINGS_RENDERER_RESTART_NOTIF]", 20, aY, Sexy::FONT_BRIANNETOD12, Color::White, - DrawStringJustification::DS_ALIGN_LEFT); + DrawStringJustification::DS_ALIGN_LEFT); aY += 20; } @@ -229,48 +226,47 @@ void SettingsDialog::Draw(Graphics* g) aY += 12; TodDrawString(g, "[SETTINGS_WINDOW_SIZE]", 20, aY, Sexy::FONT_BRIANNETOD12, Color::White, - DrawStringJustification::DS_ALIGN_LEFT); + DrawStringJustification::DS_ALIGN_LEFT); aY += 4; mSizesList->Resize(40, aY - aScrollOffset + GetTop(), 130, 26 * (mValidSizes.size() + 1)); mSizesList->mDisabled = - (mSizesList->mY + mY + mSizesList->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || - (mSizesList->mY + mY) > (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); + (mSizesList->mY + mY + mSizesList->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || + (mSizesList->mY + mY) > (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); aY += mSizesList->mHeight + 40; TodDrawString(g, "[SETTINGS_FILTERING_MODE]", 20, aY, Sexy::FONT_BRIANNETOD12, Color::White, - DrawStringJustification::DS_ALIGN_LEFT); + DrawStringJustification::DS_ALIGN_LEFT); aY += 4; mFilterList->Resize(40, aY - aScrollOffset + GetTop(), 130, 26 * (mFilterList->mLines.size() + 1)); mFilterList->mDisabled = - (mFilterList->mY + mY + mFilterList->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || - (mFilterList->mY + mY) > (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); + (mFilterList->mY + mY + mFilterList->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || + (mFilterList->mY + mY) > (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); aY += mFilterList->mHeight + 40; TodDrawString(g, "[SETTINGS_MISC]", 20, aY, Sexy::FONT_BRIANNETOD12, Color::White, - DrawStringJustification::DS_ALIGN_LEFT); + DrawStringJustification::DS_ALIGN_LEFT); aY += 20; mSaveFileButton->Resize(40, aY - aScrollOffset + GetTop(), 270, 46); mSaveFileButton->mDisabled = - (mSaveFileButton->mY + mY + mSaveFileButton->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || - (mSaveFileButton->mY + mY) > (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); - + (mSaveFileButton->mY + mY + mSaveFileButton->mHeight) < mOptionsSlider->mAllowedMouseZone.mY || + (mSaveFileButton->mY + mY) > (mOptionsSlider->mAllowedMouseZone.mY + mOptionsSlider->mAllowedMouseZone.mHeight); SexyString aVersionString = "ResoddedFramework Release " + LawnApp::gResoddedVersion.toString(); TodDrawString(g, aVersionString, - mOptionsSlider->mAllowedMouseZone.mWidth - Sexy::FONT_BRIANNETOD12->StringWidth(aVersionString) - 27, - aMaxContentHeight - Sexy::FONT_BRIANNETOD12->GetHeight(), Sexy::FONT_BRIANNETOD12, Color::White, - DrawStringJustification::DS_ALIGN_LEFT); + mOptionsSlider->mAllowedMouseZone.mWidth - Sexy::FONT_BRIANNETOD12->StringWidth(aVersionString) - 27, + aMaxContentHeight - Sexy::FONT_BRIANNETOD12->GetHeight(), Sexy::FONT_BRIANNETOD12, Color::White, + DrawStringJustification::DS_ALIGN_LEFT); #if GIT_AVAILABLE @@ -279,8 +275,8 @@ void SettingsDialog::Draw(Graphics* g) SexyString aGitString = "Git: Hash (" + aHash + ")" + (GIT_IS_DIRTY ? " WORK IN PROGRESS" : ""); TodDrawString(g, aGitString, - mOptionsSlider->mAllowedMouseZone.mWidth - Sexy::FONT_BRIANNETOD12->StringWidth(aGitString) - 27, - aMaxContentHeight, Sexy::FONT_BRIANNETOD12, Color::White, DrawStringJustification::DS_ALIGN_LEFT); + mOptionsSlider->mAllowedMouseZone.mWidth - Sexy::FONT_BRIANNETOD12->StringWidth(aGitString) - 27, + aMaxContentHeight, Sexy::FONT_BRIANNETOD12, Color::White, DrawStringJustification::DS_ALIGN_LEFT); #endif @@ -341,23 +337,21 @@ void SettingsDialog::ButtonDepress(int theId) { switch (theId) { - case SettingsDialog::SETTINGS_BACK: - { - mApp->KillDialog(mId); - break; - } - case SettingsDialog::SETTINGS_OPEN_SAVE_FOLDER: - { - SexyString aSaveFileFolder = GetAppDataFolder(); - #ifdef _WIN32 - ShellExecuteA(NULL, "open", aSaveFileFolder.c_str(), NULL, NULL, SW_SHOWDEFAULT); - #else - SexyString aFailString = StrFormat("Couldn't open the folder on this platform.\nThe path is: \n%s", aSaveFileFolder.c_str()); - - mApp->DoDialog(Dialogs::DIALOG_INFO, true, "Failed", aFailString, "OK", Dialog::BUTTONS_FOOTER); - #endif - break; - } + case SettingsDialog::SETTINGS_BACK: { + mApp->KillDialog(mId); + break; + } + case SettingsDialog::SETTINGS_OPEN_SAVE_FOLDER: { + SexyString aSaveFileFolder = GetAppDataFolder(); +#ifdef _WIN32 + ShellExecuteA(NULL, "open", aSaveFileFolder.c_str(), NULL, NULL, SW_SHOWDEFAULT); +#else + SexyString aFailString = StrFormat("Couldn't open the folder on this platform.\nThe path is: \n%s", aSaveFileFolder.c_str()); + + mApp->DoDialog(Dialogs::DIALOG_INFO, true, "Failed", aFailString, "OK", Dialog::BUTTONS_FOOTER); +#endif + break; + } } } @@ -384,8 +378,8 @@ void SettingsDialog::ListClicked(int theId, int theIdx, int theClickCount) if (mApp->mDesiredBackend != mApp->mRenderer->mCurrentBackend) { SexyString anInfoString = - StrFormat("Rendering Backend has been changed to %s\nRestart the game to apply the changes", - aBackendName.c_str()); + StrFormat("Rendering Backend has been changed to %s\nRestart the game to apply the changes", + aBackendName.c_str()); mApp->DoDialog(Dialogs::DIALOG_INFO, true, "", anInfoString, "OK", Dialog::BUTTONS_FOOTER); } } @@ -419,11 +413,11 @@ void SettingsDialog::ListClicked(int theId, int theIdx, int theClickCount) SDL_SetWindowPosition(mApp->mWindow->mInternalWindow, aNewX, aNewY); //Send events to the app to update the engine as a whole - SDL_Event aSizeEvent = {SDL_EVENT_WINDOW_RESIZED}; + SDL_Event aSizeEvent = { SDL_EVENT_WINDOW_RESIZED }; aSizeEvent.window.data1 = mValidSizes[theIdx].mWidth; aSizeEvent.window.data2 = mValidSizes[theIdx].mHeight; aSizeEvent.window.windowID = SDL_GetWindowID(mApp->mWindow->mInternalWindow); - SDL_Event aPosEvent = {SDL_EVENT_WINDOW_MOVED}; + SDL_Event aPosEvent = { SDL_EVENT_WINDOW_MOVED }; aPosEvent.window.data1 = aNewX; aPosEvent.window.data2 = aNewY; aPosEvent.window.windowID = SDL_GetWindowID(mApp->mWindow->mInternalWindow); @@ -431,9 +425,7 @@ void SettingsDialog::ListClicked(int theId, int theIdx, int theClickCount) SDL_PushEvent(&aSizeEvent); } mSizesList->SetSelect(theIdx); - } - } bool SettingsDialog::IsCurrentWindowSizeInList() @@ -441,41 +433,39 @@ bool SettingsDialog::IsCurrentWindowSizeInList() for (const auto &aSize : mValidSizes) { if (mApp->mRenderer->mPresentationRect.mWidth == aSize.mWidth && - mApp->mRenderer->mPresentationRect.mWidth == aSize.mHeight) + mApp->mRenderer->mPresentationRect.mWidth == aSize.mHeight) return true; } return false; } - void SettingsDialog::CheckboxChecked(int theId, bool checked) { switch (theId) { - case SettingsDialog::SETTINGS_VSYNC: + case SettingsDialog::SETTINGS_VSYNC: { + mApp->mWaitForVSync = checked; + RendererError anError = mApp->mRenderer->UpdateVSync(); + if (anError == RendererError::ERROR_VSYNC) { - mApp->mWaitForVSync = checked; - RendererError anError = mApp->mRenderer->UpdateVSync(); - if (anError == RendererError::ERROR_VSYNC) - { - mVSyncCheckbox->SetChecked(!checked, false); - SexyString aFailString = StrFormat("V-Sync couldn't be toggled %s\n\nYour video card does not\nmeet the " - "minimum requirements\nfor this feature.", - (checked ? "on" : "off")); - mApp->DoDialog(Dialogs::DIALOG_INFO, true, "Failed", aFailString, "OK", Dialog::BUTTONS_FOOTER); - } + mVSyncCheckbox->SetChecked(!checked, false); + SexyString aFailString = StrFormat("V-Sync couldn't be toggled %s\n\nYour video card does not\nmeet the " + "minimum requirements\nfor this feature.", + (checked ? "on" : "off")); + mApp->DoDialog(Dialogs::DIALOG_INFO, true, "Failed", aFailString, "OK", Dialog::BUTTONS_FOOTER); } - break; + } + break; case SettingsDialog::SETTINGS_FULLSCREEN: if (!checked && mApp->mForceFullscreen) { mApp->DoDialog(Dialogs::DIALOG_COLORDEPTH_EXP, true, "No Windowed Mode", - "Windowed mode is only available if your desktop was running in either\n" - "16 bit or 32 bit color mode when you started the game.\n\n" - "If you'd like to run in Windowed mode then you need to quit the game and switch your " - "desktop to 16 or 32 bit color mode.", - "OK", Dialog::BUTTONS_FOOTER); + "Windowed mode is only available if your desktop was running in either\n" + "16 bit or 32 bit color mode when you started the game.\n\n" + "If you'd like to run in Windowed mode then you need to quit the game and switch your " + "desktop to 16 or 32 bit color mode.", + "OK", Dialog::BUTTONS_FOOTER); mFullscreenCheckbox->SetChecked(true, false); } @@ -484,17 +474,16 @@ void SettingsDialog::CheckboxChecked(int theId, bool checked) mApp->SwitchScreenMode(!mFullscreenCheckbox->IsChecked(), true, false); } break; - + case SettingsDialog::SETTINGS_HIGHQUALITY: mApp->mIs3D = mHighQualityCheckbox->IsChecked(); break; case SettingsDialog::SETTINGS_HIGHRESOLUTION: - int aResult = Dialog::ID_YES; + int aResult = Dialog::ID_YES; if (mHighResolutionCheckbox->IsChecked()) { aResult = mApp->LawnMessageBox(Dialogs::DIALOG_MESSAGE, "[HIGH_RESOLUTION_WARNING_HEADER]", "[HIGH_RESOLUTION_WARNING]", "[BUTTON_YES]", "[BUTTON_NO]", Dialog::BUTTONS_YES_NO); - } if (aResult == Dialog::ID_YES) { @@ -504,8 +493,6 @@ void SettingsDialog::CheckboxChecked(int theId, bool checked) else mHighResolutionCheckbox->SetChecked(false, false); - break; } - } diff --git a/src/Lawn/ResoddedFramework/UpdateChecker.cpp b/src/Lawn/ResoddedFramework/UpdateChecker.cpp index cd8d958..ad75b64 100644 --- a/src/Lawn/ResoddedFramework/UpdateChecker.cpp +++ b/src/Lawn/ResoddedFramework/UpdateChecker.cpp @@ -21,17 +21,17 @@ UpdateCheckResult UpdateChecker::Check() bool canLeave = false; switch (aResult) { - case HTTPTransfer::RESULT_DONE: - canLeave = true; - break; - case HTTPTransfer::RESULT_NOT_FOUND: - case HTTPTransfer::RESULT_DISCONNECTED: - case HTTPTransfer::RESULT_CONNECT_FAIL: - case HTTPTransfer::RESULT_SOCKET_ERROR: - case HTTPTransfer::RESULT_INVALID_ADDR: - case HTTPTransfer::RESULT_ABORTED: - case HTTPTransfer::RESULT_HTTP_ERROR: - return RESULT_FAIL; + case HTTPTransfer::RESULT_DONE: + canLeave = true; + break; + case HTTPTransfer::RESULT_NOT_FOUND: + case HTTPTransfer::RESULT_DISCONNECTED: + case HTTPTransfer::RESULT_CONNECT_FAIL: + case HTTPTransfer::RESULT_SOCKET_ERROR: + case HTTPTransfer::RESULT_INVALID_ADDR: + case HTTPTransfer::RESULT_ABORTED: + case HTTPTransfer::RESULT_HTTP_ERROR: + return RESULT_FAIL; } if (canLeave) break; diff --git a/src/Lawn/SeedPacket.cpp b/src/Lawn/SeedPacket.cpp index bd23025..3813728 100644 --- a/src/Lawn/SeedPacket.cpp +++ b/src/Lawn/SeedPacket.cpp @@ -35,9 +35,9 @@ void SeedPacket::PickNextSlotMachineSeed() { int aPeasCount = mBoard->CountPlantByType(SeedType::SEED_PEASHOOTER); - SeedType SLOT_SEED_TYPES[] = {SeedType::SEED_SUNFLOWER, SeedType::SEED_PEASHOOTER, - SeedType::SEED_SNOWPEA, SeedType::SEED_WALLNUT, - SeedType::SEED_SLOT_MACHINE_SUN, SeedType::SEED_SLOT_MACHINE_DIAMOND}; + SeedType SLOT_SEED_TYPES[] = { SeedType::SEED_SUNFLOWER, SeedType::SEED_PEASHOOTER, + SeedType::SEED_SNOWPEA, SeedType::SEED_WALLNUT, + SeedType::SEED_SLOT_MACHINE_SUN, SeedType::SEED_SLOT_MACHINE_DIAMOND }; int aSeedsCount = 0; TodWeightedArray aSeedWeightArray[(int)SeedType::NUM_SEED_TYPES]; @@ -58,7 +58,7 @@ void SeedPacket::PickNextSlotMachineSeed() if (mIndex == 2 && aSeedType != SeedType::SEED_SLOT_MACHINE_DIAMOND) { if (aSeedType == mBoard->mSeedBank->mSeedPackets[0].mSlotMachiningNextSeed || - aSeedType == mBoard->mSeedBank->mSeedPackets[1].mSlotMachiningNextSeed) + aSeedType == mBoard->mSeedBank->mSeedPackets[1].mSlotMachiningNextSeed) { aWeight += aWeight / 2; } @@ -88,7 +88,7 @@ void SeedPacket::FlashIfReady() { int aRenderPosition = Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_UI_BOTTOM, 0, 2); mApp->AddTodParticle(mX + mBoard->mSeedBank->mX, mY + mBoard->mSeedBank->mY, aRenderPosition, - ParticleEffect::PARTICLE_SEED_PACKET_FLASH); + ParticleEffect::PARTICLE_SEED_PACKET_FLASH); } if (mBoard->mTutorialState == TutorialState::TUTORIAL_LEVEL_1_REFRESH_PEASHOOTER) @@ -96,12 +96,12 @@ void SeedPacket::FlashIfReady() mBoard->SetTutorialState(TutorialState::TUTORIAL_LEVEL_1_PICK_UP_PEASHOOTER); } else if (mBoard->mTutorialState == TutorialState::TUTORIAL_LEVEL_2_REFRESH_SUNFLOWER && - mPacketType == SeedType::SEED_SUNFLOWER) + mPacketType == SeedType::SEED_SUNFLOWER) { mBoard->SetTutorialState(TutorialState::TUTORIAL_LEVEL_2_PICK_UP_SUNFLOWER); } else if (mBoard->mTutorialState == TutorialState::TUTORIAL_MORESUN_REFRESH_SUNFLOWER && - mPacketType == SeedType::SEED_SUNFLOWER) + mPacketType == SeedType::SEED_SUNFLOWER) { mBoard->SetTutorialState(TutorialState::TUTORIAL_MORESUN_PICK_UP_SUNFLOWER); } @@ -161,7 +161,7 @@ void SeedPacket::Update() { mSlotMachineCountDown--; float aFlipsPerSecont = - TodAnimateCurveFloat(SLOT_MACHINE_TIME, 0, mSlotMachineCountDown, 6.0f, 2.0f, TodCurves::CURVE_LINEAR); + TodAnimateCurveFloat(SLOT_MACHINE_TIME, 0, mSlotMachineCountDown, 6.0f, 2.0f, TodCurves::CURVE_LINEAR); mSlotMachiningPosition += aFlipsPerSecont * 0.01f; if (mSlotMachiningPosition >= 1.0f) @@ -186,7 +186,7 @@ void SeedPacket::Update() } void SeedPacketDrawSeed(Graphics *g, float x, float y, SeedType theSeedType, SeedType theImitaterType, float theOffsetX, - float theOffsetY, float theScale) + float theOffsetY, float theScale) { Image *aImage = IMAGE_PACKET_PLANTS; SeedType aSeedType = theSeedType; @@ -195,8 +195,8 @@ void SeedPacketDrawSeed(Graphics *g, float x, float y, SeedType theSeedType, See aSeedType = theImitaterType; FilterEffect aFilterEffect = FilterEffect::FILTER_EFFECT_WASHED_OUT; if (theImitaterType == SeedType::SEED_HYPNOSHROOM || theImitaterType == SeedType::SEED_SQUASH || - theImitaterType == SeedType::SEED_POTATOMINE || theImitaterType == SeedType::SEED_GARLIC || - theImitaterType == SeedType::SEED_LILYPAD) + theImitaterType == SeedType::SEED_POTATOMINE || theImitaterType == SeedType::SEED_GARLIC || + theImitaterType == SeedType::SEED_LILYPAD) aFilterEffect = FilterEffect::FILTER_EFFECT_LESS_WASHED_OUT; aImage = FilterEffectGetImage(aImage, aFilterEffect); } @@ -259,12 +259,12 @@ void SeedPacketDrawSeed(Graphics *g, float x, float y, SeedType theSeedType, See aSeedG.mScaleX = theScale * g->mScaleX; aSeedG.mScaleY = theScale * g->mScaleY; Plant::DrawSeedType(&aSeedG, theSeedType, theImitaterType, DrawVariation::VARIATION_NORMAL, x + theOffsetX, - y + theOffsetY); + y + theOffsetY); } } void DrawSeedPacket(Graphics *g, float x, float y, SeedType theSeedType, SeedType theImitaterType, float thePercentDark, - int theGrayness, bool theDrawCost, bool theUseCurrentCost) + int theGrayness, bool theDrawCost, bool theUseCurrentCost) { SeedType aSeedType = theSeedType; if (aSeedType == SeedType::SEED_IMITATER && theImitaterType != SeedType::SEED_NONE) @@ -283,15 +283,15 @@ void DrawSeedPacket(Graphics *g, float x, float y, SeedType theSeedType, SeedTyp g->SetColorizeImages(true); } - int aPacketBackground = theSeedType == SeedType::SEED_IMITATER ? 0 - : Plant::IsUpgrade(aSeedType) ? 1 - : theSeedType == SeedType::SEED_BEGHOULED_BUTTON_CRATER ? 3 - : theSeedType == SeedType::SEED_BEGHOULED_BUTTON_SHUFFLE ? 4 - : theSeedType == SeedType::SEED_SLOT_MACHINE_SUN ? 5 - : theSeedType == SeedType::SEED_SLOT_MACHINE_DIAMOND ? 6 - : theSeedType == SeedType::SEED_ZOMBIQUARIUM_SNORKLE ? 7 - : theSeedType == SeedType::SEED_ZOMBIQUARIUM_TROPHY ? 8 - : 2; + int aPacketBackground = theSeedType == SeedType::SEED_IMITATER ? 0 + : Plant::IsUpgrade(aSeedType) ? 1 + : theSeedType == SeedType::SEED_BEGHOULED_BUTTON_CRATER ? 3 + : theSeedType == SeedType::SEED_BEGHOULED_BUTTON_SHUFFLE ? 4 + : theSeedType == SeedType::SEED_SLOT_MACHINE_SUN ? 5 + : theSeedType == SeedType::SEED_SLOT_MACHINE_DIAMOND ? 6 + : theSeedType == SeedType::SEED_ZOMBIQUARIUM_SNORKLE ? 7 + : theSeedType == SeedType::SEED_ZOMBIQUARIUM_TROPHY ? 8 + : 2; if (g->mScaleX > 1 && !mIgnorePacketSpriteScale) { @@ -506,7 +506,7 @@ void DrawSeedPacket(Graphics *g, float x, float y, SeedType theSeedType, SeedTyp if (((LawnApp *)gSexyAppBase)->mGameMode == GameMode::GAMEMODE_CHALLENGE_BIG_TIME) { if (aSeedType == SeedType::SEED_WALLNUT || aSeedType == SeedType::SEED_SUNFLOWER || - aSeedType == SeedType::SEED_MARIGOLD) + aSeedType == SeedType::SEED_MARIGOLD) { aOffsetX = 16.0f; aOffsetY = 34.0f; @@ -533,7 +533,7 @@ void DrawSeedPacket(Graphics *g, float x, float y, SeedType theSeedType, SeedTyp aPlantG.SetColorizeImages(true); aPlantG.ClipRect(x, y, SEED_PACKET_WIDTH * aPlantG.mScaleX, aDarknessHeight * aPlantG.mScaleY); TodDrawImageCelScaledF(&aPlantG, Sexy::IMAGE_SEEDS, x, y, aPacketBackground, 0, aPlantG.mScaleX, - aPlantG.mScaleY); + aPlantG.mScaleY); if (aDrawSeedInMiddle) { SeedPacketDrawSeed(&aPlantG, x, y, theSeedType, theImitaterType, aOffsetX, aOffsetY, aScale); @@ -570,7 +570,7 @@ void DrawSeedPacket(Graphics *g, float x, float y, SeedType theSeedType, SeedTyp { SexyMatrix3 aMatrix; TodScaleTransformMatrix(aMatrix, aTextOffsetX * g->mScaleX + x + g->mTransX, - aTextOffsetY * g->mScaleY + y + g->mTransY, g->mScaleX, g->mScaleY); + aTextOffsetY * g->mScaleY + y + g->mTransY, g->mScaleX, g->mScaleY); if (g->mScaleX > 1.8f) { g->SetLinearBlend(false); @@ -607,7 +607,7 @@ void SeedPacket::Draw(Graphics *g) DrawSeedPacket(&aClipG, 0.0f, aOffsetY, mPacketType, SeedType::SEED_NONE, 0.0f, 128, false, false); DrawSeedPacket(&aClipG, 0.0f, mHeight + aOffsetY, mSlotMachiningNextSeed, SeedType::SEED_NONE, 0.0f, 128, false, - false); + false); } else { @@ -626,7 +626,7 @@ void SeedPacket::Draw(Graphics *g) int aGrayness = 255; if ((mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED && !mActive) || - (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST && !mActive)) + (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST && !mActive)) { aGrayness = 64; } @@ -636,17 +636,17 @@ void SeedPacket::Draw(Graphics *g) aPercentDark = 0.0f; } else if (mBoard->mTutorialState == TutorialState::TUTORIAL_LEVEL_1_PICK_UP_PEASHOOTER && - mBoard->mTutorialTimer == -1 && mPacketType == SeedType::SEED_PEASHOOTER) + mBoard->mTutorialTimer == -1 && mPacketType == SeedType::SEED_PEASHOOTER) { aGrayness = GetFlashingColor(mBoard->mMainCounter, 75).mRed; } else if (mBoard->mTutorialState == TutorialState::TUTORIAL_LEVEL_2_PICK_UP_SUNFLOWER && - mPacketType == SeedType::SEED_SUNFLOWER) + mPacketType == SeedType::SEED_SUNFLOWER) { aGrayness = GetFlashingColor(mBoard->mMainCounter, 75).mRed; } else if (mBoard->mTutorialState == TutorialState::TUTORIAL_MORESUN_PICK_UP_SUNFLOWER && - mPacketType == SeedType::SEED_SUNFLOWER) + mPacketType == SeedType::SEED_SUNFLOWER) { aGrayness = GetFlashingColor(mBoard->mMainCounter, 75).mRed; } @@ -659,7 +659,7 @@ void SeedPacket::Draw(Graphics *g) aPercentDark = 0.0f; } else if ((!mBoard->CanTakeSunMoney(aCost) && aDrawCost) || aPercentDark > 1.0f || - !mBoard->PlantingRequirementsMet(aUseSeedType)) + !mBoard->PlantingRequirementsMet(aUseSeedType)) { aGrayness = 128; } @@ -727,7 +727,7 @@ void SeedPacket::MouseDown(int x, int y, int theClickCount) if (!mBoard->mAdvice->IsBeingDisplayed()) { mBoard->DisplayAdvice("[ADVICE_SLOT_MACHINE_PULL]", MessageStyle::MESSAGE_STYLE_HINT_TALL_FAST, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); } mBoard->mChallenge->mSlotMachineRollCount = std::min(mBoard->mChallenge->mSlotMachineRollCount, 2); return; @@ -745,10 +745,10 @@ void SeedPacket::MouseDown(int x, int y, int theClickCount) { mApp->PlaySample(SOUND_BUZZER); if (mApp->IsFirstTimeAdventureMode() && mBoard->mLevel == 1 && - mBoard->mHelpDisplayed[(int)AdviceType::ADVICE_CLICK_ON_SUN]) + mBoard->mHelpDisplayed[(int)AdviceType::ADVICE_CLICK_ON_SUN]) { mBoard->DisplayAdvice("[ADVICE_SEED_REFRESH]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL1, - AdviceType::ADVICE_SEED_REFRESH); + AdviceType::ADVICE_SEED_REFRESH); } return; } @@ -759,10 +759,10 @@ void SeedPacket::MouseDown(int x, int y, int theClickCount) mApp->PlaySample(SOUND_BUZZER); mBoard->mOutOfMoneyCounter = 70; if (mApp->IsFirstTimeAdventureMode() && mBoard->mLevel == 1 && - mBoard->mHelpDisplayed[(int)AdviceType::ADVICE_CLICK_ON_SUN]) + mBoard->mHelpDisplayed[(int)AdviceType::ADVICE_CLICK_ON_SUN]) { mBoard->DisplayAdvice("[ADVICE_CANT_AFFORD_PLANT]", MessageStyle::MESSAGE_STYLE_TUTORIAL_LEVEL1, - AdviceType::ADVICE_CANT_AFFORD_PLANT); + AdviceType::ADVICE_CANT_AFFORD_PLANT); } return; } @@ -773,42 +773,42 @@ void SeedPacket::MouseDown(int x, int y, int theClickCount) if (aUseSeedType == SeedType::SEED_GATLINGPEA) { mBoard->DisplayAdvice("[ADVICE_PLANT_NEEDS_REPEATER]", MessageStyle::MESSAGE_STYLE_HINT_LONG, - AdviceType::ADVICE_PLANT_NEEDS_REPEATER); + AdviceType::ADVICE_PLANT_NEEDS_REPEATER); } else if (aUseSeedType == SeedType::SEED_WINTERMELON) { mBoard->DisplayAdvice("[ADVICE_PLANT_NEEDS_MELONPULT]", MessageStyle::MESSAGE_STYLE_HINT_LONG, - AdviceType::ADVICE_PLANT_NEEDS_MELONPULT); + AdviceType::ADVICE_PLANT_NEEDS_MELONPULT); } else if (aUseSeedType == SeedType::SEED_TWINSUNFLOWER) { mBoard->DisplayAdvice("[ADVICE_PLANT_NEEDS_SUNFLOWER]", MessageStyle::MESSAGE_STYLE_HINT_LONG, - AdviceType::ADVICE_PLANT_NEEDS_SUNFLOWER); + AdviceType::ADVICE_PLANT_NEEDS_SUNFLOWER); } else if (aUseSeedType == SeedType::SEED_SPIKEROCK) { mBoard->DisplayAdvice("[ADVICE_PLANT_NEEDS_SPIKEWEED]", MessageStyle::MESSAGE_STYLE_HINT_LONG, - AdviceType::ADVICE_PLANT_NEEDS_SPIKEWEED); + AdviceType::ADVICE_PLANT_NEEDS_SPIKEWEED); } else if (aUseSeedType == SeedType::SEED_COBCANNON) { mBoard->DisplayAdvice("[ADVICE_PLANT_NEEDS_KERNELPULT]", MessageStyle::MESSAGE_STYLE_HINT_LONG, - AdviceType::ADVICE_PLANT_NEEDS_KERNELPULT); + AdviceType::ADVICE_PLANT_NEEDS_KERNELPULT); } else if (aUseSeedType == SeedType::SEED_GOLD_MAGNET) { mBoard->DisplayAdvice("[ADVICE_PLANT_NEEDS_MAGNETSHROOM]", MessageStyle::MESSAGE_STYLE_HINT_LONG, - AdviceType::ADVICE_PLANT_NEEDS_MAGNETSHROOM); + AdviceType::ADVICE_PLANT_NEEDS_MAGNETSHROOM); } else if (aUseSeedType == SeedType::SEED_GLOOMSHROOM) { mBoard->DisplayAdvice("[ADVICE_PLANT_NEEDS_FUMESHROOM]", MessageStyle::MESSAGE_STYLE_HINT_LONG, - AdviceType::ADVICE_PLANT_NEEDS_FUMESHROOM); + AdviceType::ADVICE_PLANT_NEEDS_FUMESHROOM); } else if (aUseSeedType == SeedType::SEED_CATTAIL) { mBoard->DisplayAdvice("[ADVICE_PLANT_NEEDS_LILYPAD]", MessageStyle::MESSAGE_STYLE_HINT_LONG, - AdviceType::ADVICE_PLANT_NEEDS_LILYPAD); + AdviceType::ADVICE_PLANT_NEEDS_LILYPAD); } else { @@ -838,7 +838,7 @@ void SeedPacket::MouseDown(int x, int y, int theClickCount) mBoard->ClearAdvice(AdviceType::ADVICE_PLANT_NEEDS_LILYPAD); if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST) { mBoard->mChallenge->BeghouledPacketClicked(this); } @@ -881,7 +881,7 @@ void SeedPacket::MouseDown(int x, int y, int theClickCount) } } else if (mBoard->mTutorialState == TutorialState::TUTORIAL_WHACK_A_ZOMBIE_PICK_SEED || - mBoard->mTutorialState == TutorialState::TUTORIAL_WHACK_A_ZOMBIE_BEFORE_PICK_SEED) + mBoard->mTutorialState == TutorialState::TUTORIAL_WHACK_A_ZOMBIE_BEFORE_PICK_SEED) { mBoard->SetTutorialState(TutorialState::TUTORIAL_WHACK_A_ZOMBIE_COMPLETED); } @@ -903,7 +903,7 @@ void SeedPacket::WasPlanted() Deactivate(); } else if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND && - mBoard->mChallenge->mChallengeState != ChallengeState::STATECHALLENGE_LAST_STAND_ONSLAUGHT) + mBoard->mChallenge->mChallengeState != ChallengeState::STATECHALLENGE_LAST_STAND_ONSLAUGHT) { mTimesUsed++; mActive = true; @@ -1052,7 +1052,7 @@ void SeedBank::Draw(Graphics *g) } TodDrawString(g, aMoneyLabel, 34, 78, FONT_CONTINUUMBOLD14, aMoneyColor, - DrawStringJustification::DS_ALIGN_CENTER); + DrawStringJustification::DS_ALIGN_CENTER); } if (mApp->mGameScene != GameScenes::SCENE_PLAYING) @@ -1190,15 +1190,15 @@ void SeedPacket::SetPacketType(SeedType theSeedType, SeedType theImitaterType) } if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND || mApp->IsIZombieLevel() || - mApp->IsScaryPotterLevel() || mApp->IsWhackAZombieLevel() || - (mApp->IsSurvivalMode() && mBoard->mChallenge->mSurvivalStage > 0)) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_LAST_STAND || mApp->IsIZombieLevel() || + mApp->IsScaryPotterLevel() || mApp->IsWhackAZombieLevel() || + (mApp->IsSurvivalMode() && mBoard->mChallenge->mSurvivalStage > 0)) return; if ((Plant::IsUpgrade(aUseSeedType) && !gLawnApp->IsSurvivalMode()) || - Plant::GetRefreshTime(mPacketType, mImitaterType) == 5000) + Plant::GetRefreshTime(mPacketType, mImitaterType) == 5000) { mRefreshTime = 3500; mRefreshing = true; diff --git a/src/Lawn/System/Achievements.cpp b/src/Lawn/System/Achievements.cpp index 14cb0ac..f0188dc 100644 --- a/src/Lawn/System/Achievements.cpp +++ b/src/Lawn/System/Achievements.cpp @@ -7,27 +7,27 @@ #include "../Widget/GameSelector.h" AchievementDefinition gAchievementDefs[NUM_ACHIEVEMENT_TYPES] = { - {"[ACHIEVEMENT_HOME_SECURITY_TITLE]", "[ACHIEVEMENT_HOME_SECURITY_DESCRIPTION]"}, - {"[ACHIEVEMENT_NOBEL_PEAS_PRIZE_TITLE]", "[ACHIEVEMENT_NOBEL_PEAS_PRIZE_DESCRIPTION]"}, - {"[ACHIEVEMENT_BETTER_OFF_DEAD_TITLE]", "[ACHIEVEMENT_BETTER_OFF_DEAD_DESCRIPTION]"}, - {"[ACHIEVEMENT_CHINA_SHOP_TITLE]", "[ACHIEVEMENT_CHINA_SHOP_DESCRIPTION]"}, - {"[ACHIEVEMENT_SPUDOW_TITLE]", "[ACHIEVEMENT_SPUDOW_DESCRIPTION]"}, - {"[ACHIEVEMENT_EXPLODONATOR_TITLE]", "[ACHIEVEMENT_EXPLODONATOR_DESCRIPTION]"}, - {"[ACHIEVEMENT_MORTICULTURALIST_TITLE]", "[ACHIEVEMENT_MORTICULTURALIST_DESCRIPTION]"}, - {"[ACHIEVEMENT_DONT_PEA_IN_POOL_TITLE]", "[ACHIEVEMENT_DONT_PEA_IN_POOL_DESCRIPTION]"}, - {"[ACHIEVEMENT_ROLL_SOME_HEADS_TITLE]", "[ACHIEVEMENT_ROLL_SOME_HEADS_DESCRIPTION]"}, - {"[ACHIEVEMENT_GROUNDED_TITLE]", "[ACHIEVEMENT_GROUNDED_DESCRIPTION]"}, - {"[ACHIEVEMENT_ZOMBOLOGIST_TITLE]", "[ACHIEVEMENT_ZOMBOLOGIST_DESCRIPTION]"}, - {"[ACHIEVEMENT_PENNY_PINCHER_TITLE]", "[ACHIEVEMENT_PENNY_PINCHER_DESCRIPTION]"}, - {"[ACHIEVEMENT_SUNNY_DAYS_TITLE]", "[ACHIEVEMENT_SUNNY_DAYS_DESCRIPTION]"}, - {"[ACHIEVEMENT_POPCORN_PARTY_TITLE]", "[ACHIEVEMENT_POPCORN_PARTY_DESCRIPTION]"}, - {"[ACHIEVEMENT_GOOD_MORNING_TITLE]", "[ACHIEVEMENT_GOOD_MORNING_DESCRIPTION]"}, - {"[ACHIEVEMENT_NO_FUNGUS_AMONG_US_TITLE]", "[ACHIEVEMENT_NO_FUNGUS_AMONG_US_DESCRIPTION]"}, - {"[ACHIEVEMENT_BEYOND_THE_GRAVE_TITLE]", "[ACHIEVEMENT_BEYOND_THE_GRAVE_DESCRIPTION]"}, - {"[ACHIEVEMENT_IMMORTAL_TITLE]", "[ACHIEVEMENT_IMMORTAL_DESCRIPTION]"}, - {"[ACHIEVEMENT_TOWERING_WISDOM_TITLE]", "[ACHIEVEMENT_TOWERING_WISDOM_DESCRIPTION]"}, - {"[ACHIEVEMENT_MUSTACHE_MODE_TITLE]", "[ACHIEVEMENT_MUSTACHE_MODE_DESCRIPTION]"}, - {"[ACHIEVEMENT_DISCO_IS_UNDEAD_TITLE]", "[ACHIEVEMENT_DISCO_IS_UNDEAD_DESCRIPTION]"}, + { "[ACHIEVEMENT_HOME_SECURITY_TITLE]", "[ACHIEVEMENT_HOME_SECURITY_DESCRIPTION]" }, + { "[ACHIEVEMENT_NOBEL_PEAS_PRIZE_TITLE]", "[ACHIEVEMENT_NOBEL_PEAS_PRIZE_DESCRIPTION]" }, + { "[ACHIEVEMENT_BETTER_OFF_DEAD_TITLE]", "[ACHIEVEMENT_BETTER_OFF_DEAD_DESCRIPTION]" }, + { "[ACHIEVEMENT_CHINA_SHOP_TITLE]", "[ACHIEVEMENT_CHINA_SHOP_DESCRIPTION]" }, + { "[ACHIEVEMENT_SPUDOW_TITLE]", "[ACHIEVEMENT_SPUDOW_DESCRIPTION]" }, + { "[ACHIEVEMENT_EXPLODONATOR_TITLE]", "[ACHIEVEMENT_EXPLODONATOR_DESCRIPTION]" }, + { "[ACHIEVEMENT_MORTICULTURALIST_TITLE]", "[ACHIEVEMENT_MORTICULTURALIST_DESCRIPTION]" }, + { "[ACHIEVEMENT_DONT_PEA_IN_POOL_TITLE]", "[ACHIEVEMENT_DONT_PEA_IN_POOL_DESCRIPTION]" }, + { "[ACHIEVEMENT_ROLL_SOME_HEADS_TITLE]", "[ACHIEVEMENT_ROLL_SOME_HEADS_DESCRIPTION]" }, + { "[ACHIEVEMENT_GROUNDED_TITLE]", "[ACHIEVEMENT_GROUNDED_DESCRIPTION]" }, + { "[ACHIEVEMENT_ZOMBOLOGIST_TITLE]", "[ACHIEVEMENT_ZOMBOLOGIST_DESCRIPTION]" }, + { "[ACHIEVEMENT_PENNY_PINCHER_TITLE]", "[ACHIEVEMENT_PENNY_PINCHER_DESCRIPTION]" }, + { "[ACHIEVEMENT_SUNNY_DAYS_TITLE]", "[ACHIEVEMENT_SUNNY_DAYS_DESCRIPTION]" }, + { "[ACHIEVEMENT_POPCORN_PARTY_TITLE]", "[ACHIEVEMENT_POPCORN_PARTY_DESCRIPTION]" }, + { "[ACHIEVEMENT_GOOD_MORNING_TITLE]", "[ACHIEVEMENT_GOOD_MORNING_DESCRIPTION]" }, + { "[ACHIEVEMENT_NO_FUNGUS_AMONG_US_TITLE]", "[ACHIEVEMENT_NO_FUNGUS_AMONG_US_DESCRIPTION]" }, + { "[ACHIEVEMENT_BEYOND_THE_GRAVE_TITLE]", "[ACHIEVEMENT_BEYOND_THE_GRAVE_DESCRIPTION]" }, + { "[ACHIEVEMENT_IMMORTAL_TITLE]", "[ACHIEVEMENT_IMMORTAL_DESCRIPTION]" }, + { "[ACHIEVEMENT_TOWERING_WISDOM_TITLE]", "[ACHIEVEMENT_TOWERING_WISDOM_DESCRIPTION]" }, + { "[ACHIEVEMENT_MUSTACHE_MODE_TITLE]", "[ACHIEVEMENT_MUSTACHE_MODE_DESCRIPTION]" }, + { "[ACHIEVEMENT_DISCO_IS_UNDEAD_TITLE]", "[ACHIEVEMENT_DISCO_IS_UNDEAD_DESCRIPTION]" }, }; AchievementDefinition Achievements::GetAchievementDefinition(AchievementID theAchievement) @@ -42,7 +42,6 @@ Achievements::Achievements(LawnApp *theApp) Achievements ::~Achievements() { - } void Achievements::GiveAchievement(AchievementID theAchievement, bool aForceGive) @@ -60,9 +59,8 @@ void Achievements::GiveAchievement(AchievementID theAchievement, bool aForceGive mApp->PlaySample(Sexy::SOUND_ACHIEVEMENT); mApp->mBoard->DisplayAdvice( - StrFormat("%s%s", TodStringTranslate(Achievements::GetAchievementDefinition(theAchievement).mName).c_str(), TodStringTranslate("[ACHIEVEMENT_ACHIEVED]").c_str()), - MessageStyle::MESSAGE_STYLE_ACHIEVEMENT, AdviceType::ADVICE_NONE - ); + StrFormat("%s%s", TodStringTranslate(Achievements::GetAchievementDefinition(theAchievement).mName).c_str(), TodStringTranslate("[ACHIEVEMENT_ACHIEVED]").c_str()), + MessageStyle::MESSAGE_STYLE_ACHIEVEMENT, AdviceType::ADVICE_NONE); } void Achievements::SyncAchievements() diff --git a/src/Lawn/System/Music.cpp b/src/Lawn/System/Music.cpp index 84d98e0..6a50cb0 100644 --- a/src/Lawn/System/Music.cpp +++ b/src/Lawn/System/Music.cpp @@ -88,7 +88,7 @@ bool Music::TodLoadMusic(MusicFile theMusicFile, const std::string &theFileName) aMusicInfo.mHStream = aStream; aMusicInfo.mHMusic = aHMusic; aBass->mMusicMap.insert( - BassMusicMap::value_type(theMusicFile, aMusicInfo)); + BassMusicMap::value_type(theMusicFile, aMusicInfo)); return true; } @@ -239,7 +239,8 @@ void Music::MusicInit() #endif LoadSong(MusicFile::MUSIC_FILE_DRUMS, "sounds/mainmusic.mo3"); - mApp->mCompletedLoadingThreadTasks += 3500;; + mApp->mCompletedLoadingThreadTasks += 3500; + ; LoadSong(MusicFile::MUSIC_FILE_HIHATS, "sounds/mainmusic_hihats.mo3"); mApp->mCompletedLoadingThreadTasks += 3500; @@ -256,7 +257,7 @@ void Music::MusicLoadCreditsSong() #ifndef _DEBUG BassMusicInterface *aBass = (BassMusicInterface *)mMusicInterface; if (aBass->mMusicMap.find((int)MusicFile::MUSIC_FILE_CREDITS_ZOMBIES_ON_YOUR_LAWN) == - aBass->mMusicMap.end()) + aBass->mMusicMap.end()) LoadSong(MusicFile::MUSIC_FILE_CREDITS_ZOMBIES_ON_YOUR_LAWN, "sounds/ZombiesOnYourLawn.ogg"); #endif } @@ -318,7 +319,6 @@ void Music::PlayFromOffset(MusicFile theMusicFile, int theOffset, double theVolu BASS_ChannelFlags(aMusicInfo->mHMusic, BASS_MUSIC_POSRESET | BASS_MUSIC_RAMP | BASS_MUSIC_LOOP, -1); BASS_ChannelPlay(aMusicInfo->mHMusic, false); BASS_ChannelSetPosition(aMusicInfo->mHMusic, theOffset, BASS_POS_MUSIC_ORDER); - } } @@ -605,7 +605,7 @@ void Music::UpdateBurstTracker() else { aMainTrackVolume = - TodAnimateCurveFloat(400, 0, mBurstStateCounter, 1.0f, 0.0f, TodCurves::CURVE_LINEAR); + TodAnimateCurveFloat(400, 0, mBurstStateCounter, 1.0f, 0.0f, TodCurves::CURVE_LINEAR); if (mBurstStateCounter == 0) { mMusicBurstState = MusicBurstState::MUSIC_BURST_ON; @@ -619,7 +619,7 @@ void Music::UpdateBurstTracker() if (aBurstScheme == MusicBurstType::MUSIC_BURST_REPLACE) aMainTrackVolume = 0.0f; if (mBurstStateCounter == 0 && - ((mApp->mBoard->CountZombiesOnScreen() < 4 && mBurstOverride == MusicBurstType::MUSIC_BURST_INVALID) || mBurstOverride == MusicBurstType::MUSIC_BURST_REPLACE)) + ((mApp->mBoard->CountZombiesOnScreen() < 4 && mBurstOverride == MusicBurstType::MUSIC_BURST_INVALID) || mBurstOverride == MusicBurstType::MUSIC_BURST_REPLACE)) { if (aBurstScheme == MusicBurstType::MUSIC_BURST_ADDON) { @@ -707,7 +707,7 @@ void Music::UpdateBurstTracker() mMusicInterface->SetSongVolume(mCurMusicFileDrums, aDrumsVolume); if (aDrumsJumpOrder != -1) BASS_ChannelSetPosition(GetBassMusicHandle(mCurMusicFileDrums), LOWORD(aDrumsJumpOrder), - BASS_POS_MUSIC_ORDER); + BASS_POS_MUSIC_ORDER); } } @@ -760,7 +760,7 @@ void Music::UpdateBurstAudio() else { aMainTrackVolume = - TodAnimateCurveFloat(400, 0, mBurstStateCounter, 1.0f, 0.0f, TodCurves::CURVE_LINEAR); + TodAnimateCurveFloat(400, 0, mBurstStateCounter, 1.0f, 0.0f, TodCurves::CURVE_LINEAR); if (mBurstStateCounter == 0) { mMusicBurstState = MusicBurstState::MUSIC_BURST_ON; @@ -774,7 +774,7 @@ void Music::UpdateBurstAudio() if (aBurstScheme == MusicBurstType::MUSIC_BURST_REPLACE) aMainTrackVolume = 0.0f; if (mBurstStateCounter == 0 && - ((mApp->mBoard->CountZombiesOnScreen() < 4 && mBurstOverride == MusicBurstType::MUSIC_BURST_INVALID) || mBurstOverride == MusicBurstType::MUSIC_BURST_REPLACE)) + ((mApp->mBoard->CountZombiesOnScreen() < 4 && mBurstOverride == MusicBurstType::MUSIC_BURST_INVALID) || mBurstOverride == MusicBurstType::MUSIC_BURST_REPLACE)) { if (aBurstScheme == MusicBurstType::MUSIC_BURST_ADDON) { @@ -852,7 +852,7 @@ void Music::MusicUpdate() else { float aFadeLevel = - TodAnimateCurveFloat(mFadeOutDuration, 0, mFadeOutCounter, 1.0f, 0.0f, TodCurves::CURVE_LINEAR); + TodAnimateCurveFloat(mFadeOutDuration, 0, mFadeOutCounter, 1.0f, 0.0f, TodCurves::CURVE_LINEAR); mMusicInterface->SetSongVolume(mCurMusicFileMain, aFadeLevel); } } @@ -878,16 +878,16 @@ void Music::StartGameMusic() TOD_ASSERT(mApp->mBoard); if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) MakeSureMusicIsPlaying(MusicTune::MUSIC_TUNE_ZEN_GARDEN); else if (mApp->IsFinalBossLevel()) MakeSureMusicIsPlaying(MusicTune::MUSIC_TUNE_FINAL_BOSS_BRAINIAC_MANIAC); else if (mApp->IsWallnutBowlingLevel() || mApp->IsWhackAZombieLevel() || mApp->IsLittleTroubleLevel() || - mApp->IsBungeeBlitzLevel() || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_SPEED) + mApp->IsBungeeBlitzLevel() || mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_SPEED) MakeSureMusicIsPlaying(MusicTune::MUSIC_TUNE_MINIGAME_LOONBOON); else if ((mApp->IsAdventureMode() && (mApp->mPlayerInfo->GetLevel() == 10 || mApp->mPlayerInfo->GetLevel() == 20 || - mApp->mPlayerInfo->GetLevel() == 30)) || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_COLUMN) + mApp->mPlayerInfo->GetLevel() == 30)) || + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_COLUMN) MakeSureMusicIsPlaying(MusicTune::MUSIC_TUNE_CONVEYER); else if (mApp->IsStormyNightLevel()) StopAllMusic(); @@ -936,9 +936,9 @@ void Music::GameMusicPause(bool thePause) mMusicInterface->StopMusic(mCurMusicFileMain); if (mCurMusicTune == MusicTune::MUSIC_TUNE_DAY_GRASSWALK || - mCurMusicTune == MusicTune::MUSIC_TUNE_POOL_WATERYGRAVES || - mCurMusicTune == MusicTune::MUSIC_TUNE_FOG_RIGORMORMIST || - mCurMusicTune == MusicTune::MUSIC_TUNE_ROOF_GRAZETHEROOF) + mCurMusicTune == MusicTune::MUSIC_TUNE_POOL_WATERYGRAVES || + mCurMusicTune == MusicTune::MUSIC_TUNE_FOG_RIGORMORMIST || + mCurMusicTune == MusicTune::MUSIC_TUNE_ROOF_GRAZETHEROOF) { mMusicInterface->StopMusic(mCurMusicFileDrums); mMusicInterface->StopMusic(mCurMusicFileHihats); diff --git a/src/Lawn/System/PlayerInfo.cpp b/src/Lawn/System/PlayerInfo.cpp index 4ee8329..c3dd1cc 100644 --- a/src/Lawn/System/PlayerInfo.cpp +++ b/src/Lawn/System/PlayerInfo.cpp @@ -36,7 +36,6 @@ void PlayerInfo::SyncDetails(ProfileSyncer &theSync) theSync.SyncArrayFromSize("challenge_records", mChallengeRecords, NUM_GAME_MODES); theSync.SyncArrayFromSize("purchases", mPurchases, NUM_STORE_ITEM_MAX); - theSync.SyncInt("playtime_active", mPlayTimeActivePlayer); theSync.SyncInt("playtime_inactive", mPlayTimeInactivePlayer); theSync.SyncBool("used_cheat_keys", mHasUsedCheatKeys); @@ -88,7 +87,6 @@ void PlayerInfo::LoadDetails() Reset(); } } - } catch (nlohmann::json::parse_error &anError) { @@ -364,27 +362,27 @@ void ProfileSyncer::SyncString(const SexyString &theName, SexyString &theStr) void to_json(nlohmann::json &j, const PottedPlant &p) { j = { - {"seed_type", (int)p.mSeedType}, - {"garden", (int)p.mWhichZenGarden}, + { "seed_type", (int)p.mSeedType }, + { "garden", (int)p.mWhichZenGarden }, - {"x", p.mX}, - {"y", p.mY}, + { "x", p.mX }, + { "y", p.mY }, - {"facing", (int)p.mFacing}, + { "facing", (int)p.mFacing }, - {"last_watered", p.mLastWateredTime}, + { "last_watered", p.mLastWateredTime }, - {"draw_variation", (int)p.mDrawVariation}, - {"age", (int)p.mPlantAge}, + { "draw_variation", (int)p.mDrawVariation }, + { "age", (int)p.mPlantAge }, - {"times_fed", p.mTimesFed}, - {"feedings_per_grow", p.mFeedingsPerGrow}, + { "times_fed", p.mTimesFed }, + { "feedings_per_grow", p.mFeedingsPerGrow }, - {"plant_need", (int)p.mPlantNeed}, + { "plant_need", (int)p.mPlantNeed }, - {"last_need_fulfilled_time", p.mLastNeedFulfilledTime}, - {"last_fertilized_time", p.mLastFertilizedTime}, - {"last_chocolate_time", p.mLastChocolateTime} + { "last_need_fulfilled_time", p.mLastNeedFulfilledTime }, + { "last_fertilized_time", p.mLastFertilizedTime }, + { "last_chocolate_time", p.mLastChocolateTime } }; } @@ -416,31 +414,31 @@ void from_json(const nlohmann::json &j, PottedPlant &p) void to_json(nlohmann::json &j, const Zombatar &z) { j = { - {"skin_color", (int)z.mSkinColor}, + { "skin_color", (int)z.mSkinColor }, - {"clothes", z.mClothes}, - {"clothes_color", z.mClothesColor}, + { "clothes", z.mClothes }, + { "clothes_color", z.mClothesColor }, - {"tidbits", (int)z.mTidbits}, - {"tidbits_color", (int)z.mTidbitsColor}, + { "tidbits", (int)z.mTidbits }, + { "tidbits_color", (int)z.mTidbitsColor }, - {"accessories", z.mAccessories}, - {"accessories_color", z.mAccessoriesColor}, + { "accessories", z.mAccessories }, + { "accessories_color", z.mAccessoriesColor }, - {"facial_hair", (int)z.mFacialHair}, - {"facial_hair_color", (int)z.mFacialHairColor}, + { "facial_hair", (int)z.mFacialHair }, + { "facial_hair_color", (int)z.mFacialHairColor }, - {"hair", (int)z.mHair}, - {"hair_color", (int)z.mHairColor}, + { "hair", (int)z.mHair }, + { "hair_color", (int)z.mHairColor }, - {"eyewear", (int)z.mEyewear}, - {"eyewear_color", (int)z.mEyewearColor}, + { "eyewear", (int)z.mEyewear }, + { "eyewear_color", (int)z.mEyewearColor }, - {"hat", (int)z.mHat}, - {"hat_color", (int)z.mHatColor}, + { "hat", (int)z.mHat }, + { "hat_color", (int)z.mHatColor }, - {"backdrop", (int)z.mBackdrop}, - {"backdrop_color", (int)z.mBackdropColor}, + { "backdrop", (int)z.mBackdrop }, + { "backdrop_color", (int)z.mBackdropColor }, }; } @@ -471,10 +469,10 @@ void from_json(const nlohmann::json &j, Zombatar &z) z.mBackdrop = (int)j.value("backdrop", 0); z.mBackdropColor = (int)j.value("backdrop_color", 17); - } -template void ProfileSyncer::SyncArray(const SexyString &theName, T (&theArray)[N], int &theRealSize) +template +void ProfileSyncer::SyncArray(const SexyString &theName, T (&theArray)[N], int &theRealSize) { if (mReading) { @@ -509,7 +507,8 @@ template void ProfileSyncer::SyncArray(const SexyString & } } -template void ProfileSyncer::SyncArrayFromSize(const SexyString &theName, T (&theArray)[N], int theRealSize) +template +void ProfileSyncer::SyncArrayFromSize(const SexyString &theName, T (&theArray)[N], int theRealSize) { if (mReading) { diff --git a/src/Lawn/System/PoolEffect.cpp b/src/Lawn/System/PoolEffect.cpp index ba2909c..499d81e 100644 --- a/src/Lawn/System/PoolEffect.cpp +++ b/src/Lawn/System/PoolEffect.cpp @@ -55,9 +55,9 @@ unsigned int PoolEffect::BilinearLookupFixedPoint(unsigned int u, unsigned int v unsigned int indexV1 = ((timeV >> 16) + 1) % 256; return ((((factorU0 * factorV1) / 65536) * mCausticGrayscaleImage[indexV1 * 256 + indexU0]) / 65536) + - ((((factorU1 * factorV1) / 65536) * mCausticGrayscaleImage[indexV1 * 256 + indexU1]) / 65536) + - ((((factorU0 * factorV0) / 65536) * mCausticGrayscaleImage[indexV0 * 256 + indexU0]) / 65536) + - ((((factorU1 * factorV0) / 65536) * mCausticGrayscaleImage[indexV0 * 256 + indexU1]) / 65536); + ((((factorU1 * factorV1) / 65536) * mCausticGrayscaleImage[indexV1 * 256 + indexU1]) / 65536) + + ((((factorU0 * factorV0) / 65536) * mCausticGrayscaleImage[indexV0 * 256 + indexU0]) / 65536) + + ((((factorU1 * factorV0) / 65536) * mCausticGrayscaleImage[indexV0 * 256 + indexU1]) / 65536); } void PoolEffect::UpdateWaterEffect(Sexy::Graphics *g) @@ -118,7 +118,7 @@ void PoolEffect::PoolEffectDraw(Sexy::Graphics *g, bool theIsNight) float aGridSquareX = IMAGE_POOL->GetWidth() / 15.0f; float aGridSquareY = IMAGE_POOL->GetHeight() / 5.0f; - float aOffsetArray[3][16][6][2] = {0}; + float aOffsetArray[3][16][6][2] = { 0 }; for (int x = 0; x <= 15; x++) { for (int y = 0; y <= 5; y++) @@ -138,17 +138,17 @@ void PoolEffect::PoolEffectDraw(Sexy::Graphics *g, bool theIsNight) aOffsetArray[0][x][y][0] = sin(yPhase + aWaveTime2) * 0.002f + sin(yPhase + aWaveTime1) * 0.005f; aOffsetArray[0][x][y][1] = sin(xPhase + aWaveTime5) * 0.01f + sin(xPhase + aWaveTime3) * 0.015f + - sin(xPhase + aWaveTime4) * 0.005f; + sin(xPhase + aWaveTime4) * 0.005f; aOffsetArray[1][x][y][0] = - sin(yPhase * 0.2f + aWaveTime2) * 0.015f + sin(yPhase * 0.2f + aWaveTime1) * 0.012f; + sin(yPhase * 0.2f + aWaveTime2) * 0.015f + sin(yPhase * 0.2f + aWaveTime1) * 0.012f; aOffsetArray[1][x][y][1] = sin(xPhase * 0.2f + aWaveTime5) * 0.005f + - sin(xPhase * 0.2f + aWaveTime3) * 0.015f + - sin(xPhase * 0.2f + aWaveTime4) * 0.02f; + sin(xPhase * 0.2f + aWaveTime3) * 0.015f + + sin(xPhase * 0.2f + aWaveTime4) * 0.02f; aOffsetArray[2][x][y][0] += - sin(yPhase + aWaveTime1 * 1.5f) * 0.004f + sin(yPhase + aWaveTime2 * 1.5f) * 0.005f; + sin(yPhase + aWaveTime1 * 1.5f) * 0.004f + sin(yPhase + aWaveTime2 * 1.5f) * 0.005f; aOffsetArray[2][x][y][1] += sin(xPhase * 4.0f + aWaveTime5 * 2.5f) * 0.005f + - sin(xPhase * 2.0f + aWaveTime3 * 2.5f) * 0.04f + - sin(xPhase * 3.0f + aWaveTime4 * 2.5f) * 0.02f; + sin(xPhase * 2.0f + aWaveTime3 * 2.5f) * 0.04f + + sin(xPhase * 3.0f + aWaveTime4 * 2.5f) * 0.02f; } else { @@ -160,8 +160,8 @@ void PoolEffect::PoolEffectDraw(Sexy::Graphics *g, bool theIsNight) } } - int aIndexOffsetX[6] = {0, 0, 1, 0, 1, 1}; - int aIndexOffsetY[6] = {0, 1, 1, 0, 1, 0}; + int aIndexOffsetX[6] = { 0, 0, 1, 0, 1, 1 }; + int aIndexOffsetY[6] = { 0, 1, 1, 0, 1, 0 }; TriVertex aVertArray[3][150][3]; for (int x = 0; x < 15; x++) diff --git a/src/Lawn/System/PopDRMComm.cpp b/src/Lawn/System/PopDRMComm.cpp index 681db4c..cd7edc3 100644 --- a/src/Lawn/System/PopDRMComm.cpp +++ b/src/Lawn/System/PopDRMComm.cpp @@ -115,7 +115,7 @@ bool PopDRMComm::DoIPC() { mEventHwnd = CreateEvent(NULL, NULL, NULL, NULL); PostMessage( - (HWND)0xFFFF, mWindowMessage[PopDRMComm::PopCapDRM_IPC], GetCurrentProcessId(), (LPARAM)mDrmGameWnd); + (HWND)0xFFFF, mWindowMessage[PopDRMComm::PopCapDRM_IPC], GetCurrentProcessId(), (LPARAM)mDrmGameWnd); WaitForSingleObject(mEventHwnd, 100); CloseHandle(mEventHwnd); } diff --git a/src/Lawn/System/ProfileMgr.cpp b/src/Lawn/System/ProfileMgr.cpp index e4683cb..7f92192 100644 --- a/src/Lawn/System/ProfileMgr.cpp +++ b/src/Lawn/System/ProfileMgr.cpp @@ -98,7 +98,6 @@ void ProfileMgr::Load() { TodTraceAndLog("[LawnProject] - Failed to profiles\n"); Clear(); - } } @@ -139,11 +138,11 @@ bool ProfileMgr::RenameProfile(const SexyString &theOldName, const SexyString &t { if ( #ifdef _WIN32 - _stricmp(theOldName.c_str(), theNewName.c_str()) + _stricmp(theOldName.c_str(), theNewName.c_str()) #else - strcasecmp(theOldName.c_str(), theNewName.c_str()) + strcasecmp(theOldName.c_str(), theNewName.c_str()) #endif - == 0) + == 0) anOldItr->second.mName = theNewName; else { diff --git a/src/Lawn/System/ReanimationLawn.cpp b/src/Lawn/System/ReanimationLawn.cpp index 49bd805..9b2fe4d 100644 --- a/src/Lawn/System/ReanimationLawn.cpp +++ b/src/Lawn/System/ReanimationLawn.cpp @@ -11,20 +11,20 @@ void ReanimatorCache::UpdateReanimationForVariation(Reanimation *theReanim, DrawVariation theDrawVariation) { if (theDrawVariation >= DrawVariation::VARIATION_MARIGOLD_WHITE && - theDrawVariation <= DrawVariation::VARIATION_MARIGOLD_LIGHT_GREEN) + theDrawVariation <= DrawVariation::VARIATION_MARIGOLD_LIGHT_GREEN) { int aVariationIndex = (int)theDrawVariation - (int)DrawVariation::VARIATION_MARIGOLD_WHITE; - Color MARIGOLD_VARIATIONS[] = {Color(255, 255, 255), - Color(230, 30, 195), - Color(250, 125, 5), - Color(255, 145, 215), - Color(160, 255, 245), - Color(230, 30, 30), - Color(5, 130, 255), - Color(195, 55, 235), - Color(235, 210, 255), - Color(255, 245, 55), - Color(180, 255, 105)}; + Color MARIGOLD_VARIATIONS[] = { Color(255, 255, 255), + Color(230, 30, 195), + Color(250, 125, 5), + Color(255, 145, 215), + Color(160, 255, 245), + Color(230, 30, 30), + Color(5, 130, 255), + Color(195, 55, 235), + Color(235, 210, 255), + Color(255, 245, 55), + Color(180, 255, 105) }; TOD_ASSERT(aVariationIndex >= 0 && aVariationIndex < LENGTH(MARIGOLD_VARIATIONS)); theReanim->GetTrackInstanceByName("Marigold_petals")->mTrackColor = MARIGOLD_VARIATIONS[aVariationIndex]; @@ -59,11 +59,11 @@ void ReanimatorCache::UpdateReanimationForVariation(Reanimation *theReanim, Draw } void ReanimatorCache::DrawReanimatorFrame(Graphics *g, - float thePosX, - float thePosY, - ReanimationType theReanimationType, - const char *theTrackName, - DrawVariation theDrawVariation) + float thePosX, + float thePosY, + ReanimationType theReanimationType, + const char *theTrackName, + DrawVariation theDrawVariation) { Reanimation aReanim; aReanim.ReanimationInitializeType(thePosX, thePosY, theReanimationType); @@ -112,7 +112,7 @@ GPUImage *ReanimatorCache::MakeBlankGPUImage(int theWidth, int theHeight) } void ReanimatorCache::GetPlantImageSize( - SeedType theSeedType, int &theOffsetX, int &theOffsetY, int &theWidth, int &theHeight) + SeedType theSeedType, int &theOffsetX, int &theOffsetY, int &theWidth, int &theHeight) { theOffsetX = -20; theOffsetY = -20; @@ -148,11 +148,11 @@ GPUImage *ReanimatorCache::MakeCachedMowerFrame(LawnMowerType theMowerType) aMemoryGraphics.mScaleX = 0.85f; aMemoryGraphics.mScaleY = 0.85f; DrawReanimatorFrame(&aMemoryGraphics, - 10.0f, - 0.0f, - ReanimationType::REANIM_LAWNMOWER, - "anim_normal", - DrawVariation::VARIATION_NORMAL); + 10.0f, + 0.0f, + ReanimationType::REANIM_LAWNMOWER, + "anim_normal", + DrawVariation::VARIATION_NORMAL); break; } case LawnMowerType::LAWNMOWER_POOL: { @@ -162,11 +162,11 @@ GPUImage *ReanimatorCache::MakeCachedMowerFrame(LawnMowerType theMowerType) aMemoryGraphics.mScaleX = 0.8f; aMemoryGraphics.mScaleY = 0.8f; DrawReanimatorFrame(&aMemoryGraphics, - 10.0f, - 25.0f, - ReanimationType::REANIM_POOL_CLEANER, - nullptr, - DrawVariation::VARIATION_NORMAL); + 10.0f, + 25.0f, + ReanimationType::REANIM_POOL_CLEANER, + nullptr, + DrawVariation::VARIATION_NORMAL); break; } case LawnMowerType::LAWNMOWER_ROOF: { @@ -176,11 +176,11 @@ GPUImage *ReanimatorCache::MakeCachedMowerFrame(LawnMowerType theMowerType) aMemoryGraphics.mScaleX = 0.85f; aMemoryGraphics.mScaleY = 0.85f; DrawReanimatorFrame(&aMemoryGraphics, - 10.0f, - 0.0f, - ReanimationType::REANIM_ROOF_CLEANER, - nullptr, - DrawVariation::VARIATION_NORMAL); + 10.0f, + 0.0f, + ReanimationType::REANIM_ROOF_CLEANER, + nullptr, + DrawVariation::VARIATION_NORMAL); break; } case LawnMowerType::LAWNMOWER_SUPER_MOWER: { @@ -190,11 +190,11 @@ GPUImage *ReanimatorCache::MakeCachedMowerFrame(LawnMowerType theMowerType) aMemoryGraphics.mScaleX = 0.85f; aMemoryGraphics.mScaleY = 0.85f; DrawReanimatorFrame(&aMemoryGraphics, - 10.0f, - 0.0f, - ReanimationType::REANIM_LAWNMOWER, - "anim_tricked", - DrawVariation::VARIATION_NORMAL); + 10.0f, + 0.0f, + ReanimationType::REANIM_LAWNMOWER, + "anim_tricked", + DrawVariation::VARIATION_NORMAL); break; } default: @@ -221,73 +221,73 @@ GPUImage *ReanimatorCache::MakeCachedPlantFrame(SeedType theSeedType, DrawVariat aMemoryGraphics.mScaleX = 0.85f; aMemoryGraphics.mScaleY = 0.85f; DrawReanimatorFrame(&aMemoryGraphics, - -(int)(aOffsetX - 12.0f), - -(int)(aOffsetY - 12.0f), - aPlantDef.mReanimationType, - "anim_armed", - theDrawVariation); + -(int)(aOffsetX - 12.0f), + -(int)(aOffsetY - 12.0f), + aPlantDef.mReanimationType, + "anim_armed", + theDrawVariation); } else if (theSeedType == SeedType::SEED_INSTANT_COFFEE) { aMemoryGraphics.mScaleX = 0.8f; aMemoryGraphics.mScaleY = 0.8f; DrawReanimatorFrame(&aMemoryGraphics, - -(int)(aOffsetX - 12.0f), - -(int)(aOffsetY - 12.0f), - aPlantDef.mReanimationType, - "anim_idle", - theDrawVariation); + -(int)(aOffsetX - 12.0f), + -(int)(aOffsetY - 12.0f), + aPlantDef.mReanimationType, + "anim_idle", + theDrawVariation); } else if (theSeedType == SeedType::SEED_EXPLODE_O_NUT) { aMemoryGraphics.SetColorizeImages(true); aMemoryGraphics.SetColor(Color(255, 64, 64)); DrawReanimatorFrame( - &aMemoryGraphics, -aOffsetX, -aOffsetY, aPlantDef.mReanimationType, "anim_idle", theDrawVariation); + &aMemoryGraphics, -aOffsetX, -aOffsetY, aPlantDef.mReanimationType, "anim_idle", theDrawVariation); } else { DrawReanimatorFrame( - &aMemoryGraphics, -aOffsetX, -aOffsetY, aPlantDef.mReanimationType, "anim_idle", theDrawVariation); + &aMemoryGraphics, -aOffsetX, -aOffsetY, aPlantDef.mReanimationType, "anim_idle", theDrawVariation); if (theSeedType == SeedType::SEED_PEASHOOTER || theSeedType == SeedType::SEED_SNOWPEA || - theSeedType == SeedType::SEED_REPEATER || theSeedType == SeedType::SEED_LEFTPEATER || - theSeedType == SeedType::SEED_GATLINGPEA) + theSeedType == SeedType::SEED_REPEATER || theSeedType == SeedType::SEED_LEFTPEATER || + theSeedType == SeedType::SEED_GATLINGPEA) { DrawReanimatorFrame( - &aMemoryGraphics, -aOffsetX, -aOffsetY, aPlantDef.mReanimationType, "anim_head_idle", theDrawVariation); + &aMemoryGraphics, -aOffsetX, -aOffsetY, aPlantDef.mReanimationType, "anim_head_idle", theDrawVariation); } else if (theSeedType == SeedType::SEED_SPLITPEA) { DrawReanimatorFrame( - &aMemoryGraphics, -aOffsetX, -aOffsetY, aPlantDef.mReanimationType, "anim_head_idle", theDrawVariation); + &aMemoryGraphics, -aOffsetX, -aOffsetY, aPlantDef.mReanimationType, "anim_head_idle", theDrawVariation); DrawReanimatorFrame(&aMemoryGraphics, - -aOffsetX, - -aOffsetY, - aPlantDef.mReanimationType, - "anim_splitpea_idle", - theDrawVariation); + -aOffsetX, + -aOffsetY, + aPlantDef.mReanimationType, + "anim_splitpea_idle", + theDrawVariation); } else if (theSeedType == SeedType::SEED_THREEPEATER) { DrawReanimatorFrame(&aMemoryGraphics, - -aOffsetX, - -aOffsetY, - aPlantDef.mReanimationType, - "anim_head_idle1", - theDrawVariation); + -aOffsetX, + -aOffsetY, + aPlantDef.mReanimationType, + "anim_head_idle1", + theDrawVariation); DrawReanimatorFrame(&aMemoryGraphics, - -aOffsetX, - -aOffsetY, - aPlantDef.mReanimationType, - "anim_head_idle3", - theDrawVariation); + -aOffsetX, + -aOffsetY, + aPlantDef.mReanimationType, + "anim_head_idle3", + theDrawVariation); DrawReanimatorFrame(&aMemoryGraphics, - -aOffsetX, - -aOffsetY, - aPlantDef.mReanimationType, - "anim_head_idle2", - theDrawVariation); + -aOffsetX, + -aOffsetY, + aPlantDef.mReanimationType, + "anim_head_idle2", + theDrawVariation); } } @@ -360,8 +360,6 @@ GPUImage *ReanimatorCache::MakeCachedZombieFrame(ZombieType theZombieType) aPropellerReanim.SetFramesForLayer("Propeller"); aReanim.Draw(&aMemoryGraphics); aPropellerReanim.Draw(&aMemoryGraphics); - - } else if (aZombieDef.mReanimationType == ReanimationType::REANIM_BOSS) { @@ -400,7 +398,7 @@ GPUImage *ReanimatorCache::MakeCachedZombieFrame(ZombieType theZombieType) } DrawReanimatorFrame( - &aMemoryGraphics, aPosX, aPosY, aZombieDef.mReanimationType, aTrackName, DrawVariation::VARIATION_NORMAL); + &aMemoryGraphics, aPosX, aPosY, aZombieDef.mReanimationType, aTrackName, DrawVariation::VARIATION_NORMAL); } return aGPUImage; } @@ -433,7 +431,7 @@ void ReanimatorCache::ReanimatorCacheDispose() } void ReanimatorCache::DrawCachedPlant( - Graphics *g, float thePosX, float thePosY, SeedType theSeedType, DrawVariation theDrawVariation) + Graphics *g, float thePosX, float thePosY, SeedType theSeedType, DrawVariation theDrawVariation) { TOD_ASSERT(theSeedType >= 0 && theSeedType < SeedType::NUM_SEED_TYPES); @@ -441,7 +439,7 @@ void ReanimatorCache::DrawCachedPlant( if (theDrawVariation != DrawVariation::VARIATION_NORMAL) { for (TodListNode *aNode = mImageVariationList.mHead; aNode != nullptr; - aNode = aNode->mNext) + aNode = aNode->mNext) { ReanimCacheImageVariation &aImageVariation = aNode->mValue; if (aImageVariation.mSeedType == theSeedType && aImageVariation.mDrawVariation == theDrawVariation) @@ -477,7 +475,7 @@ void ReanimatorCache::DrawCachedPlant( g->DrawImage(aImage, thePosX + aOffsetX, thePosY + aOffsetY); else TodDrawImageScaledF( - g, aImage, thePosX + (aOffsetX * g->mScaleX), thePosY + (aOffsetY * g->mScaleY), g->mScaleX, g->mScaleY); + g, aImage, thePosX + (aOffsetX * g->mScaleX), thePosY + (aOffsetY * g->mScaleY), g->mScaleX, g->mScaleY); } void ReanimatorCache::DrawCachedMower(Graphics *g, float thePosX, float thePosY, LawnMowerType theMowerType) diff --git a/src/Lawn/System/SaveGame.cpp b/src/Lawn/System/SaveGame.cpp index 57c70f2..d3da909 100644 --- a/src/Lawn/System/SaveGame.cpp +++ b/src/Lawn/System/SaveGame.cpp @@ -10,7 +10,8 @@ static constexpr uint32_t SAVE_VERSION = 1; -template void SaveContext::SyncVar(T &aValue, const std::string &aName) +template +void SaveContext::SyncVar(T &aValue, const std::string &aName) { if (mReading) { @@ -196,7 +197,7 @@ void SaveContext::SyncImage(Image *&theImage, const std::string &theOwner) } void SyncDataIDList(TodList *theDataIDList, SaveContext &theContext, TodAllocator *theAllocator, - const std::string &aListOwner) + const std::string &aListOwner) { try { @@ -239,10 +240,10 @@ void SyncDataIDList(TodList *theDataIDList, SaveContext &theContex } void SyncParticleEmitter(TodParticleSystem *theParticleSystem, TodParticleEmitter *theParticleEmitter, - SaveContext &theContext) + SaveContext &theContext) { std::string aIDStr = - StrFormat("%u", theParticleSystem->mParticleHolder->mEmitters.DataArrayGetID(theParticleEmitter)); + StrFormat("%u", theParticleSystem->mParticleHolder->mEmitters.DataArrayGetID(theParticleEmitter)); int aEmitterDefIndex = 0; if (theContext.mReading) { @@ -258,13 +259,13 @@ void SyncParticleEmitter(TodParticleSystem *theParticleSystem, TodParticleEmitte theContext.SyncImage(theParticleEmitter->mImageOverride, StrFormat("ParticleEmitter_%s", aIDStr.c_str())); SyncDataIDList((TodList *)&theParticleEmitter->mParticleList, theContext, - &theParticleSystem->mParticleHolder->mParticleListNodeAllocator, - StrFormat("ParticleEmitter_%s", aIDStr.c_str())); + &theParticleSystem->mParticleHolder->mParticleListNodeAllocator, + StrFormat("ParticleEmitter_%s", aIDStr.c_str())); for (TodListNode *aNode = theParticleEmitter->mParticleList.mHead; aNode != nullptr; - aNode = aNode->mNext) + aNode = aNode->mNext) { TodParticle *aParticle = - theParticleSystem->mParticleHolder->mParticles.DataArrayGet((unsigned int)aNode->mValue); + theParticleSystem->mParticleHolder->mParticles.DataArrayGet((unsigned int)aNode->mValue); if (theContext.mReading) { aParticle->mParticleEmitter = theParticleEmitter; @@ -275,7 +276,7 @@ void SyncParticleEmitter(TodParticleSystem *theParticleSystem, TodParticleEmitte void SyncParticleSystem(Board *theBoard, TodParticleSystem *theParticleSystem, SaveContext &theContext) { std::string aIDStr = StrFormat( - "%u", theBoard->mApp->mEffectSystem->mParticleHolder->mParticleSystems.DataArrayGetID(theParticleSystem)); + "%u", theBoard->mApp->mEffectSystem->mParticleHolder->mParticleSystems.DataArrayGetID(theParticleSystem)); theContext.SyncParticleDef(theParticleSystem->mParticleDef, StrFormat("ParticleSystem_%s", aIDStr.c_str())); if (theContext.mReading) @@ -284,13 +285,13 @@ void SyncParticleSystem(Board *theBoard, TodParticleSystem *theParticleSystem, S } SyncDataIDList((TodList *)&theParticleSystem->mEmitterList, theContext, - &theParticleSystem->mParticleHolder->mEmitterListNodeAllocator, - StrFormat("ParticleSystem_%s", aIDStr.c_str())); + &theParticleSystem->mParticleHolder->mEmitterListNodeAllocator, + StrFormat("ParticleSystem_%s", aIDStr.c_str())); for (TodListNode *aNode = theParticleSystem->mEmitterList.mHead; aNode != nullptr; - aNode = aNode->mNext) + aNode = aNode->mNext) { TodParticleEmitter *aEmitter = - theParticleSystem->mParticleHolder->mEmitters.DataArrayGet((unsigned int)aNode->mValue); + theParticleSystem->mParticleHolder->mEmitters.DataArrayGet((unsigned int)aNode->mValue); SyncParticleEmitter(theParticleSystem, aEmitter, theContext); } } @@ -298,7 +299,7 @@ void SyncParticleSystem(Board *theBoard, TodParticleSystem *theParticleSystem, S void SyncReanimation(Board *theBoard, Reanimation *theReanimation, SaveContext &theContext) { std::string aIDStr = StrFormat( - "%u", theBoard->mApp->mEffectSystem->mReanimationHolder->mReanimations.DataArrayGetID(theReanimation)); + "%u", theBoard->mApp->mEffectSystem->mReanimationHolder->mReanimations.DataArrayGetID(theReanimation)); theContext.SyncReanimationDef(theReanimation->mDefinition, StrFormat("Reanimation_%s", aIDStr.c_str())); if (theContext.mReading) { @@ -313,13 +314,13 @@ void SyncReanimation(Board *theBoard, Reanimation *theReanimation, SaveContext & theReanimation->mTrackInstances = (ReanimatorTrackInstance *)FindGlobalAllocator(aSize)->Calloc(aSize); } theContext.SyncBytes(theReanimation->mTrackInstances, aSize, - StrFormat("Reanimation_%s_Tracks", aIDStr.c_str())); + StrFormat("Reanimation_%s_Tracks", aIDStr.c_str())); for (int aTrackIndex = 0; aTrackIndex < theReanimation->mDefinition->mTrackCount; aTrackIndex++) { ReanimatorTrackInstance &aTrackInstance = theReanimation->mTrackInstances[aTrackIndex]; theContext.SyncImage(aTrackInstance.mImageOverride, - StrFormat("Reanimation_%s_Track[%d]", aIDStr.c_str(), aTrackIndex)); + StrFormat("Reanimation_%s_Track[%d]", aIDStr.c_str(), aTrackIndex)); if (theContext.mReading) { @@ -340,8 +341,8 @@ void SyncReanimation(Board *theBoard, Reanimation *theReanimation, SaveContext & void SyncTrail(Board *theBoard, Trail *theTrail, SaveContext &theContext) { theContext.SyncTrailDef( - theTrail->mDefinition, - StrFormat("Trail_%u", theBoard->mApp->mEffectSystem->mTrailHolder->mTrails.DataArrayGetID(theTrail))); + theTrail->mDefinition, + StrFormat("Trail_%u", theBoard->mApp->mEffectSystem->mTrailHolder->mTrails.DataArrayGetID(theTrail))); if (theContext.mReading) { theTrail->mTrailHolder = theBoard->mApp->mEffectSystem->mTrailHolder; @@ -392,7 +393,7 @@ void SaveContext::LoadScheme(std::string thePath) } aCurrentIndex++; } - mSchemeEntries.insert({aVarName, anEntry}); + mSchemeEntries.insert({ aVarName, anEntry }); } } @@ -400,19 +401,19 @@ void SaveContext::LoadScheme(std::string thePath) #define SYNC_ARRAY(name) theContext.SyncBytes(name, sizeof(name), #name) #define SYNC_STD_ARRAY(name) theContext.SyncBytes(name.data(), name.size(), #name) #define SYNC_CLASS(obj) theContext.SyncBytes(obj, sizeof(*obj), #obj) -#define SYNC_DATA_ARRAY(type, arr) \ - theContext.SyncVar(arr.mMaxUsedCount, #arr ".mMaxUsedCount"); \ - theContext.SyncVar(arr.mFreeListHead, #arr ".mFreeListHead"); \ - theContext.SyncVar(arr.mSize, #arr ".mSize"); \ +#define SYNC_DATA_ARRAY(type, arr) \ + theContext.SyncVar(arr.mMaxUsedCount, #arr ".mMaxUsedCount"); \ + theContext.SyncVar(arr.mFreeListHead, #arr ".mFreeListHead"); \ + theContext.SyncVar(arr.mSize, #arr ".mSize"); \ theContext.SyncBytes(arr.mBlock, sizeof(DataArray::DataArrayItem) * arr.mMaxUsedCount, #arr ".mBlock"); -#define SYNC_GAMEOBJECT(obj) \ - theContext.SyncVar(obj->mX, #obj "->mX"); \ - theContext.SyncVar(obj->mY, #obj "->mY"); \ - theContext.SyncVar(obj->mWidth, #obj "->mWidth"); \ - theContext.SyncVar(obj->mHeight, #obj "->mHeight"); \ - theContext.SyncVar(obj->mVisible, #obj "->mVisible"); \ - theContext.SyncVar(obj->mRow, #obj "->mRow"); \ +#define SYNC_GAMEOBJECT(obj) \ + theContext.SyncVar(obj->mX, #obj "->mX"); \ + theContext.SyncVar(obj->mY, #obj "->mY"); \ + theContext.SyncVar(obj->mWidth, #obj "->mWidth"); \ + theContext.SyncVar(obj->mHeight, #obj "->mHeight"); \ + theContext.SyncVar(obj->mVisible, #obj "->mVisible"); \ + theContext.SyncVar(obj->mRow, #obj "->mRow"); \ theContext.SyncVar(obj->mRenderOrder, #obj "->mRenderOrder"); void LawnSyncGame(Board *theBoard, SaveContext &theContext) @@ -637,15 +638,15 @@ void LawnSyncGame(Board *theBoard, SaveContext &theContext) SYNC_DATA_ARRAY(Plant, theBoard->mPlants) SYNC_DATA_ARRAY(Projectile, theBoard->mProjectiles) theContext.SyncVar(theBoard->mCoins.mMaxUsedCount, "theBoard->mCoins" - ".mMaxUsedCount"); + ".mMaxUsedCount"); theContext.SyncVar(theBoard->mCoins.mFreeListHead, "theBoard->mCoins" - ".mFreeListHead"); + ".mFreeListHead"); theContext.SyncVar(theBoard->mCoins.mSize, "theBoard->mCoins" - ".mSize"); + ".mSize"); theContext.SyncBytes(theBoard->mCoins.mBlock, - sizeof(DataArray::DataArrayItem) * theBoard->mCoins.mMaxUsedCount, - "theBoard->mCoins" - ".mBlock"); + sizeof(DataArray::DataArrayItem) * theBoard->mCoins.mMaxUsedCount, + "theBoard->mCoins" + ".mBlock"); SYNC_DATA_ARRAY(LawnMower, theBoard->mLawnMowers) SYNC_DATA_ARRAY(GridItem, theBoard->mGridItems) SYNC_DATA_ARRAY(TodParticleSystem, theBoard->mApp->mEffectSystem->mParticleHolder->mParticleSystems) diff --git a/src/Lawn/ToolTipWidget.cpp b/src/Lawn/ToolTipWidget.cpp index a9646b9..abb1621 100644 --- a/src/Lawn/ToolTipWidget.cpp +++ b/src/Lawn/ToolTipWidget.cpp @@ -149,7 +149,7 @@ void ToolTipWidget::Draw(Graphics *g) { g->SetFont(FONT_TINYBOLD); g->DrawString( - mTitle, aPosX + (mWidth - FONT_TINYBOLD->StringWidth(mTitle)) / 2, aPosY + FONT_TINYBOLD->GetAscent()); + mTitle, aPosX + (mWidth - FONT_TINYBOLD->StringWidth(mTitle)) / 2, aPosY + FONT_TINYBOLD->GetAscent()); aPosY += FONT_TINYBOLD->GetAscent() + 2; } @@ -180,7 +180,7 @@ void ToolTipWidget::Draw(Graphics *g) { SexyString aLine = aLines[i]; g->DrawString( - aLine, aPosX + (mWidth - FONT_PICO129->StringWidth(aLine)) / 2, aPosY + FONT_PICO129->GetAscent()); + aLine, aPosX + (mWidth - FONT_PICO129->StringWidth(aLine)) / 2, aPosY + FONT_PICO129->GetAscent()); aPosY += FONT_PICO129->GetAscent() + 2; } } diff --git a/src/Lawn/Widget/AchievementsWidget.cpp b/src/Lawn/Widget/AchievementsWidget.cpp index dce457d..4a55af8 100644 --- a/src/Lawn/Widget/AchievementsWidget.cpp +++ b/src/Lawn/Widget/AchievementsWidget.cpp @@ -21,14 +21,14 @@ AchievementsWidget::AchievementsWidget(LawnApp *theApp) mPressedMoreButton = false; mBackButton = - MakeNewButton(AchievementsWidget::ACHIEVEMENTS_BACK, this, "", nullptr, Sexy::IMAGE_BLANK, - Sexy::IMAGE_ACHEESEMENTS_BACK_HIGHLIGHT, Sexy::IMAGE_ACHEESEMENTS_BACK_HIGHLIGHT); + MakeNewButton(AchievementsWidget::ACHIEVEMENTS_BACK, this, "", nullptr, Sexy::IMAGE_BLANK, + Sexy::IMAGE_ACHEESEMENTS_BACK_HIGHLIGHT, Sexy::IMAGE_ACHEESEMENTS_BACK_HIGHLIGHT); mBackButton->Resize(128, 55, Sexy::IMAGE_ACHEESEMENTS_MORE_ROCK->mWidth, Sexy::IMAGE_ACHEESEMENTS_MORE_ROCK->mHeight); mBackButton->mClip = false; mMoreButton = - MakeNewButton(AchievementsWidget::ACHIEVEMENTS_MORE, this, "", nullptr, Sexy::IMAGE_ACHEESEMENTS_MORE_BUTTON, - Sexy::IMAGE_ACHEESEMENTS_MORE_BUTTON_HIGHLIGHT, Sexy::IMAGE_ACHEESEMENTS_MORE_BUTTON_HIGHLIGHT); + MakeNewButton(AchievementsWidget::ACHIEVEMENTS_MORE, this, "", nullptr, Sexy::IMAGE_ACHEESEMENTS_MORE_BUTTON, + Sexy::IMAGE_ACHEESEMENTS_MORE_BUTTON_HIGHLIGHT, Sexy::IMAGE_ACHEESEMENTS_MORE_BUTTON_HIGHLIGHT); mMoreButton->Resize(700, 450, Sexy::IMAGE_ACHEESEMENTS_MORE_BUTTON->mWidth - 25, Sexy::IMAGE_ACHEESEMENTS_MORE_BUTTON->mHeight - 50); mMoreButton->mClip = false; } @@ -143,7 +143,7 @@ void AchievementsWidget::Update() if (mScrollValue == 0) return; - + mScrollValue -= mScrollDecay; int aNewY = mY + mScrollValue * mScrollDirection; diff --git a/src/Lawn/Widget/AlmanacDialog.cpp b/src/Lawn/Widget/AlmanacDialog.cpp index 194197c..ad82e68 100644 --- a/src/Lawn/Widget/AlmanacDialog.cpp +++ b/src/Lawn/Widget/AlmanacDialog.cpp @@ -16,10 +16,10 @@ #include "../../SexyAppFramework/WidgetManager.h" #include "../../SexyAppFramework/Font.h" -bool gZombieDefeated[NUM_ZOMBIE_TYPES] = {false}; +bool gZombieDefeated[NUM_ZOMBIE_TYPES] = { false }; AlmanacDialog::AlmanacDialog(LawnApp *theApp) - : LawnDialog(theApp, DIALOG_ALMANAC, true, "Almanac", "", "", BUTTONS_NONE) + : LawnDialog(theApp, DIALOG_ALMANAC, true, "Almanac", "", "", BUTTONS_NONE) { mApp = (LawnApp *)gSexyAppBase; mOpenPage = ALMANAC_PAGE_INDEX; @@ -172,7 +172,6 @@ void AlmanacDialog::SetupZombie() mDescriptionScrollbar->mThumbColor = Color(63, 64, 86); mDescriptionScrollbar->SetValue(0.0f); - ClearPlantsAndZombies(); mZombie = new Zombie(); @@ -220,7 +219,6 @@ void AlmanacDialog::SetPage(AlmanacPage thePage) mPlantButton->mBtnNoDraw = true; mZombieButton->mBtnNoDraw = true; mDescriptionScrollbar->mVisible = true; - } } @@ -258,8 +256,8 @@ void AlmanacDialog::Update() int aMouseX = mApp->mWidgetManager->mLastMouseX; int aMouseY = mApp->mWidgetManager->mLastMouseY; ZombieType aZombieType = ZombieHitTest(aMouseX, aMouseY); - if (SeedHitTest(aMouseX, aMouseY) != SeedType::SEED_NONE || (aZombieType != ZombieType::ZOMBIE_INVALID && ZombieIsShown(aZombieType)) || - mCloseButton->IsMouseOver() || mIndexButton->IsMouseOver() || mPlantButton->IsMouseOver() || mZombieButton->IsMouseOver()) + if (SeedHitTest(aMouseX, aMouseY) != SeedType::SEED_NONE || (aZombieType != ZombieType::ZOMBIE_INVALID && ZombieIsShown(aZombieType)) || + mCloseButton->IsMouseOver() || mIndexButton->IsMouseOver() || mPlantButton->IsMouseOver() || mZombieButton->IsMouseOver()) { mApp->SetCursor(CURSOR_HAND); } @@ -281,12 +279,12 @@ void AlmanacDialog::DrawIndex(Graphics *g) { g->DrawImage(Sexy::IMAGE_ALMANAC_INDEXBACK, 0, 0); TodDrawString(g, - "[SUBURBAN_ALMANAC_INDEX]", - BOARD_WIDTH / 2, - 60, - Sexy::FONT_HOUSEOFTERROR28, - Color(220, 220, 220), - DrawStringJustification::DS_ALIGN_CENTER); + "[SUBURBAN_ALMANAC_INDEX]", + BOARD_WIDTH / 2, + 60, + Sexy::FONT_HOUSEOFTERROR28, + Color(220, 220, 220), + DrawStringJustification::DS_ALIGN_CENTER); if (mPlant) { @@ -306,16 +304,16 @@ void AlmanacDialog::DrawPlants(Graphics *g) { g->DrawImage(Sexy::IMAGE_ALMANAC_PLANTBACK, 0, 0); TodDrawString(g, - "[SUBURBAN_ALMANAC_PLANTS]", - BOARD_WIDTH / 2, - 48, - Sexy::FONT_HOUSEOFTERROR20, - Color(213, 159, 43), - DrawStringJustification::DS_ALIGN_CENTER); + "[SUBURBAN_ALMANAC_PLANTS]", + BOARD_WIDTH / 2, + 48, + Sexy::FONT_HOUSEOFTERROR20, + Color(213, 159, 43), + DrawStringJustification::DS_ALIGN_CENTER); SeedType aSeedMouseOn = SeedHitTest(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY); for (SeedType aSeedType = SeedType::SEED_PEASHOOTER; aSeedType < NUM_ALMANAC_SEEDS; - aSeedType = (SeedType)(aSeedType + 1)) + aSeedType = (SeedType)(aSeedType + 1)) { int aPosX, aPosY; GetSeedPosition(aSeedType, aPosX, aPosY); @@ -337,7 +335,7 @@ void AlmanacDialog::DrawPlants(Graphics *g) } if (mSelectedSeed == SeedType::SEED_LILYPAD || mSelectedSeed == SeedType::SEED_TANGLEKELP || - mSelectedSeed == SeedType::SEED_CATTAIL || mSelectedSeed == SeedType::SEED_SEASHROOM) + mSelectedSeed == SeedType::SEED_CATTAIL || mSelectedSeed == SeedType::SEED_SEASHROOM) { bool aNight = mSelectedSeed == SeedType::SEED_SEASHROOM; g->DrawImage(aNight ? Sexy::IMAGE_ALMANAC_GROUNDNIGHTPOOL : Sexy::IMAGE_ALMANAC_GROUNDPOOL, 521, 107); @@ -354,12 +352,12 @@ void AlmanacDialog::DrawPlants(Graphics *g) else { g->DrawImage(Plant::IsNocturnal(mSelectedSeed) || mSelectedSeed == SeedType::SEED_GRAVEBUSTER || - mSelectedSeed == SeedType::SEED_PLANTERN - ? Sexy::IMAGE_ALMANAC_GROUNDNIGHT - : mSelectedSeed == SeedType::SEED_FLOWERPOT ? Sexy::IMAGE_ALMANAC_GROUNDROOF - : Sexy::IMAGE_ALMANAC_GROUNDDAY, - 521, - 107); + mSelectedSeed == SeedType::SEED_PLANTERN + ? Sexy::IMAGE_ALMANAC_GROUNDNIGHT + : mSelectedSeed == SeedType::SEED_FLOWERPOT ? Sexy::IMAGE_ALMANAC_GROUNDROOF + : Sexy::IMAGE_ALMANAC_GROUNDDAY, + 521, + 107); } if (mPlant) @@ -412,18 +410,18 @@ void AlmanacDialog::DrawPlants(Graphics *g) if (mSelectedSeed != SeedType::SEED_IMITATER) { SexyString aCostStr = TodReplaceString( - StrFormat("{KEYWORD}{COST}:{STAT} %d", aPlantDef.mSeedCost),"{COST}", "[COST]"); + StrFormat("{KEYWORD}{COST}:{STAT} %d", aPlantDef.mSeedCost), "{COST}", "[COST]"); TodDrawStringWrapped( - g, aCostStr, Rect(485, 520, 134, 50), Sexy::FONT_BRIANNETOD12, Color::White, DS_ALIGN_LEFT); + g, aCostStr, Rect(485, 520, 134, 50), Sexy::FONT_BRIANNETOD12, Color::White, DS_ALIGN_LEFT); SexyString aRechargeStr = TodReplaceString("{KEYWORD}{WAIT_TIME}:{STAT} {WAIT_TIME_LENGTH}", - "{WAIT_TIME_LENGTH}", - aPlantDef.mRefreshTime == 750 ? "[WAIT_TIME_SHORT]" - : aPlantDef.mRefreshTime == 3000 ? "[WAIT_TIME_LONG]" - : "[WAIT_TIME_VERY_LONG]"); + "{WAIT_TIME_LENGTH}", + aPlantDef.mRefreshTime == 750 ? "[WAIT_TIME_SHORT]" + : aPlantDef.mRefreshTime == 3000 ? "[WAIT_TIME_LONG]" + : "[WAIT_TIME_VERY_LONG]"); aRechargeStr = TodReplaceString(aRechargeStr, "{WAIT_TIME}", "[WAIT_TIME]"); TodDrawStringWrapped( - g, aRechargeStr, Rect(600, 520, 139, 50), Sexy::FONT_BRIANNETOD12, Color(40, 50, 90), DS_ALIGN_RIGHT); + g, aRechargeStr, Rect(600, 520, 139, 50), Sexy::FONT_BRIANNETOD12, Color(40, 50, 90), DS_ALIGN_RIGHT); } } @@ -431,12 +429,12 @@ void AlmanacDialog::DrawZombies(Graphics *g) { g->DrawImage(Sexy::IMAGE_ALMANAC_ZOMBIEBACK, 0, 0); TodDrawString(g, - "[SUBURBAN_ALMANAC_ZOMBIES]", - BOARD_WIDTH / 2, - 54, - Sexy::FONT_DWARVENTODCRAFT24, - Color(0, 196, 0), - DS_ALIGN_CENTER); + "[SUBURBAN_ALMANAC_ZOMBIES]", + BOARD_WIDTH / 2, + 54, + Sexy::FONT_DWARVENTODCRAFT24, + Color(0, 196, 0), + DS_ALIGN_CENTER); ZombieType aZombieMouseOn = ZombieHitTest(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY); for (int i = 0; i < NUM_ALMANAC_ZOMBIES; i++) @@ -545,11 +543,11 @@ void AlmanacDialog::DrawZombies(Graphics *g) } g->DrawImage(mZombie->mZombieType == ZombieType::ZOMBIE_ZAMBONI || - mZombie->mZombieType == ZombieType::ZOMBIE_BOBSLED - ? Sexy::IMAGE_ALMANAC_GROUNDICE - : Sexy::IMAGE_ALMANAC_GROUNDDAY, - 518, - 110); + mZombie->mZombieType == ZombieType::ZOMBIE_BOBSLED + ? Sexy::IMAGE_ALMANAC_GROUNDICE + : Sexy::IMAGE_ALMANAC_GROUNDDAY, + 518, + 110); if (mZombie && !ZombieHasSilhouette(mZombie->mZombieType)) { Graphics aZombieGraphics = Graphics(*g); @@ -580,7 +578,7 @@ void AlmanacDialog::DrawZombies(Graphics *g) break; } if (mZombie->mZombieType != ZombieType::ZOMBIE_BUNGEE && mZombie->mZombieType != ZombieType::ZOMBIE_BOSS && - mZombie->mZombieType != ZombieType::ZOMBIE_ZAMBONI && mZombie->mZombieType != ZombieType::ZOMBIE_CATAPULT) + mZombie->mZombieType != ZombieType::ZOMBIE_ZAMBONI && mZombie->mZombieType != ZombieType::ZOMBIE_CATAPULT) mZombie->DrawShadow(&aZombieGraphics); mZombie->Draw(&aZombieGraphics); } @@ -589,7 +587,7 @@ void AlmanacDialog::DrawZombies(Graphics *g) ZombieDefinition &aZombieDef = GetZombieDefinition(mSelectedZombie); SexyString aName = ZombieHasSilhouette(mSelectedZombie) ? "???" : StrFormat("[%s]", aZombieDef.mZombieName); TodDrawString( - g, aName, 613, 362, Sexy::FONT_DWARVENTODCRAFT18GREENINSET, Color(190, 255, 235, 255), DS_ALIGN_CENTER); + g, aName, 613, 362, Sexy::FONT_DWARVENTODCRAFT18GREENINSET, Color(190, 255, 235, 255), DS_ALIGN_CENTER); SexyString aDescription; SexyString aHeaderName; @@ -706,15 +704,15 @@ SeedType AlmanacDialog::SeedHitTest(int x, int y) if (mMouseVisible && mOpenPage == AlmanacPage::ALMANAC_PAGE_PLANTS) { for (SeedType aSeedType = SeedType::SEED_PEASHOOTER; aSeedType < NUM_ALMANAC_SEEDS; - aSeedType = (SeedType)(aSeedType + 1)) + aSeedType = (SeedType)(aSeedType + 1)) { if (mApp->SeedTypeAvailable(aSeedType)) { int aSeedX, aSeedY; GetSeedPosition(aSeedType, aSeedX, aSeedY); Rect aSeedRect = aSeedType == SeedType::SEED_IMITATER - ? Rect(aSeedX, aSeedY, 34, 46) - : Rect(aSeedX, aSeedY, SEED_PACKET_WIDTH, SEED_PACKET_HEIGHT); + ? Rect(aSeedX, aSeedY, 34, 46) + : Rect(aSeedX, aSeedY, SEED_PACKET_WIDTH, SEED_PACKET_HEIGHT); if (aSeedRect.Contains(x, y)) return aSeedType; } @@ -729,7 +727,7 @@ bool AlmanacDialog::ZombieHasSilhouette(ZombieType theZombieType) return false; return mApp->HasFinishedAdventure() || - mApp->mPlayerInfo->GetLevel() > GetZombieDefinition(ZombieType::ZOMBIE_YETI).mStartingLevel; + mApp->mPlayerInfo->GetLevel() > GetZombieDefinition(ZombieType::ZOMBIE_YETI).mStartingLevel; } bool AlmanacDialog::ZombieIsShown(ZombieType theZombieType) @@ -748,7 +746,7 @@ bool AlmanacDialog::ZombieIsShown(ZombieType theZombieType) int aLevel = mApp->mPlayerInfo->GetLevel(); int aStart = GetZombieDefinition(theZombieType).mStartingLevel; return aStart <= aLevel && - (aStart != aLevel || !Board::IsZombieTypeSpawnedOnly(theZombieType) || gZombieDefeated[theZombieType]); + (aStart != aLevel || !Board::IsZombieTypeSpawnedOnly(theZombieType) || gZombieDefeated[theZombieType]); } return false; diff --git a/src/Lawn/Widget/AwardScreen.cpp b/src/Lawn/Widget/AwardScreen.cpp index 8a008f2..ce6da9f 100644 --- a/src/Lawn/Widget/AwardScreen.cpp +++ b/src/Lawn/Widget/AwardScreen.cpp @@ -74,12 +74,10 @@ AwardScreen::AwardScreen(LawnApp *theApp, AwardType theAwardType) mScrollBar->mSliderHeightPercent = (float)aVisibleWindow / (float)aTotalHeight; mScrollBar->mMaxValue = aScrollableRange; mScrollBar->Resize(770, 90, 8, 480); - } - } } - + int aLevel = mApp->mPlayerInfo->GetLevel(); if (mAwardType == AWARD_CREDITS_ZOMBIENOTE) { @@ -223,7 +221,7 @@ AwardScreen::AwardScreen(LawnApp *theApp, AwardType theAwardType) mStartButton->SetLabel("[NEXT_LEVEL_BUTTON]"); if (mApp->IsFirstTimeAdventureMode() && aLevel == 25 && mApp->IsTrialStageLocked() && - !mApp->mPlayerInfo->mHasSeenUpsell) + !mApp->mPlayerInfo->mHasSeenUpsell) { mMenuButton->mBtnNoDraw = true; mMenuButton->mDisabled = true; @@ -271,19 +269,19 @@ bool AwardScreen::IsPaperNote() } void AwardScreen::DrawBottom(Graphics *g, - const SexyString &theTitle, - const SexyString &theAward, - const SexyString &theMessage) + const SexyString &theTitle, + const SexyString &theAward, + const SexyString &theMessage) { g->DrawImage(Sexy::IMAGE_AWARDSCREEN_BACK, 0, 0); TodDrawString(g, theTitle, BOARD_WIDTH / 2, 58, Sexy::FONT_DWARVENTODCRAFT24, Color(213, 159, 43), DS_ALIGN_CENTER); TodDrawString(g, theAward, BOARD_WIDTH / 2, 326, Sexy::FONT_DWARVENTODCRAFT18YELLOW, Color::White, DS_ALIGN_CENTER); TodDrawStringWrapped(g, - theMessage, - Rect(285, 360, 230, 90), - Sexy::FONT_BRIANNETOD16, - Color(40, 50, 90), - DS_ALIGN_CENTER_VERTICAL_MIDDLE); + theMessage, + Rect(285, 360, 230, 90), + Sexy::FONT_BRIANNETOD16, + Color(40, 50, 90), + DS_ALIGN_CENTER_VERTICAL_MIDDLE); } void AwardScreen::DrawAwardSeed(Graphics *g) @@ -319,9 +317,8 @@ void AwardScreen::Draw(Graphics *g) { AchievementDefinition aDefinition = Achievements::GetAchievementDefinition(mAchievementItems[i].mAchievement); - SexyString aAchievementText = TodReplaceString("[ACHIEVEMENT_EARNED]", "{ACHIEVEMENT}", TodStringTranslate(aDefinition.mName)); - + Rect aSrcRect = Rect(70 * (mAchievementItems[i].mAchievement % 7), 70 * (mAchievementItems[i].mAchievement / 7), 70, 70); Rect aTextRect = Rect(300, mAchievementItems[i].mY + 15, 300, 60); @@ -338,7 +335,6 @@ void AwardScreen::Draw(Graphics *g) g->Translate(mScrollBar->mX, mScrollBar->mY); mScrollBar->Draw(g); g->Translate(-mScrollBar->mX, -mScrollBar->mY); - } mAchievementButton->Draw(g); @@ -378,9 +374,9 @@ void AwardScreen::Draw(Graphics *g) if (mApp->IsSurvivalMode()) { int aNumTrophies = mApp->GetNumTrophies(CHALLENGE_PAGE_SURVIVAL); - aMsgChar = aNumTrophies <= 7 ? "[YOU_UNLOCKED_A_SURVIVAL]" - : aNumTrophies == 10 ? "[YOU_UNLOCKED_ENDLESS_SURVIVAL]" - : "[EARN_MORE_TROPHIES_FOR_ENDLESS_SURVIVAL]"; + aMsgChar = aNumTrophies <= 7 ? "[YOU_UNLOCKED_A_SURVIVAL]" + : aNumTrophies == 10 ? "[YOU_UNLOCKED_ENDLESS_SURVIVAL]" + : "[EARN_MORE_TROPHIES_FOR_ENDLESS_SURVIVAL]"; } else if (mApp->IsScaryPotterLevel()) aMsgChar = "[UNLOCKED_VASEBREAKER_LEVEL]"; @@ -388,11 +384,11 @@ void AwardScreen::Draw(Graphics *g) aMsgChar = "[UNLOCKED_I_ZOMBIE_LEVEL]"; else aMsgChar = mApp->GetNumTrophies(CHALLENGE_PAGE_CHALLENGE) <= 17 ? "[CHALLENGE_UNLOCKED]" - : "[GET_MORE_TROPHIES]"; + : "[GET_MORE_TROPHIES]"; DrawBottom(g, "[GOT_TROPHY]", "[TROPHY]", aMsgChar); g->DrawImage(Sexy::IMAGE_TROPHY_HI_RES, BOARD_WIDTH / 2 - Sexy::IMAGE_TROPHY_HI_RES->mWidth / 2, - 137); + 137); } } else if (aLevel == 5) @@ -406,7 +402,7 @@ void AwardScreen::Draw(Graphics *g) g->DrawImage(Sexy::IMAGE_ZOMBIE_NOTE, 80, 80); g->DrawImage(Sexy::IMAGE_ZOMBIE_NOTE1, 131, 132); TodDrawString(g, "[FOUND_NOTE]", BOARD_WIDTH / 2, 70, Sexy::FONT_DWARVENTODCRAFT24, - Color(255, 200, 0, 255), DS_ALIGN_CENTER); + Color(255, 200, 0, 255), DS_ALIGN_CENTER); } else if (aLevel == 15) { @@ -419,7 +415,7 @@ void AwardScreen::Draw(Graphics *g) g->DrawImage(Sexy::IMAGE_ZOMBIE_NOTE, 80, 80); g->DrawImage(Sexy::IMAGE_ZOMBIE_NOTE2, 133, 127); TodDrawString(g, "[FOUND_NOTE]", BOARD_WIDTH / 2, 70, Sexy::FONT_DWARVENTODCRAFT24, - Color(255, 200, 0, 255), DS_ALIGN_CENTER); + Color(255, 200, 0, 255), DS_ALIGN_CENTER); } else if (aLevel == 25) { @@ -432,7 +428,7 @@ void AwardScreen::Draw(Graphics *g) g->DrawImage(Sexy::IMAGE_ZOMBIE_NOTE, 80, 80); g->DrawImage(Sexy::IMAGE_ZOMBIE_NOTE3, 120, 117); TodDrawString(g, "[FOUND_NOTE]", BOARD_WIDTH / 2, 70, Sexy::FONT_DWARVENTODCRAFT24, - Color(255, 200, 0, 255), DS_ALIGN_CENTER); + Color(255, 200, 0, 255), DS_ALIGN_CENTER); } else if (aLevel == 35) { @@ -445,7 +441,7 @@ void AwardScreen::Draw(Graphics *g) g->DrawImage(Sexy::IMAGE_ZOMBIE_NOTE, 80, 80); g->DrawImage(Sexy::IMAGE_ZOMBIE_NOTE4, 102, 117); TodDrawString(g, "[FOUND_NOTE]", BOARD_WIDTH / 2, 70, Sexy::FONT_DWARVENTODCRAFT24, - Color(255, 200, 0, 255), DS_ALIGN_CENTER); + Color(255, 200, 0, 255), DS_ALIGN_CENTER); } else if (aLevel == 45) { @@ -458,7 +454,7 @@ void AwardScreen::Draw(Graphics *g) g->DrawImage(Sexy::IMAGE_ZOMBIE_NOTE, 80, 80); g->DrawImage(Sexy::IMAGE_ZOMBIE_FINAL_NOTE, 114, 138); TodDrawString(g, "[FOUND_NOTE]", BOARD_WIDTH / 2, 70, Sexy::FONT_DWARVENTODCRAFT24, - Color(255, 200, 0, 255), DS_ALIGN_CENTER); + Color(255, 200, 0, 255), DS_ALIGN_CENTER); } else if (aLevel == 1 && mApp->HasFinishedAdventure()) { @@ -473,7 +469,6 @@ void AwardScreen::Draw(Graphics *g) mStartButton->Draw(g); mMenuButton->Draw(g); - } int aFadeInAlpha = TodAnimateCurve(180, 0, mFadeInCounter, 255, 0, CURVE_LINEAR); @@ -500,8 +495,8 @@ void AwardScreen::Update() if (mAchievementTime >= mAchievementItems[i].mStartAnimTime) { mAchievementItems[i].mY = TodAnimateCurve( - mAchievementItems[i].mStartAnimTime, mAchievementItems[i].mEndAnimTime, mAchievementTime, - mAchievementItems[i].mStartY, mAchievementItems[i].mDestY, CURVE_EASE_IN_OUT); + mAchievementItems[i].mStartAnimTime, mAchievementItems[i].mEndAnimTime, mAchievementTime, + mAchievementItems[i].mStartY, mAchievementItems[i].mDestY, CURVE_EASE_IN_OUT); } if (mAchievementItems[mAchievementItems.size() - 1].mY == mAchievementItems[mAchievementItems.size() - 1].mDestY) @@ -690,7 +685,7 @@ void AwardScreen::MouseUp(int x, int y, int theClickCount) mStartButton->SetLabel("[NEXT_LEVEL_BUTTON]"); if (mApp->IsFirstTimeAdventureMode() && aLevel == 25 && mApp->IsTrialStageLocked() && - !mApp->mPlayerInfo->mHasSeenUpsell) + !mApp->mPlayerInfo->mHasSeenUpsell) { mMenuButton->mBtnNoDraw = true; mMenuButton->mDisabled = true; diff --git a/src/Lawn/Widget/ChallengeScreen.cpp b/src/Lawn/Widget/ChallengeScreen.cpp index 0082419..a073bdb 100644 --- a/src/Lawn/Widget/ChallengeScreen.cpp +++ b/src/Lawn/Widget/ChallengeScreen.cpp @@ -13,98 +13,79 @@ #include "../../SexyAppFramework/WidgetManager.h" ChallengeDefinition gChallengeDefs[NUM_CHALLENGE_MODES] = { - {GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_1, 0, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 0, 0, - "[SURVIVAL_DAY_NORMAL]"}, - {GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_2, 1, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 0, 1, - "[SURVIVAL_NIGHT_NORMAL]"}, - {GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_3, 2, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 0, 2, - "[SURVIVAL_POOL_NORMAL]"}, - {GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_4, 3, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 0, 3, - "[SURVIVAL_FOG_NORMAL]"}, - {GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_5, 4, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 0, 4, - "[SURVIVAL_ROOF_NORMAL]"}, - {GameMode::GAMEMODE_SURVIVAL_HARD_STAGE_1, 5, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 1, 0, "[SURVIVAL_DAY_HARD]"}, - {GameMode::GAMEMODE_SURVIVAL_HARD_STAGE_2, 6, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 1, 1, - "[SURVIVAL_NIGHT_HARD]"}, - {GameMode::GAMEMODE_SURVIVAL_HARD_STAGE_3, 7, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 1, 2, "[SURVIVAL_POOL_HARD]"}, - {GameMode::GAMEMODE_SURVIVAL_HARD_STAGE_4, 8, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 1, 3, "[SURVIVAL_FOG_HARD]"}, - {GameMode::GAMEMODE_SURVIVAL_HARD_STAGE_5, 9, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 1, 4, "[SURVIVAL_ROOF_HARD]"}, - {GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_1, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 3, 0, - "[SURVIVAL_DAY_ENDLESS]"}, - {GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_2, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 3, 1, - "[SURVIVAL_NIGHT_ENDLESS]"}, - {GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_3, 10, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 2, 2, - "[SURVIVAL_POOL_ENDLESS]"}, - {GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_4, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 3, 2, - "[SURVIVAL_FOG_ENDLESS]"}, - {GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_5, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 3, 3, - "[SURVIVAL_ROOF_ENDLESS]"}, - {GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS, 0, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 0, 0, "[WAR_AND_PEAS]"}, - {GameMode::GAMEMODE_CHALLENGE_WALLNUT_BOWLING, 6, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 0, 1, - "[WALL_NUT_BOWLING]"}, - {GameMode::GAMEMODE_CHALLENGE_SLOT_MACHINE, 2, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 0, 2, "[SLOT_MACHINE]"}, - {GameMode::GAMEMODE_CHALLENGE_RAINING_SEEDS, 3, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 0, 3, - "[ITS_RAINING_SEEDS]"}, - {GameMode::GAMEMODE_CHALLENGE_BEGHOULED, 1, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 0, 4, "[BEGHOULED]"}, - {GameMode::GAMEMODE_CHALLENGE_INVISIGHOUL, 8, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 1, 0, "[INVISIGHOUL]"}, - {GameMode::GAMEMODE_CHALLENGE_SEEING_STARS, 5, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 1, 1, "[SEEING_STARS]"}, - {GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM, 7, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 1, 2, "[ZOMBIQUARIUM]"}, - {GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST, 20, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 1, 3, - "[BEGHOULED_TWIST]"}, - {GameMode::GAMEMODE_CHALLENGE_LITTLE_TROUBLE, 12, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 1, 4, - "[LITTLE_TROUBLE]"}, - {GameMode::GAMEMODE_CHALLENGE_PORTAL_COMBAT, 15, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 2, 0, "[PORTAL_COMBAT]"}, - {GameMode::GAMEMODE_CHALLENGE_COLUMN, 4, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 2, 1, "[COLUMN_AS_YOU_SEE_EM]"}, - {GameMode::GAMEMODE_CHALLENGE_BOBSLED_BONANZA, 17, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 2, 2, - "[BOBSLED_BONANZA]"}, - {GameMode::GAMEMODE_CHALLENGE_SPEED, 18, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 2, 3, "[ZOMBIES_ON_SPEED]"}, - {GameMode::GAMEMODE_CHALLENGE_WHACK_A_ZOMBIE, 16, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 2, 4, - "[WHACK_A_ZOMBIE]"}, - {GameMode::GAMEMODE_CHALLENGE_LAST_STAND, 21, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 3, 0, "[LAST_STAND]"}, - {GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS_2, 0, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 3, 1, "[WAR_AND_PEAS_2]"}, - {GameMode::GAMEMODE_CHALLENGE_WALLNUT_BOWLING_2, 6, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 3, 2, - "[WALL_NUT_BOWLING_EXTREME]"}, - {GameMode::GAMEMODE_CHALLENGE_POGO_PARTY, 14, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 3, 3, "[POGO_PARTY]"}, - {GameMode::GAMEMODE_CHALLENGE_FINAL_BOSS, 19, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 3, 4, "[FINAL_BOSS]"}, - {GameMode::GAMEMODE_CHALLENGE_ART_CHALLENGE_WALLNUT, 0, ChallengePage::CHALLENGE_PAGE_LIMBO, 0, 0, - "[ART_CHALLENGE_WALL_NUT]"}, - {GameMode::GAMEMODE_CHALLENGE_SUNNY_DAY, 1, ChallengePage::CHALLENGE_PAGE_LIMBO, 0, 1, "[SUNNY_DAY]"}, - {GameMode::GAMEMODE_CHALLENGE_RESODDED, 2, ChallengePage::CHALLENGE_PAGE_LIMBO, 0, 2, "[UNSODDED]"}, - {GameMode::GAMEMODE_CHALLENGE_BIG_TIME, 3, ChallengePage::CHALLENGE_PAGE_LIMBO, 0, 3, "[BIG_TIME]"}, - {GameMode::GAMEMODE_CHALLENGE_ART_CHALLENGE_SUNFLOWER, 4, ChallengePage::CHALLENGE_PAGE_LIMBO, 0, 4, - "[ART_CHALLENGE_SUNFLOWER]"}, - {GameMode::GAMEMODE_CHALLENGE_AIR_RAID, 5, ChallengePage::CHALLENGE_PAGE_LIMBO, 1, 0, "[AIR_RAID]"}, - {GameMode::GAMEMODE_CHALLENGE_ICE, 6, ChallengePage::CHALLENGE_PAGE_LIMBO, 1, 1, "[ICE_LEVEL]"}, - {GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN, 7, ChallengePage::CHALLENGE_PAGE_LIMBO, 1, 2, "[ZEN_GARDEN]"}, - {GameMode::GAMEMODE_CHALLENGE_HIGH_GRAVITY, 8, ChallengePage::CHALLENGE_PAGE_LIMBO, 1, 3, "[HIGH_GRAVITY]"}, - {GameMode::GAMEMODE_CHALLENGE_GRAVE_DANGER, 11, ChallengePage::CHALLENGE_PAGE_LIMBO, 1, 4, "[GRAVE_DANGER]"}, - {GameMode::GAMEMODE_CHALLENGE_SHOVEL, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 2, 0, "[CAN_YOU_DIG_IT]"}, - {GameMode::GAMEMODE_CHALLENGE_STORMY_NIGHT, 13, ChallengePage::CHALLENGE_PAGE_LIMBO, 2, 1, "[DARK_STORMY_NIGHT]"}, - {GameMode::GAMEMODE_CHALLENGE_BUNGEE_BLITZ, 9, ChallengePage::CHALLENGE_PAGE_LIMBO, 2, 2, "[BUNGEE_BLITZ]"}, - {GameMode::GAMEMODE_CHALLENGE_SQUIRREL, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 2, 3, "Squirrel"}, - {GameMode::GAMEMODE_TREE_OF_WISDOM, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 2, 4, "Tree of Wisdom"}, - {GameMode::GAMEMODE_SCARY_POTTER_1, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 0, 0, "[SCARY_POTTER_1]"}, - {GameMode::GAMEMODE_SCARY_POTTER_2, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 0, 1, "[SCARY_POTTER_2]"}, - {GameMode::GAMEMODE_SCARY_POTTER_3, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 0, 2, "[SCARY_POTTER_3]"}, - {GameMode::GAMEMODE_SCARY_POTTER_4, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 0, 3, "[SCARY_POTTER_4]"}, - {GameMode::GAMEMODE_SCARY_POTTER_5, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 0, 4, "[SCARY_POTTER_5]"}, - {GameMode::GAMEMODE_SCARY_POTTER_6, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 1, 0, "[SCARY_POTTER_6]"}, - {GameMode::GAMEMODE_SCARY_POTTER_7, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 1, 1, "[SCARY_POTTER_7]"}, - {GameMode::GAMEMODE_SCARY_POTTER_8, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 1, 2, "[SCARY_POTTER_8]"}, - {GameMode::GAMEMODE_SCARY_POTTER_9, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 1, 3, "[SCARY_POTTER_9]"}, - {GameMode::GAMEMODE_SCARY_POTTER_ENDLESS, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 1, 4, "[SCARY_POTTER_ENDLESS]"}, - {GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_1, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 2, 0, "[I_ZOMBIE_1]"}, - {GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_2, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 2, 1, "[I_ZOMBIE_2]"}, - {GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_3, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 2, 2, "[I_ZOMBIE_3]"}, - {GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_4, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 2, 3, "[I_ZOMBIE_4]"}, - {GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_5, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 2, 4, "[I_ZOMBIE_5]"}, - {GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_6, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 3, 0, "[I_ZOMBIE_6]"}, - {GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_7, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 3, 1, "[I_ZOMBIE_7]"}, - {GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_8, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 3, 2, "[I_ZOMBIE_8]"}, - {GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_9, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 3, 3, "[I_ZOMBIE_9]"}, - {GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 3, 4, "[I_ZOMBIE_ENDLESS]"}, - {GameMode::GAMEMODE_UPSELL, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 3, 4, "Upsell"}, - {GameMode::GAMEMODE_INTRO, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 2, 3, "Intro"}}; + { GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_1, 0, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 0, 0, "[SURVIVAL_DAY_NORMAL]" }, + { GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_2, 1, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 0, 1, "[SURVIVAL_NIGHT_NORMAL]" }, + { GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_3, 2, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 0, 2, "[SURVIVAL_POOL_NORMAL]" }, + { GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_4, 3, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 0, 3, "[SURVIVAL_FOG_NORMAL]" }, + { GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_5, 4, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 0, 4, "[SURVIVAL_ROOF_NORMAL]" }, + { GameMode::GAMEMODE_SURVIVAL_HARD_STAGE_1, 5, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 1, 0, "[SURVIVAL_DAY_HARD]" }, + { GameMode::GAMEMODE_SURVIVAL_HARD_STAGE_2, 6, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 1, 1, "[SURVIVAL_NIGHT_HARD]" }, + { GameMode::GAMEMODE_SURVIVAL_HARD_STAGE_3, 7, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 1, 2, "[SURVIVAL_POOL_HARD]" }, + { GameMode::GAMEMODE_SURVIVAL_HARD_STAGE_4, 8, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 1, 3, "[SURVIVAL_FOG_HARD]" }, + { GameMode::GAMEMODE_SURVIVAL_HARD_STAGE_5, 9, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 1, 4, "[SURVIVAL_ROOF_HARD]" }, + { GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_1, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 3, 0, "[SURVIVAL_DAY_ENDLESS]" }, + { GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_2, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 3, 1, "[SURVIVAL_NIGHT_ENDLESS]" }, + { GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_3, 10, ChallengePage::CHALLENGE_PAGE_SURVIVAL, 2, 2, "[SURVIVAL_POOL_ENDLESS]" }, + { GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_4, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 3, 2, "[SURVIVAL_FOG_ENDLESS]" }, + { GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_5, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 3, 3, "[SURVIVAL_ROOF_ENDLESS]" }, + { GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS, 0, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 0, 0, "[WAR_AND_PEAS]" }, + { GameMode::GAMEMODE_CHALLENGE_WALLNUT_BOWLING, 6, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 0, 1, "[WALL_NUT_BOWLING]" }, + { GameMode::GAMEMODE_CHALLENGE_SLOT_MACHINE, 2, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 0, 2, "[SLOT_MACHINE]" }, + { GameMode::GAMEMODE_CHALLENGE_RAINING_SEEDS, 3, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 0, 3, "[ITS_RAINING_SEEDS]" }, + { GameMode::GAMEMODE_CHALLENGE_BEGHOULED, 1, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 0, 4, "[BEGHOULED]" }, + { GameMode::GAMEMODE_CHALLENGE_INVISIGHOUL, 8, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 1, 0, "[INVISIGHOUL]" }, + { GameMode::GAMEMODE_CHALLENGE_SEEING_STARS, 5, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 1, 1, "[SEEING_STARS]" }, + { GameMode::GAMEMODE_CHALLENGE_ZOMBIQUARIUM, 7, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 1, 2, "[ZOMBIQUARIUM]" }, + { GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST, 20, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 1, 3, "[BEGHOULED_TWIST]" }, + { GameMode::GAMEMODE_CHALLENGE_LITTLE_TROUBLE, 12, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 1, 4, "[LITTLE_TROUBLE]" }, + { GameMode::GAMEMODE_CHALLENGE_PORTAL_COMBAT, 15, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 2, 0, "[PORTAL_COMBAT]" }, + { GameMode::GAMEMODE_CHALLENGE_COLUMN, 4, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 2, 1, "[COLUMN_AS_YOU_SEE_EM]" }, + { GameMode::GAMEMODE_CHALLENGE_BOBSLED_BONANZA, 17, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 2, 2, "[BOBSLED_BONANZA]" }, + { GameMode::GAMEMODE_CHALLENGE_SPEED, 18, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 2, 3, "[ZOMBIES_ON_SPEED]" }, + { GameMode::GAMEMODE_CHALLENGE_WHACK_A_ZOMBIE, 16, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 2, 4, "[WHACK_A_ZOMBIE]" }, + { GameMode::GAMEMODE_CHALLENGE_LAST_STAND, 21, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 3, 0, "[LAST_STAND]" }, + { GameMode::GAMEMODE_CHALLENGE_WAR_AND_PEAS_2, 0, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 3, 1, "[WAR_AND_PEAS_2]" }, + { GameMode::GAMEMODE_CHALLENGE_WALLNUT_BOWLING_2, 6, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 3, 2, "[WALL_NUT_BOWLING_EXTREME]" }, + { GameMode::GAMEMODE_CHALLENGE_POGO_PARTY, 14, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 3, 3, "[POGO_PARTY]" }, + { GameMode::GAMEMODE_CHALLENGE_FINAL_BOSS, 19, ChallengePage::CHALLENGE_PAGE_CHALLENGE, 3, 4, "[FINAL_BOSS]" }, + { GameMode::GAMEMODE_CHALLENGE_ART_CHALLENGE_WALLNUT, 0, ChallengePage::CHALLENGE_PAGE_LIMBO, 0, 0, "[ART_CHALLENGE_WALL_NUT]" }, + { GameMode::GAMEMODE_CHALLENGE_SUNNY_DAY, 1, ChallengePage::CHALLENGE_PAGE_LIMBO, 0, 1, "[SUNNY_DAY]" }, + { GameMode::GAMEMODE_CHALLENGE_RESODDED, 2, ChallengePage::CHALLENGE_PAGE_LIMBO, 0, 2, "[UNSODDED]" }, + { GameMode::GAMEMODE_CHALLENGE_BIG_TIME, 3, ChallengePage::CHALLENGE_PAGE_LIMBO, 0, 3, "[BIG_TIME]" }, + { GameMode::GAMEMODE_CHALLENGE_ART_CHALLENGE_SUNFLOWER, 4, ChallengePage::CHALLENGE_PAGE_LIMBO, 0, 4, "[ART_CHALLENGE_SUNFLOWER]" }, + { GameMode::GAMEMODE_CHALLENGE_AIR_RAID, 5, ChallengePage::CHALLENGE_PAGE_LIMBO, 1, 0, "[AIR_RAID]" }, + { GameMode::GAMEMODE_CHALLENGE_ICE, 6, ChallengePage::CHALLENGE_PAGE_LIMBO, 1, 1, "[ICE_LEVEL]" }, + { GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN, 7, ChallengePage::CHALLENGE_PAGE_LIMBO, 1, 2, "[ZEN_GARDEN]" }, + { GameMode::GAMEMODE_CHALLENGE_HIGH_GRAVITY, 8, ChallengePage::CHALLENGE_PAGE_LIMBO, 1, 3, "[HIGH_GRAVITY]" }, + { GameMode::GAMEMODE_CHALLENGE_GRAVE_DANGER, 11, ChallengePage::CHALLENGE_PAGE_LIMBO, 1, 4, "[GRAVE_DANGER]" }, + { GameMode::GAMEMODE_CHALLENGE_SHOVEL, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 2, 0, "[CAN_YOU_DIG_IT]" }, + { GameMode::GAMEMODE_CHALLENGE_STORMY_NIGHT, 13, ChallengePage::CHALLENGE_PAGE_LIMBO, 2, 1, "[DARK_STORMY_NIGHT]" }, + { GameMode::GAMEMODE_CHALLENGE_BUNGEE_BLITZ, 9, ChallengePage::CHALLENGE_PAGE_LIMBO, 2, 2, "[BUNGEE_BLITZ]" }, + { GameMode::GAMEMODE_CHALLENGE_SQUIRREL, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 2, 3, "Squirrel" }, + { GameMode::GAMEMODE_TREE_OF_WISDOM, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 2, 4, "Tree of Wisdom" }, + { GameMode::GAMEMODE_SCARY_POTTER_1, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 0, 0, "[SCARY_POTTER_1]" }, + { GameMode::GAMEMODE_SCARY_POTTER_2, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 0, 1, "[SCARY_POTTER_2]" }, + { GameMode::GAMEMODE_SCARY_POTTER_3, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 0, 2, "[SCARY_POTTER_3]" }, + { GameMode::GAMEMODE_SCARY_POTTER_4, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 0, 3, "[SCARY_POTTER_4]" }, + { GameMode::GAMEMODE_SCARY_POTTER_5, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 0, 4, "[SCARY_POTTER_5]" }, + { GameMode::GAMEMODE_SCARY_POTTER_6, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 1, 0, "[SCARY_POTTER_6]" }, + { GameMode::GAMEMODE_SCARY_POTTER_7, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 1, 1, "[SCARY_POTTER_7]" }, + { GameMode::GAMEMODE_SCARY_POTTER_8, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 1, 2, "[SCARY_POTTER_8]" }, + { GameMode::GAMEMODE_SCARY_POTTER_9, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 1, 3, "[SCARY_POTTER_9]" }, + { GameMode::GAMEMODE_SCARY_POTTER_ENDLESS, 10, ChallengePage::CHALLENGE_PAGE_PUZZLE, 1, 4, "[SCARY_POTTER_ENDLESS]" }, + { GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_1, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 2, 0, "[I_ZOMBIE_1]" }, + { GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_2, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 2, 1, "[I_ZOMBIE_2]" }, + { GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_3, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 2, 2, "[I_ZOMBIE_3]" }, + { GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_4, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 2, 3, "[I_ZOMBIE_4]" }, + { GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_5, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 2, 4, "[I_ZOMBIE_5]" }, + { GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_6, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 3, 0, "[I_ZOMBIE_6]" }, + { GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_7, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 3, 1, "[I_ZOMBIE_7]" }, + { GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_8, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 3, 2, "[I_ZOMBIE_8]" }, + { GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_9, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 3, 3, "[I_ZOMBIE_9]" }, + { GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS, 11, ChallengePage::CHALLENGE_PAGE_PUZZLE, 3, 4, "[I_ZOMBIE_ENDLESS]" }, + { GameMode::GAMEMODE_UPSELL, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 3, 4, "Upsell" }, + { GameMode::GAMEMODE_INTRO, 10, ChallengePage::CHALLENGE_PAGE_LIMBO, 2, 3, "Intro" } +}; ChallengeScreen::ChallengeScreen(LawnApp *theApp, ChallengePage thePage) { @@ -120,8 +101,8 @@ ChallengeScreen::ChallengeScreen(LawnApp *theApp, ChallengePage thePage) TodLoadResources("DelayLoad_ChallengeScreen"); mBackButton = MakeNewButton(ChallengeScreen::ChallengeScreen_Back, this, "[BACK_TO_MENU]", nullptr, - Sexy::IMAGE_SEEDCHOOSER_BUTTON2, Sexy::IMAGE_SEEDCHOOSER_BUTTON2_GLOW, - Sexy::IMAGE_SEEDCHOOSER_BUTTON2_GLOW); + Sexy::IMAGE_SEEDCHOOSER_BUTTON2, Sexy::IMAGE_SEEDCHOOSER_BUTTON2_GLOW, + Sexy::IMAGE_SEEDCHOOSER_BUTTON2_GLOW); mBackButton->mTextDownOffsetX = 1; mBackButton->mTextDownOffsetY = 1; mBackButton->mColors[ButtonWidget::COLOR_LABEL] = Color(42, 42, 90); @@ -156,7 +137,7 @@ ChallengeScreen::ChallengeScreen(LawnApp *theApp, ChallengePage thePage) aChallengeButton->mDoFinger = true; aChallengeButton->mFrameNoDraw = true; if (aChlDef.mPage == CHALLENGE_PAGE_CHALLENGE || aChlDef.mPage == CHALLENGE_PAGE_LIMBO || - aChlDef.mPage == CHALLENGE_PAGE_PUZZLE) + aChlDef.mPage == CHALLENGE_PAGE_PUZZLE) aChallengeButton->Resize(38 + aChlDef.mCol * 155, 93 + aChlDef.mRow * 119, 104, 115); else aChallengeButton->Resize(38 + aChlDef.mCol * 155, 125 + aChlDef.mRow * 145, 104, 115); @@ -242,7 +223,7 @@ void ChallengeScreen::SetUnlockChallengeIndex(ChallengePage thePage, bool theIsI if (aDef.mPage == thePage) { if (thePage != CHALLENGE_PAGE_PUZZLE || (!theIsIZombie && IsScaryPotterLevel(aDef.mChallengeMode)) || - (theIsIZombie && IsIZombieLevel(aDef.mChallengeMode))) + (theIsIZombie && IsIZombieLevel(aDef.mChallengeMode))) { if (AccomplishmentsNeeded(aChallengeMode) <= 0) { @@ -311,7 +292,7 @@ int ChallengeScreen::MoreTrophiesNeeded(int theChallengeIndex) } if (aDef.mChallengeMode < GAMEMODE_PUZZLE_I_ZOMBIE_4 || mApp->HasFinishedAdventure() || - aLevelsCompleted < 3) + aLevelsCompleted < 3) { return ClampInt(aDef.mChallengeMode - GAMEMODE_PUZZLE_I_ZOMBIE_1 - aLevelsCompleted, 0, 9); } @@ -325,9 +306,10 @@ int ChallengeScreen::MoreTrophiesNeeded(int theChallengeIndex) { int aIdxInPage = aDef.mRow * 5 + aDef.mCol; if ((aDef.mPage == CHALLENGE_PAGE_CHALLENGE || aDef.mPage == CHALLENGE_PAGE_SURVIVAL) && - !mApp->HasFinishedAdventure()) + !mApp->HasFinishedAdventure()) { - return aIdxInPage < 3 ? 0 : aIdxInPage == 3 ? 1 : 2; + return aIdxInPage < 3 ? 0 : aIdxInPage == 3 ? 1 + : 2; } else { @@ -385,8 +367,8 @@ int ChallengeScreen::AccomplishmentsNeeded(int theChallengeIndex) int aTrophiesNeeded = MoreTrophiesNeeded(theChallengeIndex); GameMode aGameMode = GetChallengeDefinition(theChallengeIndex).mChallengeMode; if (mApp->IsSurvivalEndless(aGameMode) && aTrophiesNeeded <= 3 && - mApp->GetNumTrophies(CHALLENGE_PAGE_SURVIVAL) < 10 && mApp->HasFinishedAdventure() && - !mApp->IsTrialStageLocked()) + mApp->GetNumTrophies(CHALLENGE_PAGE_SURVIVAL) < 10 && mApp->HasFinishedAdventure() && + !mApp->IsTrialStageLocked()) aTrophiesNeeded = 1; return mCheatEnableChallenges ? 0 : aTrophiesNeeded; } @@ -439,12 +421,12 @@ void ChallengeScreen::DrawButton(Graphics *g, int theChallengeIndex) bool aHighLight = aChallengeButton->mIsOver && theChallengeIndex != mUnlockChallengeIndex; g->SetColorizeImages(false); g->DrawImage(aHighLight ? Sexy::IMAGE_CHALLENGE_WINDOW_HIGHLIGHT : Sexy::IMAGE_CHALLENGE_WINDOW, aPosX - 6, - aPosY - 2); + aPosY - 2); Color aTextColor = aHighLight ? Color(250, 40, 40) : Color(42, 42, 90); SexyString aName = TodStringTranslate(aDef.mChallengeName); if (aChallengeButton->mDisabled || - (theChallengeIndex == mUnlockChallengeIndex && mUnlockState == UNLOCK_SHAKING)) + (theChallengeIndex == mUnlockChallengeIndex && mUnlockState == UNLOCK_SHAKING)) { aName = "?"; } @@ -457,7 +439,7 @@ void ChallengeScreen::DrawButton(Graphics *g, int theChallengeIndex) else { int aHalfPos = - (mPageIndex == CHALLENGE_PAGE_SURVIVAL && !aChallengeButton->mDisabled) ? 7 : (aNameLen / 2 - 1); + (mPageIndex == CHALLENGE_PAGE_SURVIVAL && !aChallengeButton->mDisabled) ? 7 : (aNameLen / 2 - 1); size_t aSpacePos = aName.find(' ', aHalfPos); if (aSpacePos == std::string::npos) @@ -475,16 +457,16 @@ void ChallengeScreen::DrawButton(Graphics *g, int theChallengeIndex) if (botStr.empty()) { TodDrawString(g, aName, aPosX + 52, aPosY + 96, Sexy::FONT_BRIANNETOD12, aTextColor, - DS_ALIGN_CENTER); + DS_ALIGN_CENTER); } else { TodDrawString(g, topStr, aPosX + 52, aPosY + 88, Sexy::FONT_BRIANNETOD12, aTextColor, - DS_ALIGN_CENTER); + DS_ALIGN_CENTER); if (!botStr.empty()) { TodDrawString(g, botStr, aPosX + 52, aPosY + 102, Sexy::FONT_BRIANNETOD12, aTextColor, - DS_ALIGN_CENTER); + DS_ALIGN_CENTER); } } } @@ -497,7 +479,7 @@ void ChallengeScreen::DrawButton(Graphics *g, int theChallengeIndex) { aLockImage = Sexy::IMAGE_LOCK_OPEN; g->SetColor( - Color(255, 255, 255, TodAnimateCurve(25, 0, mUnlockStateCounter, 255, 0, CURVE_LINEAR))); + Color(255, 255, 255, TodAnimateCurve(25, 0, mUnlockStateCounter, 255, 0, CURVE_LINEAR))); g->SetColorizeImages(true); } TodDrawImageScaledF(g, aLockImage, aPosX + 24 + mLockShakeX, aPosY + 9 + mLockShakeY, 0.7f, 0.7f); @@ -514,17 +496,17 @@ void ChallengeScreen::DrawButton(Graphics *g, int theChallengeIndex) SexyString aAchievement = TodReplaceNumberString("[LONGEST_STREAK]", "{STREAK}", aRecord); Rect aRect(aPosX, aPosY + 15, 96, 200); TodDrawStringWrapped(g, aAchievement, aRect, Sexy::FONT_CONTINUUMBOLD14OUTLINE, Color::White, - DS_ALIGN_CENTER); + DS_ALIGN_CENTER); TodDrawStringWrapped(g, aAchievement, aRect, Sexy::FONT_CONTINUUMBOLD14, Color(255, 0, 0), - DS_ALIGN_CENTER); + DS_ALIGN_CENTER); } else if (mApp->IsSurvivalEndless(aDef.mChallengeMode)) { SexyString aAchievement = mApp->Pluralize(aRecord, "[ONE_FLAG]", "[COUNT_FLAGS]"); TodDrawString(g, aAchievement, aPosX + 48, aPosY + 48, Sexy::FONT_CONTINUUMBOLD14OUTLINE, - Color::White, DS_ALIGN_CENTER); + Color::White, DS_ALIGN_CENTER); TodDrawString(g, aAchievement, aPosX + 48, aPosY + 48, Sexy::FONT_CONTINUUMBOLD14, Color(255, 0, 0), - DS_ALIGN_CENTER); + DS_ALIGN_CENTER); } } else if (aChallengeButton->mDisabled) @@ -545,15 +527,15 @@ void ChallengeScreen::Draw(Graphics *g) g->DrawImage(Sexy::IMAGE_CHALLENGE_BACKGROUND, 0, 0); SexyString aTitleString = mPageIndex == CHALLENGE_PAGE_SURVIVAL ? "[PICK_AREA]" - : mPageIndex == CHALLENGE_PAGE_PUZZLE ? "[SCARY_POTTER]" - : "[PICK_CHALLENGE]"; + : mPageIndex == CHALLENGE_PAGE_PUZZLE ? "[SCARY_POTTER]" + : "[PICK_CHALLENGE]"; TodDrawString(g, aTitleString, 400, 58, Sexy::FONT_HOUSEOFTERROR28, Color(220, 220, 220), DS_ALIGN_CENTER); int aTrophiesGot = mApp->GetNumTrophies(mPageIndex); - int aTrophiesTotal = mPageIndex == CHALLENGE_PAGE_SURVIVAL ? 10 - : mPageIndex == CHALLENGE_PAGE_CHALLENGE ? 20 - : mPageIndex == CHALLENGE_PAGE_PUZZLE ? 18 - : 0; + int aTrophiesTotal = mPageIndex == CHALLENGE_PAGE_SURVIVAL ? 10 + : mPageIndex == CHALLENGE_PAGE_CHALLENGE ? 20 + : mPageIndex == CHALLENGE_PAGE_PUZZLE ? 18 + : 0; if (aTrophiesTotal > 0) { SexyString aTrophyString = StrFormat("%d/%d", aTrophiesGot, aTrophiesTotal); @@ -661,8 +643,8 @@ void ChallengeScreen::UpdateToolTip() ChallengeDefinition &aDef = GetChallengeDefinition(aChallengeMode); ButtonWidget *aChallengeButton = mChallengeButtons[aChallengeMode]; if (aChallengeButton->mVisible && aChallengeButton->mDisabled && - aChallengeButton->Contains(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY) && - AccomplishmentsNeeded(aChallengeMode) <= 1) + aChallengeButton->Contains(mApp->mWidgetManager->mLastMouseX, mApp->mWidgetManager->mLastMouseY) && + AccomplishmentsNeeded(aChallengeMode) <= 1) { mToolTip->mX = aChallengeButton->mWidth / 2 + aChallengeButton->mX; mToolTip->mY = aChallengeButton->mY; diff --git a/src/Lawn/Widget/CheatDialog.cpp b/src/Lawn/Widget/CheatDialog.cpp index bd770e2..4ba9523 100644 --- a/src/Lawn/Widget/CheatDialog.cpp +++ b/src/Lawn/Widget/CheatDialog.cpp @@ -8,8 +8,8 @@ #include "../../SexyAppFramework/WidgetManager.h" CheatDialog::CheatDialog(LawnApp *theApp) - : LawnDialog( - theApp, Dialogs::DIALOG_CHEAT, true, "CHEAT", "Enter New Level:", "", Dialog::BUTTONS_OK_CANCEL) + : LawnDialog( + theApp, Dialogs::DIALOG_CHEAT, true, "CHEAT", "Enter New Level:", "", Dialog::BUTTONS_OK_CANCEL) { mApp = theApp; mVerticalCenterText = false; @@ -49,7 +49,7 @@ void CheatDialog::Resize(int theX, int theY, int theWidth, int theHeight) { LawnDialog::Resize(theX, theY, theWidth, theHeight); mLevelEditWidget->Resize( - mContentInsets.mLeft + 12, mHeight - 155, mWidth - mContentInsets.mLeft - mContentInsets.mRight - 24, 28); + mContentInsets.mLeft + 12, mHeight - 155, mWidth - mContentInsets.mLeft - mContentInsets.mRight - 24, 28); } void CheatDialog::AddedToManager(WidgetManager *theWidgetManager) @@ -79,14 +79,14 @@ void CheatDialog::EditWidgetText(int theId, const SexyString &theString) bool CheatDialog::AllowChar(int theId, SexyChar theChar) { return isdigit(theChar) || theChar == '-' || theChar == 'c' || theChar == 'C' || theChar == 'f' || - theChar == 'F'; + theChar == 'F'; } bool CheatDialog::ApplyCheat() { int aChallengeIndex; if (sexysscanf(mLevelEditWidget->mString.c_str(), "c%d", &aChallengeIndex) == 1 || - sexysscanf(mLevelEditWidget->mString.c_str(), "C%d", &aChallengeIndex) == 1) + sexysscanf(mLevelEditWidget->mString.c_str(), "C%d", &aChallengeIndex) == 1) { mApp->mGameMode = (GameMode)ClampInt(aChallengeIndex, 0, NUM_CHALLENGE_MODES); return true; @@ -96,13 +96,13 @@ bool CheatDialog::ApplyCheat() int aFinishedAdventure = 0; int aArea, aSubArea; if (sexysscanf(mLevelEditWidget->mString.c_str(), "f%d-%d", &aArea, &aSubArea) == 2 || - sexysscanf(mLevelEditWidget->mString.c_str(), "F%d-%d", &aArea, &aSubArea) == 2) + sexysscanf(mLevelEditWidget->mString.c_str(), "F%d-%d", &aArea, &aSubArea) == 2) { aLevel = (aArea - 1) * LEVELS_PER_AREA + aSubArea; aFinishedAdventure = 1; } else if (sexysscanf(mLevelEditWidget->mString.c_str(), "f%d", &aLevel) == 1 || - sexysscanf(mLevelEditWidget->mString.c_str(), "F%d", &aLevel) == 1) + sexysscanf(mLevelEditWidget->mString.c_str(), "F%d", &aLevel) == 1) { aFinishedAdventure = 1; } @@ -118,11 +118,11 @@ bool CheatDialog::ApplyCheat() if (aLevel <= 0) { mApp->DoDialog(Dialogs::DIALOG_CHEATERROR, - true, - "Enter Level", - "Invalid Level. Do 'number' or 'area-subarea' or 'Cnumber' or 'Farea-subarea'.", - "OK", - Dialog::BUTTONS_FOOTER); + true, + "Enter Level", + "Invalid Level. Do 'number' or 'area-subarea' or 'Cnumber' or 'Farea-subarea'.", + "OK", + Dialog::BUTTONS_FOOTER); return false; } diff --git a/src/Lawn/Widget/ContinueDialog.cpp b/src/Lawn/Widget/ContinueDialog.cpp index cc42759..88a909e 100644 --- a/src/Lawn/Widget/ContinueDialog.cpp +++ b/src/Lawn/Widget/ContinueDialog.cpp @@ -9,22 +9,22 @@ #include "../../Sexy.TodLib/TodStringFile.h" ContinueDialog::ContinueDialog(LawnApp *theApp) - : LawnDialog(theApp, - Dialogs::DIALOG_CONTINUE, - true, - "[CONTINUE_GAME_HEADER]", - "", - "[DIALOG_BUTTON_CANCEL]", - Dialog::BUTTONS_FOOTER) + : LawnDialog(theApp, + Dialogs::DIALOG_CONTINUE, + true, + "[CONTINUE_GAME_HEADER]", + "", + "[DIALOG_BUTTON_CANCEL]", + Dialog::BUTTONS_FOOTER) { if (theApp->IsAdventureMode()) { mDialogLines = TodStringTranslate("[CONTINUE_GAME_OR_RESTART]"); mContinueButton = - MakeButton(ContinueDialog::ContinueDialog_Continue, this, "[CONTINUE_BUTTON]"); + MakeButton(ContinueDialog::ContinueDialog_Continue, this, "[CONTINUE_BUTTON]"); mNewGameButton = - MakeButton(ContinueDialog::ContinueDialog_NewGame, this, "[RESTART_BUTTON]"); + MakeButton(ContinueDialog::ContinueDialog_NewGame, this, "[RESTART_BUTTON]"); } else { @@ -71,7 +71,7 @@ void ContinueDialog::Resize(int theX, int theY, int theWidth, int theHeight) mContinueButton->Resize(mLawnYesButton->mX - 20, mLawnYesButton->mY - aBtnHeight, aBtnWidth, aBtnHeight); mNewGameButton->Resize( - mLawnYesButton->mX + mLawnYesButton->mWidth - aBtnWidth + 20, mContinueButton->mY, aBtnWidth, aBtnHeight); + mLawnYesButton->mX + mLawnYesButton->mWidth - aBtnWidth + 20, mContinueButton->mY, aBtnWidth, aBtnHeight); } void ContinueDialog::AddedToManager(WidgetManager *theWidgetManager) @@ -124,24 +124,24 @@ void ContinueDialog::ButtonDepress(int theId) if (mApp->IsAdventureMode()) { LawnDialog *aDialog = - (LawnDialog *)mApp->DoDialog(Dialogs::DIALOG_RESTARTCONFIRM, - true, - TodStringTranslate("[RESTART_LEVEL_HEADER]"), - TodStringTranslate("[RESTART_LEVEL]"), - "", - Dialog::BUTTONS_OK_CANCEL); + (LawnDialog *)mApp->DoDialog(Dialogs::DIALOG_RESTARTCONFIRM, + true, + TodStringTranslate("[RESTART_LEVEL_HEADER]"), + TodStringTranslate("[RESTART_LEVEL]"), + "", + Dialog::BUTTONS_OK_CANCEL); aDialog->mLawnYesButton->mLabel = TodStringTranslate("[RESTART_BUTTON]"); //aDialog->CalcSize(0, 0); } else { LawnDialog *aDialog = - (LawnDialog *)mApp->DoDialog(Dialogs::DIALOG_RESTARTCONFIRM, - true, - "[NEW_GAME_HEADER]", - "[NEW_GAME]", - "", - Dialog::BUTTONS_OK_CANCEL); + (LawnDialog *)mApp->DoDialog(Dialogs::DIALOG_RESTARTCONFIRM, + true, + "[NEW_GAME_HEADER]", + "[NEW_GAME]", + "", + Dialog::BUTTONS_OK_CANCEL); aDialog->mLawnYesButton->mLabel = TodStringTranslate("[NEW_GAME_BUTTON]"); //aDialog->CalcSize(0, 0); } diff --git a/src/Lawn/Widget/CreditScreen.cpp b/src/Lawn/Widget/CreditScreen.cpp index 52b284e..3e52f07 100644 --- a/src/Lawn/Widget/CreditScreen.cpp +++ b/src/Lawn/Widget/CreditScreen.cpp @@ -14,274 +14,276 @@ #include "../../Sexy.TodLib/TodStringFile.h" #include -static CreditsTiming gCreditsTiming[] = {{128.5f, CreditWordType::WORD_AW, 0, CreditBrainType::BRAIN_OFF}, - {133.0f, CreditWordType::WORD_OH, 0, CreditBrainType::BRAIN_OFF}, - {136.5f, CreditWordType::WORD_EE, 0, CreditBrainType::BRAIN_OFF}, - {140.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {141.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_NEXT_WORD}, - {143.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD}, - {145.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD}, - {149.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD}, - {153.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD}, - {155.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD}, - {159.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD}, - {163.0f, CreditWordType::WORD_AW, 619, CreditBrainType::BRAIN_NEXT_WORD}, - {171.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {172.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {173.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FAST_ON}, - {175.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD}, - {177.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD}, - {181.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD}, - {185.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD}, - {187.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD}, - {191.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD}, - {193.0f, CreditWordType::WORD_AW, 619, CreditBrainType::BRAIN_NEXT_WORD}, - {199.0f, CreditWordType::WORD_AA, 0, CreditBrainType::BRAIN_FLY_OFF}, - {203.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {205.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FLY_ON}, - {207.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD}, - {209.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD}, - {213.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD}, - {217.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD}, - {219.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD}, - {223.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD}, - {227.0f, CreditWordType::WORD_AW, 619, CreditBrainType::BRAIN_NEXT_WORD}, - {231.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {234.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {235.0f, CreditWordType::WORD_EE, 150, CreditBrainType::BRAIN_FAST_ON}, - {237.0f, CreditWordType::WORD_OH, 220, CreditBrainType::BRAIN_NEXT_WORD}, - {239.0f, CreditWordType::WORD_AW, 307, CreditBrainType::BRAIN_NEXT_WORD}, - {241.0f, CreditWordType::WORD_AW, 390, CreditBrainType::BRAIN_NEXT_WORD}, - {245.0f, CreditWordType::WORD_EE, 452, CreditBrainType::BRAIN_NEXT_WORD}, - {249.0f, CreditWordType::WORD_AW, 512, CreditBrainType::BRAIN_NEXT_WORD}, - {251.0f, CreditWordType::WORD_AW, 573, CreditBrainType::BRAIN_NEXT_WORD}, - {255.0f, CreditWordType::WORD_AW, 630, CreditBrainType::BRAIN_NEXT_WORD}, - {257.0f, CreditWordType::WORD_AW, 656, CreditBrainType::BRAIN_NEXT_WORD}, - {261.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {262.0f, CreditWordType::WORD_AA, 0, CreditBrainType::BRAIN_OFF}, - {266.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {266.5f, CreditWordType::WORD_AW, 96, CreditBrainType::BRAIN_FAST_ON}, - {268.5f, CreditWordType::WORD_OH, 154, CreditBrainType::BRAIN_NEXT_WORD}, - {270.5f, CreditWordType::WORD_OH, 244, CreditBrainType::BRAIN_NEXT_WORD}, - {272.5f, CreditWordType::WORD_AW, 329, CreditBrainType::BRAIN_NEXT_WORD}, - {276.5f, CreditWordType::WORD_AW, 419, CreditBrainType::BRAIN_NEXT_WORD}, - {279.5f, CreditWordType::WORD_AW, 506, CreditBrainType::BRAIN_NEXT_WORD}, - {281.5f, CreditWordType::WORD_AW, 597, CreditBrainType::BRAIN_NEXT_WORD}, - {284.5f, CreditWordType::WORD_AW, 671, CreditBrainType::BRAIN_NEXT_WORD}, - {286.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {287.0f, CreditWordType::WORD_OH, 48, CreditBrainType::BRAIN_FAST_ON}, - {288.0f, CreditWordType::WORD_AW, 125, CreditBrainType::BRAIN_NEXT_WORD}, - {290.0f, CreditWordType::WORD_OH, 193, CreditBrainType::BRAIN_NEXT_WORD}, - {291.0f, CreditWordType::WORD_EE, 254, CreditBrainType::BRAIN_NEXT_WORD}, - {294.5f, CreditWordType::WORD_AW, 318, CreditBrainType::BRAIN_NEXT_WORD}, - {295.0f, CreditWordType::WORD_AW, 375, CreditBrainType::BRAIN_NEXT_WORD}, - {296.0f, CreditWordType::WORD_AW, 438, CreditBrainType::BRAIN_NEXT_WORD}, - {297.0f, CreditWordType::WORD_AW, 480, CreditBrainType::BRAIN_NEXT_WORD}, - {299.0f, CreditWordType::WORD_AW, 556, CreditBrainType::BRAIN_NEXT_WORD}, - {301.0f, CreditWordType::WORD_AW, 619, CreditBrainType::BRAIN_NEXT_WORD}, - {303.0f, CreditWordType::WORD_AW, 675, CreditBrainType::BRAIN_NEXT_WORD}, - {305.0f, CreditWordType::WORD_AW, 744, CreditBrainType::BRAIN_NEXT_WORD}, - {307.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {309.5f, CreditWordType::WORD_OFF, 207, CreditBrainType::BRAIN_FLY_ON}, - {310.5f, CreditWordType::WORD_OFF, 287, CreditBrainType::BRAIN_NEXT_WORD}, - {311.5f, CreditWordType::WORD_OFF, 365, CreditBrainType::BRAIN_NEXT_WORD}, - {313.5f, CreditWordType::WORD_OFF, 435, CreditBrainType::BRAIN_NEXT_WORD}, - {315.5f, CreditWordType::WORD_OFF, 518, CreditBrainType::BRAIN_NEXT_WORD}, - {317.5f, CreditWordType::WORD_OFF, 603, CreditBrainType::BRAIN_NEXT_WORD}, - {318.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FAST_OFF}, - {319.5f, CreditWordType::WORD_OFF, 198, CreditBrainType::BRAIN_FAST_ON}, - {320.5f, CreditWordType::WORD_OFF, 264, CreditBrainType::BRAIN_NEXT_WORD}, - {322.5f, CreditWordType::WORD_OFF, 335, CreditBrainType::BRAIN_NEXT_WORD}, - {323.5f, CreditWordType::WORD_OFF, 411, CreditBrainType::BRAIN_NEXT_WORD}, - {324.5f, CreditWordType::WORD_OFF, 474, CreditBrainType::BRAIN_NEXT_WORD}, - {326.5f, CreditWordType::WORD_OFF, 527, CreditBrainType::BRAIN_NEXT_WORD}, - {328.5f, CreditWordType::WORD_OFF, 595, CreditBrainType::BRAIN_NEXT_WORD}, - {332.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {337.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {339.5f, CreditWordType::WORD_AW, 190, CreditBrainType::BRAIN_FLY_ON}, - {340.5f, CreditWordType::WORD_AW, 260, CreditBrainType::BRAIN_NEXT_WORD}, - {342.5f, CreditWordType::WORD_AA, 314, CreditBrainType::BRAIN_NEXT_WORD}, - {344.5f, CreditWordType::WORD_AW, 364, CreditBrainType::BRAIN_NEXT_WORD}, - {347.5f, CreditWordType::WORD_AW, 426, CreditBrainType::BRAIN_NEXT_WORD}, - {349.5f, CreditWordType::WORD_OH, 474, CreditBrainType::BRAIN_NEXT_WORD}, - {350.5f, CreditWordType::WORD_AW, 538, CreditBrainType::BRAIN_NEXT_WORD}, - {352.5f, CreditWordType::WORD_EE, 606, CreditBrainType::BRAIN_NEXT_WORD}, - {353.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FAST_OFF}, - {354.5f, CreditWordType::WORD_EE, 187, CreditBrainType::BRAIN_FAST_ON}, - {356.5f, CreditWordType::WORD_AW, 242, CreditBrainType::BRAIN_NEXT_WORD}, - {358.5f, CreditWordType::WORD_OH, 280, CreditBrainType::BRAIN_NEXT_WORD}, - {359.5f, CreditWordType::WORD_AW, 340, CreditBrainType::BRAIN_NEXT_WORD}, - {360.5f, CreditWordType::WORD_AW, 394, CreditBrainType::BRAIN_NEXT_WORD}, - {361.5f, CreditWordType::WORD_EE, 439, CreditBrainType::BRAIN_NEXT_WORD}, - {363.5f, CreditWordType::WORD_AW, 500, CreditBrainType::BRAIN_NEXT_WORD}, - {364.5f, CreditWordType::WORD_AW, 550, CreditBrainType::BRAIN_NEXT_WORD}, - {366.5f, CreditWordType::WORD_EE, 606, CreditBrainType::BRAIN_NEXT_WORD}, - {369.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {371.5f, CreditWordType::WORD_OFF, 200, CreditBrainType::BRAIN_FLY_ON}, - {372.5f, CreditWordType::WORD_OH, 258, CreditBrainType::BRAIN_NEXT_WORD}, - {374.5f, CreditWordType::WORD_OFF, 332, CreditBrainType::BRAIN_NEXT_WORD}, - {376.5f, CreditWordType::WORD_OFF, 416, CreditBrainType::BRAIN_NEXT_WORD}, - {378.5f, CreditWordType::WORD_OFF, 494, CreditBrainType::BRAIN_NEXT_WORD}, - {380.5f, CreditWordType::WORD_OFF, 576, CreditBrainType::BRAIN_NEXT_WORD}, - {381.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FAST_OFF}, - {382.5f, CreditWordType::WORD_OFF, 255, CreditBrainType::BRAIN_FAST_ON}, - {384.5f, CreditWordType::WORD_OFF, 322, CreditBrainType::BRAIN_NEXT_WORD}, - {386.5f, CreditWordType::WORD_OFF, 400, CreditBrainType::BRAIN_NEXT_WORD}, - {388.5f, CreditWordType::WORD_OFF, 474, CreditBrainType::BRAIN_NEXT_WORD}, - {390.5f, CreditWordType::WORD_OFF, 533, CreditBrainType::BRAIN_NEXT_WORD}, - {394.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {522.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {523.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FAST_ON}, - {525.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD}, - {527.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD}, - {531.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD}, - {535.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD}, - {537.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD}, - {541.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD}, - {545.0f, CreditWordType::WORD_AW, 619, CreditBrainType::BRAIN_NEXT_WORD}, - {549.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {554.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {555.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FAST_ON}, - {557.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD}, - {559.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD}, - {563.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD}, - {567.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD}, - {569.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD}, - {573.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD}, - {575.0f, CreditWordType::WORD_AW, 619, CreditBrainType::BRAIN_NEXT_WORD}, - {581.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {582.0f, CreditWordType::WORD_AA, 0, CreditBrainType::BRAIN_OFF}, - {586.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {587.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FAST_ON}, - {589.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD}, - {591.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD}, - {595.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD}, - {599.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD}, - {601.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD}, - {605.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD}, - {609.0f, CreditWordType::WORD_AW, 619, CreditBrainType::BRAIN_NEXT_WORD}, - {613.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {616.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {617.0f, CreditWordType::WORD_EE, 150, CreditBrainType::BRAIN_FAST_ON}, - {619.0f, CreditWordType::WORD_OH, 220, CreditBrainType::BRAIN_NEXT_WORD}, - {621.0f, CreditWordType::WORD_AW, 307, CreditBrainType::BRAIN_NEXT_WORD}, - {623.0f, CreditWordType::WORD_AW, 390, CreditBrainType::BRAIN_NEXT_WORD}, - {627.0f, CreditWordType::WORD_EE, 452, CreditBrainType::BRAIN_NEXT_WORD}, - {631.0f, CreditWordType::WORD_AW, 512, CreditBrainType::BRAIN_NEXT_WORD}, - {633.0f, CreditWordType::WORD_AW, 573, CreditBrainType::BRAIN_NEXT_WORD}, - {637.0f, CreditWordType::WORD_AW, 630, CreditBrainType::BRAIN_NEXT_WORD}, - {639.0f, CreditWordType::WORD_AW, 656, CreditBrainType::BRAIN_NEXT_WORD}, - {643.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {644.0f, CreditWordType::WORD_AA, 0, CreditBrainType::BRAIN_OFF}, - {648.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {649.0f, CreditWordType::WORD_AA, 196, CreditBrainType::BRAIN_FAST_ON}, - {651.0f, CreditWordType::WORD_EE, 247, CreditBrainType::BRAIN_NEXT_WORD}, - {653.0f, CreditWordType::WORD_AW, 299, CreditBrainType::BRAIN_NEXT_WORD}, - {655.0f, CreditWordType::WORD_AW, 371, CreditBrainType::BRAIN_NEXT_WORD}, - {658.0f, CreditWordType::WORD_OH, 443, CreditBrainType::BRAIN_NEXT_WORD}, - {659.0f, CreditWordType::WORD_EE, 475, CreditBrainType::BRAIN_NEXT_WORD}, - {661.0f, CreditWordType::WORD_AW, 512, CreditBrainType::BRAIN_NEXT_WORD}, - {662.0f, CreditWordType::WORD_AA, 544, CreditBrainType::BRAIN_NEXT_WORD}, - {664.0f, CreditWordType::WORD_OH, 573, CreditBrainType::BRAIN_NEXT_WORD}, - {667.0f, CreditWordType::WORD_AA, 610, CreditBrainType::BRAIN_NEXT_WORD}, - {669.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FAST_OFF}, - {670.0f, CreditWordType::WORD_OFF, 48, CreditBrainType::BRAIN_FAST_ON}, - {671.0f, CreditWordType::WORD_OFF, 110, CreditBrainType::BRAIN_NEXT_WORD}, - {673.0f, CreditWordType::WORD_OFF, 185, CreditBrainType::BRAIN_NEXT_WORD}, - {674.0f, CreditWordType::WORD_OFF, 262, CreditBrainType::BRAIN_NEXT_WORD}, - {676.0f, CreditWordType::WORD_OFF, 317, CreditBrainType::BRAIN_NEXT_WORD}, - {677.0f, CreditWordType::WORD_OFF, 357, CreditBrainType::BRAIN_NEXT_WORD}, - {678.0f, CreditWordType::WORD_OFF, 417, CreditBrainType::BRAIN_NEXT_WORD}, - {679.0f, CreditWordType::WORD_OFF, 491, CreditBrainType::BRAIN_NEXT_WORD}, - {682.0f, CreditWordType::WORD_OFF, 558, CreditBrainType::BRAIN_NEXT_WORD}, - {685.0f, CreditWordType::WORD_OFF, 628, CreditBrainType::BRAIN_NEXT_WORD}, - {687.0f, CreditWordType::WORD_OFF, 720, CreditBrainType::BRAIN_NEXT_WORD}, - {689.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {690.0f, CreditWordType::WORD_OFF, 172, CreditBrainType::BRAIN_FAST_ON}, - {692.0f, CreditWordType::WORD_OFF, 263, CreditBrainType::BRAIN_NEXT_WORD}, - {694.0f, CreditWordType::WORD_OFF, 346, CreditBrainType::BRAIN_NEXT_WORD}, - {696.0f, CreditWordType::WORD_OFF, 423, CreditBrainType::BRAIN_NEXT_WORD}, - {698.0f, CreditWordType::WORD_OFF, 480, CreditBrainType::BRAIN_NEXT_WORD}, - {700.0f, CreditWordType::WORD_OFF, 536, CreditBrainType::BRAIN_NEXT_WORD}, - {702.0f, CreditWordType::WORD_OFF, 583, CreditBrainType::BRAIN_NEXT_WORD}, - {705.0f, CreditWordType::WORD_OFF, 633, CreditBrainType::BRAIN_NEXT_WORD}, - {708.0f, CreditWordType::WORD_OFF, 668, CreditBrainType::BRAIN_NEXT_WORD}, - {712.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {719.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {720.0f, CreditWordType::WORD_OFF, 182, CreditBrainType::BRAIN_FAST_ON}, - {722.0f, CreditWordType::WORD_OFF, 267, CreditBrainType::BRAIN_NEXT_WORD}, - {724.0f, CreditWordType::WORD_OFF, 331, CreditBrainType::BRAIN_NEXT_WORD}, - {726.0f, CreditWordType::WORD_OFF, 371, CreditBrainType::BRAIN_NEXT_WORD}, - {729.0f, CreditWordType::WORD_OFF, 434, CreditBrainType::BRAIN_NEXT_WORD}, - {731.0f, CreditWordType::WORD_OFF, 486, CreditBrainType::BRAIN_NEXT_WORD}, - {732.0f, CreditWordType::WORD_OFF, 562, CreditBrainType::BRAIN_NEXT_WORD}, - {734.0f, CreditWordType::WORD_OFF, 617, CreditBrainType::BRAIN_NEXT_WORD}, - {735.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FAST_OFF}, - {736.0f, CreditWordType::WORD_AW, 148, CreditBrainType::BRAIN_FAST_ON}, - {738.0f, CreditWordType::WORD_AW, 211, CreditBrainType::BRAIN_NEXT_WORD}, - {740.0f, CreditWordType::WORD_EE, 298, CreditBrainType::BRAIN_NEXT_WORD}, - {742.0f, CreditWordType::WORD_OH, 367, CreditBrainType::BRAIN_NEXT_WORD}, - {744.0f, CreditWordType::WORD_AW, 440, CreditBrainType::BRAIN_NEXT_WORD}, - {746.0f, CreditWordType::WORD_OH, 506, CreditBrainType::BRAIN_NEXT_WORD}, - {747.0f, CreditWordType::WORD_AW, 533, CreditBrainType::BRAIN_NEXT_WORD}, - {748.0f, CreditWordType::WORD_AW, 601, CreditBrainType::BRAIN_NEXT_WORD}, - {749.0f, CreditWordType::WORD_AW, 645, CreditBrainType::BRAIN_NEXT_WORD}, - {750.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FAST_OFF}, - {753.0f, CreditWordType::WORD_OFF, 123, CreditBrainType::BRAIN_FLY_ON}, - {755.0f, CreditWordType::WORD_OFF, 195, CreditBrainType::BRAIN_NEXT_WORD}, - {757.0f, CreditWordType::WORD_OFF, 255, CreditBrainType::BRAIN_NEXT_WORD}, - {759.0f, CreditWordType::WORD_OFF, 312, CreditBrainType::BRAIN_NEXT_WORD}, - {761.0f, CreditWordType::WORD_OFF, 378, CreditBrainType::BRAIN_NEXT_WORD}, - {763.0f, CreditWordType::WORD_OFF, 443, CreditBrainType::BRAIN_NEXT_WORD}, - {765.0f, CreditWordType::WORD_OFF, 516, CreditBrainType::BRAIN_NEXT_WORD}, - {767.0f, CreditWordType::WORD_OFF, 563, CreditBrainType::BRAIN_NEXT_WORD}, - {770.0f, CreditWordType::WORD_OFF, 588, CreditBrainType::BRAIN_NEXT_WORD}, - {773.0f, CreditWordType::WORD_OFF, 657, CreditBrainType::BRAIN_NEXT_WORD}, - {777.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {907.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {908.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FAST_ON}, - {910.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD}, - {912.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD}, - {916.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD}, - {920.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD}, - {922.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD}, - {926.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD}, - {930.0f, CreditWordType::WORD_AW, 616, CreditBrainType::BRAIN_NEXT_WORD}, - {934.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {939.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {940.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FAST_ON}, - {942.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD}, - {944.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD}, - {948.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD}, - {952.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD}, - {954.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD}, - {958.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD}, - {960.0f, CreditWordType::WORD_AW, 616, CreditBrainType::BRAIN_NEXT_WORD}, - {966.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {967.0f, CreditWordType::WORD_AA, 0, CreditBrainType::BRAIN_OFF}, - {971.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {972.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FAST_ON}, - {974.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD}, - {976.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD}, - {980.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD}, - {984.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD}, - {986.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD}, - {990.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD}, - {994.0f, CreditWordType::WORD_AW, 616, CreditBrainType::BRAIN_NEXT_WORD}, - {998.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {1001.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}, - {1002.0f, CreditWordType::WORD_EE, 150, CreditBrainType::BRAIN_FAST_ON}, - {1004.0f, CreditWordType::WORD_OH, 220, CreditBrainType::BRAIN_NEXT_WORD}, - {1006.0f, CreditWordType::WORD_AW, 307, CreditBrainType::BRAIN_NEXT_WORD}, - {1008.0f, CreditWordType::WORD_AW, 390, CreditBrainType::BRAIN_NEXT_WORD}, - {1012.0f, CreditWordType::WORD_EE, 452, CreditBrainType::BRAIN_NEXT_WORD}, - {1016.0f, CreditWordType::WORD_AW, 512, CreditBrainType::BRAIN_NEXT_WORD}, - {1018.0f, CreditWordType::WORD_AW, 573, CreditBrainType::BRAIN_NEXT_WORD}, - {1022.0f, CreditWordType::WORD_AW, 630, CreditBrainType::BRAIN_NEXT_WORD}, - {1024.0f, CreditWordType::WORD_AW, 656, CreditBrainType::BRAIN_NEXT_WORD}, - {1028.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF}, - {1029.0f, CreditWordType::WORD_AA, 0, CreditBrainType::BRAIN_OFF}, - {1033.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF}}; +static CreditsTiming gCreditsTiming[] = { + { 128.5f, CreditWordType::WORD_AW, 0, CreditBrainType::BRAIN_OFF }, + { 133.0f, CreditWordType::WORD_OH, 0, CreditBrainType::BRAIN_OFF }, + { 136.5f, CreditWordType::WORD_EE, 0, CreditBrainType::BRAIN_OFF }, + { 140.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 141.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_NEXT_WORD }, + { 143.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD }, + { 145.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD }, + { 149.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD }, + { 153.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD }, + { 155.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD }, + { 159.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD }, + { 163.0f, CreditWordType::WORD_AW, 619, CreditBrainType::BRAIN_NEXT_WORD }, + { 171.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 172.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 173.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FAST_ON }, + { 175.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD }, + { 177.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD }, + { 181.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD }, + { 185.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD }, + { 187.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD }, + { 191.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD }, + { 193.0f, CreditWordType::WORD_AW, 619, CreditBrainType::BRAIN_NEXT_WORD }, + { 199.0f, CreditWordType::WORD_AA, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 203.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 205.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FLY_ON }, + { 207.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD }, + { 209.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD }, + { 213.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD }, + { 217.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD }, + { 219.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD }, + { 223.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD }, + { 227.0f, CreditWordType::WORD_AW, 619, CreditBrainType::BRAIN_NEXT_WORD }, + { 231.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 234.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 235.0f, CreditWordType::WORD_EE, 150, CreditBrainType::BRAIN_FAST_ON }, + { 237.0f, CreditWordType::WORD_OH, 220, CreditBrainType::BRAIN_NEXT_WORD }, + { 239.0f, CreditWordType::WORD_AW, 307, CreditBrainType::BRAIN_NEXT_WORD }, + { 241.0f, CreditWordType::WORD_AW, 390, CreditBrainType::BRAIN_NEXT_WORD }, + { 245.0f, CreditWordType::WORD_EE, 452, CreditBrainType::BRAIN_NEXT_WORD }, + { 249.0f, CreditWordType::WORD_AW, 512, CreditBrainType::BRAIN_NEXT_WORD }, + { 251.0f, CreditWordType::WORD_AW, 573, CreditBrainType::BRAIN_NEXT_WORD }, + { 255.0f, CreditWordType::WORD_AW, 630, CreditBrainType::BRAIN_NEXT_WORD }, + { 257.0f, CreditWordType::WORD_AW, 656, CreditBrainType::BRAIN_NEXT_WORD }, + { 261.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 262.0f, CreditWordType::WORD_AA, 0, CreditBrainType::BRAIN_OFF }, + { 266.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 266.5f, CreditWordType::WORD_AW, 96, CreditBrainType::BRAIN_FAST_ON }, + { 268.5f, CreditWordType::WORD_OH, 154, CreditBrainType::BRAIN_NEXT_WORD }, + { 270.5f, CreditWordType::WORD_OH, 244, CreditBrainType::BRAIN_NEXT_WORD }, + { 272.5f, CreditWordType::WORD_AW, 329, CreditBrainType::BRAIN_NEXT_WORD }, + { 276.5f, CreditWordType::WORD_AW, 419, CreditBrainType::BRAIN_NEXT_WORD }, + { 279.5f, CreditWordType::WORD_AW, 506, CreditBrainType::BRAIN_NEXT_WORD }, + { 281.5f, CreditWordType::WORD_AW, 597, CreditBrainType::BRAIN_NEXT_WORD }, + { 284.5f, CreditWordType::WORD_AW, 671, CreditBrainType::BRAIN_NEXT_WORD }, + { 286.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 287.0f, CreditWordType::WORD_OH, 48, CreditBrainType::BRAIN_FAST_ON }, + { 288.0f, CreditWordType::WORD_AW, 125, CreditBrainType::BRAIN_NEXT_WORD }, + { 290.0f, CreditWordType::WORD_OH, 193, CreditBrainType::BRAIN_NEXT_WORD }, + { 291.0f, CreditWordType::WORD_EE, 254, CreditBrainType::BRAIN_NEXT_WORD }, + { 294.5f, CreditWordType::WORD_AW, 318, CreditBrainType::BRAIN_NEXT_WORD }, + { 295.0f, CreditWordType::WORD_AW, 375, CreditBrainType::BRAIN_NEXT_WORD }, + { 296.0f, CreditWordType::WORD_AW, 438, CreditBrainType::BRAIN_NEXT_WORD }, + { 297.0f, CreditWordType::WORD_AW, 480, CreditBrainType::BRAIN_NEXT_WORD }, + { 299.0f, CreditWordType::WORD_AW, 556, CreditBrainType::BRAIN_NEXT_WORD }, + { 301.0f, CreditWordType::WORD_AW, 619, CreditBrainType::BRAIN_NEXT_WORD }, + { 303.0f, CreditWordType::WORD_AW, 675, CreditBrainType::BRAIN_NEXT_WORD }, + { 305.0f, CreditWordType::WORD_AW, 744, CreditBrainType::BRAIN_NEXT_WORD }, + { 307.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 309.5f, CreditWordType::WORD_OFF, 207, CreditBrainType::BRAIN_FLY_ON }, + { 310.5f, CreditWordType::WORD_OFF, 287, CreditBrainType::BRAIN_NEXT_WORD }, + { 311.5f, CreditWordType::WORD_OFF, 365, CreditBrainType::BRAIN_NEXT_WORD }, + { 313.5f, CreditWordType::WORD_OFF, 435, CreditBrainType::BRAIN_NEXT_WORD }, + { 315.5f, CreditWordType::WORD_OFF, 518, CreditBrainType::BRAIN_NEXT_WORD }, + { 317.5f, CreditWordType::WORD_OFF, 603, CreditBrainType::BRAIN_NEXT_WORD }, + { 318.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FAST_OFF }, + { 319.5f, CreditWordType::WORD_OFF, 198, CreditBrainType::BRAIN_FAST_ON }, + { 320.5f, CreditWordType::WORD_OFF, 264, CreditBrainType::BRAIN_NEXT_WORD }, + { 322.5f, CreditWordType::WORD_OFF, 335, CreditBrainType::BRAIN_NEXT_WORD }, + { 323.5f, CreditWordType::WORD_OFF, 411, CreditBrainType::BRAIN_NEXT_WORD }, + { 324.5f, CreditWordType::WORD_OFF, 474, CreditBrainType::BRAIN_NEXT_WORD }, + { 326.5f, CreditWordType::WORD_OFF, 527, CreditBrainType::BRAIN_NEXT_WORD }, + { 328.5f, CreditWordType::WORD_OFF, 595, CreditBrainType::BRAIN_NEXT_WORD }, + { 332.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 337.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 339.5f, CreditWordType::WORD_AW, 190, CreditBrainType::BRAIN_FLY_ON }, + { 340.5f, CreditWordType::WORD_AW, 260, CreditBrainType::BRAIN_NEXT_WORD }, + { 342.5f, CreditWordType::WORD_AA, 314, CreditBrainType::BRAIN_NEXT_WORD }, + { 344.5f, CreditWordType::WORD_AW, 364, CreditBrainType::BRAIN_NEXT_WORD }, + { 347.5f, CreditWordType::WORD_AW, 426, CreditBrainType::BRAIN_NEXT_WORD }, + { 349.5f, CreditWordType::WORD_OH, 474, CreditBrainType::BRAIN_NEXT_WORD }, + { 350.5f, CreditWordType::WORD_AW, 538, CreditBrainType::BRAIN_NEXT_WORD }, + { 352.5f, CreditWordType::WORD_EE, 606, CreditBrainType::BRAIN_NEXT_WORD }, + { 353.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FAST_OFF }, + { 354.5f, CreditWordType::WORD_EE, 187, CreditBrainType::BRAIN_FAST_ON }, + { 356.5f, CreditWordType::WORD_AW, 242, CreditBrainType::BRAIN_NEXT_WORD }, + { 358.5f, CreditWordType::WORD_OH, 280, CreditBrainType::BRAIN_NEXT_WORD }, + { 359.5f, CreditWordType::WORD_AW, 340, CreditBrainType::BRAIN_NEXT_WORD }, + { 360.5f, CreditWordType::WORD_AW, 394, CreditBrainType::BRAIN_NEXT_WORD }, + { 361.5f, CreditWordType::WORD_EE, 439, CreditBrainType::BRAIN_NEXT_WORD }, + { 363.5f, CreditWordType::WORD_AW, 500, CreditBrainType::BRAIN_NEXT_WORD }, + { 364.5f, CreditWordType::WORD_AW, 550, CreditBrainType::BRAIN_NEXT_WORD }, + { 366.5f, CreditWordType::WORD_EE, 606, CreditBrainType::BRAIN_NEXT_WORD }, + { 369.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 371.5f, CreditWordType::WORD_OFF, 200, CreditBrainType::BRAIN_FLY_ON }, + { 372.5f, CreditWordType::WORD_OH, 258, CreditBrainType::BRAIN_NEXT_WORD }, + { 374.5f, CreditWordType::WORD_OFF, 332, CreditBrainType::BRAIN_NEXT_WORD }, + { 376.5f, CreditWordType::WORD_OFF, 416, CreditBrainType::BRAIN_NEXT_WORD }, + { 378.5f, CreditWordType::WORD_OFF, 494, CreditBrainType::BRAIN_NEXT_WORD }, + { 380.5f, CreditWordType::WORD_OFF, 576, CreditBrainType::BRAIN_NEXT_WORD }, + { 381.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FAST_OFF }, + { 382.5f, CreditWordType::WORD_OFF, 255, CreditBrainType::BRAIN_FAST_ON }, + { 384.5f, CreditWordType::WORD_OFF, 322, CreditBrainType::BRAIN_NEXT_WORD }, + { 386.5f, CreditWordType::WORD_OFF, 400, CreditBrainType::BRAIN_NEXT_WORD }, + { 388.5f, CreditWordType::WORD_OFF, 474, CreditBrainType::BRAIN_NEXT_WORD }, + { 390.5f, CreditWordType::WORD_OFF, 533, CreditBrainType::BRAIN_NEXT_WORD }, + { 394.5f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 522.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 523.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FAST_ON }, + { 525.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD }, + { 527.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD }, + { 531.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD }, + { 535.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD }, + { 537.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD }, + { 541.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD }, + { 545.0f, CreditWordType::WORD_AW, 619, CreditBrainType::BRAIN_NEXT_WORD }, + { 549.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 554.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 555.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FAST_ON }, + { 557.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD }, + { 559.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD }, + { 563.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD }, + { 567.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD }, + { 569.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD }, + { 573.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD }, + { 575.0f, CreditWordType::WORD_AW, 619, CreditBrainType::BRAIN_NEXT_WORD }, + { 581.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 582.0f, CreditWordType::WORD_AA, 0, CreditBrainType::BRAIN_OFF }, + { 586.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 587.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FAST_ON }, + { 589.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD }, + { 591.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD }, + { 595.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD }, + { 599.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD }, + { 601.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD }, + { 605.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD }, + { 609.0f, CreditWordType::WORD_AW, 619, CreditBrainType::BRAIN_NEXT_WORD }, + { 613.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 616.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 617.0f, CreditWordType::WORD_EE, 150, CreditBrainType::BRAIN_FAST_ON }, + { 619.0f, CreditWordType::WORD_OH, 220, CreditBrainType::BRAIN_NEXT_WORD }, + { 621.0f, CreditWordType::WORD_AW, 307, CreditBrainType::BRAIN_NEXT_WORD }, + { 623.0f, CreditWordType::WORD_AW, 390, CreditBrainType::BRAIN_NEXT_WORD }, + { 627.0f, CreditWordType::WORD_EE, 452, CreditBrainType::BRAIN_NEXT_WORD }, + { 631.0f, CreditWordType::WORD_AW, 512, CreditBrainType::BRAIN_NEXT_WORD }, + { 633.0f, CreditWordType::WORD_AW, 573, CreditBrainType::BRAIN_NEXT_WORD }, + { 637.0f, CreditWordType::WORD_AW, 630, CreditBrainType::BRAIN_NEXT_WORD }, + { 639.0f, CreditWordType::WORD_AW, 656, CreditBrainType::BRAIN_NEXT_WORD }, + { 643.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 644.0f, CreditWordType::WORD_AA, 0, CreditBrainType::BRAIN_OFF }, + { 648.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 649.0f, CreditWordType::WORD_AA, 196, CreditBrainType::BRAIN_FAST_ON }, + { 651.0f, CreditWordType::WORD_EE, 247, CreditBrainType::BRAIN_NEXT_WORD }, + { 653.0f, CreditWordType::WORD_AW, 299, CreditBrainType::BRAIN_NEXT_WORD }, + { 655.0f, CreditWordType::WORD_AW, 371, CreditBrainType::BRAIN_NEXT_WORD }, + { 658.0f, CreditWordType::WORD_OH, 443, CreditBrainType::BRAIN_NEXT_WORD }, + { 659.0f, CreditWordType::WORD_EE, 475, CreditBrainType::BRAIN_NEXT_WORD }, + { 661.0f, CreditWordType::WORD_AW, 512, CreditBrainType::BRAIN_NEXT_WORD }, + { 662.0f, CreditWordType::WORD_AA, 544, CreditBrainType::BRAIN_NEXT_WORD }, + { 664.0f, CreditWordType::WORD_OH, 573, CreditBrainType::BRAIN_NEXT_WORD }, + { 667.0f, CreditWordType::WORD_AA, 610, CreditBrainType::BRAIN_NEXT_WORD }, + { 669.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FAST_OFF }, + { 670.0f, CreditWordType::WORD_OFF, 48, CreditBrainType::BRAIN_FAST_ON }, + { 671.0f, CreditWordType::WORD_OFF, 110, CreditBrainType::BRAIN_NEXT_WORD }, + { 673.0f, CreditWordType::WORD_OFF, 185, CreditBrainType::BRAIN_NEXT_WORD }, + { 674.0f, CreditWordType::WORD_OFF, 262, CreditBrainType::BRAIN_NEXT_WORD }, + { 676.0f, CreditWordType::WORD_OFF, 317, CreditBrainType::BRAIN_NEXT_WORD }, + { 677.0f, CreditWordType::WORD_OFF, 357, CreditBrainType::BRAIN_NEXT_WORD }, + { 678.0f, CreditWordType::WORD_OFF, 417, CreditBrainType::BRAIN_NEXT_WORD }, + { 679.0f, CreditWordType::WORD_OFF, 491, CreditBrainType::BRAIN_NEXT_WORD }, + { 682.0f, CreditWordType::WORD_OFF, 558, CreditBrainType::BRAIN_NEXT_WORD }, + { 685.0f, CreditWordType::WORD_OFF, 628, CreditBrainType::BRAIN_NEXT_WORD }, + { 687.0f, CreditWordType::WORD_OFF, 720, CreditBrainType::BRAIN_NEXT_WORD }, + { 689.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 690.0f, CreditWordType::WORD_OFF, 172, CreditBrainType::BRAIN_FAST_ON }, + { 692.0f, CreditWordType::WORD_OFF, 263, CreditBrainType::BRAIN_NEXT_WORD }, + { 694.0f, CreditWordType::WORD_OFF, 346, CreditBrainType::BRAIN_NEXT_WORD }, + { 696.0f, CreditWordType::WORD_OFF, 423, CreditBrainType::BRAIN_NEXT_WORD }, + { 698.0f, CreditWordType::WORD_OFF, 480, CreditBrainType::BRAIN_NEXT_WORD }, + { 700.0f, CreditWordType::WORD_OFF, 536, CreditBrainType::BRAIN_NEXT_WORD }, + { 702.0f, CreditWordType::WORD_OFF, 583, CreditBrainType::BRAIN_NEXT_WORD }, + { 705.0f, CreditWordType::WORD_OFF, 633, CreditBrainType::BRAIN_NEXT_WORD }, + { 708.0f, CreditWordType::WORD_OFF, 668, CreditBrainType::BRAIN_NEXT_WORD }, + { 712.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 719.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 720.0f, CreditWordType::WORD_OFF, 182, CreditBrainType::BRAIN_FAST_ON }, + { 722.0f, CreditWordType::WORD_OFF, 267, CreditBrainType::BRAIN_NEXT_WORD }, + { 724.0f, CreditWordType::WORD_OFF, 331, CreditBrainType::BRAIN_NEXT_WORD }, + { 726.0f, CreditWordType::WORD_OFF, 371, CreditBrainType::BRAIN_NEXT_WORD }, + { 729.0f, CreditWordType::WORD_OFF, 434, CreditBrainType::BRAIN_NEXT_WORD }, + { 731.0f, CreditWordType::WORD_OFF, 486, CreditBrainType::BRAIN_NEXT_WORD }, + { 732.0f, CreditWordType::WORD_OFF, 562, CreditBrainType::BRAIN_NEXT_WORD }, + { 734.0f, CreditWordType::WORD_OFF, 617, CreditBrainType::BRAIN_NEXT_WORD }, + { 735.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FAST_OFF }, + { 736.0f, CreditWordType::WORD_AW, 148, CreditBrainType::BRAIN_FAST_ON }, + { 738.0f, CreditWordType::WORD_AW, 211, CreditBrainType::BRAIN_NEXT_WORD }, + { 740.0f, CreditWordType::WORD_EE, 298, CreditBrainType::BRAIN_NEXT_WORD }, + { 742.0f, CreditWordType::WORD_OH, 367, CreditBrainType::BRAIN_NEXT_WORD }, + { 744.0f, CreditWordType::WORD_AW, 440, CreditBrainType::BRAIN_NEXT_WORD }, + { 746.0f, CreditWordType::WORD_OH, 506, CreditBrainType::BRAIN_NEXT_WORD }, + { 747.0f, CreditWordType::WORD_AW, 533, CreditBrainType::BRAIN_NEXT_WORD }, + { 748.0f, CreditWordType::WORD_AW, 601, CreditBrainType::BRAIN_NEXT_WORD }, + { 749.0f, CreditWordType::WORD_AW, 645, CreditBrainType::BRAIN_NEXT_WORD }, + { 750.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FAST_OFF }, + { 753.0f, CreditWordType::WORD_OFF, 123, CreditBrainType::BRAIN_FLY_ON }, + { 755.0f, CreditWordType::WORD_OFF, 195, CreditBrainType::BRAIN_NEXT_WORD }, + { 757.0f, CreditWordType::WORD_OFF, 255, CreditBrainType::BRAIN_NEXT_WORD }, + { 759.0f, CreditWordType::WORD_OFF, 312, CreditBrainType::BRAIN_NEXT_WORD }, + { 761.0f, CreditWordType::WORD_OFF, 378, CreditBrainType::BRAIN_NEXT_WORD }, + { 763.0f, CreditWordType::WORD_OFF, 443, CreditBrainType::BRAIN_NEXT_WORD }, + { 765.0f, CreditWordType::WORD_OFF, 516, CreditBrainType::BRAIN_NEXT_WORD }, + { 767.0f, CreditWordType::WORD_OFF, 563, CreditBrainType::BRAIN_NEXT_WORD }, + { 770.0f, CreditWordType::WORD_OFF, 588, CreditBrainType::BRAIN_NEXT_WORD }, + { 773.0f, CreditWordType::WORD_OFF, 657, CreditBrainType::BRAIN_NEXT_WORD }, + { 777.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 907.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 908.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FAST_ON }, + { 910.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD }, + { 912.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD }, + { 916.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD }, + { 920.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD }, + { 922.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD }, + { 926.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD }, + { 930.0f, CreditWordType::WORD_AW, 616, CreditBrainType::BRAIN_NEXT_WORD }, + { 934.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 939.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 940.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FAST_ON }, + { 942.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD }, + { 944.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD }, + { 948.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD }, + { 952.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD }, + { 954.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD }, + { 958.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD }, + { 960.0f, CreditWordType::WORD_AW, 616, CreditBrainType::BRAIN_NEXT_WORD }, + { 966.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 967.0f, CreditWordType::WORD_AA, 0, CreditBrainType::BRAIN_OFF }, + { 971.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 972.0f, CreditWordType::WORD_AW, 214, CreditBrainType::BRAIN_FAST_ON }, + { 974.0f, CreditWordType::WORD_AW, 297, CreditBrainType::BRAIN_NEXT_WORD }, + { 976.0f, CreditWordType::WORD_AW, 348, CreditBrainType::BRAIN_NEXT_WORD }, + { 980.0f, CreditWordType::WORD_EE, 400, CreditBrainType::BRAIN_NEXT_WORD }, + { 984.0f, CreditWordType::WORD_AW, 455, CreditBrainType::BRAIN_NEXT_WORD }, + { 986.0f, CreditWordType::WORD_OH, 523, CreditBrainType::BRAIN_NEXT_WORD }, + { 990.0f, CreditWordType::WORD_AW, 593, CreditBrainType::BRAIN_NEXT_WORD }, + { 994.0f, CreditWordType::WORD_AW, 616, CreditBrainType::BRAIN_NEXT_WORD }, + { 998.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 1001.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF }, + { 1002.0f, CreditWordType::WORD_EE, 150, CreditBrainType::BRAIN_FAST_ON }, + { 1004.0f, CreditWordType::WORD_OH, 220, CreditBrainType::BRAIN_NEXT_WORD }, + { 1006.0f, CreditWordType::WORD_AW, 307, CreditBrainType::BRAIN_NEXT_WORD }, + { 1008.0f, CreditWordType::WORD_AW, 390, CreditBrainType::BRAIN_NEXT_WORD }, + { 1012.0f, CreditWordType::WORD_EE, 452, CreditBrainType::BRAIN_NEXT_WORD }, + { 1016.0f, CreditWordType::WORD_AW, 512, CreditBrainType::BRAIN_NEXT_WORD }, + { 1018.0f, CreditWordType::WORD_AW, 573, CreditBrainType::BRAIN_NEXT_WORD }, + { 1022.0f, CreditWordType::WORD_AW, 630, CreditBrainType::BRAIN_NEXT_WORD }, + { 1024.0f, CreditWordType::WORD_AW, 656, CreditBrainType::BRAIN_NEXT_WORD }, + { 1028.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_FLY_OFF }, + { 1029.0f, CreditWordType::WORD_AA, 0, CreditBrainType::BRAIN_OFF }, + { 1033.0f, CreditWordType::WORD_OFF, 0, CreditBrainType::BRAIN_OFF } +}; static int gCreditsTimingCount = LENGTH(gCreditsTiming); CreditsOverlay::CreditsOverlay(CreditScreen *theCreditScreen) @@ -326,7 +328,7 @@ CreditScreen::CreditScreen(LawnApp *theApp) mMainMenuButton->SetVisible(false); mReplayButton = MakeNewButton(CreditScreen::Credits_Button_Replay, this, "[CREDITS_REPLAY_BUTTON]", - FONT_HOUSEOFTERROR16, IMAGE_CREDITS_PLAYBUTTON, nullptr, nullptr); + FONT_HOUSEOFTERROR16, IMAGE_CREDITS_PLAYBUTTON, nullptr, nullptr); mReplayButton->mTextDownOffsetX = 1; mReplayButton->mTextDownOffsetY = 1; mReplayButton->mColors[ButtonWidget::COLOR_LABEL] = Color(255, 255, 255); @@ -640,7 +642,7 @@ void DrawDisco(Graphics *g, float aCenterX, float aCenterY, float theTime) aVerts[1][2].color = aColor; g->mDestImage->BltTrianglesTex(IMAGE_REANIM_CREDITS_DISCOLIGHTS, aVerts, 2, Rect(0, 0, BOARD_WIDTH, BOARD_HEIGHT), - Color::White, g->mDrawMode, 0.0f, 0.0f, g->mLinearBlend); + Color::White, g->mDrawMode, 0.0f, 0.0f, g->mLinearBlend); } void CreditScreen::DrawFogEffect(Graphics *g, float theTime) @@ -658,7 +660,7 @@ void CreditScreen::DrawFogEffect(Graphics *g, float theTime) float aPosX = x * 80 - 15.0f; float aPosY = y * 85 + 200.0f; float aAnimTime = aCreditsReanim->mDefinition->mTracks->mTransformCount * aCreditsReanim->mAnimTime / - (aCreditsReanim->mAnimRate * SECONDS_PER_UPDATE); + (aCreditsReanim->mAnimRate * SECONDS_PER_UPDATE); float aTime = aAnimTime * PI * 2; float aPhaseX = 6 * PI * x / 14; float aPhaseY = 6 * PI * y / 7; @@ -712,21 +714,21 @@ void CreditScreen::DrawFinalCredits(Graphics *g) SexyString aHeaderText = aCurrentRoleStr.substr(1); // remove the ^ lol aScrollY -= 4; aScrollY += TodDrawStringWrappedHelper(g, aHeaderText, Rect(60, aScrollY, 680, 250), FONT_HOUSEOFTERROR16, - Color::White, DrawStringJustification::DS_ALIGN_CENTER, true); + Color::White, DrawStringJustification::DS_ALIGN_CENTER, true); aScrollY -= 4; } else { TodDrawStringWrapped(g, aCurrentRoleStr, Rect(60, aScrollY, 300, 250), FONT_HOUSEOFTERROR16, Color::White, - DrawStringJustification::DS_ALIGN_RIGHT); + DrawStringJustification::DS_ALIGN_RIGHT); TodDrawStringWrapped(g, aNameStr, Rect(390, aScrollY, 450, 250), FONT_HOUSEOFTERROR16, Color::White, - DrawStringJustification::DS_ALIGN_LEFT); + DrawStringJustification::DS_ALIGN_LEFT); int aRoleHeight = - TodDrawStringWrappedHelper(g, aCurrentRoleStr, Rect(30, aScrollY, 300, 250), FONT_HOUSEOFTERROR16, - Color::White, DrawStringJustification::DS_ALIGN_RIGHT, false); + TodDrawStringWrappedHelper(g, aCurrentRoleStr, Rect(30, aScrollY, 300, 250), FONT_HOUSEOFTERROR16, + Color::White, DrawStringJustification::DS_ALIGN_RIGHT, false); int aNameHeight = - TodDrawStringWrappedHelper(g, aNameStr, Rect(390, aScrollY, 450, 250), FONT_HOUSEOFTERROR16, - Color::White, DrawStringJustification::DS_ALIGN_LEFT, false); + TodDrawStringWrappedHelper(g, aNameStr, Rect(390, aScrollY, 450, 250), FONT_HOUSEOFTERROR16, + Color::White, DrawStringJustification::DS_ALIGN_LEFT, false); aScrollY += std::max(aRoleHeight, aNameHeight); } @@ -815,26 +817,26 @@ void CreditScreen::Draw(Graphics *g) if (aTransformBackground2.mFrame != -1.0f) { aBackground2G.ClipRect(aTransformBackground2.mTransX, aTransformBackground2.mTransY, - aTransformBackground2.mImage->mWidth - 1, aTransformBackground2.mImage->mHeight - 1); + aTransformBackground2.mImage->mWidth - 1, aTransformBackground2.mImage->mHeight - 1); aBackground2G.DrawImageF(IMAGE_BACKGROUND1, aTransformBackground2.mTransX - BOARD_WIDTH / 2, - aTransformBackground2.mTransY - BOARD_HEIGHT / 2); + aTransformBackground2.mTransY - BOARD_HEIGHT / 2); aBackground2G.ClearClipRect(); } if (aTransformBackground3.mFrame != -1.0f) { Graphics aBackground3G(*g); aBackground3G.ClipRect(aTransformBackground3.mTransX, aTransformBackground3.mTransY, - aTransformBackground3.mImage->mWidth - 1, aTransformBackground3.mImage->mHeight - 1); + aTransformBackground3.mImage->mWidth - 1, aTransformBackground3.mImage->mHeight - 1); aBackground3G.DrawImageF(IMAGE_BACKGROUND1, aTransformBackground3.mTransX - BOARD_WIDTH / 2, - aTransformBackground3.mTransY - BOARD_HEIGHT / 2); + aTransformBackground3.mTransY - BOARD_HEIGHT / 2); } if (aTransformBackground4.mFrame != -1.0f) { Graphics aBackground4G(*g); aBackground4G.ClipRect(aTransformBackground4.mTransX, aTransformBackground4.mTransY, - aTransformBackground4.mImage->mWidth - 1, aTransformBackground4.mImage->mHeight - 1); + aTransformBackground4.mImage->mWidth - 1, aTransformBackground4.mImage->mHeight - 1); aBackground4G.DrawImageF(IMAGE_BACKGROUND2, aTransformBackground4.mTransX - BOARD_WIDTH / 2, - aTransformBackground4.mTransY - BOARD_HEIGHT / 2); + aTransformBackground4.mTransY - BOARD_HEIGHT / 2); } } if (aDrawClippedBackgrounds2) @@ -853,9 +855,9 @@ void CreditScreen::Draw(Graphics *g) { Graphics aBackground1G(*g); aBackground1G.ClipRect(aTransformBackground1.mTransX, aTransformBackground1.mTransY, - aTransformBackground1.mImage->mWidth - 1, aTransformBackground1.mImage->mHeight - 1); + aTransformBackground1.mImage->mWidth - 1, aTransformBackground1.mImage->mHeight - 1); aBackground1G.DrawImageF(IMAGE_BACKGROUND1, aTransformBackground1.mTransX - BOARD_WIDTH / 2 + 320, - aTransformBackground1.mTransY - BOARD_HEIGHT / 2 - 60); + aTransformBackground1.mTransY - BOARD_HEIGHT / 2 - 60); } if (aTransformBackground3.mFrame != -1.0f) { @@ -863,7 +865,7 @@ void CreditScreen::Draw(Graphics *g) aBackground3G.mTransX += aTransformBackground3.mTransX - 20.0f; aBackground3G.mTransY += aTransformBackground3.mTransY - 260.0f; aBackground3G.ClipRect(20, 260, aTransformBackground3.mImage->mWidth - 1, - aTransformBackground3.mImage->mHeight - 1); + aTransformBackground3.mImage->mHeight - 1); aBackground3G.DrawImageF(IMAGE_BACKGROUND3, -220.0f, 0.0f); aBackground3G.DrawImageF(IMAGE_POOL, 34.0f, 278.0f); } @@ -871,9 +873,9 @@ void CreditScreen::Draw(Graphics *g) { Graphics aBackground4G(*g); aBackground4G.ClipRect(aTransformBackground4.mTransX, aTransformBackground4.mTransY, - aTransformBackground4.mImage->mWidth - 1, aTransformBackground4.mImage->mHeight - 1); + aTransformBackground4.mImage->mWidth - 1, aTransformBackground4.mImage->mHeight - 1); aBackground4G.DrawImageF(IMAGE_BACKGROUND2, aTransformBackground4.mTransX - BOARD_WIDTH / 2, - aTransformBackground4.mTransY - BOARD_HEIGHT / 2); + aTransformBackground4.mTransY - BOARD_HEIGHT / 2); } } aCreditsReanim->DrawRenderGroup(g, 1); @@ -966,7 +968,7 @@ void CreditScreen::Draw(Graphics *g) if (aDrawDiscoLights) { float aDiscoTime = aCreditsReanim->mDefinition->mTracks->mTransformCount * aCreditsReanim->mAnimTime / - aCreditsReanim->mAnimRate; + aCreditsReanim->mAnimRate; DrawDisco(g, 600.0f, 450.0f, aDiscoTime); DrawDisco(g, 200.0f, 450.0f, aDiscoTime); } @@ -999,7 +1001,7 @@ void CreditScreen::Draw(Graphics *g) if (aDrawFog) { float aPercent = TodAnimateCurveFloatTime(aFrameFactor * 189.0f, aFrameFactor * 249.0f, - aCreditsReanim->mAnimTime, 0.0f, 1.0f, TodCurves::CURVE_LINEAR); + aCreditsReanim->mAnimTime, 0.0f, 1.0f, TodCurves::CURVE_LINEAR); DrawFogEffect(&aBackground2G, aPercent); } aCreditsReanim->DrawRenderGroup(g, 3); @@ -1094,8 +1096,8 @@ void CreditScreen::Update() Reanimation *aCreditsReanim = mApp->ReanimationGet(mCreditsReanimID); int aDurationSinceStart = mTimerSinceStart.GetDuration(); int aDurationReanimation = (aCreditsReanim->mDefinition->mTracks->mTransformCount * aCreditsReanim->mAnimTime / - aCreditsReanim->mAnimRate) * - 1000.0f; + aCreditsReanim->mAnimRate) * + 1000.0f; if (mCreditsPhase == CreditsPhase::CREDITS_MAIN2) { aDurationReanimation += 57142; @@ -1171,21 +1173,21 @@ void CreditScreen::UpdateMovie() if (mCreditsPhase == CreditsPhase::CREDITS_MAIN1) { if (aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 128.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 130.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 132.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 134.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 136.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 138.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 140.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 142.0f)) + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 130.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 132.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 134.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 136.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 138.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 140.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 142.0f)) { mApp->AddTodParticle(BOARD_WIDTH / 2, BOARD_HEIGHT / 2, (int)RenderLayer::RENDER_LAYER_TOP, - ParticleEffect::PARTICLE_CREDIT_STROBE); + ParticleEffect::PARTICLE_CREDIT_STROBE); } if (aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 136.5f)) { mApp->AddTodParticle(BOARD_WIDTH / 2, BOARD_HEIGHT / 2, (int)RenderLayer::RENDER_LAYER_TOP, - ParticleEffect::PARTICLE_CREDITS_RAYSWIPE); + ParticleEffect::PARTICLE_CREDITS_RAYSWIPE); } if (aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 330.0f)) { @@ -1235,55 +1237,55 @@ void CreditScreen::UpdateMovie() if (aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 120.0f)) { mApp->AddTodParticle(BOARD_WIDTH / 2, BOARD_HEIGHT / 2, (int)RenderLayer::RENDER_LAYER_TOP, - ParticleEffect::PARTICLE_CREDITS_ZOMBIEHEADWIPE); + ParticleEffect::PARTICLE_CREDITS_ZOMBIEHEADWIPE); } } if (mCreditsPhase == CreditsPhase::CREDITS_MAIN2) { if (aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 111.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 115.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 119.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 121.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 123.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 125.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 127.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 131.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 135.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 139.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 143.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 147.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 151.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 155.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 159.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 163.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 167.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 171.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 175.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 179.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 183.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 187.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 191.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 195.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 199.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 203.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 207.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 211.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 215.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 219.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 223.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 227.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 231.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 235.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 239.5f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 243.5f)) + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 115.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 119.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 121.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 123.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 125.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 127.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 131.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 135.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 139.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 143.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 147.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 151.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 155.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 159.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 163.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 167.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 171.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 175.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 179.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 183.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 187.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 191.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 195.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 199.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 203.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 207.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 211.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 215.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 219.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 223.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 227.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 231.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 235.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 239.5f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 243.5f)) { mApp->AddTodParticle(BOARD_WIDTH / 2, BOARD_HEIGHT / 2, (int)RenderLayer::RENDER_LAYER_TOP, - ParticleEffect::PARTICLE_CREDIT_STROBE); + ParticleEffect::PARTICLE_CREDIT_STROBE); } if (aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 332.75f)) { mApp->AddTodParticle(678.0f, 352.0f, (int)RenderLayer::RENDER_LAYER_TOP, - ParticleEffect::PARTICLE_MELONSPLASH); + ParticleEffect::PARTICLE_MELONSPLASH); } if (aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 336.0f)) { @@ -1299,7 +1301,7 @@ void CreditScreen::UpdateMovie() if (aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 342.0f)) { mApp->AddTodParticle(BOARD_WIDTH / 2, BOARD_HEIGHT / 2, (int)RenderLayer::RENDER_LAYER_TOP, - ParticleEffect::PARTICLE_CREDIT_STROBE); + ParticleEffect::PARTICLE_CREDIT_STROBE); } int aBackground2Index = aCreditsReanim->FindTrackIndex("Background2"); @@ -1310,7 +1312,7 @@ void CreditScreen::UpdateMovie() if (aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 188.0f)) { TodParticleSystem *aFogParticle = mApp->AddTodParticle(aFogPosX, 230.0f, (int)RenderLayer::RENDER_LAYER_TOP, - ParticleEffect::PARTICLE_CREDITS_FOG); + ParticleEffect::PARTICLE_CREDITS_FOG); mFogParticleID = mApp->ParticleGetID(aFogParticle); } TodParticleSystem *aFogParticle = mApp->ParticleTryToGet(mFogParticleID); @@ -1334,21 +1336,21 @@ void CreditScreen::UpdateMovie() mApp->PlayFoley(FoleyType::FOLEY_DOLPHIN_APPEARS); } if (aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 111.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 115.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 119.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 121.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 123.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 219.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 223.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 227.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 231.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 235.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 239.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 243.0f) || - aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 247.0f)) + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 115.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 119.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 121.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 123.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 219.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 223.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 227.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 231.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 235.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 239.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 243.0f) || + aCreditsReanim->ShouldTriggerTimedEvent(aFrameFactor * 247.0f)) { mApp->AddTodParticle(BOARD_WIDTH / 2, BOARD_HEIGHT / 2, (int)RenderLayer::RENDER_LAYER_TOP, - ParticleEffect::PARTICLE_CREDIT_STROBE); + ParticleEffect::PARTICLE_CREDIT_STROBE); } } @@ -1364,41 +1366,41 @@ void CreditScreen::UpdateMovie() if (aAfterTiming->mBrainType == CreditBrainType::BRAIN_FLY_ON) { mBrainPosX = TodAnimateCurveFloatTime(0.0f, 1.0f, aFraction, -50.0f, aAfterTiming->mWordX - 15.0f, - TodCurves::CURVE_EASE_IN_OUT); + TodCurves::CURVE_EASE_IN_OUT); mBrainPosY = - TodAnimateCurveFloatTime(0.0f, 1.0f, aFraction, 505.0f, 485.0f, TodCurves::CURVE_BOUNCE_FAST_MIDDLE); + TodAnimateCurveFloatTime(0.0f, 1.0f, aFraction, 505.0f, 485.0f, TodCurves::CURVE_BOUNCE_FAST_MIDDLE); mDrawBrain = true; } else if (aAfterTiming->mBrainType == CreditBrainType::BRAIN_FAST_ON) { mBrainPosX = TodAnimateCurveFloatTime(0.0f, 1.0f, aFraction, aAfterTiming->mWordX - 50.0f, - aAfterTiming->mWordX - 15.0f, TodCurves::CURVE_EASE_IN_OUT); + aAfterTiming->mWordX - 15.0f, TodCurves::CURVE_EASE_IN_OUT); mBrainPosY = TodAnimateCurveFloatTime(0.0f, 1.0f, aFraction, 485.0f, 505.0f, TodCurves::CURVE_EASE_IN_OUT); mDrawBrain = true; } else if (aAfterTiming->mBrainType == CreditBrainType::BRAIN_FLY_OFF) { mBrainPosX = TodAnimateCurveFloatTime(0.0f, 1.0f, aFraction, aBeforeTiming->mWordX - 15.0f, 850.0f, - TodCurves::CURVE_EASE_IN_OUT); + TodCurves::CURVE_EASE_IN_OUT); mBrainPosY = - TodAnimateCurveFloatTime(0.0f, 1.0f, aFraction, 505.0f, 485.0f, TodCurves::CURVE_BOUNCE_FAST_MIDDLE); + TodAnimateCurveFloatTime(0.0f, 1.0f, aFraction, 505.0f, 485.0f, TodCurves::CURVE_BOUNCE_FAST_MIDDLE); mDrawBrain = true; } else if (aAfterTiming->mBrainType == CreditBrainType::BRAIN_FAST_OFF) { mBrainPosX = TodAnimateCurveFloatTime(0.0f, 1.0f, aFraction, aBeforeTiming->mWordX - 15.0f, - aBeforeTiming->mWordX + 25.0f, TodCurves::CURVE_EASE_IN_OUT); + aBeforeTiming->mWordX + 25.0f, TodCurves::CURVE_EASE_IN_OUT); mBrainPosY = TodAnimateCurveFloatTime(0.0f, 1.0f, aFraction, 505.0f, 485.0f, TodCurves::CURVE_EASE_IN_OUT); mDrawBrain = true; } else if (aBeforeTiming->mBrainType == CreditBrainType::BRAIN_FLY_ON || - aBeforeTiming->mBrainType == CreditBrainType::BRAIN_FAST_ON || - aBeforeTiming->mBrainType == CreditBrainType::BRAIN_NEXT_WORD) + aBeforeTiming->mBrainType == CreditBrainType::BRAIN_FAST_ON || + aBeforeTiming->mBrainType == CreditBrainType::BRAIN_NEXT_WORD) { mBrainPosX = TodAnimateCurveFloatTime(0.0f, 1.0f, aFraction, aBeforeTiming->mWordX - 15.0f, - aAfterTiming->mWordX - 15.0f, TodCurves::CURVE_EASE_IN_OUT); + aAfterTiming->mWordX - 15.0f, TodCurves::CURVE_EASE_IN_OUT); mBrainPosY = - TodAnimateCurveFloatTime(0.0f, 1.0f, aFraction, 505.0f, 485.0f, TodCurves::CURVE_BOUNCE_FAST_MIDDLE); + TodAnimateCurveFloatTime(0.0f, 1.0f, aFraction, 505.0f, 485.0f, TodCurves::CURVE_BOUNCE_FAST_MIDDLE); mDrawBrain = true; } @@ -1438,7 +1440,7 @@ void CreditScreen::UpdateMovie() aSunFlowerReanim->SetImageOverride("anim_idle", IMAGE_REANIM_SUNFLOWER_HEAD_WINK); Reanimation *aStageReanim = FindSubReanim(aCreditsReanim, ReanimationType::REANIM_CREDITS_STAGE); aSunFlowerReanim->mAnimTime -= - aSunFlowerReanim->mAnimRate * SECONDS_PER_UPDATE / aSunFlowerReanim->mFrameCount; + aSunFlowerReanim->mAnimRate * SECONDS_PER_UPDATE / aSunFlowerReanim->mFrameCount; aStageReanim->mAnimTime -= aStageReanim->mAnimRate * SECONDS_PER_UPDATE / aStageReanim->mFrameCount; } else @@ -1476,7 +1478,7 @@ void CreditScreen::TurnOffTongues(Reanimation *theReanim, int aParentTrack) { ReanimatorTrackInstance *aTrackInstance = &theReanim->mTrackInstances[aTrackIndex]; if (theReanim->mReanimationType == ReanimationType::REANIM_ZOMBIE_CREDITS_DANCE && aParentTrack % 4 != 1 && - stricmp(theReanim->mDefinition->mTracks[aTrackIndex].mName, "anim_tongue") == 0) + stricmp(theReanim->mDefinition->mTracks[aTrackIndex].mName, "anim_tongue") == 0) { aTrackInstance->mRenderGroup = RENDER_GROUP_HIDDEN; } @@ -1706,7 +1708,7 @@ void CreditScreen::PauseCredits() mApp->mMusic->GameMusicPause(true); if (mApp->LawnMessageBox(Dialogs::DIALOG_MESSAGE, "[CREDITS_PAUSE_HEADER]", "[CREDITS_PAUSE_BODY]", - "[CREDITS_RESUME_BUTTON]", "[MAIN_MENU_BUTTON]", Dialog::BUTTONS_YES_NO) == Dialog::ID_NO) + "[CREDITS_RESUME_BUTTON]", "[MAIN_MENU_BUTTON]", Dialog::BUTTONS_YES_NO) == Dialog::ID_NO) { mApp->KillCreditScreen(); mApp->DoBackToMain(); diff --git a/src/Lawn/Widget/GameButton.cpp b/src/Lawn/Widget/GameButton.cpp index db6d344..d160cf8 100644 --- a/src/Lawn/Widget/GameButton.cpp +++ b/src/Lawn/Widget/GameButton.cpp @@ -9,10 +9,11 @@ #include "../../SexyAppFramework/WidgetManager.h" static Color gGameButtonColors[6] = { - Color(0, 0, 0), Color(0, 0, 0), Color(0, 0, 0), Color(255, 255, 255), Color(132, 132, 132), Color(212, 212, 212)}; + Color(0, 0, 0), Color(0, 0, 0), Color(0, 0, 0), Color(255, 255, 255), Color(132, 132, 132), Color(212, 212, 212) +}; void DrawStoneButton( - Graphics *g, int x, int y, int theWidth, int theHeight, bool isDown, bool isHighLighted, const SexyString &theLabel) + Graphics *g, int x, int y, int theWidth, int theHeight, bool isDown, bool isHighLighted, const SexyString &theLabel) { Image *aLeftImage = Sexy::IMAGE_BUTTON_LEFT; Image *aMiddleImage = Sexy::IMAGE_BUTTON_MIDDLE; @@ -44,9 +45,9 @@ void DrawStoneButton( g->SetFont(isHighLighted ? Sexy::FONT_DWARVENTODCRAFT18BRIGHTGREENINSET : Sexy::FONT_DWARVENTODCRAFT18GREENINSET); aFontX += (theWidth - Sexy::FONT_DWARVENTODCRAFT18GREENINSET->StringWidth(theLabel)) / 2 + 1; aFontY += (theHeight - Sexy::FONT_DWARVENTODCRAFT18GREENINSET->GetAscent() / 6 - 1 + - Sexy::FONT_DWARVENTODCRAFT18GREENINSET->GetAscent()) / - 2 - - 4; + Sexy::FONT_DWARVENTODCRAFT18GREENINSET->GetAscent()) / + 2 - + 4; g->SetColor(Color::White); g->DrawString(theLabel, aFontX, aFontY); } @@ -290,7 +291,7 @@ LawnStoneButton *MakeButton(int theId, ButtonListener *theListener, const SexySt } NewLawnButton::NewLawnButton(Image *theComponentImage, int theId, ButtonListener *theListener) - : DialogButton(theComponentImage, theId, theListener) + : DialogButton(theComponentImage, theId, theListener) { mHiliteFont = nullptr; mTextDownOffsetX = 0; @@ -383,12 +384,12 @@ bool NewLawnButton::IsPointVisible(int x, int y) } NewLawnButton *MakeNewButton(int theId, - ButtonListener *theListener, - const SexyString &theText, - Font *theFont, - Image *theImageNormal, - Image *theImageOver, - Image *theImageDown) + ButtonListener *theListener, + const SexyString &theText, + Font *theFont, + Image *theImageNormal, + Image *theImageOver, + Image *theImageDown) { NewLawnButton *aButton = new NewLawnButton(nullptr, theId, theListener); aButton->SetFont(theFont == nullptr ? Sexy::FONT_BRIANNETOD12 : theFont); @@ -402,7 +403,7 @@ NewLawnButton *MakeNewButton(int theId, else //Let the user set them { aButton->mWidth = 0; - aButton->mHeight = 0; + aButton->mHeight = 0; } aButton->mButtonImage = theImageNormal; diff --git a/src/Lawn/Widget/GameSelector.cpp b/src/Lawn/Widget/GameSelector.cpp index deeecb9..e471800 100644 --- a/src/Lawn/Widget/GameSelector.cpp +++ b/src/Lawn/Widget/GameSelector.cpp @@ -27,7 +27,11 @@ #include "AchievementsWidget.h" #include "ZombatarWidget.h" -static float gFlowerCenter[3][2] = {{765.0f, 483.0f}, {663.0f, 455.0f}, {701.0f, 439.0f}}; +static float gFlowerCenter[3][2] = { + { 765.0f, 483.0f }, + { 663.0f, 455.0f }, + { 701.0f, 439.0f } +}; int gSlideStartTime = 75; @@ -56,12 +60,12 @@ GameSelector::GameSelector(LawnApp *theApp) mToolTip = new ToolTipWidget(); mAdventureButton = MakeNewButton(GameSelector::GameSelector_Adventure, - this, - "", - nullptr, - Sexy::IMAGE_REANIM_SELECTORSCREEN_ADVENTURE_BUTTON, - Sexy::IMAGE_REANIM_SELECTORSCREEN_ADVENTURE_HIGHLIGHT, - Sexy::IMAGE_REANIM_SELECTORSCREEN_ADVENTURE_HIGHLIGHT); + this, + "", + nullptr, + Sexy::IMAGE_REANIM_SELECTORSCREEN_ADVENTURE_BUTTON, + Sexy::IMAGE_REANIM_SELECTORSCREEN_ADVENTURE_HIGHLIGHT, + Sexy::IMAGE_REANIM_SELECTORSCREEN_ADVENTURE_HIGHLIGHT); mAdventureButton->Resize(0, 0, Sexy::IMAGE_REANIM_SELECTORSCREEN_ADVENTURE_BUTTON->mWidth, 125); mAdventureButton->mClip = false; mAdventureButton->mBtnNoDraw = true; @@ -73,12 +77,12 @@ GameSelector::GameSelector(LawnApp *theApp) mAdventureButton->mUsePolygonShape = true; mMinigameButton = MakeNewButton(GameSelector::GameSelector_Minigame, - this, - "", - nullptr, - Sexy::IMAGE_REANIM_SELECTORSCREEN_SURVIVAL_BUTTON, - Sexy::IMAGE_REANIM_SELECTORSCREEN_SURVIVAL_HIGHLIGHT, - Sexy::IMAGE_REANIM_SELECTORSCREEN_SURVIVAL_HIGHLIGHT); + this, + "", + nullptr, + Sexy::IMAGE_REANIM_SELECTORSCREEN_SURVIVAL_BUTTON, + Sexy::IMAGE_REANIM_SELECTORSCREEN_SURVIVAL_HIGHLIGHT, + Sexy::IMAGE_REANIM_SELECTORSCREEN_SURVIVAL_HIGHLIGHT); mMinigameButton->Resize(0, 0, Sexy::IMAGE_REANIM_SELECTORSCREEN_SURVIVAL_BUTTON->mWidth, 130); mMinigameButton->mClip = false; mMinigameButton->mBtnNoDraw = true; @@ -90,12 +94,12 @@ GameSelector::GameSelector(LawnApp *theApp) mMinigameButton->mUsePolygonShape = true; mPuzzleButton = MakeNewButton(GameSelector::GameSelector_Puzzle, - this, - "", - nullptr, - Sexy::IMAGE_REANIM_SELECTORSCREEN_CHALLENGES_BUTTON, - Sexy::IMAGE_REANIM_SELECTORSCREEN_CHALLENGES_HIGHLIGHT, - Sexy::IMAGE_REANIM_SELECTORSCREEN_CHALLENGES_HIGHLIGHT); + this, + "", + nullptr, + Sexy::IMAGE_REANIM_SELECTORSCREEN_CHALLENGES_BUTTON, + Sexy::IMAGE_REANIM_SELECTORSCREEN_CHALLENGES_HIGHLIGHT, + Sexy::IMAGE_REANIM_SELECTORSCREEN_CHALLENGES_HIGHLIGHT); mPuzzleButton->Resize(0, 0, Sexy::IMAGE_REANIM_SELECTORSCREEN_CHALLENGES_BUTTON->mWidth, 121); mPuzzleButton->mClip = false; mPuzzleButton->mBtnNoDraw = true; @@ -107,12 +111,12 @@ GameSelector::GameSelector(LawnApp *theApp) mPuzzleButton->mUsePolygonShape = true; mSurvivalButton = MakeNewButton(GameSelector::GameSelector_Survival, - this, - "", - nullptr, - Sexy::IMAGE_REANIM_SELECTORSCREEN_VASEBREAKER_BUTTON, - Sexy::IMAGE_REANIM_SELECTORSCREEN_VASEBREAKER_HIGHLIGHT, - Sexy::IMAGE_REANIM_SELECTORSCREEN_VASEBREAKER_HIGHLIGHT); + this, + "", + nullptr, + Sexy::IMAGE_REANIM_SELECTORSCREEN_VASEBREAKER_BUTTON, + Sexy::IMAGE_REANIM_SELECTORSCREEN_VASEBREAKER_HIGHLIGHT, + Sexy::IMAGE_REANIM_SELECTORSCREEN_VASEBREAKER_HIGHLIGHT); mSurvivalButton->Resize(0, 0, Sexy::IMAGE_REANIM_SELECTORSCREEN_VASEBREAKER_BUTTON->mWidth, 124); mSurvivalButton->mClip = false; mSurvivalButton->mBtnNoDraw = true; @@ -124,12 +128,12 @@ GameSelector::GameSelector(LawnApp *theApp) mSurvivalButton->mUsePolygonShape = true; mAchievementsButton = MakeNewButton(GameSelector::GameSelector_Achievements, - this, - "", - nullptr, - Sexy::IMAGE_SELECTORSCREEN_ACHIEVEMENTS_PEDESTAL, - Sexy::IMAGE_SELECTORSCREEN_ACHIEVEMENTS_PEDESTAL_PRESS, - Sexy::IMAGE_SELECTORSCREEN_ACHIEVEMENTS_PEDESTAL_PRESS); + this, + "", + nullptr, + Sexy::IMAGE_SELECTORSCREEN_ACHIEVEMENTS_PEDESTAL, + Sexy::IMAGE_SELECTORSCREEN_ACHIEVEMENTS_PEDESTAL_PRESS, + Sexy::IMAGE_SELECTORSCREEN_ACHIEVEMENTS_PEDESTAL_PRESS); mAchievementsButton->Resize(0, mApp->mHeight - Sexy::IMAGE_SELECTORSCREEN_ACHIEVEMENTS_PEDESTAL->mHeight - 35, Sexy::IMAGE_SELECTORSCREEN_ACHIEVEMENTS_PEDESTAL->mWidth, Sexy::IMAGE_SELECTORSCREEN_ACHIEVEMENTS_PEDESTAL->mHeight); mAchievementsButton->mClip = false; mAchievementsButton->mBtnNoDraw = mHasTrophy; @@ -141,37 +145,37 @@ GameSelector::GameSelector(LawnApp *theApp) mZombatarButton->mClip = false; mZenGardenButton = MakeNewButton(GameSelector::GameSelector_ZenGarden, - this, - "", - nullptr, - Sexy::IMAGE_SELECTORSCREEN_ZENGARDEN, - Sexy::IMAGE_SELECTORSCREEN_ZENGARDENHIGHLIGHT, - Sexy::IMAGE_SELECTORSCREEN_ZENGARDENHIGHLIGHT); + this, + "", + nullptr, + Sexy::IMAGE_SELECTORSCREEN_ZENGARDEN, + Sexy::IMAGE_SELECTORSCREEN_ZENGARDENHIGHLIGHT, + Sexy::IMAGE_SELECTORSCREEN_ZENGARDENHIGHLIGHT); mZenGardenButton->Resize(0, 0, 130, 130); mZenGardenButton->mMouseVisible = false; mZenGardenButton->mClip = false; mOptionsButton = MakeNewButton(GameSelector::GameSelector_Options, - this, - "", - nullptr, - Sexy::IMAGE_SELECTORSCREEN_OPTIONS1, - Sexy::IMAGE_SELECTORSCREEN_OPTIONS2, - Sexy::IMAGE_SELECTORSCREEN_OPTIONS2); + this, + "", + nullptr, + Sexy::IMAGE_SELECTORSCREEN_OPTIONS1, + Sexy::IMAGE_SELECTORSCREEN_OPTIONS2, + Sexy::IMAGE_SELECTORSCREEN_OPTIONS2); mOptionsButton->Resize( - 0, 0, Sexy::IMAGE_SELECTORSCREEN_OPTIONS1->mWidth, Sexy::IMAGE_SELECTORSCREEN_OPTIONS1->mHeight + 23); + 0, 0, Sexy::IMAGE_SELECTORSCREEN_OPTIONS1->mWidth, Sexy::IMAGE_SELECTORSCREEN_OPTIONS1->mHeight + 23); mOptionsButton->mBtnNoDraw = true; mOptionsButton->mMouseVisible = false; mOptionsButton->mButtonOffsetY = 15; mOptionsButton->mClip = false; mHelpButton = MakeNewButton(GameSelector::GameSelector_Help, - this, - "", - nullptr, - Sexy::IMAGE_SELECTORSCREEN_HELP1, - Sexy::IMAGE_SELECTORSCREEN_HELP2, - Sexy::IMAGE_SELECTORSCREEN_HELP2); + this, + "", + nullptr, + Sexy::IMAGE_SELECTORSCREEN_HELP1, + Sexy::IMAGE_SELECTORSCREEN_HELP2, + Sexy::IMAGE_SELECTORSCREEN_HELP2); mHelpButton->Resize(0, 0, Sexy::IMAGE_SELECTORSCREEN_HELP1->mWidth, Sexy::IMAGE_SELECTORSCREEN_HELP1->mHeight + 33); mHelpButton->mBtnNoDraw = true; mHelpButton->mMouseVisible = false; @@ -179,14 +183,14 @@ GameSelector::GameSelector(LawnApp *theApp) mHelpButton->mClip = false; mQuitButton = MakeNewButton(GameSelector::GameSelector_Quit, - this, - "", - nullptr, - Sexy::IMAGE_SELECTORSCREEN_QUIT1, - Sexy::IMAGE_SELECTORSCREEN_QUIT2, - Sexy::IMAGE_SELECTORSCREEN_QUIT2); + this, + "", + nullptr, + Sexy::IMAGE_SELECTORSCREEN_QUIT1, + Sexy::IMAGE_SELECTORSCREEN_QUIT2, + Sexy::IMAGE_SELECTORSCREEN_QUIT2); mQuitButton->Resize( - 0, 0, Sexy::IMAGE_SELECTORSCREEN_QUIT1->mWidth + 10, Sexy::IMAGE_SELECTORSCREEN_QUIT1->mHeight + 10); + 0, 0, Sexy::IMAGE_SELECTORSCREEN_QUIT1->mWidth + 10, Sexy::IMAGE_SELECTORSCREEN_QUIT1->mHeight + 10); mQuitButton->mBtnNoDraw = true; mQuitButton->mMouseVisible = false; mQuitButton->mButtonOffsetX = 5; @@ -194,12 +198,12 @@ GameSelector::GameSelector(LawnApp *theApp) mQuitButton->mClip = false; mChangeUserButton = MakeNewButton(GameSelector::GameSelector_ChangeUser, - this, - "", - nullptr, - Sexy::IMAGE_BLANK, - Sexy::IMAGE_BLANK, - Sexy::IMAGE_BLANK); + this, + "", + nullptr, + Sexy::IMAGE_BLANK, + Sexy::IMAGE_BLANK, + Sexy::IMAGE_BLANK); mChangeUserButton->Resize(0, 0, 250, 30); mChangeUserButton->mBtnNoDraw = true; mChangeUserButton->mMouseVisible = false; @@ -209,25 +213,25 @@ GameSelector::GameSelector(LawnApp *theApp) mOverlayWidget->Resize(0, 0, BOARD_WIDTH, BOARD_HEIGHT); mStoreButton = MakeNewButton(GameSelector::GameSelector_Store, - this, - "", - nullptr, - Sexy::IMAGE_SELECTORSCREEN_STORE, - Sexy::IMAGE_SELECTORSCREEN_STOREHIGHLIGHT, - Sexy::IMAGE_SELECTORSCREEN_STOREHIGHLIGHT); + this, + "", + nullptr, + Sexy::IMAGE_SELECTORSCREEN_STORE, + Sexy::IMAGE_SELECTORSCREEN_STOREHIGHLIGHT, + Sexy::IMAGE_SELECTORSCREEN_STOREHIGHLIGHT); mStoreButton->Resize(405, 484, Sexy::IMAGE_SELECTORSCREEN_STORE->mWidth, Sexy::IMAGE_SELECTORSCREEN_STORE->mHeight); mStoreButton->mMouseVisible = false; mStoreButton->mClip = false; mAlmanacButton = MakeNewButton(GameSelector::GameSelector_Almanac, - this, - "", - nullptr, - Sexy::IMAGE_SELECTORSCREEN_ALMANAC, - Sexy::IMAGE_SELECTORSCREEN_ALMANACHIGHLIGHT, - Sexy::IMAGE_SELECTORSCREEN_ALMANACHIGHLIGHT); + this, + "", + nullptr, + Sexy::IMAGE_SELECTORSCREEN_ALMANAC, + Sexy::IMAGE_SELECTORSCREEN_ALMANACHIGHLIGHT, + Sexy::IMAGE_SELECTORSCREEN_ALMANACHIGHLIGHT); mAlmanacButton->Resize( - 327, 428, Sexy::IMAGE_SELECTORSCREEN_ALMANAC->mWidth, Sexy::IMAGE_SELECTORSCREEN_ALMANAC->mHeight); + 327, 428, Sexy::IMAGE_SELECTORSCREEN_ALMANAC->mWidth, Sexy::IMAGE_SELECTORSCREEN_ALMANAC->mHeight); mAlmanacButton->mMouseVisible = false; mAlmanacButton->mClip = false; @@ -310,7 +314,7 @@ GameSelector::GameSelector(LawnApp *theApp) if (UpdateChecker::gIsOutdated) { SexyString aDialogText = - StrFormat(TodStringTranslate("[UPDATE_OUTDATED_MESSAGE]").c_str(), LawnApp::gVersion.toString().c_str(),UpdateChecker::gLatestVersion.toString().c_str()); + StrFormat(TodStringTranslate("[UPDATE_OUTDATED_MESSAGE]").c_str(), LawnApp::gVersion.toString().c_str(), UpdateChecker::gLatestVersion.toString().c_str()); mApp->DoDialog(DIALOG_VERSION_NOTICE, true, "[UPDATE_OUTDATED_HEADER]", aDialogText, "[DIALOG_BUTTON_OK]", Dialog::BUTTONS_FOOTER); } } @@ -424,7 +428,7 @@ void GameSelector::SyncButtons() ReanimatorTrackInstance *aMinigameTrack = aSelectorReanim->GetTrackInstanceByName("SelectorScreen_Survival_button"); ReanimatorTrackInstance *aPuzzleTrack = aSelectorReanim->GetTrackInstanceByName("SelectorScreen_Challenges_button"); ReanimatorTrackInstance *aSurvivalTrack = - aSelectorReanim->GetTrackInstanceByName("SelectorScreen_ZenGarden_button"); + aSelectorReanim->GetTrackInstanceByName("SelectorScreen_ZenGarden_button"); aMinigameTrack->mTrackColor = mMinigameButton->GetColor(ButtonWidget::COLOR_BKG); aPuzzleTrack->mTrackColor = mPuzzleButton->GetColor(ButtonWidget::COLOR_BKG); aSurvivalTrack->mTrackColor = mSurvivalButton->GetColor(ButtonWidget::COLOR_BKG); @@ -451,7 +455,7 @@ void GameSelector::AddTrophySparkle() { TOD_ASSERT(mTrophyParticleID == PARTICLESYSTEMID_NULL); TodParticleSystem *aTrophyParticle = - mApp->AddTodParticle(85.0f, 290.0f, RenderLayer::RENDER_LAYER_TOP, ParticleEffect::PARTICLE_TROPHY_SPARKLE); + mApp->AddTodParticle(85.0f, 290.0f, RenderLayer::RENDER_LAYER_TOP, ParticleEffect::PARTICLE_TROPHY_SPARKLE); mTrophyParticleID = mApp->ParticleGetID(aTrophyParticle); } @@ -525,7 +529,6 @@ void GameSelector::SyncProfile(bool theShowLoading) mZombatarWidget->ChangeState(STATE_AVATAR_CREATION); else mZombatarWidget->ChangeState(STATE_AVATAR_LIST); - } SyncButtons(); @@ -553,18 +556,18 @@ void GameSelector::Draw(Graphics *g) float aFractionalOffsetX = fmod(aTransform.mTransX, 1.0f); float aFractionalOffsetY = fmod(aTransform.mTransY, 1.0f); g->DrawImageF(mOptionsButton->mButtonImage, - mOptionsButton->mX + mOptionsButton->mButtonOffsetX + aFractionalOffsetX, - mOptionsButton->mY + mOptionsButton->mButtonOffsetY + aFractionalOffsetY); + mOptionsButton->mX + mOptionsButton->mButtonOffsetX + aFractionalOffsetX, + mOptionsButton->mY + mOptionsButton->mButtonOffsetY + aFractionalOffsetY); g->DrawImageF(mQuitButton->mButtonImage, - mQuitButton->mX + mQuitButton->mButtonOffsetX + aFractionalOffsetX, - mQuitButton->mY + mQuitButton->mButtonOffsetY + aFractionalOffsetY); + mQuitButton->mX + mQuitButton->mButtonOffsetX + aFractionalOffsetX, + mQuitButton->mY + mQuitButton->mButtonOffsetY + aFractionalOffsetY); g->DrawImageF(mHelpButton->mButtonImage, - mHelpButton->mX + mHelpButton->mButtonOffsetX + aFractionalOffsetX, - mHelpButton->mY + mHelpButton->mButtonOffsetY + aFractionalOffsetY); + mHelpButton->mX + mHelpButton->mButtonOffsetX + aFractionalOffsetX, + mHelpButton->mY + mHelpButton->mButtonOffsetY + aFractionalOffsetY); } if (mApp->mPlayerInfo && mApp->mPlayerInfo->mName.size() && mSelectorState != SelectorAnimState::SELECTOR_OPEN && - mSelectorState != SelectorAnimState::SELECTOR_NEW_USER) + mSelectorState != SelectorAnimState::SELECTOR_NEW_USER) { SexyString aWelcomeStr = mApp->mPlayerInfo->mName + '!'; @@ -575,7 +578,7 @@ void GameSelector::Draw(Graphics *g) SexyTransform2D aOffsetMatrix; aOffsetMatrix.Translate(170.5f - (int)(aStringWidth * 0.5f) + mX, 102.5f + mY); TodDrawStringMatrix( - g, Sexy::FONT_BRIANNETOD16, aOverlayMatrix * aOffsetMatrix, aWelcomeStr, Color(255, 245, 200)); + g, Sexy::FONT_BRIANNETOD16, aOverlayMatrix * aOffsetMatrix, aWelcomeStr, Color(255, 245, 200)); } } @@ -634,22 +637,22 @@ void GameSelector::DrawOverlay(Graphics *g) g->SetColorizeImages(true); g->SetColor(mAdventureButton->mColors[ButtonWidget::COLOR_BKG]); TodDrawImageCelF(g, - Sexy::IMAGE_SELECTORSCREEN_LEVELNUMBERS, - aTransAreaX + 486.0f, - aTransAreaY + 47.0f, - aStage, - 0); + Sexy::IMAGE_SELECTORSCREEN_LEVELNUMBERS, + aTransAreaX + 486.0f, + aTransAreaY + 47.0f, + aStage, + 0); if (aSub < 10) { TodDrawImageCelF( - g, Sexy::IMAGE_SELECTORSCREEN_LEVELNUMBERS, aTransSubX + 509.0f, aTransSubY + 50.0f, aSub, 0); + g, Sexy::IMAGE_SELECTORSCREEN_LEVELNUMBERS, aTransSubX + 509.0f, aTransSubY + 50.0f, aSub, 0); } else if (aSub == 10) { TodDrawImageCelF( - g, Sexy::IMAGE_SELECTORSCREEN_LEVELNUMBERS, aTransSubX + 509.0f, aTransSubY + 50.0f, 1, 0); + g, Sexy::IMAGE_SELECTORSCREEN_LEVELNUMBERS, aTransSubX + 509.0f, aTransSubY + 50.0f, 1, 0); TodDrawImageCelF( - g, Sexy::IMAGE_SELECTORSCREEN_LEVELNUMBERS, aTransSubX + 518.0f, aTransSubY + 51.0f, 0, 0); + g, Sexy::IMAGE_SELECTORSCREEN_LEVELNUMBERS, aTransSubX + 518.0f, aTransSubY + 51.0f, 0, 0); } g->SetColorizeImages(false); } @@ -690,7 +693,7 @@ void GameSelector::DrawOverlay(Graphics *g) { int aTrophyIndex = mApp->EarnedGoldTrophy() ? 1 : 0; TodDrawImageCelF(g, Sexy::IMAGE_SUNFLOWER_TROPHY, aTransformLeft.mTransX + 12.0f, - aTransformLeft.mTransY + 345.0f, aTrophyIndex, 0); + aTransformLeft.mTransY + 345.0f, aTrophyIndex, 0); TodParticleSystem *aTrophyParticle = mApp->ParticleTryToGet(mTrophyParticleID); if (aTrophyParticle) @@ -714,8 +717,8 @@ void GameSelector::UpdateTooltip() if (mApp->EarnedGoldTrophy()) { mToolTip->SetLabel(LawnApp::Pluralize(mApp->mPlayerInfo->mFinishedAdventure, - "[GOLD_SUNFLOWER_TOOLTIP]", - "[GOLD_SUNFLOWER_TOOLTIP_PLURAL]")); + "[GOLD_SUNFLOWER_TOOLTIP]", + "[GOLD_SUNFLOWER_TOOLTIP_PLURAL]")); mToolTip->mX = 32; mToolTip->mY = 510; mToolTip->mVisible = true; @@ -749,7 +752,6 @@ void GameSelector::Update() int aNewY = TodAnimateCurve(gSlideStartTime, 0, mSlideCounter, mStartY, mDestY, TodCurves::CURVE_EASE_IN_OUT); Move(aNewX, aNewY); - mOverlayWidget->Move(aNewX, aNewY); mZombatarWidget->Move(aNewX + mApp->mWidth, aNewY); @@ -843,7 +845,7 @@ void GameSelector::Update() } mAdventureButton->SetColor(ButtonWidget::COLOR_BKG, - mStartingGameCounter % 20 < 10 ? Color(80, 80, 80) : Color::White); + mStartingGameCounter % 20 < 10 ? Color(80, 80, 80) : Color::White); if (mStartingGameCounter == 125) mApp->PlaySample(Sexy::SOUND_EVILLAUGH); } @@ -905,11 +907,11 @@ void GameSelector::Update() mApp->mPlayerInfo->mNeedsMessageOnGameSelector = 0; mApp->WriteCurrentUserConfig(); mApp->LawnMessageBox(Dialogs::DIALOG_MESSAGE, - "[ADVENTURE_COMPLETE_HEADER]", - "[ADVENTURE_COMPLETE_BODY]", - "[DIALOG_BUTTON_OK]", - "", - Dialog::BUTTONS_FOOTER); + "[ADVENTURE_COMPLETE_HEADER]", + "[ADVENTURE_COMPLETE_BODY]", + "[DIALOG_BUTTON_OK]", + "", + Dialog::BUTTONS_FOOTER); } } break; @@ -963,9 +965,9 @@ void GameSelector::Update() aHandReanim->Update(); TrackButton(mAdventureButton, - mShowStartButton ? "SelectorScreen_StartAdventure_button" : "SelectorScreen_Adventure_button", - 0.0f, - 0.0f); + mShowStartButton ? "SelectorScreen_StartAdventure_button" : "SelectorScreen_Adventure_button", + 0.0f, + 0.0f); TrackButton(mMinigameButton, "SelectorScreen_Survival_button", 0.0f, 0.0f); TrackButton(mPuzzleButton, "SelectorScreen_Challenges_button", 0.0f, 0.0f); TrackButton(mSurvivalButton, "SelectorScreen_ZenGarden_button", 0.0f, 0.0f); @@ -979,27 +981,27 @@ void GameSelector::Update() TrackButton(mZombatarButton, "woodsign3", 0.0f, 0.0f); TrackButton(mChangeUserButton, "woodsign2", 24.0f, 10.0f); aSelectorReanim->SetImageOverride("woodsign2", - (mChangeUserButton->mIsOver || mChangeUserButton->mIsDown) - ? Sexy::IMAGE_REANIM_SELECTORSCREEN_WOODSIGN2_PRESS - : nullptr); + (mChangeUserButton->mIsOver || mChangeUserButton->mIsDown) + ? Sexy::IMAGE_REANIM_SELECTORSCREEN_WOODSIGN2_PRESS + : nullptr); aSelectorReanim->SetImageOverride("woodsign3", - (mZombatarButton->mIsOver || mZombatarButton->mIsDown) - ? Sexy::IMAGE_REANIM_SELECTORSCREEN_WOODSIGN3_PRESS - : nullptr); + (mZombatarButton->mIsOver || mZombatarButton->mIsDown) + ? Sexy::IMAGE_REANIM_SELECTORSCREEN_WOODSIGN3_PRESS + : nullptr); if (mHasFocus) { if ((mMinigameButton->mIsOver && !mMinigameButton->mDisabled) || - (mPuzzleButton->mIsOver && !mPuzzleButton->mDisabled) || - (mSurvivalButton->mIsOver && !mSurvivalButton->mDisabled) || - (mZenGardenButton->mIsOver && !mZenGardenButton->mDisabled) || - (mOptionsButton->mIsOver && !mOptionsButton->mDisabled) || - (mQuitButton->mIsOver && !mQuitButton->mDisabled) || (mHelpButton->mIsOver && !mHelpButton->mDisabled) || - (mAlmanacButton->mIsOver && !mAlmanacButton->mDisabled) || - (mStoreButton->mIsOver && !mStoreButton->mDisabled) || - (mAchievementsButton->mIsOver && !mAchievementsButton->mDisabled) || - (mZombatarButton->mIsOver && !mZombatarButton->mDisabled) || - (mChangeUserButton->mIsOver && !mChangeUserButton->mDisabled)) + (mPuzzleButton->mIsOver && !mPuzzleButton->mDisabled) || + (mSurvivalButton->mIsOver && !mSurvivalButton->mDisabled) || + (mZenGardenButton->mIsOver && !mZenGardenButton->mDisabled) || + (mOptionsButton->mIsOver && !mOptionsButton->mDisabled) || + (mQuitButton->mIsOver && !mQuitButton->mDisabled) || (mHelpButton->mIsOver && !mHelpButton->mDisabled) || + (mAlmanacButton->mIsOver && !mAlmanacButton->mDisabled) || + (mStoreButton->mIsOver && !mStoreButton->mDisabled) || + (mAchievementsButton->mIsOver && !mAchievementsButton->mDisabled) || + (mZombatarButton->mIsOver && !mZombatarButton->mDisabled) || + (mChangeUserButton->mIsOver && !mChangeUserButton->mDisabled)) { mApp->SetCursor(CURSOR_HAND); } @@ -1008,7 +1010,6 @@ void GameSelector::Update() mApp->SetCursor(CURSOR_POINTER); } } - } void GameSelector::TrackButton(DialogButton *theButton, const char *theTrackName, float theOffsetX, float theOffsetY) @@ -1187,15 +1188,15 @@ void GameSelector::KeyChar(SexyChar theChar) for (int i = 1; i < NUM_GAME_MODES; i++) if (i != (int)GameMode::GAMEMODE_TREE_OF_WISDOM && i != (int)GameMode::GAMEMODE_SCARY_POTTER_ENDLESS && - i != (int)GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS && - i != (int)GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_3) + i != (int)GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS && + i != (int)GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_3) mApp->mPlayerInfo->mChallengeRecords[i - 1] = 20; SyncProfile(true); mApp->EraseFile(GetSavedGameName(GameMode::GAMEMODE_ADVENTURE, mApp->mPlayerInfo->mId) + ".data"); mApp->EraseFile(GetSavedGameName(GameMode::GAMEMODE_ADVENTURE, mApp->mPlayerInfo->mId) + ".schema"); } - else if(theChar == 'p' || theChar == 'P') + else if (theChar == 'p' || theChar == 'P') { AddPreviewProfiles(); } @@ -1221,8 +1222,8 @@ void GameSelector::MouseDown(int x, int y, int theClickCount) void GameSelector::ButtonMouseEnter(int theId) { if ((theId == GameSelector::GameSelector_Minigame && mMinigamesLocked) || - (theId == GameSelector::GameSelector_Puzzle && mPuzzleLocked) || - (theId == GameSelector::GameSelector_Survival && mSurvivalLocked)) + (theId == GameSelector::GameSelector_Puzzle && mPuzzleLocked) || + (theId == GameSelector::GameSelector_Survival && mSurvivalLocked)) return; mApp->PlayFoley(FoleyType::FOLEY_BLEEP); @@ -1231,8 +1232,8 @@ void GameSelector::ButtonMouseEnter(int theId) void GameSelector::ButtonPress(int theId, int theClickCount) { if (theId == GameSelector::GameSelector_Adventure || theId == GameSelector::GameSelector_Minigame || - theId == GameSelector::GameSelector_Puzzle || theId == GameSelector::GameSelector_Survival || - theId == GameSelector::GameSelector_Zombatar) + theId == GameSelector::GameSelector_Puzzle || theId == GameSelector::GameSelector_Survival || + theId == GameSelector::GameSelector_Zombatar) mApp->PlaySample(Sexy::SOUND_GRAVEBUTTON); else mApp->PlaySample(Sexy::SOUND_TAP); @@ -1243,11 +1244,11 @@ void GameSelector::ClickedAdventure() if (mApp->IsTrialStageLocked() && (mLevel >= 25 || mApp->HasFinishedAdventure())) { if (mApp->LawnMessageBox(Dialogs::DIALOG_MESSAGE, - "[REPLAY_LEVEL_HEADER]", - "[REPLAY_LEVEL_BODY]", - "[DIALOG_BUTTON_YES]", - "[DIALOG_BUTTON_NO]", - Dialog::BUTTONS_YES_NO) == Dialog::ID_NO) + "[REPLAY_LEVEL_HEADER]", + "[REPLAY_LEVEL_BODY]", + "[DIALOG_BUTTON_YES]", + "[DIALOG_BUTTON_NO]", + Dialog::BUTTONS_YES_NO) == Dialog::ID_NO) return; mApp->mPlayerInfo->mLevel = 24; @@ -1284,7 +1285,7 @@ void GameSelector::ClickedAdventure() bool GameSelector::ShouldDoZenTuturialBeforeAdventure() { return !mApp->HasFinishedAdventure() && mApp->mPlayerInfo->GetLevel() == 45 && - mApp->mPlayerInfo->mNumPottedPlants == 0; + mApp->mPlayerInfo->mNumPottedPlants == 0; } void GameSelector::ButtonDepress(int theId) @@ -1292,31 +1293,31 @@ void GameSelector::ButtonDepress(int theId) if (theId == GameSelector::GameSelector_Minigame && mMinigamesLocked) { mApp->LawnMessageBox(Dialogs::DIALOG_MESSAGE, - "[MODE_LOCKED]", - "[MINIGAME_LOCKED_MESSAGE]", - "[DIALOG_BUTTON_OK]", - "", - Dialog::BUTTONS_FOOTER); + "[MODE_LOCKED]", + "[MINIGAME_LOCKED_MESSAGE]", + "[DIALOG_BUTTON_OK]", + "", + Dialog::BUTTONS_FOOTER); return; } if (theId == GameSelector::GameSelector_Puzzle && mPuzzleLocked) { mApp->LawnMessageBox(Dialogs::DIALOG_MESSAGE, - "[MODE_LOCKED]", - "[PUZZLE_LOCKED_MESSAGE]", - "[DIALOG_BUTTON_OK]", - "", - Dialog::BUTTONS_FOOTER); + "[MODE_LOCKED]", + "[PUZZLE_LOCKED_MESSAGE]", + "[DIALOG_BUTTON_OK]", + "", + Dialog::BUTTONS_FOOTER); return; } if (theId == GameSelector::GameSelector_Survival && mSurvivalLocked) { mApp->LawnMessageBox(Dialogs::DIALOG_MESSAGE, - "[MODE_LOCKED]", - "[SURVIVAL_LOCKED_MESSAGE]", - "[DIALOG_BUTTON_OK]", - "", - Dialog::BUTTONS_FOOTER); + "[MODE_LOCKED]", + "[SURVIVAL_LOCKED_MESSAGE]", + "[DIALOG_BUTTON_OK]", + "", + Dialog::BUTTONS_FOOTER); return; } @@ -1490,8 +1491,8 @@ void GameSelector::AddPreviewProfiles() aProfile->mChallengeRecords[(int)GameMode::GAMEMODE_TREE_OF_WISDOM - 1] = 1; for (int i = 1; i < NUM_GAME_MODES; i++) if (i != (int)GameMode::GAMEMODE_TREE_OF_WISDOM && i != (int)GameMode::GAMEMODE_SCARY_POTTER_ENDLESS && - i != (int)GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS && - i != (int)GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_3) + i != (int)GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS && + i != (int)GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_3) aProfile->mChallengeRecords[i - 1] = 20; for (int i = 0; i < NUM_ACHIEVEMENT_TYPES; i++) diff --git a/src/Lawn/Widget/ImitaterDialog.cpp b/src/Lawn/Widget/ImitaterDialog.cpp index af5129c..3996316 100644 --- a/src/Lawn/Widget/ImitaterDialog.cpp +++ b/src/Lawn/Widget/ImitaterDialog.cpp @@ -9,13 +9,13 @@ #include "../../SexyAppFramework/WidgetManager.h" ImitaterDialog::ImitaterDialog() - : LawnDialog(gLawnApp, - Dialogs::DIALOG_IMITATER, - true, - "[CHOOSE_SEED_TO_COPY]", - "", - "[DIALOG_BUTTON_OK]", - Dialog::BUTTONS_YES_NO) + : LawnDialog(gLawnApp, + Dialogs::DIALOG_IMITATER, + true, + "[CHOOSE_SEED_TO_COPY]", + "", + "[DIALOG_BUTTON_OK]", + Dialog::BUTTONS_YES_NO) { CalcSize(IMITATER_DIALOG_WIDTH - mWidth, IMITATER_DIALOG_HEIGHT - mHeight); mToolTip = new ToolTipWidget(); @@ -86,7 +86,7 @@ void ImitaterDialog::Draw(Graphics *g) int aSeedX, aSeedY; GetSeedPosition(aSeedType, aSeedX, aSeedY); bool aGrayed = mApp->mSeedChooserScreen->SeedNotAllowedToPick(aSeedType) || - mApp->mSeedChooserScreen->SeedNotRecommendedToPick(aSeedType); + mApp->mSeedChooserScreen->SeedNotRecommendedToPick(aSeedType); DrawSeedPacket(g, aSeedX, aSeedY, SeedType::SEED_IMITATER, aSeedType, 0, aGrayed ? 115 : 255, true, false); } } diff --git a/src/Lawn/Widget/LawnDialog.cpp b/src/Lawn/Widget/LawnDialog.cpp index 791778f..6593126 100644 --- a/src/Lawn/Widget/LawnDialog.cpp +++ b/src/Lawn/Widget/LawnDialog.cpp @@ -12,13 +12,13 @@ #include "../../SexyAppFramework/ImageFont.h" LawnDialog::LawnDialog(LawnApp *theApp, - int theId, - bool isModal, - const SexyString &theDialogHeader, - const SexyString &theDialogLines, - const SexyString &theDialogFooter, - int theButtonMode) - : Dialog(nullptr, nullptr, theId, isModal, theDialogHeader, theDialogLines, "", BUTTONS_NONE) + int theId, + bool isModal, + const SexyString &theDialogHeader, + const SexyString &theDialogLines, + const SexyString &theDialogFooter, + int theButtonMode) + : Dialog(nullptr, nullptr, theId, isModal, theDialogHeader, theDialogLines, "", BUTTONS_NONE) { mApp = theApp; mButtonDelay = -1; @@ -29,8 +29,8 @@ LawnDialog::LawnDialog(LawnApp *theApp, mVerticalCenterText = true; mDialogHeader = TodStringTranslate(theDialogHeader); mDialogLines = TodStringTranslate(theDialogLines); - SetColor(0, {0xE0, 0xBB, 0x62}); - SetColor(1, {0xE0, 0xBB, 0x62}); + SetColor(0, { 0xE0, 0xBB, 0x62 }); + SetColor(1, { 0xE0, 0xBB, 0x62 }); SetHeaderFont(Sexy::FONT_DWARVENTODCRAFT24); SetLinesFont(Sexy::FONT_DWARVENTODCRAFT15); mContentInsets = Insets(36, 35, 46, 36); @@ -88,7 +88,7 @@ int LawnDialog::GetTop() void LawnDialog::CalcSize(int theExtraX, int theExtraY) { int aWidth = - mBackgroundInsets.mLeft + mBackgroundInsets.mRight + mContentInsets.mLeft + mContentInsets.mRight + theExtraX; + mBackgroundInsets.mLeft + mBackgroundInsets.mRight + mContentInsets.mLeft + mContentInsets.mRight + theExtraX; if (mDialogHeader.size() > 0) aWidth += mHeaderFont->StringWidth(mDialogHeader); int aTopMidWidth = Sexy::IMAGE_DIALOG_TOPMIDDLE->mWidth; @@ -107,7 +107,7 @@ void LawnDialog::CalcSize(int theExtraX, int theExtraY) } int aHeight = mBackgroundInsets.mTop + mBackgroundInsets.mBottom + mContentInsets.mTop + mContentInsets.mBottom + - theExtraY + DIALOG_HEADER_OFFSET; + theExtraY + DIALOG_HEADER_OFFSET; if (mDialogHeader.size() > 0) { aHeight += -mHeaderFont->GetAscentPadding() + mHeaderFont->GetHeight() + mSpaceAfterHeader; @@ -118,9 +118,9 @@ void LawnDialog::CalcSize(int theExtraX, int theExtraY) Graphics g; g.SetFont(mLinesFont); int aBasicWidth = aWidth - mBackgroundInsets.mLeft - mBackgroundInsets.mRight - mContentInsets.mLeft - - mContentInsets.mRight - 4; + mContentInsets.mRight - 4; aHeight += - GetWordWrappedHeight(&g, aBasicWidth, mDialogLines, mLinesFont->GetLineSpacing() + mLineSpacingOffset) + 30; + GetWordWrappedHeight(&g, aBasicWidth, mDialogLines, mLinesFont->GetLineSpacing() + mLineSpacingOffset) + 30; } aHeight += mButtonHeight; int aBottomHeight = (mTallBottom ? Sexy::IMAGE_DIALOG_BIGBOTTOMLEFT : Sexy::IMAGE_DIALOG_BOTTOMLEFT)->mHeight; @@ -233,7 +233,7 @@ void LawnDialog::Resize(int theX, int theY, int theWidth, int theHeight) int aButtonAreaX = mContentInsets.mLeft + mBackgroundInsets.mLeft - 5; int aButtonAreaY = mHeight - mContentInsets.mBottom - mBackgroundInsets.mBottom - IMAGE_BUTTON_LEFT->mHeight + 2; int aButtonAreaWidth = - mWidth - mContentInsets.mRight - mBackgroundInsets.mRight - mBackgroundInsets.mLeft - mContentInsets.mLeft + 8; + mWidth - mContentInsets.mRight - mBackgroundInsets.mRight - mBackgroundInsets.mLeft - mContentInsets.mLeft + 8; int aButtonMinWidth = IMAGE_BUTTON_LEFT->mWidth + IMAGE_BUTTON_RIGHT->mWidth; int aBtnMidWidth = IMAGE_BUTTON_MIDDLE->mWidth; int aButtonExtraWidth = (aButtonAreaWidth - 10) / 2 - aBtnMidWidth - aButtonMinWidth + 1; @@ -260,7 +260,7 @@ void LawnDialog::Resize(int theX, int theY, int theWidth, int theHeight) { mLawnYesButton->Resize(aButtonAreaX, aButtonAreaY, aButtonWidth, IMAGE_BUTTON_LEFT->mHeight); mLawnNoButton->Resize( - aButtonAreaWidth - aButtonWidth + aButtonAreaX, aButtonAreaY, aButtonWidth, IMAGE_BUTTON_LEFT->mHeight); + aButtonAreaWidth - aButtonWidth + aButtonAreaX, aButtonAreaY, aButtonWidth, IMAGE_BUTTON_LEFT->mHeight); } else if (mLawnYesButton) { @@ -280,17 +280,17 @@ void LawnDialog::Resize(int theX, int theY, int theWidth, int theHeight) int aButtonWidth = aButtonMinWidth + aButtonExtraWidth; mLawnYesButton->Resize(aButtonAreaX + (aButtonAreaWidth - aButtonWidth) / 2, - aButtonAreaY, - aButtonWidth, - IMAGE_BUTTON_LEFT->mHeight); + aButtonAreaY, + aButtonWidth, + IMAGE_BUTTON_LEFT->mHeight); } if (mReanimation->mReanim) { mReanimation->Resize(mReanimation->mPosX, - mReanimation->mPosY + DIALOG_HEADER_OFFSET, - mReanimation->mWidth, - mReanimation->mHeight); + mReanimation->mPosY + DIALOG_HEADER_OFFSET, + mReanimation->mWidth, + mReanimation->mHeight); } } @@ -310,11 +310,11 @@ void LawnDialog::Draw(Graphics *g) } int aRepeatX = (mWidth - IMAGE_DIALOG_TOPLEFT->mWidth - IMAGE_DIALOG_TOPRIGHT->mWidth) / - IMAGE_DIALOG_TOPMIDDLE->mWidth; + IMAGE_DIALOG_TOPMIDDLE->mWidth; aRepeatX = std::clamp(aRepeatX, 0, 100); // Safety limit int aRepeatY = (mHeight - IMAGE_DIALOG_TOPLEFT->mHeight - aBottomLeftImage->mHeight - DIALOG_HEADER_OFFSET) / - IMAGE_DIALOG_CENTERLEFT->mHeight; + IMAGE_DIALOG_CENTERLEFT->mHeight; aRepeatY = std::clamp(aRepeatY, 0, 100); // Safety limit int aPosX = 0; @@ -370,14 +370,14 @@ void LawnDialog::Draw(Graphics *g) g->SetFont(mLinesFont); g->SetColor(mColors[Dialog::COLOR_LINES]); int aLinesAreaWidth = - mWidth - mContentInsets.mLeft - mContentInsets.mRight - mBackgroundInsets.mLeft - mBackgroundInsets.mRight - 4; + mWidth - mContentInsets.mLeft - mContentInsets.mRight - mBackgroundInsets.mLeft - mBackgroundInsets.mRight - 4; Rect aRect(mBackgroundInsets.mLeft + mContentInsets.mLeft + 2, aFontY, aLinesAreaWidth, 0); if (mVerticalCenterText) { int aLinesHeight = - GetWordWrappedHeight(g, aLinesAreaWidth, mDialogLines, mLinesFont->GetLineSpacing() + mLineSpacingOffset); + GetWordWrappedHeight(g, aLinesAreaWidth, mDialogLines, mLinesFont->GetLineSpacing() + mLineSpacingOffset); int aLinesAreaHeight = - mHeight - mContentInsets.mBottom - mBackgroundInsets.mBottom - mButtonHeight - aFontY - 55; + mHeight - mContentInsets.mBottom - mBackgroundInsets.mBottom - mButtonHeight - aFontY - 55; if (mTallBottom) { aLinesAreaHeight -= 36; @@ -444,8 +444,8 @@ void ReanimationWidget::Update() } GameOverDialog::GameOverDialog(const SexyString &theMessage, bool theShowChallengeName) - : LawnDialog( - gLawnApp, Dialogs::DIALOG_GAME_OVER, true, "[GAME_OVER]", theMessage, "", Dialog::BUTTONS_FOOTER) + : LawnDialog( + gLawnApp, Dialogs::DIALOG_GAME_OVER, true, "[GAME_OVER]", theMessage, "", Dialog::BUTTONS_FOOTER) { mMenuButton = nullptr; mLawnYesButton->SetLabel("[TRY_AGAIN]"); diff --git a/src/Lawn/Widget/NewOptionsDialog.cpp b/src/Lawn/Widget/NewOptionsDialog.cpp index 680d532..3dd06b9 100644 --- a/src/Lawn/Widget/NewOptionsDialog.cpp +++ b/src/Lawn/Widget/NewOptionsDialog.cpp @@ -18,7 +18,7 @@ using namespace Sexy; NewOptionsDialog::NewOptionsDialog(LawnApp *theApp, bool theFromGameSelector) - : Dialog(nullptr, nullptr, Dialogs::DIALOG_NEWOPTIONS, true, "Options", "", "", Dialog::BUTTONS_NONE) + : Dialog(nullptr, nullptr, Dialogs::DIALOG_NEWOPTIONS, true, "Options", "", "", Dialog::BUTTONS_NONE) { #if LAWN_USE_UNFINISHED_GAMEPAD_SUPPORT mAwaitRelease = true; @@ -35,12 +35,12 @@ NewOptionsDialog::NewOptionsDialog(LawnApp *theApp, bool theFromGameSelector) mSettingsButton->mHeight = 33; mBackToGameButton = MakeNewButton(Dialog::ID_OK, - this, - "[BACK_TO_GAME]", - nullptr, - IMAGE_OPTIONS_BACKTOGAMEBUTTON0, - IMAGE_OPTIONS_BACKTOGAMEBUTTON0, - IMAGE_OPTIONS_BACKTOGAMEBUTTON2); + this, + "[BACK_TO_GAME]", + nullptr, + IMAGE_OPTIONS_BACKTOGAMEBUTTON0, + IMAGE_OPTIONS_BACKTOGAMEBUTTON0, + IMAGE_OPTIONS_BACKTOGAMEBUTTON2); mBackToGameButton->mTranslateX = 0; mBackToGameButton->mTranslateY = 0; mBackToGameButton->mTextOffsetX = -2; @@ -53,13 +53,13 @@ NewOptionsDialog::NewOptionsDialog(LawnApp *theApp, bool theFromGameSelector) mBackToGameButton->mHiliteFont = FONT_DWARVENTODCRAFT36BRIGHTGREENINSET; mMusicVolumeSlider = new Slider( - IMAGE_OPTIONS_SLIDERSLOT, IMAGE_OPTIONS_SLIDERKNOB2, NewOptionsDialog::NewOptionsDialog_MusicVolume, this); + IMAGE_OPTIONS_SLIDERSLOT, IMAGE_OPTIONS_SLIDERKNOB2, NewOptionsDialog::NewOptionsDialog_MusicVolume, this); double aMusicVolume = theApp->GetMusicVolume(); aMusicVolume = std::max(0.0, std::min(1.0, aMusicVolume)); mMusicVolumeSlider->SetValue(aMusicVolume); mSfxVolumeSlider = new Slider( - IMAGE_OPTIONS_SLIDERSLOT, IMAGE_OPTIONS_SLIDERKNOB2, NewOptionsDialog::NewOptionsDialog_SoundVolume, this); + IMAGE_OPTIONS_SLIDERSLOT, IMAGE_OPTIONS_SLIDERKNOB2, NewOptionsDialog::NewOptionsDialog_SoundVolume, this); mSfxVolumeSlider->SetValue(theApp->GetSfxVolume() / 0.65); if (mFromGameSelector) @@ -77,8 +77,8 @@ NewOptionsDialog::NewOptionsDialog(LawnApp *theApp, bool theFromGameSelector) } if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ICE || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) { mRestartButton->SetVisible(false); } @@ -87,8 +87,8 @@ NewOptionsDialog::NewOptionsDialog(LawnApp *theApp, bool theFromGameSelector) mRestartButton->SetVisible(false); } if (!mApp->CanShowAlmanac() || mApp->mGameScene == GameScenes::SCENE_LEVEL_INTRO || - mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || mFromGameSelector) + mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM || mFromGameSelector) { mAlmanacButton->SetVisible(false); } @@ -152,7 +152,7 @@ void NewOptionsDialog::Resize(int theX, int theY, int theWidth, int theHeight) } if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) + mApp->mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM) { mAlmanacButton->mY += 43; } @@ -174,19 +174,19 @@ void NewOptionsDialog::Draw(Sexy::Graphics *g) Sexy::Color aTextColor(107, 109, 145); TodDrawString(g, - "Music", - 186, - 140 + aMusicOffset, - FONT_DWARVENTODCRAFT18, - aTextColor, - DrawStringJustification::DS_ALIGN_RIGHT); + "Music", + 186, + 140 + aMusicOffset, + FONT_DWARVENTODCRAFT18, + aTextColor, + DrawStringJustification::DS_ALIGN_RIGHT); TodDrawString(g, - "Sound FX", - 186, - 167 + aSfxOffset, - FONT_DWARVENTODCRAFT18, - aTextColor, - DrawStringJustification::DS_ALIGN_RIGHT); + "Sound FX", + 186, + 167 + aSfxOffset, + FONT_DWARVENTODCRAFT18, + aTextColor, + DrawStringJustification::DS_ALIGN_RIGHT); } void NewOptionsDialog::Update() @@ -204,7 +204,7 @@ void NewOptionsDialog::Update() mAwaitRelease = false; } } - #endif +#endif } void NewOptionsDialog::SliderVal(int theId, double theVal) @@ -229,7 +229,6 @@ void NewOptionsDialog::SliderVal(int theId, double theVal) void NewOptionsDialog::CheckboxChecked(int theId, bool checked) { - } void NewOptionsDialog::KeyDown(Sexy::KeyCode theKey) @@ -316,7 +315,7 @@ void NewOptionsDialog::ButtonDepress(int theId) } LawnDialog *aDialog = (LawnDialog *)mApp->DoDialog( - Dialogs::DIALOG_CONFIRM_RESTART, true, aDialogTitle, aDialogMessage, "", Dialog::BUTTONS_YES_NO); + Dialogs::DIALOG_CONFIRM_RESTART, true, aDialogTitle, aDialogMessage, "", Dialog::BUTTONS_YES_NO); aDialog->mLawnYesButton->mLabel = TodStringTranslate("[RESTART_LABEL]"); aDialog->mLawnNoButton->mLabel = TodStringTranslate("[DIALOG_BUTTON_CANCEL]"); diff --git a/src/Lawn/Widget/SeedChooserScreen.cpp b/src/Lawn/Widget/SeedChooserScreen.cpp index d74d99b..3277908 100644 --- a/src/Lawn/Widget/SeedChooserScreen.cpp +++ b/src/Lawn/Widget/SeedChooserScreen.cpp @@ -184,7 +184,7 @@ SeedChooserScreen::SeedChooserScreen() } int SeedChooserScreen::PickFromWeightedArrayUsingSpecialRandSeed(TodWeightedArray *theArray, int theCount, - MTRand &theLevelRNG) + MTRand &theLevelRNG) { int aTotalWeight = 0; for (int i = 0; i < theCount; i++) @@ -211,8 +211,8 @@ void SeedChooserScreen::CrazyDavePickSeeds() aSeedArray[aSeedType].mItem = aSeedType; unsigned int aRecFlags = SeedNotRecommendedToPick(aSeedType); if ((aSeedType == SEED_GATLINGPEA && !mApp->mPlayerInfo->mPurchases[STORE_ITEM_PLANT_GATLINGPEA]) || - !mApp->SeedTypeAvailable(aSeedType) || SeedNotAllowedToPick(aSeedType) || Plant::IsUpgrade(aSeedType) || - aSeedType == SEED_IMITATER || aSeedType == SEED_UMBRELLA || aSeedType == SEED_BLOVER) + !mApp->SeedTypeAvailable(aSeedType) || SeedNotAllowedToPick(aSeedType) || Plant::IsUpgrade(aSeedType) || + aSeedType == SEED_IMITATER || aSeedType == SEED_UMBRELLA || aSeedType == SEED_BLOVER) { aSeedArray[aSeedType].mWeight = 0; } @@ -238,7 +238,7 @@ void SeedChooserScreen::CrazyDavePickSeeds() for (int i = 0; i < 3; i++) { SeedType aPickedSeed = - (SeedType)PickFromWeightedArrayUsingSpecialRandSeed(aSeedArray, NUM_SEEDS_IN_CHOOSER, aLevelRNG); + (SeedType)PickFromWeightedArrayUsingSpecialRandSeed(aSeedArray, NUM_SEEDS_IN_CHOOSER, aLevelRNG); aSeedArray[aPickedSeed].mWeight = 0; ChosenSeed &aChosenSeed = mChosenSeeds[aPickedSeed]; @@ -328,8 +328,8 @@ unsigned int SeedChooserScreen::SeedNotRecommendedToPick(SeedType theSeedType) bool SeedChooserScreen::SeedNotAllowedToPick(SeedType theSeedType) { return mApp->mGameMode == GAMEMODE_CHALLENGE_LAST_STAND && - (theSeedType == SEED_SUNFLOWER || theSeedType == SEED_SUNSHROOM || theSeedType == SEED_TWINSUNFLOWER || - theSeedType == SEED_SEASHROOM || theSeedType == SEED_PUFFSHROOM); + (theSeedType == SEED_SUNFLOWER || theSeedType == SEED_SUNSHROOM || theSeedType == SEED_TWINSUNFLOWER || + theSeedType == SEED_SEASHROOM || theSeedType == SEED_PUFFSHROOM); } bool SeedChooserScreen::SeedNotAllowedDuringTrial(SeedType theSeedType) @@ -352,7 +352,7 @@ void SeedChooserScreen::Draw(Graphics *g) g->DrawImage(Sexy::IMAGE_SEEDCHOOSER_IMITATERADDON, 459, 503); } TodDrawString(g, "[CHOOSE_YOUR_PLANTS]", 229, 110, Sexy::FONT_DWARVENTODCRAFT18YELLOW, Color::White, - DS_ALIGN_CENTER); + DS_ALIGN_CENTER); int aNumSeeds = Has7Rows() ? 48 : 40; for (SeedType aSeedShadow = SEED_PEASHOOTER; aSeedShadow < aNumSeeds; aSeedShadow = (SeedType)(aSeedShadow + 1)) @@ -394,13 +394,13 @@ void SeedChooserScreen::Draw(Graphics *g) ChosenSeed &aChosenSeed = mChosenSeeds[aSeedType]; ChosenSeedState aSeedState = aChosenSeed.mSeedState; if (mApp->SeedTypeAvailable(aSeedType) && aSeedState != SEED_FLYING_TO_BANK && - aSeedState != SEED_FLYING_TO_CHOOSER && aSeedState != SEED_PACKET_HIDDEN && - (aSeedState == SEED_IN_CHOOSER || mBoard->mCutScene->mSeedChoosing)) + aSeedState != SEED_FLYING_TO_CHOOSER && aSeedState != SEED_PACKET_HIDDEN && + (aSeedState == SEED_IN_CHOOSER || mBoard->mCutScene->mSeedChoosing)) { bool aGrayed = false; if (((SeedNotRecommendedToPick(aSeedType) || SeedNotAllowedToPick(aSeedType)) && - aSeedState == SEED_IN_CHOOSER) || - SeedNotAllowedDuringTrial(aSeedType)) + aSeedState == SEED_IN_CHOOSER) || + SeedNotAllowedDuringTrial(aSeedType)) aGrayed = true; int aPosX = aChosenSeed.mX; @@ -411,7 +411,7 @@ void SeedChooserScreen::Draw(Graphics *g) aPosY -= mY; } DrawSeedPacket(g, aPosX, aPosY, aChosenSeed.mSeedType, aChosenSeed.mImitaterType, 0, aGrayed ? 115 : 255, - true, false); + true, false); } } @@ -421,10 +421,10 @@ void SeedChooserScreen::Draw(Graphics *g) ChosenSeed &aChosenSeed = mChosenSeeds[aSeedType]; ChosenSeedState aSeedState = aChosenSeed.mSeedState; if (mApp->SeedTypeAvailable(aSeedType) && - (aSeedState == SEED_FLYING_TO_BANK || aSeedState == SEED_FLYING_TO_CHOOSER)) + (aSeedState == SEED_FLYING_TO_BANK || aSeedState == SEED_FLYING_TO_CHOOSER)) { DrawSeedPacket(g, aChosenSeed.mX, aChosenSeed.mY, aChosenSeed.mSeedType, aChosenSeed.mImitaterType, 0, 255, - true, false); + true, false); } } @@ -517,9 +517,9 @@ void SeedChooserScreen::UpdateCursor() } if (mMouseVisible && mChooseState != CHOOSE_VIEW_LAWN && - ((aMouseSeedType != SEED_NONE && !SeedNotAllowedToPick(aMouseSeedType)) || mRandomButton->IsMouseOver() || - mViewLawnButton->IsMouseOver() || mAlmanacButton->IsMouseOver() || mImitaterButton->IsMouseOver() || - mStoreButton->IsMouseOver() || mMenuButton->IsMouseOver() || mStartButton->IsMouseOver())) + ((aMouseSeedType != SEED_NONE && !SeedNotAllowedToPick(aMouseSeedType)) || mRandomButton->IsMouseOver() || + mViewLawnButton->IsMouseOver() || mAlmanacButton->IsMouseOver() || mImitaterButton->IsMouseOver() || + mStoreButton->IsMouseOver() || mMenuButton->IsMouseOver() || mStartButton->IsMouseOver())) mApp->SetCursor(CURSOR_HAND); else mApp->SetCursor(CURSOR_POINTER); @@ -545,9 +545,9 @@ void SeedChooserScreen::Update() int aTimeStart = aChosenSeed.mTimeStartMotion; int aTimeEnd = aChosenSeed.mTimeEndMotion; aChosenSeed.mX = TodAnimateCurve(aTimeStart, aTimeEnd, mSeedChooserAge, aChosenSeed.mStartX, - aChosenSeed.mEndX, CURVE_EASE_IN_OUT); + aChosenSeed.mEndX, CURVE_EASE_IN_OUT); aChosenSeed.mY = TodAnimateCurve(aTimeStart, aTimeEnd, mSeedChooserAge, aChosenSeed.mStartY, - aChosenSeed.mEndY, CURVE_EASE_IN_OUT); + aChosenSeed.mEndY, CURVE_EASE_IN_OUT); if (mSeedChooserAge >= aChosenSeed.mTimeEndMotion) { LandFlyingSeed(aChosenSeed); @@ -572,7 +572,7 @@ void SeedChooserScreen::Update() bool SeedChooserScreen::DisplayRepickWarningDialog(const SexyString &theMessage) { return mApp->LawnMessageBox(Dialogs::DIALOG_CHOOSER_WARNING, "[DIALOG_WARNING]", theMessage, "[DIALOG_BUTTON_YES]", - "[REPICK_BUTTON]", Dialog::BUTTONS_YES_NO) == Dialog::ID_YES; + "[REPICK_BUTTON]", Dialog::BUTTONS_YES_NO) == Dialog::ID_YES; } bool SeedChooserScreen::FlyersAreComming() @@ -634,7 +634,7 @@ void SeedChooserScreen::OnStartButton() } } if (!PickedPlantType(SEED_SUNFLOWER) && !PickedPlantType(SEED_TWINSUNFLOWER) && !PickedPlantType(SEED_SUNSHROOM) && - !mBoard->mCutScene->IsSurvivalRepick() && mApp->mGameMode != GAMEMODE_CHALLENGE_LAST_STAND) + !mBoard->mCutScene->IsSurvivalRepick() && mApp->mGameMode != GAMEMODE_CHALLENGE_LAST_STAND) { if (mApp->IsFirstTimeAdventureMode() && mBoard->mLevel == 11) { @@ -649,7 +649,7 @@ void SeedChooserScreen::OnStartButton() } } if (mBoard->StageHasPool() && !PickedPlantType(SEED_LILYPAD) && !PickedPlantType(SEED_SEASHROOM) && - !PickedPlantType(SEED_TANGLEKELP) && !mBoard->mCutScene->IsSurvivalRepick()) + !PickedPlantType(SEED_TANGLEKELP) && !mBoard->mCutScene->IsSurvivalRepick()) { if (mApp->IsFirstTimeAdventureMode() && mBoard->mLevel == 21) { @@ -679,7 +679,7 @@ void SeedChooserScreen::OnStartButton() } } if (mApp->mGameMode == GAMEMODE_CHALLENGE_ART_CHALLENGE_SUNFLOWER && - (!PickedPlantType(SEED_STARFRUIT) || !PickedPlantType(SEED_UMBRELLA) || !PickedPlantType(SEED_WALLNUT))) + (!PickedPlantType(SEED_STARFRUIT) || !PickedPlantType(SEED_UMBRELLA) || !PickedPlantType(SEED_WALLNUT))) { if (!DisplayRepickWarningDialog("[SEED_CHOOSER_ART_2_WARNING]")) { @@ -688,7 +688,7 @@ void SeedChooserScreen::OnStartButton() } if (FlyersAreComming() && !FlyProtectionCurrentlyPlanted() && !PickedPlantType(SEED_CATTAIL) && - !PickedPlantType(SEED_CACTUS) && !PickedPlantType(SEED_BLOVER)) + !PickedPlantType(SEED_CACTUS) && !PickedPlantType(SEED_BLOVER)) { if (!DisplayRepickWarningDialog("[SEED_CHOOSER_FLYER_WARNING]")) { @@ -697,9 +697,9 @@ void SeedChooserScreen::OnStartButton() } if (!CheckSeedUpgrade(SEED_GATLINGPEA, SEED_REPEATER) || !CheckSeedUpgrade(SEED_WINTERMELON, SEED_MELONPULT) || - !CheckSeedUpgrade(SEED_TWINSUNFLOWER, SEED_SUNFLOWER) || !CheckSeedUpgrade(SEED_SPIKEROCK, SEED_SPIKEWEED) || - !CheckSeedUpgrade(SEED_COBCANNON, SEED_KERNELPULT) || !CheckSeedUpgrade(SEED_GOLD_MAGNET, SEED_MAGNETSHROOM) || - !CheckSeedUpgrade(SEED_GLOOMSHROOM, SEED_FUMESHROOM) || !CheckSeedUpgrade(SEED_CATTAIL, SEED_LILYPAD)) + !CheckSeedUpgrade(SEED_TWINSUNFLOWER, SEED_SUNFLOWER) || !CheckSeedUpgrade(SEED_SPIKEROCK, SEED_SPIKEWEED) || + !CheckSeedUpgrade(SEED_COBCANNON, SEED_KERNELPULT) || !CheckSeedUpgrade(SEED_GOLD_MAGNET, SEED_MAGNETSHROOM) || + !CheckSeedUpgrade(SEED_GLOOMSHROOM, SEED_FUMESHROOM) || !CheckSeedUpgrade(SEED_CATTAIL, SEED_LILYPAD)) return; CloseSeedChooser(); @@ -713,7 +713,7 @@ void SeedChooserScreen::PickRandomSeeds() do aSeedType = (SeedType)Rand(mApp->GetSeedsAvailable()); while (!mApp->SeedTypeAvailable(aSeedType) || aSeedType == SEED_IMITATER || - mChosenSeeds[aSeedType].mSeedState != SEED_IN_CHOOSER); + mChosenSeeds[aSeedType].mSeedState != SEED_IN_CHOOSER); ChosenSeed &aChosenSeed = mChosenSeeds[aSeedType]; aChosenSeed.mTimeStartMotion = 0; aChosenSeed.mTimeEndMotion = 0; @@ -725,7 +725,7 @@ void SeedChooserScreen::PickRandomSeeds() mSeedsInBank++; } for (SeedType aSeedFlying = SEED_PEASHOOTER; aSeedFlying < NUM_SEEDS_IN_CHOOSER; - aSeedFlying = (SeedType)(aSeedFlying + 1)) + aSeedFlying = (SeedType)(aSeedFlying + 1)) LandFlyingSeed(mChosenSeeds[aSeedFlying]); CloseSeedChooser(); } @@ -780,7 +780,7 @@ SeedType SeedChooserScreen::SeedHitTest(int x, int y) if (mMouseVisible) { for (SeedType aSeedType = SEED_PEASHOOTER; aSeedType < NUM_SEEDS_IN_CHOOSER; - aSeedType = (SeedType)(aSeedType + 1)) + aSeedType = (SeedType)(aSeedType + 1)) { ChosenSeed &aChosenSeed = mChosenSeeds[aSeedType]; if (!mApp->SeedTypeAvailable(aSeedType) || aChosenSeed.mSeedState == SEED_PACKET_HIDDEN) @@ -871,7 +871,7 @@ void SeedChooserScreen::ClickedSeedInChooser(ChosenSeed &theChosenSeed) void SeedChooserScreen::ShowToolTip() { if (!mApp->mWidgetManager->mMouseIn || !mApp->mActive || mApp->GetDialogCount() > 0 || - mChooseState == CHOOSE_VIEW_LAWN) + mChooseState == CHOOSE_VIEW_LAWN) { RemoveToolTip(); } @@ -948,7 +948,7 @@ void SeedChooserScreen::ShowToolTip() } mToolTip->mX = - ClampInt((SEED_PACKET_WIDTH - mToolTip->mWidth) / 2 + aSeedX, 0, BOARD_WIDTH - mToolTip->mWidth); + ClampInt((SEED_PACKET_WIDTH - mToolTip->mWidth) / 2 + aSeedX, 0, BOARD_WIDTH - mToolTip->mWidth); mToolTip->mY = aSeedY + 70; mToolTip->mVisible = true; mToolTipSeed = aSeedType; @@ -1040,18 +1040,18 @@ void SeedChooserScreen::MouseDown(int x, int y, int theClickCount) ImitaterDialog *aDialog = new ImitaterDialog(); mApp->AddDialog(aDialog->mId, aDialog); aDialog->Resize((mWidth - aDialog->mWidth) / 2, (mHeight - aDialog->mHeight) / 2, aDialog->mWidth, - aDialog->mHeight); + aDialog->mHeight); mApp->mWidgetManager->SetFocus(aDialog); } } else { if (!mBoard->mSeedBank->ContainsPoint(x, y) && !mAlmanacButton->IsMouseOver() && !mStoreButton->IsMouseOver() && - mApp->CanShowAlmanac()) + mApp->CanShowAlmanac()) { Zombie *aZombie = mBoard->ZombieHitTest(x - mBoard->mX, y - mBoard->mY); if (aZombie && aZombie->mFromWave == Zombie::ZOMBIE_WAVE_CUTSCENE && - aZombie->mZombieType != ZOMBIE_REDEYE_GARGANTUAR) + aZombie->mZombieType != ZOMBIE_REDEYE_GARGANTUAR) { mApp->PlaySample(Sexy::SOUND_TAP); mApp->DoAlmanacDialog(SEED_NONE, aZombie->mZombieType)->WaitForResult(true); @@ -1067,8 +1067,8 @@ void SeedChooserScreen::MouseDown(int x, int y, int theClickCount) { mApp->PlaySample(Sexy::SOUND_TAP); if (mApp->LawnMessageBox(DIALOG_MESSAGE, "[GET_FULL_VERSION_TITLE]", "[GET_FULL_VERSION_BODY]", - "[GET_FULL_VERSION_YES_BUTTON]", "[GET_FULL_VERSION_NO_BUTTON]", - Dialog::BUTTONS_YES_NO) == Dialog::ID_YES) + "[GET_FULL_VERSION_YES_BUTTON]", "[GET_FULL_VERSION_NO_BUTTON]", + Dialog::BUTTONS_YES_NO) == Dialog::ID_YES) { #if SEXY_USE_DRM if (mApp->mDRM) @@ -1107,7 +1107,7 @@ bool SeedChooserScreen::PickedPlantType(SeedType theSeedType) if (aChosenSeed.mSeedState == SEED_IN_BANK) { if (aChosenSeed.mSeedType == theSeedType || - (aChosenSeed.mSeedType == SEED_IMITATER && aChosenSeed.mImitaterType == theSeedType)) + (aChosenSeed.mSeedType == SEED_IMITATER && aChosenSeed.mImitaterType == theSeedType)) { return true; } diff --git a/src/Lawn/Widget/TitleScreen.cpp b/src/Lawn/Widget/TitleScreen.cpp index fd579c0..151b70a 100644 --- a/src/Lawn/Widget/TitleScreen.cpp +++ b/src/Lawn/Widget/TitleScreen.cpp @@ -90,12 +90,12 @@ void TitleScreen::Draw(Graphics *g) else { anAlpha = TodAnimateCurve( - mTitleStateDuration, mTitleStateDuration - 50, mTitleStateCounter, 0, 255, TodCurves::CURVE_LINEAR); + mTitleStateDuration, mTitleStateDuration - 50, mTitleStateCounter, 0, 255, TodCurves::CURVE_LINEAR); } g->SetColorizeImages(true); g->SetColor(Color(255, 255, 255, anAlpha)); g->DrawImage( - IMAGE_POPCAP_LOGO, (mWidth - IMAGE_POPCAP_LOGO->mWidth) / 2, (mHeight - IMAGE_POPCAP_LOGO->mHeight) / 2); + IMAGE_POPCAP_LOGO, (mWidth - IMAGE_POPCAP_LOGO->mWidth) / 2, (mHeight - IMAGE_POPCAP_LOGO->mHeight) / 2); g->SetColorizeImages(false); return; @@ -111,11 +111,11 @@ void TitleScreen::Draw(Graphics *g) if (mTitleStateCounter >= mTitleStateDuration - 35) { anAlpha = TodAnimateCurve( - mTitleStateDuration, mTitleStateDuration - 35, mTitleStateCounter, 0, 255, TodCurves::CURVE_LINEAR); + mTitleStateDuration, mTitleStateDuration - 35, mTitleStateCounter, 0, 255, TodCurves::CURVE_LINEAR); g->SetColor(Color(255, 255, 255, 255 - anAlpha)); g->DrawImage(IMAGE_POPCAP_LOGO, - (mWidth - IMAGE_POPCAP_LOGO->mWidth) / 2, - (mHeight - IMAGE_POPCAP_LOGO->mHeight) / 2); + (mWidth - IMAGE_POPCAP_LOGO->mWidth) / 2, + (mHeight - IMAGE_POPCAP_LOGO->mHeight) / 2); } else { @@ -123,7 +123,7 @@ void TitleScreen::Draw(Graphics *g) } g->SetColor(Color(255, 255, 255, anAlpha)); g->DrawImage( - IMAGE_PARTNER_LOGO, (mWidth - IMAGE_PARTNER_LOGO->mWidth) / 2, (mHeight - IMAGE_PARTNER_LOGO->mHeight) / 2); + IMAGE_PARTNER_LOGO, (mWidth - IMAGE_PARTNER_LOGO->mWidth) / 2, (mHeight - IMAGE_PARTNER_LOGO->mHeight) / 2); g->SetColorizeImages(false); return; @@ -177,7 +177,7 @@ void TitleScreen::Draw(Graphics *g) float aScale = TodAnimateCurveFloatTime(0, mTotalBarWidth, mCurBarWidth, 1, 0.5f, TodCurves::CURVE_LINEAR); SexyTransform2D aTransform; TodScaleRotateTransformMatrix( - aTransform, aGrassX + 11.0f + aRollLen, aGrassY - 3.0f - 35.0f * aScale + 35.0f, aRotation, aScale, aScale); + aTransform, aGrassX + 11.0f + aRollLen, aGrassY - 3.0f - 35.0f * aScale + 35.0f, aRotation, aScale, aScale); Rect aSrcRect(0, 0, IMAGE_REANIM_SODROLLCAP->mWidth, IMAGE_REANIM_SODROLLCAP->mHeight); TodBltMatrix(g, IMAGE_REANIM_SODROLLCAP, aTransform, g->mClipRect, Color::White, g->mDrawMode, aSrcRect); } @@ -338,7 +338,7 @@ void TitleScreen::Update() float aBarWidth = TodAnimateCurveFloatTime(0, 1, aLoadingPercent, 0, mTotalBarWidth, TodCurves::CURVE_EASE_IN); float aDiff = aBarWidth - mCurBarWidth; float aAcceleration = - TodAnimateCurveFloatTime(0, 1, aLoadingPercent, 0.0001f, 0.00001f, TodCurves::CURVE_LINEAR); + TodAnimateCurveFloatTime(0, 1, aLoadingPercent, 0.0001f, 0.00001f, TodCurves::CURVE_LINEAR); if (mLoadingThreadComplete) { aAcceleration = 0.0001f; @@ -424,11 +424,11 @@ void TitleScreen::Update() } } - float aTriggerPoint[] = {mTotalBarWidth * 0.11f, - mTotalBarWidth * 0.32f, - mTotalBarWidth * 0.54f, - mTotalBarWidth * 0.72f, - mTotalBarWidth * 0.91f}; + float aTriggerPoint[] = { mTotalBarWidth * 0.11f, + mTotalBarWidth * 0.32f, + mTotalBarWidth * 0.54f, + mTotalBarWidth * 0.72f, + mTotalBarWidth * 0.91f }; for (int i = 0; i < LENGTH(aTriggerPoint); i++) { diff --git a/src/Lawn/Widget/ZombatarTOS.cpp b/src/Lawn/Widget/ZombatarTOS.cpp index 69423b9..a6ee084 100644 --- a/src/Lawn/Widget/ZombatarTOS.cpp +++ b/src/Lawn/Widget/ZombatarTOS.cpp @@ -16,16 +16,15 @@ ZombatarTOS::ZombatarTOS(LawnApp *theApp) : LawnDialog(theApp, DIALOG_ZOMBATAR_T { mApp = theApp; - mTOSSlider = new Slider(IMAGE_ZOMBATAR_TOS_SLIDER, IMAGE_ZOMBATAR_TOS_SLIDER_THUMB, ZombatarTOS::ZombatarTOS_Slider, this); mTOSSlider->mHorizontal = false; mTOSSlider->SetValue(0); mBackButton = MakeNewButton(ZombatarTOS::ZombatarTOS_Back, this, "", nullptr, Sexy::IMAGE_ZOMBATAR_BACK_BUTTON, - Sexy::IMAGE_ZOMBATAR_BACK_BUTTON_HIGHLIGHT, Sexy::IMAGE_ZOMBATAR_BACK_BUTTON_HIGHLIGHT); + Sexy::IMAGE_ZOMBATAR_BACK_BUTTON_HIGHLIGHT, Sexy::IMAGE_ZOMBATAR_BACK_BUTTON_HIGHLIGHT); mAcceptButton = MakeNewButton(ZombatarTOS::ZombatarTOS_Accept, this, "", nullptr, Sexy::IMAGE_ZOMBATAR_ACCEPT_BUTTON, - Sexy::IMAGE_ZOMBATAR_ACCEPT_BUTTON_HIGHLIGHT, Sexy::IMAGE_ZOMBATAR_ACCEPT_BUTTON_HIGHLIGHT); + Sexy::IMAGE_ZOMBATAR_ACCEPT_BUTTON_HIGHLIGHT, Sexy::IMAGE_ZOMBATAR_ACCEPT_BUTTON_HIGHLIGHT); mAcceptButton->mDisabled = true; mTOSCheckbox = MakeNewCheckbox(ZombatarTOS::ZombatarTOS_TOSCheckbox, this, !theApp->mIsWindowed); @@ -45,7 +44,6 @@ ZombatarTOS::~ZombatarTOS() delete mTOSCheckbox; } - void ZombatarTOS::AddedToManager(Sexy::WidgetManager *theWidgetManager) { Dialog::AddedToManager(theWidgetManager); @@ -73,7 +71,6 @@ void ZombatarTOS::Resize(int theX, int theY, int theWidth, int theHeight) mTOSCheckbox->Resize(GetWidth() - 110, 335, 46, 45); } - void ZombatarTOS::Draw(Graphics *g) { LawnDialog::Draw(g); diff --git a/src/Lawn/Widget/ZombatarWidget.cpp b/src/Lawn/Widget/ZombatarWidget.cpp index 58fbb02..fe9149b 100644 --- a/src/Lawn/Widget/ZombatarWidget.cpp +++ b/src/Lawn/Widget/ZombatarWidget.cpp @@ -15,151 +15,155 @@ #include "../../SexyAppFramework/Font.h" #include "../../ImageLib/ImageLib.h" -PortraitItem gPortraitItems[ZombatarItem::NUM_ZOMBATAR_ITEMS] -{ - {&IMAGE_ZOMBATAR_CLOTHES_1, nullptr, false, 49, 69, 0, 0}, - {&IMAGE_ZOMBATAR_CLOTHES_2, nullptr, false, 37, 59, 0, 0}, - {&IMAGE_ZOMBATAR_CLOTHES_3, nullptr, false, 48, 70, 0, 0}, - {&IMAGE_ZOMBATAR_CLOTHES_4, nullptr, false, 38, 70, 0, 0}, - {&IMAGE_ZOMBATAR_CLOTHES_5, nullptr, false, 52, 74, 0, 0}, - {&IMAGE_ZOMBATAR_CLOTHES_6, nullptr, false, 54, 69, 0, 0}, - {&IMAGE_ZOMBATAR_CLOTHES_7, nullptr, false, 39, 64, 0, 0}, - {&IMAGE_ZOMBATAR_CLOTHES_8, nullptr, false, 50, 69, 0, 0}, - {&IMAGE_ZOMBATAR_CLOTHES_9, nullptr, false, 51, 61, 0, 0}, - {&IMAGE_ZOMBATAR_CLOTHES_10, nullptr, false, 46, 68, 0, 0}, - {&IMAGE_ZOMBATAR_CLOTHES_11, nullptr, false, 46, 70, 0, 0}, - {&IMAGE_ZOMBATAR_CLOTHES_12, nullptr, false, 41, 73, 0, 0}, - - - {&IMAGE_ZOMBATAR_HATS_1, &IMAGE_ZOMBATAR_HATS_1_MASK, true, -10, -35, -2, -1}, - {&IMAGE_ZOMBATAR_HATS_2, nullptr, true, 9, -28, 0, 0}, - {&IMAGE_ZOMBATAR_HATS_3, &IMAGE_ZOMBATAR_HATS_3_MASK, true, 15, -20, -15, 1}, - {&IMAGE_ZOMBATAR_HATS_4, nullptr, true, -27, -30, 0, 0}, - {&IMAGE_ZOMBATAR_HATS_5, nullptr, true, 3, -24, 0, 0}, - {&IMAGE_ZOMBATAR_HATS_6, &IMAGE_ZOMBATAR_HATS_6_MASK, true, -20, -37, -4, 2}, - {&IMAGE_ZOMBATAR_HATS_7, &IMAGE_ZOMBATAR_HATS_7_MASK, true, 15, -23, 1, -15}, - {&IMAGE_ZOMBATAR_HATS_8, &IMAGE_ZOMBATAR_HATS_8_MASK, true, -35, -40, 2, 2}, - {&IMAGE_ZOMBATAR_HATS_9, &IMAGE_ZOMBATAR_HATS_9_MASK, true, 0, -40, 2, 2}, - {&IMAGE_ZOMBATAR_HATS_10, nullptr, true, -25, 5, 0, 0}, - {&IMAGE_ZOMBATAR_HATS_11, &IMAGE_ZOMBATAR_HATS_11_MASK, true, 25, -18, -1, -14}, - {&IMAGE_ZOMBATAR_HATS_12, nullptr, true, 5, -25, 0, 0}, - {&IMAGE_ZOMBATAR_HATS_13, nullptr, false, -20, -40, 0, 0}, - {&IMAGE_ZOMBATAR_HATS_14, nullptr, true, -15, -35, 0, 0}, - - {&IMAGE_ZOMBATAR_HAIR_1, &IMAGE_ZOMBATAR_HAIR_1_MASK, true, -5, -40, -9, -2}, - {&IMAGE_ZOMBATAR_HAIR_2, &IMAGE_ZOMBATAR_HAIR_2_MASK, true, -15, -15, -2, -4}, - {&IMAGE_ZOMBATAR_HAIR_3, nullptr, false, -15, -10, 0, 0}, - {&IMAGE_ZOMBATAR_HAIR_4, nullptr, true, -8, -25, 0, 0}, - {&IMAGE_ZOMBATAR_HAIR_5, nullptr, true, -2, -3, 0, 0}, - {&IMAGE_ZOMBATAR_HAIR_6, nullptr, true, 1, -27, 3, 2}, - {&IMAGE_ZOMBATAR_HAIR_7, nullptr, true, 13, -18, 0, 0}, - {&IMAGE_ZOMBATAR_HAIR_8, nullptr, true, -10, -25, 0, 0}, - {&IMAGE_ZOMBATAR_HAIR_9, nullptr, true, 90, 15, 0, 0}, - {&IMAGE_ZOMBATAR_HAIR_10, nullptr, true, -15, -8, 0, 0}, - {&IMAGE_ZOMBATAR_HAIR_11, &IMAGE_ZOMBATAR_HAIR_11_MASK, true, -5, -21, -3, -3}, - {&IMAGE_ZOMBATAR_HAIR_12, &IMAGE_ZOMBATAR_HAIR_12_MASK, true, 18, -42, -2, -4}, - {&IMAGE_ZOMBATAR_HAIR_13, &IMAGE_ZOMBATAR_HAIR_13_MASK, true, -5, -27, -3, -2}, - {&IMAGE_ZOMBATAR_HAIR_14, &IMAGE_ZOMBATAR_HAIR_14_MASK, true, -29, -42, -1, -5}, - {&IMAGE_ZOMBATAR_HAIR_15, &IMAGE_ZOMBATAR_HAIR_15_MASK, true, 7, -36, 0, 0}, - {&IMAGE_ZOMBATAR_HAIR_16, nullptr, true, -12, -20, 0, 0}, - - - {&IMAGE_ZOMBATAR_EYEWEAR_1, &IMAGE_ZOMBATAR_EYEWEAR_1_MASK, true, -9, 33, 1, 0}, - {&IMAGE_ZOMBATAR_EYEWEAR_2, &IMAGE_ZOMBATAR_EYEWEAR_2_MASK, true, -6, 46, 1, 1}, - {&IMAGE_ZOMBATAR_EYEWEAR_3, &IMAGE_ZOMBATAR_EYEWEAR_3_MASK, true, -9, 29, 1, 0}, - {&IMAGE_ZOMBATAR_EYEWEAR_4, &IMAGE_ZOMBATAR_EYEWEAR_4_MASK, true, -9, 39, 1, 1}, - {&IMAGE_ZOMBATAR_EYEWEAR_5, &IMAGE_ZOMBATAR_EYEWEAR_5_MASK, true, -7, 36, 1, 1}, - {&IMAGE_ZOMBATAR_EYEWEAR_6, &IMAGE_ZOMBATAR_EYEWEAR_6_MASK, true, -8, 39, 0, 1}, - {&IMAGE_ZOMBATAR_EYEWEAR_7, &IMAGE_ZOMBATAR_EYEWEAR_7_MASK, true, 13, 51, 1, 1}, - {&IMAGE_ZOMBATAR_EYEWEAR_8, &IMAGE_ZOMBATAR_EYEWEAR_8_MASK, true, -5, 31, 1, 1}, - {&IMAGE_ZOMBATAR_EYEWEAR_9, &IMAGE_ZOMBATAR_EYEWEAR_9_MASK, true, -1, 61, 1, 1}, - {&IMAGE_ZOMBATAR_EYEWEAR_10, &IMAGE_ZOMBATAR_EYEWEAR_10_MASK, true, -6, 36, 1, 1}, - {&IMAGE_ZOMBATAR_EYEWEAR_11, &IMAGE_ZOMBATAR_EYEWEAR_11_MASK, true, -6, 28, 1, 1}, - {&IMAGE_ZOMBATAR_EYEWEAR_12, &IMAGE_ZOMBATAR_EYEWEAR_12_MASK, false, 0, 56, 1, 1}, - {&IMAGE_ZOMBATAR_EYEWEAR_13, nullptr, false, -8, 41, 0, 0}, - {&IMAGE_ZOMBATAR_EYEWEAR_14, nullptr, false, -3, 24, 0, 0}, - {&IMAGE_ZOMBATAR_EYEWEAR_15, nullptr, false, 4, 25, 0, 0}, - {&IMAGE_ZOMBATAR_EYEWEAR_16, nullptr, false, -3, 25, 0, 0}, - - {&IMAGE_ZOMBATAR_FACIALHAIR_1, &IMAGE_ZOMBATAR_FACIALHAIR_1_MASK, true, -3, 67, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_2, nullptr, true, 13, 70, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_3, nullptr, true, 7, 70, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_4, &IMAGE_ZOMBATAR_FACIALHAIR_4_MASK, true, 0, 65, -3, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_5, nullptr, true, 31, 105, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_6, nullptr, true, 10, 72, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_7, nullptr, true, -25, 67, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_8, &IMAGE_ZOMBATAR_FACIALHAIR_8_MASK, true, 7, 65, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_9, &IMAGE_ZOMBATAR_FACIALHAIR_9_MASK, true, 3, 65, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_10, &IMAGE_ZOMBATAR_FACIALHAIR_10_MASK, true, 6, 72, 0, -2}, - {&IMAGE_ZOMBATAR_FACIALHAIR_11, &IMAGE_ZOMBATAR_FACIALHAIR_11_MASK, true, 6, 52, -1, -3}, - {&IMAGE_ZOMBATAR_FACIALHAIR_12, &IMAGE_ZOMBATAR_FACIALHAIR_12_MASK, true, -2, 66, -7, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_13, nullptr, true, 7, 70, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_14, &IMAGE_ZOMBATAR_FACIALHAIR_14_MASK, true, -20, 63, -1, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_15, &IMAGE_ZOMBATAR_FACIALHAIR_15_MASK, true, 25, 105, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_16, &IMAGE_ZOMBATAR_FACIALHAIR_16_MASK, true, 25, 100, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_17, nullptr, true, 5, 70, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_18, &IMAGE_ZOMBATAR_FACIALHAIR_18_MASK, true, 20, 56, 0, -4}, - {&IMAGE_ZOMBATAR_FACIALHAIR_19, nullptr, true, 8, 52, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_20, nullptr, true, 76, 40, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_21, &IMAGE_ZOMBATAR_FACIALHAIR_21_MASK, true, 80, 43, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_22, &IMAGE_ZOMBATAR_FACIALHAIR_22_MASK, true, -22, 51, -3, -5}, - {&IMAGE_ZOMBATAR_FACIALHAIR_23, &IMAGE_ZOMBATAR_FACIALHAIR_23_MASK, true, 20, 105, 0, 0}, - {&IMAGE_ZOMBATAR_FACIALHAIR_24, &IMAGE_ZOMBATAR_FACIALHAIR_24_MASK, true, 0, 68, -1, 0}, - - {&IMAGE_ZOMBATAR_TIDBITS_1, nullptr, true, -9, 24, 0, 0}, - {&IMAGE_ZOMBATAR_TIDBITS_2, nullptr, true, -9, 24, 0, 0}, - {&IMAGE_ZOMBATAR_TIDBITS_3, nullptr, true, 9, 72, 0, 0}, - {&IMAGE_ZOMBATAR_TIDBITS_4, nullptr, false, -6, 23, 0, 0}, - {&IMAGE_ZOMBATAR_TIDBITS_5, nullptr, false, -6, 19, 0, 0}, - {&IMAGE_ZOMBATAR_TIDBITS_6, nullptr, false, -9, 27, 0, 0}, - {&IMAGE_ZOMBATAR_TIDBITS_7, nullptr, false, -9, 33, 0, 0}, - {&IMAGE_ZOMBATAR_TIDBITS_8, nullptr, false, -4, 16, 0, 0}, - {&IMAGE_ZOMBATAR_TIDBITS_9, nullptr, false, -16, 37, 0, 0}, - {&IMAGE_ZOMBATAR_TIDBITS_10, nullptr, true, -1, 32, 0, 0}, - {&IMAGE_ZOMBATAR_TIDBITS_11, nullptr, true, -1, 31, 0, 0}, - {&IMAGE_ZOMBATAR_TIDBITS_12, nullptr, true, 49, 52, 0, 0}, - {&IMAGE_ZOMBATAR_TIDBITS_13, nullptr, false, 51, 11, 0, 0}, - {&IMAGE_ZOMBATAR_TIDBITS_14, nullptr, false, 76, 76, 0, 0}, - - {&IMAGE_ZOMBATAR_ACCESSORY_1, nullptr, false, 65, 70, 0, 0}, - {&IMAGE_ZOMBATAR_ACCESSORY_2, nullptr, false, 70, 70, 0, 0}, - {&IMAGE_ZOMBATAR_ACCESSORY_3, nullptr, false, 48, 73, 0, 0}, - {&IMAGE_ZOMBATAR_ACCESSORY_4, nullptr, false, 93, 55, 0, 0}, - {&IMAGE_ZOMBATAR_ACCESSORY_5, nullptr, false, 93, 60, 0, 0}, - {&IMAGE_ZOMBATAR_ACCESSORY_6, nullptr, false, 93, 60, 0, 0}, - - {&IMAGE_ZOMBATAR_ACCESSORY_8, nullptr, false, 66, 71, 0, 0}, - {&IMAGE_ZOMBATAR_ACCESSORY_9, nullptr, false, 80, 25, 0, 0}, - {&IMAGE_ZOMBATAR_ACCESSORY_10, nullptr, true, 23, 78, 0, 0}, - {&IMAGE_ZOMBATAR_ACCESSORY_11, nullptr, false, 5, 60, 0, 0}, - {&IMAGE_ZOMBATAR_ACCESSORY_12, nullptr, true, 97, 52, 0, 0}, - {&IMAGE_ZOMBATAR_ACCESSORY_13, nullptr, false, 40, 90, 0, 0}, - {&IMAGE_ZOMBATAR_ACCESSORY_14, nullptr, true, 30, 105, 0, 0}, - {&IMAGE_ZOMBATAR_ACCESSORY_15, nullptr, true, 95, 30, 0, 0}, - {&IMAGE_ZOMBATAR_ACCESSORY_16, nullptr, false, -25, 0, 0, 0}, - - {&IMAGE_ZOMBATAR_BACKGROUND_CRAZYDAVE, nullptr, false, 0, 0, 0, 0}, - {&IMAGE_ZOMBATAR_BACKGROUND_MENU, nullptr, false, 0, 0, 0, 0}, - {&IMAGE_ZOMBATAR_BACKGROUND_MENU_DOS, nullptr, false, 0, 0, 0, 0}, - {&IMAGE_ZOMBATAR_BACKGROUND_ROOF, nullptr, false, 0, 0, 0, 0}, - {&IMAGE_ZOMBATAR_BACKGROUND_BLANK, nullptr, true, 0, 0, 0, 0}, +PortraitItem gPortraitItems[ZombatarItem::NUM_ZOMBATAR_ITEMS]{ + { &IMAGE_ZOMBATAR_CLOTHES_1, nullptr, false, 49, 69, 0, 0 }, + { &IMAGE_ZOMBATAR_CLOTHES_2, nullptr, false, 37, 59, 0, 0 }, + { &IMAGE_ZOMBATAR_CLOTHES_3, nullptr, false, 48, 70, 0, 0 }, + { &IMAGE_ZOMBATAR_CLOTHES_4, nullptr, false, 38, 70, 0, 0 }, + { &IMAGE_ZOMBATAR_CLOTHES_5, nullptr, false, 52, 74, 0, 0 }, + { &IMAGE_ZOMBATAR_CLOTHES_6, nullptr, false, 54, 69, 0, 0 }, + { &IMAGE_ZOMBATAR_CLOTHES_7, nullptr, false, 39, 64, 0, 0 }, + { &IMAGE_ZOMBATAR_CLOTHES_8, nullptr, false, 50, 69, 0, 0 }, + { &IMAGE_ZOMBATAR_CLOTHES_9, nullptr, false, 51, 61, 0, 0 }, + { &IMAGE_ZOMBATAR_CLOTHES_10, nullptr, false, 46, 68, 0, 0 }, + { &IMAGE_ZOMBATAR_CLOTHES_11, nullptr, false, 46, 70, 0, 0 }, + { &IMAGE_ZOMBATAR_CLOTHES_12, nullptr, false, 41, 73, 0, 0 }, + + { &IMAGE_ZOMBATAR_HATS_1, &IMAGE_ZOMBATAR_HATS_1_MASK, true, -10, -35, -2, -1 }, + { &IMAGE_ZOMBATAR_HATS_2, nullptr, true, 9, -28, 0, 0 }, + { &IMAGE_ZOMBATAR_HATS_3, &IMAGE_ZOMBATAR_HATS_3_MASK, true, 15, -20, -15, 1 }, + { &IMAGE_ZOMBATAR_HATS_4, nullptr, true, -27, -30, 0, 0 }, + { &IMAGE_ZOMBATAR_HATS_5, nullptr, true, 3, -24, 0, 0 }, + { &IMAGE_ZOMBATAR_HATS_6, &IMAGE_ZOMBATAR_HATS_6_MASK, true, -20, -37, -4, 2 }, + { &IMAGE_ZOMBATAR_HATS_7, &IMAGE_ZOMBATAR_HATS_7_MASK, true, 15, -23, 1, -15 }, + { &IMAGE_ZOMBATAR_HATS_8, &IMAGE_ZOMBATAR_HATS_8_MASK, true, -35, -40, 2, 2 }, + { &IMAGE_ZOMBATAR_HATS_9, &IMAGE_ZOMBATAR_HATS_9_MASK, true, 0, -40, 2, 2 }, + { &IMAGE_ZOMBATAR_HATS_10, nullptr, true, -25, 5, 0, 0 }, + { &IMAGE_ZOMBATAR_HATS_11, &IMAGE_ZOMBATAR_HATS_11_MASK, true, 25, -18, -1, -14 }, + { &IMAGE_ZOMBATAR_HATS_12, nullptr, true, 5, -25, 0, 0 }, + { &IMAGE_ZOMBATAR_HATS_13, nullptr, false, -20, -40, 0, 0 }, + { &IMAGE_ZOMBATAR_HATS_14, nullptr, true, -15, -35, 0, 0 }, + + { &IMAGE_ZOMBATAR_HAIR_1, &IMAGE_ZOMBATAR_HAIR_1_MASK, true, -5, -40, -9, -2 }, + { &IMAGE_ZOMBATAR_HAIR_2, &IMAGE_ZOMBATAR_HAIR_2_MASK, true, -15, -15, -2, -4 }, + { &IMAGE_ZOMBATAR_HAIR_3, nullptr, false, -15, -10, 0, 0 }, + { &IMAGE_ZOMBATAR_HAIR_4, nullptr, true, -8, -25, 0, 0 }, + { &IMAGE_ZOMBATAR_HAIR_5, nullptr, true, -2, -3, 0, 0 }, + { &IMAGE_ZOMBATAR_HAIR_6, nullptr, true, 1, -27, 3, 2 }, + { &IMAGE_ZOMBATAR_HAIR_7, nullptr, true, 13, -18, 0, 0 }, + { &IMAGE_ZOMBATAR_HAIR_8, nullptr, true, -10, -25, 0, 0 }, + { &IMAGE_ZOMBATAR_HAIR_9, nullptr, true, 90, 15, 0, 0 }, + { &IMAGE_ZOMBATAR_HAIR_10, nullptr, true, -15, -8, 0, 0 }, + { &IMAGE_ZOMBATAR_HAIR_11, &IMAGE_ZOMBATAR_HAIR_11_MASK, true, -5, -21, -3, -3 }, + { &IMAGE_ZOMBATAR_HAIR_12, &IMAGE_ZOMBATAR_HAIR_12_MASK, true, 18, -42, -2, -4 }, + { &IMAGE_ZOMBATAR_HAIR_13, &IMAGE_ZOMBATAR_HAIR_13_MASK, true, -5, -27, -3, -2 }, + { &IMAGE_ZOMBATAR_HAIR_14, &IMAGE_ZOMBATAR_HAIR_14_MASK, true, -29, -42, -1, -5 }, + { &IMAGE_ZOMBATAR_HAIR_15, &IMAGE_ZOMBATAR_HAIR_15_MASK, true, 7, -36, 0, 0 }, + { &IMAGE_ZOMBATAR_HAIR_16, nullptr, true, -12, -20, 0, 0 }, + + { &IMAGE_ZOMBATAR_EYEWEAR_1, &IMAGE_ZOMBATAR_EYEWEAR_1_MASK, true, -9, 33, 1, 0 }, + { &IMAGE_ZOMBATAR_EYEWEAR_2, &IMAGE_ZOMBATAR_EYEWEAR_2_MASK, true, -6, 46, 1, 1 }, + { &IMAGE_ZOMBATAR_EYEWEAR_3, &IMAGE_ZOMBATAR_EYEWEAR_3_MASK, true, -9, 29, 1, 0 }, + { &IMAGE_ZOMBATAR_EYEWEAR_4, &IMAGE_ZOMBATAR_EYEWEAR_4_MASK, true, -9, 39, 1, 1 }, + { &IMAGE_ZOMBATAR_EYEWEAR_5, &IMAGE_ZOMBATAR_EYEWEAR_5_MASK, true, -7, 36, 1, 1 }, + { &IMAGE_ZOMBATAR_EYEWEAR_6, &IMAGE_ZOMBATAR_EYEWEAR_6_MASK, true, -8, 39, 0, 1 }, + { &IMAGE_ZOMBATAR_EYEWEAR_7, &IMAGE_ZOMBATAR_EYEWEAR_7_MASK, true, 13, 51, 1, 1 }, + { &IMAGE_ZOMBATAR_EYEWEAR_8, &IMAGE_ZOMBATAR_EYEWEAR_8_MASK, true, -5, 31, 1, 1 }, + { &IMAGE_ZOMBATAR_EYEWEAR_9, &IMAGE_ZOMBATAR_EYEWEAR_9_MASK, true, -1, 61, 1, 1 }, + { &IMAGE_ZOMBATAR_EYEWEAR_10, &IMAGE_ZOMBATAR_EYEWEAR_10_MASK, true, -6, 36, 1, 1 }, + { &IMAGE_ZOMBATAR_EYEWEAR_11, &IMAGE_ZOMBATAR_EYEWEAR_11_MASK, true, -6, 28, 1, 1 }, + { &IMAGE_ZOMBATAR_EYEWEAR_12, &IMAGE_ZOMBATAR_EYEWEAR_12_MASK, false, 0, 56, 1, 1 }, + { &IMAGE_ZOMBATAR_EYEWEAR_13, nullptr, false, -8, 41, 0, 0 }, + { &IMAGE_ZOMBATAR_EYEWEAR_14, nullptr, false, -3, 24, 0, 0 }, + { &IMAGE_ZOMBATAR_EYEWEAR_15, nullptr, false, 4, 25, 0, 0 }, + { &IMAGE_ZOMBATAR_EYEWEAR_16, nullptr, false, -3, 25, 0, 0 }, + + { &IMAGE_ZOMBATAR_FACIALHAIR_1, &IMAGE_ZOMBATAR_FACIALHAIR_1_MASK, true, -3, 67, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_2, nullptr, true, 13, 70, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_3, nullptr, true, 7, 70, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_4, &IMAGE_ZOMBATAR_FACIALHAIR_4_MASK, true, 0, 65, -3, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_5, nullptr, true, 31, 105, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_6, nullptr, true, 10, 72, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_7, nullptr, true, -25, 67, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_8, &IMAGE_ZOMBATAR_FACIALHAIR_8_MASK, true, 7, 65, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_9, &IMAGE_ZOMBATAR_FACIALHAIR_9_MASK, true, 3, 65, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_10, &IMAGE_ZOMBATAR_FACIALHAIR_10_MASK, true, 6, 72, 0, -2 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_11, &IMAGE_ZOMBATAR_FACIALHAIR_11_MASK, true, 6, 52, -1, -3 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_12, &IMAGE_ZOMBATAR_FACIALHAIR_12_MASK, true, -2, 66, -7, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_13, nullptr, true, 7, 70, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_14, &IMAGE_ZOMBATAR_FACIALHAIR_14_MASK, true, -20, 63, -1, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_15, &IMAGE_ZOMBATAR_FACIALHAIR_15_MASK, true, 25, 105, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_16, &IMAGE_ZOMBATAR_FACIALHAIR_16_MASK, true, 25, 100, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_17, nullptr, true, 5, 70, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_18, &IMAGE_ZOMBATAR_FACIALHAIR_18_MASK, true, 20, 56, 0, -4 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_19, nullptr, true, 8, 52, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_20, nullptr, true, 76, 40, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_21, &IMAGE_ZOMBATAR_FACIALHAIR_21_MASK, true, 80, 43, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_22, &IMAGE_ZOMBATAR_FACIALHAIR_22_MASK, true, -22, 51, -3, -5 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_23, &IMAGE_ZOMBATAR_FACIALHAIR_23_MASK, true, 20, 105, 0, 0 }, + { &IMAGE_ZOMBATAR_FACIALHAIR_24, &IMAGE_ZOMBATAR_FACIALHAIR_24_MASK, true, 0, 68, -1, 0 }, + + { &IMAGE_ZOMBATAR_TIDBITS_1, nullptr, true, -9, 24, 0, 0 }, + { &IMAGE_ZOMBATAR_TIDBITS_2, nullptr, true, -9, 24, 0, 0 }, + { &IMAGE_ZOMBATAR_TIDBITS_3, nullptr, true, 9, 72, 0, 0 }, + { &IMAGE_ZOMBATAR_TIDBITS_4, nullptr, false, -6, 23, 0, 0 }, + { &IMAGE_ZOMBATAR_TIDBITS_5, nullptr, false, -6, 19, 0, 0 }, + { &IMAGE_ZOMBATAR_TIDBITS_6, nullptr, false, -9, 27, 0, 0 }, + { &IMAGE_ZOMBATAR_TIDBITS_7, nullptr, false, -9, 33, 0, 0 }, + { &IMAGE_ZOMBATAR_TIDBITS_8, nullptr, false, -4, 16, 0, 0 }, + { &IMAGE_ZOMBATAR_TIDBITS_9, nullptr, false, -16, 37, 0, 0 }, + { &IMAGE_ZOMBATAR_TIDBITS_10, nullptr, true, -1, 32, 0, 0 }, + { &IMAGE_ZOMBATAR_TIDBITS_11, nullptr, true, -1, 31, 0, 0 }, + { &IMAGE_ZOMBATAR_TIDBITS_12, nullptr, true, 49, 52, 0, 0 }, + { &IMAGE_ZOMBATAR_TIDBITS_13, nullptr, false, 51, 11, 0, 0 }, + { &IMAGE_ZOMBATAR_TIDBITS_14, nullptr, false, 76, 76, 0, 0 }, + + { &IMAGE_ZOMBATAR_ACCESSORY_1, nullptr, false, 65, 70, 0, 0 }, + { &IMAGE_ZOMBATAR_ACCESSORY_2, nullptr, false, 70, 70, 0, 0 }, + { &IMAGE_ZOMBATAR_ACCESSORY_3, nullptr, false, 48, 73, 0, 0 }, + { &IMAGE_ZOMBATAR_ACCESSORY_4, nullptr, false, 93, 55, 0, 0 }, + { &IMAGE_ZOMBATAR_ACCESSORY_5, nullptr, false, 93, 60, 0, 0 }, + { &IMAGE_ZOMBATAR_ACCESSORY_6, nullptr, false, 93, 60, 0, 0 }, + + { &IMAGE_ZOMBATAR_ACCESSORY_8, nullptr, false, 66, 71, 0, 0 }, + { &IMAGE_ZOMBATAR_ACCESSORY_9, nullptr, false, 80, 25, 0, 0 }, + { &IMAGE_ZOMBATAR_ACCESSORY_10, nullptr, true, 23, 78, 0, 0 }, + { &IMAGE_ZOMBATAR_ACCESSORY_11, nullptr, false, 5, 60, 0, 0 }, + { &IMAGE_ZOMBATAR_ACCESSORY_12, nullptr, true, 97, 52, 0, 0 }, + { &IMAGE_ZOMBATAR_ACCESSORY_13, nullptr, false, 40, 90, 0, 0 }, + { &IMAGE_ZOMBATAR_ACCESSORY_14, nullptr, true, 30, 105, 0, 0 }, + { &IMAGE_ZOMBATAR_ACCESSORY_15, nullptr, true, 95, 30, 0, 0 }, + { &IMAGE_ZOMBATAR_ACCESSORY_16, nullptr, false, -25, 0, 0, 0 }, + + { &IMAGE_ZOMBATAR_BACKGROUND_CRAZYDAVE, nullptr, false, 0, 0, 0, 0 }, + { &IMAGE_ZOMBATAR_BACKGROUND_MENU, nullptr, false, 0, 0, 0, 0 }, + { &IMAGE_ZOMBATAR_BACKGROUND_MENU_DOS, nullptr, false, 0, 0, 0, 0 }, + { &IMAGE_ZOMBATAR_BACKGROUND_ROOF, nullptr, false, 0, 0, 0, 0 }, + { &IMAGE_ZOMBATAR_BACKGROUND_BLANK, nullptr, true, 0, 0, 0, 0 }, }; - Color gSkinColors[12] = { - Color(134, 147, 122), Color(79, 135, 94), Color(127, 135, 94), Color(120, 130, 50), - Color(156, 163, 105), Color(96, 151, 11), Color(147, 184, 77), Color(82, 143, 54), - Color(121, 168, 99), Color(65, 156, 74), Color(107, 178, 114), Color(104, 121, 90), + Color(134, 147, 122), + Color(79, 135, 94), + Color(127, 135, 94), + Color(120, 130, 50), + Color(156, 163, 105), + Color(96, 151, 11), + Color(147, 184, 77), + Color(82, 143, 54), + Color(121, 168, 99), + Color(65, 156, 74), + Color(107, 178, 114), + Color(104, 121, 90), }; -Color gMoreColors[18] = {Color(151, 33, 33), Color(199, 53, 53), Color(220, 112, 47), Color(251, 251, 172), - Color(240, 210, 87), Color(165, 126, 65), Color(106, 72, 32), Color(72, 35, 5), - Color(50, 56, 61), Color(0, 0, 0), Color(197, 239, 239), Color(63, 109, 242), - Color(13, 202, 151), Color(158, 183, 19), Color(30, 210, 64), Color(225, 65, 230), - Color(128, 47, 204), Color(255, 255, 255)}; +Color gMoreColors[18] = { Color(151, 33, 33), Color(199, 53, 53), Color(220, 112, 47), Color(251, 251, 172), + Color(240, 210, 87), Color(165, 126, 65), Color(106, 72, 32), Color(72, 35, 5), + Color(50, 56, 61), Color(0, 0, 0), Color(197, 239, 239), Color(63, 109, 242), + Color(13, 202, 151), Color(158, 183, 19), Color(30, 210, 64), Color(225, 65, 230), + Color(128, 47, 204), Color(255, 255, 255) }; static const int TimeTransitionEnd = 100; - ZombatarWidget::ZombatarWidget(LawnApp *theApp) { mPage = PAGE_SKIN; @@ -207,21 +211,21 @@ ZombatarWidget::ZombatarWidget(LawnApp *theApp) mNewZombatarButton->mOverImage = Sexy::IMAGE_ZOMBATAR_NEWZOMBIE_BUTTON_HIGHLIGHT; mNewZombatarButton->mDownImage = Sexy::IMAGE_ZOMBATAR_NEWZOMBIE_BUTTON_HIGHLIGHT; mNewZombatarButton->Resize(195, 395, Sexy::IMAGE_ZOMBATAR_NEWZOMBIE_BUTTON_HIGHLIGHT->mWidth, Sexy::IMAGE_ZOMBATAR_NEWZOMBIE_BUTTON_HIGHLIGHT->mHeight); - + mNextButton = new GameButton(ZombatarWidget::ZOMBATAR_NEXT_PORTRAIT); mNextButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_NEXT_BUTTON; mNextButton->mOverImage = Sexy::IMAGE_ZOMBATAR_NEXT_BUTTON_HIGHLIGHT; mNextButton->mDownImage = Sexy::IMAGE_ZOMBATAR_NEXT_BUTTON_HIGHLIGHT; mNextButton->Resize(467, 398, Sexy::IMAGE_ZOMBATAR_NEXT_BUTTON_HIGHLIGHT->mWidth, - Sexy::IMAGE_ZOMBATAR_NEXT_BUTTON_HIGHLIGHT->mHeight); - + Sexy::IMAGE_ZOMBATAR_NEXT_BUTTON_HIGHLIGHT->mHeight); + mPrevButton = new GameButton(ZombatarWidget::ZOMBATAR_NEXT_PORTRAIT); mPrevButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_PREV_BUTTON; mPrevButton->mOverImage = Sexy::IMAGE_ZOMBATAR_PREV_BUTTON_HIGHLIGHT; mPrevButton->mDownImage = Sexy::IMAGE_ZOMBATAR_PREV_BUTTON_HIGHLIGHT; mPrevButton->Resize(120, 398, Sexy::IMAGE_ZOMBATAR_PREV_BUTTON_HIGHLIGHT->mWidth, - Sexy::IMAGE_ZOMBATAR_PREV_BUTTON_HIGHLIGHT->mHeight); - + Sexy::IMAGE_ZOMBATAR_PREV_BUTTON_HIGHLIGHT->mHeight); + mDeleteZombatarButton = new GameButton(ZombatarWidget::ZOMBATAR_DELETE); mDeleteZombatarButton->mButtonImage = Sexy::IMAGE_BLANK; mDeleteZombatarButton->mOverImage = Sexy::IMAGE_BLANK; @@ -291,15 +295,15 @@ ZombatarWidget::ZombatarWidget(LawnApp *theApp) mNextPageButton->mOverImage = Sexy::IMAGE_ZOMBATAR_NEXT_BUTTON_HIGHLIGHT; mNextPageButton->mDownImage = Sexy::IMAGE_ZOMBATAR_NEXT_BUTTON_HIGHLIGHT; mNextPageButton->Resize(497, 372, Sexy::IMAGE_ZOMBATAR_NEXT_BUTTON_HIGHLIGHT->mWidth, - Sexy::IMAGE_ZOMBATAR_NEXT_BUTTON_HIGHLIGHT->mHeight); + Sexy::IMAGE_ZOMBATAR_NEXT_BUTTON_HIGHLIGHT->mHeight); mPrevPageButton = new GameButton(ZombatarWidget::ZOMBATAR_PREV_PAGE); mPrevPageButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_PREV_BUTTON; mPrevPageButton->mOverImage = Sexy::IMAGE_ZOMBATAR_PREV_BUTTON_HIGHLIGHT; mPrevPageButton->mDownImage = Sexy::IMAGE_ZOMBATAR_PREV_BUTTON_HIGHLIGHT; mPrevPageButton->Resize(175, 372, Sexy::IMAGE_ZOMBATAR_PREV_BUTTON_HIGHLIGHT->mWidth, - Sexy::IMAGE_ZOMBATAR_PREV_BUTTON_HIGHLIGHT->mHeight); - + Sexy::IMAGE_ZOMBATAR_PREV_BUTTON_HIGHLIGHT->mHeight); + mZombie = new Zombie(); mZombie->mBoard = nullptr; mZombie->ZombieInitialize(0, ZombieType::ZOMBIE_FLAG, false, nullptr, Zombie::ZOMBIE_WAVE_UI); @@ -311,15 +315,15 @@ ZombatarWidget::ZombatarWidget(LawnApp *theApp) for (int i = 0; i < 18; i++) { mColorRects[i] = Rect(238 + (i % 9) * (Sexy::IMAGE_ZOMBATAR_COLORPICKER->mWidth + 4), - 367 + (i / 9) * (Sexy::IMAGE_ZOMBATAR_COLORPICKER->mHeight + 4), - Sexy::IMAGE_ZOMBATAR_COLORPICKER->mWidth, - Sexy::IMAGE_ZOMBATAR_COLORPICKER->mHeight); + 367 + (i / 9) * (Sexy::IMAGE_ZOMBATAR_COLORPICKER->mHeight + 4), + Sexy::IMAGE_ZOMBATAR_COLORPICKER->mWidth, + Sexy::IMAGE_ZOMBATAR_COLORPICKER->mHeight); } for (int i = 0; i < 18; i++) { mItemRects[i] = Rect(166 + (i % 6) * (Sexy::IMAGE_ZOMBATAR_ACCESSORY_BG->mWidth - 4), - 137 + (i / 6) * (Sexy::IMAGE_ZOMBATAR_ACCESSORY_BG->mHeight - 1), Sexy::IMAGE_ZOMBATAR_ACCESSORY_BG->mWidth, Sexy::IMAGE_ZOMBATAR_ACCESSORY_BG->mHeight); + 137 + (i / 6) * (Sexy::IMAGE_ZOMBATAR_ACCESSORY_BG->mHeight - 1), Sexy::IMAGE_ZOMBATAR_ACCESSORY_BG->mWidth, Sexy::IMAGE_ZOMBATAR_ACCESSORY_BG->mHeight); } ChangePage(mPage); @@ -380,173 +384,145 @@ void ZombatarWidget::ChangePage(ZombatarPage thePage) mSubPage = 0; mMaxSubPages = 0; - switch (mPage) { - case PAGE_SKIN: - { - mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_SKIN_BUTTON; - mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_SKIN_BUTTON; - mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_SKIN_BUTTON; - break; - } - case PAGE_HAIR: - { - mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_HAIR_BUTTON; - mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_HAIR_BUTTON_OVER; - mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_HAIR_BUTTON_OVER; - break; - } - case PAGE_FACIAL_HAIR: - { - mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_FACIAL_HAIR_BUTTON; - mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_FACIAL_HAIR_BUTTON_OVER; - mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_FACIAL_HAIR_BUTTON_OVER; - break; - } - case PAGE_TIDBITS: - { - mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_TIDBITS_BUTTON; - mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_TIDBITS_BUTTON_OVER; - mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_TIDBITS_BUTTON_OVER; - break; - } - case PAGE_EYEWEAR: - { - mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_EYEWEAR_BUTTON; - mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_EYEWEAR_BUTTON_OVER; - mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_EYEWEAR_BUTTON_OVER; - break; - } - case PAGE_CLOTHES: - { - mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_CLOTHES_BUTTON; - mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_CLOTHES_BUTTON_OVER; - mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_CLOTHES_BUTTON_OVER; - break; - } - case PAGE_ACCESSORIES: - { - mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_ACCESSORY_BUTTON; - mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_ACCESSORY_BUTTON_OVER; - mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_ACCESSORY_BUTTON_OVER; - break; - } - case PAGE_HATS: - { - mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_HATS_BUTTON; - mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_HATS_BUTTON_OVER; - mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_HATS_BUTTON_OVER; - break; - } - case PAGE_BACKDROPS: - { - mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_BACKDROPS_BUTTON; - mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_BACKDROPS_BUTTON_OVER; - mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_BACKDROPS_BUTTON_OVER; - break; - } + case PAGE_SKIN: { + mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_SKIN_BUTTON; + mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_SKIN_BUTTON; + mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_SKIN_BUTTON; + break; + } + case PAGE_HAIR: { + mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_HAIR_BUTTON; + mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_HAIR_BUTTON_OVER; + mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_HAIR_BUTTON_OVER; + break; + } + case PAGE_FACIAL_HAIR: { + mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_FACIAL_HAIR_BUTTON; + mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_FACIAL_HAIR_BUTTON_OVER; + mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_FACIAL_HAIR_BUTTON_OVER; + break; + } + case PAGE_TIDBITS: { + mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_TIDBITS_BUTTON; + mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_TIDBITS_BUTTON_OVER; + mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_TIDBITS_BUTTON_OVER; + break; + } + case PAGE_EYEWEAR: { + mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_EYEWEAR_BUTTON; + mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_EYEWEAR_BUTTON_OVER; + mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_EYEWEAR_BUTTON_OVER; + break; + } + case PAGE_CLOTHES: { + mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_CLOTHES_BUTTON; + mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_CLOTHES_BUTTON_OVER; + mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_CLOTHES_BUTTON_OVER; + break; + } + case PAGE_ACCESSORIES: { + mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_ACCESSORY_BUTTON; + mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_ACCESSORY_BUTTON_OVER; + mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_ACCESSORY_BUTTON_OVER; + break; + } + case PAGE_HATS: { + mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_HATS_BUTTON; + mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_HATS_BUTTON_OVER; + mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_HATS_BUTTON_OVER; + break; + } + case PAGE_BACKDROPS: { + mToggledButton->mButtonImage = Sexy::IMAGE_ZOMBATAR_BACKDROPS_BUTTON; + mToggledButton->mOverImage = Sexy::IMAGE_ZOMBATAR_BACKDROPS_BUTTON_OVER; + mToggledButton->mDownImage = Sexy::IMAGE_ZOMBATAR_BACKDROPS_BUTTON_OVER; + break; + } } mToggledButton->mDisabled = false; mPage = thePage; switch (mPage) { - case PAGE_SKIN: - { - mToggledButton = mSkinButton; - break; - } - case PAGE_HAIR: - { - mToggledButton = mHairButton; - break; - } - case PAGE_FACIAL_HAIR: - { - mToggledButton = mFacialHairButton; - mMaxSubPages = 1; - break; - } - case PAGE_TIDBITS: - { - mToggledButton = mTidbitsButton; - break; - } - case PAGE_EYEWEAR: - { - mToggledButton = mEyewearButton; - break; - } - case PAGE_CLOTHES: - { - mToggledButton = mClothesButton; - break; - } - case PAGE_ACCESSORIES: - { - mToggledButton = mAccessoriesButton; - break; - } - case PAGE_HATS: - { - mToggledButton = mHatsButton; - break; - } - case PAGE_BACKDROPS: - { - mToggledButton = mBackdropsButton; - break; - } + case PAGE_SKIN: { + mToggledButton = mSkinButton; + break; + } + case PAGE_HAIR: { + mToggledButton = mHairButton; + break; + } + case PAGE_FACIAL_HAIR: { + mToggledButton = mFacialHairButton; + mMaxSubPages = 1; + break; + } + case PAGE_TIDBITS: { + mToggledButton = mTidbitsButton; + break; + } + case PAGE_EYEWEAR: { + mToggledButton = mEyewearButton; + break; + } + case PAGE_CLOTHES: { + mToggledButton = mClothesButton; + break; + } + case PAGE_ACCESSORIES: { + mToggledButton = mAccessoriesButton; + break; + } + case PAGE_HATS: { + mToggledButton = mHatsButton; + break; + } + case PAGE_BACKDROPS: { + mToggledButton = mBackdropsButton; + break; + } } Image *aNewImage = nullptr; switch (mPage) { - case PAGE_SKIN: - { - aNewImage = Sexy::IMAGE_ZOMBATAR_SKIN_BUTTON_HIGHLIGHT; - break; - } - case PAGE_HAIR: - { - aNewImage = Sexy::IMAGE_ZOMBATAR_HAIR_BUTTON_HIGHLIGHT; - break; - } - case PAGE_FACIAL_HAIR: - { - aNewImage = Sexy::IMAGE_ZOMBATAR_FACIAL_HAIR_BUTTON_HIGHLIGHT; - break; - } - case PAGE_TIDBITS: - { - aNewImage = Sexy::IMAGE_ZOMBATAR_TIDBITS_BUTTON_HIGHLIGHT; - break; - } - case PAGE_EYEWEAR: - { - aNewImage = Sexy::IMAGE_ZOMBATAR_EYEWEAR_BUTTON_HIGHLIGHT; - break; - } - case PAGE_CLOTHES: - { - aNewImage = Sexy::IMAGE_ZOMBATAR_CLOTHES_BUTTON_HIGHLIGHT; - break; - } - case PAGE_ACCESSORIES: - { - aNewImage = Sexy::IMAGE_ZOMBATAR_ACCESSORY_BUTTON_HIGHLIGHT; - break; - } - case PAGE_HATS: - { - aNewImage = Sexy::IMAGE_ZOMBATAR_HATS_BUTTON_HIGHLIGHT; - break; - } - case PAGE_BACKDROPS: - { - aNewImage = Sexy::IMAGE_ZOMBATAR_BACKDROPS_BUTTON_HIGHLIGHT; - break; - } + case PAGE_SKIN: { + aNewImage = Sexy::IMAGE_ZOMBATAR_SKIN_BUTTON_HIGHLIGHT; + break; + } + case PAGE_HAIR: { + aNewImage = Sexy::IMAGE_ZOMBATAR_HAIR_BUTTON_HIGHLIGHT; + break; + } + case PAGE_FACIAL_HAIR: { + aNewImage = Sexy::IMAGE_ZOMBATAR_FACIAL_HAIR_BUTTON_HIGHLIGHT; + break; + } + case PAGE_TIDBITS: { + aNewImage = Sexy::IMAGE_ZOMBATAR_TIDBITS_BUTTON_HIGHLIGHT; + break; + } + case PAGE_EYEWEAR: { + aNewImage = Sexy::IMAGE_ZOMBATAR_EYEWEAR_BUTTON_HIGHLIGHT; + break; + } + case PAGE_CLOTHES: { + aNewImage = Sexy::IMAGE_ZOMBATAR_CLOTHES_BUTTON_HIGHLIGHT; + break; + } + case PAGE_ACCESSORIES: { + aNewImage = Sexy::IMAGE_ZOMBATAR_ACCESSORY_BUTTON_HIGHLIGHT; + break; + } + case PAGE_HATS: { + aNewImage = Sexy::IMAGE_ZOMBATAR_HATS_BUTTON_HIGHLIGHT; + break; + } + case PAGE_BACKDROPS: { + aNewImage = Sexy::IMAGE_ZOMBATAR_BACKDROPS_BUTTON_HIGHLIGHT; + break; + } } mToggledButton->mButtonImage = aNewImage; @@ -597,33 +573,33 @@ int ZombatarWidget::GetPageColorIndex(ZombatarPage thePage) { switch (thePage) { - case PAGE_SKIN: { - return mZombatar.mSkinColor; - } - case PAGE_HAIR: { - return mZombatar.mHairColor; - } - case PAGE_FACIAL_HAIR: { - return mZombatar.mFacialHairColor; - } - case PAGE_TIDBITS: { - return mZombatar.mTidbitsColor; - } - case PAGE_EYEWEAR: { - return mZombatar.mEyewearColor; - } - case PAGE_CLOTHES: { - return mZombatar.mClothesColor; - } - case PAGE_ACCESSORIES: { - return mZombatar.mAccessoriesColor; - } - case PAGE_HATS: { - return mZombatar.mHatColor; - } - case PAGE_BACKDROPS: { - return mZombatar.mBackdropColor; - } + case PAGE_SKIN: { + return mZombatar.mSkinColor; + } + case PAGE_HAIR: { + return mZombatar.mHairColor; + } + case PAGE_FACIAL_HAIR: { + return mZombatar.mFacialHairColor; + } + case PAGE_TIDBITS: { + return mZombatar.mTidbitsColor; + } + case PAGE_EYEWEAR: { + return mZombatar.mEyewearColor; + } + case PAGE_CLOTHES: { + return mZombatar.mClothesColor; + } + case PAGE_ACCESSORIES: { + return mZombatar.mAccessoriesColor; + } + case PAGE_HATS: { + return mZombatar.mHatColor; + } + case PAGE_BACKDROPS: { + return mZombatar.mBackdropColor; + } } return -1; } @@ -632,30 +608,30 @@ int ZombatarWidget::GetPageItemIndex(ZombatarPage thePage) { switch (thePage) { - case PAGE_HAIR: { - return mZombatar.mHair; - } - case PAGE_FACIAL_HAIR: { - return mZombatar.mFacialHair; - } - case PAGE_TIDBITS: { - return mZombatar.mTidbits; - } - case PAGE_EYEWEAR: { - return mZombatar.mEyewear; - } - case PAGE_CLOTHES: { - return mZombatar.mClothes; - } - case PAGE_ACCESSORIES: { - return mZombatar.mAccessories; - } - case PAGE_HATS: { - return mZombatar.mHat; - } - case PAGE_BACKDROPS: { - return mZombatar.mBackdrop; - } + case PAGE_HAIR: { + return mZombatar.mHair; + } + case PAGE_FACIAL_HAIR: { + return mZombatar.mFacialHair; + } + case PAGE_TIDBITS: { + return mZombatar.mTidbits; + } + case PAGE_EYEWEAR: { + return mZombatar.mEyewear; + } + case PAGE_CLOTHES: { + return mZombatar.mClothes; + } + case PAGE_ACCESSORIES: { + return mZombatar.mAccessories; + } + case PAGE_HATS: { + return mZombatar.mHat; + } + case PAGE_BACKDROPS: { + return mZombatar.mBackdrop; + } } return -1; } @@ -664,30 +640,30 @@ int ZombatarWidget::GetItemCount(ZombatarPage thePage) { switch (thePage) { - case PAGE_HAIR: { - return 16; - } - case PAGE_FACIAL_HAIR: { - return mSubPage == 0 ? 17 : 7; - } - case PAGE_TIDBITS: { - return 14; - } - case PAGE_EYEWEAR: { - return 16; - } - case PAGE_CLOTHES: { - return 12; - } - case PAGE_ACCESSORIES: { - return 15; - } - case PAGE_HATS: { - return 14; - } - case PAGE_BACKDROPS: { - return 5; - } + case PAGE_HAIR: { + return 16; + } + case PAGE_FACIAL_HAIR: { + return mSubPage == 0 ? 17 : 7; + } + case PAGE_TIDBITS: { + return 14; + } + case PAGE_EYEWEAR: { + return 16; + } + case PAGE_CLOTHES: { + return 12; + } + case PAGE_ACCESSORIES: { + return 15; + } + case PAGE_HATS: { + return 14; + } + case PAGE_BACKDROPS: { + return 5; + } } return -1; } @@ -767,12 +743,11 @@ void ZombatarWidget::DrawPortraitItem(int theItem, Graphics *g, const Zombatar & g->DrawImage(*anItem.mLine, anItem.mOffsetX, anItem.mOffsetY); else { - g->DrawImage(*anItem.mColor, anItem.mOffsetX , anItem.mOffsetY); + g->DrawImage(*anItem.mColor, anItem.mOffsetX, anItem.mOffsetY); g->SetColor(Color::White); g->DrawImage(*anItem.mLine, anItem.mOffsetX + anItem.mColorOffsetX, anItem.mOffsetY + anItem.mColorOffsetY); } g->PopState(); - } int ItemTypeOffset(ZombatarPage thePage) @@ -820,14 +795,13 @@ void ZombatarWidget::Draw(Graphics *g) if (mState == STATE_AVATAR_LIST) { - TodDrawString(g, StrFormat("%d / %d", mApp->mPlayerInfo->mZombatarIndex + 1, mApp->mPlayerInfo->mNumZombatars), 221, 161, Sexy::FONT_BRIANNETOD12, Color::White, DS_ALIGN_LEFT); + TodDrawString(g, StrFormat("%d / %d", mApp->mPlayerInfo->mZombatarIndex + 1, mApp->mPlayerInfo->mNumZombatars), 221, 161, Sexy::FONT_BRIANNETOD12, Color::White, DS_ALIGN_LEFT); g->ClipRect(58, 113, 497, 365); for (int i = 0; i < mApp->mPlayerInfo->mNumZombatars; i++) { int x = 220 + (i - mApp->mPlayerInfo->mZombatarIndex) * 220; DrawIndexedPortrait(i, g, x, 175); - } g->ClearClipRect(); mNewZombatarButton->Draw(g); @@ -910,15 +884,13 @@ void ZombatarWidget::Draw(Graphics *g) TodDrawImageScaledF(g, *gPortraitItems[aProcessedIndex].mColor, aPosX, aPosY, aScaleX, aScaleY); TodDrawImageScaledF(g, *gPortraitItems[aProcessedIndex].mLine, - aPosX + (gPortraitItems[aProcessedIndex].mColorOffsetX * aScaleX), - aPosY + (gPortraitItems[aProcessedIndex].mColorOffsetY * aScaleY), aScaleX, aScaleY); - - + aPosX + (gPortraitItems[aProcessedIndex].mColorOffsetX * aScaleX), + aPosY + (gPortraitItems[aProcessedIndex].mColorOffsetY * aScaleY), aScaleX, aScaleY); } g->SetColorizeImages(false); } - + if (mPage == PAGE_SKIN || (aCurrentItemIndex != -1 && gPortraitItems[aItemIndex].mAllowColor)) { int aMaxColor = 18; @@ -940,8 +912,8 @@ void ZombatarWidget::Draw(Graphics *g) } g->DrawImage( - i == 17 ? Sexy::IMAGE_ZOMBATAR_COLORPICKER_NONE : Sexy::IMAGE_ZOMBATAR_COLORPICKER, mColorRects[i], - Rect(0, 0, Sexy::IMAGE_ZOMBATAR_COLORPICKER->mWidth, Sexy::IMAGE_ZOMBATAR_COLORPICKER->mHeight)); + i == 17 ? Sexy::IMAGE_ZOMBATAR_COLORPICKER_NONE : Sexy::IMAGE_ZOMBATAR_COLORPICKER, mColorRects[i], + Rect(0, 0, Sexy::IMAGE_ZOMBATAR_COLORPICKER->mWidth, Sexy::IMAGE_ZOMBATAR_COLORPICKER->mHeight)); g->SetColorizeImages(false); } } @@ -952,13 +924,12 @@ void ZombatarWidget::Draw(Graphics *g) TodDrawString(g, "[ZOMBATAR_COLOR_ITEM_NOT_CHOSEN]", 349, 394, Sexy::FONT_BRIANNETOD12, Color(255, 255, 255), DS_ALIGN_CENTER); else TodDrawString(g, "[ZOMBATAR_COLOR_NOT_APPLICABLE]", 349, 394, Sexy::FONT_BRIANNETOD12, Color(255, 255, 255), DS_ALIGN_CENTER); - } if (mPage == PAGE_SKIN) { TodDrawStringWrapped(g, "[ZOMBATAR_START_TEXT]", Rect(145, 185, 420, 120), Sexy::FONT_DWARVENTODCRAFT15, - Color(208, 190, 44), DS_ALIGN_CENTER); + Color(208, 190, 44), DS_ALIGN_CENTER); } if (mMaxSubPages > 0) @@ -977,7 +948,7 @@ void ZombatarWidget::Draw(Graphics *g) g->PopState(); g->PushState(); - + if (mPrevPageButton->mDisabled) { g->mColor.mAlpha = 44; @@ -986,7 +957,6 @@ void ZombatarWidget::Draw(Graphics *g) g->PopState(); g->SetColorizeImages(false); - } mSkinButton->Draw(g); @@ -1002,7 +972,6 @@ void ZombatarWidget::Draw(Graphics *g) if (mTransitionTimer == 0 && mApp->mPlayerInfo->mNumZombatars > 0) mViewButton->Draw(g); - if (mState == STATE_CONFIRM_TRANSITION) { g->SetColorizeImages(true); @@ -1013,7 +982,6 @@ void ZombatarWidget::Draw(Graphics *g) mFinishedButton->mX = TodAnimateCurve(0, TimeTransitionEnd, mTransitionTimer, 445, 155, TodCurves::CURVE_LINEAR); mFinishedButton->mY = TodAnimateCurve(0, TimeTransitionEnd, mTransitionTimer, 472, 345, TodCurves::CURVE_LINEAR); - } else if (mState == STATE_AVATAR_TRANSITION) { @@ -1025,7 +993,6 @@ void ZombatarWidget::Draw(Graphics *g) mFinishedButton->mX = TodAnimateCurve(0, TimeTransitionEnd, mTransitionTimer, 155, 445, TodCurves::CURVE_LINEAR); mFinishedButton->mY = TodAnimateCurve(0, TimeTransitionEnd, mTransitionTimer, 345, 472, TodCurves::CURVE_LINEAR); - } else if (mState == STATE_CONFIRM) { @@ -1094,18 +1061,17 @@ void ZombatarWidget::Update() break; } } - } if (mHasFocus) { if (mViewButton->IsMouseOver() || mBackButton->IsMouseOver() || mFinishedButton->IsMouseOver() || - mSkinButton->IsMouseOver() || mHairButton->IsMouseOver() || mFacialHairButton->IsMouseOver() || - mTidbitsButton->IsMouseOver() || mEyewearButton->IsMouseOver() || mClothesButton->IsMouseOver() || - mAccessoriesButton->IsMouseOver() || mHatsButton->IsMouseOver() || mBackdropsButton->IsMouseOver() || - mAvatarBackButton->IsMouseOver() || mNewZombatarButton->IsMouseOver() || mNextButton->IsMouseOver() || - mPrevButton->IsMouseOver() || mDeleteZombatarButton->IsMouseOver() || mPrevPageButton->IsMouseOver() || - mNextPageButton->IsMouseOver() || anOverlapsColor || anOverlapsItem) + mSkinButton->IsMouseOver() || mHairButton->IsMouseOver() || mFacialHairButton->IsMouseOver() || + mTidbitsButton->IsMouseOver() || mEyewearButton->IsMouseOver() || mClothesButton->IsMouseOver() || + mAccessoriesButton->IsMouseOver() || mHatsButton->IsMouseOver() || mBackdropsButton->IsMouseOver() || + mAvatarBackButton->IsMouseOver() || mNewZombatarButton->IsMouseOver() || mNextButton->IsMouseOver() || + mPrevButton->IsMouseOver() || mDeleteZombatarButton->IsMouseOver() || mPrevPageButton->IsMouseOver() || + mNextPageButton->IsMouseOver() || anOverlapsColor || anOverlapsItem) { mApp->SetCursor(CURSOR_HAND); } @@ -1170,176 +1136,176 @@ void ZombatarWidget::GetPortraitItemOffset(int theItem, int *theOffsetX, int *th switch (theItem) { - case ZombatarItem::ZOMBATAR_HAIR_1: - *theOffsetX = -9.0f; - *theOffsetY = -2.0f; - break; - case ZombatarItem::ZOMBATAR_HAIR_2: - *theOffsetX = -2.0f; - *theOffsetY = -4.0f; - break; - case ZombatarItem::ZOMBATAR_HAIR_11: - *theOffsetX = -3.0f; - *theOffsetY = -3.0f; - break; - case ZombatarItem::ZOMBATAR_HAIR_12: - *theOffsetX = -2.0f; - *theOffsetY = -4.0f; - break; - case ZombatarItem::ZOMBATAR_HAIR_13: - *theOffsetX = -3.0f; - *theOffsetY = -2.0f; - break; - case ZombatarItem::ZOMBATAR_HAIR_14: - *theOffsetX = -3.0f; - *theOffsetY = -6.0f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_1: - case ZombatarItem::ZOMBATAR_EYEWEAR_3: - *theOffsetX = 1.0f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_6: - *theOffsetY = 1.0f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_2: - case ZombatarItem::ZOMBATAR_EYEWEAR_4: - case ZombatarItem::ZOMBATAR_EYEWEAR_5: - case ZombatarItem::ZOMBATAR_EYEWEAR_7: - case ZombatarItem::ZOMBATAR_EYEWEAR_8: - case ZombatarItem::ZOMBATAR_EYEWEAR_9: - case ZombatarItem::ZOMBATAR_EYEWEAR_10: - case ZombatarItem::ZOMBATAR_EYEWEAR_11: - case ZombatarItem::ZOMBATAR_EYEWEAR_12: - *theOffsetX = 1.0f; - *theOffsetY = 1.0f; - break; - case ZombatarItem::ZOMBATAR_HATS_1: - *theOffsetX = -2.0f; - *theOffsetY = -1.0f; - break; - case ZombatarItem::ZOMBATAR_HATS_3: - *theOffsetX = 10.0f; - *theOffsetY = 7.0f; - break; - case ZombatarItem::ZOMBATAR_HATS_6: - *theOffsetX = -4.0f; - *theOffsetY = 2.0f; - break; - case ZombatarItem::ZOMBATAR_HATS_7: - *theOffsetX = 1.0f; - *theOffsetY = 25.0f; - break; - case ZombatarItem::ZOMBATAR_HATS_8: - case ZombatarItem::ZOMBATAR_HATS_9: - *theOffsetX = 2.0f; - *theOffsetY = 2.0f; - break; - case ZombatarItem::ZOMBATAR_HATS_10: - *theOffsetX = -1.0f; - *theOffsetY = 15.0f; - break; - case ZombatarItem::ZOMBATAR_HATS_11: - *theOffsetX = -1.0f; - *theOffsetY = -10.0f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_1: - *theOffsetY = 40.0f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_2: - *theOffsetX = 10.0f; - *theOffsetY = 10.0f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_3: - *theOffsetX = 7.0f; - *theOffsetY = 20.0f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_5: - *theOffsetX = 12.0f; - *theOffsetY = 20.0f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_6: - *theOffsetX = 8.0f; - *theOffsetY = 20.0f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_7: - *theOffsetY = 40.0f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_14: - *theOffsetY = 40.0f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_15: - *theOffsetX = 20.0f; - *theOffsetY = 40.0f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_16: - *theOffsetX = 20.0f; - *theOffsetY = 40.0f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_17: - *theOffsetX = 7.0f; - *theOffsetY = 20.0f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_21: - case ZombatarItem::ZOMBATAR_FACIALHAIR_20: - *theOffsetX = 30.0f; - *theOffsetY = 20.0f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_22: - *theOffsetX = 10.0f; - *theOffsetY = 20.0f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_23: - *theOffsetX = 20.0f; - *theOffsetY = 20.0f; - break; - case ZombatarItem::ZOMBATAR_ACCESSORY_1: - case ZombatarItem::ZOMBATAR_ACCESSORY_2: - case ZombatarItem::ZOMBATAR_ACCESSORY_4: - case ZombatarItem::ZOMBATAR_ACCESSORY_5: - case ZombatarItem::ZOMBATAR_ACCESSORY_6: - case ZombatarItem::ZOMBATAR_ACCESSORY_8: - case ZombatarItem::ZOMBATAR_ACCESSORY_9: - case ZombatarItem::ZOMBATAR_ACCESSORY_11: - case ZombatarItem::ZOMBATAR_ACCESSORY_12: - case ZombatarItem::ZOMBATAR_ACCESSORY_13: - case ZombatarItem::ZOMBATAR_ACCESSORY_14: - *theOffsetX = 20.0f; - *theOffsetY = 20.0f; - break; - case ZombatarItem::ZOMBATAR_CLOTHES_2: - *theOffsetX = -3.0f; - *theOffsetY = 20.0f; - break; - - case ZombatarItem::ZOMBATAR_CLOTHES_4: - *theOffsetX = 0.0f; - *theOffsetY = 33.0f; - break; - case ZombatarItem::ZOMBATAR_CLOTHES_7: - *theOffsetX = 0.0f; - *theOffsetY = 27.0f; - break; - case ZombatarItem::ZOMBATAR_CLOTHES_9: - *theOffsetX = 13.0f; - *theOffsetY = 22.0f; - break; - case ZombatarItem::ZOMBATAR_CLOTHES_10: - *theOffsetX = 12.0f; - *theOffsetY = 29.0f; - break; - case ZombatarItem::ZOMBATAR_CLOTHES_12: - *theOffsetX = 6.0f; - *theOffsetY = 33.0f; - break; - case ZombatarItem::ZOMBATAR_CLOTHES_1: - case ZombatarItem::ZOMBATAR_CLOTHES_3: - case ZombatarItem::ZOMBATAR_CLOTHES_5: - case ZombatarItem::ZOMBATAR_CLOTHES_6: - case ZombatarItem::ZOMBATAR_CLOTHES_8: - case ZombatarItem::ZOMBATAR_CLOTHES_11: - *theOffsetX = 12.0f; - *theOffsetY = 33.0f; - break; + case ZombatarItem::ZOMBATAR_HAIR_1: + *theOffsetX = -9.0f; + *theOffsetY = -2.0f; + break; + case ZombatarItem::ZOMBATAR_HAIR_2: + *theOffsetX = -2.0f; + *theOffsetY = -4.0f; + break; + case ZombatarItem::ZOMBATAR_HAIR_11: + *theOffsetX = -3.0f; + *theOffsetY = -3.0f; + break; + case ZombatarItem::ZOMBATAR_HAIR_12: + *theOffsetX = -2.0f; + *theOffsetY = -4.0f; + break; + case ZombatarItem::ZOMBATAR_HAIR_13: + *theOffsetX = -3.0f; + *theOffsetY = -2.0f; + break; + case ZombatarItem::ZOMBATAR_HAIR_14: + *theOffsetX = -3.0f; + *theOffsetY = -6.0f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_1: + case ZombatarItem::ZOMBATAR_EYEWEAR_3: + *theOffsetX = 1.0f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_6: + *theOffsetY = 1.0f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_2: + case ZombatarItem::ZOMBATAR_EYEWEAR_4: + case ZombatarItem::ZOMBATAR_EYEWEAR_5: + case ZombatarItem::ZOMBATAR_EYEWEAR_7: + case ZombatarItem::ZOMBATAR_EYEWEAR_8: + case ZombatarItem::ZOMBATAR_EYEWEAR_9: + case ZombatarItem::ZOMBATAR_EYEWEAR_10: + case ZombatarItem::ZOMBATAR_EYEWEAR_11: + case ZombatarItem::ZOMBATAR_EYEWEAR_12: + *theOffsetX = 1.0f; + *theOffsetY = 1.0f; + break; + case ZombatarItem::ZOMBATAR_HATS_1: + *theOffsetX = -2.0f; + *theOffsetY = -1.0f; + break; + case ZombatarItem::ZOMBATAR_HATS_3: + *theOffsetX = 10.0f; + *theOffsetY = 7.0f; + break; + case ZombatarItem::ZOMBATAR_HATS_6: + *theOffsetX = -4.0f; + *theOffsetY = 2.0f; + break; + case ZombatarItem::ZOMBATAR_HATS_7: + *theOffsetX = 1.0f; + *theOffsetY = 25.0f; + break; + case ZombatarItem::ZOMBATAR_HATS_8: + case ZombatarItem::ZOMBATAR_HATS_9: + *theOffsetX = 2.0f; + *theOffsetY = 2.0f; + break; + case ZombatarItem::ZOMBATAR_HATS_10: + *theOffsetX = -1.0f; + *theOffsetY = 15.0f; + break; + case ZombatarItem::ZOMBATAR_HATS_11: + *theOffsetX = -1.0f; + *theOffsetY = -10.0f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_1: + *theOffsetY = 40.0f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_2: + *theOffsetX = 10.0f; + *theOffsetY = 10.0f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_3: + *theOffsetX = 7.0f; + *theOffsetY = 20.0f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_5: + *theOffsetX = 12.0f; + *theOffsetY = 20.0f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_6: + *theOffsetX = 8.0f; + *theOffsetY = 20.0f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_7: + *theOffsetY = 40.0f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_14: + *theOffsetY = 40.0f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_15: + *theOffsetX = 20.0f; + *theOffsetY = 40.0f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_16: + *theOffsetX = 20.0f; + *theOffsetY = 40.0f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_17: + *theOffsetX = 7.0f; + *theOffsetY = 20.0f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_21: + case ZombatarItem::ZOMBATAR_FACIALHAIR_20: + *theOffsetX = 30.0f; + *theOffsetY = 20.0f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_22: + *theOffsetX = 10.0f; + *theOffsetY = 20.0f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_23: + *theOffsetX = 20.0f; + *theOffsetY = 20.0f; + break; + case ZombatarItem::ZOMBATAR_ACCESSORY_1: + case ZombatarItem::ZOMBATAR_ACCESSORY_2: + case ZombatarItem::ZOMBATAR_ACCESSORY_4: + case ZombatarItem::ZOMBATAR_ACCESSORY_5: + case ZombatarItem::ZOMBATAR_ACCESSORY_6: + case ZombatarItem::ZOMBATAR_ACCESSORY_8: + case ZombatarItem::ZOMBATAR_ACCESSORY_9: + case ZombatarItem::ZOMBATAR_ACCESSORY_11: + case ZombatarItem::ZOMBATAR_ACCESSORY_12: + case ZombatarItem::ZOMBATAR_ACCESSORY_13: + case ZombatarItem::ZOMBATAR_ACCESSORY_14: + *theOffsetX = 20.0f; + *theOffsetY = 20.0f; + break; + case ZombatarItem::ZOMBATAR_CLOTHES_2: + *theOffsetX = -3.0f; + *theOffsetY = 20.0f; + break; + + case ZombatarItem::ZOMBATAR_CLOTHES_4: + *theOffsetX = 0.0f; + *theOffsetY = 33.0f; + break; + case ZombatarItem::ZOMBATAR_CLOTHES_7: + *theOffsetX = 0.0f; + *theOffsetY = 27.0f; + break; + case ZombatarItem::ZOMBATAR_CLOTHES_9: + *theOffsetX = 13.0f; + *theOffsetY = 22.0f; + break; + case ZombatarItem::ZOMBATAR_CLOTHES_10: + *theOffsetX = 12.0f; + *theOffsetY = 29.0f; + break; + case ZombatarItem::ZOMBATAR_CLOTHES_12: + *theOffsetX = 6.0f; + *theOffsetY = 33.0f; + break; + case ZombatarItem::ZOMBATAR_CLOTHES_1: + case ZombatarItem::ZOMBATAR_CLOTHES_3: + case ZombatarItem::ZOMBATAR_CLOTHES_5: + case ZombatarItem::ZOMBATAR_CLOTHES_6: + case ZombatarItem::ZOMBATAR_CLOTHES_8: + case ZombatarItem::ZOMBATAR_CLOTHES_11: + *theOffsetX = 12.0f; + *theOffsetY = 33.0f; + break; } } @@ -1348,283 +1314,282 @@ void ZombatarWidget::GetPortraitItemScale(int theItem, float *theScaleX, float * //Scale recreated by @InLiothixi for Stable Decompile switch (theItem) { - case ZombatarItem::ZOMBATAR_HAIR_14: - *theScaleX = 0.2875f; - *theScaleY = 0.2875f; - break; - case ZombatarItem::ZOMBATAR_HAIR_10: - *theScaleX = 0.3f; - *theScaleY = 0.3f; - break; - case ZombatarItem::ZOMBATAR_HAIR_2: - case ZombatarItem::ZOMBATAR_HAIR_4: - *theScaleX = 0.325f; - *theScaleY = 0.325f; - break; - case ZombatarItem::ZOMBATAR_HAIR_1: - case ZombatarItem::ZOMBATAR_HAIR_3: - case ZombatarItem::ZOMBATAR_HAIR_8: - case ZombatarItem::ZOMBATAR_HAIR_13: - case ZombatarItem::ZOMBATAR_HAIR_15: - case ZombatarItem::ZOMBATAR_HAIR_16: - case ZombatarItem::ZOMBATAR_HAIR_12: - *theScaleX = 0.35f; - *theScaleY = 0.35f; - break; - case ZombatarItem::ZOMBATAR_HAIR_11: - *theScaleX = 0.375f; - *theScaleY = 0.375f; - break; - case ZombatarItem::ZOMBATAR_HAIR_5: - *theScaleX = 0.4f; - *theScaleY = 0.4f; - break; - case ZombatarItem::ZOMBATAR_HAIR_6: - *theScaleX = 0.425f; - *theScaleY = 0.425f; - break; - case ZombatarItem::ZOMBATAR_HAIR_7: - *theScaleX = 0.5f; - *theScaleY = 0.5f; - break; - case ZombatarItem::ZOMBATAR_HAIR_9: - *theScaleX = 1.4f; - *theScaleY = 0.9f; - break; - case ZombatarItem::ZOMBATAR_TIDBITS_1: - *theScaleX = 0.475f; - *theScaleY = 0.475f; - break; - case ZombatarItem::ZOMBATAR_TIDBITS_2: - *theScaleX = 0.48f; - *theScaleY = 0.44f; - break; - case ZombatarItem::ZOMBATAR_TIDBITS_5: - case ZombatarItem::ZOMBATAR_TIDBITS_6: - *theScaleX = 0.48f; - *theScaleY = 0.48f; - break; - case ZombatarItem::ZOMBATAR_TIDBITS_7: - *theScaleX = 0.49f; - *theScaleY = 0.49f; - break; - case ZombatarItem::ZOMBATAR_TIDBITS_11: - *theScaleX = 0.5f; - *theScaleY = 0.5f; - break; - case ZombatarItem::ZOMBATAR_TIDBITS_8: - case ZombatarItem::ZOMBATAR_TIDBITS_10: - *theScaleX = 0.515f; - *theScaleY = 0.515f; - break; - case ZombatarItem::ZOMBATAR_TIDBITS_4: - *theScaleX = 0.52f; - *theScaleY = 0.52f; - break; - case ZombatarItem::ZOMBATAR_TIDBITS_3: - *theScaleX = 0.75f; - *theScaleY = 0.75f; - break; - case ZombatarItem::ZOMBATAR_TIDBITS_13: - *theScaleX = 0.875f; - *theScaleY = 0.625f; - break; - case ZombatarItem::ZOMBATAR_TIDBITS_9: - case ZombatarItem::ZOMBATAR_TIDBITS_12: - case ZombatarItem::ZOMBATAR_TIDBITS_14: - *theScaleX = 1.0f; - *theScaleY = 1.0f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_1: - *theScaleX = 0.39f; - *theScaleY = 0.39f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_3: - case ZombatarItem::ZOMBATAR_EYEWEAR_4: - case ZombatarItem::ZOMBATAR_EYEWEAR_6: - *theScaleX = 0.4f; - *theScaleY = 0.39f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_5: - *theScaleX = 0.4115f; - *theScaleY = 0.39f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_2: - *theScaleX = 0.4125f; - *theScaleY = 0.39f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_10: - *theScaleX = 0.4125f; - *theScaleY = 0.4125f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_8: - case ZombatarItem::ZOMBATAR_EYEWEAR_11: - *theScaleX = 0.425f; - *theScaleY = 0.425f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_14: - case ZombatarItem::ZOMBATAR_EYEWEAR_16: - *theScaleX = 0.45f; - *theScaleY = 0.45f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_12: - *theScaleX = 0.475f; - *theScaleY = 0.475f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_15: - *theScaleX = 0.5f; - *theScaleY = 0.5f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_9: - *theScaleX = 0.51f; - *theScaleY = 0.51f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_13: - *theScaleX = 0.85f; - *theScaleY = 0.5f; - break; - case ZombatarItem::ZOMBATAR_EYEWEAR_7: - *theScaleX = 0.9575f; - *theScaleY = 0.9575f; - break; - case ZombatarItem::ZOMBATAR_CLOTHES_1: - case ZombatarItem::ZOMBATAR_CLOTHES_2: - case ZombatarItem::ZOMBATAR_CLOTHES_3: - case ZombatarItem::ZOMBATAR_CLOTHES_4: - case ZombatarItem::ZOMBATAR_CLOTHES_5: - case ZombatarItem::ZOMBATAR_CLOTHES_6: - case ZombatarItem::ZOMBATAR_CLOTHES_7: - case ZombatarItem::ZOMBATAR_CLOTHES_8: - case ZombatarItem::ZOMBATAR_CLOTHES_9: - case ZombatarItem::ZOMBATAR_CLOTHES_10: - case ZombatarItem::ZOMBATAR_CLOTHES_11: - case ZombatarItem::ZOMBATAR_CLOTHES_12: - *theScaleX = 0.475f; - *theScaleY = 0.475f; - break; - case ZombatarItem::ZOMBATAR_HATS_8: - *theScaleX = 0.275f; - *theScaleY = 0.275f; - break; - case ZombatarItem::ZOMBATAR_HATS_6: - *theScaleX = 0.3f; - *theScaleY = 0.3f; - break; - case ZombatarItem::ZOMBATAR_HATS_13: - *theScaleX = 0.3025f; - *theScaleY = 0.3025f; - break; - case ZombatarItem::ZOMBATAR_HATS_14: - *theScaleX = 0.345f; - *theScaleY = 0.345f; - break; - case ZombatarItem::ZOMBATAR_HATS_10: - *theScaleX = 0.35f; - *theScaleY = 0.35f; - break; - case ZombatarItem::ZOMBATAR_HATS_1: - case ZombatarItem::ZOMBATAR_HATS_2: - case ZombatarItem::ZOMBATAR_HATS_4: - *theScaleX = 0.375f; - *theScaleY = 0.375f; - break; - case ZombatarItem::ZOMBATAR_HATS_12: - *theScaleX = 0.39f; - *theScaleY = 0.39f; - break; - case ZombatarItem::ZOMBATAR_HATS_9: - *theScaleX = 0.43f; - *theScaleY = 0.43f; - break; - case ZombatarItem::ZOMBATAR_HATS_5: - *theScaleX = 0.44f; - *theScaleY = 0.44f; - break; - case ZombatarItem::ZOMBATAR_HATS_11: - *theScaleX = 0.455f; - *theScaleY = 0.35f; - break; - case ZombatarItem::ZOMBATAR_HATS_3: - *theScaleX = 0.465f; - *theScaleY = 0.465f; - break; - case ZombatarItem::ZOMBATAR_HATS_7: - *theScaleX = 0.565f; - *theScaleY = 0.565f; - break; - case ZombatarItem::ZOMBATAR_ACCESSORY_15: - *theScaleX = 0.31125f; - *theScaleY = 0.31125f; - break; - case ZombatarItem::ZOMBATAR_ACCESSORY_10: - *theScaleX = 0.425f; - *theScaleY = 0.425f; - break; - case ZombatarItem::ZOMBATAR_ACCESSORY_3: - *theScaleX = 0.925f; - *theScaleY = 0.7125f; - break; - case ZombatarItem::ZOMBATAR_ACCESSORY_7: - *theScaleX = 1.0f; - *theScaleY = 0.95f; - break; - case ZombatarItem::ZOMBATAR_ACCESSORY_1: - case ZombatarItem::ZOMBATAR_ACCESSORY_2: - case ZombatarItem::ZOMBATAR_ACCESSORY_4: - case ZombatarItem::ZOMBATAR_ACCESSORY_5: - case ZombatarItem::ZOMBATAR_ACCESSORY_6: - case ZombatarItem::ZOMBATAR_ACCESSORY_8: - case ZombatarItem::ZOMBATAR_ACCESSORY_9: - case ZombatarItem::ZOMBATAR_ACCESSORY_11: - case ZombatarItem::ZOMBATAR_ACCESSORY_12: - case ZombatarItem::ZOMBATAR_ACCESSORY_13: - case ZombatarItem::ZOMBATAR_ACCESSORY_14: - *theScaleX = 1.0f; - *theScaleY = 1.0f; - case ZombatarItem::ZOMBATAR_FACIALHAIR_19: - case ZombatarItem::ZOMBATAR_FACIALHAIR_1: - case ZombatarItem::ZOMBATAR_FACIALHAIR_12: - case ZombatarItem::ZOMBATAR_FACIALHAIR_11: - *theScaleX = 0.5f; - *theScaleY = 0.5f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_7: - *theScaleX = 0.4f; - *theScaleY = 0.4f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_22: - - case ZombatarItem::ZOMBATAR_FACIALHAIR_14: - *theScaleX = 0.35f; - *theScaleY = 0.35f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_2: - case ZombatarItem::ZOMBATAR_FACIALHAIR_3: - - case ZombatarItem::ZOMBATAR_FACIALHAIR_4: - case ZombatarItem::ZOMBATAR_FACIALHAIR_6: - case ZombatarItem::ZOMBATAR_FACIALHAIR_8: - case ZombatarItem::ZOMBATAR_FACIALHAIR_9: - case ZombatarItem::ZOMBATAR_FACIALHAIR_10: - - case ZombatarItem::ZOMBATAR_FACIALHAIR_13: - - case ZombatarItem::ZOMBATAR_FACIALHAIR_15: - case ZombatarItem::ZOMBATAR_FACIALHAIR_16: - case ZombatarItem::ZOMBATAR_FACIALHAIR_17: - case ZombatarItem::ZOMBATAR_FACIALHAIR_18: - case ZombatarItem::ZOMBATAR_FACIALHAIR_20: - case ZombatarItem::ZOMBATAR_FACIALHAIR_21: - case ZombatarItem::ZOMBATAR_FACIALHAIR_23: - case ZombatarItem::ZOMBATAR_FACIALHAIR_24: - *theScaleX = 0.6f; - *theScaleY = 0.6f; - break; - case ZombatarItem::ZOMBATAR_FACIALHAIR_5: - *theScaleX = 0.9f; - *theScaleY = 0.9f; - break; - + case ZombatarItem::ZOMBATAR_HAIR_14: + *theScaleX = 0.2875f; + *theScaleY = 0.2875f; + break; + case ZombatarItem::ZOMBATAR_HAIR_10: + *theScaleX = 0.3f; + *theScaleY = 0.3f; + break; + case ZombatarItem::ZOMBATAR_HAIR_2: + case ZombatarItem::ZOMBATAR_HAIR_4: + *theScaleX = 0.325f; + *theScaleY = 0.325f; + break; + case ZombatarItem::ZOMBATAR_HAIR_1: + case ZombatarItem::ZOMBATAR_HAIR_3: + case ZombatarItem::ZOMBATAR_HAIR_8: + case ZombatarItem::ZOMBATAR_HAIR_13: + case ZombatarItem::ZOMBATAR_HAIR_15: + case ZombatarItem::ZOMBATAR_HAIR_16: + case ZombatarItem::ZOMBATAR_HAIR_12: + *theScaleX = 0.35f; + *theScaleY = 0.35f; + break; + case ZombatarItem::ZOMBATAR_HAIR_11: + *theScaleX = 0.375f; + *theScaleY = 0.375f; + break; + case ZombatarItem::ZOMBATAR_HAIR_5: + *theScaleX = 0.4f; + *theScaleY = 0.4f; + break; + case ZombatarItem::ZOMBATAR_HAIR_6: + *theScaleX = 0.425f; + *theScaleY = 0.425f; + break; + case ZombatarItem::ZOMBATAR_HAIR_7: + *theScaleX = 0.5f; + *theScaleY = 0.5f; + break; + case ZombatarItem::ZOMBATAR_HAIR_9: + *theScaleX = 1.4f; + *theScaleY = 0.9f; + break; + case ZombatarItem::ZOMBATAR_TIDBITS_1: + *theScaleX = 0.475f; + *theScaleY = 0.475f; + break; + case ZombatarItem::ZOMBATAR_TIDBITS_2: + *theScaleX = 0.48f; + *theScaleY = 0.44f; + break; + case ZombatarItem::ZOMBATAR_TIDBITS_5: + case ZombatarItem::ZOMBATAR_TIDBITS_6: + *theScaleX = 0.48f; + *theScaleY = 0.48f; + break; + case ZombatarItem::ZOMBATAR_TIDBITS_7: + *theScaleX = 0.49f; + *theScaleY = 0.49f; + break; + case ZombatarItem::ZOMBATAR_TIDBITS_11: + *theScaleX = 0.5f; + *theScaleY = 0.5f; + break; + case ZombatarItem::ZOMBATAR_TIDBITS_8: + case ZombatarItem::ZOMBATAR_TIDBITS_10: + *theScaleX = 0.515f; + *theScaleY = 0.515f; + break; + case ZombatarItem::ZOMBATAR_TIDBITS_4: + *theScaleX = 0.52f; + *theScaleY = 0.52f; + break; + case ZombatarItem::ZOMBATAR_TIDBITS_3: + *theScaleX = 0.75f; + *theScaleY = 0.75f; + break; + case ZombatarItem::ZOMBATAR_TIDBITS_13: + *theScaleX = 0.875f; + *theScaleY = 0.625f; + break; + case ZombatarItem::ZOMBATAR_TIDBITS_9: + case ZombatarItem::ZOMBATAR_TIDBITS_12: + case ZombatarItem::ZOMBATAR_TIDBITS_14: + *theScaleX = 1.0f; + *theScaleY = 1.0f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_1: + *theScaleX = 0.39f; + *theScaleY = 0.39f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_3: + case ZombatarItem::ZOMBATAR_EYEWEAR_4: + case ZombatarItem::ZOMBATAR_EYEWEAR_6: + *theScaleX = 0.4f; + *theScaleY = 0.39f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_5: + *theScaleX = 0.4115f; + *theScaleY = 0.39f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_2: + *theScaleX = 0.4125f; + *theScaleY = 0.39f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_10: + *theScaleX = 0.4125f; + *theScaleY = 0.4125f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_8: + case ZombatarItem::ZOMBATAR_EYEWEAR_11: + *theScaleX = 0.425f; + *theScaleY = 0.425f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_14: + case ZombatarItem::ZOMBATAR_EYEWEAR_16: + *theScaleX = 0.45f; + *theScaleY = 0.45f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_12: + *theScaleX = 0.475f; + *theScaleY = 0.475f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_15: + *theScaleX = 0.5f; + *theScaleY = 0.5f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_9: + *theScaleX = 0.51f; + *theScaleY = 0.51f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_13: + *theScaleX = 0.85f; + *theScaleY = 0.5f; + break; + case ZombatarItem::ZOMBATAR_EYEWEAR_7: + *theScaleX = 0.9575f; + *theScaleY = 0.9575f; + break; + case ZombatarItem::ZOMBATAR_CLOTHES_1: + case ZombatarItem::ZOMBATAR_CLOTHES_2: + case ZombatarItem::ZOMBATAR_CLOTHES_3: + case ZombatarItem::ZOMBATAR_CLOTHES_4: + case ZombatarItem::ZOMBATAR_CLOTHES_5: + case ZombatarItem::ZOMBATAR_CLOTHES_6: + case ZombatarItem::ZOMBATAR_CLOTHES_7: + case ZombatarItem::ZOMBATAR_CLOTHES_8: + case ZombatarItem::ZOMBATAR_CLOTHES_9: + case ZombatarItem::ZOMBATAR_CLOTHES_10: + case ZombatarItem::ZOMBATAR_CLOTHES_11: + case ZombatarItem::ZOMBATAR_CLOTHES_12: + *theScaleX = 0.475f; + *theScaleY = 0.475f; + break; + case ZombatarItem::ZOMBATAR_HATS_8: + *theScaleX = 0.275f; + *theScaleY = 0.275f; + break; + case ZombatarItem::ZOMBATAR_HATS_6: + *theScaleX = 0.3f; + *theScaleY = 0.3f; + break; + case ZombatarItem::ZOMBATAR_HATS_13: + *theScaleX = 0.3025f; + *theScaleY = 0.3025f; + break; + case ZombatarItem::ZOMBATAR_HATS_14: + *theScaleX = 0.345f; + *theScaleY = 0.345f; + break; + case ZombatarItem::ZOMBATAR_HATS_10: + *theScaleX = 0.35f; + *theScaleY = 0.35f; + break; + case ZombatarItem::ZOMBATAR_HATS_1: + case ZombatarItem::ZOMBATAR_HATS_2: + case ZombatarItem::ZOMBATAR_HATS_4: + *theScaleX = 0.375f; + *theScaleY = 0.375f; + break; + case ZombatarItem::ZOMBATAR_HATS_12: + *theScaleX = 0.39f; + *theScaleY = 0.39f; + break; + case ZombatarItem::ZOMBATAR_HATS_9: + *theScaleX = 0.43f; + *theScaleY = 0.43f; + break; + case ZombatarItem::ZOMBATAR_HATS_5: + *theScaleX = 0.44f; + *theScaleY = 0.44f; + break; + case ZombatarItem::ZOMBATAR_HATS_11: + *theScaleX = 0.455f; + *theScaleY = 0.35f; + break; + case ZombatarItem::ZOMBATAR_HATS_3: + *theScaleX = 0.465f; + *theScaleY = 0.465f; + break; + case ZombatarItem::ZOMBATAR_HATS_7: + *theScaleX = 0.565f; + *theScaleY = 0.565f; + break; + case ZombatarItem::ZOMBATAR_ACCESSORY_15: + *theScaleX = 0.31125f; + *theScaleY = 0.31125f; + break; + case ZombatarItem::ZOMBATAR_ACCESSORY_10: + *theScaleX = 0.425f; + *theScaleY = 0.425f; + break; + case ZombatarItem::ZOMBATAR_ACCESSORY_3: + *theScaleX = 0.925f; + *theScaleY = 0.7125f; + break; + case ZombatarItem::ZOMBATAR_ACCESSORY_7: + *theScaleX = 1.0f; + *theScaleY = 0.95f; + break; + case ZombatarItem::ZOMBATAR_ACCESSORY_1: + case ZombatarItem::ZOMBATAR_ACCESSORY_2: + case ZombatarItem::ZOMBATAR_ACCESSORY_4: + case ZombatarItem::ZOMBATAR_ACCESSORY_5: + case ZombatarItem::ZOMBATAR_ACCESSORY_6: + case ZombatarItem::ZOMBATAR_ACCESSORY_8: + case ZombatarItem::ZOMBATAR_ACCESSORY_9: + case ZombatarItem::ZOMBATAR_ACCESSORY_11: + case ZombatarItem::ZOMBATAR_ACCESSORY_12: + case ZombatarItem::ZOMBATAR_ACCESSORY_13: + case ZombatarItem::ZOMBATAR_ACCESSORY_14: + *theScaleX = 1.0f; + *theScaleY = 1.0f; + case ZombatarItem::ZOMBATAR_FACIALHAIR_19: + case ZombatarItem::ZOMBATAR_FACIALHAIR_1: + case ZombatarItem::ZOMBATAR_FACIALHAIR_12: + case ZombatarItem::ZOMBATAR_FACIALHAIR_11: + *theScaleX = 0.5f; + *theScaleY = 0.5f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_7: + *theScaleX = 0.4f; + *theScaleY = 0.4f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_22: + + case ZombatarItem::ZOMBATAR_FACIALHAIR_14: + *theScaleX = 0.35f; + *theScaleY = 0.35f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_2: + case ZombatarItem::ZOMBATAR_FACIALHAIR_3: + + case ZombatarItem::ZOMBATAR_FACIALHAIR_4: + case ZombatarItem::ZOMBATAR_FACIALHAIR_6: + case ZombatarItem::ZOMBATAR_FACIALHAIR_8: + case ZombatarItem::ZOMBATAR_FACIALHAIR_9: + case ZombatarItem::ZOMBATAR_FACIALHAIR_10: + + case ZombatarItem::ZOMBATAR_FACIALHAIR_13: + + case ZombatarItem::ZOMBATAR_FACIALHAIR_15: + case ZombatarItem::ZOMBATAR_FACIALHAIR_16: + case ZombatarItem::ZOMBATAR_FACIALHAIR_17: + case ZombatarItem::ZOMBATAR_FACIALHAIR_18: + case ZombatarItem::ZOMBATAR_FACIALHAIR_20: + case ZombatarItem::ZOMBATAR_FACIALHAIR_21: + case ZombatarItem::ZOMBATAR_FACIALHAIR_23: + case ZombatarItem::ZOMBATAR_FACIALHAIR_24: + *theScaleX = 0.6f; + *theScaleY = 0.6f; + break; + case ZombatarItem::ZOMBATAR_FACIALHAIR_5: + *theScaleX = 0.9f; + *theScaleY = 0.9f; + break; } } @@ -1659,7 +1624,6 @@ void ZombatarWidget::MouseUp(int x, int y, int theClickCount) mApp->mPlayerInfo->mZombatarIndex--; mNextButton->mDisabled = mApp->mPlayerInfo->mZombatarIndex == mApp->mPlayerInfo->mNumZombatars - 1; mPrevButton->mDisabled = mApp->mPlayerInfo->mZombatarIndex == 0; - } else if (mNextPageButton->IsMouseOver()) { @@ -1711,7 +1675,7 @@ void ZombatarWidget::MouseUp(int x, int y, int theClickCount) GPUImage *anExportImage = mApp->mRenderer->NewGPUImage(); int aBitsCount = - Sexy::IMAGE_ZOMBATAR_BACKGROUND_BLANK->mWidth * Sexy::IMAGE_ZOMBATAR_BACKGROUND_BLANK->mHeight; + Sexy::IMAGE_ZOMBATAR_BACKGROUND_BLANK->mWidth * Sexy::IMAGE_ZOMBATAR_BACKGROUND_BLANK->mHeight; anExportImage->mBits = new uint32_t[aBitsCount + 1]; anExportImage->mWidth = Sexy::IMAGE_ZOMBATAR_BACKGROUND_BLANK->mWidth; anExportImage->mHeight = Sexy::IMAGE_ZOMBATAR_BACKGROUND_BLANK->mHeight; @@ -1737,7 +1701,6 @@ void ZombatarWidget::MouseUp(int x, int y, int theClickCount) mZombie->ResetZombatar(); ChangeState(STATE_AVATAR_LIST); } - } else if (mSkinButton->IsMouseOver()) { @@ -1885,5 +1848,4 @@ void ZombatarWidget::MouseUp(int x, int y, int theClickCount) } } } - } \ No newline at end of file diff --git a/src/Lawn/ZenGarden.cpp b/src/Lawn/ZenGarden.cpp index 363bfc0..93fba12 100644 --- a/src/Lawn/ZenGarden.cpp +++ b/src/Lawn/ZenGarden.cpp @@ -20,20 +20,61 @@ #include "../Sexy.TodLib/TodStringFile.h" static SpecialGridPlacement gGreenhouseGridPlacement[] = { - {73, 73, 0, 0}, {155, 71, 1, 0}, {239, 68, 2, 0}, {321, 73, 3, 0}, {406, 71, 4, 0}, {484, 67, 5, 0}, - {566, 70, 6, 0}, {648, 72, 7, 0}, {67, 168, 0, 1}, {150, 165, 1, 1}, {232, 170, 2, 1}, {314, 175, 3, 1}, - {416, 173, 4, 1}, {497, 170, 5, 1}, {578, 164, 6, 1}, {660, 168, 7, 1}, {41, 268, 0, 2}, {130, 266, 1, 2}, - {219, 260, 2, 2}, {310, 266, 3, 2}, {416, 267, 4, 2}, {504, 261, 5, 2}, {594, 265, 6, 2}, {684, 269, 7, 2}, - {37, 371, 0, 3}, {124, 369, 1, 3}, {211, 368, 2, 3}, {302, 369, 3, 3}, {425, 375, 4, 3}, {512, 368, 5, 3}, - {602, 365, 6, 3}, {691, 368, 7, 3}}; - -static SpecialGridPlacement gMushroomGridPlacement[] = {{110, 441, 0, 0}, {237, 360, 1, 0}, {298, 458, 2, 0}, - {355, 296, 3, 0}, {387, 203, 4, 0}, {460, 385, 5, 0}, - {486, 478, 6, 0}, {552, 283, 7, 0}}; - -static SpecialGridPlacement gAquariumGridPlacement[] = {{113, 185, 0, 0}, {306, 120, 1, 0}, {356, 270, 2, 0}, - {622, 120, 3, 0}, {669, 270, 4, 0}, {122, 355, 5, 0}, - {365, 458, 6, 0}, {504, 417, 7, 0}}; + { 73, 73, 0, 0 }, + { 155, 71, 1, 0 }, + { 239, 68, 2, 0 }, + { 321, 73, 3, 0 }, + { 406, 71, 4, 0 }, + { 484, 67, 5, 0 }, + { 566, 70, 6, 0 }, + { 648, 72, 7, 0 }, + { 67, 168, 0, 1 }, + { 150, 165, 1, 1 }, + { 232, 170, 2, 1 }, + { 314, 175, 3, 1 }, + { 416, 173, 4, 1 }, + { 497, 170, 5, 1 }, + { 578, 164, 6, 1 }, + { 660, 168, 7, 1 }, + { 41, 268, 0, 2 }, + { 130, 266, 1, 2 }, + { 219, 260, 2, 2 }, + { 310, 266, 3, 2 }, + { 416, 267, 4, 2 }, + { 504, 261, 5, 2 }, + { 594, 265, 6, 2 }, + { 684, 269, 7, 2 }, + { 37, 371, 0, 3 }, + { 124, 369, 1, 3 }, + { 211, 368, 2, 3 }, + { 302, 369, 3, 3 }, + { 425, 375, 4, 3 }, + { 512, 368, 5, 3 }, + { 602, 365, 6, 3 }, + { 691, 368, 7, 3 } +}; + +static SpecialGridPlacement gMushroomGridPlacement[] = { + { 110, 441, 0, 0 }, + { 237, 360, 1, 0 }, + { 298, 458, 2, 0 }, + { 355, 296, 3, 0 }, + { 387, 203, 4, 0 }, + { 460, 385, 5, 0 }, + { 486, 478, 6, 0 }, + { 552, 283, 7, 0 } +}; + +static SpecialGridPlacement gAquariumGridPlacement[] = { + { 113, 185, 0, 0 }, + { 306, 120, 1, 0 }, + { 356, 270, 2, 0 }, + { 622, 120, 3, 0 }, + { 669, 270, 4, 0 }, + { 122, 355, 5, 0 }, + { 365, 458, 6, 0 }, + { 504, 417, 7, 0 } +}; ZenGarden::ZenGarden() { @@ -48,7 +89,7 @@ void ZenGarden::DrawPottedPlantIcon(Graphics *g, float x, float y, PottedPlant * } void ZenGarden::DrawPottedPlant(Graphics *g, float x, float y, PottedPlant *thePottedPlant, float theScale, - bool theDrawPot) + bool theDrawPot) { Graphics aPottedPlantG(*g); aPottedPlantG.mScaleX = theScale; @@ -65,7 +106,7 @@ void ZenGarden::DrawPottedPlant(Graphics *g, float x, float y, PottedPlant *theP } } else if ((aSeedType == SeedType::SEED_TANGLEKELP || aSeedType == SeedType::SEED_SEASHROOM) && - thePottedPlant->mWhichZenGarden == GardenType::GARDEN_AQUARIUM) + thePottedPlant->mWhichZenGarden == GardenType::GARDEN_AQUARIUM) { aPlantVariation = DrawVariation::VARIATION_AQUARIUM; } @@ -88,7 +129,7 @@ void ZenGarden::DrawPottedPlant(Graphics *g, float x, float y, PottedPlant *theP } Plant::DrawSeedType(&aPottedPlantG, SeedType::SEED_FLOWERPOT, SeedType::SEED_NONE, aPotVariation2, x, - y + aPotOffsetY * theScale); + y + aPotOffsetY * theScale); } if (thePottedPlant->mFacing == PottedPlant::FacingDirection::FACING_LEFT) @@ -150,7 +191,7 @@ Plant *ZenGarden::PlacePottedPlant(int thePottedPlantIndex) if (needPot) { Plant *aPot = - mBoard->NewPlant(aPottedPlant->mX, aPottedPlant->mY, SeedType::SEED_FLOWERPOT, SeedType::SEED_NONE); + mBoard->NewPlant(aPottedPlant->mX, aPottedPlant->mY, SeedType::SEED_FLOWERPOT, SeedType::SEED_NONE); aPot->mRenderOrder = Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_PLANT, 0, aPot->mY); aPot->mStateCountdown = 0; @@ -181,7 +222,7 @@ Plant *ZenGarden::PlacePottedPlant(int thePottedPlantIndex) } } else if ((aSeedType == SeedType::SEED_TANGLEKELP || aSeedType == SeedType::SEED_SEASHROOM) && - mGardenType == GardenType::GARDEN_AQUARIUM) + mGardenType == GardenType::GARDEN_AQUARIUM) { aPlantReanim->SetFramesForLayer("anim_idle_aquarium"); } @@ -240,13 +281,13 @@ bool ZenGarden::PlantCanHaveChocolate(Plant *thePlant) { PottedPlant *aPottedPlant = PottedPlantFromIndex(thePlant->mPottedPlantIndex); return aPottedPlant->mPlantAge == PottedPlantAge::PLANTAGE_FULL && WasPlantNeedFulfilledToday(aPottedPlant) && - !PlantHighOnChocolate(aPottedPlant); + !PlantHighOnChocolate(aPottedPlant); } bool ZenGarden::CanDropChocolate() { return HasPurchasedStinky() && - mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_CHOCOLATE] - PURCHASE_COUNT_OFFSET < 10; + mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_CHOCOLATE] - PURCHASE_COUNT_OFFSET < 10; } bool ZenGarden::IsZenGardenFull(bool theIncludeDroppedPresents) @@ -294,7 +335,7 @@ void ZenGarden::FindOpenZenGardenSpot(int &theSpotX, int &theSpotY) { PottedPlant *aPottedPlant = PottedPlantFromIndex(i); if (aPottedPlant->mWhichZenGarden == GardenType::GARDEN_MAIN && aPottedPlant->mX == x && - aPottedPlant->mY == y) + aPottedPlant->mY == y) { continue; } @@ -325,7 +366,7 @@ void ZenGarden::AddPottedPlant(PottedPlant *thePottedPlant) mApp->mPlayerInfo->mNumPottedPlants++; if (mApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN && mBoard && - aPottedPlant->mWhichZenGarden == mGardenType) + aPottedPlant->mWhichZenGarden == mGardenType) { Plant *aPlant = PlacePottedPlant(aPottedPlantIndex); if (mApp->GetDialog(Dialogs::DIALOG_STORE) == nullptr) @@ -565,7 +606,7 @@ void ZenGarden::PlantWatered(Plant *thePlant) aPottedPlant->mTimesFed++; int aTimeSpan = RandRangeInt(0, 8); if (mBoard->mTutorialState == TutorialState::TUTORIAL_ZEN_GARDEN_WATER_PLANT || - mBoard->mTutorialState == TutorialState::TUTORIAL_ZEN_GARDEN_KEEP_WATERING) + mBoard->mTutorialState == TutorialState::TUTORIAL_ZEN_GARDEN_KEEP_WATERING) { aTimeSpan = 9; } @@ -574,17 +615,17 @@ void ZenGarden::PlantWatered(Plant *thePlant) mApp->PlayFoley(FoleyType::FOLEY_SPAWN_SUN); mBoard->AddCoin(thePlant->mX + 40, thePlant->mY, CoinType::COIN_SILVER, CoinMotion::COIN_MOTION_COIN); if (aPottedPlant->mPlantAge == PottedPlantAge::PLANTAGE_FULL && - aPottedPlant->mPlantNeed == PottedPlantNeed::PLANTNEED_NONE) + aPottedPlant->mPlantNeed == PottedPlantNeed::PLANTNEED_NONE) { aPottedPlant->mPlantNeed = (PottedPlantNeed)RandRangeInt((int)PottedPlantNeed::PLANTNEED_BUGSPRAY, - (int)PottedPlantNeed::PLANTNEED_PHONOGRAPH); + (int)PottedPlantNeed::PLANTNEED_PHONOGRAPH); } if (mBoard->mTutorialState == TutorialState::TUTORIAL_ZEN_GARDEN_WATER_PLANT) { mBoard->mTutorialState = TutorialState::TUTORIAL_ZEN_GARDEN_KEEP_WATERING; mBoard->DisplayAdvice("[ADVICE_ZEN_GARDEN_KEEP_WATERING]", MessageStyle::MESSAGE_STYLE_ZEN_GARDEN_LONG, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); } } @@ -622,13 +663,13 @@ void ZenGarden::UpdatePlantEffectState(Plant *thePlant) } Plant *aFlowerPot = - mBoard->GetTopPlantAt(thePlant->mPlantCol, thePlant->mRow, PlantPriority::TOPPLANT_ONLY_UNDER_PLANT); + mBoard->GetTopPlantAt(thePlant->mPlantCol, thePlant->mRow, PlantPriority::TOPPLANT_ONLY_UNDER_PLANT); if (aFlowerPot && !Plant::IsAquatic(thePlant->mSeedType)) { Reanimation *aPotReanim = mApp->ReanimationGet(aFlowerPot->mBodyReanimID); if (thePlant->mState == PlantState::STATE_ZEN_GARDEN_WATERED || - thePlant->mState == PlantState::STATE_ZEN_GARDEN_NEEDY || - thePlant->mState == PlantState::STATE_ZEN_GARDEN_HAPPY) + thePlant->mState == PlantState::STATE_ZEN_GARDEN_NEEDY || + thePlant->mState == PlantState::STATE_ZEN_GARDEN_HAPPY) { aPotReanim->SetImageOverride("Pot_top", IMAGE_REANIM_POT_TOP_DARK); } @@ -656,28 +697,28 @@ void ZenGarden::UpdatePlantEffectState(Plant *thePlant) void ZenGarden::AddHappyEffect(Plant *thePlant) { Plant *aFlowerPot = - mBoard->GetTopPlantAt(thePlant->mPlantCol, thePlant->mRow, PlantPriority::TOPPLANT_ONLY_UNDER_PLANT); + mBoard->GetTopPlantAt(thePlant->mPlantCol, thePlant->mRow, PlantPriority::TOPPLANT_ONLY_UNDER_PLANT); if (aFlowerPot == nullptr) { thePlant->AddAttachedParticle(thePlant->mX + 40, thePlant->mY + 60, thePlant->mRenderOrder - 1, - ParticleEffect::PARTICLE_POTTED_ZEN_GLOW); + ParticleEffect::PARTICLE_POTTED_ZEN_GLOW); } else if (Plant::IsAquatic(thePlant->mSeedType)) { aFlowerPot->AddAttachedParticle(aFlowerPot->mX + 40, aFlowerPot->mY + 61, aFlowerPot->mRenderOrder - 1, - ParticleEffect::PARTICLE_POTTED_WATER_PLANT_GLOW); + ParticleEffect::PARTICLE_POTTED_WATER_PLANT_GLOW); } else { aFlowerPot->AddAttachedParticle(aFlowerPot->mX + 40, aFlowerPot->mY + 63, aFlowerPot->mRenderOrder - 1, - ParticleEffect::PARTICLE_POTTED_ZEN_GLOW); + ParticleEffect::PARTICLE_POTTED_ZEN_GLOW); } } void ZenGarden::RemoveHappyEffect(Plant *thePlant) { Plant *aFlowerPot = - mBoard->GetTopPlantAt(thePlant->mPlantCol, thePlant->mRow, PlantPriority::TOPPLANT_ONLY_UNDER_PLANT); + mBoard->GetTopPlantAt(thePlant->mPlantCol, thePlant->mRow, PlantPriority::TOPPLANT_ONLY_UNDER_PLANT); TodParticleSystem *aParticleSystem; if (aFlowerPot) { @@ -739,7 +780,7 @@ void ZenGarden::RefreshPlantNeeds(PottedPlant *thePottedPlant) { thePottedPlant->mLastWateredTime = std::time(nullptr); thePottedPlant->mPlantNeed = (PottedPlantNeed)RandRangeInt((int)PottedPlantNeed::PLANTNEED_BUGSPRAY, - (int)PottedPlantNeed::PLANTNEED_PHONOGRAPH); + (int)PottedPlantNeed::PLANTNEED_PHONOGRAPH); } else { @@ -770,7 +811,7 @@ bool ZenGarden::WasPlantFertilizedInLastHour(PottedPlant *thePottedPlant) PottedPlantNeed ZenGarden::GetPlantsNeed(PottedPlant *thePottedPlant) { if (thePottedPlant->mPlantAge != PottedPlantAge::PLANTAGE_SPROUT && Plant::IsNocturnal(thePottedPlant->mSeedType) && - thePottedPlant->mWhichZenGarden == GardenType::GARDEN_MAIN) + thePottedPlant->mWhichZenGarden == GardenType::GARDEN_MAIN) { return PottedPlantNeed::PLANTNEED_NONE; } @@ -857,7 +898,7 @@ void ZenGarden::MouseDownWithFeedingTool(int x, int y, CursorType theCursorType) { WakeStinky(); mApp->AddTodParticle(aStinky->mPosX + 40.0f, aStinky->mPosY + 40.0f, aStinky->mRenderOrder + 1, - ParticleEffect::PARTICLE_PRESENT_PICKUP); + ParticleEffect::PARTICLE_PRESENT_PICKUP); mApp->mPlayerInfo->mLastStinkyChocolateTime = time(nullptr); mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_CHOCOLATE]--; @@ -890,7 +931,7 @@ void ZenGarden::MouseDownWithFeedingTool(int x, int y, CursorType theCursorType) aZenTool->mPosX = x; aZenTool->mPosY = y; Reanimation *aWateringCanReanim = - mApp->AddReanimation(x, y, 0, ReanimationType::REANIM_ZENGARDEN_WATERINGCAN); + mApp->AddReanimation(x, y, 0, ReanimationType::REANIM_ZENGARDEN_WATERINGCAN); aWateringCanReanim->PlayReanim("anim_water_area", ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD, 0, 8.0f); aZenTool->mGridItemReanimID = mApp->ReanimationGetID(aWateringCanReanim); aZenTool->mGridItemState = GridItemState::GRIDITEM_STATE_ZEN_TOOL_GOLD_WATERING_CAN; @@ -899,7 +940,7 @@ void ZenGarden::MouseDownWithFeedingTool(int x, int y, CursorType theCursorType) else { Reanimation *aWateringCanReanim = mApp->AddReanimation(aPlantToFeed->mX + 32, aPlantToFeed->mY, 0, - ReanimationType::REANIM_ZENGARDEN_WATERINGCAN); + ReanimationType::REANIM_ZENGARDEN_WATERINGCAN); aWateringCanReanim->PlayReanim("anim_water", ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD, 0, 0.0f); aZenTool->mGridItemReanimID = mApp->ReanimationGetID(aWateringCanReanim); aZenTool->mGridItemState = GridItemState::GRIDITEM_STATE_ZEN_TOOL_GOLD_WATERING_CAN; @@ -909,7 +950,7 @@ void ZenGarden::MouseDownWithFeedingTool(int x, int y, CursorType theCursorType) else if (theCursorType == CursorType::CURSOR_TYPE_FERTILIZER) { Reanimation *aFertilizerReanim = mApp->AddReanimation(aPlantToFeed->mX, aPlantToFeed->mY, 0, - ReanimationType::REANIM_ZENGARDEN_FERTILIZER); + ReanimationType::REANIM_ZENGARDEN_FERTILIZER); aFertilizerReanim->mLoopType = ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD; aZenTool->mGridItemReanimID = mApp->ReanimationGetID(aFertilizerReanim); aZenTool->mGridItemState = GridItemState::GRIDITEM_STATE_ZEN_TOOL_FERTILIZER; @@ -921,7 +962,7 @@ void ZenGarden::MouseDownWithFeedingTool(int x, int y, CursorType theCursorType) else if (theCursorType == CursorType::CURSOR_TYPE_BUG_SPRAY) { Reanimation *aBugSprayReanim = mApp->AddReanimation(aPlantToFeed->mX + 54, aPlantToFeed->mY, 0, - ReanimationType::REANIM_ZENGARDEN_BUGSPRAY); + ReanimationType::REANIM_ZENGARDEN_BUGSPRAY); aBugSprayReanim->mLoopType = ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD; aZenTool->mGridItemReanimID = mApp->ReanimationGetID(aBugSprayReanim); aZenTool->mGridItemState = GridItemState::GRIDITEM_STATE_ZEN_TOOL_BUG_SPRAY; @@ -933,7 +974,7 @@ void ZenGarden::MouseDownWithFeedingTool(int x, int y, CursorType theCursorType) else if (theCursorType == CursorType::CURSOR_TYPE_PHONOGRAPH) { Reanimation *aPhonographReanim = mApp->AddReanimation(aPlantToFeed->mX + 20, aPlantToFeed->mY + 34, 0, - ReanimationType::REANIM_ZENGARDEN_PHONOGRAPH); + ReanimationType::REANIM_ZENGARDEN_PHONOGRAPH); aPhonographReanim->mAnimRate = 20.0f; aPhonographReanim->mLoopType = ReanimLoopType::REANIM_LOOP; aZenTool->mGridItemReanimID = mApp->ReanimationGetID(aPhonographReanim); @@ -951,7 +992,7 @@ void ZenGarden::FeedChocolateToPlant(Plant *thePlant) aPottedPlant->mLastChocolateTime = std::time(nullptr); thePlant->mLaunchCounter = 60; mApp->AddTodParticle(thePlant->mX + 40.0f, thePlant->mY + 40.0f, thePlant->mRenderOrder + 1, - ParticleEffect::PARTICLE_PRESENT_PICKUP); + ParticleEffect::PARTICLE_PRESENT_PICKUP); } void ZenGarden::DoFeedingTool(int x, int y, GridItemState theToolType) @@ -981,34 +1022,34 @@ void ZenGarden::DoFeedingTool(int x, int y, GridItemState theToolType) PottedPlant *aPottedPlant = PottedPlantFromIndex(aPlant->mPottedPlantIndex); PottedPlantNeed aNeed = GetPlantsNeed(aPottedPlant); if (aNeed == PottedPlantNeed::PLANTNEED_WATER && - theToolType == GridItemState::GRIDITEM_STATE_ZEN_TOOL_WATERING_CAN) + theToolType == GridItemState::GRIDITEM_STATE_ZEN_TOOL_WATERING_CAN) { PlantWatered(aPlant); } else if (aNeed == PottedPlantNeed::PLANTNEED_FERTILIZER && - theToolType == GridItemState::GRIDITEM_STATE_ZEN_TOOL_FERTILIZER) + theToolType == GridItemState::GRIDITEM_STATE_ZEN_TOOL_FERTILIZER) { PlantFertilized(aPlant); } else if (aNeed == PottedPlantNeed::PLANTNEED_BUGSPRAY && - theToolType == GridItemState::GRIDITEM_STATE_ZEN_TOOL_BUG_SPRAY) + theToolType == GridItemState::GRIDITEM_STATE_ZEN_TOOL_BUG_SPRAY) { PlantFulfillNeed(aPlant); } else if (aNeed == PottedPlantNeed::PLANTNEED_PHONOGRAPH && - theToolType == GridItemState::GRIDITEM_STATE_ZEN_TOOL_PHONOGRAPH) + theToolType == GridItemState::GRIDITEM_STATE_ZEN_TOOL_PHONOGRAPH) { PlantFulfillNeed(aPlant); } if (mBoard->mTutorialState == TutorialState::TUTORIAL_ZEN_GARDEN_FERTILIZE_PLANTS && - theToolType == GridItemState::GRIDITEM_STATE_ZEN_TOOL_FERTILIZER) + theToolType == GridItemState::GRIDITEM_STATE_ZEN_TOOL_FERTILIZER) { if (AllPlantsHaveBeenFertilized()) { mApp->mBoard->mTutorialState = TutorialState::TUTORIAL_ZEN_GARDEN_COMPLETED; mApp->mBoard->DisplayAdvice("[ADVICE_ZEN_GARDEN_CONTINUE_ADVENTURE]", - MessageStyle::MESSAGE_STYLE_HINT_TALL_FAST, AdviceType::ADVICE_NONE); + MessageStyle::MESSAGE_STYLE_HINT_TALL_FAST, AdviceType::ADVICE_NONE); mBoard->mMenuButton->mDisabled = false; mBoard->mMenuButton->mBtnNoDraw = false; } @@ -1016,7 +1057,7 @@ void ZenGarden::DoFeedingTool(int x, int y, GridItemState theToolType) { mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_FERTILIZER] = PURCHASE_COUNT_OFFSET + 5; mApp->mBoard->DisplayAdvice("[ADVICE_ZEN_GARDEN_NEED_MORE_FERTILIZER]", - MessageStyle::MESSAGE_STYLE_HINT_TALL_FAST, AdviceType::ADVICE_NONE); + MessageStyle::MESSAGE_STYLE_HINT_TALL_FAST, AdviceType::ADVICE_NONE); } } } @@ -1032,8 +1073,8 @@ void ZenGarden::MouseDownWithTool(int x, int y, CursorType theCursorType) } if (theCursorType == CursorType::CURSOR_TYPE_WATERING_CAN || theCursorType == CursorType::CURSOR_TYPE_FERTILIZER || - theCursorType == CursorType::CURSOR_TYPE_BUG_SPRAY || theCursorType == CursorType::CURSOR_TYPE_PHONOGRAPH || - theCursorType == CursorType::CURSOR_TYPE_CHOCOLATE) + theCursorType == CursorType::CURSOR_TYPE_BUG_SPRAY || theCursorType == CursorType::CURSOR_TYPE_PHONOGRAPH || + theCursorType == CursorType::CURSOR_TYPE_CHOCOLATE) { MouseDownWithFeedingTool(x, y, theCursorType); return; @@ -1081,7 +1122,7 @@ void ZenGarden::MovePlant(Plant *thePlant, int theGridX, int theGridY) bool aIsSleeping = thePlant->mIsAsleep; thePlant->SetSleeping(false); Plant *aTopPlantAtGrid = - mBoard->GetTopPlantAt(thePlant->mPlantCol, thePlant->mRow, PlantPriority::TOPPLANT_ONLY_UNDER_PLANT); + mBoard->GetTopPlantAt(thePlant->mPlantCol, thePlant->mRow, PlantPriority::TOPPLANT_ONLY_UNDER_PLANT); if (aTopPlantAtGrid) { aTopPlantAtGrid->mX = aPosX; @@ -1102,7 +1143,7 @@ void ZenGarden::MovePlant(Plant *thePlant, int theGridX, int theGridY) if (aParticle && aParticle->mEmitterList.mSize) { TodParticleEmitter *aEmitter = - aParticle->mParticleHolder->mEmitters.DataArrayGet((unsigned int)aParticle->mEmitterList.GetHead()->mValue); + aParticle->mParticleHolder->mEmitters.DataArrayGet((unsigned int)aParticle->mEmitterList.GetHead()->mValue); aParticle->SystemMove(aEmitter->mSystemCenter.x + aDeltaX, aEmitter->mSystemCenter.y + aDeltaY); } @@ -1169,10 +1210,10 @@ float ZenGarden::PlantPottedDrawHeightOffset(SeedType theSeedType, float theScal aScaleOffsetFix += 0.0f; } else if (theSeedType == SeedType::SEED_HYPNOSHROOM || theSeedType == SeedType::SEED_MARIGOLD || - theSeedType == SeedType::SEED_PEASHOOTER || theSeedType == SeedType::SEED_REPEATER || - theSeedType == SeedType::SEED_LEFTPEATER || theSeedType == SeedType::SEED_SNOWPEA || - theSeedType == SeedType::SEED_THREEPEATER || theSeedType == SeedType::SEED_SUNFLOWER || - theSeedType == SeedType::SEED_MARIGOLD) + theSeedType == SeedType::SEED_PEASHOOTER || theSeedType == SeedType::SEED_REPEATER || + theSeedType == SeedType::SEED_LEFTPEATER || theSeedType == SeedType::SEED_SNOWPEA || + theSeedType == SeedType::SEED_THREEPEATER || theSeedType == SeedType::SEED_SUNFLOWER || + theSeedType == SeedType::SEED_MARIGOLD) { aScaleOffsetFix += 10.0f; } @@ -1219,7 +1260,7 @@ float ZenGarden::ZenPlantOffsetX(PottedPlant *thePottedPlant) { int aOffsetX = 0; if (thePottedPlant->mFacing == PottedPlant::FacingDirection::FACING_LEFT && - thePottedPlant->mSeedType == SeedType::SEED_POTATOMINE) + thePottedPlant->mSeedType == SeedType::SEED_POTATOMINE) { aOffsetX -= 6; } @@ -1251,7 +1292,7 @@ void ZenGarden::AddStinky() aStinky->mGoalX = aStinky->mPosX; aStinky->mGoalY = aStinky->mPosY; Reanimation *aReanimStinky = - mApp->AddReanimation(aStinky->mPosX, aStinky->mPosY, 0, ReanimationType::REANIM_STINKY); + mApp->AddReanimation(aStinky->mPosX, aStinky->mPosY, 0, ReanimationType::REANIM_STINKY); aReanimStinky->OverrideScale(0.8f, 0.8f); aStinky->mGridItemReanimID = mApp->ReanimationGetID(aReanimStinky); @@ -1300,7 +1341,7 @@ void ZenGarden::StinkyPickGoal(GridItem *theStinky) } float aDistFromLastGoal = - Distance2D(aCoin->mPosX, aCoin->mPosY + 30.0f, theStinky->mGoalX, theStinky->mGoalY); + Distance2D(aCoin->mPosX, aCoin->mPosY + 30.0f, theStinky->mGoalX, theStinky->mGoalY); if (aDistFromLastGoal < 5.0f) { aWeight -= 20.0f; @@ -1361,7 +1402,7 @@ void ZenGarden::StinkyPickGoal(GridItem *theStinky) theStinky->mGridItemCounter = 100; if (theStinky->mGoalX < theStinky->mPosX && - theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_RIGHT) + theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_RIGHT) { Reanimation *aStinyReanim = mApp->ReanimationGet(theStinky->mGridItemReanimID); theStinky->mGridItemState = GridItemState::GRIDITEM_STINKY_TURNING_LEFT; @@ -1369,7 +1410,7 @@ void ZenGarden::StinkyPickGoal(GridItem *theStinky) theStinky->mMotionTrailCount = 0; } else if (theStinky->mGoalX > theStinky->mPosX && - theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_LEFT) + theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_LEFT) { Reanimation *aStinyReanim = mApp->ReanimationGet(theStinky->mGridItemReanimID); theStinky->mGridItemState = GridItemState::GRIDITEM_STINKY_TURNING_RIGHT; @@ -1412,7 +1453,7 @@ void ZenGarden::StinkyFinishFallingAsleep(GridItem *theStinky, int theBlendTime) if (!gLawnApp->mPlayerInfo->mHasWokenStinky) { mApp->mBoard->DisplayAdvice("[ADVICE_STINKY_SLEEPING]", MessageStyle::MESSAGE_STYLE_HINT_LONG, - AdviceType::ADVICE_STINKY_SLEEPING); + AdviceType::ADVICE_STINKY_SLEEPING); } } @@ -1425,7 +1466,7 @@ void ZenGarden::UpdateStinkyMotionTrail(GridItem *theStinky, bool theStinkyHighO return; } if (theStinky->mGridItemState != GridItemState::GRIDITEM_STINKY_WALKING_RIGHT && - theStinky->mGridItemState != GridItemState::GRIDITEM_STINKY_WALKING_LEFT) + theStinky->mGridItemState != GridItemState::GRIDITEM_STINKY_WALKING_LEFT) { theStinky->mMotionTrailCount = 0; return; @@ -1438,7 +1479,7 @@ void ZenGarden::UpdateStinkyMotionTrail(GridItem *theStinky, bool theStinkyHighO if (theStinky->mMotionTrailCount > 0) { memcpy(theStinky->mMotionTrailFrames + 1, theStinky->mMotionTrailFrames, - theStinky->mMotionTrailCount * sizeof(MotionTrailFrame)); + theStinky->mMotionTrailCount * sizeof(MotionTrailFrame)); } theStinky->mMotionTrailFrames[0].mPosX = theStinky->mPosX; @@ -1453,9 +1494,9 @@ void ZenGarden::StinkyAnimRateUpdate(GridItem *theStinky) if (IsStinkyHighOnChocolate()) { if (theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_LEFT || - theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_RIGHT || - theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_TURNING_RIGHT || - theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_TURNING_LEFT) + theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_RIGHT || + theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_TURNING_RIGHT || + theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_TURNING_LEFT) { aStinkyReanim->mAnimRate = 12.0f; } @@ -1463,9 +1504,9 @@ void ZenGarden::StinkyAnimRateUpdate(GridItem *theStinky) else { if (theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_LEFT || - theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_RIGHT || - theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_TURNING_RIGHT || - theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_TURNING_LEFT) + theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_RIGHT || + theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_TURNING_RIGHT || + theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_TURNING_LEFT) { aStinkyReanim->mAnimRate = 6.0f; } @@ -1484,7 +1525,7 @@ void ZenGarden::StinkyUpdate(GridItem *theStinky) time_t aNow = time(nullptr); if (mApp->mPlayerInfo->mLastStinkyChocolateTime > aNow || - mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_STINKY_THE_SNAIL] > aNow) + mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_STINKY_THE_SNAIL] > aNow) { ResetStinkyTimers(); } @@ -1504,7 +1545,7 @@ void ZenGarden::StinkyUpdate(GridItem *theStinky) if (theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_SLEEPING) { Reanimation *aSleepingReanim = - FindReanimAttachment(aStinkyReanim->GetTrackInstanceByName("shell")->mAttachmentID); + FindReanimAttachment(aStinkyReanim->GetTrackInstanceByName("shell")->mAttachmentID); TOD_ASSERT(aSleepingReanim); if (mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_CHOCOLATE) @@ -1572,7 +1613,7 @@ void ZenGarden::StinkyUpdate(GridItem *theStinky) while (mBoard->IterateCoins(aCoin)) { if (!aCoin->mIsBeingCollected && - Distance2D(aCoin->mPosX, aCoin->mPosY + 30.0f, theStinky->mPosX, theStinky->mPosY) < 20.0f) + Distance2D(aCoin->mPosX, aCoin->mPosY + 30.0f, theStinky->mPosX, theStinky->mPosY) < 20.0f) { aCoin->PlayCollectSound(); aCoin->Collect(); @@ -1580,7 +1621,7 @@ void ZenGarden::StinkyUpdate(GridItem *theStinky) } if (theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_LEFT || - theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_RIGHT) + theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_RIGHT) { if (mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_CHOCOLATE && !IsStinkyHighOnChocolate()) { @@ -1628,7 +1669,7 @@ void ZenGarden::StinkyUpdate(GridItem *theStinky) } if (theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_LEFT || - theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_RIGHT) + theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_RIGHT) { if (fabs(aDeltaY) < aSpeedY) { @@ -1672,7 +1713,7 @@ void ZenGarden::StinkyUpdate(GridItem *theStinky) StinkyAnimRateUpdate(theStinky); if (theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_WALKING_RIGHT || - theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_TURNING_LEFT) + theStinky->mGridItemState == GridItemState::GRIDITEM_STINKY_TURNING_LEFT) { aStinkyReanim->OverrideScale(-0.8f, 0.8f); aStinkyReanim->SetPosition(theStinky->mPosX + 69.0f, theStinky->mPosY); @@ -1726,7 +1767,7 @@ void ZenGarden::ZenGardenUpdate() mBoard->mChallenge->mChallengeStateCounter--; } if (mBoard->mChallenge->mChallengeState == ChallengeState::STATECHALLENGE_NORMAL && - mBoard->mChallenge->mChallengeStateCounter == 0) + mBoard->mChallenge->mChallengeStateCounter == 0) { mBoard->mChallenge->mChallengeState = ChallengeState::STATECHALLENGE_ZEN_FADING; mBoard->mChallenge->mChallengeStateCounter = 50; @@ -1760,10 +1801,10 @@ void ZenGarden::ZenGardenUpdate() } if (mBoard->mTutorialState == TutorialState::TUTORIAL_ZEN_GARDEN_KEEP_WATERING && - CountPlantsNeedingFertilizer() > 0) + CountPlantsNeedingFertilizer() > 0) { mBoard->DisplayAdvice("[ADVICE_ZEN_GARDEN_VISIT_STORE]", MessageStyle::MESSAGE_STYLE_HINT_TALL_LONG, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); mBoard->mTutorialState = TutorialState::TUTORIAL_ZEN_GARDEN_VISIT_STORE; mBoard->mStoreButton->mDisabled = false; mBoard->mStoreButton->mBtnNoDraw = false; @@ -1865,12 +1906,12 @@ void ZenGarden::GotoNextGarden() } if ((mBoard->mBackground == BackgroundType::BACKGROUND_MUSHROOM_GARDEN || - mBoard->mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM)) + mBoard->mBackground == BackgroundType::BACKGROUND_ZOMBIQUARIUM)) { if (!mApp->mPlayerInfo->mPurchases[(int)StoreItem::STORE_ITEM_WHEEL_BARROW]) { mBoard->DisplayAdvice("[ADVICE_NEED_WHEELBARROW]", MessageStyle::MESSAGE_STYLE_HINT_TALL_FAST, - AdviceType::ADVICE_NEED_WHEELBARROW); + AdviceType::ADVICE_NEED_WHEELBARROW); } } @@ -1885,14 +1926,14 @@ void ZenGarden::MouseDownWithFullWheelBarrow(int x, int y) if (mApp->mZenGarden->mGardenType == GardenType::GARDEN_AQUARIUM && !Plant::IsAquatic(aPottedPlant->mSeedType)) { mBoard->DisplayAdvice("[ZEN_ONLY_AQUATIC_PLANTS]", MessageStyle::MESSAGE_STYLE_HINT_TALL_FAST, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); return; } int aGridX = mBoard->PixelToGridX(x, y); int aGridY = mBoard->PixelToGridY(x, y); if (aGridX == -1 || aGridY == -1 || - mBoard->CanPlantAt(aGridX, aGridY, aPottedPlant->mSeedType) != PlantingReason::PLANTING_OK) + mBoard->CanPlantAt(aGridX, aGridY, aPottedPlant->mSeedType) != PlantingReason::PLANTING_OK) { return; } @@ -1901,7 +1942,7 @@ void ZenGarden::MouseDownWithFullWheelBarrow(int x, int y) aPottedPlant->mX = aGridX; aPottedPlant->mY = aGridY; int aPottedPlantIndex = - (int)((uintptr_t)aPottedPlant - (uintptr_t)mApp->mPlayerInfo->mPottedPlant) / (int)sizeof(PottedPlant); + (int)((uintptr_t)aPottedPlant - (uintptr_t)mApp->mPlayerInfo->mPottedPlant) / (int)sizeof(PottedPlant); Plant *aPlant = PlacePottedPlant(aPottedPlantIndex); mBoard->DoPlantingEffects(aPottedPlant->mX, aPottedPlant->mY, aPlant); } @@ -2018,8 +2059,8 @@ void ZenGarden::DrawBackdrop(Graphics *g) } if (mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_WHEEL_BARROW || - mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_WHEEELBARROW || - mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_GLOVE) + mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_WHEEELBARROW || + mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_PLANT_FROM_GLOVE) { int aCount; SpecialGridPlacement *aSpecialGrids = GetSpecialGridPlacements(aCount); @@ -2040,14 +2081,14 @@ void ZenGarden::ShowTutorialArrowOnWateringCan() mBoard->GetZenButtonRect(GameObjectType::OBJECT_TYPE_WATERING_CAN, aButtonRect); mBoard->TutorialArrowShow(aButtonRect.mX + 10, aButtonRect.mY + 10); mBoard->DisplayAdvice("[ADVICE_ZEN_GARDEN_PICK_UP_WATER]", MessageStyle::MESSAGE_STYLE_ZEN_GARDEN_LONG, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); mBoard->mTutorialState = TutorialState::TUTORIAL_ZEN_GARDEN_PICKUP_WATER; } void ZenGarden::AdvanceCrazyDaveDialog() { if (mApp->mCrazyDaveMessageIndex == -1 || mApp->GetDialog(Dialogs::DIALOG_STORE) || - mApp->GetDialog(Dialogs::DIALOG_ZEN_SELL)) + mApp->GetDialog(Dialogs::DIALOG_ZEN_SELL)) { return; } @@ -2070,7 +2111,7 @@ void ZenGarden::AdvanceCrazyDaveDialog() PottedPlant aPottedPlant; aPottedPlant.InitializePottedPlant(SeedType::SEED_MARIGOLD); aPottedPlant.mDrawVariation = (DrawVariation)RandRangeInt( - (int)DrawVariation::VARIATION_MARIGOLD_WHITE, (int)DrawVariation::VARIATION_MARIGOLD_LIGHT_GREEN); + (int)DrawVariation::VARIATION_MARIGOLD_WHITE, (int)DrawVariation::VARIATION_MARIGOLD_LIGHT_GREEN); aPottedPlant.mFeedingsPerGrow = 3; mApp->mZenGarden->AddPottedPlant(&aPottedPlant); } @@ -2086,7 +2127,7 @@ bool ZenGarden::MouseDownZenGarden(int x, int y, int theClickCount, HitResult *t mBoard->mChallenge->mChallengeStateCounter = 3000; if (theHitResult->mObjectType == GameObjectType::OBJECT_TYPE_STINKY && - mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_NORMAL) + mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_NORMAL) { WakeStinky(); } @@ -2125,8 +2166,8 @@ bool ZenGarden::MouseDownZenGarden(int x, int y, int theClickCount, HitResult *t } } else if (theHitResult->mObjectType == GameObjectType::OBJECT_TYPE_NONE && - mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_NORMAL && - mGardenType == GardenType::GARDEN_AQUARIUM && theClickCount <= -1) + mBoard->mCursorObject->mCursorType == CursorType::CURSOR_TYPE_NORMAL && + mGardenType == GardenType::GARDEN_AQUARIUM && theClickCount <= -1) { mApp->PlaySample(SOUND_TAPGLASS); } @@ -2153,9 +2194,9 @@ void ZenGarden::SetPlantAnimSpeed(Plant *thePlant) float aTargetRate; if (thePlant->mSeedType == SeedType::SEED_PEASHOOTER || thePlant->mSeedType == SeedType::SEED_SNOWPEA || - thePlant->mSeedType == SeedType::SEED_REPEATER || thePlant->mSeedType == SeedType::SEED_LEFTPEATER || - thePlant->mSeedType == SeedType::SEED_GATLINGPEA || thePlant->mSeedType == SeedType::SEED_SPLITPEA || - thePlant->mSeedType == SeedType::SEED_THREEPEATER || thePlant->mSeedType == SeedType::SEED_MARIGOLD) + thePlant->mSeedType == SeedType::SEED_REPEATER || thePlant->mSeedType == SeedType::SEED_LEFTPEATER || + thePlant->mSeedType == SeedType::SEED_GATLINGPEA || thePlant->mSeedType == SeedType::SEED_SPLITPEA || + thePlant->mSeedType == SeedType::SEED_THREEPEATER || thePlant->mSeedType == SeedType::SEED_MARIGOLD) { aTargetRate = RandRangeFloat(15.0f, 20.0f); } @@ -2245,7 +2286,7 @@ void ZenGarden::PottedPlantUpdate(Plant *thePlant) PottedPlant *aPottedPlant = PottedPlantFromIndex(thePlant->mPottedPlantIndex); std::time_t aNow = std::time(nullptr); if (aPottedPlant->mLastWateredTime > aNow || aPottedPlant->mLastNeedFulfilledTime > aNow || - aPottedPlant->mLastFertilizedTime > aNow || aPottedPlant->mLastChocolateTime > aNow) + aPottedPlant->mLastFertilizedTime > aNow || aPottedPlant->mLastChocolateTime > aNow) { ResetPlantTimers(aPottedPlant); } @@ -2357,7 +2398,7 @@ void ZenGarden::OpenStore() if (mBoard->mTutorialState == TutorialState::TUTORIAL_ZEN_GARDEN_VISIT_STORE) { mBoard->DisplayAdvice("[ADVICE_ZEN_GARDEN_FERTILIZE]", MessageStyle::MESSAGE_STYLE_ZEN_GARDEN_LONG, - AdviceType::ADVICE_NONE); + AdviceType::ADVICE_NONE); mBoard->mTutorialState = TutorialState::TUTORIAL_ZEN_GARDEN_FERTILIZE_PLANTS; } AddStinky(); diff --git a/src/Lawn/Zombie.cpp b/src/Lawn/Zombie.cpp index 2604577..d1b2e9a 100644 --- a/src/Lawn/Zombie.cpp +++ b/src/Lawn/Zombie.cpp @@ -21,53 +21,53 @@ #include "../Sexy.TodLib/TodParticle.h" ZombieDefinition gZombieDefs[NUM_ZOMBIE_TYPES] = { - {ZOMBIE_NORMAL, REANIM_ZOMBIE, 1, 1, 1, 4000, "ZOMBIE"}, - {ZOMBIE_FLAG, REANIM_ZOMBIE, 1, 1, 1, 0, "FLAG_ZOMBIE"}, - {ZOMBIE_TRAFFIC_CONE, REANIM_ZOMBIE, 2, 3, 1, 4000, "CONEHEAD_ZOMBIE"}, - {ZOMBIE_POLEVAULTER, REANIM_POLEVAULTER, 2, 6, 5, 2000, "POLE_VAULTING_ZOMBIE"}, - {ZOMBIE_PAIL, REANIM_ZOMBIE, 4, 8, 1, 3000, "BUCKETHEAD_ZOMBIE"}, - {ZOMBIE_NEWSPAPER, REANIM_ZOMBIE_NEWSPAPER, 2, 11, 1, 1000, "NEWSPAPER_ZOMBIE"}, - {ZOMBIE_DOOR, REANIM_ZOMBIE, 4, 13, 5, 3500, "SCREEN_DOOR_ZOMBIE"}, - {ZOMBIE_FOOTBALL, REANIM_ZOMBIE_FOOTBALL, 7, 16, 5, 2000, "FOOTBALL_ZOMBIE"}, - {ZOMBIE_DANCER, REANIM_DANCER, 5, 18, 5, 1000, "DANCING_ZOMBIE"}, - {ZOMBIE_BACKUP_DANCER, REANIM_BACKUP_DANCER, 1, 18, 1, 0, "BACKUP_DANCER"}, - {ZOMBIE_DUCKY_TUBE, REANIM_ZOMBIE, 1, 21, 5, 0, "DUCKY_TUBE_ZOMBIE"}, - {ZOMBIE_SNORKEL, REANIM_SNORKEL, 3, 23, 10, 2000, "SNORKEL_ZOMBIE"}, - {ZOMBIE_ZAMBONI, REANIM_ZOMBIE_ZAMBONI, 7, 26, 10, 2000, "ZOMBONI"}, - {ZOMBIE_BOBSLED, REANIM_BOBSLED, 3, 26, 10, 2000, "ZOMBIE_BOBSLED_TEAM"}, - {ZOMBIE_DOLPHIN_RIDER, REANIM_ZOMBIE_DOLPHINRIDER, 3, 28, 10, 1500, "DOLPHIN_RIDER_ZOMBIE"}, - {ZOMBIE_JACK_IN_THE_BOX, REANIM_JACKINTHEBOX, 3, 31, 10, 1000, "JACK_IN_THE_BOX_ZOMBIE"}, - {ZOMBIE_BALLOON, REANIM_BALLOON, 2, 33, 10, 2000, "BALLOON_ZOMBIE"}, - {ZOMBIE_DIGGER, REANIM_DIGGER, 4, 36, 10, 1000, "DIGGER_ZOMBIE"}, - {ZOMBIE_POGO, REANIM_POGO, 4, 38, 10, 1000, "POGO_ZOMBIE"}, - {ZOMBIE_YETI, REANIM_YETI, 4, 40, 1, 1, "ZOMBIE_YETI"}, - {ZOMBIE_BUNGEE, REANIM_BUNGEE, 3, 41, 10, 1000, "BUNGEE_ZOMBIE"}, - {ZOMBIE_LADDER, REANIM_LADDER, 4, 43, 10, 1000, "LADDER_ZOMBIE"}, - {ZOMBIE_CATAPULT, REANIM_CATAPULT, 5, 46, 10, 1500, "CATAPULT_ZOMBIE"}, - {ZOMBIE_GARGANTUAR, REANIM_GARGANTUAR, 10, 48, 15, 1500, "GARGANTUAR"}, - {ZOMBIE_IMP, REANIM_IMP, 10, 48, 1, 0, "IMP"}, - {ZOMBIE_BOSS, REANIM_BOSS, 10, 50, 1, 0, "BOSS"}, - {ZOMBIE_PEA_HEAD, REANIM_ZOMBIE, 1, 99, 1, 4000, "ZOMBIE_PEASHOOTER"}, - {ZOMBIE_WALLNUT_HEAD, REANIM_ZOMBIE, 4, 99, 1, 3000, "ZOMBIE_WALLNUT"}, - {ZOMBIE_JALAPENO_HEAD, REANIM_ZOMBIE, 3, 99, 10, 1000, "ZOMBIE_JALAPENO"}, - {ZOMBIE_GATLING_HEAD, REANIM_ZOMBIE, 3, 99, 10, 2000, "ZOMBIE_GATLING"}, - {ZOMBIE_SQUASH_HEAD, REANIM_ZOMBIE, 3, 99, 10, 2000, "ZOMBIE_SQUASH"}, - {ZOMBIE_TALLNUT_HEAD, REANIM_ZOMBIE, 4, 99, 10, 2000, "ZOMBIE_TALLNUT"}, - {ZOMBIE_REDEYE_GARGANTUAR, REANIM_GARGANTUAR, 10, 48, 15, 6000, "REDEYED_GARGANTUAR"}, + { ZOMBIE_NORMAL, REANIM_ZOMBIE, 1, 1, 1, 4000, "ZOMBIE" }, + { ZOMBIE_FLAG, REANIM_ZOMBIE, 1, 1, 1, 0, "FLAG_ZOMBIE" }, + { ZOMBIE_TRAFFIC_CONE, REANIM_ZOMBIE, 2, 3, 1, 4000, "CONEHEAD_ZOMBIE" }, + { ZOMBIE_POLEVAULTER, REANIM_POLEVAULTER, 2, 6, 5, 2000, "POLE_VAULTING_ZOMBIE" }, + { ZOMBIE_PAIL, REANIM_ZOMBIE, 4, 8, 1, 3000, "BUCKETHEAD_ZOMBIE" }, + { ZOMBIE_NEWSPAPER, REANIM_ZOMBIE_NEWSPAPER, 2, 11, 1, 1000, "NEWSPAPER_ZOMBIE" }, + { ZOMBIE_DOOR, REANIM_ZOMBIE, 4, 13, 5, 3500, "SCREEN_DOOR_ZOMBIE" }, + { ZOMBIE_FOOTBALL, REANIM_ZOMBIE_FOOTBALL, 7, 16, 5, 2000, "FOOTBALL_ZOMBIE" }, + { ZOMBIE_DANCER, REANIM_DANCER, 5, 18, 5, 1000, "DANCING_ZOMBIE" }, + { ZOMBIE_BACKUP_DANCER, REANIM_BACKUP_DANCER, 1, 18, 1, 0, "BACKUP_DANCER" }, + { ZOMBIE_DUCKY_TUBE, REANIM_ZOMBIE, 1, 21, 5, 0, "DUCKY_TUBE_ZOMBIE" }, + { ZOMBIE_SNORKEL, REANIM_SNORKEL, 3, 23, 10, 2000, "SNORKEL_ZOMBIE" }, + { ZOMBIE_ZAMBONI, REANIM_ZOMBIE_ZAMBONI, 7, 26, 10, 2000, "ZOMBONI" }, + { ZOMBIE_BOBSLED, REANIM_BOBSLED, 3, 26, 10, 2000, "ZOMBIE_BOBSLED_TEAM" }, + { ZOMBIE_DOLPHIN_RIDER, REANIM_ZOMBIE_DOLPHINRIDER, 3, 28, 10, 1500, "DOLPHIN_RIDER_ZOMBIE" }, + { ZOMBIE_JACK_IN_THE_BOX, REANIM_JACKINTHEBOX, 3, 31, 10, 1000, "JACK_IN_THE_BOX_ZOMBIE" }, + { ZOMBIE_BALLOON, REANIM_BALLOON, 2, 33, 10, 2000, "BALLOON_ZOMBIE" }, + { ZOMBIE_DIGGER, REANIM_DIGGER, 4, 36, 10, 1000, "DIGGER_ZOMBIE" }, + { ZOMBIE_POGO, REANIM_POGO, 4, 38, 10, 1000, "POGO_ZOMBIE" }, + { ZOMBIE_YETI, REANIM_YETI, 4, 40, 1, 1, "ZOMBIE_YETI" }, + { ZOMBIE_BUNGEE, REANIM_BUNGEE, 3, 41, 10, 1000, "BUNGEE_ZOMBIE" }, + { ZOMBIE_LADDER, REANIM_LADDER, 4, 43, 10, 1000, "LADDER_ZOMBIE" }, + { ZOMBIE_CATAPULT, REANIM_CATAPULT, 5, 46, 10, 1500, "CATAPULT_ZOMBIE" }, + { ZOMBIE_GARGANTUAR, REANIM_GARGANTUAR, 10, 48, 15, 1500, "GARGANTUAR" }, + { ZOMBIE_IMP, REANIM_IMP, 10, 48, 1, 0, "IMP" }, + { ZOMBIE_BOSS, REANIM_BOSS, 10, 50, 1, 0, "BOSS" }, + { ZOMBIE_PEA_HEAD, REANIM_ZOMBIE, 1, 99, 1, 4000, "ZOMBIE_PEASHOOTER" }, + { ZOMBIE_WALLNUT_HEAD, REANIM_ZOMBIE, 4, 99, 1, 3000, "ZOMBIE_WALLNUT" }, + { ZOMBIE_JALAPENO_HEAD, REANIM_ZOMBIE, 3, 99, 10, 1000, "ZOMBIE_JALAPENO" }, + { ZOMBIE_GATLING_HEAD, REANIM_ZOMBIE, 3, 99, 10, 2000, "ZOMBIE_GATLING" }, + { ZOMBIE_SQUASH_HEAD, REANIM_ZOMBIE, 3, 99, 10, 2000, "ZOMBIE_SQUASH" }, + { ZOMBIE_TALLNUT_HEAD, REANIM_ZOMBIE, 4, 99, 10, 2000, "ZOMBIE_TALLNUT" }, + { ZOMBIE_REDEYE_GARGANTUAR, REANIM_GARGANTUAR, 10, 48, 15, 6000, "REDEYED_GARGANTUAR" }, }; -static ZombieType gBossZombieList[] = {ZombieType::ZOMBIE_TRAFFIC_CONE, - ZombieType::ZOMBIE_PAIL, - ZombieType::ZOMBIE_FOOTBALL, - ZombieType::ZOMBIE_POLEVAULTER, - ZombieType::ZOMBIE_JACK_IN_THE_BOX, - ZombieType::ZOMBIE_LADDER, - ZombieType::ZOMBIE_ZAMBONI, - ZombieType::ZOMBIE_CATAPULT, - ZombieType::ZOMBIE_POGO, - ZombieType::ZOMBIE_NEWSPAPER, - ZombieType::ZOMBIE_DOOR, - ZombieType::ZOMBIE_GARGANTUAR}; +static ZombieType gBossZombieList[] = { ZombieType::ZOMBIE_TRAFFIC_CONE, + ZombieType::ZOMBIE_PAIL, + ZombieType::ZOMBIE_FOOTBALL, + ZombieType::ZOMBIE_POLEVAULTER, + ZombieType::ZOMBIE_JACK_IN_THE_BOX, + ZombieType::ZOMBIE_LADDER, + ZombieType::ZOMBIE_ZAMBONI, + ZombieType::ZOMBIE_CATAPULT, + ZombieType::ZOMBIE_POGO, + ZombieType::ZOMBIE_NEWSPAPER, + ZombieType::ZOMBIE_DOOR, + ZombieType::ZOMBIE_GARGANTUAR }; ZombieDefinition &GetZombieDefinition(ZombieType theZombieType) { @@ -367,7 +367,8 @@ void Zombie::ZombieInitialize(int theRow, ZombieType theType, bool theVariant, Z } else { - aPoleVariant = aPoleHit < 10 ? 2 : aPoleHit < 35 ? 1 : 0; + aPoleVariant = aPoleHit < 10 ? 2 : aPoleHit < 35 ? 1 + : 0; } Reanimation *aBodyReanim = mApp->ReanimationGet(mBodyReanimID); @@ -458,7 +459,7 @@ void Zombie::ZombieInitialize(int theRow, ZombieType theType, bool theVariant, Z { int aPosition = 0; while (aPosition < NUM_BOBSLED_FOLLOWERS && - theParentZombie->mFollowerZombieID[aPosition] != ZombieID::ZOMBIEID_NULL) + theParentZombie->mFollowerZombieID[aPosition] != ZombieID::ZOMBIEID_NULL) { aPosition++; } @@ -524,7 +525,7 @@ void Zombie::ZombieInitialize(int theRow, ZombieType theType, bool theVariant, Z aBodyReanim->mFrameBasePose = 0; if (mApp->mPlayerInfo != nullptr && mApp->mPlayerInfo->mNumZombatars > 0 && - mApp->mPlayerInfo->mZombatarIndex > -1) + mApp->mPlayerInfo->mZombatarIndex > -1) { SetupZombatar(); UpdateZombatar(mApp->mPlayerInfo->mZombatars[mApp->mPlayerInfo->mZombatarIndex]); @@ -584,7 +585,7 @@ void Zombie::ZombieInitialize(int theRow, ZombieType theType, bool theVariant, Z case ZombieType::ZOMBIE_DANCER: mScaleZombie = - 0.8f; // Turns out GOTY's Disco + Backup Dancer Zombies are bigger then the normal one... and they scaled them down to 0.8 ... yea i checked the assembly... -Electr0Gunner + 0.8f; // Turns out GOTY's Disco + Backup Dancer Zombies are bigger then the normal one... and they scaled them down to 0.8 ... yea i checked the assembly... -Electr0Gunner if (!IsOnBoard()) { PlayZombieReanim("anim_moonwalk", ReanimLoopType::REANIM_LOOP, 0, 12.0f); @@ -848,7 +849,7 @@ void Zombie::SetupDoorArms(Reanimation *aReanim, bool theShow) aReanim->AssignRenderGroupToPrefix("Zombie_outerarm_upper", aArmGroup); aReanim->AssignRenderGroupToPrefix("anim_innerarm", aArmGroup); aReanim->AssignRenderGroupToPrefix("Zombie_outerarm_screendoor", - theShow ? RENDER_GROUP_OVER_SHIELD : RENDER_GROUP_HIDDEN); + theShow ? RENDER_GROUP_OVER_SHIELD : RENDER_GROUP_HIDDEN); aReanim->AssignRenderGroupToPrefix("Zombie_innerarm_screendoor", aDoorGroup); aReanim->AssignRenderGroupToPrefix("Zombie_innerarm_screendoor_hand", aDoorGroup); } @@ -950,7 +951,7 @@ void Zombie::LoadPlainZombieReanim() } if ((mBoard && mBoard->mPlantRow[mRow] == PlantRowType::PLANTROW_POOL) || - mZombieType == ZombieType::ZOMBIE_DUCKY_TUBE) + mZombieType == ZombieType::ZOMBIE_DUCKY_TUBE) { ReanimShowPrefix("zombie_duckytube", RENDER_GROUP_NORMAL); ReanimIgnoreClipRect("Zombie_duckytube", true); @@ -991,23 +992,23 @@ void Zombie::SetupZombatar() aHeadReanim->AssignRenderGroupToPrefix("anim_head1", RENDER_GROUP_NORMAL); aHeadReanim->AssignRenderGroupToPrefix("anim_head2", RENDER_GROUP_NORMAL); -#define CREATE_REANIM(id_holder) \ - { \ - Reanimation *aItemReanim = mApp->AddReanimation(0.0f, 0.0f, 0, ReanimationType::REANIM_ZOMBATAR_HEAD); \ - aItemReanim->PlayReanim("anim_head1", ReanimLoopType::REANIM_LOOP, 0, 15.0f); \ - AttachEffect *aAttachEffect = AttachReanim(aTrackInstance->mAttachmentID, aItemReanim, 0.0f, 0.0f); \ - aItemReanim->mFrameBasePose = 0; \ - TodScaleRotateTransformMatrix(aAttachEffect->mOffset, -20.0f, -0.0f, 0.2f, 1.0f, 1.0f); \ - id_holder = mApp->ReanimationGetID(aItemReanim); \ - aItemReanim->AssignRenderGroupToPrefix("hats_", RENDER_GROUP_HIDDEN); \ - aItemReanim->AssignRenderGroupToPrefix("hair_", RENDER_GROUP_HIDDEN); \ - aItemReanim->AssignRenderGroupToPrefix("facialHair_", RENDER_GROUP_HIDDEN); \ - aItemReanim->AssignRenderGroupToPrefix("accessories_", RENDER_GROUP_HIDDEN); \ - aItemReanim->AssignRenderGroupToPrefix("eyeWear_", RENDER_GROUP_HIDDEN); \ - aItemReanim->AssignRenderGroupToPrefix("tidBits_", RENDER_GROUP_HIDDEN); \ - aItemReanim->AssignRenderGroupToPrefix("anim_hair", RENDER_GROUP_HIDDEN); \ - aItemReanim->AssignRenderGroupToPrefix("anim_head1", RENDER_GROUP_HIDDEN); \ - aItemReanim->AssignRenderGroupToPrefix("anim_head2", RENDER_GROUP_HIDDEN); \ +#define CREATE_REANIM(id_holder) \ + { \ + Reanimation *aItemReanim = mApp->AddReanimation(0.0f, 0.0f, 0, ReanimationType::REANIM_ZOMBATAR_HEAD); \ + aItemReanim->PlayReanim("anim_head1", ReanimLoopType::REANIM_LOOP, 0, 15.0f); \ + AttachEffect *aAttachEffect = AttachReanim(aTrackInstance->mAttachmentID, aItemReanim, 0.0f, 0.0f); \ + aItemReanim->mFrameBasePose = 0; \ + TodScaleRotateTransformMatrix(aAttachEffect->mOffset, -20.0f, -0.0f, 0.2f, 1.0f, 1.0f); \ + id_holder = mApp->ReanimationGetID(aItemReanim); \ + aItemReanim->AssignRenderGroupToPrefix("hats_", RENDER_GROUP_HIDDEN); \ + aItemReanim->AssignRenderGroupToPrefix("hair_", RENDER_GROUP_HIDDEN); \ + aItemReanim->AssignRenderGroupToPrefix("facialHair_", RENDER_GROUP_HIDDEN); \ + aItemReanim->AssignRenderGroupToPrefix("accessories_", RENDER_GROUP_HIDDEN); \ + aItemReanim->AssignRenderGroupToPrefix("eyeWear_", RENDER_GROUP_HIDDEN); \ + aItemReanim->AssignRenderGroupToPrefix("tidBits_", RENDER_GROUP_HIDDEN); \ + aItemReanim->AssignRenderGroupToPrefix("anim_hair", RENDER_GROUP_HIDDEN); \ + aItemReanim->AssignRenderGroupToPrefix("anim_head1", RENDER_GROUP_HIDDEN); \ + aItemReanim->AssignRenderGroupToPrefix("anim_head2", RENDER_GROUP_HIDDEN); \ } CREATE_REANIM(mTidbitsReanimID) @@ -1036,29 +1037,29 @@ void Zombie::UpdateZombatar(Zombatar &aZombatar) { SexyString aNum = StrFormat("%d", aZombatar.mHat); aHatReanim->AssignRenderGroupToPrefix( - StrFormat("%s_%s", "hats", aZombatar.mHat < 10 ? ("0" + aNum).c_str() : aNum.c_str()).c_str(), - RENDER_GROUP_NORMAL); + StrFormat("%s_%s", "hats", aZombatar.mHat < 10 ? ("0" + aNum).c_str() : aNum.c_str()).c_str(), + RENDER_GROUP_NORMAL); }; if (aZombatar.mHair != -1) { SexyString aNum = StrFormat("%d", aZombatar.mHair); aHairReanim->AssignRenderGroupToPrefix( - StrFormat("%s_%s", "hair", aZombatar.mHair < 10 ? ("0" + aNum).c_str() : aNum.c_str()).c_str(), - RENDER_GROUP_NORMAL); + StrFormat("%s_%s", "hair", aZombatar.mHair < 10 ? ("0" + aNum).c_str() : aNum.c_str()).c_str(), + RENDER_GROUP_NORMAL); }; if (aZombatar.mTidbits != -1) { SexyString aNum = StrFormat("%d", aZombatar.mTidbits); aTidbitsReanim->AssignRenderGroupToPrefix( - StrFormat("%s_%s", "tidBits", aZombatar.mTidbits < 10 ? ("0" + aNum).c_str() : aNum.c_str()).c_str(), - RENDER_GROUP_NORMAL); + StrFormat("%s_%s", "tidBits", aZombatar.mTidbits < 10 ? ("0" + aNum).c_str() : aNum.c_str()).c_str(), + RENDER_GROUP_NORMAL); }; if (aZombatar.mEyewear != -1) { SexyString aNum = StrFormat("%d", aZombatar.mEyewear); aEyewearReanim->AssignRenderGroupToPrefix( - StrFormat("%s_%s", "eyeWear", aZombatar.mEyewear < 10 ? ("0" + aNum).c_str() : aNum.c_str()).c_str(), - RENDER_GROUP_NORMAL); + StrFormat("%s_%s", "eyeWear", aZombatar.mEyewear < 10 ? ("0" + aNum).c_str() : aNum.c_str()).c_str(), + RENDER_GROUP_NORMAL); }; if (aZombatar.mAccessories != -1) { @@ -1084,15 +1085,15 @@ void Zombie::UpdateZombatar(Zombatar &aZombatar) SexyString aNum = StrFormat("%d", aCorrectAccessory); aAccessoriesReanim->AssignRenderGroupToPrefix( - StrFormat("%s_%s", "accessories", aCorrectAccessory < 10 ? ("0" + aNum).c_str() : aNum.c_str()).c_str(), - RENDER_GROUP_NORMAL); + StrFormat("%s_%s", "accessories", aCorrectAccessory < 10 ? ("0" + aNum).c_str() : aNum.c_str()).c_str(), + RENDER_GROUP_NORMAL); }; if (aZombatar.mFacialHair != -1) { SexyString aNum = StrFormat("%d", aZombatar.mFacialHair); aFacialHairReanim->AssignRenderGroupToPrefix( - StrFormat("%s_%s", "facialHair", aZombatar.mFacialHair < 10 ? ("0" + aNum).c_str() : aNum.c_str()).c_str(), - RENDER_GROUP_NORMAL); + StrFormat("%s_%s", "facialHair", aZombatar.mFacialHair < 10 ? ("0" + aNum).c_str() : aNum.c_str()).c_str(), + RENDER_GROUP_NORMAL); }; } @@ -1115,15 +1116,15 @@ void Zombie::ResetZombatar() Reanimation *aHatReanim = mApp->ReanimationGet(mHatReanimID); Reanimation *aHeadReanim = mApp->ReanimationGet(mBaseHeadReanimID); -#define RESET_REANIM(reanim) \ - if (reanim) \ - { \ - reanim->AssignRenderGroupToPrefix("hats_", RENDER_GROUP_HIDDEN); \ - reanim->AssignRenderGroupToPrefix("hair_", RENDER_GROUP_HIDDEN); \ - reanim->AssignRenderGroupToPrefix("facialHair_", RENDER_GROUP_HIDDEN); \ - reanim->AssignRenderGroupToPrefix("accessories_", RENDER_GROUP_HIDDEN); \ - reanim->AssignRenderGroupToPrefix("eyeWear_", RENDER_GROUP_HIDDEN); \ - reanim->AssignRenderGroupToPrefix("tidBits_", RENDER_GROUP_HIDDEN); \ +#define RESET_REANIM(reanim) \ + if (reanim) \ + { \ + reanim->AssignRenderGroupToPrefix("hats_", RENDER_GROUP_HIDDEN); \ + reanim->AssignRenderGroupToPrefix("hair_", RENDER_GROUP_HIDDEN); \ + reanim->AssignRenderGroupToPrefix("facialHair_", RENDER_GROUP_HIDDEN); \ + reanim->AssignRenderGroupToPrefix("accessories_", RENDER_GROUP_HIDDEN); \ + reanim->AssignRenderGroupToPrefix("eyeWear_", RENDER_GROUP_HIDDEN); \ + reanim->AssignRenderGroupToPrefix("tidBits_", RENDER_GROUP_HIDDEN); \ } RESET_REANIM(aHeadReanim) @@ -1175,7 +1176,7 @@ int Zombie::CountBungeesTargetingSunFlowers() if (!aZombie->IsDeadOrDying() && aZombie->mZombieType == ZombieType::ZOMBIE_BUNGEE && aZombie->mTargetCol != -1) { Plant *aPlant = - mBoard->GetTopPlantAt(aZombie->mTargetCol, aZombie->mRow, PlantPriority::TOPPLANT_BUNGEE_ORDER); + mBoard->GetTopPlantAt(aZombie->mTargetCol, aZombie->mRow, PlantPriority::TOPPLANT_BUNGEE_ORDER); if (aPlant && aPlant->MakesSun()) { aCount++; @@ -1218,7 +1219,7 @@ void Zombie::PickBungeeZombieTarget(int theColumn) } if (aPlant->mSeedType == SeedType::SEED_GRAVEBUSTER || - aPlant->mSeedType == SeedType::SEED_COBCANNON) + aPlant->mSeedType == SeedType::SEED_COBCANNON) { continue; } @@ -1302,13 +1303,13 @@ void Zombie::PickRandomSpeed() mVelX = 0.4f; } else if (mZombieType == ZombieType::ZOMBIE_DANCER || mZombieType == ZombieType::ZOMBIE_BACKUP_DANCER || - mZombieType == ZombieType::ZOMBIE_POGO || mZombieType == ZombieType::ZOMBIE_FLAG) + mZombieType == ZombieType::ZOMBIE_POGO || mZombieType == ZombieType::ZOMBIE_FLAG) { mVelX = 0.45f; } else if (mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING || - mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_PRE_VAULT || mZombieType == ZombieType::ZOMBIE_FOOTBALL || - mZombieType == ZombieType::ZOMBIE_SNORKEL || mZombieType == ZombieType::ZOMBIE_JACK_IN_THE_BOX) + mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_PRE_VAULT || mZombieType == ZombieType::ZOMBIE_FOOTBALL || + mZombieType == ZombieType::ZOMBIE_SNORKEL || mZombieType == ZombieType::ZOMBIE_JACK_IN_THE_BOX) { mVelX = RandRangeFloat(0.66f, 0.68f); } @@ -1317,7 +1318,7 @@ void Zombie::PickRandomSpeed() mVelX = RandRangeFloat(0.79f, 0.81f); } else if (mZombiePhase == ZombiePhase::PHASE_NEWSPAPER_MAD || mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING || - mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING_WITHOUT_DOLPHIN) + mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING_WITHOUT_DOLPHIN) { mVelX = RandRangeFloat(0.89f, 0.91f); } @@ -1367,7 +1368,7 @@ void Zombie::BungeeLiftTarget() while (mBoard->IterateZombies(aZombie)) { if (aZombie->mZombieType == ZombieType::ZOMBIE_BUNGEE && aZombie != this && - aZombie->mTargetPlantID == mTargetPlantID) + aZombie->mTargetPlantID == mTargetPlantID) { aZombie->mTargetPlantID = PlantID::PLANTID_NULL; } @@ -1383,7 +1384,7 @@ void Zombie::BungeeLiftTarget() } if (aPlant->mSeedType == SeedType::SEED_CATTAIL && - mBoard->GetTopPlantAt(mTargetCol, mRow, PlantPriority::TOPPLANT_ONLY_PUMPKIN)) + mBoard->GetTopPlantAt(mTargetCol, mRow, PlantPriority::TOPPLANT_ONLY_PUMPKIN)) { mBoard->NewPlant(mTargetCol, mRow, SeedType::SEED_LILYPAD, SeedType::SEED_NONE); } @@ -1453,7 +1454,7 @@ void Zombie::UpdateZombieBungee() float aOldAltitude = mAltitude; mAltitude -= 8.0f; if (mAltitude <= BUNGEE_ZOMBIE_HEIGHT - 404.0f && aOldAltitude > BUNGEE_ZOMBIE_HEIGHT - 404.0f && - mRelatedZombieID == ZombieID::ZOMBIEID_NULL) + mRelatedZombieID == ZombieID::ZOMBIEID_NULL) { mApp->PlayFoley(FoleyType::FOLEY_GRASSSTEP); } @@ -1518,12 +1519,12 @@ void Zombie::PogoBreak(unsigned int theDamageFlags) float aPosX, aPosY; GetTrackPosition("Zombie_pogo_stick", aPosX, aPosY); TodParticleSystem *aParticle = - mApp->AddTodParticle(aPosX, aPosY + 30.0f, mRenderOrder + 1, ParticleEffect::PARTICLE_ZOMBIE_POGO); + mApp->AddTodParticle(aPosX, aPosY + 30.0f, mRenderOrder + 1, ParticleEffect::PARTICLE_ZOMBIE_POGO); OverrideParticleScale(aParticle); } TOD_ASSERT(mZombiePhase != ZombiePhase::PHASE_ZOMBIE_DYING && mZombiePhase != ZombiePhase::PHASE_ZOMBIE_BURNED && - !mDead); + !mDead); mZombieHeight = ZombieHeight::HEIGHT_FALLING; mZombiePhase = ZombiePhase::PHASE_ZOMBIE_NORMAL; @@ -1559,7 +1560,7 @@ void Zombie::UpdateZombiePogo() aHeight = 170.0f; } mAltitude = TodAnimateCurveFloat(POGO_BOUNCE_TIME, 0, mPhaseCounter, 9.0f, aHeight + 9.0f, - TodCurves::CURVE_BOUNCE_SLOW_MIDDLE); + TodCurves::CURVE_BOUNCE_SLOW_MIDDLE); mFrame = ClampInt(3 - mAltitude / 3, 0, 3); if (mPhaseCounter == 7) @@ -1595,7 +1596,7 @@ void Zombie::UpdateZombiePogo() { mApp->PlayFoley(FoleyType::FOLEY_BONK); mApp->AddTodParticle(aPlant->mX + 60, aPlant->mY - 20, mRenderOrder + 1, - ParticleEffect::PARTICLE_TALL_NUT_BLOCK); + ParticleEffect::PARTICLE_TALL_NUT_BLOCK); mShieldType = ShieldType::SHIELDTYPE_NONE; PogoBreak(0U); @@ -1653,7 +1654,7 @@ void Zombie::ZombieCatapultFire(Plant *thePlant) mApp->PlayFoley(FoleyType::FOLEY_BASKETBALL); Projectile *aProjectile = - mBoard->AddProjectile(aOriginX, aOriginY, mRenderOrder, mRow, ProjectileType::PROJECTILE_BASKETBALL); + mBoard->AddProjectile(aOriginX, aOriginY, mRenderOrder, mRow, ProjectileType::PROJECTILE_BASKETBALL); float aRangeX = aOriginX - aTargetX - 20.0f; float aRangeY = aTargetY - aOriginY; if (aRangeX < 40.0f) @@ -1679,7 +1680,7 @@ Plant *Zombie::FindCatapultTarget() if (aTarget == nullptr || aPlant->mPlantCol < aTarget->mPlantCol) { aTarget = - mBoard->GetTopPlantAt(aPlant->mPlantCol, aPlant->mRow, PlantPriority::TOPPLANT_CATAPULT_ORDER); + mBoard->GetTopPlantAt(aPlant->mPlantCol, aPlant->mRow, PlantPriority::TOPPLANT_CATAPULT_ORDER); } } } @@ -1758,7 +1759,7 @@ void Zombie::UpdateZombieCatapult() void Zombie::LandFlyer(unsigned int theDamageFlags) { if (!TestBit(theDamageFlags, (int)DamageFlags::DAMAGE_DOESNT_LEAVE_BODY) && - mZombiePhase == ZombiePhase::PHASE_BALLOON_FLYING) + mZombiePhase == ZombiePhase::PHASE_BALLOON_FLYING) { mApp->PlaySample(SOUND_BALLOON_POP); mZombiePhase = ZombiePhase::PHASE_BALLOON_POPPING; @@ -1797,7 +1798,7 @@ void Zombie::UpdateZombieFlyer() } if (mApp->IsIZombieLevel() && mZombiePhase == ZombiePhase::PHASE_BALLOON_FLYING && - mBoard->mChallenge->IZombieGetBrainTarget(this)) + mBoard->mChallenge->IZombieGetBrainTarget(this)) { LandFlyer(0U); } @@ -1825,7 +1826,7 @@ void Zombie::UpdateZombieNewspaper() void Zombie::UpdateZombiePolevaulter() { if (mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_PRE_VAULT && mHasHead && - mZombieHeight == ZombieHeight::HEIGHT_ZOMBIE_NORMAL) + mZombieHeight == ZombieHeight::HEIGHT_ZOMBIE_NORMAL) { Plant *aPlant = FindPlantTarget(ZombieAttackType::ATTACKTYPE_VAULT); if (aPlant) @@ -1834,7 +1835,7 @@ void Zombie::UpdateZombiePolevaulter() { float aPlantX = mBoard->GridToPixelX(aPlant->mPlantCol, aPlant->mRow) + 40; if (aPlantX > mPosX && mZombieHeight == ZombieHeight::HEIGHT_ZOMBIE_NORMAL && - mUseLadderCol != aPlant->mPlantCol) + mUseLadderCol != aPlant->mPlantCol) { mZombieHeight = ZombieHeight::HEIGHT_UP_LADDER; mUseLadderCol = aPlant->mPlantCol; @@ -1875,7 +1876,7 @@ void Zombie::UpdateZombiePolevaulter() mApp->PlayFoley(FoleyType::FOLEY_BONK); aJumpEnds = true; mApp->AddTodParticle(aPlant->mX + 60, aPlant->mY - 20, mRenderOrder + 1, - ParticleEffect::PARTICLE_TALL_NUT_BLOCK); + ParticleEffect::PARTICLE_TALL_NUT_BLOCK); mZombieHeight = ZombieHeight::HEIGHT_FALLING; mPosX = aPlant->mX; @@ -1949,7 +1950,7 @@ void Zombie::UpdateZombieDolphinRider() if (aBodyReanim->ShouldTriggerTimedEvent(0.56f)) { Reanimation *aSplashReanim = - mApp->AddReanimation(mX - 83, mY + 73, mRenderOrder + 1, ReanimationType::REANIM_SPLASH); + mApp->AddReanimation(mX - 83, mY + 73, mRenderOrder + 1, ReanimationType::REANIM_SPLASH); aSplashReanim->OverrideScale(1.2f, 0.8f); mApp->AddTodParticle(mX - 46, mY + 115, mRenderOrder + 1, ParticleEffect::PARTICLE_PLANTING_POOL); mApp->PlayFoley(FoleyType::FOLEY_ZOMBIE_ENTERING_WATER); @@ -2007,7 +2008,7 @@ void Zombie::UpdateZombieDolphinRider() mApp->PlayFoley(FoleyType::FOLEY_BONK); aJumpEnds = true; mApp->AddTodParticle(aPlant->mX + 60, aPlant->mY - 20, mRenderOrder + 1, - ParticleEffect::PARTICLE_TALL_NUT_BLOCK); + ParticleEffect::PARTICLE_TALL_NUT_BLOCK); mZombieHeight = ZombieHeight::HEIGHT_FALLING; mPosX = aPlant->mX + 25.0f; @@ -2017,7 +2018,7 @@ void Zombie::UpdateZombieDolphinRider() else if (aBodyReanim->ShouldTriggerTimedEvent(0.49f)) { Reanimation *aSplashReanim = - mApp->AddReanimation(mX - 63, mY + 73, mRenderOrder + 1, ReanimationType::REANIM_SPLASH); + mApp->AddReanimation(mX - 63, mY + 73, mRenderOrder + 1, ReanimationType::REANIM_SPLASH); aSplashReanim->OverrideScale(1.2f, 0.8f); mApp->AddTodParticle(mX - 26, mY + 115, mRenderOrder + 1, ParticleEffect::PARTICLE_PLANTING_POOL); mApp->PlayFoley(FoleyType::FOLEY_ZOMBIE_ENTERING_WATER); @@ -2073,7 +2074,7 @@ void Zombie::UpdateZombieSnorkel() if (aBodyReanim->ShouldTriggerTimedEvent(0.83f)) { Reanimation *aSplashReanim = - mApp->AddReanimation(mX - 47, mY + 73, mRenderOrder + 1, ReanimationType::REANIM_SPLASH); + mApp->AddReanimation(mX - 47, mY + 73, mRenderOrder + 1, ReanimationType::REANIM_SPLASH); aSplashReanim->OverrideScale(1.2f, 0.8f); mApp->AddTodParticle(mX - 10, mY + 115, mRenderOrder + 1, ParticleEffect::PARTICLE_PLANTING_POOL); mApp->PlayFoley(FoleyType::FOLEY_ZOMBIE_ENTERING_WATER); @@ -2091,7 +2092,7 @@ void Zombie::UpdateZombieSnorkel() if (!mHasHead) { TakeDamage(1800, - GetBit(DamageFlags::DAMAGE_BYPASSES_SHIELD) | GetBit(DamageFlags::DAMAGE_DOESNT_CAUSE_FLASH)); + GetBit(DamageFlags::DAMAGE_BYPASSES_SHIELD) | GetBit(DamageFlags::DAMAGE_DOESNT_CAUSE_FLASH)); } else if (mX <= 25 && !aBackwards) { @@ -2183,21 +2184,21 @@ void Zombie::UpdateZombieJackInTheBox() if (mMindControlled) { mBoard->KillAllZombiesInRadius( - mRow, aPosX, aPosY, JackInTheBoxZombieRadius, 1, true, - GetBit(DamageRangeFlags::DAMAGES_GROUND) | GetBit(DamageRangeFlags::DAMAGES_SUBMERGED) | - GetBit(DamageRangeFlags::DAMAGES_FLYING) | GetBit(DamageRangeFlags::DAMAGES_DOG) | - GetBit(DamageRangeFlags::DAMAGES_OFF_GROUND) | GetBit(DamageRangeFlags::DAMAGES_DYING) | - GetBit(DamageRangeFlags::DAMAGES_UNDERGROUND)); + mRow, aPosX, aPosY, JackInTheBoxZombieRadius, 1, true, + GetBit(DamageRangeFlags::DAMAGES_GROUND) | GetBit(DamageRangeFlags::DAMAGES_SUBMERGED) | + GetBit(DamageRangeFlags::DAMAGES_FLYING) | GetBit(DamageRangeFlags::DAMAGES_DOG) | + GetBit(DamageRangeFlags::DAMAGES_OFF_GROUND) | GetBit(DamageRangeFlags::DAMAGES_DYING) | + GetBit(DamageRangeFlags::DAMAGES_UNDERGROUND)); } else { mBoard->KillAllZombiesInRadius(mRow, aPosX, aPosY, JackInTheBoxZombieRadius, 1, true, - GetBit(DamageRangeFlags::DAMAGES_MINDCONTROLLED)); + GetBit(DamageRangeFlags::DAMAGES_MINDCONTROLLED)); mBoard->KillAllPlantsInRadius(aPosX, aPosY, JackInTheBoxPlantRadius); } mApp->AddTodParticle(aPosX, aPosY, Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 0), - ParticleEffect::PARTICLE_JACKEXPLODE); + ParticleEffect::PARTICLE_JACKEXPLODE); mBoard->ShakeBoard(4, -6); DieNoLoot(); @@ -2449,13 +2450,13 @@ void Zombie::UpdateZombiePeaHead() { aOriginX += 90.0f * mScaleZombie; Projectile *aProjectile = - mBoard->AddProjectile(aOriginX, aOriginY, mRenderOrder, mRow, ProjectileType::PROJECTILE_PEA); + mBoard->AddProjectile(aOriginX, aOriginY, mRenderOrder, mRow, ProjectileType::PROJECTILE_PEA); aProjectile->mDamageRangeFlags = GetBit(DamageRangeFlags::DAMAGES_GROUND); } else { Projectile *aProjectile = - mBoard->AddProjectile(aOriginX, aOriginY, mRenderOrder, mRow, ProjectileType::PROJECTILE_ZOMBIE_PEA); + mBoard->AddProjectile(aOriginX, aOriginY, mRenderOrder, mRow, ProjectileType::PROJECTILE_ZOMBIE_PEA); aProjectile->mMotionType = ProjectileMotion::MOTION_BACKWARDS; aProjectile->mDamageRangeFlags = GetBit(DamageRangeFlags::DAMAGES_MINDCONTROLLED); } @@ -2470,11 +2471,11 @@ void Zombie::BurnRow(int theRow) while (mBoard->IterateZombies(aZombie)) { if ((aZombie->mZombieType == ZombieType::ZOMBIE_BOSS || aZombie->mRow == theRow) && - aZombie->EffectedByDamage( - GetBit(DamageRangeFlags::DAMAGES_GROUND) | GetBit(DamageRangeFlags::DAMAGES_SUBMERGED) | - GetBit(DamageRangeFlags::DAMAGES_FLYING) | GetBit(DamageRangeFlags::DAMAGES_DOG) | - GetBit(DamageRangeFlags::DAMAGES_OFF_GROUND) | GetBit(DamageRangeFlags::DAMAGES_DYING) | - GetBit(DamageRangeFlags::DAMAGES_UNDERGROUND))) + aZombie->EffectedByDamage( + GetBit(DamageRangeFlags::DAMAGES_GROUND) | GetBit(DamageRangeFlags::DAMAGES_SUBMERGED) | + GetBit(DamageRangeFlags::DAMAGES_FLYING) | GetBit(DamageRangeFlags::DAMAGES_DOG) | + GetBit(DamageRangeFlags::DAMAGES_OFF_GROUND) | GetBit(DamageRangeFlags::DAMAGES_DYING) | + GetBit(DamageRangeFlags::DAMAGES_UNDERGROUND))) { aZombie->RemoveColdEffects(); aZombie->ApplyBurn(); @@ -2556,13 +2557,13 @@ void Zombie::UpdateZombieGatlingHead() { aOriginX += 90.0f * mScaleZombie; Projectile *aProjectile = - mBoard->AddProjectile(aOriginX, aOriginY, mRenderOrder, mRow, ProjectileType::PROJECTILE_PEA); + mBoard->AddProjectile(aOriginX, aOriginY, mRenderOrder, mRow, ProjectileType::PROJECTILE_PEA); aProjectile->mDamageRangeFlags = GetBit(DamageRangeFlags::DAMAGES_GROUND); } else { Projectile *aProjectile = - mBoard->AddProjectile(aOriginX, aOriginY, mRenderOrder, mRow, ProjectileType::PROJECTILE_ZOMBIE_PEA); + mBoard->AddProjectile(aOriginX, aOriginY, mRenderOrder, mRow, ProjectileType::PROJECTILE_ZOMBIE_PEA); aProjectile->mMotionType = ProjectileMotion::MOTION_BACKWARDS; } } @@ -2661,16 +2662,16 @@ void Zombie::UpdateZombieSquashHead() while (mBoard->IterateZombies(aZombie)) { if ((aZombie->mRow == mRow || aZombie->mZombieType == ZombieType::ZOMBIE_BOSS) && - aZombie->EffectedByDamage(GetBit(DamageRangeFlags::DAMAGES_GROUND) | - GetBit(DamageRangeFlags::DAMAGES_SUBMERGED) | - GetBit(DamageRangeFlags::DAMAGES_DOG))) + aZombie->EffectedByDamage(GetBit(DamageRangeFlags::DAMAGES_GROUND) | + GetBit(DamageRangeFlags::DAMAGES_SUBMERGED) | + GetBit(DamageRangeFlags::DAMAGES_DOG))) { Rect aZombieRect = aZombie->GetZombieRect(); if (GetRectOverlap(aAttackRect, aZombieRect) > - (aZombie->mZombieType == ZombieType::ZOMBIE_FOOTBALL ? -20 : 0)) + (aZombie->mZombieType == ZombieType::ZOMBIE_FOOTBALL ? -20 : 0)) { aZombie->TakeDamage(1800, GetBit(DamageFlags::DAMAGE_HITS_SHIELD_AND_BODY) | - GetBit(DamageFlags::DAMAGE_DOESNT_LEAVE_BODY)); + GetBit(DamageFlags::DAMAGE_DOESNT_LEAVE_BODY)); } } } @@ -2819,7 +2820,7 @@ void Zombie::UpdateZombieDigger() mApp->AddTodParticle(mPosX + 60.0f, mPosY + 118.0f, mRenderOrder + 1, ParticleEffect::PARTICLE_DIGGER_RISE); Reanimation *aDirtReanim = mApp->AddReanimation(mPosX + 13.0f, mPosY + 97.0f, mRenderOrder + 1, - ReanimationType::REANIM_DIGGER_DIRT); + ReanimationType::REANIM_DIGGER_DIRT); aDirtReanim->mAnimRate = 24.0f; } } @@ -2863,7 +2864,7 @@ void Zombie::UpdateZombieDigger() mApp->PlayFoley(FoleyType::FOLEY_DIRT_RISE); mApp->AddTodParticle(mPosX + 60.0f, mPosY + 118.0f, mRenderOrder + 1, ParticleEffect::PARTICLE_DIGGER_RISE); Reanimation *aDirtReanim = mApp->AddReanimation(mPosX + 13.0f, mPosY + 97.0f, mRenderOrder + 1, - ReanimationType::REANIM_DIGGER_DIRT); + ReanimationType::REANIM_DIGGER_DIRT); aDirtReanim->mAnimRate = 24.0f; } } @@ -3020,7 +3021,7 @@ void Zombie::UpdateZombieBackupDancer() if (mZombiePhase == ZombiePhase::PHASE_DANCER_RISING) { mAltitude = - TodAnimateCurve(150, 0, mPhaseCounter, ZOMBIE_BACKUP_DANCER_RISE_HEIGHT, 0, TodCurves::CURVE_LINEAR); + TodAnimateCurve(150, 0, mPhaseCounter, ZOMBIE_BACKUP_DANCER_RISE_HEIGHT, 0, TodCurves::CURVE_LINEAR); if (mPhaseCounter != 0) return; @@ -3090,7 +3091,7 @@ void Zombie::UpdateZombieDancer() } } else if (mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS || - mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS_WITH_LIGHT) + mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS_WITH_LIGHT) { Reanimation *aBodyReanim = mApp->ReanimationTryToGet(mBodyReanimID); if (aBodyReanim->mLoopCount > 0) @@ -3199,7 +3200,7 @@ bool Zombie::ZombiquariumFindClosestBrain() if (aGridItem->mGridItemType == GridItemType::GRIDITEM_BRAIN && aGridItem->mGridItemCounter >= 15) { float aDistance = - Distance2D(aGridItem->mPosX + 15.0f, aGridItem->mPosY + 15.0f, mPosX + 50.0f, mPosY + 40.0f); + Distance2D(aGridItem->mPosX + 15.0f, aGridItem->mPosY + 15.0f, mPosX + 50.0f, mPosY + 40.0f); if (aBrainClosest == nullptr || aDistance < aDistanceClosest) { aDistanceClosest = aDistance; @@ -3338,7 +3339,7 @@ void Zombie::UpdateZombiquarium() aMaxSpeed = 0.3f; } else if (mZombiePhase == ZombiePhase::PHASE_ZOMBIQUARIUM_DRIFT || - mZombiePhase == ZombiePhase::PHASE_ZOMBIQUARIUM_BITE) + mZombiePhase == ZombiePhase::PHASE_ZOMBIQUARIUM_BITE) { aMaxSpeed = 0.05f; } @@ -3492,7 +3493,7 @@ void Zombie::DropFlag() float aFlagPosX, aFlagPosY; GetTrackPosition("Zombie_flaghand", aFlagPosX, aFlagPosY); TodParticleSystem *aParticle = mApp->AddTodParticle(aFlagPosX + 6.0f, aFlagPosY - 45.0f, mRenderOrder + 1, - ParticleEffect::PARTICLE_ZOMBIE_FLAG); + ParticleEffect::PARTICLE_ZOMBIE_FLAG); OverrideParticleColor(aParticle); OverrideParticleScale(aParticle); } @@ -3510,9 +3511,9 @@ void Zombie::DropPole() bool Zombie::CanLoseBodyParts() { return mZombieType != ZombieType::ZOMBIE_ZAMBONI && mZombieType != ZombieType::ZOMBIE_BUNGEE && - mZombieType != ZombieType::ZOMBIE_CATAPULT && mZombieType != ZombieType::ZOMBIE_GARGANTUAR && - mZombieType != ZombieType::ZOMBIE_REDEYE_GARGANTUAR && mZombieType != ZombieType::ZOMBIE_BOSS && - mZombieHeight != ZombieHeight::HEIGHT_ZOMBIQUARIUM && !IsFlying() && !IsBobsledTeamWithSled(); + mZombieType != ZombieType::ZOMBIE_CATAPULT && mZombieType != ZombieType::ZOMBIE_GARGANTUAR && + mZombieType != ZombieType::ZOMBIE_REDEYE_GARGANTUAR && mZombieType != ZombieType::ZOMBIE_BOSS && + mZombieHeight != ZombieHeight::HEIGHT_ZOMBIQUARIUM && !IsFlying() && !IsBobsledTeamWithSled(); } void Zombie::SetupReanimForLostHead() @@ -3693,7 +3694,7 @@ void Zombie::DropHead(unsigned int theDamageFlags) ReanimShowPrefix("Zombie_mustache", RENDER_GROUP_HIDDEN); TodParticleSystem *aMustacheParticle = - mApp->AddTodParticle(aPosX, aPosY, aRenderOrder, ParticleEffect::PARTICLE_ZOMBIE_MUSTACHE); + mApp->AddTodParticle(aPosX, aPosY, aRenderOrder, ParticleEffect::PARTICLE_ZOMBIE_MUSTACHE); OverrideParticleColor(aMustacheParticle); OverrideParticleScale(aMustacheParticle); @@ -3730,7 +3731,7 @@ void Zombie::DropHead(unsigned int theDamageFlags) if (aFrame != -1) { TodParticleSystem *aSunglassParticle = - mApp->AddTodParticle(aPosX, aPosY, aRenderOrder, ParticleEffect::PARTICLE_ZOMBIE_SUNGLASS); + mApp->AddTodParticle(aPosX, aPosY, aRenderOrder, ParticleEffect::PARTICLE_ZOMBIE_SUNGLASS); OverrideParticleColor(aSunglassParticle); OverrideParticleScale(aSunglassParticle); if (aSunglassParticle) @@ -3742,7 +3743,7 @@ void Zombie::DropHead(unsigned int theDamageFlags) if (mBoard->mPinataMode && mZombiePhase != ZombiePhase::PHASE_ZOMBIE_MOWERED) { TodParticleSystem *aPinataParticle = - mApp->AddTodParticle(aPosX, aPosY, aRenderOrder, ParticleEffect::PARTICLE_ZOMBIE_PINATA); + mApp->AddTodParticle(aPosX, aPosY, aRenderOrder, ParticleEffect::PARTICLE_ZOMBIE_PINATA); OverrideParticleScale(aParticle); } @@ -3804,7 +3805,7 @@ void Zombie::SetupReanimForLostArm(unsigned int theDamageFlags) case ZombieType::ZOMBIE_POLEVAULTER: GetTrackPosition("Zombie_polevaulter_outerarm_lower", aPosX, aPosY); aBodyReanim->SetImageOverride("Zombie_polevaulter_outerarm_upper", - IMAGE_REANIM_ZOMBIE_POLEVAULTER_OUTERARM_UPPER2); + IMAGE_REANIM_ZOMBIE_POLEVAULTER_OUTERARM_UPPER2); break; case ZombieType::ZOMBIE_BALLOON: GetTrackPosition("Zombie_outerarm_lower", aPosX, aPosY); @@ -3821,7 +3822,7 @@ void Zombie::SetupReanimForLostArm(unsigned int theDamageFlags) case ZombieType::ZOMBIE_BOBSLED: GetTrackPosition("Zombie_outerarm_lower", aPosX, aPosY); aBodyReanim->SetImageOverride("Zombie_dolphinrider_outerarm_upper", - IMAGE_REANIM_ZOMBIE_BOBSLED_OUTERARM_UPPER2); + IMAGE_REANIM_ZOMBIE_BOBSLED_OUTERARM_UPPER2); break; case ZombieType::ZOMBIE_JACK_IN_THE_BOX: GetTrackPosition("Zombie_jackbox_outerarm_lower", aPosX, aPosY); @@ -3834,7 +3835,7 @@ void Zombie::SetupReanimForLostArm(unsigned int theDamageFlags) case ZombieType::ZOMBIE_DOLPHIN_RIDER: GetTrackPosition("Zombie_outerarm_lower", aPosX, aPosY); aBodyReanim->SetImageOverride("Zombie_dolphinrider_outerarm_upper", - IMAGE_REANIM_ZOMBIE_DOLPHINRIDER_OUTERARM_UPPER2); + IMAGE_REANIM_ZOMBIE_DOLPHINRIDER_OUTERARM_UPPER2); break; case ZombieType::ZOMBIE_POGO: GetTrackPosition("Zombie_outerarm_lower", aPosX, aPosY); @@ -3947,8 +3948,8 @@ void Zombie::DropArm(unsigned int theDamageFlags) return; } if (mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING || - mZombiePhase == ZombiePhase::PHASE_DOLPHIN_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_DOLPHIN_RIDING || - mZombiePhase == ZombiePhase::PHASE_DOLPHIN_IN_JUMP || mZombiePhase == ZombiePhase::PHASE_NEWSPAPER_READING) + mZombiePhase == ZombiePhase::PHASE_DOLPHIN_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_DOLPHIN_RIDING || + mZombiePhase == ZombiePhase::PHASE_DOLPHIN_IN_JUMP || mZombiePhase == ZombiePhase::PHASE_NEWSPAPER_READING) { return; } @@ -4020,27 +4021,27 @@ bool Zombie::ZombieNotWalking() } if (mZombiePhase == ZombiePhase::PHASE_JACK_IN_THE_BOX_POPPING || - mZombiePhase == ZombiePhase::PHASE_NEWSPAPER_MADDENING || - mZombiePhase == ZombiePhase::PHASE_GARGANTUAR_THROWING || - mZombiePhase == ZombiePhase::PHASE_GARGANTUAR_SMASHING || - mZombiePhase == ZombiePhase::PHASE_CATAPULT_LAUNCHING || - mZombiePhase == ZombiePhase::PHASE_CATAPULT_RELOADING || mZombiePhase == ZombiePhase::PHASE_DIGGER_RISING || - mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING_PAUSE_WITHOUT_AXE || - mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE || - mZombiePhase == ZombiePhase::PHASE_DIGGER_STUNNED || - mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS || - mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS_WITH_LIGHT || - mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS_HOLD || - mZombiePhase == ZombiePhase::PHASE_DANCER_RISING || mZombiePhase == ZombiePhase::PHASE_IMP_GETTING_THROWN || - mZombiePhase == ZombiePhase::PHASE_IMP_LANDING || mZombiePhase == ZombiePhase::PHASE_LADDER_PLACING || - mZombieHeight == ZombieHeight::HEIGHT_IN_TO_CHIMNEY || - mZombieHeight == ZombieHeight::HEIGHT_GETTING_BUNGEE_DROPPED || - mZombieHeight == ZombieHeight::HEIGHT_ZOMBIQUARIUM || mZombieType == ZombieType::ZOMBIE_BUNGEE || - mZombieType == ZombieType::ZOMBIE_BOSS || mZombiePhase == ZombiePhase::PHASE_DANCER_RAISE_LEFT_1 || - mZombiePhase == ZombiePhase::PHASE_DANCER_WALK_TO_RAISE || - mZombiePhase == ZombiePhase::PHASE_DANCER_RAISE_RIGHT_1 || - mZombiePhase == ZombiePhase::PHASE_DANCER_RAISE_LEFT_2 || - mZombiePhase == ZombiePhase::PHASE_DANCER_RAISE_RIGHT_2) + mZombiePhase == ZombiePhase::PHASE_NEWSPAPER_MADDENING || + mZombiePhase == ZombiePhase::PHASE_GARGANTUAR_THROWING || + mZombiePhase == ZombiePhase::PHASE_GARGANTUAR_SMASHING || + mZombiePhase == ZombiePhase::PHASE_CATAPULT_LAUNCHING || + mZombiePhase == ZombiePhase::PHASE_CATAPULT_RELOADING || mZombiePhase == ZombiePhase::PHASE_DIGGER_RISING || + mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING_PAUSE_WITHOUT_AXE || + mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE || + mZombiePhase == ZombiePhase::PHASE_DIGGER_STUNNED || + mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS || + mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS_WITH_LIGHT || + mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS_HOLD || + mZombiePhase == ZombiePhase::PHASE_DANCER_RISING || mZombiePhase == ZombiePhase::PHASE_IMP_GETTING_THROWN || + mZombiePhase == ZombiePhase::PHASE_IMP_LANDING || mZombiePhase == ZombiePhase::PHASE_LADDER_PLACING || + mZombieHeight == ZombieHeight::HEIGHT_IN_TO_CHIMNEY || + mZombieHeight == ZombieHeight::HEIGHT_GETTING_BUNGEE_DROPPED || + mZombieHeight == ZombieHeight::HEIGHT_ZOMBIQUARIUM || mZombieType == ZombieType::ZOMBIE_BUNGEE || + mZombieType == ZombieType::ZOMBIE_BOSS || mZombiePhase == ZombiePhase::PHASE_DANCER_RAISE_LEFT_1 || + mZombiePhase == ZombiePhase::PHASE_DANCER_WALK_TO_RAISE || + mZombiePhase == ZombiePhase::PHASE_DANCER_RAISE_RIGHT_1 || + mZombiePhase == ZombiePhase::PHASE_DANCER_RAISE_LEFT_2 || + mZombiePhase == ZombiePhase::PHASE_DANCER_RAISE_RIGHT_2) { return true; } @@ -4172,8 +4173,8 @@ void Zombie::UpdateZombieWalking() { float aSpeed; if (IsBouncingPogo() || mZombiePhase == ZombiePhase::PHASE_BALLOON_FLYING || - mZombiePhase == ZombiePhase::PHASE_DOLPHIN_RIDING || - mZombiePhase == ZombiePhase::PHASE_SNORKEL_WALKING_IN_POOL || mZombieType == ZombieType::ZOMBIE_CATAPULT) + mZombiePhase == ZombiePhase::PHASE_DOLPHIN_RIDING || + mZombiePhase == ZombiePhase::PHASE_SNORKEL_WALKING_IN_POOL || mZombieType == ZombieType::ZOMBIE_CATAPULT) { aSpeed = mVelX; if (IsMovingAtChilledSpeed()) @@ -4182,9 +4183,9 @@ void Zombie::UpdateZombieWalking() } } else if (mZombieType == ZombieType::ZOMBIE_ZAMBONI || mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING || - mZombiePhase == ZombiePhase::PHASE_DOLPHIN_IN_JUMP || IsBobsledTeamWithSled() || - mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT || - mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL) + mZombiePhase == ZombiePhase::PHASE_DOLPHIN_IN_JUMP || IsBobsledTeamWithSled() || + mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT || + mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL) { aSpeed = mVelX; } @@ -4237,10 +4238,10 @@ void Zombie::UpdateZombieWalking() { bool doWalk = false; if (mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT || - mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING || mZombieType == ZombieType::ZOMBIE_DANCER || - mZombieType == ZombieType::ZOMBIE_BACKUP_DANCER || mZombieType == ZombieType::ZOMBIE_BOBSLED || - mZombieType == ZombieType::ZOMBIE_POGO || mZombieType == ZombieType::ZOMBIE_DOLPHIN_RIDER || - mZombieType == ZombieType::ZOMBIE_BALLOON) + mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING || mZombieType == ZombieType::ZOMBIE_DANCER || + mZombieType == ZombieType::ZOMBIE_BACKUP_DANCER || mZombieType == ZombieType::ZOMBIE_BOBSLED || + mZombieType == ZombieType::ZOMBIE_POGO || mZombieType == ZombieType::ZOMBIE_DOLPHIN_RIDER || + mZombieType == ZombieType::ZOMBIE_BALLOON) { doWalk = true; } @@ -4288,7 +4289,7 @@ Plant *Zombie::IsStandingOnSpikeweed() while (mBoard->IteratePlants(aPlant)) { if (aPlant->mRow == mRow && aPlant->IsSpiky() && !aPlant->NotOnGround() && - (!mOnHighGround || aPlant->IsOnHighGround())) + (!mOnHighGround || aPlant->IsOnHighGround())) { Rect aPlantAttackRect = aPlant->GetPlantAttackRect(PlantWeapon::WEAPON_PRIMARY); if (GetRectOverlap(aPlantAttackRect, aZombieRect) > 0) @@ -4312,7 +4313,7 @@ void Zombie::CheckForZombieStep() void Zombie::UpdateZombiePosition() { if (mZombieType == ZombieType::ZOMBIE_BUNGEE || mZombieType == ZombieType::ZOMBIE_BOSS || - mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || mZombieHeight == ZombieHeight::HEIGHT_ZOMBIQUARIUM) + mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || mZombieHeight == ZombieHeight::HEIGHT_ZOMBIQUARIUM) return; UpdateZombieWalking(); @@ -4496,12 +4497,12 @@ void Zombie::UpdateActions() UpdateZombiquarium(); } if (mZombieHeight == ZombieHeight::HEIGHT_OUT_OF_POOL || mZombieHeight == ZombieHeight::HEIGHT_IN_TO_POOL || - mInPool) + mInPool) { UpdateZombiePool(); } if (mZombieHeight == ZombieHeight::HEIGHT_UP_TO_HIGH_GROUND || - mZombieHeight == ZombieHeight::HEIGHT_DOWN_OFF_HIGH_GROUND) + mZombieHeight == ZombieHeight::HEIGHT_DOWN_OFF_HIGH_GROUND) { UpdateZombieHighGround(); } @@ -4606,17 +4607,17 @@ void Zombie::CheckForBoardEdge() int aEdgeX = BOARD_EDGE; if (mZombieType == ZombieType::ZOMBIE_GARGANTUAR || mZombieType == ZombieType::ZOMBIE_REDEYE_GARGANTUAR || - mZombieType == ZombieType::ZOMBIE_POLEVAULTER) + mZombieType == ZombieType::ZOMBIE_POLEVAULTER) { aEdgeX = -150; } else if (mZombieType == ZombieType::ZOMBIE_CATAPULT || mZombieType == ZombieType::ZOMBIE_FOOTBALL || - mZombieType == ZombieType::ZOMBIE_ZAMBONI) + mZombieType == ZombieType::ZOMBIE_ZAMBONI) { aEdgeX = -175; } else if (mZombieType == ZombieType::ZOMBIE_BACKUP_DANCER || mZombieType == ZombieType::ZOMBIE_DANCER || - mZombieType == ZombieType::ZOMBIE_SNORKEL) + mZombieType == ZombieType::ZOMBIE_SNORKEL) { aEdgeX = -130; } @@ -4645,7 +4646,7 @@ void Zombie::UpdatePlaying() mGroanCounter--; int aZombiesCount = mBoard->mZombies.mSize; if (mGroanCounter == 0 && Rand(aZombiesCount) == 0 && mHasHead && mZombieType != ZombieType::ZOMBIE_BOSS && - !mBoard->HasLevelAwardDropped()) + !mBoard->HasLevelAwardDropped()) { float aPitch = 0.0f; if (mApp->IsLittleTroubleLevel()) @@ -4746,7 +4747,7 @@ void Zombie::UpdatePlaying() if (Rand(5) == 0) { TakeDamage(aDamage, GetBit(DamageFlags::DAMAGE_BYPASSES_SHIELD) | - GetBit(DamageFlags::DAMAGE_DOESNT_CAUSE_FLASH)); + GetBit(DamageFlags::DAMAGE_DOESNT_CAUSE_FLASH)); } } } @@ -4758,10 +4759,10 @@ bool Zombie::HasYuckyFaceImage() return false; return mZombieType == ZombieType::ZOMBIE_NORMAL || mZombieType == ZombieType::ZOMBIE_TRAFFIC_CONE || - mZombieType == ZombieType::ZOMBIE_PAIL || mZombieType == ZombieType::ZOMBIE_FLAG || - mZombieType == ZombieType::ZOMBIE_DOOR || mZombieType == ZombieType::ZOMBIE_DUCKY_TUBE || - mZombieType == ZombieType::ZOMBIE_DANCER || mZombieType == ZombieType::ZOMBIE_BACKUP_DANCER || - mZombieType == ZombieType::ZOMBIE_NEWSPAPER || mZombieType == ZombieType::ZOMBIE_POLEVAULTER; + mZombieType == ZombieType::ZOMBIE_PAIL || mZombieType == ZombieType::ZOMBIE_FLAG || + mZombieType == ZombieType::ZOMBIE_DOOR || mZombieType == ZombieType::ZOMBIE_DUCKY_TUBE || + mZombieType == ZombieType::ZOMBIE_DANCER || mZombieType == ZombieType::ZOMBIE_BACKUP_DANCER || + mZombieType == ZombieType::ZOMBIE_NEWSPAPER || mZombieType == ZombieType::ZOMBIE_POLEVAULTER; } void Zombie::ShowYuckyFace(bool theShow) @@ -4915,7 +4916,7 @@ void Zombie::AnimateChewSound() else { if (aPlant->mSeedType == SeedType::SEED_WALLNUT || aPlant->mSeedType == SeedType::SEED_TALLNUT || - aPlant->mSeedType == SeedType::SEED_PUMPKINSHELL) + aPlant->mSeedType == SeedType::SEED_PUMPKINSHELL) { mApp->PlayFoley(FoleyType::FOLEY_CHOMP_SOFT); } @@ -4994,10 +4995,10 @@ void Zombie::Animate() { mPrevFrame = mFrame; if (mZombiePhase == ZombiePhase::PHASE_JACK_IN_THE_BOX_POPPING || - mZombiePhase == ZombiePhase::PHASE_NEWSPAPER_MADDENING || mZombiePhase == ZombiePhase::PHASE_DIGGER_RISING || - mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING_PAUSE_WITHOUT_AXE || - mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE || - mZombiePhase == ZombiePhase::PHASE_DIGGER_STUNNED || IsImmobilizied()) + mZombiePhase == ZombiePhase::PHASE_NEWSPAPER_MADDENING || mZombiePhase == ZombiePhase::PHASE_DIGGER_RISING || + mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING_PAUSE_WITHOUT_AXE || + mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE || + mZombiePhase == ZombiePhase::PHASE_DIGGER_STUNNED || IsImmobilizied()) return; mAnimCounter++; @@ -5051,7 +5052,7 @@ void Zombie::Animate() } if (aBodyReanim->ShouldTriggerTimedEvent(aLeftHandTime) || - aBodyReanim->ShouldTriggerTimedEvent(aRightHandTime)) + aBodyReanim->ShouldTriggerTimedEvent(aRightHandTime)) { AnimateChewSound(); AnimateChewEffect(); @@ -5147,12 +5148,12 @@ bool Zombie::IsWalkingBackwards() if (mZombieType == ZombieType::ZOMBIE_DIGGER) { if (mZombiePhase == ZombiePhase::PHASE_DIGGER_RISING || mZombiePhase == ZombiePhase::PHASE_DIGGER_STUNNED || - mZombiePhase == ZombiePhase::PHASE_DIGGER_WALKING) + mZombiePhase == ZombiePhase::PHASE_DIGGER_WALKING) { return true; } else if (mZombiePhase == ZombiePhase::PHASE_ZOMBIE_DYING || mZombiePhase == ZombiePhase::PHASE_ZOMBIE_BURNED || - mZombiePhase == ZombiePhase::PHASE_ZOMBIE_MOWERED) + mZombiePhase == ZombiePhase::PHASE_ZOMBIE_MOWERED) { return mHasObject; } @@ -5164,7 +5165,7 @@ bool Zombie::IsWalkingBackwards() } void Zombie::DrawZombiePart(Graphics *g, Image *theImage, int theFrame, int theRow, - const ZombieDrawPosition &theDrawPos) + const ZombieDrawPosition &theDrawPos) { int aCelWidth = theImage->GetCelWidth(); @@ -5204,7 +5205,7 @@ void Zombie::DrawZombiePart(Graphics *g, Image *theImage, int theFrame, int theR { int aFrame = GetDancerFrame(); if (!mIsEating && - (aFrame == 12 || aFrame == 13 || aFrame == 14 || aFrame == 18 || aFrame == 19 || aFrame == 20)) + (aFrame == 12 || aFrame == 13 || aFrame == 14 || aFrame == 18 || aFrame == 19 || aFrame == 20)) { aMirror = true; anOffsetX -= 30.0f; @@ -5366,12 +5367,12 @@ void Zombie::UpdateReanim() float anOffsetX = aDrawPos.mImageOffsetX + 15.0f; float anOffsetY = aDrawPos.mImageOffsetY + aDrawPos.mBodyY - 28.0f + 20.0f; if ((mZombieType == ZombieType::ZOMBIE_ZAMBONI || mZombieType == ZombieType::ZOMBIE_CATAPULT) && - mZombiePhase != ZombiePhase::PHASE_ZOMBIE_BURNED) + mZombiePhase != ZombiePhase::PHASE_ZOMBIE_BURNED) { if (mZombiePhase == ZombiePhase::PHASE_ZOMBIE_DYING) { float aShakeRange = - TodAnimateCurveFloatTime(0.7f, 1.0f, aBodyReanim->mAnimTime, 0.0f, 1.0f, TodCurves::CURVE_EASE_OUT); + TodAnimateCurveFloatTime(0.7f, 1.0f, aBodyReanim->mAnimTime, 0.0f, 1.0f, TodCurves::CURVE_EASE_OUT); anOffsetX += RandRangeFloat(-aShakeRange, aShakeRange); anOffsetY += RandRangeFloat(-aShakeRange, aShakeRange); } @@ -5396,8 +5397,8 @@ void Zombie::UpdateReanim() anOpposite = false; if (mZombiePhase == ZombiePhase::PHASE_DANCER_DANCING_IN || - mZombiePhase == ZombiePhase::PHASE_DANCER_RAISE_RIGHT_1 || - mZombiePhase == ZombiePhase::PHASE_DANCER_RAISE_RIGHT_2) + mZombiePhase == ZombiePhase::PHASE_DANCER_RAISE_RIGHT_1 || + mZombiePhase == ZombiePhase::PHASE_DANCER_RAISE_RIGHT_2) { if (!mIsEating) { @@ -5697,9 +5698,9 @@ void Zombie::DrawBungeeTarget(Graphics *g) if (mZombiePhase == ZombiePhase::PHASE_BUNGEE_DIVING || mZombiePhase == ZombiePhase::PHASE_BUNGEE_DIVING_SCREAMING) { aTargetX += TodAnimateCurveFloat(BUNGEE_ZOMBIE_HEIGHT, BUNGEE_ZOMBIE_HEIGHT - 400, (int)mAltitude, 30.0f, 0.0f, - TodCurves::CURVE_LINEAR); + TodCurves::CURVE_LINEAR); aTargetY += TodAnimateCurveFloat(BUNGEE_ZOMBIE_HEIGHT, BUNGEE_ZOMBIE_HEIGHT - 400, (int)mAltitude, -600.0f, - 0.0f, TodCurves::CURVE_LINEAR); + 0.0f, TodCurves::CURVE_LINEAR); } g->DrawImageF(IMAGE_BUNGEETARGET, aTargetX, aTargetY + mAltitude); @@ -5710,9 +5711,9 @@ void Zombie::DrawDancerReanim(Graphics *g, const ZombieDrawPosition &theDrawPos) Color aSpotLightColor; bool aDrawSpotLight = false; if (mZombiePhase != ZombiePhase::PHASE_DANCER_DANCING_IN && - mZombiePhase != ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS && - mZombiePhase != ZombiePhase::PHASE_ZOMBIE_NORMAL && mZombiePhase != ZombiePhase::PHASE_ZOMBIE_DYING && - mApp->mGameScene != GameScenes::SCENE_ZOMBIES_WON) + mZombiePhase != ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS && + mZombiePhase != ZombiePhase::PHASE_ZOMBIE_NORMAL && mZombiePhase != ZombiePhase::PHASE_ZOMBIE_DYING && + mApp->mGameScene != GameScenes::SCENE_ZOMBIES_WON) { aDrawSpotLight = true; @@ -5766,7 +5767,7 @@ void Zombie::DrawReanim(Graphics *g, const ZombieDrawPosition &theDrawPos, int t { float aDrawHeight = 120.0f - theDrawPos.mClipHeight + 71.0f; g->SetClipRect(theDrawPos.mImageOffsetX - 200.0f, theDrawPos.mImageOffsetY + theDrawPos.mBodyY - 78.0f, 520, - aDrawHeight); + aDrawHeight); } int aFadeAlpha = 255; @@ -5785,7 +5786,7 @@ void Zombie::DrawReanim(Graphics *g, const ZombieDrawPosition &theDrawPos, int t aEnableExtraAdditiveDraw = false; } else if (mZombieType == ZombieType::ZOMBIE_BOSS && mZombiePhase != ZombiePhase::PHASE_ZOMBIE_DYING && - mBodyHealth < mBodyMaxHealth / BOSS_FLASH_HEALTH_FRACTION) + mBodyHealth < mBodyMaxHealth / BOSS_FLASH_HEALTH_FRACTION) { int aGrayness = TodAnimateCurve(0, 39, mBoard->mMainCounter % 40, 155, 255, TodCurves::CURVE_BOUNCE); if (mChilledCounter > 0 || mIceTrapCounter > 0) @@ -5920,7 +5921,7 @@ void Zombie::DrawReanim(Graphics *g, const ZombieDrawPosition &theDrawPos, int t } if (mShieldType == ShieldType::SHIELDTYPE_NEWSPAPER || mShieldType == ShieldType::SHIELDTYPE_DOOR || - mShieldType == ShieldType::SHIELDTYPE_LADDER) + mShieldType == ShieldType::SHIELDTYPE_LADDER) { aBodyReanim->mColorOverride = aColorOverride; aBodyReanim->mExtraAdditiveColor = aExtraAdditiveColor; @@ -6009,7 +6010,7 @@ void Zombie::DrawBungeeCord(Graphics *g, int theOffsetX, int theOffsetY) { Reanimation *aBossReanim = mApp->ReanimationGet(aBoss->mBodyReanimID); aClipAmount = - TodAnimateCurveFloatTime(0.0f, 0.2f, aBossReanim->mAnimTime, 55.0f, 0.0f, TodCurves::CURVE_LINEAR); + TodAnimateCurveFloatTime(0.0f, 0.2f, aBossReanim->mAnimTime, 55.0f, 0.0f, TodCurves::CURVE_LINEAR); } if (mTargetCol > aBoss->mTargetCol) @@ -6022,7 +6023,7 @@ void Zombie::DrawBungeeCord(Graphics *g, int theOffsetX, int theOffsetY) for (float y = aPosY - aCordCelHeight; y > -aCordCelHeight; y -= aCordCelHeight) { TodDrawImageScaledF(g, IMAGE_BUNGEECORD, theOffsetX + 61.0f - 4.0f / mScaleZombie, y - mPosY, mScaleZombie, - mScaleZombie); + mScaleZombie); } if (aSetClip) @@ -6201,7 +6202,7 @@ void Zombie::GetDrawPos(ZombieDrawPosition &theDrawPos) } } else if (mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING_IN_POOL || - mZombiePhase == ZombiePhase::PHASE_ZOMBIE_DYING) + mZombiePhase == ZombiePhase::PHASE_ZOMBIE_DYING) { theDrawPos.mImageOffsetY += 50.0f; @@ -6215,12 +6216,12 @@ void Zombie::GetDrawPos(ZombieDrawPosition &theDrawPos) } } else if (mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING && - mZombieHeight == ZombieHeight::HEIGHT_OUT_OF_POOL) + mZombieHeight == ZombieHeight::HEIGHT_OUT_OF_POOL) { theDrawPos.mClipHeight = -mAltitude; } else if (mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING_WITHOUT_DOLPHIN && - mZombieHeight == ZombieHeight::HEIGHT_OUT_OF_POOL) + mZombieHeight == ZombieHeight::HEIGHT_OUT_OF_POOL) { theDrawPos.mClipHeight = -mAltitude; } @@ -6266,7 +6267,7 @@ void Zombie::GetDrawPos(ZombieDrawPosition &theDrawPos) } } else if (mZombiePhase == ZombiePhase::PHASE_DIGGER_RISING || - mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE) + mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE) { theDrawPos.mBodyY = -mAltitude; @@ -6325,12 +6326,12 @@ ZombiePhase Zombie::GetDancerPhase() { int aFrame = GetDancerFrame(); - return aFrame <= 11 ? ZombiePhase::PHASE_DANCER_DANCING_LEFT - : aFrame <= 12 ? ZombiePhase::PHASE_DANCER_WALK_TO_RAISE - : aFrame <= 15 ? ZombiePhase::PHASE_DANCER_RAISE_RIGHT_1 - : aFrame <= 18 ? ZombiePhase::PHASE_DANCER_RAISE_LEFT_1 - : aFrame <= 21 ? ZombiePhase::PHASE_DANCER_RAISE_RIGHT_2 - : ZombiePhase::PHASE_DANCER_RAISE_LEFT_2; + return aFrame <= 11 ? ZombiePhase::PHASE_DANCER_DANCING_LEFT + : aFrame <= 12 ? ZombiePhase::PHASE_DANCER_WALK_TO_RAISE + : aFrame <= 15 ? ZombiePhase::PHASE_DANCER_RAISE_RIGHT_1 + : aFrame <= 18 ? ZombiePhase::PHASE_DANCER_RAISE_LEFT_1 + : aFrame <= 21 ? ZombiePhase::PHASE_DANCER_RAISE_RIGHT_2 + : ZombiePhase::PHASE_DANCER_RAISE_LEFT_2; } void Zombie::DrawIceTrap(Graphics *g, const ZombieDrawPosition &theDrawPos, bool theFront) @@ -6466,7 +6467,7 @@ void Zombie::Draw(Graphics *g) { float aDrawHeight = 120.0f - aDrawPos.mClipHeight + 21.0f; theParticleGraphics.ClipRect(mX + aDrawPos.mImageOffsetX - 400.0f, mY + aDrawPos.mImageOffsetY - 28.0f, 920, - aDrawHeight); + aDrawHeight); } AttachmentDraw(mAttachmentID, &theParticleGraphics, false); @@ -6494,14 +6495,14 @@ bool Zombie::CanTargetPlant(Plant *thePlant, ZombieAttackType theAttackType) if (thePlant->IsSpiky()) { return mZombieType == ZombieType::ZOMBIE_GARGANTUAR || mZombieType == ZombieType::ZOMBIE_REDEYE_GARGANTUAR || - mZombieType == ZombieType::ZOMBIE_ZAMBONI || mBoard->IsPoolSquare(thePlant->mPlantCol, thePlant->mRow) || - mBoard->GetFlowerPotAt(thePlant->mPlantCol, thePlant->mRow); + mZombieType == ZombieType::ZOMBIE_ZAMBONI || mBoard->IsPoolSquare(thePlant->mPlantCol, thePlant->mRow) || + mBoard->GetFlowerPotAt(thePlant->mPlantCol, thePlant->mRow); } if (theAttackType == ZombieAttackType::ATTACKTYPE_DRIVE_OVER) { if (thePlant->mSeedType == SeedType::SEED_CHERRYBOMB || thePlant->mSeedType == SeedType::SEED_JALAPENO || - thePlant->mSeedType == SeedType::SEED_BLOVER || thePlant->mSeedType == SeedType::SEED_SQUASH) + thePlant->mSeedType == SeedType::SEED_BLOVER || thePlant->mSeedType == SeedType::SEED_SQUASH) { return false; } @@ -6515,7 +6516,7 @@ bool Zombie::CanTargetPlant(Plant *thePlant, ZombieAttackType theAttackType) { bool aPlaceLadder = false; if (thePlant->mSeedType == SeedType::SEED_WALLNUT || thePlant->mSeedType == SeedType::SEED_TALLNUT || - thePlant->mSeedType == SeedType::SEED_PUMPKINSHELL) + thePlant->mSeedType == SeedType::SEED_PUMPKINSHELL) { aPlaceLadder = true; } @@ -6526,7 +6527,7 @@ bool Zombie::CanTargetPlant(Plant *thePlant, ZombieAttackType theAttackType) } if ((theAttackType == ZombieAttackType::ATTACKTYPE_CHEW && aPlaceLadder) || - (theAttackType == ZombieAttackType::ATTACKTYPE_LADDER && !aPlaceLadder)) + (theAttackType == ZombieAttackType::ATTACKTYPE_LADDER && !aPlaceLadder)) { return false; } @@ -6535,7 +6536,7 @@ bool Zombie::CanTargetPlant(Plant *thePlant, ZombieAttackType theAttackType) if (theAttackType == ZombieAttackType::ATTACKTYPE_CHEW) { Plant *aTopPlant = - mBoard->GetTopPlantAt(thePlant->mPlantCol, thePlant->mRow, PlantPriority::TOPPLANT_EATING_ORDER); + mBoard->GetTopPlantAt(thePlant->mPlantCol, thePlant->mRow, PlantPriority::TOPPLANT_EATING_ORDER); if (aTopPlant != thePlant && aTopPlant && CanTargetPlant(aTopPlant, theAttackType)) { return false; @@ -6545,7 +6546,7 @@ bool Zombie::CanTargetPlant(Plant *thePlant, ZombieAttackType theAttackType) if (theAttackType == ZombieAttackType::ATTACKTYPE_VAULT) { Plant *aTopPlant = - mBoard->GetTopPlantAt(thePlant->mPlantCol, thePlant->mRow, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION); + mBoard->GetTopPlantAt(thePlant->mPlantCol, thePlant->mRow, PlantPriority::TOPPLANT_ONLY_NORMAL_POSITION); if (aTopPlant != thePlant && aTopPlant && CanTargetPlant(aTopPlant, theAttackType)) { return false; @@ -6586,12 +6587,12 @@ Zombie *Zombie::FindZombieTarget() while (mBoard->IterateZombies(aZombie)) { if (mMindControlled != aZombie->mMindControlled && !aZombie->IsFlying() && - aZombie->mZombiePhase != ZombiePhase::PHASE_DIGGER_TUNNELING && - aZombie->mZombiePhase != ZombiePhase::PHASE_BUNGEE_DIVING && - aZombie->mZombiePhase != ZombiePhase::PHASE_BUNGEE_DIVING_SCREAMING && - aZombie->mZombiePhase != ZombiePhase::PHASE_BUNGEE_RISING && - aZombie->mZombieHeight != ZombieHeight::HEIGHT_GETTING_BUNGEE_DROPPED && !aZombie->IsDeadOrDying() && - aZombie->mRow == mRow) + aZombie->mZombiePhase != ZombiePhase::PHASE_DIGGER_TUNNELING && + aZombie->mZombiePhase != ZombiePhase::PHASE_BUNGEE_DIVING && + aZombie->mZombiePhase != ZombiePhase::PHASE_BUNGEE_DIVING_SCREAMING && + aZombie->mZombiePhase != ZombiePhase::PHASE_BUNGEE_RISING && + aZombie->mZombieHeight != ZombieHeight::HEIGHT_GETTING_BUNGEE_DROPPED && !aZombie->IsDeadOrDying() && + aZombie->mRow == mRow) { Rect aZombieRect = aZombie->GetZombieRect(); int aOverlap = GetRectOverlap(aAttackRect, aZombieRect); @@ -6657,7 +6658,7 @@ void Zombie::ZamboniDeath(unsigned int theDamageFlags) else { mApp->AddTodParticle(mPosX + 80.0f, mPosY + 60.0f, mRenderOrder + 1, - ParticleEffect::PARTICLE_ZAMBONI_EXPLOSION); + ParticleEffect::PARTICLE_ZAMBONI_EXPLOSION); DieWithLoot(); mApp->PlayFoley(FoleyType::FOLEY_EXPLOSION); } @@ -6679,7 +6680,7 @@ void Zombie::CatapultDeath(unsigned int theDamageFlags) else { mApp->AddTodParticle(mPosX + 80.0f, mPosY + 60.0f, mRenderOrder + 1, - ParticleEffect::PARTICLE_CATAPULT_EXPLOSION); + ParticleEffect::PARTICLE_CATAPULT_EXPLOSION); DieWithLoot(); mApp->PlayFoley(FoleyType::FOLEY_EXPLOSION); } @@ -6696,7 +6697,7 @@ void Zombie::CheckSquish(ZombieAttackType theAttackType) { Rect aPlantRect = aPlant->GetPlantRect(); if (GetRectOverlap(aAttackRect, aPlantRect) >= 20 && CanTargetPlant(aPlant, theAttackType) && - !aPlant->IsSpiky()) + !aPlant->IsSpiky()) { SquishAllInSquare(aPlant->mPlantCol, aPlant->mRow, theAttackType); break; @@ -6788,7 +6789,7 @@ void Zombie::UpdateAnimSpeed() } if (mZombiePhase == ZombiePhase::PHASE_SNORKEL_UP_TO_EAT || - mZombiePhase == ZombiePhase::PHASE_SNORKEL_DOWN_FROM_EAT || IsDeadOrDying()) + mZombiePhase == ZombiePhase::PHASE_SNORKEL_DOWN_FROM_EAT || IsDeadOrDying()) { ApplyAnimRate(mOriginalAnimRate); return; @@ -6797,9 +6798,9 @@ void Zombie::UpdateAnimSpeed() if (mIsEating) { if (mZombieType == ZombieType::ZOMBIE_POLEVAULTER || mZombieType == ZombieType::ZOMBIE_BALLOON || - mZombieType == ZombieType::ZOMBIE_IMP || mZombieType == ZombieType::ZOMBIE_DIGGER || - mZombieType == ZombieType::ZOMBIE_JACK_IN_THE_BOX || mZombieType == ZombieType::ZOMBIE_SNORKEL || - mZombieType == ZombieType::ZOMBIE_YETI) + mZombieType == ZombieType::ZOMBIE_IMP || mZombieType == ZombieType::ZOMBIE_DIGGER || + mZombieType == ZombieType::ZOMBIE_JACK_IN_THE_BOX || mZombieType == ZombieType::ZOMBIE_SNORKEL || + mZombieType == ZombieType::ZOMBIE_YETI) { ApplyAnimRate(20.0f); } @@ -6811,8 +6812,8 @@ void Zombie::UpdateAnimSpeed() else { if (ZombieNotWalking() || IsBobsledTeamWithSled() || mZombieType == ZombieType::ZOMBIE_CATAPULT || - mZombiePhase == ZombiePhase::PHASE_DOLPHIN_RIDING || - mZombiePhase == ZombiePhase::PHASE_SNORKEL_WALKING_IN_POOL) + mZombiePhase == ZombiePhase::PHASE_DOLPHIN_RIDING || + mZombiePhase == ZombiePhase::PHASE_SNORKEL_WALKING_IN_POOL) { ApplyAnimRate(mOriginalAnimRate); } @@ -6820,7 +6821,7 @@ void Zombie::UpdateAnimSpeed() { ReanimatorTrack *aTrack = &aBodyReanim->mDefinition->mTracks[aBodyReanim->FindTrackIndex("_ground")]; float aDistance = aTrack->mTransforms[aBodyReanim->mFrameStart + aBodyReanim->mFrameCount - 1].mTransX - - aTrack->mTransforms[aBodyReanim->mFrameStart].mTransX; + aTrack->mTransforms[aBodyReanim->mFrameStart].mTransX; if (aDistance >= 1e-6f) { float aOneOverSpeed = aBodyReanim->mFrameCount / aDistance; @@ -6897,13 +6898,13 @@ void Zombie::StartWalkAnim(int theBlendTime) PlayZombieReanim("anim_walk_nopaper", ReanimLoopType::REANIM_LOOP, theBlendTime, 0.0f); } else if (mInPool && mZombieHeight != ZombieHeight::HEIGHT_IN_TO_POOL && - mZombieHeight != ZombieHeight::HEIGHT_OUT_OF_POOL && aBodyReanim->TrackExists("anim_swim")) + mZombieHeight != ZombieHeight::HEIGHT_OUT_OF_POOL && aBodyReanim->TrackExists("anim_swim")) { PlayZombieReanim("anim_swim", ReanimLoopType::REANIM_LOOP, theBlendTime, 0.0f); } else if ((mZombieType == ZombieType::ZOMBIE_NORMAL || mZombieType == ZombieType::ZOMBIE_TRAFFIC_CONE || - mZombieType == ZombieType::ZOMBIE_PAIL) && - mBoard->mDanceMode) + mZombieType == ZombieType::ZOMBIE_PAIL) && + mBoard->mDanceMode) { PlayZombieReanim("anim_dance", ReanimLoopType::REANIM_LOOP, theBlendTime, 0.0f); } @@ -6957,29 +6958,29 @@ void Zombie::StopEating() void Zombie::CheckIfPreyCaught() { if (mZombieType == ZombieType::ZOMBIE_BUNGEE || mZombieType == ZombieType::ZOMBIE_GARGANTUAR || - mZombieType == ZombieType::ZOMBIE_REDEYE_GARGANTUAR || mZombieType == ZombieType::ZOMBIE_ZAMBONI || - mZombieType == ZombieType::ZOMBIE_CATAPULT || mZombieType == ZombieType::ZOMBIE_BOSS || IsBouncingPogo() || - IsBobsledTeamWithSled() || mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT || - mZombiePhase == ZombiePhase::PHASE_JACK_IN_THE_BOX_POPPING || - mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_PRE_VAULT || - mZombiePhase == ZombiePhase::PHASE_NEWSPAPER_MADDENING || mZombiePhase == ZombiePhase::PHASE_DIGGER_RISING || - mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING_PAUSE_WITHOUT_AXE || - mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE || - mZombiePhase == ZombiePhase::PHASE_DIGGER_STUNNED || mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || - mZombiePhase == ZombiePhase::PHASE_IMP_GETTING_THROWN || mZombiePhase == ZombiePhase::PHASE_IMP_LANDING || - mZombiePhase == ZombiePhase::PHASE_DANCER_RISING || - mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS || - mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS_WITH_LIGHT || - mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS_HOLD || - mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING || - mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING_WITHOUT_DOLPHIN || - mZombiePhase == ZombiePhase::PHASE_DOLPHIN_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_DOLPHIN_RIDING || - mZombiePhase == ZombiePhase::PHASE_DOLPHIN_IN_JUMP || mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL || - mZombiePhase == ZombiePhase::PHASE_SNORKEL_WALKING || mZombiePhase == ZombiePhase::PHASE_LADDER_PLACING || - mZombieHeight == ZombieHeight::HEIGHT_GETTING_BUNGEE_DROPPED || - mZombieHeight == ZombieHeight::HEIGHT_UP_LADDER || mZombieHeight == ZombieHeight::HEIGHT_IN_TO_POOL || - mZombieHeight == ZombieHeight::HEIGHT_OUT_OF_POOL || IsTangleKelpTarget() || - mZombieHeight == ZombieHeight::HEIGHT_FALLING || !mHasHead || IsFlying()) + mZombieType == ZombieType::ZOMBIE_REDEYE_GARGANTUAR || mZombieType == ZombieType::ZOMBIE_ZAMBONI || + mZombieType == ZombieType::ZOMBIE_CATAPULT || mZombieType == ZombieType::ZOMBIE_BOSS || IsBouncingPogo() || + IsBobsledTeamWithSled() || mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT || + mZombiePhase == ZombiePhase::PHASE_JACK_IN_THE_BOX_POPPING || + mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_PRE_VAULT || + mZombiePhase == ZombiePhase::PHASE_NEWSPAPER_MADDENING || mZombiePhase == ZombiePhase::PHASE_DIGGER_RISING || + mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING_PAUSE_WITHOUT_AXE || + mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE || + mZombiePhase == ZombiePhase::PHASE_DIGGER_STUNNED || mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || + mZombiePhase == ZombiePhase::PHASE_IMP_GETTING_THROWN || mZombiePhase == ZombiePhase::PHASE_IMP_LANDING || + mZombiePhase == ZombiePhase::PHASE_DANCER_RISING || + mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS || + mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS_WITH_LIGHT || + mZombiePhase == ZombiePhase::PHASE_DANCER_SNAPPING_FINGERS_HOLD || + mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING || + mZombiePhase == ZombiePhase::PHASE_DOLPHIN_WALKING_WITHOUT_DOLPHIN || + mZombiePhase == ZombiePhase::PHASE_DOLPHIN_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_DOLPHIN_RIDING || + mZombiePhase == ZombiePhase::PHASE_DOLPHIN_IN_JUMP || mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL || + mZombiePhase == ZombiePhase::PHASE_SNORKEL_WALKING || mZombiePhase == ZombiePhase::PHASE_LADDER_PLACING || + mZombieHeight == ZombieHeight::HEIGHT_GETTING_BUNGEE_DROPPED || + mZombieHeight == ZombieHeight::HEIGHT_UP_LADDER || mZombieHeight == ZombieHeight::HEIGHT_IN_TO_POOL || + mZombieHeight == ZombieHeight::HEIGHT_OUT_OF_POOL || IsTangleKelpTarget() || + mZombieHeight == ZombieHeight::HEIGHT_FALLING || !mHasHead || IsFlying()) return; int aTicksBetweenEats = TICKS_BETWEEN_EATS; @@ -7031,9 +7032,9 @@ void Zombie::PoolSplash(bool theInToPoolSound) } mApp->AddReanimation(mX + aOffsetX, mY + aOffsetY, mRenderOrder + 1, ReanimationType::REANIM_SPLASH) - ->OverrideScale(0.8f, 0.8f); + ->OverrideScale(0.8f, 0.8f); mApp->AddTodParticle(mX + aOffsetX + 37.0f, mY + aOffsetY + 42.0f, mRenderOrder + 1, - ParticleEffect::PARTICLE_PLANTING_POOL); + ParticleEffect::PARTICLE_PLANTING_POOL); if (theInToPoolSound) { @@ -7061,7 +7062,7 @@ void Zombie::CheckForPool() } bool aIsPoolSquare = mBoard->IsPoolSquare(mBoard->PixelToGridX(mX + 75, mY), mRow) && - mBoard->IsPoolSquare(mBoard->PixelToGridX(mX + 45, mY), mRow) && mX < 680; + mBoard->IsPoolSquare(mBoard->PixelToGridX(mX + 45, mY), mRow) && mX < 680; if (!mInPool && aIsPoolSquare) { @@ -7088,7 +7089,7 @@ void Zombie::CheckForPool() bool Zombie::IsOnHighGround() { return IsOnBoard() && mBoard->mGridSquareType[mBoard->PixelToGridXKeepOnBoard(mX + 75, mY)][mRow] == - GridSquareType::GRIDSQUARE_HIGH_GROUND; + GridSquareType::GRIDSQUARE_HIGH_GROUND; } void Zombie::CheckForHighGround() @@ -7178,11 +7179,11 @@ void Zombie::EatPlant(Plant *thePlant) StartEating(); if (thePlant->mSeedType == SeedType::SEED_JALAPENO || thePlant->mSeedType == SeedType::SEED_CHERRYBOMB || - thePlant->mSeedType == SeedType::SEED_DOOMSHROOM || thePlant->mSeedType == SeedType::SEED_ICESHROOM || - thePlant->mSeedType == SeedType::SEED_HYPNOSHROOM || - thePlant->mState == PlantState::STATE_FLOWERPOT_INVULNERABLE || - thePlant->mState == PlantState::STATE_LILYPAD_INVULNERABLE || - thePlant->mState == PlantState::STATE_SQUASH_LOOK || thePlant->mState == PlantState::STATE_SQUASH_PRE_LAUNCH) + thePlant->mSeedType == SeedType::SEED_DOOMSHROOM || thePlant->mSeedType == SeedType::SEED_ICESHROOM || + thePlant->mSeedType == SeedType::SEED_HYPNOSHROOM || + thePlant->mState == PlantState::STATE_FLOWERPOT_INVULNERABLE || + thePlant->mState == PlantState::STATE_LILYPAD_INVULNERABLE || + thePlant->mState == PlantState::STATE_SQUASH_LOOK || thePlant->mState == PlantState::STATE_SQUASH_PRE_LAUNCH) { if (!thePlant->mIsAsleep) { @@ -7227,7 +7228,7 @@ void Zombie::EatPlant(Plant *thePlant) if (mApp->IsIZombieLevel() && mJustGotShotCounter < -500) { if (thePlant->mSeedType == SeedType::SEED_WALLNUT || thePlant->mSeedType == SeedType::SEED_TALLNUT || - thePlant->mSeedType == SeedType::SEED_PUMPKINSHELL) + thePlant->mSeedType == SeedType::SEED_PUMPKINSHELL) { thePlant->mPlantHealth -= DAMAGE_PER_EAT; } @@ -7244,10 +7245,10 @@ void Zombie::EatPlant(Plant *thePlant) if (mBoard->mLevel >= 2 && mBoard->mLevel <= 4 && mApp->IsFirstTimeAdventureMode()) { if (thePlant->mPlantCol > 4 && mBoard->mPlants.mSize < 15 && - thePlant->mSeedType == SeedType::SEED_PEASHOOTER) + thePlant->mSeedType == SeedType::SEED_PEASHOOTER) { mBoard->DisplayAdvice("[ADVICE_PEASHOOTER_DIED]", MessageStyle::MESSAGE_STYLE_HINT_TALL_FAST, - AdviceType::ADVICE_PEASHOOTER_DIED); + AdviceType::ADVICE_PEASHOOTER_DIED); } } } @@ -7256,7 +7257,7 @@ void Zombie::EatPlant(Plant *thePlant) void Zombie::EatZombie(Zombie *theZombie) { theZombie->TakeDamage(DAMAGE_PER_EAT, - GetBit(DamageFlags::DAMAGE_BYPASSES_SHIELD) | GetBit(DamageFlags::DAMAGE_DOESNT_CAUSE_FLASH)); + GetBit(DamageFlags::DAMAGE_BYPASSES_SHIELD) | GetBit(DamageFlags::DAMAGE_DOESNT_CAUSE_FLASH)); StartEating(); if (theZombie->mBodyHealth <= 0) { @@ -7286,7 +7287,7 @@ bool Zombie::TrySpawnLevelAward() } } else if (mApp->IsContinuousChallenge() || mBoard->mCurrentWave < mBoard->mNumWaves || - mBoard->AreEnemyZombiesOnScreen()) + mBoard->AreEnemyZombiesOnScreen()) { return false; } @@ -7317,14 +7318,14 @@ bool Zombie::TrySpawnLevelAward() else if (mApp->IsAdventureMode() && mBoard->mLevel <= 50) { if (mBoard->mLevel == 9 || mBoard->mLevel == 19 || mBoard->mLevel == 29 || mBoard->mLevel == 39 || - mBoard->mLevel == 49) + mBoard->mLevel == 49) { aCoinType = CoinType::COIN_NOTE; } else if (mBoard->mLevel == 50) { aCoinType = - mApp->HasFinishedAdventure() ? CoinType::COIN_AWARD_MONEY_BAG : CoinType::COIN_AWARD_SILVER_SUNFLOWER; + mApp->HasFinishedAdventure() ? CoinType::COIN_AWARD_MONEY_BAG : CoinType::COIN_AWARD_SILVER_SUNFLOWER; } else if (mApp->HasFinishedAdventure()) { @@ -7622,8 +7623,8 @@ void Zombie::StopZombieSound() while (mBoard->IterateZombies(aZombie)) { if (aZombie->mHasHead && !aZombie->IsDeadOrDying() && aZombie->IsOnBoard() && - (aZombie->mZombieType == ZombieType::ZOMBIE_DANCER || - aZombie->mZombieType == ZombieType::ZOMBIE_BACKUP_DANCER)) + (aZombie->mZombieType == ZombieType::ZOMBIE_DANCER || + aZombie->mZombieType == ZombieType::ZOMBIE_BACKUP_DANCER)) { aStopSound = false; break; @@ -7687,7 +7688,7 @@ void Zombie::DropShield(unsigned int theDamageFlags) float aPosX, aPosY; GetTrackPosition("anim_screendoor", aPosX, aPosY); TodParticleSystem *aParticle = - mApp->AddTodParticle(aPosX, aPosY, mRenderOrder + 1, ParticleEffect::PARTICLE_ZOMBIE_DOOR); + mApp->AddTodParticle(aPosX, aPosY, mRenderOrder + 1, ParticleEffect::PARTICLE_ZOMBIE_DOOR); OverrideParticleScale(aParticle); } } @@ -7710,12 +7711,12 @@ void Zombie::DropShield(unsigned int theDamageFlags) float aPosX, aPosY; GetTrackPosition("Zombie_paper_paper", aPosX, aPosY); TodParticleSystem *aParticle = - mApp->AddTodParticle(aPosX, aPosY, mRenderOrder + 1, ParticleEffect::PARTICLE_ZOMBIE_NEWSPAPER); + mApp->AddTodParticle(aPosX, aPosY, mRenderOrder + 1, ParticleEffect::PARTICLE_ZOMBIE_NEWSPAPER); OverrideParticleScale(aParticle); } if (!TestBit(theDamageFlags, (int)DamageFlags::DAMAGE_DOESNT_LEAVE_BODY) && - !TestBit(theDamageFlags, (int)DamageFlags::DAMAGE_BYPASSES_SHIELD)) + !TestBit(theDamageFlags, (int)DamageFlags::DAMAGE_BYPASSES_SHIELD)) { mApp->PlayFoley(FoleyType::FOLEY_NEWSPAPER_RIP); AddAttachedReanim(-11, 0, ReanimationType::REANIM_ZOMBIE_SURPRISE); @@ -7729,7 +7730,7 @@ void Zombie::DropShield(unsigned int theDamageFlags) float aPosX = mPosX + 31.0f; float aPosY = mPosY + 80.0f; TodParticleSystem *aParticle = - mApp->AddTodParticle(aPosX, aPosY, mRenderOrder + 1, ParticleEffect::PARTICLE_ZOMBIE_LADDER); + mApp->AddTodParticle(aPosX, aPosY, mRenderOrder + 1, ParticleEffect::PARTICLE_ZOMBIE_LADDER); OverrideParticleScale(aParticle); } } @@ -7749,7 +7750,7 @@ int Zombie::TakeShieldDamage(int theDamage, unsigned int theDamageFlags) } if (!TestBit(theDamageFlags, (int)DamageFlags::DAMAGE_DOESNT_CAUSE_FLASH) && - !TestBit(theDamageFlags, (int)DamageFlags::DAMAGE_HITS_SHIELD_AND_BODY)) + !TestBit(theDamageFlags, (int)DamageFlags::DAMAGE_HITS_SHIELD_AND_BODY)) { mShieldRecoilCounter = 12; if (mShieldType == ShieldType::SHIELDTYPE_DOOR || mShieldType == ShieldType::SHIELDTYPE_LADDER) @@ -7845,13 +7846,13 @@ void Zombie::DropHelm(unsigned int theDamageFlags) aEffect = ParticleEffect::PARTICLE_ZOMBIE_HEADLIGHT; } else if (mHelmType == HelmType::HELMTYPE_BOBSLED && - !TestBit(theDamageFlags, (int)DamageFlags::DAMAGE_DOESNT_LEAVE_BODY)) + !TestBit(theDamageFlags, (int)DamageFlags::DAMAGE_DOESNT_LEAVE_BODY)) { BobsledCrash(); } if (!TestBit(theDamageFlags, (int)DamageFlags::DAMAGE_DOESNT_LEAVE_BODY) && - aEffect != ParticleEffect::PARTICLE_NONE) + aEffect != ParticleEffect::PARTICLE_NONE) { TodParticleSystem *aParticle = mApp->AddTodParticle(aPosX, aPosY, mRenderOrder + 1, aEffect); OverrideParticleScale(aParticle); @@ -8042,14 +8043,14 @@ void Zombie::TakeBodyDamage(int theDamage, unsigned int theDamageFlags) { aBodyReanim->SetImageOverride("Zombie_gargantua_body1", IMAGE_REANIM_ZOMBIE_GARGANTUAR_BODY1_2); aBodyReanim->SetImageOverride("Zombie_gargantuar_outerarm_lower", - IMAGE_REANIM_ZOMBIE_GARGANTUAR_OUTERARM_LOWER2); + IMAGE_REANIM_ZOMBIE_GARGANTUAR_OUTERARM_LOWER2); } else if (aDamageIndexAfterDamage == 2) { aBodyReanim->SetImageOverride("Zombie_gargantua_body1", IMAGE_REANIM_ZOMBIE_GARGANTUAR_BODY1_3); aBodyReanim->SetImageOverride("Zombie_gargantuar_outerleg_foot", IMAGE_REANIM_ZOMBIE_GARGANTUAR_FOOT2); aBodyReanim->SetImageOverride("Zombie_gargantuar_outerarm_lower", - IMAGE_REANIM_ZOMBIE_GARGANTUAR_OUTERARM_LOWER2); + IMAGE_REANIM_ZOMBIE_GARGANTUAR_OUTERARM_LOWER2); if (mZombieType == ZombieType::ZOMBIE_REDEYE_GARGANTUAR) { aBodyReanim->SetImageOverride("anim_head1", IMAGE_REANIM_ZOMBIE_GARGANTUAR_HEAD2_REDEYE); @@ -8091,10 +8092,10 @@ void Zombie::TakeBodyDamage(int theDamage, unsigned int theDamageFlags) } if (aBodyHealthOrigin >= mBodyMaxHealth / BOSS_FLASH_HEALTH_FRACTION && - mBodyHealth < mBodyMaxHealth / BOSS_FLASH_HEALTH_FRACTION) + mBodyHealth < mBodyMaxHealth / BOSS_FLASH_HEALTH_FRACTION) { mApp->AddTodParticle(770.0f, 260.0f, Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_TOP, 0, 0), - ParticleEffect::PARTICLE_BOSS_EXPLOSION); + ParticleEffect::PARTICLE_BOSS_EXPLOSION); mApp->PlayFoley(FoleyType::FOLEY_BOSS_EXPLOSION_SMALL); ApplyBossSmokeParticles(true); } @@ -8130,7 +8131,7 @@ void Zombie::TakeDamage(int theDamage, unsigned int theDamageFlags) aDamageRemaining = TakeFlyingDamage(aDamageRemaining, theDamageFlags); } if (aDamageRemaining > 0 && mShieldType != ShieldType::SHIELDTYPE_NONE && - !TestBit(theDamageFlags, (int)DamageFlags::DAMAGE_BYPASSES_SHIELD)) + !TestBit(theDamageFlags, (int)DamageFlags::DAMAGE_BYPASSES_SHIELD)) { aDamageRemaining = TakeShieldDamage(aDamageRemaining, theDamageFlags); if (TestBit(theDamageFlags, (int)DamageFlags::DAMAGE_HITS_SHIELD_AND_BODY)) @@ -8190,17 +8191,17 @@ bool Zombie::CanBeChilled() return false; if (mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING || mZombiePhase == ZombiePhase::PHASE_DIGGER_RISING || - mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING_PAUSE_WITHOUT_AXE || - mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE || - mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || mZombiePhase == ZombiePhase::PHASE_DANCER_RISING) + mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING_PAUSE_WITHOUT_AXE || + mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE || + mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || mZombiePhase == ZombiePhase::PHASE_DANCER_RISING) return false; if (mMindControlled) return false; return mZombieType != ZombieType::ZOMBIE_BOSS || mZombiePhase == ZombiePhase::PHASE_BOSS_HEAD_IDLE_BEFORE_SPIT || - mZombiePhase == ZombiePhase::PHASE_BOSS_HEAD_IDLE_AFTER_SPIT || - mZombiePhase == ZombiePhase::PHASE_BOSS_HEAD_SPIT; + mZombiePhase == ZombiePhase::PHASE_BOSS_HEAD_IDLE_AFTER_SPIT || + mZombiePhase == ZombiePhase::PHASE_BOSS_HEAD_SPIT; } bool Zombie::CanBeFrozen() @@ -8209,13 +8210,13 @@ bool Zombie::CanBeFrozen() return false; if (mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT || - mZombiePhase == ZombiePhase::PHASE_DOLPHIN_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_DOLPHIN_IN_JUMP || - mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL || IsFlying() || - mZombiePhase == ZombiePhase::PHASE_IMP_GETTING_THROWN || mZombiePhase == ZombiePhase::PHASE_IMP_LANDING || - mZombiePhase == ZombiePhase::PHASE_BOBSLED_CRASHING || - mZombiePhase == ZombiePhase::PHASE_JACK_IN_THE_BOX_POPPING || - mZombiePhase == ZombiePhase::PHASE_SQUASH_RISING || mZombiePhase == ZombiePhase::PHASE_SQUASH_FALLING || - mZombiePhase == ZombiePhase::PHASE_SQUASH_DONE_FALLING || IsBouncingPogo()) + mZombiePhase == ZombiePhase::PHASE_DOLPHIN_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_DOLPHIN_IN_JUMP || + mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL || IsFlying() || + mZombiePhase == ZombiePhase::PHASE_IMP_GETTING_THROWN || mZombiePhase == ZombiePhase::PHASE_IMP_LANDING || + mZombiePhase == ZombiePhase::PHASE_BOBSLED_CRASHING || + mZombiePhase == ZombiePhase::PHASE_JACK_IN_THE_BOX_POPPING || + mZombiePhase == ZombiePhase::PHASE_SQUASH_RISING || mZombiePhase == ZombiePhase::PHASE_SQUASH_FALLING || + mZombiePhase == ZombiePhase::PHASE_SQUASH_DONE_FALLING || IsBouncingPogo()) return false; return mZombieType != ZombieType::ZOMBIE_BUNGEE || mZombiePhase == ZombiePhase::PHASE_BUNGEE_AT_BOTTOM; @@ -8237,7 +8238,7 @@ bool Zombie::EffectedByDamage(unsigned int theDamageRangeFlags) return false; if (mZombieType == ZombieType::ZOMBIE_BUNGEE && mZombiePhase != ZombiePhase::PHASE_BUNGEE_AT_BOTTOM && - mZombiePhase != ZombiePhase::PHASE_BUNGEE_GRABBING) + mZombiePhase != ZombiePhase::PHASE_BUNGEE_GRABBING) { return false; } @@ -8260,8 +8261,8 @@ bool Zombie::EffectedByDamage(unsigned int theDamageRangeFlags) } if (mZombiePhase != ZombiePhase::PHASE_BOSS_HEAD_IDLE_BEFORE_SPIT && - mZombiePhase != ZombiePhase::PHASE_BOSS_HEAD_IDLE_AFTER_SPIT && - mZombiePhase != ZombiePhase::PHASE_BOSS_HEAD_SPIT) + mZombiePhase != ZombiePhase::PHASE_BOSS_HEAD_IDLE_AFTER_SPIT && + mZombiePhase != ZombiePhase::PHASE_BOSS_HEAD_SPIT) { return false; } @@ -8273,13 +8274,13 @@ bool Zombie::EffectedByDamage(unsigned int theDamageRangeFlags) } if (mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT || - mZombiePhase == ZombiePhase::PHASE_IMP_GETTING_THROWN || mZombiePhase == ZombiePhase::PHASE_DIGGER_RISING || - mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING_PAUSE_WITHOUT_AXE || - mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE || - mZombiePhase == ZombiePhase::PHASE_DOLPHIN_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_DOLPHIN_IN_JUMP || - mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_BALLOON_POPPING || - mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || mZombiePhase == ZombiePhase::PHASE_BOBSLED_CRASHING || - mZombiePhase == ZombiePhase::PHASE_DANCER_RISING) + mZombiePhase == ZombiePhase::PHASE_IMP_GETTING_THROWN || mZombiePhase == ZombiePhase::PHASE_DIGGER_RISING || + mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING_PAUSE_WITHOUT_AXE || + mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE || + mZombiePhase == ZombiePhase::PHASE_DOLPHIN_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_DOLPHIN_IN_JUMP || + mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_BALLOON_POPPING || + mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || mZombiePhase == ZombiePhase::PHASE_BOBSLED_CRASHING || + mZombiePhase == ZombiePhase::PHASE_DANCER_RISING) { return TestBit(theDamageRangeFlags, (int)DamageRangeFlags::DAMAGES_OFF_GROUND); } @@ -8307,7 +8308,7 @@ bool Zombie::EffectedByDamage(unsigned int theDamageRangeFlags) } return TestBit(theDamageRangeFlags, (int)DamageRangeFlags::DAMAGES_GROUND) && !IsFlying() && !submerged && - !underground; + !underground; } void Zombie::SetRow(int theRow) @@ -8403,18 +8404,18 @@ void Zombie::RiseFromGrave(int theCol, int theRow) bool Zombie::IsZombotany(ZombieType theZombieType) { return theZombieType == ZombieType::ZOMBIE_PEA_HEAD || theZombieType == ZombieType::ZOMBIE_WALLNUT_HEAD || - theZombieType == ZombieType::ZOMBIE_TALLNUT_HEAD || theZombieType == ZombieType::ZOMBIE_JALAPENO_HEAD || - theZombieType == ZombieType::ZOMBIE_GATLING_HEAD || theZombieType == ZombieType::ZOMBIE_SQUASH_HEAD; + theZombieType == ZombieType::ZOMBIE_TALLNUT_HEAD || theZombieType == ZombieType::ZOMBIE_JALAPENO_HEAD || + theZombieType == ZombieType::ZOMBIE_GATLING_HEAD || theZombieType == ZombieType::ZOMBIE_SQUASH_HEAD; } bool Zombie::ZombieTypeCanGoInPool(ZombieType theZombieType) { return theZombieType == ZombieType::ZOMBIE_NORMAL || theZombieType == ZombieType::ZOMBIE_TRAFFIC_CONE || - theZombieType == ZombieType::ZOMBIE_PAIL || theZombieType == ZombieType::ZOMBIE_FLAG || - theZombieType == ZombieType::ZOMBIE_SNORKEL || theZombieType == ZombieType::ZOMBIE_DOLPHIN_RIDER || - theZombieType == ZombieType::ZOMBIE_PEA_HEAD || theZombieType == ZombieType::ZOMBIE_WALLNUT_HEAD || - theZombieType == ZombieType::ZOMBIE_JALAPENO_HEAD || theZombieType == ZombieType::ZOMBIE_GATLING_HEAD || - theZombieType == ZombieType::ZOMBIE_TALLNUT_HEAD; + theZombieType == ZombieType::ZOMBIE_PAIL || theZombieType == ZombieType::ZOMBIE_FLAG || + theZombieType == ZombieType::ZOMBIE_SNORKEL || theZombieType == ZombieType::ZOMBIE_DOLPHIN_RIDER || + theZombieType == ZombieType::ZOMBIE_PEA_HEAD || theZombieType == ZombieType::ZOMBIE_WALLNUT_HEAD || + theZombieType == ZombieType::ZOMBIE_JALAPENO_HEAD || theZombieType == ZombieType::ZOMBIE_GATLING_HEAD || + theZombieType == ZombieType::ZOMBIE_TALLNUT_HEAD; } bool Zombie::ZombieTypeCanGoOnHighGround(ZombieType theZombieType) @@ -8583,7 +8584,7 @@ bool Zombie::IsSquashTarget(Plant *theExcept) bool Zombie::IsFireResistant() { return mZombieType == ZombieType::ZOMBIE_CATAPULT || mZombieType == ZombieType::ZOMBIE_ZAMBONI || - mShieldType == ShieldType::SHIELDTYPE_DOOR || mShieldType == ShieldType::SHIELDTYPE_LADDER; + mShieldType == ShieldType::SHIELDTYPE_DOOR || mShieldType == ShieldType::SHIELDTYPE_LADDER; } void Zombie::BalloonPropellerHatSpin(bool theSpinning) @@ -8641,7 +8642,7 @@ void Zombie::ApplyButter() return; if (mZombieType == ZombieType::ZOMBIE_ZAMBONI || mZombieType == ZombieType::ZOMBIE_BOSS || IsTangleKelpTarget() || - IsBobsledTeamWithSled() || IsFlying()) + IsBobsledTeamWithSled() || IsFlying()) return; mButteredCounter = 400; @@ -8685,7 +8686,7 @@ void Zombie::MowDown() if (mZombieType == ZombieType::ZOMBIE_CATAPULT) { mApp->AddTodParticle(mPosX + 80.0f, mPosY + 60.0f, mRenderOrder + 1, - ParticleEffect::PARTICLE_CATAPULT_EXPLOSION); + ParticleEffect::PARTICLE_CATAPULT_EXPLOSION); mApp->PlayFoley(FoleyType::FOLEY_EXPLOSION); DieWithLoot(); return; @@ -8694,22 +8695,22 @@ void Zombie::MowDown() if (mZombieType == ZombieType::ZOMBIE_ZAMBONI) { mApp->AddTodParticle(mPosX + 80.0f, mPosY + 60.0f, mRenderOrder + 1, - ParticleEffect::PARTICLE_ZAMBONI_EXPLOSION); + ParticleEffect::PARTICLE_ZAMBONI_EXPLOSION); mApp->PlayFoley(FoleyType::FOLEY_EXPLOSION); DieWithLoot(); return; } if (mZombiePhase == ZombiePhase::PHASE_ZOMBIE_DYING || mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT || - mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || mZombiePhase == ZombiePhase::PHASE_DANCER_RISING || - mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_ZOMBIE_BURNED || - mZombieType == ZombieType::ZOMBIE_GARGANTUAR || mZombieType == ZombieType::ZOMBIE_REDEYE_GARGANTUAR || - mZombieType == ZombieType::ZOMBIE_BUNGEE || mZombieType == ZombieType::ZOMBIE_DIGGER || - mZombieType == ZombieType::ZOMBIE_IMP || mZombieType == ZombieType::ZOMBIE_YETI || - mZombieType == ZombieType::ZOMBIE_DOLPHIN_RIDER || IsBobsledTeamWithSled() || IsFlying() || mInPool) + mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || mZombiePhase == ZombiePhase::PHASE_DANCER_RISING || + mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_ZOMBIE_BURNED || + mZombieType == ZombieType::ZOMBIE_GARGANTUAR || mZombieType == ZombieType::ZOMBIE_REDEYE_GARGANTUAR || + mZombieType == ZombieType::ZOMBIE_BUNGEE || mZombieType == ZombieType::ZOMBIE_DIGGER || + mZombieType == ZombieType::ZOMBIE_IMP || mZombieType == ZombieType::ZOMBIE_YETI || + mZombieType == ZombieType::ZOMBIE_DOLPHIN_RIDER || IsBobsledTeamWithSled() || IsFlying() || mInPool) { Reanimation *aPuffReanim = - mApp->AddReanimation(mPosX - 73.0f, mPosY - 56.0f, mRenderOrder + 2, ReanimationType::REANIM_PUFF); + mApp->AddReanimation(mPosX - 73.0f, mPosY - 56.0f, mRenderOrder + 2, ReanimationType::REANIM_PUFF); aPuffReanim->SetFramesForLayer("anim_puff"); mApp->AddTodParticle(mPosX + 110.0f, mPosY + 0.0f, mRenderOrder + 1, ParticleEffect::PARTICLE_MOWER_CLOUD); @@ -8755,7 +8756,7 @@ void Zombie::MowDown() } Reanimation *aMoweredReanim = - mApp->AddReanimation(0.0f, 0.0f, mRenderOrder, ReanimationType::REANIM_LAWN_MOWERED_ZOMBIE); + mApp->AddReanimation(0.0f, 0.0f, mRenderOrder, ReanimationType::REANIM_LAWN_MOWERED_ZOMBIE); aMoweredReanim->mAnimRate = 8.0f; aMoweredReanim->mIsAttachment = false; aMoweredReanim->mLoopType = ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD; @@ -8786,7 +8787,7 @@ void Zombie::ApplyBurn() if (mBodyHealth >= 1800 || mZombieType == ZombieType::ZOMBIE_BOSS) { TakeDamage(1800, - GetBit(DamageFlags::DAMAGE_HITS_SHIELD_AND_BODY) | GetBit(DamageFlags::DAMAGE_DOESNT_LEAVE_BODY)); + GetBit(DamageFlags::DAMAGE_HITS_SHIELD_AND_BODY) | GetBit(DamageFlags::DAMAGE_DOESNT_LEAVE_BODY)); return; } @@ -8809,19 +8810,19 @@ void Zombie::ApplyBurn() BungeeDropPlant(); if (mZombiePhase == ZombiePhase::PHASE_ZOMBIE_DYING || mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT || - mZombiePhase == ZombiePhase::PHASE_IMP_GETTING_THROWN || mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || - mZombiePhase == ZombiePhase::PHASE_DANCER_RISING || mZombiePhase == ZombiePhase::PHASE_DOLPHIN_INTO_POOL || - mZombiePhase == ZombiePhase::PHASE_DOLPHIN_IN_JUMP || mZombiePhase == ZombiePhase::PHASE_DOLPHIN_RIDING || - mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING || - mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING_PAUSE_WITHOUT_AXE || - mZombiePhase == ZombiePhase::PHASE_DIGGER_RISING || - mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE || - mZombiePhase == ZombiePhase::PHASE_ZOMBIE_MOWERED || mInPool) + mZombiePhase == ZombiePhase::PHASE_IMP_GETTING_THROWN || mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || + mZombiePhase == ZombiePhase::PHASE_DANCER_RISING || mZombiePhase == ZombiePhase::PHASE_DOLPHIN_INTO_POOL || + mZombiePhase == ZombiePhase::PHASE_DOLPHIN_IN_JUMP || mZombiePhase == ZombiePhase::PHASE_DOLPHIN_RIDING || + mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING || + mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING_PAUSE_WITHOUT_AXE || + mZombiePhase == ZombiePhase::PHASE_DIGGER_RISING || + mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE || + mZombiePhase == ZombiePhase::PHASE_ZOMBIE_MOWERED || mInPool) { DieWithLoot(); } else if (mZombieType == ZOMBIE_BUNGEE || mZombieType == ZOMBIE_YETI || Zombie::IsZombotany(mZombieType) || - IsBobsledTeamWithSled() || IsFlying() || !mHasHead) + IsBobsledTeamWithSled() || IsFlying() || !mHasHead) { SetAnimRate(0.0f); Reanimation *aHeadReanim = mApp->ReanimationTryToGet(mSpecialHeadReanimID); @@ -8892,8 +8893,8 @@ void Zombie::ApplyBurn() aCharredReanim->SetFramesForLayer("anim_crumble"); } else if ((mZombieType == ZombieType::ZOMBIE_GARGANTUAR || - mZombieType == ZombieType::ZOMBIE_REDEYE_GARGANTUAR) && - !mHasObject) + mZombieType == ZombieType::ZOMBIE_REDEYE_GARGANTUAR) && + !mHasObject) { aCharredReanim->SetImageOverride("impblink", IMAGE_BLANK); aCharredReanim->SetImageOverride("imphead", IMAGE_BLANK); @@ -9013,7 +9014,7 @@ void Zombie::ReanimShowTrack(const char *theTrackName, int theRenderGroup) void Zombie::PlayDeathAnim(unsigned int theDamageFlags) { if (mZombiePhase == ZombiePhase::PHASE_ZOMBIE_DYING || mZombiePhase == ZombiePhase::PHASE_ZOMBIE_BURNED || - mZombiePhase == ZombiePhase::PHASE_ZOMBIE_MOWERED) + mZombiePhase == ZombiePhase::PHASE_ZOMBIE_MOWERED) return; Reanimation *aBodyReanim = mApp->ReanimationTryToGet(mBodyReanimID); @@ -9052,7 +9053,7 @@ void Zombie::PlayDeathAnim(unsigned int theDamageFlags) if (TestBit(theDamageFlags, (int)DamageFlags::DAMAGE_DOESNT_LEAVE_BODY)) { if (mZombieType != ZombieType::ZOMBIE_BOSS && mZombieType != ZombieType::ZOMBIE_GARGANTUAR && - mZombieType != ZombieType::ZOMBIE_REDEYE_GARGANTUAR) + mZombieType != ZombieType::ZOMBIE_REDEYE_GARGANTUAR) { DieNoLoot(); return; @@ -9133,7 +9134,7 @@ void Zombie::PlayDeathAnim(unsigned int theDamageFlags) ReanimIgnoreClipRect("Zombie_duckytube", false); } else if (aDeathAnimHit == 99 && aBodyReanim->TrackExists("anim_superlongdeath") && aCanDoSuperLongDeath && - mChilledCounter == 0 && mBoard->CountZombiesOnScreen() <= 5) + mChilledCounter == 0 && mBoard->CountZombiesOnScreen() <= 5) { aDeathAnimRate = 14.0f; aDeathTrackName = "anim_superlongdeath"; @@ -9156,7 +9157,7 @@ void Zombie::DoDaisies() return; if (mZombieType == ZombieType::ZOMBIE_BOBSLED || mZombieType == ZombieType::ZOMBIE_ZAMBONI || - mZombieType == ZombieType::ZOMBIE_CATAPULT) + mZombieType == ZombieType::ZOMBIE_CATAPULT) return; if (mBoard->StageHasRoof()) @@ -9165,7 +9166,7 @@ void Zombie::DoDaisies() float aOffsetX = 20.0f; float aOffsetY = 100.0f; if (mZombieType == ZombieType::ZOMBIE_FOOTBALL || mZombieType == ZombieType::ZOMBIE_DANCER || - mZombieType == ZombieType::ZOMBIE_BACKUP_DANCER) + mZombieType == ZombieType::ZOMBIE_BACKUP_DANCER) { aOffsetX += 160.0f; } @@ -9326,17 +9327,17 @@ void Zombie::UpdateDeath() if (mZombieType == ZombieType::ZOMBIE_BOSS) { if (aBodyReanim->ShouldTriggerTimedEvent(0.1f) || aBodyReanim->ShouldTriggerTimedEvent(0.12f) || - aBodyReanim->ShouldTriggerTimedEvent(0.15f) || aBodyReanim->ShouldTriggerTimedEvent(0.19f) || - aBodyReanim->ShouldTriggerTimedEvent(0.2f) || aBodyReanim->ShouldTriggerTimedEvent(0.26f) || - aBodyReanim->ShouldTriggerTimedEvent(0.3f) || aBodyReanim->ShouldTriggerTimedEvent(0.4f) || - aBodyReanim->ShouldTriggerTimedEvent(0.42f) || aBodyReanim->ShouldTriggerTimedEvent(0.5f) || - aBodyReanim->ShouldTriggerTimedEvent(0.58f) || aBodyReanim->ShouldTriggerTimedEvent(0.61f) || - aBodyReanim->ShouldTriggerTimedEvent(0.71f)) + aBodyReanim->ShouldTriggerTimedEvent(0.15f) || aBodyReanim->ShouldTriggerTimedEvent(0.19f) || + aBodyReanim->ShouldTriggerTimedEvent(0.2f) || aBodyReanim->ShouldTriggerTimedEvent(0.26f) || + aBodyReanim->ShouldTriggerTimedEvent(0.3f) || aBodyReanim->ShouldTriggerTimedEvent(0.4f) || + aBodyReanim->ShouldTriggerTimedEvent(0.42f) || aBodyReanim->ShouldTriggerTimedEvent(0.5f) || + aBodyReanim->ShouldTriggerTimedEvent(0.58f) || aBodyReanim->ShouldTriggerTimedEvent(0.61f) || + aBodyReanim->ShouldTriggerTimedEvent(0.71f)) { float aExplosionPosX = RandRangeFloat(600.0f, 750.0f); float aExplosionPosY = RandRangeFloat(50.0f, 300.0f); mApp->AddTodParticle(aExplosionPosX, aExplosionPosY, (int)RenderLayer::RENDER_LAYER_TOP, - ParticleEffect::PARTICLE_BOSS_EXPLOSION); + ParticleEffect::PARTICLE_BOSS_EXPLOSION); mApp->PlayFoley(FoleyType::FOLEY_BOSS_EXPLOSION_SMALL); } @@ -9373,12 +9374,12 @@ void Zombie::UpdateDeath() if (aBodyReanim->IsTrackShowing("anim_wheelie2")) { mApp->AddTodParticle(mPosX + 80.0f, mPosY + 60.0f, mRenderOrder + 1, - ParticleEffect::PARTICLE_ZAMBONI_EXPLOSION2); + ParticleEffect::PARTICLE_ZAMBONI_EXPLOSION2); } else { mApp->AddTodParticle(mPosX + 80.0f, mPosY + 60.0f, mRenderOrder + 1, - ParticleEffect::PARTICLE_ZAMBONI_EXPLOSION); + ParticleEffect::PARTICLE_ZAMBONI_EXPLOSION); } DieWithLoot(); @@ -9391,7 +9392,7 @@ void Zombie::UpdateDeath() if (mPhaseCounter == 0) { mApp->AddTodParticle(mPosX + 80.0f, mPosY + 60.0f, mRenderOrder + 1, - ParticleEffect::PARTICLE_CATAPULT_EXPLOSION); + ParticleEffect::PARTICLE_CATAPULT_EXPLOSION); DieWithLoot(); mApp->PlayFoley(FoleyType::FOLEY_EXPLOSION); } @@ -9416,16 +9417,16 @@ void Zombie::UpdateMowered() bool Zombie::HasShadow() { if (mZombiePhase == ZombiePhase::PHASE_ZOMBIE_DYING || mZombiePhase == ZombiePhase::PHASE_DIGGER_RISING || - mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING_PAUSE_WITHOUT_AXE || - mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE || - mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING || mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || - mZombiePhase == ZombiePhase::PHASE_DANCER_RISING || mZombiePhase == ZombiePhase::PHASE_BOBSLED_BOARDING || - mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT || - mZombiePhase == ZombiePhase::PHASE_DOLPHIN_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL) + mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING_PAUSE_WITHOUT_AXE || + mZombiePhase == ZombiePhase::PHASE_DIGGER_RISE_WITHOUT_AXE || + mZombiePhase == ZombiePhase::PHASE_DIGGER_TUNNELING || mZombiePhase == ZombiePhase::PHASE_RISING_FROM_GRAVE || + mZombiePhase == ZombiePhase::PHASE_DANCER_RISING || mZombiePhase == ZombiePhase::PHASE_BOBSLED_BOARDING || + mZombiePhase == ZombiePhase::PHASE_POLEVAULTER_IN_VAULT || + mZombiePhase == ZombiePhase::PHASE_DOLPHIN_INTO_POOL || mZombiePhase == ZombiePhase::PHASE_SNORKEL_INTO_POOL) return false; if (mZombieType == ZombieType::ZOMBIE_ZAMBONI || mZombieType == ZombieType::ZOMBIE_CATAPULT || - mZombieType == ZombieType::ZOMBIE_BOSS) + mZombieType == ZombieType::ZOMBIE_BOSS) return false; if (mZombieType == ZombieType::ZOMBIE_BUNGEE) @@ -9437,7 +9438,7 @@ bool Zombie::HasShadow() } if (mZombieHeight == ZombieHeight::HEIGHT_DRAGGED_UNDER || mZombieHeight == ZombieHeight::HEIGHT_IN_TO_CHIMNEY || - mZombieHeight == ZombieHeight::HEIGHT_GETTING_BUNGEE_DROPPED) + mZombieHeight == ZombieHeight::HEIGHT_GETTING_BUNGEE_DROPPED) return false; if (mInPool) @@ -9645,8 +9646,8 @@ void Zombie::DrawShadow(Graphics *g) } if (mZombieHeight == ZombieHeight::HEIGHT_UP_LADDER || mZombieHeight == ZombieHeight::HEIGHT_FALLING || - mZombiePhase == ZombiePhase::PHASE_IMP_GETTING_THROWN || mZombieType == ZombieType::ZOMBIE_BUNGEE || - IsBouncingPogo() || IsFlying()) + mZombiePhase == ZombiePhase::PHASE_IMP_GETTING_THROWN || mZombieType == ZombieType::ZOMBIE_BUNGEE || + IsBouncingPogo() || IsFlying()) { aShadowOffsetY += mAltitude; if (mOnHighGround) @@ -9662,7 +9663,7 @@ void Zombie::DrawShadow(Graphics *g) else { TodDrawImageCenterScaledF(g, aShadowType == 0 ? IMAGE_PLANTSHADOW : IMAGE_PLANTSHADOW2, aShadowOffsetX, - aShadowOffsetY + 92.0f, aScale, aScale); + aShadowOffsetY + 92.0f, aScale, aScale); } g->ClearClipRect(); @@ -9729,13 +9730,13 @@ bool Zombie::IsBobsledTeamWithSled() bool Zombie::IsDeadOrDying() { return mDead || mZombiePhase == ZombiePhase::PHASE_ZOMBIE_DYING || - mZombiePhase == ZombiePhase::PHASE_ZOMBIE_BURNED || mZombiePhase == ZombiePhase::PHASE_ZOMBIE_MOWERED; + mZombiePhase == ZombiePhase::PHASE_ZOMBIE_BURNED || mZombiePhase == ZombiePhase::PHASE_ZOMBIE_MOWERED; } void Zombie::UpdateZombieChimney() { if (mBoard->mBackground == BackgroundType::BACKGROUND_5_ROOF || - mBoard->mBackground == BackgroundType::BACKGROUND_6_BOSS) + mBoard->mBackground == BackgroundType::BACKGROUND_6_BOSS) { mAltitude = TodAnimateCurve(4000, 5000, mBoard->mCutScene->mCutsceneTime, 200, 0, TodCurves::CURVE_EASE_IN); } @@ -9754,9 +9755,9 @@ void Zombie::WalkIntoHouse() } if (mBoard->mBackground == BackgroundType::BACKGROUND_1_DAY || - mBoard->mBackground == BackgroundType::BACKGROUND_2_NIGHT || - mBoard->mBackground == BackgroundType::BACKGROUND_3_POOL || - mBoard->mBackground == BackgroundType::BACKGROUND_4_FOG) + mBoard->mBackground == BackgroundType::BACKGROUND_2_NIGHT || + mBoard->mBackground == BackgroundType::BACKGROUND_3_POOL || + mBoard->mBackground == BackgroundType::BACKGROUND_4_FOG) { mPosY = 290.0f; mRenderOrder = Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_ZOMBIE, 2, 0); @@ -9787,7 +9788,7 @@ void Zombie::WalkIntoHouse() } } else if (mBoard->mBackground == BackgroundType::BACKGROUND_5_ROOF || - mBoard->mBackground == BackgroundType::BACKGROUND_6_BOSS) + mBoard->mBackground == BackgroundType::BACKGROUND_6_BOSS) { mPosX = -180.0f; mPosY = 250.0f; @@ -9849,7 +9850,7 @@ void Zombie::DrawBossBackArm(Graphics *g, const ZombieDrawPosition &theDrawPos) aImageOffsetX = mTargetCol * 80.0f; } else if (mZombiePhase == PHASE_BOSS_BUNGEES_ENTER || mZombiePhase == PHASE_BOSS_BUNGEES_DROP || - mZombiePhase == PHASE_BOSS_BUNGEES_LEAVE) + mZombiePhase == PHASE_BOSS_BUNGEES_LEAVE) { aImageOffsetX = mTargetCol * 80.0f - 23.0f; } @@ -9881,7 +9882,7 @@ void Zombie::BossRVLanding() while (mBoard->IteratePlants(aPlant)) { if (aPlant->mRow >= mTargetRow && aPlant->mRow <= mTargetRow + 1 && aPlant->mPlantCol >= mTargetCol && - aPlant->mPlantCol <= mTargetCol + 2) + aPlant->mPlantCol <= mTargetCol + 2) { aPlant->Squish(); } @@ -10207,7 +10208,7 @@ void Zombie::BossDestroyFireball() { float aAngle = 2 * PI * i / 6 + PI / 2; Reanimation *aReanim = mApp->AddReanimation(aPosX + 60.0f * sin(aAngle), aPosY + 60.0f * cos(aAngle), - 400000, ReanimationType::REANIM_JALAPENO_FIRE); + 400000, ReanimationType::REANIM_JALAPENO_FIRE); aReanim->mAnimTime = 0.2f; aReanim->mLoopType = ReanimLoopType::REANIM_PLAY_ONCE_FULL_LAST_FRAME; aReanim->mAnimRate = RandRangeFloat(20.0f, 25.0f); @@ -10240,7 +10241,7 @@ void Zombie::BossHeadSpitEffect() float aFlamePosX = mPosX + aTransform.mTransX + 100.0f; float aFlamePosY = mPosY + aTransform.mTransY + 50.0f; TodParticleSystem *aParticle = mApp->AddTodParticle(aFlamePosX, aFlamePosY, mRenderOrder + 2, - ParticleEffect::PARTICLE_ZOMBIE_BOSS_FIREBALL); + ParticleEffect::PARTICLE_ZOMBIE_BOSS_FIREBALL); if (aParticle) { aParticle->OverrideImage(nullptr, IMAGE_ZOMBIE_BOSS_ICEBALL_PARTICLES); @@ -10301,7 +10302,7 @@ void Zombie::UpdateBossFireball() while (mBoard->IterateLawnMowers(aLawnMower)) { if (aLawnMower->mMowerState != LawnMowerState::MOWER_SQUISHED && aLawnMower->mRow == mFireballRow && - aLawnMower->mPosX > aPosX && aLawnMower->mPosX < aPosX + 50.0f) + aLawnMower->mPosX > aPosX && aLawnMower->mPosX < aPosX + 50.0f) { aLawnMower->SquishMower(); } @@ -10319,7 +10320,7 @@ void Zombie::UpdateBossFireball() { float aBallPosX = aPosX + 100.0f + RandRangeFloat(0.0f, 20.0f); float aBallPosY = - mBoard->GetPosYBasedOnRow(aBallPosX - 40.0f, mFireballRow) + 90.0f + RandRangeFloat(-50.0f, 0.0f); + mBoard->GetPosYBasedOnRow(aBallPosX - 40.0f, mFireballRow) + 90.0f + RandRangeFloat(-50.0f, 0.0f); int aRenderPosition = Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_GRAVE_STONE, mFireballRow, 6); mApp->AddTodParticle(aBallPosX, aBallPosY, aRenderPosition, ParticleEffect::PARTICLE_FIREBALL_TRAIL); } @@ -10336,7 +10337,7 @@ void Zombie::UpdateBossFireball() { float aBallPosX = aPosX + 100.0f + RandRangeFloat(0.0f, 20.0f); float aBallPosY = - mBoard->GetPosYBasedOnRow(aBallPosX - 40.0f, mFireballRow) + 90.0f + RandRangeFloat(-50.0f, 0.0f); + mBoard->GetPosYBasedOnRow(aBallPosX - 40.0f, mFireballRow) + 90.0f + RandRangeFloat(-50.0f, 0.0f); int aRenderPosition = Board::MakeRenderOrder(RenderLayer::RENDER_LAYER_GRAVE_STONE, mFireballRow, 6); mApp->AddTodParticle(aBallPosX, aBallPosY, aRenderPosition, ParticleEffect::PARTICLE_ICEBALL_TRAIL); } @@ -10744,7 +10745,7 @@ void Zombie::ApplyBossSmokeParticles(bool theEnable) Reanimation *aBodyReanim = mApp->ReanimationTryToGet(mBodyReanimID); ReanimatorTrackInstance *aTrackInstance = aBodyReanim->GetTrackInstanceByName("Boss_head"); AttachmentDetachCrossFadeParticleType(aTrackInstance->mAttachmentID, ParticleEffect::PARTICLE_ZAMBONI_SMOKE, - nullptr); + nullptr); if (theEnable) { @@ -10769,7 +10770,7 @@ void Zombie::ApplyBossSmokeParticles(bool theEnable) if (aParticle3) { AttachEffect *aAttachEffect = - aBodyReanim->AttachParticleToTrack("Boss_head", aParticle3, 193.0f, 27.0f); + aBodyReanim->AttachParticleToTrack("Boss_head", aParticle3, 193.0f, 27.0f); aAttachEffect->mDontDrawIfParentHidden = true; aAttachEffect->mDontPropogateColor = true; } @@ -10859,7 +10860,7 @@ void Zombie::EnableDance(bool theEnableDance) return; if (mZombieType == ZombieType::ZOMBIE_NORMAL || mZombieType == ZombieType::ZOMBIE_TRAFFIC_CONE || - mZombieType == ZombieType::ZOMBIE_PAIL) + mZombieType == ZombieType::ZOMBIE_PAIL) { StartWalkAnim(0); } From 9f406000f0ba95ebb3a6cb0d974288771def1e80 Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Sun, 21 Jun 2026 19:36:09 +0300 Subject: [PATCH 11/30] missing formatting file --- src/Lawn/Widget/NewUserDialog.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Lawn/Widget/NewUserDialog.cpp b/src/Lawn/Widget/NewUserDialog.cpp index 8891ac5..7b081b1 100644 --- a/src/Lawn/Widget/NewUserDialog.cpp +++ b/src/Lawn/Widget/NewUserDialog.cpp @@ -5,13 +5,13 @@ #include "../../SexyAppFramework/WidgetManager.h" NewUserDialog::NewUserDialog(LawnApp *theApp, bool isRename) - : LawnDialog(theApp, - isRename ? Dialogs::DIALOG_RENAMEUSER : Dialogs::DIALOG_CREATEUSER, - true, - isRename ? "[RENAME_USER]" : "[NEW_USER]", - "[PLEASE_ENTER_NAME]", - "[DIALOG_BUTTON_OK]", - Dialog::BUTTONS_OK_CANCEL) + : LawnDialog(theApp, + isRename ? Dialogs::DIALOG_RENAMEUSER : Dialogs::DIALOG_CREATEUSER, + true, + isRename ? "[RENAME_USER]" : "[NEW_USER]", + "[PLEASE_ENTER_NAME]", + "[DIALOG_BUTTON_OK]", + Dialog::BUTTONS_OK_CANCEL) { mApp = theApp; mVerticalCenterText = false; @@ -48,7 +48,7 @@ void NewUserDialog::Resize(int theX, int theY, int theWidth, int theHeight) { LawnDialog::Resize(theX, theY, theWidth, theHeight); mNameEditWidget->Resize( - mContentInsets.mLeft + 12, mHeight - 155, mWidth - mContentInsets.mLeft - mContentInsets.mRight - 24, 28); + mContentInsets.mLeft + 12, mHeight - 155, mWidth - mContentInsets.mLeft - mContentInsets.mRight - 24, 28); } void NewUserDialog::Draw(Graphics *g) From a8888383ca70f36300d26cf445c9be9ebd21d73f Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Sun, 21 Jun 2026 19:39:32 +0300 Subject: [PATCH 12/30] fixed art challenge formatting --- src/Lawn/Challenge.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/Lawn/Challenge.cpp b/src/Lawn/Challenge.cpp index d73f2f8..5a7ef76 100644 --- a/src/Lawn/Challenge.cpp +++ b/src/Lawn/Challenge.cpp @@ -165,6 +165,7 @@ ZombieAllowedLevels gZombieAllowedLevels[NUM_ZOMBIE_TYPES] = { // clang-format on + SeedType gArtChallengeWallnut[MAX_GRID_SIZE_Y][MAX_GRID_SIZE_X] = { { SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_WALLNUT, SEED_WALLNUT, SEED_NONE, SEED_NONE }, { SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_WALLNUT, SEED_NONE }, @@ -176,8 +177,7 @@ SeedType gArtChallengeWallnut[MAX_GRID_SIZE_Y][MAX_GRID_SIZE_X] = { SeedType gArtChallengeSunFlower[MAX_GRID_SIZE_Y][MAX_GRID_SIZE_X] = { { SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE }, - { SEED_NONE, SEED_STARFRUIT, SEED_WALLNUT, SEED_WALLNUT, SEED_WALLNUT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, - SEED_NONE }, + { SEED_NONE, SEED_STARFRUIT, SEED_WALLNUT, SEED_WALLNUT, SEED_WALLNUT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE }, { SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE }, { SEED_NONE, SEED_NONE, SEED_NONE, SEED_UMBRELLA, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE }, { SEED_NONE, SEED_NONE, SEED_UMBRELLA, SEED_UMBRELLA, SEED_UMBRELLA, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE }, @@ -187,13 +187,11 @@ SeedType gArtChallengeSunFlower[MAX_GRID_SIZE_Y][MAX_GRID_SIZE_X] = { SeedType gArtChallengeStarFruit[MAX_GRID_SIZE_Y][MAX_GRID_SIZE_X] = { { SEED_NONE, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE }, { SEED_NONE, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE }, - { SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, - SEED_NONE, SEED_NONE }, + { SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_NONE, SEED_NONE }, { SEED_NONE, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_STARFRUIT, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_NONE }, { SEED_NONE, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_NONE, SEED_NONE, SEED_STARFRUIT, SEED_NONE, SEED_NONE }, { SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE, SEED_NONE } }; - Challenge::Challenge() { mApp = (LawnApp *)gSexyAppBase; From 548aa059039edf054dfbe211a005b08db88dc92b Mon Sep 17 00:00:00 2001 From: Michael Zhao <44533763+Pistonight@users.noreply.github.com> Date: Sun, 21 Jun 2026 18:14:34 -0700 Subject: [PATCH 13/30] update to c++23 --- CMakeLists.txt | 4 +- src/Lawn/Board.cpp | 1 - src/Lawn/System/Music.h | 8 +- src/Sexy.TodLib/Definition.cpp | 365 ++++++++++-------- src/Sexy.TodLib/Definition.h | 50 +-- .../OriginalCompiledDefinition.cpp | 57 ++- src/Sexy.TodLib/OriginalCompiledDefinition.h | 53 ++- src/Sexy.TodLib/TodList.h | 7 +- src/SexyAppFramework/BassMusicInterface.cpp | 8 +- src/SexyAppFramework/BassMusicInterface.h | 8 +- src/SexyAppFramework/HTTPTransfer.cpp | 7 +- src/SexyAppFramework/SEHCatcher.cpp | 78 ++-- src/SexyAppFramework/SexyAppBase.cpp | 242 ++++++------ 13 files changed, 476 insertions(+), 412 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0cb2e3e..77af024 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,8 +23,8 @@ if(MSVC AND GITHUB_ACTIONS) add_link_options(/SAFESEH:NO) endif() -set(CMAKE_C_STANDARD 17) -set(CMAKE_CXX_STANDARD 17) +set(CMAKE_C_STANDARD 23) +set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS ON) diff --git a/src/Lawn/Board.cpp b/src/Lawn/Board.cpp index 548c96d..2982a18 100644 --- a/src/Lawn/Board.cpp +++ b/src/Lawn/Board.cpp @@ -42,7 +42,6 @@ #include "../Sexy.TodLib/EffectSystem.h" #include "../Sexy.TodLib/TodStringFile.h" #include "../SexyAppFramework/ImageFont.h" -#include #include "../SexyAppFramework/SoundManager.h" #include "../SexyAppFramework/ButtonWidget.h" #include "../SexyAppFramework/WidgetManager.h" diff --git a/src/Lawn/System/Music.h b/src/Lawn/System/Music.h index ccd23b4..f4ac17f 100644 --- a/src/Lawn/System/Music.h +++ b/src/Lawn/System/Music.h @@ -2,6 +2,13 @@ #define __MUSIC_H__ #include + +// Include windows ourselves to prevent bass.h from including windows and leak macros +// IWYU pragma: begin_exports <- this suppresses clangd warning +#include "../../SexyAppFramework/Platform.h" +// IWYU pragma: end_exports +// this comment exists to prevent formatter from reordering this include + #include class LawnApp; @@ -103,7 +110,6 @@ class Music void MusicInit(); void MusicDispose() { - ; } void MusicUpdate(); void StopAllMusic(); diff --git a/src/Sexy.TodLib/Definition.cpp b/src/Sexy.TodLib/Definition.cpp index 5ff3f8b..a030eb3 100644 --- a/src/Sexy.TodLib/Definition.cpp +++ b/src/Sexy.TodLib/Definition.cpp @@ -9,136 +9,167 @@ #include #include "OriginalCompiledDefinition.h" -DefSymbol gTrailFlagDefSymbols[] = {{0, "Loops"}, {-1, nullptr}}; +DefSymbol gTrailFlagDefSymbols[] = { + { 0, "Loops" }, + { -1, nullptr } +}; DefField gTrailDefFields[] = { - {"Image", offsetof(TrailDefinition, mImage), DefFieldType::DT_IMAGE, nullptr}, - {"MaxPoints", offsetof(TrailDefinition, mMaxPoints), DefFieldType::DT_INT, nullptr}, - {"MinPointDistance", offsetof(TrailDefinition, mMinPointDistance), DefFieldType::DT_FLOAT, nullptr}, - {"TrailFlags", offsetof(TrailDefinition, mTrailFlags), DefFieldType::DT_FLAGS, gTrailFlagDefSymbols}, - {"WidthOverLength", offsetof(TrailDefinition, mWidthOverLength), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"WidthOverTime", offsetof(TrailDefinition, mWidthOverTime), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"AlphaOverLength", offsetof(TrailDefinition, mAlphaOverLength), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"AlphaOverTime", offsetof(TrailDefinition, mAlphaOverTime), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"TrailDuration", offsetof(TrailDefinition, mTrailDuration), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"", 0x0, DefFieldType::DT_INVALID, nullptr}}; -DefMap gTrailDefMap = {gTrailDefFields, sizeof(TrailDefinition), TrailDefinitionConstructor}; - -DefSymbol gParticleFlagSymbols[] = {{0, "RandomLaunchSpin"}, - {1, "AlignLaunchSpin"}, - {2, "AlignToPixel"}, - {4, "ParticleLoops"}, - {3, "SystemLoops"}, - {5, "ParticlesDontFollow"}, - {6, "RandomStartTime"}, - {7, "DieIfOverloaded"}, - {8, "Additive"}, - {9, "FullScreen"}, - {10, "SoftwareOnly"}, - {11, "HardwareOnly"}, - {-1, nullptr}}; + { "Image", offsetof(TrailDefinition, mImage), DefFieldType::DT_IMAGE, nullptr }, + { "MaxPoints", offsetof(TrailDefinition, mMaxPoints), DefFieldType::DT_INT, nullptr }, + { "MinPointDistance", offsetof(TrailDefinition, mMinPointDistance), DefFieldType::DT_FLOAT, nullptr }, + { "TrailFlags", offsetof(TrailDefinition, mTrailFlags), DefFieldType::DT_FLAGS, gTrailFlagDefSymbols }, + { "WidthOverLength", offsetof(TrailDefinition, mWidthOverLength), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "WidthOverTime", offsetof(TrailDefinition, mWidthOverTime), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "AlphaOverLength", offsetof(TrailDefinition, mAlphaOverLength), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "AlphaOverTime", offsetof(TrailDefinition, mAlphaOverTime), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "TrailDuration", offsetof(TrailDefinition, mTrailDuration), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "", 0x0, DefFieldType::DT_INVALID, nullptr } +}; +DefMap gTrailDefMap = { gTrailDefFields, sizeof(TrailDefinition), TrailDefinitionConstructor }; + +DefSymbol gParticleFlagSymbols[] = { + { 0, "RandomLaunchSpin" }, + { 1, "AlignLaunchSpin" }, + { 2, "AlignToPixel" }, + { 4, "ParticleLoops" }, + { 3, "SystemLoops" }, + { 5, "ParticlesDontFollow" }, + { 6, "RandomStartTime" }, + { 7, "DieIfOverloaded" }, + { 8, "Additive" }, + { 9, "FullScreen" }, + { 10, "SoftwareOnly" }, + { 11, "HardwareOnly" }, + { -1, nullptr } +}; DefSymbol gEmitterTypeSymbols[] = { - {0, "Circle"}, {1, "Box"}, {2, "BoxPath"}, {3, "CirclePath"}, {4, "CircleEvenSpacing"}, {-1, nullptr}}; + { 0, "Circle" }, + { 1, "Box" }, + { 2, "BoxPath" }, + { 3, "CirclePath" }, + { 4, "CircleEvenSpacing" }, + { -1, nullptr } +}; DefSymbol gParticleTypeSymbols[] = { - {1, "Friction"}, {2, "Acceleration"}, {3, "Attractor"}, {4, "MaxVelocity"}, - {5, "Velocity"}, {6, "Position"}, {7, "SystemPosition"}, {8, "GroundConstraint"}, - {9, "Shake"}, {10, "Circle"}, {11, "Away"}, {-1, nullptr}}; + { 1, "Friction" }, + { 2, "Acceleration" }, + { 3, "Attractor" }, + { 4, "MaxVelocity" }, + { 5, "Velocity" }, + { 6, "Position" }, + { 7, "SystemPosition" }, + { 8, "GroundConstraint" }, + { 9, "Shake" }, + { 10, "Circle" }, + { 11, "Away" }, + { -1, nullptr } +}; DefField gParticleFieldDefFields[] = { - {"FieldType", offsetof(ParticleField, mFieldType), DefFieldType::DT_ENUM, gParticleTypeSymbols}, - {"x", offsetof(ParticleField, mX), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"y", offsetof(ParticleField, mY), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"", 0x0, DefFieldType::DT_INVALID, nullptr}, + { "FieldType", offsetof(ParticleField, mFieldType), DefFieldType::DT_ENUM, gParticleTypeSymbols }, + { "x", offsetof(ParticleField, mX), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "y", offsetof(ParticleField, mY), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "", 0x0, DefFieldType::DT_INVALID, nullptr }, }; -DefMap gParticleFieldDefMap = {gParticleFieldDefFields, sizeof(ParticleField), ParticleFieldConstructor}; +DefMap gParticleFieldDefMap = { gParticleFieldDefFields, sizeof(ParticleField), ParticleFieldConstructor }; DefField gEmitterDefFields[] = { - {"Image", offsetof(TodEmitterDefinition, mImage), DefFieldType::DT_IMAGE, nullptr}, - {"ImageRow", offsetof(TodEmitterDefinition, mImageRow), DefFieldType::DT_INT, nullptr}, - {"ImageCol", offsetof(TodEmitterDefinition, mImageCol), DefFieldType::DT_INT, nullptr}, - {"ImageFrames", offsetof(TodEmitterDefinition, mImageFrames), DefFieldType::DT_INT, nullptr}, - {"Animated", offsetof(TodEmitterDefinition, mAnimated), DefFieldType::DT_INT, nullptr}, - {"ParticleFlags", offsetof(TodEmitterDefinition, mParticleFlags), DefFieldType::DT_FLAGS, gParticleFlagSymbols}, - {"EmitterType", offsetof(TodEmitterDefinition, mEmitterType), DefFieldType::DT_ENUM, gEmitterTypeSymbols}, - {"Name", offsetof(TodEmitterDefinition, mName), DefFieldType::DT_STRING, nullptr}, - {"SystemDuration", offsetof(TodEmitterDefinition, mSystemDuration), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"OnDuration", offsetof(TodEmitterDefinition, mOnDuration), DefFieldType::DT_STRING, nullptr}, - {"CrossFadeDuration", offsetof(TodEmitterDefinition, mCrossFadeDuration), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"SpawnRate", offsetof(TodEmitterDefinition, mSpawnRate), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"SpawnMinActive", offsetof(TodEmitterDefinition, mSpawnMinActive), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"SpawnMaxActive", offsetof(TodEmitterDefinition, mSpawnMaxActive), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"SpawnMaxLaunched", offsetof(TodEmitterDefinition, mSpawnMaxLaunched), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"EmitterRadius", offsetof(TodEmitterDefinition, mEmitterRadius), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"EmitterOffsetX", offsetof(TodEmitterDefinition, mEmitterOffsetX), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"EmitterOffsetY", offsetof(TodEmitterDefinition, mEmitterOffsetY), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"EmitterBoxX", offsetof(TodEmitterDefinition, mEmitterBoxX), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"EmitterBoxY", offsetof(TodEmitterDefinition, mEmitterBoxY), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"EmitterPath", offsetof(TodEmitterDefinition, mEmitterPath), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"EmitterSkewX", offsetof(TodEmitterDefinition, mEmitterSkewX), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"EmitterSkewY", offsetof(TodEmitterDefinition, mEmitterSkewY), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"ParticleDuration", offsetof(TodEmitterDefinition, mParticleDuration), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"SystemRed", offsetof(TodEmitterDefinition, mSystemRed), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"SystemGreen", offsetof(TodEmitterDefinition, mSystemGreen), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"SystemBlue", offsetof(TodEmitterDefinition, mSystemBlue), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"SystemAlpha", offsetof(TodEmitterDefinition, mSystemAlpha), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"SystemBrightness", offsetof(TodEmitterDefinition, mSystemBrightness), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"LaunchSpeed", offsetof(TodEmitterDefinition, mLaunchSpeed), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"LaunchAngle", offsetof(TodEmitterDefinition, mLaunchAngle), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"Field", offsetof(TodEmitterDefinition, mParticleFields), DefFieldType::DT_ARRAY, &gParticleFieldDefMap}, - {"SystemField", offsetof(TodEmitterDefinition, mSystemFields), DefFieldType::DT_ARRAY, &gParticleFieldDefMap}, - {"ParticleRed", offsetof(TodEmitterDefinition, mParticleRed), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"ParticleGreen", offsetof(TodEmitterDefinition, mParticleGreen), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"ParticleBlue", offsetof(TodEmitterDefinition, mParticleBlue), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"ParticleAlpha", offsetof(TodEmitterDefinition, mParticleAlpha), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"ParticleBrightness", offsetof(TodEmitterDefinition, mParticleBrightness), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"ParticleSpinAngle", offsetof(TodEmitterDefinition, mParticleSpinAngle), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"ParticleSpinSpeed", offsetof(TodEmitterDefinition, mParticleSpinSpeed), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"ParticleScale", offsetof(TodEmitterDefinition, mParticleScale), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"ParticleStretch", offsetof(TodEmitterDefinition, mParticleStretch), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"CollisionReflect", offsetof(TodEmitterDefinition, mCollisionReflect), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"CollisionSpin", offsetof(TodEmitterDefinition, mCollisionSpin), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"ClipTop", offsetof(TodEmitterDefinition, mClipTop), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"ClipBottom", offsetof(TodEmitterDefinition, mClipBottom), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"ClipLeft", offsetof(TodEmitterDefinition, mClipLeft), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"ClipRight", offsetof(TodEmitterDefinition, mClipRight), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"AnimationRate", offsetof(TodEmitterDefinition, mAnimationRate), DefFieldType::DT_TRACK_FLOAT, nullptr}, - {"", 0x0, DefFieldType::DT_INVALID, nullptr}, + { "Image", offsetof(TodEmitterDefinition, mImage), DefFieldType::DT_IMAGE, nullptr }, + { "ImageRow", offsetof(TodEmitterDefinition, mImageRow), DefFieldType::DT_INT, nullptr }, + { "ImageCol", offsetof(TodEmitterDefinition, mImageCol), DefFieldType::DT_INT, nullptr }, + { "ImageFrames", offsetof(TodEmitterDefinition, mImageFrames), DefFieldType::DT_INT, nullptr }, + { "Animated", offsetof(TodEmitterDefinition, mAnimated), DefFieldType::DT_INT, nullptr }, + { "ParticleFlags", offsetof(TodEmitterDefinition, mParticleFlags), DefFieldType::DT_FLAGS, gParticleFlagSymbols }, + { "EmitterType", offsetof(TodEmitterDefinition, mEmitterType), DefFieldType::DT_ENUM, gEmitterTypeSymbols }, + { "Name", offsetof(TodEmitterDefinition, mName), DefFieldType::DT_STRING, nullptr }, + { "SystemDuration", offsetof(TodEmitterDefinition, mSystemDuration), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "OnDuration", offsetof(TodEmitterDefinition, mOnDuration), DefFieldType::DT_STRING, nullptr }, + { "CrossFadeDuration", offsetof(TodEmitterDefinition, mCrossFadeDuration), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "SpawnRate", offsetof(TodEmitterDefinition, mSpawnRate), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "SpawnMinActive", offsetof(TodEmitterDefinition, mSpawnMinActive), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "SpawnMaxActive", offsetof(TodEmitterDefinition, mSpawnMaxActive), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "SpawnMaxLaunched", offsetof(TodEmitterDefinition, mSpawnMaxLaunched), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "EmitterRadius", offsetof(TodEmitterDefinition, mEmitterRadius), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "EmitterOffsetX", offsetof(TodEmitterDefinition, mEmitterOffsetX), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "EmitterOffsetY", offsetof(TodEmitterDefinition, mEmitterOffsetY), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "EmitterBoxX", offsetof(TodEmitterDefinition, mEmitterBoxX), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "EmitterBoxY", offsetof(TodEmitterDefinition, mEmitterBoxY), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "EmitterPath", offsetof(TodEmitterDefinition, mEmitterPath), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "EmitterSkewX", offsetof(TodEmitterDefinition, mEmitterSkewX), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "EmitterSkewY", offsetof(TodEmitterDefinition, mEmitterSkewY), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "ParticleDuration", offsetof(TodEmitterDefinition, mParticleDuration), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "SystemRed", offsetof(TodEmitterDefinition, mSystemRed), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "SystemGreen", offsetof(TodEmitterDefinition, mSystemGreen), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "SystemBlue", offsetof(TodEmitterDefinition, mSystemBlue), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "SystemAlpha", offsetof(TodEmitterDefinition, mSystemAlpha), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "SystemBrightness", offsetof(TodEmitterDefinition, mSystemBrightness), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "LaunchSpeed", offsetof(TodEmitterDefinition, mLaunchSpeed), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "LaunchAngle", offsetof(TodEmitterDefinition, mLaunchAngle), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "Field", offsetof(TodEmitterDefinition, mParticleFields), DefFieldType::DT_ARRAY, &gParticleFieldDefMap }, + { "SystemField", offsetof(TodEmitterDefinition, mSystemFields), DefFieldType::DT_ARRAY, &gParticleFieldDefMap }, + { "ParticleRed", offsetof(TodEmitterDefinition, mParticleRed), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "ParticleGreen", offsetof(TodEmitterDefinition, mParticleGreen), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "ParticleBlue", offsetof(TodEmitterDefinition, mParticleBlue), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "ParticleAlpha", offsetof(TodEmitterDefinition, mParticleAlpha), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "ParticleBrightness", offsetof(TodEmitterDefinition, mParticleBrightness), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "ParticleSpinAngle", offsetof(TodEmitterDefinition, mParticleSpinAngle), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "ParticleSpinSpeed", offsetof(TodEmitterDefinition, mParticleSpinSpeed), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "ParticleScale", offsetof(TodEmitterDefinition, mParticleScale), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "ParticleStretch", offsetof(TodEmitterDefinition, mParticleStretch), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "CollisionReflect", offsetof(TodEmitterDefinition, mCollisionReflect), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "CollisionSpin", offsetof(TodEmitterDefinition, mCollisionSpin), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "ClipTop", offsetof(TodEmitterDefinition, mClipTop), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "ClipBottom", offsetof(TodEmitterDefinition, mClipBottom), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "ClipLeft", offsetof(TodEmitterDefinition, mClipLeft), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "ClipRight", offsetof(TodEmitterDefinition, mClipRight), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "AnimationRate", offsetof(TodEmitterDefinition, mAnimationRate), DefFieldType::DT_TRACK_FLOAT, nullptr }, + { "", 0x0, DefFieldType::DT_INVALID, nullptr }, }; -DefMap gEmitterDefMap = {gEmitterDefFields, sizeof(TodEmitterDefinition), TodEmitterDefinitionConstructor}; +DefMap gEmitterDefMap = { gEmitterDefFields, sizeof(TodEmitterDefinition), TodEmitterDefinitionConstructor }; -DefField gParticleDefFields[] = {{"Emitter", 0x0, DefFieldType::DT_ARRAY, &gEmitterDefMap}, - {"", 0x0, DefFieldType::DT_INVALID, nullptr}}; -DefMap gParticleDefMap = {gParticleDefFields, sizeof(TodParticleDefinition), TodParticleDefinitionConstructor}; +DefField gParticleDefFields[] = { + { "Emitter", 0x0, DefFieldType::DT_ARRAY, &gEmitterDefMap }, + { "", 0x0, DefFieldType::DT_INVALID, nullptr } +}; +DefMap gParticleDefMap = { gParticleDefFields, sizeof(TodParticleDefinition), TodParticleDefinitionConstructor }; DefField gReanimatorTransformDefFields[] = { - {"x", offsetof(ReanimatorTransform, mTransX), DefFieldType::DT_FLOAT, nullptr}, - {"y", offsetof(ReanimatorTransform, mTransY), DefFieldType::DT_FLOAT, nullptr}, - {"kx", offsetof(ReanimatorTransform, mSkewX), DefFieldType::DT_FLOAT, nullptr}, - {"ky", offsetof(ReanimatorTransform, mSkewY), DefFieldType::DT_FLOAT, nullptr}, - {"sx", offsetof(ReanimatorTransform, mScaleX), DefFieldType::DT_FLOAT, nullptr}, - {"sy", offsetof(ReanimatorTransform, mScaleY), DefFieldType::DT_FLOAT, nullptr}, - {"f", offsetof(ReanimatorTransform, mFrame), DefFieldType::DT_FLOAT, nullptr}, - {"a", offsetof(ReanimatorTransform, mAlpha), DefFieldType::DT_FLOAT, nullptr}, - {"i", offsetof(ReanimatorTransform, mImage), DefFieldType::DT_IMAGE, nullptr}, - {"font", offsetof(ReanimatorTransform, mFont), DefFieldType::DT_FONT, nullptr}, - {"text", offsetof(ReanimatorTransform, mText), DefFieldType::DT_STRING, nullptr}, - {"", 0x0, DefFieldType::DT_INVALID, nullptr}}; -DefMap gReanimatorTransformDefMap = {gReanimatorTransformDefFields, sizeof(ReanimatorTransform), - ReanimatorTransformConstructor}; + { "x", offsetof(ReanimatorTransform, mTransX), DefFieldType::DT_FLOAT, nullptr }, + { "y", offsetof(ReanimatorTransform, mTransY), DefFieldType::DT_FLOAT, nullptr }, + { "kx", offsetof(ReanimatorTransform, mSkewX), DefFieldType::DT_FLOAT, nullptr }, + { "ky", offsetof(ReanimatorTransform, mSkewY), DefFieldType::DT_FLOAT, nullptr }, + { "sx", offsetof(ReanimatorTransform, mScaleX), DefFieldType::DT_FLOAT, nullptr }, + { "sy", offsetof(ReanimatorTransform, mScaleY), DefFieldType::DT_FLOAT, nullptr }, + { "f", offsetof(ReanimatorTransform, mFrame), DefFieldType::DT_FLOAT, nullptr }, + { "a", offsetof(ReanimatorTransform, mAlpha), DefFieldType::DT_FLOAT, nullptr }, + { "i", offsetof(ReanimatorTransform, mImage), DefFieldType::DT_IMAGE, nullptr }, + { "font", offsetof(ReanimatorTransform, mFont), DefFieldType::DT_FONT, nullptr }, + { "text", offsetof(ReanimatorTransform, mText), DefFieldType::DT_STRING, nullptr }, + { "", 0x0, DefFieldType::DT_INVALID, nullptr } +}; +DefMap gReanimatorTransformDefMap = { gReanimatorTransformDefFields, sizeof(ReanimatorTransform), + ReanimatorTransformConstructor }; DefField gReanimatorTrackDefFields[] = { - {"name", offsetof(ReanimatorTrack, mName), DefFieldType::DT_STRING, nullptr}, - {"t", offsetof(ReanimatorTrack, mTransforms), DefFieldType::DT_ARRAY, &gReanimatorTransformDefMap}, - {"", 0x0, DefFieldType::DT_INVALID, nullptr}}; -DefMap gReanimatorTrackDefMap = {gReanimatorTrackDefFields, sizeof(ReanimatorTrack), ReanimatorTrackConstructor}; + { "name", offsetof(ReanimatorTrack, mName), DefFieldType::DT_STRING, nullptr }, + { "t", offsetof(ReanimatorTrack, mTransforms), DefFieldType::DT_ARRAY, &gReanimatorTransformDefMap }, + { "", 0x0, DefFieldType::DT_INVALID, nullptr } +}; +DefMap gReanimatorTrackDefMap = { gReanimatorTrackDefFields, sizeof(ReanimatorTrack), ReanimatorTrackConstructor }; DefField gReanimatorDefFields[] = { - {"track", offsetof(ReanimatorDefinition, mTracks), DefFieldType::DT_ARRAY, &gReanimatorTrackDefMap}, - {"fps", offsetof(ReanimatorDefinition, mFPS), DefFieldType::DT_FLOAT, nullptr}, - {"", 0x0, DefFieldType::DT_INVALID, nullptr}}; -DefMap gReanimatorDefMap = {gReanimatorDefFields, sizeof(ReanimatorDefinition), ReanimatorDefinitionConstructor}; + { "track", offsetof(ReanimatorDefinition, mTracks), DefFieldType::DT_ARRAY, &gReanimatorTrackDefMap }, + { "fps", offsetof(ReanimatorDefinition, mFPS), DefFieldType::DT_FLOAT, nullptr }, + { "", 0x0, DefFieldType::DT_INVALID, nullptr } +}; +DefMap gReanimatorDefMap = { gReanimatorDefFields, sizeof(ReanimatorDefinition), ReanimatorDefinitionConstructor }; static DefLoadResPath gDefLoadResPaths[4] = { - {"IMAGE_", ""}, {"IMAGE_", "particles/"}, {"IMAGE_REANIM_", "reanim/"}, {"IMAGE_REANIM_", "images/"}}; + { "IMAGE_", "" }, + { "IMAGE_", "particles/" }, + { "IMAGE_REANIM_", "reanim/" }, + { "IMAGE_REANIM_", "images/" } +}; void *ParticleFieldConstructor(void *thePointer) { @@ -358,7 +389,7 @@ bool DefReadFromCacheFlag(void *&theReadPtr, uint32_t *theFlag) return true; } -bool DefReadFromCacheString(void *&theReadPtr, char **theString) +bool DefReadFromCacheString(void *&theReadPtr, const char **theString) { uint32_t aLen; SMemR(theReadPtr, &aLen, sizeof(uint32_t)); @@ -430,7 +461,7 @@ bool DefMapReadFromCache(void *&theReadPtr, DefMap *theDefMap, void *theDefiniti aSucceed = DefReadFromCacheFlag(theReadPtr, (uint32_t *)aDest); break; case DefFieldType::DT_STRING: - aSucceed = DefReadFromCacheString(theReadPtr, (char **)aDest); + aSucceed = DefReadFromCacheString(theReadPtr, (const char **)aDest); break; case DefFieldType::DT_VECTOR2: aSucceed = DefReadFromCacheVector2(theReadPtr, (SexyVector2 *)aDest); @@ -500,7 +531,7 @@ uint32_t DefinitionCalcHash(DefMap *theDefMap) } void *DefinitionUncompressCompiledBuffer(const CompiledDefinitionHeader *aHeader, void *theCompressedBuffer, - size_t theCompressedBufferSize, const SexyString &theCompiledFilePath) + size_t theCompressedBufferSize, const SexyString &theCompiledFilePath) { auto sz = theCompressedBufferSize; @@ -551,7 +582,7 @@ bool DefinitionReadCompiledFile(const SexyString &theCompiledFilePath, DefMap *t void *aDataPtr = (void *)aCompiledFile.GetCompressedData(); void *anUncompressedData = - DefinitionUncompressCompiledBuffer(aHeader, aDataPtr, aCompressedSize, theCompiledFilePath); + DefinitionUncompressCompiledBuffer(aHeader, aDataPtr, aCompressedSize, theCompiledFilePath); if (anUncompressedData == nullptr) { @@ -570,7 +601,7 @@ bool DefinitionReadCompiledFile(const SexyString &theCompiledFilePath, DefMap *t if (aResult) //If it's an x86 machine, and we find original definitions, load them, then convert to the format we use currently { TodTraceAndLog("[TodLib] - Converting a Legacy Compiled Definition: \"%s\" to the New Format\n", - theCompiledFilePath.c_str()); + theCompiledFilePath.c_str()); DefinitionWriteCompiledFile(theCompiledFilePath, theDefMap, theDefinition); } return aResult; @@ -592,9 +623,9 @@ bool IsFileInPakFile(const SexyString &theFilePath) { PFILE *pFile = p_fopen(theFilePath.c_str(), "rb"); bool aIsInPak = - pFile && - !pFile - ->mFP; // The file found and opened by mPakRecordMap.find has a null pointer mFP (because it was not opened from an actual file). + pFile && + !pFile + ->mFP; // The file found and opened by mPakRecordMap.find has a null pointer mFP (because it was not opened from an actual file). if (pFile) { p_fclose(pFile); @@ -618,10 +649,14 @@ void DefinitionFillWithDefaults(DefMap *theDefMap, void *theDefinition) { memset(theDefinition, NULL, theDefMap->mDefSize); // Initialize theDefinition to 0. for (DefField *aField = theDefMap->mMapFields; *aField->mFieldName != '\0'; - aField++) // Iterate through each member variable of theDefinition + aField++) + { if (aField->mFieldType == DefFieldType::DT_STRING) - *(char **)((uintptr_t)theDefinition + aField->mFieldOffset) = - ""; // Assign all char* member variables to pointers to empty character arrays. + { + *(const char **)((uintptr_t)theDefinition + aField->mFieldOffset) = + ""; + } + } } void DefinitionXmlError(XMLParser *theXmlParser, const char *theFormat, ...) @@ -634,7 +669,7 @@ void DefinitionXmlError(XMLParser *theXmlParser, const char *theFormat, ...) int aLine = theXmlParser->GetCurrentLineNum(); std::string aFileName = theXmlParser->GetFileName(); TodTraceAndLog("[TodLib] - %s(%d): XML Definition Error: %s\n", aFileName.c_str(), aLine, - aFormattedMessage.c_str()); + aFormattedMessage.c_str()); } bool DefinitionReadXMLString(XMLParser *theXmlParser, SexyString &theValue) @@ -648,9 +683,9 @@ bool DefinitionReadXMLString(XMLParser *theXmlParser, SexyString &theValue) if (aXMLElement.mType == XMLElement::TYPE_END) // Processing ends when the end tag is read. return true; else if ( - aXMLElement.mType != - XMLElement:: - TYPE_ELEMENT) // Apart from the closing tag, under normal circumstances, the content read here should be the defined main text. + aXMLElement.mType != + XMLElement:: + TYPE_ELEMENT) // Apart from the closing tag, under normal circumstances, the content read here should be the defined main text. { DefinitionXmlError(theXmlParser, "unknown element type"); return false; @@ -761,7 +796,7 @@ bool DefinitionReadArrayField(XMLParser *theXmlParser, DefinitionArrayDef *theAr { // When theArray already contains elements, and the number of elements is a power of 2. if (theArray->mArrayCount >= 1 && - (theArray->mArrayCount == 1 || (theArray->mArrayCount & (theArray->mArrayCount - 1)) == 0)) + (theArray->mArrayCount == 1 || (theArray->mArrayCount & (theArray->mArrayCount - 1)) == 0)) { void *anNewData = DefinitionAlloc(2 * theArray->mArrayCount * aDefMap->mDefSize); @@ -773,7 +808,7 @@ bool DefinitionReadArrayField(XMLParser *theXmlParser, DefinitionArrayDef *theAr } if (DefinitionLoadMap(theXmlParser, aDefMap, - (unsigned char *)theArray->mArrayData + aDefMap->mDefSize * (theArray->mArrayCount - 1))) + (unsigned char *)theArray->mArrayData + aDefMap->mDefSize * (theArray->mArrayCount - 1))) return true; DefinitionXmlError(theXmlParser, "failed to read sub def"); @@ -781,18 +816,18 @@ bool DefinitionReadArrayField(XMLParser *theXmlParser, DefinitionArrayDef *theAr } DefSymbol gDefTrackEaseSymbols[] = { - {TodCurves::CURVE_EASE_IN_OUT_WEAK, "EaseInOutWeak"}, - {TodCurves::CURVE_FAST_IN_OUT_WEAK, "FastInOutWeak"}, - {TodCurves::CURVE_EASE_IN_OUT, "EaseInOut"}, - {TodCurves::CURVE_FAST_IN_OUT, "FastInOut"}, - {TodCurves::CURVE_EASE_IN, "EaseIn"}, - {TodCurves::CURVE_EASE_OUT, "EaseOut"}, - {TodCurves::CURVE_EASE_SIN_WAVE, "EaseSinWave"}, - {TodCurves::CURVE_BOUNCE_FAST_MIDDLE, "BounceFastMiddle"}, - {TodCurves::CURVE_BOUNCE_SLOW_MIDDLE, "BounceSlowMiddle"}, - {TodCurves::CURVE_BOUNCE, "Bounce"}, - {TodCurves::CURVE_SIN_WAVE, "SinWave"}, - {TodCurves::CURVE_LINEAR, "Linear"}, + { TodCurves::CURVE_EASE_IN_OUT_WEAK, "EaseInOutWeak" }, + { TodCurves::CURVE_FAST_IN_OUT_WEAK, "FastInOutWeak" }, + { TodCurves::CURVE_EASE_IN_OUT, "EaseInOut" }, + { TodCurves::CURVE_FAST_IN_OUT, "FastInOut" }, + { TodCurves::CURVE_EASE_IN, "EaseIn" }, + { TodCurves::CURVE_EASE_OUT, "EaseOut" }, + { TodCurves::CURVE_EASE_SIN_WAVE, "EaseSinWave" }, + { TodCurves::CURVE_BOUNCE_FAST_MIDDLE, "BounceFastMiddle" }, + { TodCurves::CURVE_BOUNCE_SLOW_MIDDLE, "BounceSlowMiddle" }, + { TodCurves::CURVE_BOUNCE, "Bounce" }, + { TodCurves::CURVE_SIN_WAVE, "SinWave" }, + { TodCurves::CURVE_LINEAR, "Linear" }, }; // Read FloatTrackField from Definition XML @@ -844,7 +879,7 @@ bool DefinitionReadFloatTrackField(XMLParser *theXmlParser, FloatParameterTrack { size_t aStrLen = strlen(gDefTrackEaseSymbols[i].mSymbolName); if (strncmp(gDefTrackEaseSymbols[i].mSymbolName, aStringChars + anIdx, aStrLen) == - 0) // could be the distribution? + 0) // could be the distribution? { aTrackNode.mDistribution = (TodCurves)gDefTrackEaseSymbols[i].mSymbolValue; anIdx += aStrLen + 1; // Accounts for space (' '), expressions never end with a curve @@ -977,7 +1012,7 @@ bool DefinitionReadFloatTrackField(XMLParser *theXmlParser, FloatParameterTrack } bool DefinitionReadFlagField(XMLParser *theXmlParser, const SexyString &theElementName, uintptr_t *theResultValue, - DefSymbol *theSymbolMap) + DefSymbol *theSymbolMap) { int aValue; if (!DefSymbolValueFromString(theSymbolMap, theElementName.c_str(), &aValue)) @@ -1016,7 +1051,7 @@ bool DefinitionReadImageField(XMLParser *theXmlParser, Image **theImage) return true; std::string aMessgae = - StrFormat("Failed to find image '%s' in %s", aStringValue.c_str(), theXmlParser->GetFileName().c_str()); + StrFormat("Failed to find image '%s' in %s", aStringValue.c_str(), theXmlParser->GetFileName().c_str()); TodErrorMessageBox(aMessgae.c_str(), "Missing image"); return false; } @@ -1031,7 +1066,7 @@ bool DefinitionReadFontField(XMLParser *theXmlParser, Font **theFont) return true; std::string aMessgae = - StrFormat("Failed to find font '%s' in %s", aStringValue.c_str(), theXmlParser->GetFileName().c_str()); + StrFormat("Failed to find font '%s' in %s", aStringValue.c_str(), theXmlParser->GetFileName().c_str()); TodErrorMessageBox(aMessgae.c_str(), "Missing font"); return false; } @@ -1054,8 +1089,8 @@ bool DefinitionReadField(XMLParser *theXmlParser, DefMap *theDefMap, void *theDe return true; } if (aXMLElement.mType != - XMLElement:: - TYPE_START) // Normally, the start tag should be read here, while other content is read in subsequent corresponding functions. + XMLElement:: + TYPE_START) // Normally, the start tag should be read here, while other content is read in subsequent corresponding functions. { DefinitionXmlError(theXmlParser, "Missing element start"); return false; @@ -1065,12 +1100,12 @@ bool DefinitionReadField(XMLParser *theXmlParser, DefMap *theDefMap, void *theDe { void *pVar = (void *)((uintptr_t)theDefinition + aField->mFieldOffset); if (aField->mFieldType == DefFieldType::DT_FLAGS && - DefinitionReadFlagField(theXmlParser, aXMLElement.mValue, (uintptr_t *)pVar, - (DefSymbol *)aField->mExtraData)) + DefinitionReadFlagField(theXmlParser, aXMLElement.mValue, (uintptr_t *)pVar, + (DefSymbol *)aField->mExtraData)) return true; if (stricmp(aXMLElement.mValue.c_str(), aField->mFieldName) == - 0) // Determine if aXMLElement is defined as the member variable. + 0) // Determine if aXMLElement is defined as the member variable. { bool aSuccess = false; switch (aField->mFieldType) @@ -1114,7 +1149,7 @@ bool DefinitionReadField(XMLParser *theXmlParser, DefMap *theDefMap, void *theDe } } DefinitionXmlError(theXmlParser, "Ignoring unknown element '%s'", - aXMLElement.mValue.c_str()); // When no member variables are defined in aXMLElement + aXMLElement.mValue.c_str()); // When no member variables are defined in aXMLElement return false; } @@ -1280,7 +1315,7 @@ bool DefinitionWriteCompiledFile(const SexyString &theCompiledFilePath, DefMap * uLongf aCompressedSize = compressBound(aCompiler.mBuffer.size()); void *aCompressedData = DefinitionAlloc(aCompressedSize); int res = compress((Bytef *)aCompressedData, &aCompressedSize, (Bytef *)aCompiler.mBuffer.data(), - aHeader.mUncompressedSize); + aHeader.mUncompressedSize); if (res != Z_OK) { @@ -1299,7 +1334,7 @@ bool DefinitionWriteCompiledFile(const SexyString &theCompiledFilePath, DefMap * } bool DefinitionCompileFile(const SexyString theXMLFilePath, const SexyString &theCompiledFilePath, DefMap *theDefMap, - void *theDefinition) + void *theDefinition) { XMLParser aXMLParser; if (!aXMLParser.OpenFile(theXMLFilePath)) @@ -1334,8 +1369,8 @@ bool DefinitionCompileAndLoad(const SexyString &theXMLFilePath, DefMap *theDefMa PerfTimer aTimer; aTimer.Start(); bool aResult = - DefinitionCompileFile(theXMLFilePath, "fresh_" + aCompiledFilePath, theDefMap, - theDefinition); //write to fresh_compiled to not overwrite on game re-compile by accident + DefinitionCompileFile(theXMLFilePath, "fresh_" + aCompiledFilePath, theDefMap, + theDefinition); //write to fresh_compiled to not overwrite on game re-compile by accident TodTraceAndLog("[TodLib] - compile %d ms:'%s'", (int)aTimer.GetDuration(), aCompiledFilePath.c_str()); TodHesitationTrace("compiled %s", aCompiledFilePath.c_str()); if (aResult) @@ -1352,7 +1387,7 @@ float FloatTrackEvaluate(FloatParameterTrack &theTrack, float theTimeValue, floa if (theTimeValue < theTrack.mNodes[0].mTime) // If the current time is less than the start time of the first node return TodCurveEvaluate(theInterp, theTrack.mNodes[0].mLowValue, theTrack.mNodes[0].mHighValue, - theTrack.mNodes[0].mDistribution); + theTrack.mNodes[0].mDistribution); for (int i = 1; i < theTrack.mCountNodes; i++) { @@ -1363,24 +1398,24 @@ float FloatTrackEvaluate(FloatParameterTrack &theTrack, float theTimeValue, floa // Calculate the progress from the current node to the next node at the current time. float aTimeFraction = (theTimeValue - aNodeCur->mTime) / (aNodeNxt->mTime - aNodeCur->mTime); float aLeftValue = - TodCurveEvaluate(theInterp, aNodeCur->mLowValue, aNodeCur->mHighValue, aNodeCur->mDistribution); + TodCurveEvaluate(theInterp, aNodeCur->mLowValue, aNodeCur->mHighValue, aNodeCur->mDistribution); float aRightValue = - TodCurveEvaluate(theInterp, aNodeNxt->mLowValue, aNodeNxt->mHighValue, aNodeNxt->mDistribution); + TodCurveEvaluate(theInterp, aNodeNxt->mLowValue, aNodeNxt->mHighValue, aNodeNxt->mDistribution); return TodCurveEvaluate(aTimeFraction, aLeftValue, aRightValue, aNodeCur->mCurveType); } } FloatParameterTrackNode *aLastNode = - &theTrack - .mNodes[theTrack.mCountNodes - 1]; // If the current time is greater than the start time of the last node + &theTrack + .mNodes[theTrack.mCountNodes - 1]; // If the current time is greater than the start time of the last node return TodCurveEvaluate(theInterp, aLastNode->mLowValue, aLastNode->mHighValue, aLastNode->mDistribution); } void FloatTrackSetDefault(FloatParameterTrack &theTrack, float theValue) { if (theTrack.mNodes == nullptr && - theValue != - 0.0f) // Ensure that this parameter has no nodes (has not been assigned a value) and that the given default value is not 0. + theValue != + 0.0f) // Ensure that this parameter has no nodes (has not been assigned a value) and that the given default value is not 0. { theTrack.mCountNodes = 1; // The default parameter track has exactly one node. FloatParameterTrackNode *aNode = (FloatParameterTrackNode *)DefinitionAlloc(sizeof(FloatParameterTrackNode)); @@ -1402,7 +1437,7 @@ bool FloatTrackIsConstantZero(FloatParameterTrack &theTrack) { // When a track has no nodes, or has only one node whose maximum and minimum values ​​are both 0, the values ​​on that track are considered to be always zero. return theTrack.mCountNodes == 0 || - (theTrack.mCountNodes == 1 && theTrack.mNodes[0].mLowValue == 0.0f && theTrack.mNodes[0].mHighValue == 0.0f); + (theTrack.mCountNodes == 1 && theTrack.mNodes[0].mLowValue == 0.0f && theTrack.mNodes[0].mHighValue == 0.0f); } float FloatTrackEvaluateFromLastTime(FloatParameterTrack &theTrack, float theTimeValue, float theInterp) @@ -1414,8 +1449,8 @@ void DefinitionFreeArrayField(DefinitionArrayDef *theArray, DefMap *theDefMap) { for (int i = 0; i < theArray->mArrayCount; i++) DefinitionFreeMap(theDefMap, - (void *)((uintptr_t)theArray->mArrayData + - theDefMap->mDefSize * i)); // The last parameter represents pData[i]. + (void *)((uintptr_t)theArray->mArrayData + + theDefMap->mDefSize * i)); // The last parameter represents pData[i]. DefinitionFree(theArray->mArrayData); } diff --git a/src/Sexy.TodLib/Definition.h b/src/Sexy.TodLib/Definition.h index cc22456..39ec213 100644 --- a/src/Sexy.TodLib/Definition.h +++ b/src/Sexy.TodLib/Definition.h @@ -40,7 +40,7 @@ enum class DefFieldType : int class DefSymbol { public: - int mSymbolValue; // The value of the flag bit or the numerical value corresponding to the enumeration item; if it is -1, it means that the item does not exist. + int mSymbolValue; // The value of the flag bit or the numerical value corresponding to the enumeration item; if it is -1, it means that the item does not exist. const char *mSymbolName; // The flag or the name of the enumeration item, when a null pointer indicates that the item does not exist, is used as a marker to indicate the end of the read. }; extern DefSymbol gParticleFlagSymbols[]; @@ -55,15 +55,15 @@ extern DefSymbol gParticleTypeSymbols[]; class DefField { public: - const char *mFieldName; // The name of _MemVar. Pointing to an empty character array indicates that this variable does not exist, and is therefore used as a marker to indicate the end of reading. - int mFieldOffset; // Offset within the class (understand in conjunction with assembly language) + const char *mFieldName; // The name of _MemVar. Pointing to an empty character array indicates that this variable does not exist, and is therefore used as a marker to indicate the end of reading. + int mFieldOffset; // Offset within the class (understand in conjunction with assembly language) DefFieldType mFieldType; // *_MemVar The data storage type varies, and the reading method also differs for different types of data. - void *mExtraData; // Additional data. Used for deep copying pointer variables contained in *_MemVar. - // If _MemVar is a pointer variable pointing to other defined data, then mExtraData is a pointer to the definition structure diagram of the class defined by _MemVar; - // If _MemVar is data of a flag or enumeration type, then mExtraData is a pointer to an array of DefSymbol arrays for each of its flag data; otherwise, mExtraData is a null pointer. - // Although by using the definition structure diagram of a _DefClass class, it is possible to read all the data of the _DefClass through relevant functions (i.e., perform a shallow copy). - // However, the data pointed to by some pointer variables in _DefClass still needs to be recursively read (i.e., deep copied) based on the definition structure diagram of the corresponding type. - // In other words, by using a nested definition structure diagram, the pointers of various types of variables that originally had hierarchical relationships are "expanded" until there are no pointers in the current variable's data that can be "expanded", at which point the recursive reading ends. + void *mExtraData; // Additional data. Used for deep copying pointer variables contained in *_MemVar. + // If _MemVar is a pointer variable pointing to other defined data, then mExtraData is a pointer to the definition structure diagram of the class defined by _MemVar; + // If _MemVar is data of a flag or enumeration type, then mExtraData is a pointer to an array of DefSymbol arrays for each of its flag data; otherwise, mExtraData is a null pointer. + // Although by using the definition structure diagram of a _DefClass class, it is possible to read all the data of the _DefClass through relevant functions (i.e., perform a shallow copy). + // However, the data pointed to by some pointer variables in _DefClass still needs to be recursively read (i.e., deep copied) based on the definition structure diagram of the corresponding type. + // In other words, by using a nested definition structure diagram, the pointers of various types of variables that originally had hierarchical relationships are "expanded" until there are no pointers in the current variable's data that can be "expanded", at which point the recursive reading ends. }; // ==================================================================================================== @@ -75,8 +75,8 @@ class DefMap { public: DefField - *mMapFields; // An array of structure fields, recording the structure of each member variable in the _DefClass class within _DefClass (each record represents one structure). - int mDefSize; // The memory size occupied by a _DefClass instance, which is also the length of the initial read, is typically sizeof(_DefClass). + *mMapFields; // An array of structure fields, recording the structure of each member variable in the _DefClass class within _DefClass (each record represents one structure). + int mDefSize; // The memory size occupied by a _DefClass instance, which is also the length of the initial read, is typically sizeof(_DefClass). void *(*mConstructorFunc)(void *); // A pointer to the constructor of an instance of type _DefClass. }; @@ -118,9 +118,9 @@ class DefinitionArrayDef public: void *mArrayData; // An array consisting of instances of a specific defined data type, such as the "track" definition in an animation definition. int mArrayCount; // The size of the array, such as the number of "tracks" in an animation definition or the number of "emitters" in a particle system definition. - // Define a combination of "array (pointer) + quantity" in the data class, which will be treated as a DefinitionArrayDef structure by DefField when read. - // For example, *mEmitterDefs and mEmitterDefCount under TodParticleDefinition, and *mParticleFields and mParticleFieldCount under TodEmitterDefinition. - // During reading, data items in mArrayCount are always correctly read on the first read (because they are integers), and therefore will also serve as a verification reference during the subsequent repair process of mArrayData. + // Define a combination of "array (pointer) + quantity" in the data class, which will be treated as a DefinitionArrayDef structure by DefField when read. + // For example, *mEmitterDefs and mEmitterDefCount under TodParticleDefinition, and *mParticleFields and mParticleFieldCount under TodEmitterDefinition. + // During reading, data items in mArrayCount are always correctly read on the first read (because they are integers), and therefore will also serve as a verification reference during the subsequent repair process of mArrayData. }; // ==================================================================================================== @@ -131,7 +131,7 @@ class DefinitionArrayDef class DefLoadResPath { public: - const char *mPrefix; // Image prefixes, such as "IMAGE_" + const char *mPrefix; // Image prefixes, such as "IMAGE_" const char *mDirectory; // The folder containing the textures corresponding to the prefix, such as "images\". }; @@ -151,30 +151,30 @@ bool DefinitionReadVector2Field(XMLParser *theXmlParser, SexyVector2 *theValue); bool DefinitionReadArrayField(XMLParser *theXmlParser, DefinitionArrayDef *theArray, DefField *theField); bool DefinitionReadFloatTrackField(XMLParser *theXmlParser, FloatParameterTrack *theTrack); bool DefinitionReadFlagField(XMLParser *theXmlParser, - const SexyString &theElementName, - uintptr_t *theResultValue, - DefSymbol *theSymbolMap); + const SexyString &theElementName, + uintptr_t *theResultValue, + DefSymbol *theSymbolMap); bool DefinitionReadImageField(XMLParser *theXmlParser, Image **theImage); bool DefinitionReadFontField(XMLParser *theXmlParser, Font **theFont); bool DefinitionReadField(XMLParser *theXmlParser, DefMap *theDefMap, void *theDefinition, bool *theDone); bool DefinitionWriteCompiledFile(const SexyString &theCompiledFilePath, DefMap *theDefMap, void *theDefinition); bool DefinitionCompileFile(const SexyString theXMLFilePath, - const SexyString &theCompiledFilePath, - DefMap *theDefMap, - void *theDefinition); + const SexyString &theCompiledFilePath, + DefMap *theDefMap, + void *theDefinition); void *DefinitionAlloc(int theSize); void DefinitionFree(void *&theMemory); void *DefinitionUncompressCompiledBuffer(const CompiledDefinitionHeader *aHeader, - void *theCompressedBuffer, - size_t theCompressedBufferSize, - const SexyString &theCompiledFilePath); + void *theCompressedBuffer, + size_t theCompressedBufferSize, + const SexyString &theCompiledFilePath); uint32_t /*__cdecl*/ DefinitionCalcHashSymbolMap(int aSchemaHash, DefSymbol *theSymbolMap); uint32_t /*__cdecl*/ DefinitionCalcHashDefMap(int aSchemaHash, DefMap *theDefMap, TodList &theProgressMaps); uint32_t /*__cdecl*/ DefinitionCalcHash(DefMap *theDefMap); bool DefReadFromCacheInt(void *&theReadPtr, int *theInt); bool DefReadFromCacheFloat(void *&theReadPtr, float *theFloat); bool DefReadFromCacheFlag(void *&theReadPtr, uint32_t *theFlag); -bool DefReadFromCacheString(void *&theReadPtr, char **theString); +bool DefReadFromCacheString(void *&theReadPtr, const char **theString); bool DefReadFromCacheVector2(void *&theReadPtr, SexyVector2 *theVector); bool DefReadFromCacheArray(void *&theReadPtr, DefinitionArrayDef *theArray, DefMap *theDefMap); bool DefReadFromCacheImage(void *&theReadPtr, Image **theImage); diff --git a/src/Sexy.TodLib/OriginalCompiledDefinition.cpp b/src/Sexy.TodLib/OriginalCompiledDefinition.cpp index eb00f4c..f181365 100644 --- a/src/Sexy.TodLib/OriginalCompiledDefinition.cpp +++ b/src/Sexy.TodLib/OriginalCompiledDefinition.cpp @@ -6,12 +6,11 @@ #include "../SexyAppFramework/PerfTimer.h" #include - bool LegacyDefinition::DefReadFromCacheArray(void *&theReadPtr, DefinitionArrayDef *theArray, DefMap *theDefMap) { int aDefSize; SMemR(theReadPtr, &aDefSize, sizeof(int)); // First read an integer representing the size of the definition struct class described by theDefMap - if (aDefSize != theDefMap->mDefSize) // Compare it with the size declared by the currently given definition struct map to check whether they match + if (aDefSize != theDefMap->mDefSize) // Compare it with the size declared by the currently given definition struct map to check whether they match { TodTrace("[TodLib] - cache has old def: array size"); return false; @@ -25,7 +24,7 @@ bool LegacyDefinition::DefReadFromCacheArray(void *&theReadPtr, DefinitionArrayD SMemR(theReadPtr, pData, aArraySize); // Still a rough read of all the data, then fix the pointers according to theDefMap's struct field array for (int i = 0; i < theArray->mArrayCount; i++) if (!LegacyDefinition::DefMapReadFromCache( - theReadPtr, theDefMap, (void *)((int)pData + theDefMap->mDefSize * i))) // The last argument represents pData[i] + theReadPtr, theDefMap, (void *)((int)pData + theDefMap->mDefSize * i))) // The last argument represents pData[i] return false; return true; } @@ -44,7 +43,7 @@ bool LegacyDefinition::DefReadFromCacheFloatTrack(void *&theReadPtr, FloatParame return true; } -bool LegacyDefinition::DefReadFromCacheString(void *&theReadPtr, char **theString) +bool LegacyDefinition::DefReadFromCacheString(void *&theReadPtr, const char **theString) { int aLen; SMemR(theReadPtr, &aLen, sizeof(int)); @@ -64,9 +63,9 @@ bool LegacyDefinition::DefReadFromCacheString(void *&theReadPtr, char **theStrin bool LegacyDefinition::DefReadFromCacheImage(void *&theReadPtr, Image **theImage) { int aLen; - SMemR(theReadPtr, &aLen, sizeof(int)); // Read the length of the image label character array + SMemR(theReadPtr, &aLen, sizeof(int)); // Read the length of the image label character array char *aImageName = (char *)_alloca(aLen + 1); // Allocate memory space for the image label character array on the stack - SMemR(theReadPtr, aImageName, aLen); // Read the image label character array + SMemR(theReadPtr, aImageName, aLen); // Read the image label character array aImageName[aLen] = '\0'; *theImage = nullptr; @@ -76,9 +75,9 @@ bool LegacyDefinition::DefReadFromCacheImage(void *&theReadPtr, Image **theImage bool LegacyDefinition::DefReadFromCacheFont(void *&theReadPtr, Font **theFont) { int aLen; - SMemR(theReadPtr, &aLen, sizeof(int)); // Read the length of the font label character array + SMemR(theReadPtr, &aLen, sizeof(int)); // Read the length of the font label character array char *aFontName = (char *)_alloca(aLen + 1); // Allocate memory space for the font label character array on the stack - SMemR(theReadPtr, aFontName, aLen); // Read the font label character array + SMemR(theReadPtr, aFontName, aLen); // Read the font label character array aFontName[aLen] = '\0'; *theFont = nullptr; @@ -95,7 +94,7 @@ bool LegacyDefinition::DefMapReadFromCache(void *&theReadPtr, DefMap *theDefMap, switch (aField->mFieldType) { case DefFieldType::DT_STRING: - aSucceed = LegacyDefinition::DefReadFromCacheString(theReadPtr, (char **)aDest); + aSucceed = LegacyDefinition::DefReadFromCacheString(theReadPtr, (const char **)aDest); break; case DefFieldType::DT_ARRAY: aSucceed = LegacyDefinition::DefReadFromCacheArray(theReadPtr, (DefinitionArrayDef *)aDest, (DefMap *)aField->mExtraData); @@ -129,8 +128,8 @@ uint32_t LegacyDefinition::DefinitionCalcHashSymbolMap(int aSchemaHash, DefSymbo } uint32_t LegacyDefinition::DefinitionCalcHashDefMap(int aSchemaHash, - DefMap *theDefMap, - TodList &theProgressMaps) + DefMap *theDefMap, + TodList &theProgressMaps) { for (TodListNode *aNode = theProgressMaps.mHead; aNode != nullptr; aNode = aNode->mNext) if (aNode->mValue == theDefMap) @@ -160,7 +159,7 @@ uint32_t LegacyDefinition::DefinitionCalcHash(DefMap *theDefMap) { TodList aProgressMaps; uint32_t aResult = - LegacyDefinition::DefinitionCalcHashDefMap(crc32(0L, (Bytef *)Z_NULL, NULL) + 1, theDefMap, aProgressMaps); + LegacyDefinition::DefinitionCalcHashDefMap(crc32(0L, (Bytef *)Z_NULL, NULL) + 1, theDefMap, aProgressMaps); return aResult; } @@ -171,14 +170,14 @@ bool LegacyDefinition::DefinitionReadCompiledFile(const SexyString &theCompiledF PFILE *pFile = p_fopen(theCompiledFilePath.c_str(), "rb"); if (pFile) { - p_fseek(pFile, 0, 2); // Move the pointer to the read location to the end of the file + p_fseek(pFile, 0, 2); // Move the pointer to the read location to the end of the file size_t aCompressedSize = p_ftell(pFile); // The offset obtained at this time is the size of the entire file - p_fseek(pFile, 0, 0); // Then move the pointer to the read position back to the beginning of the file + p_fseek(pFile, 0, 0); // Then move the pointer to the read position back to the beginning of the file void *aCompressedBuffer = DefinitionAlloc(aCompressedSize); // Read the file, and determine whether the actual read size is the complete file size, if it is not equal, it is determined that the read failed bool aReadCompressedFailed = - p_fread(aCompressedBuffer, sizeof(char), aCompressedSize, pFile) != aCompressedSize; - p_fclose(pFile); // Close the resource file stream and free up the memory occupied by pFile + p_fread(aCompressedBuffer, sizeof(char), aCompressedSize, pFile) != aCompressedSize; + p_fclose(pFile); // Close the resource file stream and free up the memory occupied by pFile if (aReadCompressedFailed) // Determine whether the reading is successful { TodTrace("[TodLib] - Failed to read compiled file: %s\n", theCompiledFilePath.c_str()); @@ -188,16 +187,16 @@ bool LegacyDefinition::DefinitionReadCompiledFile(const SexyString &theCompiledF { size_t aUncompressedSize; void *aUncompressedBuffer = LegacyDefinition::DefinitionUncompressCompiledBuffer( - aCompressedBuffer, aCompressedSize, aUncompressedSize, theCompiledFilePath); + aCompressedBuffer, aCompressedSize, aUncompressedSize, theCompiledFilePath); DefinitionFree(aCompressedBuffer); if (aUncompressedBuffer) { uint32_t aDefHash = LegacyDefinition::DefinitionCalcHash( - theDefMap); // Calculate the CRC check value, which will be used to detect the integrity of the data + theDefMap); // Calculate the CRC check value, which will be used to detect the integrity of the data if (aUncompressedSize < - theDefMap->mDefSize + - sizeof( - uint32_t)) // Detect whether the length of the decompressed data is sufficient for the length of "define data + a check value to record data" + theDefMap->mDefSize + + sizeof( + uint32_t)) // Detect whether the length of the decompressed data is sufficient for the length of "define data + a check value to record data" TodTrace("[TodLib] - Compiled file size too small: %s\n", theCompiledFilePath.c_str()); else { @@ -206,7 +205,7 @@ bool LegacyDefinition::DefinitionReadCompiledFile(const SexyString &theCompiledF uint32_t aCashHash; SMemR(aBufferPtr, &aCashHash, sizeof(uint32_t)); //Read the CRC check value of the record if (aCashHash != - aDefHash) // Determine whether the check value is consistent, if it is inconsistent, the data is wrong + aDefHash) // Determine whether the check value is consistent, if it is inconsistent, the data is wrong TodTrace("[TodLib] - Compiled file schema wrong: %s\n", theCompiledFilePath.c_str()); else { @@ -232,9 +231,9 @@ bool LegacyDefinition::DefinitionReadCompiledFile(const SexyString &theCompiledF } void *LegacyDefinition::DefinitionUncompressCompiledBuffer(void *theCompressedBuffer, - size_t theCompressedBufferSize, - size_t &theUncompressedSize, - const SexyString &theCompiledFilePath) + size_t theCompressedBufferSize, + size_t &theUncompressedSize, + const SexyString &theCompiledFilePath) { auto sz = theCompressedBufferSize; // theCompressedBuffer The first two four-byte bytes contain special data, and this check verifies whether its length is sufficient for 8 bytes (i.e., 2 four-byte bytes). @@ -253,11 +252,11 @@ void *LegacyDefinition::DefinitionUncompressCompiledBuffer(void *theCompressedBu Bytef *aUncompressedBuffer = (Bytef *)DefinitionAlloc(aHeader->mUncompressedSize); theCompressedBufferSize = aHeader->mUncompressedSize; //my addition Bytef *aSrc = (Bytef *)theCompressedBuffer + - sizeof(LegacyDefinition::CompressedDefinitionHeader); // The actual data to decompress starts at the 3rd four-byte word + sizeof(LegacyDefinition::CompressedDefinitionHeader); // The actual data to decompress starts at the 3rd four-byte word int aResult = uncompress(aUncompressedBuffer, - (uLongf *)&theCompressedBufferSize, - aSrc, - sz - sizeof(LegacyDefinition::CompressedDefinitionHeader)); + (uLongf *)&theCompressedBufferSize, + aSrc, + sz - sizeof(LegacyDefinition::CompressedDefinitionHeader)); TOD_ASSERT(aResult == Z_OK); TOD_ASSERT(theCompressedBufferSize == aHeader->mUncompressedSize); theUncompressedSize = aHeader->mUncompressedSize; diff --git a/src/Sexy.TodLib/OriginalCompiledDefinition.h b/src/Sexy.TodLib/OriginalCompiledDefinition.h index 268c969..3c82aa6 100644 --- a/src/Sexy.TodLib/OriginalCompiledDefinition.h +++ b/src/Sexy.TodLib/OriginalCompiledDefinition.h @@ -17,30 +17,29 @@ class FloatParameterTrack; namespace LegacyDefinition { - // ==================================================================================================== - // Compress definition data header - // ---------------------------------------------------------------------------------------------------- - // Add a compression definition header before the compressed data to record the verification cache value and the original data length, which is used to check data integrity during decompression. - // ==================================================================================================== - class CompressedDefinitionHeader - { - public: - unsigned int mCookie; // Cache values ​​used for compression verification - unsigned long mUncompressedSize; // Length of uncompressed data - }; - - bool DefinitionReadCompiledFile(const SexyString &theCompiledFilePath, DefMap *theDefMap, void *theDefinition); - void *DefinitionUncompressCompiledBuffer(void *theCompressedBuffer, size_t theCompressedBufferSize, size_t &theUncompressedSize, const SexyString &theCompiledFilePath); - uint32_t DefinitionCalcHashSymbolMap(int aSchemaHash, DefSymbol *theSymbolMap); - uint32_t DefinitionCalcHashDefMap(int aSchemaHash, DefMap *theDefMap, TodList &theProgressMaps); - uint32_t DefinitionCalcHash(DefMap *theDefMap); - bool DefReadFromCacheString(void *&theReadPtr, char **theString); - bool DefReadFromCacheArray(void *&theReadPtr, DefinitionArrayDef *theArray, DefMap *theDefMap); - bool DefReadFromCacheImage(void *&theReadPtr, Image **theImage); - bool DefReadFromCacheFont(void *&theReadPtr, Font **theFont); - bool DefReadFromCacheFloatTrack(void *&theReadPtr, FloatParameterTrack *theTrack); - bool DefMapReadFromCache(void *&theReadPtr, DefMap *theDefMap, void *theDefinition); -} - - -#endif \ No newline at end of file +// ==================================================================================================== +// Compress definition data header +// ---------------------------------------------------------------------------------------------------- +// Add a compression definition header before the compressed data to record the verification cache value and the original data length, which is used to check data integrity during decompression. +// ==================================================================================================== +class CompressedDefinitionHeader +{ + public: + unsigned int mCookie; // Cache values ​​used for compression verification + unsigned long mUncompressedSize; // Length of uncompressed data +}; + +bool DefinitionReadCompiledFile(const SexyString &theCompiledFilePath, DefMap *theDefMap, void *theDefinition); +void *DefinitionUncompressCompiledBuffer(void *theCompressedBuffer, size_t theCompressedBufferSize, size_t &theUncompressedSize, const SexyString &theCompiledFilePath); +uint32_t DefinitionCalcHashSymbolMap(int aSchemaHash, DefSymbol *theSymbolMap); +uint32_t DefinitionCalcHashDefMap(int aSchemaHash, DefMap *theDefMap, TodList &theProgressMaps); +uint32_t DefinitionCalcHash(DefMap *theDefMap); +bool DefReadFromCacheString(void *&theReadPtr, const char **theString); +bool DefReadFromCacheArray(void *&theReadPtr, DefinitionArrayDef *theArray, DefMap *theDefMap); +bool DefReadFromCacheImage(void *&theReadPtr, Image **theImage); +bool DefReadFromCacheFont(void *&theReadPtr, Font **theFont); +bool DefReadFromCacheFloatTrack(void *&theReadPtr, FloatParameterTrack *theTrack); +bool DefMapReadFromCache(void *&theReadPtr, DefMap *theDefMap, void *theDefinition); +} // namespace LegacyDefinition + +#endif diff --git a/src/Sexy.TodLib/TodList.h b/src/Sexy.TodLib/TodList.h index 5886f01..494db4d 100644 --- a/src/Sexy.TodLib/TodList.h +++ b/src/Sexy.TodLib/TodList.h @@ -4,6 +4,7 @@ #define MAX_GLOBAL_ALLOCATORS 128 #include "TodDebug.h" +#include "TodCommon.h" struct TodAllocator { @@ -26,7 +27,8 @@ struct TodAllocator extern int gNumGlobalAllocators; extern TodAllocator gGlobalAllocators[MAX_GLOBAL_ALLOCATORS]; -template class TodListNode +template +class TodListNode { public: T mValue; @@ -34,7 +36,8 @@ template class TodListNode TodListNode *mPrev; }; -template class TodList +template +class TodList { public: TodListNode *mHead; diff --git a/src/SexyAppFramework/BassMusicInterface.cpp b/src/SexyAppFramework/BassMusicInterface.cpp index fa3d96c..e4c1cdf 100644 --- a/src/SexyAppFramework/BassMusicInterface.cpp +++ b/src/SexyAppFramework/BassMusicInterface.cpp @@ -1,5 +1,4 @@ #include "BassMusicInterface.h" -#include #include "../PakLib/PakInterface.h" #include "Common.h" @@ -18,13 +17,13 @@ BassMusicInfo::BassMusicInfo() BassMusicInterface::BassMusicInterface(Window *theWindow) { BOOL success; - #ifdef _WIN32 +#ifdef _WIN32 SDL_PropertiesID props = SDL_GetWindowProperties(theWindow->mInternalWindow); HWND aHWND = theWindow->GetHWND(); success = BASS_Init(1, 44100, 0, aHWND, NULL); - #else +#else success = BASS_Init(1, 44100, 0, NULL, NULL); - #endif +#endif BASS_SetConfig(BASS_CONFIG_BUFFER, 2000); BASS_SetConfig(BASS_CONFIG_FLOATDSP, TRUE); @@ -71,7 +70,6 @@ bool BassMusicInterface::LoadMusic(int theSongId, const std::string &theFileName delete[] aData; } - if (aHMusic == NULL && aStream == NULL) return false; diff --git a/src/SexyAppFramework/BassMusicInterface.h b/src/SexyAppFramework/BassMusicInterface.h index 9254a20..d1eb867 100644 --- a/src/SexyAppFramework/BassMusicInterface.h +++ b/src/SexyAppFramework/BassMusicInterface.h @@ -1,6 +1,12 @@ #ifndef __BASSMUSICINTERFACE_H__ #define __BASSMUSICINTERFACE_H__ +// Include windows ourselves to prevent bass.h from including windows and leak macros +// IWYU pragma: begin_exports <- this suppresses clangd warning +#include "Platform.h" +// IWYU pragma: end_exports +// this comment exists to prevent formatter from reordering this include + #include "MusicInterface.h" #include "Window.h" #include @@ -40,7 +46,7 @@ class BassMusicInterface : public MusicInterface int mMusicLoadFlags; public: - BassMusicInterface(Window* theWindow); + BassMusicInterface(Window *theWindow); virtual ~BassMusicInterface(); virtual bool LoadMusic(int theSongId, const std::string &theFileName); diff --git a/src/SexyAppFramework/HTTPTransfer.cpp b/src/SexyAppFramework/HTTPTransfer.cpp index 70c3279..6af3d69 100644 --- a/src/SexyAppFramework/HTTPTransfer.cpp +++ b/src/SexyAppFramework/HTTPTransfer.cpp @@ -1,8 +1,13 @@ +// Include windows ourselves to prevent curl.h from including windows and leak macros +// IWYU pragma: begin_exports <- this suppresses clangd warning +#include "Platform.h" +// IWYU pragma: end_exports +// this comment exists to prevent formatter from reordering this include + #include "HTTPTransfer.h" #include "SexyAppBase.h" #include - using namespace Sexy; static int gCurTransferId = 1; diff --git a/src/SexyAppFramework/SEHCatcher.cpp b/src/SexyAppFramework/SEHCatcher.cpp index eb14fbf..4099289 100644 --- a/src/SexyAppFramework/SEHCatcher.cpp +++ b/src/SexyAppFramework/SEHCatcher.cpp @@ -16,7 +16,7 @@ #if SEXY_USE_IMGUI #include #include //use SDL3 Renderer for the handler. -#include //use SDL3 Renderer for the handler. +#include //use SDL3 Renderer for the handler. #endif #include @@ -40,7 +40,7 @@ bool SEHCatcher::mAllowSubmit = true; std::string SEHCatcher::mCrashMessage = "An unexpected error has occured!"; std::string SEHCatcher::mSubmitHost; std::string SEHCatcher::mSubmitMessage = - "Please help out by providing as much information as you can about this crash."; + "Please help out by providing as much information as you can about this crash."; std::string SEHCatcher::mSubmitErrorMessage = "Failed to redirect to issue page."; static bool gUseDefaultFonts = true; @@ -49,37 +49,39 @@ static bool gUseDefaultFonts = true; struct { DWORD dwExceptionCode; - char *szMessage; -} gMsgTable[] = {{STATUS_SEGMENT_NOTIFICATION, "Segment Notification"}, - {STATUS_BREAKPOINT, "Breakpoint"}, - {STATUS_SINGLE_STEP, "Single step"}, - {STATUS_WAIT_0, "Wait 0"}, - {STATUS_ABANDONED_WAIT_0, "Abandoned Wait 0"}, - {STATUS_USER_APC, "User APC"}, - {STATUS_TIMEOUT, "Timeout"}, - {STATUS_PENDING, "Pending"}, - {STATUS_GUARD_PAGE_VIOLATION, "Guard Page Violation"}, - {STATUS_DATATYPE_MISALIGNMENT, "Data Type Misalignment"}, - {STATUS_ACCESS_VIOLATION, "Access Violation"}, - {STATUS_IN_PAGE_ERROR, "In Page Error"}, - {STATUS_NO_MEMORY, "No Memory"}, - {STATUS_ILLEGAL_INSTRUCTION, "Illegal Instruction"}, - {STATUS_NONCONTINUABLE_EXCEPTION, "Noncontinuable Exception"}, - {STATUS_INVALID_DISPOSITION, "Invalid Disposition"}, - {STATUS_ARRAY_BOUNDS_EXCEEDED, "Array Bounds Exceeded"}, - {STATUS_FLOAT_DENORMAL_OPERAND, "Float Denormal Operand"}, - {STATUS_FLOAT_DIVIDE_BY_ZERO, "Divide by Zero"}, - {STATUS_FLOAT_INEXACT_RESULT, "Float Inexact Result"}, - {STATUS_FLOAT_INVALID_OPERATION, "Float Invalid Operation"}, - {STATUS_FLOAT_OVERFLOW, "Float Overflow"}, - {STATUS_FLOAT_STACK_CHECK, "Float Stack Check"}, - {STATUS_FLOAT_UNDERFLOW, "Float Underflow"}, - {STATUS_INTEGER_DIVIDE_BY_ZERO, "Integer Divide by Zero"}, - {STATUS_INTEGER_OVERFLOW, "Integer Overflow"}, - {STATUS_PRIVILEGED_INSTRUCTION, "Privileged Instruction"}, - {STATUS_STACK_OVERFLOW, "Stack Overflow"}, - {STATUS_CONTROL_C_EXIT, "Ctrl+C Exit"}, - {0xFFFFFFFF, ""}}; + const char *szMessage; +} gMsgTable[] = { + { STATUS_SEGMENT_NOTIFICATION, "Segment Notification" }, + { STATUS_BREAKPOINT, "Breakpoint" }, + { STATUS_SINGLE_STEP, "Single step" }, + { STATUS_WAIT_0, "Wait 0" }, + { STATUS_ABANDONED_WAIT_0, "Abandoned Wait 0" }, + { STATUS_USER_APC, "User APC" }, + { STATUS_TIMEOUT, "Timeout" }, + { STATUS_PENDING, "Pending" }, + { STATUS_GUARD_PAGE_VIOLATION, "Guard Page Violation" }, + { STATUS_DATATYPE_MISALIGNMENT, "Data Type Misalignment" }, + { STATUS_ACCESS_VIOLATION, "Access Violation" }, + { STATUS_IN_PAGE_ERROR, "In Page Error" }, + { STATUS_NO_MEMORY, "No Memory" }, + { STATUS_ILLEGAL_INSTRUCTION, "Illegal Instruction" }, + { STATUS_NONCONTINUABLE_EXCEPTION, "Noncontinuable Exception" }, + { STATUS_INVALID_DISPOSITION, "Invalid Disposition" }, + { STATUS_ARRAY_BOUNDS_EXCEEDED, "Array Bounds Exceeded" }, + { STATUS_FLOAT_DENORMAL_OPERAND, "Float Denormal Operand" }, + { STATUS_FLOAT_DIVIDE_BY_ZERO, "Divide by Zero" }, + { STATUS_FLOAT_INEXACT_RESULT, "Float Inexact Result" }, + { STATUS_FLOAT_INVALID_OPERATION, "Float Invalid Operation" }, + { STATUS_FLOAT_OVERFLOW, "Float Overflow" }, + { STATUS_FLOAT_STACK_CHECK, "Float Stack Check" }, + { STATUS_FLOAT_UNDERFLOW, "Float Underflow" }, + { STATUS_INTEGER_DIVIDE_BY_ZERO, "Integer Divide by Zero" }, + { STATUS_INTEGER_OVERFLOW, "Integer Overflow" }, + { STATUS_PRIVILEGED_INSTRUCTION, "Privileged Instruction" }, + { STATUS_STACK_OVERFLOW, "Stack Overflow" }, + { STATUS_CONTROL_C_EXIT, "Ctrl+C Exit" }, + { 0xFFFFFFFF, "" } +}; #endif @@ -164,7 +166,7 @@ void SEHCatcher::DoHandleDebugEvent(LPEXCEPTION_POINTERS lpEP) /////////////////////////// // first name the exception - char *szName = nullptr; + const char *szName = nullptr; for (int i = 0; gMsgTable[i].dwExceptionCode != 0xFFFFFFFF; i++) { if (gMsgTable[i].dwExceptionCode == lpEP->ExceptionRecord->ExceptionCode) @@ -315,8 +317,8 @@ void SEHCatcher::ShowErrorDialog(const std::string &theErrorTitle, const std::st ImGui::SetNextWindowPos(ImGui::GetMainViewport()->GetCenter(), ImGuiCond_Always, ImVec2(0.5f, 0.5f)); ImGui::Begin("An unexpected error has occurred!", nullptr, - ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove | - ImGuiWindowFlags_NoSavedSettings); + ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove | + ImGuiWindowFlags_NoSavedSettings); ImGui::TextWrapped("%s", mCrashMessage.c_str()); ImGui::Spacing(); @@ -397,12 +399,12 @@ std::string SEHCatcher::GetSysInfo() aDebugDump += "9x "; char aVersionStr[20]; - sprintf(aVersionStr, "%d.%d", aVersionInfo.dwMajorVersion, aVersionInfo.dwMinorVersion); + sprintf(aVersionStr, "%lu.%lu", aVersionInfo.dwMajorVersion, aVersionInfo.dwMinorVersion); aDebugDump += aVersionStr; aDebugDump += " "; aDebugDump += aVersionInfo.szCSDVersion; aDebugDump += " "; - sprintf(aVersionStr, "%d", aVersionInfo.dwBuildNumber); + sprintf(aVersionStr, "%lu", aVersionInfo.dwBuildNumber); aDebugDump += "Build "; aDebugDump += aVersionStr; aDebugDump += "\n"; diff --git a/src/SexyAppFramework/SexyAppBase.cpp b/src/SexyAppFramework/SexyAppBase.cpp index ec48c65..c98db36 100644 --- a/src/SexyAppFramework/SexyAppBase.cpp +++ b/src/SexyAppFramework/SexyAppBase.cpp @@ -1,3 +1,9 @@ +// Include windows ourselves to prevent bass.h and curl.h from including windows and leak macros +// IWYU pragma: begin_exports <- this suppresses clangd warning +#include "Platform.h" +// IWYU pragma: end_exports +// this comment exists to prevent formatter from reordering this include + //#define SEXY_TRACING_ENABLED //#define SEXY_PERF_ENABLED //#define SEXY_MEMTRACE @@ -106,7 +112,8 @@ unsigned char gFingerCursorData[] = { 0xfc, 0x00, 0x00, 0xdf, 0xfc, 0x00, 0x00, 0x5f, 0xfc, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x1f, 0xf8, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; //HotSpot: 15 10 //Size: 32 32 @@ -124,7 +131,8 @@ unsigned char gDraggingCursorData[] = { 0xfe, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x3f, 0xfe, 0x00, 0x00, 0x3f, 0xfc, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; static GPUImage *gFPSImage = NULL; static SysFont *gDebugFont = nullptr; @@ -296,7 +304,7 @@ SexyAppBase::SexyAppBase() SetString("UP_TO_DATE_BODY", "There are no updates available for this product at this time."); SetString("NEW_VERSION_TITLE", "New Version"); SetString("NEW_VERSION_BODY", - "There is an update available for this product. Would you like to visit the web site to download it?"); + "There is an update available for this product. Would you like to visit the web site to download it?"); mDemoPrefix = "sexyapp"; mDemoFileName = mDemoPrefix + ".dmo"; @@ -353,18 +361,20 @@ SexyAppBase::~SexyAppBase() { showedMsgBox = true; - SDL_MessageBoxButtonData buttons[] = {{SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 0, "Yes"}, - {SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, 1, "No"}}; + SDL_MessageBoxButtonData buttons[] = { + { SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 0, "Yes" }, + { SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, 1, "No" } + }; SDL_MessageBoxData msgBoxData; msgBoxData.flags = SDL_MESSAGEBOX_WARNING; msgBoxData.title = GetString("HARDWARE_ACCEL_SWITCHED_ON", - "Hardware Acceleration was switched on during this session.\nIf this " - "resulted in slower performance,it should be switched off.\nWould " - "you like to keep Hardware Acceleration switched on?") - .c_str(); + "Hardware Acceleration was switched on during this session.\nIf this " + "resulted in slower performance,it should be switched off.\nWould " + "you like to keep Hardware Acceleration switched on?") + .c_str(); std::string aMessage = - (mCompanyName + " " + - GetString("HARDWARE_ACCEL_CONFIRMATION", "Hardware Acceleration Confirmation")); + (mCompanyName + " " + + GetString("HARDWARE_ACCEL_CONFIRMATION", "Hardware Acceleration Confirmation")); msgBoxData.message = aMessage.c_str(); msgBoxData.buttons = buttons; msgBoxData.numbuttons = 2; @@ -387,18 +397,20 @@ SexyAppBase::~SexyAppBase() if (!showedMsgBox && Renderer::gRenderingPreDrawError && !IsScreenSaver()) { - SDL_MessageBoxButtonData buttons[] = {{SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 0, "Yes"}, - {SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, 1, "No"}}; + SDL_MessageBoxButtonData buttons[] = { + { SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 0, "Yes" }, + { SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, 1, "No" } + }; SDL_MessageBoxData msgBoxData; msgBoxData.flags = SDL_MESSAGEBOX_WARNING; std::string anAntiDangle1 = - GetString("HARDWARE_ACCEL_NOT_WORKING", - "Hardware Acceleration may not have been working correctly during this session.\n" - "If you noticed graphics problems, you may want to turn off Hardware Acceleration.\n" - "Would you like to keep Hardware Acceleration switched on?"); + GetString("HARDWARE_ACCEL_NOT_WORKING", + "Hardware Acceleration may not have been working correctly during this session.\n" + "If you noticed graphics problems, you may want to turn off Hardware Acceleration.\n" + "Would you like to keep Hardware Acceleration switched on?"); msgBoxData.title = anAntiDangle1.c_str(); std::string anAntiDangle2 = - mCompanyName + " " + GetString("HARDWARE_ACCEL_CONFIRMATION", "Hardware Acceleration Confirmation"); + mCompanyName + " " + GetString("HARDWARE_ACCEL_CONFIRMATION", "Hardware Acceleration Confirmation"); msgBoxData.message = anAntiDangle2.c_str(); msgBoxData.buttons = buttons; @@ -681,7 +693,7 @@ void SexyAppBase::WriteDemoBuffer() Buffer aMarkerBuffer; aMarkerBuffer.WriteLong(mDemoMarkerList.size()); for (DemoMarkerList::iterator aMarkerItr = mDemoMarkerList.begin(); aMarkerItr != mDemoMarkerList.end(); - ++aMarkerItr) + ++aMarkerItr) { aMarkerBuffer.WriteString(aMarkerItr->first); aMarkerBuffer.WriteLong(aMarkerItr->second); @@ -912,15 +924,15 @@ void SexyAppBase::DemoAssertIntEqual(int theInt) } Dialog *SexyAppBase::NewDialog(int theDialogId, bool isModal, const SexyString &theDialogHeader, - const SexyString &theDialogLines, const SexyString &theDialogFooter, int theButtonMode) + const SexyString &theDialogLines, const SexyString &theDialogFooter, int theButtonMode) { Dialog *aDialog = - new Dialog(NULL, NULL, theDialogId, isModal, theDialogHeader, theDialogLines, theDialogFooter, theButtonMode); + new Dialog(NULL, NULL, theDialogId, isModal, theDialogHeader, theDialogLines, theDialogFooter, theButtonMode); return aDialog; } Dialog *SexyAppBase::DoDialog(int theDialogId, bool isModal, const SexyString &theDialogHeader, - const SexyString &theDialogLines, const SexyString &theDialogFooter, int theButtonMode) + const SexyString &theDialogLines, const SexyString &theDialogFooter, int theButtonMode) { KillDialog(theDialogId); @@ -1094,7 +1106,7 @@ std::string SexyAppBase::GetProductVersionDLL(const std::string &thePath) // Dynamically Load Version.dll typedef DWORD(APIENTRY * GetFileVersionInfoSizeFunc)(LPSTR lptstrFilename, LPDWORD lpdwHandle); typedef BOOL(APIENTRY * GetFileVersionInfoFunc)(LPSTR lptstrFilename, DWORD dwHandle, DWORD dwLen, LPVOID lpData); - typedef BOOL(APIENTRY * VerQueryValueFunc)(const LPVOID pBlock, LPSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen); + typedef BOOL(APIENTRY * VerQueryValueFunc)(const LPVOID pBlock, LPCSTR lpSubBlock, LPVOID *lplpBuffer, PUINT puLen); static GetFileVersionInfoSizeFunc aGetFileVersionInfoSizeFunc = NULL; static GetFileVersionInfoFunc aGetFileVersionInfoFunc = NULL; @@ -1103,7 +1115,7 @@ std::string SexyAppBase::GetProductVersionDLL(const std::string &thePath) if (aGetFileVersionInfoSizeFunc == NULL) { aGetFileVersionInfoSizeFunc = - (GetFileVersionInfoSizeFunc)GetProcAddress(gVersionDLL, "GetFileVersionInfoSizeA"); + (GetFileVersionInfoSizeFunc)GetProcAddress(gVersionDLL, "GetFileVersionInfoSizeA"); aGetFileVersionInfoFunc = (GetFileVersionInfoFunc)GetProcAddress(gVersionDLL, "GetFileVersionInfoA"); aVerQueryValueFunc = (VerQueryValueFunc)GetProcAddress(gVersionDLL, "VerQueryValueA"); } @@ -1122,12 +1134,12 @@ std::string SexyAppBase::GetProductVersionDLL(const std::string &thePath) aProductVersion = aBuffer; } else if (aVerQueryValueFunc(aVersionBuffer, "\\StringFileInfo\\040904E4\\ProductVersion", (void **)&aBuffer, - &aSize)) + &aSize)) { aProductVersion = aBuffer; - } - delete aVersionBuffer; + delete aVersionBuffer; + } } return aProductVersion; @@ -1207,7 +1219,7 @@ void SexyAppBase::DumpProgramInfo() tm *aTM = localtime(&aTime); aDumpStream << "
" << asctime(aTM) << "
" - << std::endl; + << std::endl; int anImgNum = 0; @@ -1263,7 +1275,7 @@ void SexyAppBase::DumpProgramInfo() aTextureMemory += ((TextureData *)aMemoryImage->mGPUData)->mTexMemSize; aMemorySize = aBitsMemory + aSurfaceMemory + aPalletizedMemory + aNativeAlphaMemory + aRLAlphaMemory + - aRLAdditiveMemory + aTextureMemory; + aRLAdditiveMemory + aTextureMemory; aTotalMemory += aMemorySize; aSortedImageMap.insert(SortedImageMap::value_type(aMemorySize, aMemoryImage)); @@ -1297,7 +1309,7 @@ void SexyAppBase::DumpProgramInfo() aDumpStream << "" << std::endl; aDumpStream << "" << std::endl; + << " HEIGHT=" << aThumbHeight << ">" << std::endl; int aNumPixels = aMemoryImage->mWidth * aMemoryImage->mHeight; @@ -1363,50 +1375,50 @@ void SexyAppBase::DumpProgramInfo() char aStr[256]; sprintf(aStr, "%d x %d
%s bytes", aMemoryImage->mWidth, aMemoryImage->mHeight, - CommaSeperate(aMemorySize).c_str()); + CommaSeperate(aMemorySize).c_str()); aDumpStream << "" << aStr << "" << std::endl; aDumpStream << "" - << SexyStringToString(((aBitsMemory != 0) ? "mBits
" + CommaSeperate(aBitsMemory) : " ")) - << "" << std::endl; + << SexyStringToString(((aBitsMemory != 0) ? "mBits
" + CommaSeperate(aBitsMemory) : " ")) + << "" << std::endl; aDumpStream << "" - << SexyStringToString( - ((aPalletizedMemory != 0) ? "Palletized
" + CommaSeperate(aPalletizedMemory) : " ")) - << "" << std::endl; + << SexyStringToString( + ((aPalletizedMemory != 0) ? "Palletized
" + CommaSeperate(aPalletizedMemory) : " ")) + << "" << std::endl; aDumpStream << "" - << SexyStringToString( - ((aSurfaceMemory != 0) ? "DDSurface
" + CommaSeperate(aSurfaceMemory) : " ")) - << "" << std::endl; + << SexyStringToString( + ((aSurfaceMemory != 0) ? "DDSurface
" + CommaSeperate(aSurfaceMemory) : " ")) + << "" << std::endl; aDumpStream << "" - << SexyStringToString(((aMemoryImage->mGPUData != NULL) - ? "Texture
" + StringToSexyString(aTextureFormatName) + "
" + - CommaSeperate(aTextureMemory) - : " ")) - << "" << std::endl; + << SexyStringToString(((aMemoryImage->mGPUData != NULL) + ? "Texture
" + StringToSexyString(aTextureFormatName) + "
" + + CommaSeperate(aTextureMemory) + : " ")) + << "" << std::endl; aDumpStream << "" << SexyStringToString(((aMemoryImage->mIsVolatile) ? "Volatile" : " ")) << "" - << std::endl; + << std::endl; aDumpStream << "" << SexyStringToString(((aMemoryImage->mForcedMode) ? "Forced" : " ")) << "" - << std::endl; + << std::endl; aDumpStream << "" << SexyStringToString(((aMemoryImage->mHasAlpha) ? "HasAlpha" : " ")) << "" - << std::endl; + << std::endl; aDumpStream << "" << SexyStringToString(((aMemoryImage->mHasTrans) ? "HasTrans" : " ")) << "" - << std::endl; + << std::endl; aDumpStream << "" - << SexyStringToString(((aNativeAlphaMemory != 0) - ? "NativeAlpha
" + CommaSeperate(aNativeAlphaMemory) - : " ")) - << "" << std::endl; + << SexyStringToString(((aNativeAlphaMemory != 0) + ? "NativeAlpha
" + CommaSeperate(aNativeAlphaMemory) + : " ")) + << "" << std::endl; aDumpStream << "" - << SexyStringToString( - ((aRLAlphaMemory != 0) ? "RLAlpha
" + CommaSeperate(aRLAlphaMemory) : " ")) - << "" << std::endl; + << SexyStringToString( + ((aRLAlphaMemory != 0) ? "RLAlpha
" + CommaSeperate(aRLAlphaMemory) : " ")) + << "" << std::endl; aDumpStream << "" - << SexyStringToString( - ((aRLAdditiveMemory != 0) ? "RLAdditive
" + CommaSeperate(aRLAdditiveMemory) : " ")) - << "" << std::endl; + << SexyStringToString( + ((aRLAdditiveMemory != 0) ? "RLAdditive
" + CommaSeperate(aRLAdditiveMemory) : " ")) + << "" << std::endl; aDumpStream << "" << (aMemoryImage->mFilePath.empty() ? " " : aMemoryImage->mFilePath) << "" - << std::endl; + << std::endl; aDumpStream << "" << std::endl; @@ -1428,7 +1440,7 @@ void SexyAppBase::DumpProgramInfo() } ImageLib::WriteImage((GetAppDataFolder() + std::string("_dump\\") + aThumbName).c_str(), &anImageLibImage, - ".jpeg"); + ".jpeg"); // Write high resolution image @@ -1476,7 +1488,7 @@ double SexyAppBase::GetLoadingThreadProgress() } bool SexyAppBase::RegistryWrite(const std::string &theValueName, JSONRegistryType theType, const uint8_t *theValue, - uint32_t theLength) + uint32_t theLength) { if (mPlayingDemoBuffer) { @@ -1665,13 +1677,13 @@ bool SexyAppBase::RegistryGetSubKeys(const std::string &theKeyName, StringVector } bool SexyAppBase::RegistryRead(const std::string &theValueName, JSONRegistryType *theType, uint8_t *theValue, - uint32_t *theLength) + uint32_t *theLength) { return RegistryReadKey(theValueName, theType, theValue, theLength, 0); } bool SexyAppBase::RegistryReadKey(const std::string &theValueName, JSONRegistryType *theType, uint8_t *theValue, - uint32_t *theLength, int theKey) + uint32_t *theLength, int theKey) { std::filesystem::path configPath = GetAppDataFolder() + "/registry.json"; if (!std::filesystem::exists(configPath) || !theType || !theValue || !theLength) @@ -2087,10 +2099,10 @@ std::string SexyAppBase::GetGameSEHInfo() // c++20: replace with std::format std::ostringstream aInfoStream; aInfoStream << "Product: " << mProdName << "\r\n" - << "Version: " << mProductVersion << "\r\n" - << "Time Loaded" << aTimeStr << "\r\n" - << "Fullscreen: " << (mIsWindowed ? "No" : "Yes") << "\r\n" - << "Primary ThreadId:" << mPrimaryThreadId << "\r\n"; + << "Version: " << mProductVersion << "\r\n" + << "Time Loaded" << aTimeStr << "\r\n" + << "Fullscreen: " << (mIsWindowed ? "No" : "Yes") << "\r\n" + << "Primary ThreadId:" << mPrimaryThreadId << "\r\n"; return aInfoStream.str(); } @@ -2590,7 +2602,7 @@ bool SexyAppBase::DrawDirtyStuff() if (mPlayingDemoBuffer) g.DrawImage(gDemoTimeLeftImage, mWidth - gDemoTimeLeftImage->GetWidth() - 10, - mHeight - gFPSImage->GetHeight() - gDemoTimeLeftImage->GetHeight() - 15); + mHeight - gFPSImage->GetHeight() - gDemoTimeLeftImage->GetHeight() - 15); } uint32_t aPreScreenBltTime = timeGetTime(); @@ -2717,13 +2729,13 @@ int SexyAppBase::MsgBox(const std::string &theText, const std::string &theTitle, aConvertedFlags |= SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT; if (theFlags & SexyMessageBoxFlags::MESSAGEBOX_BTN_OK) - aButtonVec.push_back({SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 0, "Ok"}); + aButtonVec.push_back({ SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 0, "Ok" }); if (theFlags & SexyMessageBoxFlags::MESSAGEBOX_BTN_CANCEL) - aButtonVec.push_back({SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, 0, "Cancel"}); + aButtonVec.push_back({ SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, 0, "Cancel" }); if (theFlags & SexyMessageBoxFlags::MESSAGEBOX_BTN_YES) - aButtonVec.push_back({SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 0, "Yes"}); + aButtonVec.push_back({ SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 0, "Yes" }); if (theFlags & SexyMessageBoxFlags::MESSAGEBOX_BTN_NO) - aButtonVec.push_back({SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, 0, "No"}); + aButtonVec.push_back({ SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT, 0, "No" }); SDL_MessageBoxData msgBoxData; msgBoxData.window = nullptr; @@ -2755,7 +2767,7 @@ void SexyAppBase::Popup(const std::string &theString) BeginPopup(); if (!mShutdown) SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, GetString("FATAL_ERROR", "FATAL ERROR").c_str(), - theString.c_str(), aInternalWindow); + theString.c_str(), aInternalWindow); EndPopup(); } @@ -2790,7 +2802,7 @@ static intptr_t CALLBACK MarkerListDialogProc(HWND hwnd, UINT msg, WPARAM wParam GetClientRect(hwnd, &aRect); MoveWindow(aListBox, 10, 10, aRect.right - aRect.left - 20, aRect.bottom - aRect.top - 20, FALSE); for (SexyAppBase::DemoMarkerList::iterator anItr = gSexyAppBase->mDemoMarkerList.begin(); - anItr != gSexyAppBase->mDemoMarkerList.end(); ++anItr) + anItr != gSexyAppBase->mDemoMarkerList.end(); ++anItr) { if (anItr->second <= gSexyAppBase->mUpdateCount) continue; @@ -3388,7 +3400,7 @@ void SexyAppBase::ShowMemoryUsage() aDesc = "Unsupported"; aStr += - StrFormat("Current Rendering Backend: %s\n", gRenderBackends.find(mRenderer->mCurrentBackend)->second.c_str()); + StrFormat("Current Rendering Backend: %s\n", gRenderBackends.find(mRenderer->mCurrentBackend)->second.c_str()); aStr += StrFormat("3D-Mode is %s (3D is %s on this system)\n\n", Is3DAccelerated() ? "On" : "Off", aDesc); aStr += StrFormat("Num Images: %d\n", (int)mMemoryImageSet.size()); @@ -3404,16 +3416,16 @@ void SexyAppBase::ShowMemoryUsage() FormatUsage aUsage = aFormatMap[PixelFormat_A8R8G8B8]; aStr += StrFormat("A8R8G8B8: %d - %s KB\n", aUsage.first, - SexyStringToString(CommaSeperate(aUsage.second / 1024)).c_str()); + SexyStringToString(CommaSeperate(aUsage.second / 1024)).c_str()); aUsage = aFormatMap[PixelFormat_A4R4G4B4]; aStr += StrFormat("A4R4G4B4: %d - %s KB\n", aUsage.first, - SexyStringToString(CommaSeperate(aUsage.second / 1024)).c_str()); + SexyStringToString(CommaSeperate(aUsage.second / 1024)).c_str()); aUsage = aFormatMap[PixelFormat_R5G6B5]; aStr += StrFormat("R5G6B5: %d - %s KB\n", aUsage.first, - SexyStringToString(CommaSeperate(aUsage.second / 1024)).c_str()); + SexyStringToString(CommaSeperate(aUsage.second / 1024)).c_str()); aUsage = aFormatMap[PixelFormat_Palette8]; aStr += StrFormat("Palette8: %d - %s KB\n", aUsage.first, - SexyStringToString(CommaSeperate(aUsage.second / 1024)).c_str()); + SexyStringToString(CommaSeperate(aUsage.second / 1024)).c_str()); MsgBox(aStr, "Video Stats", MESSAGEBOX_BTN_OK); mLastTime = timeGetTime(); @@ -3535,8 +3547,8 @@ bool SexyAppBase::ProcessDeferredMessages(bool singleMessage) #if SEXY_USE_IMGUI #if SEXY_USE_SDL3_RENDERER if (mRenderer->mCurrentBackend == RenderingBackend::BACKEND_SDL3 && - (anEvent.type == SDL_EVENT_MOUSE_BUTTON_DOWN || anEvent.type == SDL_EVENT_MOUSE_BUTTON_UP || - anEvent.type == SDL_EVENT_MOUSE_MOTION)) + (anEvent.type == SDL_EVENT_MOUSE_BUTTON_DOWN || anEvent.type == SDL_EVENT_MOUSE_BUTTON_UP || + anEvent.type == SDL_EVENT_MOUSE_MOTION)) { SDL_Event aConvertedEvent = SDL_Event(anEvent); int x = aConvertedEvent.motion.x; @@ -3724,7 +3736,7 @@ bool SexyAppBase::ProcessDeferredMessages(bool singleMessage) // as relative==true for mouse warp injections), revert to mouse mode. // SDL3 sets event.motion.which == SDL_TOUCH_MOUSEID for touch/synthetic events. if (anEvent.motion.which != SDL_TOUCH_MOUSEID && - (std::abs(anEvent.motion.xrel) > 2 || std::abs(anEvent.motion.yrel) > 2)) + (std::abs(anEvent.motion.xrel) > 2 || std::abs(anEvent.motion.yrel) > 2)) { mUsingGamepad = false; EnforceCursor(); @@ -3737,9 +3749,9 @@ bool SexyAppBase::ProcessDeferredMessages(bool singleMessage) #endif if (!(x >= mRenderer->mPresentationRect.mX && - x < mRenderer->mPresentationRect.mX + mRenderer->mPresentationRect.mWidth && - y >= mRenderer->mPresentationRect.mY && - y < mRenderer->mPresentationRect.mY + mRenderer->mPresentationRect.mHeight && x > 0 && y > 0)) + x < mRenderer->mPresentationRect.mX + mRenderer->mPresentationRect.mWidth && + y >= mRenderer->mPresentationRect.mY && + y < mRenderer->mPresentationRect.mY + mRenderer->mPresentationRect.mHeight && x > 0 && y > 0)) { break; } @@ -3786,9 +3798,9 @@ bool SexyAppBase::ProcessDeferredMessages(bool singleMessage) int x = anEvent.button.x; int y = anEvent.button.y; if (!(x >= mRenderer->mPresentationRect.mX && - x < mRenderer->mPresentationRect.mX + mRenderer->mPresentationRect.mWidth && - y >= mRenderer->mPresentationRect.mY && - y < mRenderer->mPresentationRect.mY + mRenderer->mPresentationRect.mHeight && x > 0 && y > 0)) + x < mRenderer->mPresentationRect.mX + mRenderer->mPresentationRect.mWidth && + y >= mRenderer->mPresentationRect.mY && + y < mRenderer->mPresentationRect.mY + mRenderer->mPresentationRect.mHeight && x > 0 && y > 0)) { break; } @@ -4125,7 +4137,7 @@ void SexyAppBase::MakeWindow() #if SEXY_USE_OPENGL anError += - StrFormat("OpenGL: %s\n", OpenGLRenderer::TestOpenGL(mWindow->mInternalWindow) ? "OK" : "FAILED"); + StrFormat("OpenGL: %s\n", OpenGLRenderer::TestOpenGL(mWindow->mInternalWindow) ? "OK" : "FAILED"); #endif #if SEXY_USE_SDL3_RENDERER @@ -4192,7 +4204,7 @@ void SexyAppBase::DeleteNativeImageData() void SexyAppBase::DeleteExtraImageData() { - auto aLock = std::scoped_lock(mRenderer->mCritSect); + auto aLock = std::scoped_lock(mRenderer->mCritSect); MemoryImageSet::iterator anItr = mMemoryImageSet.begin(); while (anItr != mMemoryImageSet.end()) { @@ -4380,7 +4392,7 @@ void SexyAppBase::EnforceCursor() else { if (mCursorNum >= NUM_CURSORS || (mCursorImages[mCursorNum] == nullptr) || - ((!mPlayingDemoBuffer) && (!mCustomCursorsEnabled))) + ((!mPlayingDemoBuffer) && (!mCustomCursorsEnabled))) { SDL_SetCursor(mSystemCursors[aNativeCursor]); SDL_ShowCursor(); @@ -4390,9 +4402,9 @@ void SexyAppBase::EnforceCursor() if (!mCachedCursors[mCursorNum]) { SDL_Surface *aSurface = - SDL_CreateSurfaceFrom(mCursorImages[mCursorNum]->mWidth, mCursorImages[mCursorNum]->mHeight, - SDL_PIXELFORMAT_ARGB8888, ((GPUImage *)mCursorImages[mCursorNum])->GetBits(), - mCursorImages[mCursorNum]->mWidth * sizeof(uint32_t)); + SDL_CreateSurfaceFrom(mCursorImages[mCursorNum]->mWidth, mCursorImages[mCursorNum]->mHeight, + SDL_PIXELFORMAT_ARGB8888, ((GPUImage *)mCursorImages[mCursorNum])->GetBits(), + mCursorImages[mCursorNum]->mWidth * sizeof(uint32_t)); SDL_Cursor *aCursor = SDL_CreateColorCursor(aSurface, 0, 0); mCachedCursors[mCursorNum] = aCursor; @@ -4963,7 +4975,7 @@ bool SexyAppBase::LoadProperties(const std::string &theFileName, bool required, else { Popup(GetString("UNABLE_OPEN_PROPERTIES", "Unable to open properties file ") + - StringToSexyString(theFileName)); + StringToSexyString(theFileName)); return false; } } @@ -4972,7 +4984,7 @@ bool SexyAppBase::LoadProperties(const std::string &theFileName, bool required, if (!CheckSignature(aBuffer, theFileName)) { Popup(GetString("PROPERTIES_SIG_FAILED", "Signature check failed on ") + - StringToSexyString(theFileName + "'")); + StringToSexyString(theFileName + "'")); return false; } } @@ -5288,7 +5300,7 @@ void SexyAppBase::HandleCmdLineParam(const std::string &theParamName, const std: else { Popup(GetString("INVALID_COMMANDLINE_PARAM", "Invalid command line parameter: ") + - StringToSexyString(theParamName)); + StringToSexyString(theParamName)); DoExit(0); } } @@ -5543,7 +5555,7 @@ Sexy::GPUImage *SexyAppBase::GetImage(const std::string &theFileName, bool commi } Sexy::GPUImage *SexyAppBase::CreateCrossfadeImage(Sexy::Image *theImage1, const Rect &theRect1, Sexy::Image *theImage2, - const Rect &theRect2, double theFadeFactor) + const Rect &theRect2, double theFadeFactor) { MemoryImage *aMemoryImage1 = dynamic_cast(theImage1); MemoryImage *aMemoryImage2 = dynamic_cast(theImage2); @@ -5552,14 +5564,14 @@ Sexy::GPUImage *SexyAppBase::CreateCrossfadeImage(Sexy::Image *theImage1, const return NULL; if ((theRect1.mX < 0) || (theRect1.mY < 0) || (theRect1.mX + theRect1.mWidth > theImage1->GetWidth()) || - (theRect1.mY + theRect1.mHeight > theImage1->GetHeight())) + (theRect1.mY + theRect1.mHeight > theImage1->GetHeight())) { DBG_ASSERTE("Crossfade Rect1 out of bounds"); return NULL; } if ((theRect2.mX < 0) || (theRect2.mY < 0) || (theRect2.mX + theRect2.mWidth > theImage2->GetWidth()) || - (theRect2.mY + theRect2.mHeight > theImage2->GetHeight())) + (theRect2.mY + theRect2.mHeight > theImage2->GetHeight())) { DBG_ASSERTE("Crossfade Rect2 out of bounds"); return NULL; @@ -5595,9 +5607,9 @@ Sexy::GPUImage *SexyAppBase::CreateCrossfadeImage(Sexy::Image *theImage1, const //p2 = 0xFFFFFFFF; *d++ = ((((p1 & 0x000000FF) * aOMM + (p2 & 0x000000FF) * aMult) >> 8) & 0x000000FF) | - ((((p1 & 0x0000FF00) * aOMM + (p2 & 0x0000FF00) * aMult) >> 8) & 0x0000FF00) | - ((((p1 & 0x00FF0000) * aOMM + (p2 & 0x00FF0000) * aMult) >> 8) & 0x00FF0000) | - ((((p1 >> 24) * aOMM + (p2 >> 24) * aMult) << 16) & 0xFF000000); + ((((p1 & 0x0000FF00) * aOMM + (p2 & 0x0000FF00) * aMult) >> 8) & 0x0000FF00) | + ((((p1 & 0x00FF0000) * aOMM + (p2 & 0x00FF0000) * aMult) >> 8) & 0x00FF0000) | + ((((p1 >> 24) * aOMM + (p2 >> 24) * aMult) << 16) & 0xFF000000); } } @@ -5634,9 +5646,9 @@ void SexyAppBase::ColorizeImage(Image *theImage, const Color &theColor) uint32_t aColor = aBits[i]; aBits[i] = ((((aColor & 0xFF000000) >> 8) * theColor.mAlpha) & 0xFF000000) | - ((((aColor & 0x00FF0000) * theColor.mRed) >> 8) & 0x00FF0000) | - ((((aColor & 0x0000FF00) * theColor.mGreen) >> 8) & 0x0000FF00) | - ((((aColor & 0x000000FF) * theColor.mBlue) >> 8) & 0x000000FF); + ((((aColor & 0x00FF0000) * theColor.mRed) >> 8) & 0x00FF0000) | + ((((aColor & 0x0000FF00) * theColor.mGreen) >> 8) & 0x0000FF00) | + ((((aColor & 0x000000FF) * theColor.mBlue) >> 8) & 0x000000FF); } } else @@ -5704,9 +5716,9 @@ GPUImage *SexyAppBase::CreateColorizedImage(Image *theImage, const Color &theCol uint32_t aColor = aSrcBits[i]; aDestBits[i] = ((((aColor & 0xFF000000) >> 8) * theColor.mAlpha) & 0xFF000000) | - ((((aColor & 0x00FF0000) * theColor.mRed) >> 8) & 0x00FF0000) | - ((((aColor & 0x0000FF00) * theColor.mGreen) >> 8) & 0x0000FF00) | - ((((aColor & 0x000000FF) * theColor.mBlue) >> 8) & 0x000000FF); + ((((aColor & 0x00FF0000) * theColor.mRed) >> 8) & 0x00FF0000) | + ((((aColor & 0x0000FF00) * theColor.mGreen) >> 8) & 0x0000FF00) | + ((((aColor & 0x000000FF) * theColor.mBlue) >> 8) & 0x000000FF); } } else @@ -6008,7 +6020,7 @@ void SexyAppBase::RGBToHSL(const uint32_t *theSource, uint32_t *theDest, int the { uint32_t src = theSource[i]; theDest[i] = - (src & 0xFF000000) | (RGBToHSL(((src >> 16) & 0xFF), (src >> 8) & 0xFF, (src & 0xFF)) & 0x00FFFFFF); + (src & 0xFF000000) | (RGBToHSL(((src >> 16) & 0xFF), (src >> 8) & 0xFF, (src & 0xFF)) & 0x00FFFFFF); } } @@ -6119,13 +6131,13 @@ void SexyAppBase::SetMasterVolume(double theMasterVolume) void SexyAppBase::AddMemoryImage(MemoryImage *theMemoryImage) { - auto aLock = std::scoped_lock(mRenderer->mCritSect); + auto aLock = std::scoped_lock(mRenderer->mCritSect); mMemoryImageSet.insert(theMemoryImage); } void SexyAppBase::RemoveMemoryImage(MemoryImage *theMemoryImage) { - auto aLock = std::scoped_lock(mRenderer->mCritSect); + auto aLock = std::scoped_lock(mRenderer->mCritSect); MemoryImageSet::iterator anItr = mMemoryImageSet.find(theMemoryImage); if (anItr != mMemoryImageSet.end()) mMemoryImageSet.erase(anItr); @@ -6209,9 +6221,9 @@ SharedImageRef SexyAppBase::GetSharedImage(const std::string &theFileName, const SharedImageRef aSharedImageRef; { - auto aLock = std::scoped_lock(mRenderer->mCritSect); + auto aLock = std::scoped_lock(mRenderer->mCritSect); aResultPair = mSharedImageMap.insert( - SharedImageMap::value_type(SharedImageMap::key_type(anUpperFileName, anUpperVariant), SharedImage())); + SharedImageMap::value_type(SharedImageMap::key_type(anUpperFileName, anUpperVariant), SharedImage())); aSharedImageRef = &aResultPair.first->second; } @@ -6232,7 +6244,7 @@ SharedImageRef SexyAppBase::GetSharedImage(const std::string &theFileName, const void SexyAppBase::CleanSharedImages() { - auto aLock = std::scoped_lock(mRenderer->mCritSect); + auto aLock = std::scoped_lock(mRenderer->mCritSect); if (mCleanupSharedImages) { From afa5dbf7ddc7c01b94e199b5316be9e70b78bfd9 Mon Sep 17 00:00:00 2001 From: Michael Zhao <44533763+Pistonight@users.noreply.github.com> Date: Sun, 21 Jun 2026 20:58:18 -0700 Subject: [PATCH 14/30] fix: potential UAF in SysFont --- src/SexyAppFramework/SysFont.cpp | 128 ++++++++++++++----------------- src/SexyAppFramework/SysFont.h | 70 ++++++++--------- 2 files changed, 93 insertions(+), 105 deletions(-) diff --git a/src/SexyAppFramework/SysFont.cpp b/src/SexyAppFramework/SysFont.cpp index 79794e2..99be1b2 100644 --- a/src/SexyAppFramework/SysFont.cpp +++ b/src/SexyAppFramework/SysFont.cpp @@ -18,7 +18,6 @@ #include "SDL3Renderer/SDL3Renderer.h" #endif - using namespace Sexy; static std::string ResolveFontFile(const std::string &theFace) @@ -56,7 +55,7 @@ static std::string ResolveFontFile(const std::string &theFace) continue; std::string aStemLower = aStem; std::transform(aStemLower.begin(), aStemLower.end(), aStemLower.begin(), - [](unsigned char c) { return std::tolower(c); }); + [](unsigned char c) { return std::tolower(c); }); if (aStemLower == aLower) return anEntry.path().string(); } @@ -72,29 +71,28 @@ static std::string ResolveFontFile(const std::string &theFace) return ""; } - SysFont::SysFont(const std::string &theFace, int thePointSize, bool bold, bool italics, bool underline) { Init(gSexyAppBase, theFace, thePointSize, bold, italics, underline, false); } SysFont::SysFont(SexyAppBase *theApp, - const std::string &theFace, - int thePointSize, - bool bold, - bool italics, - bool underline) + const std::string &theFace, + int thePointSize, + bool bold, + bool italics, + bool underline) { Init(theApp, theFace, thePointSize, bold, italics, underline, true); } void SysFont::Init(SexyAppBase *theApp, - const std::string &theFace, - int thePointSize, - bool bold, - bool italics, - bool underline, - bool useDevCaps) + const std::string &theFace, + int thePointSize, + bool bold, + bool italics, + bool underline, + bool useDevCaps) { mApp = theApp; mApp->mRenderer->mSysFonts.insert(this); @@ -127,11 +125,11 @@ void SysFont::Init(SexyAppBase *theApp, FT_Select_Charmap(aFontFace, FT_ENCODING_UNICODE); if (mItalic) { - FT_Matrix matrix = {1 << 16, (FT_Fixed)(0.3 * (1 << 16)), 0, 1 << 16}; + FT_Matrix matrix = { 1 << 16, (FT_Fixed)(0.3 * (1 << 16)), 0, 1 << 16 }; FT_Set_Transform(aFontFace, &matrix, nullptr); } - mFontData = new TrueTypeData(this, aFontFace, thePointSize); + mFontData = std::make_shared(mApp, aFontFace, thePointSize, mBold); if (aFontFace->size) { @@ -170,9 +168,7 @@ void SysFont::Reinit() aFontFace->style_flags = aPrevFlags; int aOldSize = mFontData->mSize; - delete mFontData; - mFontData = nullptr; - mFontData = new TrueTypeData(this, aFontFace, aOldSize); + mFontData = std::make_shared(mApp, aFontFace, aOldSize, mBold); if (aFontFace->size) { @@ -187,7 +183,6 @@ SysFont::SysFont(const SysFont &theSysFont) mHeight = theSysFont.mHeight; mAscent = theSysFont.mAscent; mFontData = theSysFont.mFontData; - mFontData->mFont = this; mBold = theSysFont.mBold; mItalic = theSysFont.mItalic; @@ -196,20 +191,18 @@ SysFont::SysFont(const SysFont &theSysFont) SysFont::~SysFont() { - if (mFontData) - delete mFontData; mApp->mRenderer->mSysFonts.erase(this); } ImageFont *SysFont::CreateImageFont() -{ +{ //todo: uuhhh implement? return nullptr; } int SysFont::StringWidth(const SexyString &theString) -{ - int aWidth = 0; +{ + int aWidth = 0; auto it = theString.begin(); auto end = theString.end(); while (it != end) @@ -222,14 +215,14 @@ int SysFont::StringWidth(const SexyString &theString) } void SysFont::DrawString( - Graphics *g, int theX, int theY, const SexyString &theString, const Color &theColor, const Rect &theClipRect) -{ + Graphics *g, int theX, int theY, const SexyString &theString, const Color &theColor, const Rect &theClipRect) +{ if (mFontData == nullptr) return; int posX = theX; int posY = theY; int underlineY = posY - ((mFontData->mFace->underline_position * mFontData->mFace->size->metrics.y_scale) >> 16 >> 6); - + auto it = theString.begin(); auto end = theString.end(); while (it != end) @@ -245,26 +238,25 @@ void SysFont::DrawString( { Color aShadowColor = Color(0, 0, 0, 0); g->mDestImage->BltRawTexture( - mFontData->mAtlas.mAtlas, - aGlyph.mWidth, - aGlyph.mHeight, - Rect(aDrawX + g->mTransX + 1, aDrawY - mAscent + 1 + g->mTransY, aGlyph.mWidth, aGlyph.mHeight), - Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), - theClipRect, - aShadowColor, - 0); + mFontData->mAtlas.mAtlas, + aGlyph.mWidth, + aGlyph.mHeight, + Rect(aDrawX + g->mTransX + 1, aDrawY - mAscent + 1 + g->mTransY, aGlyph.mWidth, aGlyph.mHeight), + Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), + theClipRect, + aShadowColor, + 0); } g->mDestImage->BltRawTexture( - mFontData->mAtlas.mAtlas, - mFontData->mAtlas.mWidth, - mFontData->mAtlas.mHeight, - Rect(aDrawX, aDrawY, aGlyph.mWidth, aGlyph.mHeight), - Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), - theClipRect, - theColor, - 0); - + mFontData->mAtlas.mAtlas, + mFontData->mAtlas.mWidth, + mFontData->mAtlas.mHeight, + Rect(aDrawX, aDrawY, aGlyph.mWidth, aGlyph.mHeight), + Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), + theClipRect, + theColor, + 0); } else { @@ -272,26 +264,25 @@ void SysFont::DrawString( { Color aShadowColor = Color(0, 0, 0, 0); mApp->mRenderer->BltRawTexture( - mFontData->mAtlas.mAtlas, - mFontData->mAtlas.mWidth, - mFontData->mAtlas.mHeight, - Rect(aDrawX + g->mTransX + 1, aDrawY - mAscent + 1 + g->mTransY, aGlyph.mWidth, aGlyph.mHeight), - Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), - theClipRect, - aShadowColor, - 0); - + mFontData->mAtlas.mAtlas, + mFontData->mAtlas.mWidth, + mFontData->mAtlas.mHeight, + Rect(aDrawX + g->mTransX + 1, aDrawY - mAscent + 1 + g->mTransY, aGlyph.mWidth, aGlyph.mHeight), + Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), + theClipRect, + aShadowColor, + 0); } mApp->mRenderer->BltRawTexture( - mFontData->mAtlas.mAtlas, - mFontData->mAtlas.mWidth, - mFontData->mAtlas.mHeight, - Rect(aDrawX + g->mTransX + 1, aDrawY - mAscent + 1 + g->mTransY, aGlyph.mWidth, aGlyph.mHeight), - Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), - theClipRect, - theColor, - 0); + mFontData->mAtlas.mAtlas, + mFontData->mAtlas.mWidth, + mFontData->mAtlas.mHeight, + Rect(aDrawX + g->mTransX + 1, aDrawY - mAscent + 1 + g->mTransY, aGlyph.mWidth, aGlyph.mHeight), + Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), + theClipRect, + theColor, + 0); } posX += aGlyph.mAdvance; @@ -305,8 +296,7 @@ void SysFont::DrawString( { if (mUnderlined) mApp->mRenderer->DrawLine( - theX + g->mTransX + 1, underlineY, StringWidth(theString), underlineY, theColor, 0); - + theX + g->mTransX + 1, underlineY, StringWidth(theString), underlineY, theColor, 0); } } @@ -324,7 +314,7 @@ void TrueTypeData::Init() FT_Set_Pixel_Sizes(mFace, 0, mSize); if (mAtlas.mAtlas != nullptr) { - mFont->mApp->mRenderer->DeleteTexture(mAtlas.mAtlas); + mApp->mRenderer->DeleteTexture(mAtlas.mAtlas); } mAtlas.mGlyphs.clear(); @@ -342,8 +332,8 @@ void TrueTypeData::Init() { GlpyhAtlasEntry aGlyph; FT_Load_Char(mFace, aSetupChar, FT_LOAD_RENDER); - - if (mFont->mBold) + + if (mBold) { FT_GlyphSlot_Embolden(mFace->glyph); } @@ -388,7 +378,7 @@ void TrueTypeData::Init() mAtlas.mGlyphs[aSetupChar] = aGlyph; } - mAtlas.mAtlas = mFont->mApp->mRenderer->CreateTexture(anAtlasPixels, mAtlas.mWidth, mAtlas.mHeight, RawPixelFormat::RAW_FORMAT_RGBA, 1); + mAtlas.mAtlas = mApp->mRenderer->CreateTexture(anAtlasPixels, mAtlas.mWidth, mAtlas.mHeight, RawPixelFormat::RAW_FORMAT_RGBA, 1); delete[] anAtlasPixels; } @@ -397,7 +387,7 @@ TrueTypeData::~TrueTypeData() { if (mAtlas.mAtlas != nullptr) { - mFont->mApp->mRenderer->DeleteTexture(mAtlas.mAtlas); + mApp->mRenderer->DeleteTexture(mAtlas.mAtlas); } mAtlas.mGlyphs.clear(); FT_Done_Face(mFace); diff --git a/src/SexyAppFramework/SysFont.h b/src/SexyAppFramework/SysFont.h index d4d50f0..9b1eeb0 100644 --- a/src/SexyAppFramework/SysFont.h +++ b/src/SexyAppFramework/SysFont.h @@ -4,6 +4,7 @@ #include "Font.h" #include #include +#include namespace Sexy { @@ -30,13 +31,30 @@ struct GlyphAtlas std::unordered_map mGlyphs; }; +class TrueTypeData +{ + public: + GlyphAtlas mAtlas; + SexyAppBase *mApp; + FT_Face mFace; + int mSize; + bool mBold; + bool mIsDirty; -class TrueTypeData; + TrueTypeData(SexyAppBase *theApp, FT_Face theFace, int theSize, bool theBold) : mApp(theApp), mFace(theFace), mSize(theSize), mBold(theBold) + { + Init(); + } + + ~TrueTypeData(); + + void Init(); +}; class SysFont : public Font { public: - TrueTypeData* mFontData; + std::shared_ptr mFontData; SexyAppBase *mApp; std::string mFontName; bool mDrawShadow; @@ -44,26 +62,25 @@ class SysFont : public Font bool mItalic; bool mUnderlined; - void Init(SexyAppBase *theApp, - const std::string &theFace, - int thePointSize, - bool bold, - bool italics, - bool underline, - bool useDevCaps); + const std::string &theFace, + int thePointSize, + bool bold, + bool italics, + bool underline, + bool useDevCaps); void Reinit(); public: SysFont( - const std::string &theFace, int thePointSize, bool bold = false, bool italics = false, bool underline = false); + const std::string &theFace, int thePointSize, bool bold = false, bool italics = false, bool underline = false); SysFont(SexyAppBase *theApp, - const std::string &theFace, - int thePointSize, - bool bold = false, - bool italics = false, - bool underline = false); + const std::string &theFace, + int thePointSize, + bool bold = false, + bool italics = false, + bool underline = false); SysFont(const SysFont &theSysFont); virtual ~SysFont(); @@ -71,30 +88,11 @@ class SysFont : public Font ImageFont *CreateImageFont(); virtual int StringWidth(const SexyString &theString); virtual void DrawString( - Graphics *g, int theX, int theY, const SexyString &theString, const Color &theColor, const Rect &theClipRect); + Graphics *g, int theX, int theY, const SexyString &theString, const Color &theColor, const Rect &theClipRect); virtual Font *Duplicate(); - -}; - -struct TrueTypeData -{ - GlyphAtlas mAtlas; - SysFont *mFont; - FT_Face mFace; - int mSize; - bool mIsDirty; - - TrueTypeData(SysFont *theFontPtr, FT_Face &theFace, int theSize) : mFont(theFontPtr), mFace(theFace), mSize(theSize) - { - Init(); - } - - ~TrueTypeData(); - - void Init(); }; } // namespace Sexy -#endif //__SYSFONT_H__ \ No newline at end of file +#endif //__SYSFONT_H__ From 2876e162b18e409a8814e1b1e754d304ee26f9a4 Mon Sep 17 00:00:00 2001 From: Michael Zhao <44533763+Pistonight@users.noreply.github.com> Date: Wed, 24 Jun 2026 10:40:50 -0700 Subject: [PATCH 15/30] fix: various SysFont fix and RenderCommandList refactor --- src/Sexy.TodLib/TodCommon.cpp | 146 +++++-------- src/Sexy.TodLib/TodCommon.h | 91 +++++---- src/SexyAppFramework/Encoding.cpp | 176 ++++++++-------- src/SexyAppFramework/Encoding.h | 32 +-- src/SexyAppFramework/ImageFont.cpp | 295 +++++++++++---------------- src/SexyAppFramework/ImageFont.h | 41 ++-- src/SexyAppFramework/Platform.h | 84 ++++---- src/SexyAppFramework/RenderCommand.h | 160 +++++++++++++++ src/SexyAppFramework/SysFont.cpp | 8 +- 9 files changed, 544 insertions(+), 489 deletions(-) create mode 100644 src/SexyAppFramework/RenderCommand.h diff --git a/src/Sexy.TodLib/TodCommon.cpp b/src/Sexy.TodLib/TodCommon.cpp index f1a9d6f..b876d62 100644 --- a/src/Sexy.TodLib/TodCommon.cpp +++ b/src/Sexy.TodLib/TodCommon.cpp @@ -13,6 +13,7 @@ #include "../SexyAppFramework/PerfTimer.h" #include "../SexyAppFramework/SexyMatrix.h" #include "../SexyAppFramework/Renderer.h" +#include "../SexyAppFramework/RenderCommand.h" void Tod_SWTri_AddAllDrawTriFuncs() { @@ -199,7 +200,7 @@ uintptr_t TodPickFromSmoothArray(TodSmoothArray *theArray, int theCount) for (int j = 0; j < theCount; j++) { aTotalAdjustedWeight += TodCalcSmoothWeight(theArray[j].mWeight * aNormalizeFactor, theArray[j].mLastPicked, - theArray[j].mSecondLastPicked); + theArray[j].mSecondLastPicked); } TOD_ASSERT(aTotalAdjustedWeight > 0.0f); @@ -209,7 +210,7 @@ uintptr_t TodPickFromSmoothArray(TodSmoothArray *theArray, int theCount) for (k = 0; k < theCount - 1; k++) { aAccumulatedWeight += TodCalcSmoothWeight(theArray[k].mWeight * aNormalizeFactor, theArray[k].mLastPicked, - theArray[k].mSecondLastPicked); + theArray[k].mSecondLastPicked); if (aRandWeight <= aAccumulatedWeight) { break; @@ -392,8 +393,8 @@ float TodCurveEvaluateClamped(float theTime, float thePositionStart, float thePo if (theTime >= 1.0f) { if (theCurve == TodCurves::CURVE_BOUNCE || theCurve == TodCurves::CURVE_BOUNCE_FAST_MIDDLE || - theCurve == TodCurves::CURVE_BOUNCE_SLOW_MIDDLE || theCurve == TodCurves::CURVE_SIN_WAVE || - theCurve == TodCurves::CURVE_EASE_SIN_WAVE) + theCurve == TodCurves::CURVE_BOUNCE_SLOW_MIDDLE || theCurve == TodCurves::CURVE_SIN_WAVE || + theCurve == TodCurves::CURVE_EASE_SIN_WAVE) { return thePositionStart; } @@ -407,14 +408,14 @@ float TodCurveEvaluateClamped(float theTime, float thePositionStart, float thePo } float TodAnimateCurveFloatTime(float theTimeStart, float theTimeEnd, float theTimeAge, float thePositionStart, - float thePositionEnd, TodCurves theCurve) + float thePositionEnd, TodCurves theCurve) { float aWarpedAge = (theTimeAge - theTimeStart) / (theTimeEnd - theTimeStart); return TodCurveEvaluateClamped(aWarpedAge, thePositionStart, thePositionEnd, theCurve); } float TodAnimateCurveFloat(int theTimeStart, int theTimeEnd, int theTimeAge, float thePositionStart, - float thePositionEnd, TodCurves theCurve) + float thePositionEnd, TodCurves theCurve) { //return TodAnimateCurveFloatTime(theTimeStart, theTimeEnd, theTimeAge, thePositionStart, thePositionEnd, theCurve); @@ -423,10 +424,10 @@ float TodAnimateCurveFloat(int theTimeStart, int theTimeEnd, int theTimeAge, flo } int TodAnimateCurve(int theTimeStart, int theTimeEnd, int theTimeAge, int thePositionStart, int thePositionEnd, - TodCurves theCurve) + TodCurves theCurve) { return FloatRoundToInt( - TodAnimateCurveFloat(theTimeStart, theTimeEnd, theTimeAge, thePositionStart, thePositionEnd, theCurve)); + TodAnimateCurveFloat(theTimeStart, theTimeEnd, theTimeAge, thePositionStart, thePositionEnd, theCurve)); } int RandRangeInt(int theMin, int theMax) @@ -442,18 +443,18 @@ float RandRangeFloat(float theMin, float theMax) } void TodDrawString(Graphics *g, const SexyString &theText, int thePosX, int thePosY, Font *theFont, - const Color &theColor, DrawStringJustification theJustification) + const Color &theColor, DrawStringJustification theJustification) { SexyString aFinalString = TodStringTranslate(theText); int aPosX = thePosX; if (theJustification == DrawStringJustification::DS_ALIGN_RIGHT || - theJustification == DrawStringJustification::DS_ALIGN_RIGHT_VERTICAL_MIDDLE) + theJustification == DrawStringJustification::DS_ALIGN_RIGHT_VERTICAL_MIDDLE) { aPosX -= theFont->StringWidth(aFinalString); } else if (theJustification == DrawStringJustification::DS_ALIGN_CENTER || - theJustification == DrawStringJustification::DS_ALIGN_CENTER_VERTICAL_MIDDLE) + theJustification == DrawStringJustification::DS_ALIGN_CENTER_VERTICAL_MIDDLE) { aPosX -= theFont->StringWidth(aFinalString) / 2; } @@ -462,7 +463,7 @@ void TodDrawString(Graphics *g, const SexyString &theText, int thePosX, int theP } void TodDrawImageCelScaled(Graphics *g, Image *theImageStrip, int thePosX, int thePosY, int theCelCol, int theCelRow, - float theScaleX, float theScaleY) + float theScaleX, float theScaleY) { TOD_ASSERT(theCelCol >= 0 && theCelCol < theImageStrip->mNumCols); TOD_ASSERT(theCelRow >= 0 && theCelRow < theImageStrip->mNumRows); @@ -474,28 +475,22 @@ void TodDrawImageCelScaled(Graphics *g, Image *theImageStrip, int thePosX, int t g->DrawImage(theImageStrip, aDestRect, aSrcRect); } -static const int POOL_SIZE = 4096; -static RenderCommand gRenderCommandPool[POOL_SIZE]; -static RenderCommand *gRenderTail[256]; -static RenderCommand *gRenderHead[256]; - -void TodDrawStringMatrix(Graphics *g, const Font *theFont, const SexyMatrix3 &theMatrix, const SexyString &theString, - const Color &theColor) +static RenderCommandList gDrawStringMatrixRenderCommandList; +void TodDrawStringMatrix(Graphics *g, Font *theFont, + const SexyMatrix3 &theMatrix, const SexyString &theString, + const Color &theColor) { SexyString aFinalString = TodStringTranslate(theString); + gDrawStringMatrixRenderCommandList.Clear(); - memset(gRenderTail, 0, sizeof(gRenderTail)); - memset(gRenderHead, 0, sizeof(gRenderHead)); ImageFont *aFont = (ImageFont *)theFont; if (!aFont->mFontData->mInitialized) return; aFont->Prepare(); int aCurXPos = 0; - int aCurPoolIdx = 0; auto it = theString.begin(); auto end = theString.end(); - while (it != end) { uint32_t aCodepoint = utf8::next(it, end); @@ -565,40 +560,18 @@ void TodDrawStringMatrix(Graphics *g, const Font *theFont, const SexyMatrix3 &th aColor.mAlpha = std::min(aLayer->mColorAdd.mAlpha + theColor.mAlpha * aLayer->mColorMult.mAlpha / 255, 255); int anOrder = aCharData->mOrder + aLayer->mBaseOrder; - if (aCurPoolIdx >= POOL_SIZE) + RenderCommand *aRenderCommand = gDrawStringMatrixRenderCommandList.PushWithOrder(anOrder); + if (!aRenderCommand) + { break; - - RenderCommand *aRenderCommand = &gRenderCommandPool[aCurPoolIdx++]; + } aRenderCommand->mImage = aKernItr->mScaledImage; aRenderCommand->mColor = aColor; - aRenderCommand->mDest[0] = anImageX; - aRenderCommand->mDest[1] = anImageY; - aRenderCommand->mSrc[0] = aKernItr->mScaledCharImageRects[aChar].mX; - aRenderCommand->mSrc[1] = aKernItr->mScaledCharImageRects[aChar].mY; - aRenderCommand->mSrc[2] = aKernItr->mScaledCharImageRects[aChar].mWidth; - aRenderCommand->mSrc[3] = aKernItr->mScaledCharImageRects[aChar].mHeight; - + aRenderCommand->mDestX = anImageX; + aRenderCommand->mDestY = anImageY; + aRenderCommand->mSrc = aKernItr->mScaledCharImageRects[aChar]; aRenderCommand->mMode = aLayer->mDrawMode; - //aRenderCommand->mUseAlphaCorrection = aLayer->mUseAlphaCorrection; - aRenderCommand->mNext = nullptr; - int anOrderIdx = std::min(std::max(anOrder + 128, 0), 255); - if (gRenderTail[anOrderIdx]) - { - gRenderTail[anOrderIdx]->mNext = aRenderCommand; - gRenderTail[anOrderIdx] = aRenderCommand; - } - else - { - gRenderHead[anOrderIdx] = aRenderCommand; - gRenderTail[anOrderIdx] = aRenderCommand; - } - - //aCurXPos += aSpacing + aCharWidth; - //if (aCurXPos > aMaxXPos) - //{ - // aMaxXPos = aCurXPos; - //} if (aMaxXPos < aCurXPos + aSpacing + aCharWidth) { aMaxXPos = aCurXPos + aSpacing + aCharWidth; @@ -608,32 +581,19 @@ void TodDrawStringMatrix(Graphics *g, const Font *theFont, const SexyMatrix3 &th aCurXPos = aMaxXPos; } - for (int aPoolIdx = 0; aPoolIdx < 256; aPoolIdx++) + for (const auto &command : gDrawStringMatrixRenderCommandList) { - RenderCommand *aRenderCommand = gRenderHead[aPoolIdx]; - - while (aRenderCommand) + int aDrawMode = command.mMode == -1 ? g->GetDrawMode() : command.mMode; + if (command.mImage) { - int aDrawMode = g->GetDrawMode(); - if (aRenderCommand->mMode != -1) - { - aDrawMode = aRenderCommand->mMode; - } - - if (aRenderCommand->mImage) - { - Rect aSrcRect(aRenderCommand->mSrc[0], aRenderCommand->mSrc[1], aRenderCommand->mSrc[2], - aRenderCommand->mSrc[3]); - SexyTransform2D aTransform; - float aPosX = aSrcRect.mWidth * 0.5f + aRenderCommand->mDest[0]; - float aPosY = aSrcRect.mHeight * 0.5f + aRenderCommand->mDest[1]; - SexyMatrix3Translation(aTransform, aPosX, aPosY); - SexyMatrix3Multiply(aTransform, theMatrix, aTransform); - TodBltMatrix(g, aRenderCommand->mImage, aTransform, g->mClipRect, aRenderCommand->mColor, aDrawMode, - aSrcRect); - } - - aRenderCommand = aRenderCommand->mNext; + const Rect &aSrcRect = command.mSrc; + SexyTransform2D aTransform; + float aPosX = aSrcRect.mWidth * 0.5f + command.mDestX; + float aPosY = aSrcRect.mHeight * 0.5f + command.mDestY; + SexyMatrix3Translation(aTransform, aPosX, aPosY); + SexyMatrix3Multiply(aTransform, theMatrix, aTransform); + TodBltMatrix(g, command.mImage, aTransform, g->mClipRect, command.mColor, aDrawMode, + aSrcRect); } } } @@ -721,7 +681,7 @@ void TodSandImageIfNeeded(Image *theImage) } void TodBltMatrix(Graphics *g, Image *theImage, const SexyMatrix3 &theTransform, const Rect &theClipRect, - const Color &theColor, int theDrawMode, const Rect &theSrcRect) + const Color &theColor, int theDrawMode, const Rect &theSrcRect) { float aOffsetX = 0.0f; float aOffsetY = 0.0f; @@ -733,30 +693,30 @@ void TodBltMatrix(Graphics *g, Image *theImage, const SexyMatrix3 &theTransform, TodSandImageIfNeeded(theImage); if (theClipRect.mX != 0 || theClipRect.mY != 0 || theClipRect.mWidth != BOARD_WIDTH || - theClipRect.mHeight != BOARD_HEIGHT) + theClipRect.mHeight != BOARD_HEIGHT) { g->mDestImage->BltMatrix(theImage, aOffsetX, aOffsetY, theTransform, theClipRect, theColor, theDrawMode, - theSrcRect, g->mLinearBlend); + theSrcRect, g->mLinearBlend); } else if (GPUImage::Check3D(g->mDestImage)) { theImage->mDrawn = true; Renderer *aInterface = ((GPUImage *)g->mDestImage)->mRenderer; aInterface->BltTransformed(theImage, theClipRect, theColor, theDrawMode, theSrcRect, theTransform, - g->mLinearBlend, aOffsetX, aOffsetY, true); + g->mLinearBlend, aOffsetX, aOffsetY, true); } else { Rect aBufFixClipRect(0, 0, BOARD_WIDTH + 1, BOARD_HEIGHT + 1); g->mDestImage->BltMatrix(theImage, aOffsetX, aOffsetY, theTransform, aBufFixClipRect, theColor, theDrawMode, - theSrcRect, g->mLinearBlend); + theSrcRect, g->mLinearBlend); } gTodTriangleDrawAdditive = false; } void TodDrawImageCelCenterScaledF(Graphics *g, Image *theImageStrip, float thePosX, float thePosY, int theCelCol, - int theCelRow, float theScaleX, float theScaleY) + int theCelRow, float theScaleX, float theScaleY) { TOD_ASSERT(theCelCol >= 0 && theCelCol < theImageStrip->mNumCols); TOD_ASSERT(theCelRow >= 0 && theCelRow < theImageStrip->mNumRows); @@ -789,7 +749,7 @@ void TodDrawImageCelCenterScaledF(Graphics *g, Image *theImageStrip, float thePo } void TodDrawImageCelScaledF(Graphics *g, Image *theImageStrip, float thePosX, float thePosY, int theCelCol, - int theCelRow, float theScaleX, float theScaleY) + int theCelRow, float theScaleX, float theScaleY) { TOD_ASSERT(theCelCol >= 0 && theCelCol < theImageStrip->mNumCols); TOD_ASSERT(theCelRow >= 0 && theCelRow < theImageStrip->mNumRows); @@ -849,7 +809,7 @@ void TodDrawImageScaledF(Graphics *g, Image *theImage, float thePosX, float theP } void TodDrawImageCenterScaledF(Graphics *g, Image *theImage, float thePosX, float thePosY, float theScaleX, - float theScaleY) + float theScaleY) { if (theScaleX == 1.0f && theScaleY == 1.0f) { @@ -893,7 +853,7 @@ uint32_t AverageNearByPixels(MemoryImage *theImage, uint32_t *thePixel, int x, i for (int j = -1; j <= 1; j++) { if ((x != 0 || j != -1) && (x != theImage->mWidth - 1 || j != 1) && (y != 0 || i != -1) && - (y != theImage->mHeight - 1 || i != 1)) + (y != theImage->mHeight - 1 || i != 1)) { unsigned long aPixel = *(thePixel + i * theImage->mWidth + j); if (aPixel & 0xFF000000UL) @@ -951,7 +911,7 @@ void FixPixelsOnAlphaEdgeForBlending(Image *theImage) if (aDuration > 20) { TodTraceAndLog("[TodLib] - LOADING:Long sanding '%s' %d ms on %s", theImage->mFilePath.c_str(), aDuration, - gGetCurrentLevelName().c_str()); + gGetCurrentLevelName().c_str()); } } @@ -980,7 +940,7 @@ void SexyMatrix3Transpose(const SexyMatrix3 &m, SexyMatrix3 &r) void SexyMatrix3Inverse(const SexyMatrix3 &m, SexyMatrix3 &r) { float aDet = (m.m22 * m.m11 - m.m21 * m.m12) * m.m00 - (m.m22 * m.m10 - m.m20 * m.m12) * m.m01 + - (m.m21 * m.m10 - m.m20 * m.m11) * m.m02; + (m.m21 * m.m10 - m.m20 * m.m11) * m.m02; float aInvDet = 1.0f / aDet; SexyMatrix3 temp; @@ -1053,9 +1013,9 @@ int ColorComponentMultiply(int theColor1, int theColor2) Color ColorsMultiply(const Color &theColor1, const Color &theColor2) { return Color(ColorComponentMultiply(theColor1.mRed, theColor2.mRed), - ColorComponentMultiply(theColor1.mGreen, theColor2.mGreen), - ColorComponentMultiply(theColor1.mBlue, theColor2.mBlue), - ColorComponentMultiply(theColor1.mAlpha, theColor2.mAlpha)); + ColorComponentMultiply(theColor1.mGreen, theColor2.mGreen), + ColorComponentMultiply(theColor1.mBlue, theColor2.mBlue), + ColorComponentMultiply(theColor1.mAlpha, theColor2.mAlpha)); } bool TodLoadResources(const std::string &theGroup) @@ -1095,7 +1055,7 @@ bool TodResourceManager::TodLoadResources(const std::string &theGroup) if (aDuration > 20) { TodTraceAndLog("[TodLib] - LOADED: '%s' %d ms on %s", theGroup.c_str(), aDuration, - gGetCurrentLevelName().c_str()); + gGetCurrentLevelName().c_str()); } return true; @@ -1261,7 +1221,7 @@ void FreeGlobalAllocators() } SexyString TodReplaceString(const SexyString &theText, const SexyString &theStringToFind, - const SexyString &theStringToSubstitute) + const SexyString &theStringToSubstitute) { SexyString aFinalString = TodStringTranslate(theText); size_t aPos = aFinalString.find(theStringToFind); @@ -1288,7 +1248,7 @@ SexyString TodReplaceNumberString(const SexyString &theText, const SexyString &t } bool TodIsPointInPolygon(const SexyVector2 *thePolygonPoint, int theNumberPolygonPoints, - const SexyVector2 &theCheckPoint) + const SexyVector2 &theCheckPoint) { TOD_ASSERT(theNumberPolygonPoints >= 3); diff --git a/src/Sexy.TodLib/TodCommon.h b/src/Sexy.TodLib/TodCommon.h index 328c0a5..67599d6 100644 --- a/src/Sexy.TodLib/TodCommon.h +++ b/src/Sexy.TodLib/TodCommon.h @@ -93,64 +93,64 @@ float TodCurveInvCircle(float theTime); float TodCurveEvaluate(float theTime, float thePositionStart, float thePositionEnd, TodCurves theCurve); float TodCurveEvaluateClamped(float theTime, float thePositionStart, float thePositionEnd, TodCurves theCurve); float TodAnimateCurveFloatTime(float theTimeStart, - float theTimeEnd, - float theTimeAge, - float thePositionStart, - float thePositionEnd, - TodCurves theCurve); + float theTimeEnd, + float theTimeAge, + float thePositionStart, + float thePositionEnd, + TodCurves theCurve); float TodAnimateCurveFloat( - int theTimeStart, int theTimeEnd, int theTimeAge, float thePositionStart, float thePositionEnd, TodCurves theCurve); + int theTimeStart, int theTimeEnd, int theTimeAge, float thePositionStart, float thePositionEnd, TodCurves theCurve); int TodAnimateCurve( - int theTimeStart, int theTimeEnd, int theTimeAge, int thePositionStart, int thePositionEnd, TodCurves theCurve); + int theTimeStart, int theTimeEnd, int theTimeAge, int thePositionStart, int thePositionEnd, TodCurves theCurve); void TodScaleTransformMatrix(SexyMatrix3 &m, float x, float y, float theScaleX, float theScaleY); void TodScaleRotateTransformMatrix(SexyMatrix3 &m, float x, float y, float rad, float theScaleX, float theScaleY); void SexyMatrix3ExtractScale(const SexyMatrix3 &m, float &theScaleX, float &theScaleY); void SexyMatrix3Translation(SexyMatrix3 &m, float x, float y); -void SexyMatrix3Transpose(const SexyMatrix3 &m, SexyMatrix3 &r); // r = m ^ T -void SexyMatrix3Inverse(const SexyMatrix3 &m, SexyMatrix3 &r); // r = m ^ -1 +void SexyMatrix3Transpose(const SexyMatrix3 &m, SexyMatrix3 &r); // r = m ^ T +void SexyMatrix3Inverse(const SexyMatrix3 &m, SexyMatrix3 &r); // r = m ^ -1 void SexyMatrix3Multiply(SexyMatrix3 &m, const SexyMatrix3 &l, const SexyMatrix3 &r); // m = l ¡Á r bool TodIsPointInPolygon(const SexyVector2 *thePolygonPoint, - int theNumberPolygonPoints, - const SexyVector2 &theCheckPoint); + int theNumberPolygonPoints, + const SexyVector2 &theCheckPoint); void TodDrawString(Graphics *g, - const SexyString &theText, - int thePosX, - int thePosY, - Font *theFont, - const Color &theColor, - DrawStringJustification theJustification); + const SexyString &theText, + int thePosX, + int thePosY, + Font *theFont, + const Color &theColor, + DrawStringJustification theJustification); void TodDrawStringMatrix( - Graphics *g, const Font *theFont, const SexyMatrix3 &theMatrix, const SexyString &theString, const Color &theColor); + Graphics *g, Font *theFont, const SexyMatrix3 &theMatrix, const SexyString &theString, const Color &theColor); void TodDrawImageScaledF(Graphics *g, Image *theImage, float thePosX, float thePosY, float theScaleX, float theScaleY); void TodDrawImageCenterScaledF( - Graphics *g, Image *theImage, float thePosX, float thePosY, float theScaleX, float theScaleY); + Graphics *g, Image *theImage, float thePosX, float thePosY, float theScaleX, float theScaleY); void TodDrawImageCelF(Graphics *g, Image *theImageStrip, float thePosX, float thePosY, int theCelCol, int theCelRow); void TodDrawImageCelScaled(Graphics *g, - Image *theImageStrip, - int thePosX, - int thePosY, - int theCelCol, - int theCelRow, - float theScaleX, - float theScaleY); + Image *theImageStrip, + int thePosX, + int thePosY, + int theCelCol, + int theCelRow, + float theScaleX, + float theScaleY); void TodDrawImageCelScaledF(Graphics *g, - Image *theImageStrip, - float thePosX, - float thePosY, - int theCelCol, - int theCelRow, - float theScaleX, - float theScaleY); + Image *theImageStrip, + float thePosX, + float thePosY, + int theCelCol, + int theCelRow, + float theScaleX, + float theScaleY); void TodDrawImageCelCenterScaledF(Graphics *g, Image *theImageStrip, float thePosX, float thePosY, int theCelCol, int theCelRow, float theScaleX, float theScaleY); void TodBltMatrix(Graphics *g, - Image *theImage, - const SexyMatrix3 &theTransform, - const Rect &theClipRect, - const Color &theColor, - int theDrawMode, - const Rect &theSrcRect); + Image *theImage, + const SexyMatrix3 &theTransform, + const Rect &theClipRect, + const Color &theColor, + int theDrawMode, + const Rect &theSrcRect); void TodMarkImageForSanding(Image *theImage); void TodSandImageIfNeeded(Image *theImage); void FixPixelsOnAlphaEdgeForBlending(Image *theImage); @@ -158,8 +158,8 @@ uint32_t AverageNearByPixels(MemoryImage *theImage, uint32_t *thePixel, int x, i void Tod_SWTri_AddAllDrawTriFuncs(); SexyString TodReplaceString(const SexyString &theText, - const SexyString &theStringToFind, - const SexyString &theStringToSubstitute); + const SexyString &theStringToFind, + const SexyString &theStringToSubstitute); SexyString TodReplaceNumberString(const SexyString &theText, const SexyString &theStringToFind, int theNumber); int TodSnprintf(char *theBuffer, int theSize, const char *theFormat, ...); int TodVsnprintf(char *theBuffer, int theSize, const char *theFormat, va_list theArgList); @@ -176,15 +176,18 @@ int RandRangeInt(int theMin, int theMax); float RandRangeFloat(float theMin, float theMax); inline char ClampByte(char theNum, char theMin, char theMax) { - return theNum <= theMin ? theMin : theNum >= theMax ? theMax : theNum; + return theNum <= theMin ? theMin : theNum >= theMax ? theMax + : theNum; } inline int ClampInt(int theNum, int theMin, int theMax) { - return theNum <= theMin ? theMin : theNum >= theMax ? theMax : theNum; + return theNum <= theMin ? theMin : theNum >= theMax ? theMax + : theNum; } inline float ClampFloat(float theNum, float theMin, float theMax) { - return theNum <= theMin ? theMin : theNum >= theMax ? theMax : theNum; + return theNum <= theMin ? theMin : theNum >= theMax ? theMax + : theNum; } inline float Distance2D(float x1, float y1, float x2, float y2) { diff --git a/src/SexyAppFramework/Encoding.cpp b/src/SexyAppFramework/Encoding.cpp index 8afa43d..bd1286a 100644 --- a/src/SexyAppFramework/Encoding.cpp +++ b/src/SexyAppFramework/Encoding.cpp @@ -1,88 +1,88 @@ -#include "Encoding.h" -#include "Common.h" - -namespace Sexy -{ -// Convert a UTF-16 byte buffer to UTF-8. Return nullopt if input is not valid UTF-16 -std::optional TryUtf16ToUtf8(const unsigned char *theBytes, std::size_t theByteCount, bool isBigEndian) -{ - int aUnitCount = theByteCount / 2; - std::u16string aWide; - aWide.reserve(aUnitCount); - for (int i = 0; i < aUnitCount; i++) - { - auto aFirst = theBytes[i * 2]; - auto aSecond = theBytes[i * 2 + 1]; - char16_t aUnit = isBigEndian ? (char16_t)((aFirst << 8) | aSecond) : (char16_t)((aSecond << 8) | aFirst); - aWide.push_back(aUnit); - } - - try - { - std::string aResult; - utf8::utf16to8(aWide.begin(), aWide.end(), std::back_inserter(aResult)); - return std::move(aResult); - } - catch (...) - { - return {}; - } -} - -// Decode raw file bytes to UTF-8, auto-detecting the encoding and using ANSI -// as a fallback. Returning nullopt means the input is already valid UTF8 without BOM -std::optional ConvertToUtf8IfNeeded(const std::string &theRaw) -{ - auto aSize = theRaw.size(); - auto aBytes = reinterpret_cast(theRaw.data()); - - // Try UTF-8 first - modern devs should use this - if (aSize >= 3 && aBytes[0] == 0xEF && aBytes[1] == 0xBB && aBytes[2] == 0xBF) - { - // strip BOM if present: EF BB BF - // - used by font descriptors in chinese versions - std::string aUtf8 = theRaw.substr(3); - if (utf8::is_valid(aUtf8)) - { - return aUtf8; - } - return ANSIToUTF8(theRaw); - } - - // UTF-8 without BOM - if (utf8::is_valid(theRaw)) - { - return {}; - } - - // Try UTF-16 - if (aSize >= 2) - { // need at least 2 bytes to make one char16 - // UTF-16 with BOM - if (aBytes[0] == 0xFF && aBytes[1] == 0xFE) - { - // LE - the chinese version of the original game uses this - auto aMaybeUtf16 = TryUtf16ToUtf8(aBytes + 2, aSize - 2, false); - if (aMaybeUtf16) - { - return std::move(*aMaybeUtf16); - } - } - - if (aBytes[0] == 0xFE && aBytes[1] == 0xFF) - { - // BE - auto aMaybeUtf16 = TryUtf16ToUtf8(aBytes + 2, aSize - 2, true); - if (aMaybeUtf16) - { - return std::move(*aMaybeUtf16); - } - } - - // we don't handle UTF-16 without BOM for now - } - - // Fallback - this is what the english version uses - return ANSIToUTF8(theRaw); -} -} // namespace Sexy +#include "Encoding.h" +#include "Common.h" + +namespace Sexy +{ +// Convert a UTF-16 byte buffer to UTF-8. Return nullopt if input is not valid UTF-16 +std::optional TryUtf16ToUtf8(const unsigned char *theBytes, std::size_t theByteCount, bool isBigEndian) +{ + int aUnitCount = theByteCount / 2; + std::u16string aWide; + aWide.reserve(aUnitCount); + for (int i = 0; i < aUnitCount; i++) + { + auto aFirst = theBytes[i * 2]; + auto aSecond = theBytes[i * 2 + 1]; + char16_t aUnit = isBigEndian ? (char16_t)((aFirst << 8) | aSecond) : (char16_t)((aSecond << 8) | aFirst); + aWide.push_back(aUnit); + } + + try + { + std::string aResult; + utf8::utf16to8(aWide.begin(), aWide.end(), std::back_inserter(aResult)); + return std::move(aResult); + } + catch (...) + { + return {}; + } +} + +// Decode raw file bytes to UTF-8, auto-detecting the encoding and using ANSI +// as a fallback. Returning nullopt means the input is already valid UTF8 without BOM +std::optional ConvertToUtf8IfNeeded(const std::string &theRaw) +{ + auto aSize = theRaw.size(); + auto aBytes = reinterpret_cast(theRaw.data()); + + // Try UTF-8 first - modern devs should use this + if (aSize >= 3 && aBytes[0] == 0xEF && aBytes[1] == 0xBB && aBytes[2] == 0xBF) + { + // strip BOM if present: EF BB BF + // - used by font descriptors in chinese versions + std::string aUtf8 = theRaw.substr(3); + if (utf8::is_valid(aUtf8)) + { + return aUtf8; + } + return ANSIToUTF8(theRaw); + } + + // UTF-8 without BOM + if (utf8::is_valid(theRaw)) + { + return {}; + } + + // Try UTF-16 + if (aSize >= 2) + { // need at least 2 bytes to make one char16 + // UTF-16 with BOM + if (aBytes[0] == 0xFF && aBytes[1] == 0xFE) + { + // LE - the chinese version of the original game uses this + auto aMaybeUtf16 = TryUtf16ToUtf8(aBytes + 2, aSize - 2, false); + if (aMaybeUtf16) + { + return std::move(*aMaybeUtf16); + } + } + + if (aBytes[0] == 0xFE && aBytes[1] == 0xFF) + { + // BE + auto aMaybeUtf16 = TryUtf16ToUtf8(aBytes + 2, aSize - 2, true); + if (aMaybeUtf16) + { + return std::move(*aMaybeUtf16); + } + } + + // we don't handle UTF-16 without BOM for now + } + + // Fallback - this is what the english version uses + return ANSIToUTF8(theRaw); +} +} // namespace Sexy diff --git a/src/SexyAppFramework/Encoding.h b/src/SexyAppFramework/Encoding.h index 8f4b8c9..babfd5f 100644 --- a/src/SexyAppFramework/Encoding.h +++ b/src/SexyAppFramework/Encoding.h @@ -1,16 +1,16 @@ -#pragma once - -#include -#include - -namespace Sexy -{ - -// Convert a UTF-16 byte buffer to UTF-8. Return nullopt if input is not valid UTF-16 -std::optional TryUtf16ToUtf8(const unsigned char *theBytes, std::size_t theByteCount, bool isBigEndian); - -// Convert a buffer to UTF-8 (wihout BOM) if it's not already. Return nullopt if the input is already UTF-8 (without BOM) -// Supports UTF-16 LE/BE with BOM. Fallback to ANSI -std::optional ConvertToUtf8IfNeeded(const std::string &theRaw); - -} // namespace Sexy +#pragma once + +#include +#include + +namespace Sexy +{ + +// Convert a UTF-16 byte buffer to UTF-8. Return nullopt if input is not valid UTF-16 +std::optional TryUtf16ToUtf8(const unsigned char *theBytes, std::size_t theByteCount, bool isBigEndian); + +// Convert a buffer to UTF-8 (wihout BOM) if it's not already. Return nullopt if the input is already UTF-8 (without BOM) +// Supports UTF-16 LE/BE with BOM. Fallback to ANSI +std::optional ConvertToUtf8IfNeeded(const std::string &theRaw); + +} // namespace Sexy diff --git a/src/SexyAppFramework/ImageFont.cpp b/src/SexyAppFramework/ImageFont.cpp index 57884c5..ce6ca6b 100644 --- a/src/SexyAppFramework/ImageFont.cpp +++ b/src/SexyAppFramework/ImageFont.cpp @@ -3,6 +3,7 @@ #include "Image.h" #include "SexyAppBase.h" #include "MemoryImage.h" +#include "RenderCommand.h" using namespace Sexy; @@ -104,16 +105,15 @@ FontLayer::FontLayer(FontData *theFontData) } FontLayer::FontLayer(const FontLayer &theFontLayer) - : mFontData(theFontLayer.mFontData), mRequiredTags(theFontLayer.mRequiredTags), - mExcludedTags(theFontLayer.mExcludedTags), mImage(theFontLayer.mImage), mDrawMode(theFontLayer.mDrawMode), - mOffset(theFontLayer.mOffset), mSpacing(theFontLayer.mSpacing), mMinPointSize(theFontLayer.mMinPointSize), - mMaxPointSize(theFontLayer.mMaxPointSize), mPointSize(theFontLayer.mPointSize), mAscent(theFontLayer.mAscent), - mAscentPadding(theFontLayer.mAscentPadding), mHeight(theFontLayer.mHeight), - mDefaultHeight(theFontLayer.mDefaultHeight), mColorMult(theFontLayer.mColorMult), - mColorAdd(theFontLayer.mColorAdd), mLineSpacingOffset(theFontLayer.mLineSpacingOffset), - mBaseOrder(theFontLayer.mBaseOrder), mCharData(theFontLayer.mCharData) + : mFontData(theFontLayer.mFontData), mRequiredTags(theFontLayer.mRequiredTags), + mExcludedTags(theFontLayer.mExcludedTags), mImage(theFontLayer.mImage), mDrawMode(theFontLayer.mDrawMode), + mOffset(theFontLayer.mOffset), mSpacing(theFontLayer.mSpacing), mMinPointSize(theFontLayer.mMinPointSize), + mMaxPointSize(theFontLayer.mMaxPointSize), mPointSize(theFontLayer.mPointSize), mAscent(theFontLayer.mAscent), + mAscentPadding(theFontLayer.mAscentPadding), mHeight(theFontLayer.mHeight), + mDefaultHeight(theFontLayer.mDefaultHeight), mColorMult(theFontLayer.mColorMult), + mColorAdd(theFontLayer.mColorAdd), mLineSpacingOffset(theFontLayer.mLineSpacingOffset), + mBaseOrder(theFontLayer.mBaseOrder), mCharData(theFontLayer.mCharData) { - } CharData *FontLayer::GetCharData(SexyChar value) { @@ -202,9 +202,9 @@ bool FontData::GetColorFromDataElement(DataElement *theElement, Color &theColor) return false; theColor = Color((int)(aFactorVector[0] * 255), - (int)(aFactorVector[1] * 255), - (int)(aFactorVector[2] * 255), - (int)(aFactorVector[3] * 255)); + (int)(aFactorVector[1] * 255), + (int)(aFactorVector[2] * 255), + (int)(aFactorVector[3] * 255)); return true; } @@ -283,8 +283,8 @@ bool FontData::HandleCommand(const ListDataElement &theParams) IntVector aWidthsVector; if ((!theParams.mElementVector[1]->mIsList) && - (DataToIntVector(theParams.mElementVector[2], &aRectIntVector)) && (aRectIntVector.size() == 4) && - (DataToIntVector(theParams.mElementVector[3], &aWidthsVector))) + (DataToIntVector(theParams.mElementVector[2], &aRectIntVector)) && (aRectIntVector.size() == 4) && + (DataToIntVector(theParams.mElementVector[3], &aWidthsVector))) { std::string aDefineName = StringToUpper(((SingleDataElement *)theParams.mElementVector[1])->mString); @@ -336,7 +336,7 @@ bool FontData::HandleCommand(const ListDataElement &theParams) int aPointSize; if ((!theParams.mElementVector[1]->mIsList) && - (StringToInt(((SingleDataElement *)theParams.mElementVector[1])->mString, &aPointSize))) + (StringToInt(((SingleDataElement *)theParams.mElementVector[1])->mString, &aPointSize))) { mDefaultPointSize = aPointSize; } @@ -354,7 +354,7 @@ bool FontData::HandleCommand(const ListDataElement &theParams) StringVector aToVector; if ((DataToStringVector(theParams.mElementVector[1], &aFromVector)) && - (DataToStringVector(theParams.mElementVector[2], &aToVector))) + (DataToStringVector(theParams.mElementVector[2], &aToVector))) { if (aFromVector.size() == aToVector.size()) { @@ -431,7 +431,7 @@ bool FontData::HandleCommand(const ListDataElement &theParams) StringVector aStringVector; if ((DataToLayer(theParams.mElementVector[1], &aLayer)) && - (DataToStringVector(theParams.mElementVector[2], &aStringVector))) + (DataToStringVector(theParams.mElementVector[2], &aStringVector))) { for (uint32_t i = 0; i < aStringVector.size(); i++) aLayer->mRequiredTags.push_back(StringToUpper(aStringVector[i])); @@ -450,7 +450,7 @@ bool FontData::HandleCommand(const ListDataElement &theParams) StringVector aStringVector; if ((DataToLayer(theParams.mElementVector[1], &aLayer)) && - (DataToStringVector(theParams.mElementVector[2], &aStringVector))) + (DataToStringVector(theParams.mElementVector[2], &aStringVector))) { for (uint32_t i = 0; i < aStringVector.size(); i++) aLayer->mExcludedTags.push_back(StringToUpper(aStringVector[i])); @@ -467,13 +467,13 @@ bool FontData::HandleCommand(const ListDataElement &theParams) { FontLayer *aLayer; if ((DataToLayer(theParams.mElementVector[1], &aLayer)) && (!theParams.mElementVector[2]->mIsList) && - (!theParams.mElementVector[3]->mIsList)) + (!theParams.mElementVector[3]->mIsList)) { int aMinPointSize; int aMaxPointSize; if ((StringToInt(((SingleDataElement *)theParams.mElementVector[2])->mString, &aMinPointSize)) && - (StringToInt(((SingleDataElement *)theParams.mElementVector[3])->mString, &aMaxPointSize))) + (StringToInt(((SingleDataElement *)theParams.mElementVector[3])->mString, &aMaxPointSize))) { aLayer->mMinPointSize = aMinPointSize; aLayer->mMaxPointSize = aMaxPointSize; @@ -537,7 +537,7 @@ bool FontData::HandleCommand(const ListDataElement &theParams) std::string aFileNameString; if ((DataToLayer(theParams.mElementVector[1], &aLayer)) && - (DataToString(theParams.mElementVector[2], &aFileNameString))) + (DataToString(theParams.mElementVector[2], &aFileNameString))) { std::string aFileName = GetPathFrom(aFileNameString, GetFileDir(mSourceFile)); @@ -571,7 +571,7 @@ bool FontData::HandleCommand(const ListDataElement &theParams) { int anDrawMode; if ((StringToInt(((SingleDataElement *)theParams.mElementVector[2])->mString, &anDrawMode)) && - (anDrawMode >= 0) && (anDrawMode <= 1)) + (anDrawMode >= 0) && (anDrawMode <= 1)) { aLayer->mDrawMode = anDrawMode; } @@ -687,7 +687,7 @@ bool FontData::HandleCommand(const ListDataElement &theParams) IntVector anOffset; if ((DataToLayer(theParams.mElementVector[1], &aLayer)) && - (DataToIntVector(theParams.mElementVector[2], &anOffset)) && (anOffset.size() == 2)) + (DataToIntVector(theParams.mElementVector[2], &anOffset)) && (anOffset.size() == 2)) { aLayer->mOffset.mX = anOffset[0]; aLayer->mOffset.mY = anOffset[1]; @@ -707,8 +707,8 @@ bool FontData::HandleCommand(const ListDataElement &theParams) IntVector aCharWidthsVector; if ((DataToLayer(theParams.mElementVector[1], &aLayer)) && - (DataToStringVector(theParams.mElementVector[2], &aCharsVector)) && - (DataToIntVector(theParams.mElementVector[3], &aCharWidthsVector))) + (DataToStringVector(theParams.mElementVector[2], &aCharsVector)) && + (DataToIntVector(theParams.mElementVector[3], &aCharWidthsVector))) { if (aCharsVector.size() == aCharWidthsVector.size()) { @@ -770,8 +770,8 @@ bool FontData::HandleCommand(const ListDataElement &theParams) ListDataElement aRectList; if ((DataToLayer(theParams.mElementVector[1], &aLayer)) && - (DataToStringVector(theParams.mElementVector[2], &aCharsVector)) && - (DataToList(theParams.mElementVector[3], &aRectList))) + (DataToStringVector(theParams.mElementVector[2], &aCharsVector)) && + (DataToList(theParams.mElementVector[3], &aRectList))) { if (aCharsVector.size() == aRectList.mElementVector.size()) { @@ -785,14 +785,14 @@ bool FontData::HandleCommand(const ListDataElement &theParams) IntVector aRectElement; if (utf8::is_valid(aCharsVector[i]) && - (DataToIntVector(aRectList.mElementVector[i], &aRectElement)) && - (aRectElement.size() == 4)) + (DataToIntVector(aRectList.mElementVector[i], &aRectElement)) && + (aRectElement.size() == 4)) { Rect aRect = Rect(aRectElement[0], aRectElement[1], aRectElement[2], aRectElement[3]); if ((aRect.mX < 0) || (aRect.mY < 0) || (aRect.mX + aRect.mWidth > anImageWidth) || - (aRect.mY + aRect.mHeight > anImageHeight)) + (aRect.mY + aRect.mHeight > anImageHeight)) { Error("Image rectangle out of bounds"); return false; @@ -814,7 +814,7 @@ bool FontData::HandleCommand(const ListDataElement &theParams) for (auto &it : aLayer->mCharData) if (aLayer->mCharData[it.first].mImageRect.mHeight + aLayer->mCharData[it.first].mOffset.mY > aLayer->mDefaultHeight) aLayer->mDefaultHeight = aLayer->mCharData[it.first].mImageRect.mHeight + - aLayer->mCharData[it.first].mOffset.mY; + aLayer->mCharData[it.first].mOffset.mY; } else { @@ -840,8 +840,8 @@ bool FontData::HandleCommand(const ListDataElement &theParams) ListDataElement aRectList; if ((DataToLayer(theParams.mElementVector[1], &aLayer)) && - (DataToStringVector(theParams.mElementVector[2], &aCharsVector)) && - (DataToList(theParams.mElementVector[3], &aRectList))) + (DataToStringVector(theParams.mElementVector[2], &aCharsVector)) && + (DataToList(theParams.mElementVector[3], &aRectList))) { if (aCharsVector.size() == aRectList.mElementVector.size()) { @@ -850,7 +850,7 @@ bool FontData::HandleCommand(const ListDataElement &theParams) IntVector aRectElement; if (utf8::is_valid(aCharsVector[i]) && - (DataToIntVector(aRectList.mElementVector[i], &aRectElement)) && (aRectElement.size() == 2)) + (DataToIntVector(aRectList.mElementVector[i], &aRectElement)) && (aRectElement.size() == 2)) { std::string aCharStr = aCharsVector[i]; auto it = aCharStr.begin(); @@ -859,7 +859,7 @@ bool FontData::HandleCommand(const ListDataElement &theParams) while (it != end) aCodepoint = utf8::next(it, end); aLayer->mCharData[aCodepoint].mOffset = - Point(aRectElement[0], aRectElement[1]); + Point(aRectElement[0], aRectElement[1]); } else invalidParamFormat = true; @@ -883,8 +883,8 @@ bool FontData::HandleCommand(const ListDataElement &theParams) IntVector anOffsetsVector; if ((DataToLayer(theParams.mElementVector[1], &aLayer)) && - (DataToStringVector(theParams.mElementVector[2], &aPairsVector)) && - (DataToIntVector(theParams.mElementVector[3], &anOffsetsVector))) + (DataToStringVector(theParams.mElementVector[2], &aPairsVector)) && + (DataToIntVector(theParams.mElementVector[3], &anOffsetsVector))) { if (aPairsVector.size() == anOffsetsVector.size()) { @@ -893,7 +893,7 @@ bool FontData::HandleCommand(const ListDataElement &theParams) if (aPairsVector[i].length() == 2) { aLayer->mCharData[aPairsVector[i][0]].mKerningOffsets[aPairsVector[i][1]] = - anOffsetsVector[i]; + anOffsetsVector[i]; } else invalidParamFormat = true; @@ -938,8 +938,8 @@ bool FontData::HandleCommand(const ListDataElement &theParams) IntVector aCharOrdersVector; if ((DataToLayer(theParams.mElementVector[1], &aLayer)) && - (DataToStringVector(theParams.mElementVector[2], &aCharsVector)) && - (DataToIntVector(theParams.mElementVector[3], &aCharOrdersVector))) + (DataToStringVector(theParams.mElementVector[2], &aCharsVector)) && + (DataToIntVector(theParams.mElementVector[3], &aCharOrdersVector))) { if (aCharsVector.size() == aCharOrdersVector.size()) { @@ -968,10 +968,10 @@ bool FontData::HandleCommand(const ListDataElement &theParams) else invalidNumParams = true; } - else if (stricmp(aCmd.c_str(), "LayerSetExInfo") == 0) - { - // used in chinese versions, not implemented for now - } + else if (stricmp(aCmd.c_str(), "LayerSetExInfo") == 0) + { + // used in chinese versions, not implemented for now + } else { Error("Unknown Command"); @@ -1053,7 +1053,7 @@ bool FontData::LoadLegacy(Image *theFontImage, const std::string &theFontDescFil while (!feof(aStream)) { - char aBuf[2] = {0, 0}; // needed because fscanf will null terminate the string it reads + char aBuf[2] = { 0, 0 }; // needed because fscanf will null terminate the string it reads char aChar = 0; int aWidth = 0; @@ -1094,8 +1094,8 @@ ActiveFontLayer::ActiveFontLayer() } ActiveFontLayer::ActiveFontLayer(const ActiveFontLayer &theActiveFontLayer) - : mBaseFontLayer(theActiveFontLayer.mBaseFontLayer), mScaledImage(theActiveFontLayer.mScaledImage), - mOwnsImage(theActiveFontLayer.mOwnsImage), mScaledCharImageRects(theActiveFontLayer.mScaledCharImageRects) + : mBaseFontLayer(theActiveFontLayer.mBaseFontLayer), mScaledImage(theActiveFontLayer.mScaledImage), + mOwnsImage(theActiveFontLayer.mOwnsImage), mScaledCharImageRects(theActiveFontLayer.mScaledCharImageRects) { if (mOwnsImage) mScaledImage = (Sexy::Image *)mBaseFontLayer->mFontData->mApp->CopyImage(mScaledImage); @@ -1141,9 +1141,9 @@ ImageFont::ImageFont(Image *theFontImage) } ImageFont::ImageFont(const ImageFont &theImageFont) - : Font(theImageFont), mScale(theImageFont.mScale), mFontData(theImageFont.mFontData), - mPointSize(theImageFont.mPointSize), mTagVector(theImageFont.mTagVector), - mActiveListValid(theImageFont.mActiveListValid), mForceScaledImagesWhite(theImageFont.mForceScaledImagesWhite) + : Font(theImageFont), mScale(theImageFont.mScale), mFontData(theImageFont.mFontData), + mPointSize(theImageFont.mPointSize), mTagVector(theImageFont.mTagVector), + mActiveListValid(theImageFont.mActiveListValid), mForceScaledImagesWhite(theImageFont.mForceScaledImagesWhite) { mFontData->Ref(); @@ -1202,7 +1202,7 @@ void ImageFont::GenerateActiveFontLayers() FontLayer *aFontLayer = &*anItr; if ((mPointSize >= aFontLayer->mMinPointSize) && - ((mPointSize <= aFontLayer->mMaxPointSize) || (aFontLayer->mMaxPointSize == -1))) + ((mPointSize <= aFontLayer->mMaxPointSize) || (aFontLayer->mMaxPointSize == -1))) { bool active = true; @@ -1214,7 +1214,7 @@ void ImageFont::GenerateActiveFontLayers() // Make sure no excluded tags are included for (i = 0; i < mTagVector.size(); i++) if (std::find(aFontLayer->mExcludedTags.begin(), aFontLayer->mExcludedTags.end(), mTagVector[i]) != - aFontLayer->mExcludedTags.end()) + aFontLayer->mExcludedTags.end()) active = false; if (active) @@ -1258,9 +1258,9 @@ void ImageFont::GenerateActiveFontLayers() Rect *anOrigRect = &it.second.mImageRect; Rect aScaledRect(aCurX, - 0, - (int)((anOrigRect->mWidth * aPointSize) / aLayerPointSize), - (int)((anOrigRect->mHeight * aPointSize) / aLayerPointSize)); + 0, + (int)((anOrigRect->mWidth * aPointSize) / aLayerPointSize), + (int)((anOrigRect->mHeight * aPointSize) / aLayerPointSize)); anActiveFontLayer->mScaledCharImageRects[it.first] = aScaledRect; @@ -1283,8 +1283,8 @@ void ImageFont::GenerateActiveFontLayers() { if ((Image *)aFontLayer->mImage != NULL) g.DrawImage(aFontLayer->mImage, - anActiveFontLayer->mScaledCharImageRects[it.first], - it.second.mImageRect); + anActiveFontLayer->mScaledCharImageRects[it.first], + it.second.mImageRect); } if (mForceScaledImagesWhite) @@ -1380,9 +1380,9 @@ int ImageFont::CharWidthKern(uint32_t theChar, uint32_t thePrevChar) if (thePrevChar != 0) { aSpacing = - (anActiveFontLayer->mBaseFontLayer->mSpacing + - anActiveFontLayer->mBaseFontLayer->mCharData[thePrevChar].mKerningOffsets[theChar]) * - mScale; + (anActiveFontLayer->mBaseFontLayer->mSpacing + + anActiveFontLayer->mBaseFontLayer->mCharData[thePrevChar].mKerningOffsets[theChar]) * + mScale; } else aSpacing = 0; @@ -1390,14 +1390,14 @@ int ImageFont::CharWidthKern(uint32_t theChar, uint32_t thePrevChar) else { aCharWidth = - (anActiveFontLayer->mBaseFontLayer->mCharData[theChar].mWidth * aPointSize / aLayerPointSize); + (anActiveFontLayer->mBaseFontLayer->mCharData[theChar].mWidth * aPointSize / aLayerPointSize); if (thePrevChar != 0) { aSpacing = - (anActiveFontLayer->mBaseFontLayer->mSpacing + - anActiveFontLayer->mBaseFontLayer->mCharData[thePrevChar].mKerningOffsets[theChar]) * - aPointSize / aLayerPointSize; + (anActiveFontLayer->mBaseFontLayer->mSpacing + + anActiveFontLayer->mBaseFontLayer->mCharData[thePrevChar].mKerningOffsets[theChar]) * + aPointSize / aLayerPointSize; } else aSpacing = 0; @@ -1420,38 +1420,25 @@ int ImageFont::CharWidth(uint32_t theChar) } std::mutex gRenderCritSec; -static const int POOL_SIZE = 4096; -static RenderCommand gRenderCommandPool[POOL_SIZE]; -static RenderCommand *gRenderTail[256]; -static RenderCommand *gRenderHead[256]; +static RenderCommandList gRenderCommandList; void ImageFont::DrawStringEx(Graphics *g, - int theX, - int theY, - const SexyString &theString, - const Color &theColor, - const Rect *theClipRect, - RectList *theDrawnAreas, - int *theWidth) + int theX, + int theY, + const SexyString &theString, + const Color &theColor, + const Rect *theClipRect, + RectList *theDrawnAreas, + int *theWidth) { auto aLock = std::scoped_lock(gRenderCritSec); - - int aPoolIdx; - - for (aPoolIdx = 0; aPoolIdx < 256; aPoolIdx++) - { - gRenderHead[aPoolIdx] = NULL; - gRenderTail[aPoolIdx] = NULL; - } + gRenderCommandList.Clear(); int aXPos = theX; if (theDrawnAreas != NULL) theDrawnAreas->clear(); - /*if (theDrawnArea != NULL) - *theDrawnArea = Rect(0, 0, 0, 0);*/ - if (!mFontData->mInitialized) { if (theWidth != NULL) @@ -1508,17 +1495,17 @@ void ImageFont::DrawStringEx(Graphics *g, if (aScale == 1.0) { anImageX = aLayerXPos + anActiveFontLayer->mBaseFontLayer->mOffset.mX + - anActiveFontLayer->mBaseFontLayer->mCharData[aChar].mOffset.mX; + anActiveFontLayer->mBaseFontLayer->mCharData[aChar].mOffset.mX; anImageY = - theY - (anActiveFontLayer->mBaseFontLayer->mAscent - anActiveFontLayer->mBaseFontLayer->mOffset.mY - - anActiveFontLayer->mBaseFontLayer->mCharData[aChar].mOffset.mY); + theY - (anActiveFontLayer->mBaseFontLayer->mAscent - anActiveFontLayer->mBaseFontLayer->mOffset.mY - + anActiveFontLayer->mBaseFontLayer->mCharData[aChar].mOffset.mY); aCharWidth = anActiveFontLayer->mBaseFontLayer->mCharData[aChar].mWidth; if (aNextChar != 0) { aSpacing = - anActiveFontLayer->mBaseFontLayer->mSpacing + - anActiveFontLayer->mBaseFontLayer->mCharData[aChar].mKerningOffsets[aNextChar]; + anActiveFontLayer->mBaseFontLayer->mSpacing + + anActiveFontLayer->mBaseFontLayer->mCharData[aChar].mKerningOffsets[aNextChar]; } else aSpacing = 0; @@ -1526,20 +1513,20 @@ void ImageFont::DrawStringEx(Graphics *g, else { anImageX = aLayerXPos + (int)((anActiveFontLayer->mBaseFontLayer->mOffset.mX + - anActiveFontLayer->mBaseFontLayer->mCharData[aChar].mOffset.mX) * - aScale); + anActiveFontLayer->mBaseFontLayer->mCharData[aChar].mOffset.mX) * + aScale); anImageY = theY - (int)((anActiveFontLayer->mBaseFontLayer->mAscent - - anActiveFontLayer->mBaseFontLayer->mOffset.mY - - anActiveFontLayer->mBaseFontLayer->mCharData[aChar].mOffset.mY) * - aScale); + anActiveFontLayer->mBaseFontLayer->mOffset.mY - + anActiveFontLayer->mBaseFontLayer->mCharData[aChar].mOffset.mY) * + aScale); aCharWidth = (anActiveFontLayer->mBaseFontLayer->mCharData[aChar].mWidth * aScale); if (aNextChar != 0) { aSpacing = (int)((anActiveFontLayer->mBaseFontLayer->mSpacing + - anActiveFontLayer->mBaseFontLayer->mCharData[aChar] - .mKerningOffsets[aNextChar]) * - aScale); + anActiveFontLayer->mBaseFontLayer->mCharData[aChar] + .mKerningOffsets[aNextChar]) * + aScale); } else aSpacing = 0; @@ -1547,51 +1534,33 @@ void ImageFont::DrawStringEx(Graphics *g, Color aColor; aColor.mRed = std::min((theColor.mRed * anActiveFontLayer->mBaseFontLayer->mColorMult.mRed / 255) + - anActiveFontLayer->mBaseFontLayer->mColorAdd.mRed, - 255); + anActiveFontLayer->mBaseFontLayer->mColorAdd.mRed, + 255); aColor.mGreen = std::min((theColor.mGreen * anActiveFontLayer->mBaseFontLayer->mColorMult.mGreen / 255) + - anActiveFontLayer->mBaseFontLayer->mColorAdd.mGreen, - 255); + anActiveFontLayer->mBaseFontLayer->mColorAdd.mGreen, + 255); aColor.mBlue = std::min((theColor.mBlue * anActiveFontLayer->mBaseFontLayer->mColorMult.mBlue / 255) + - anActiveFontLayer->mBaseFontLayer->mColorAdd.mBlue, - 255); + anActiveFontLayer->mBaseFontLayer->mColorAdd.mBlue, + 255); aColor.mAlpha = std::min((theColor.mAlpha * anActiveFontLayer->mBaseFontLayer->mColorMult.mAlpha / 255) + - anActiveFontLayer->mBaseFontLayer->mColorAdd.mAlpha, - 255); + anActiveFontLayer->mBaseFontLayer->mColorAdd.mAlpha, + 255); int anOrder = anActiveFontLayer->mBaseFontLayer->mBaseOrder + - anActiveFontLayer->mBaseFontLayer->GetCharData(aChar)->mOrder; + anActiveFontLayer->mBaseFontLayer->GetCharData(aChar)->mOrder; - if (aCurPoolIdx >= POOL_SIZE) + RenderCommand *aRenderCommand = gRenderCommandList.PushWithOrder(anOrder); + if (!aRenderCommand) + { break; - - RenderCommand *aRenderCommand = &gRenderCommandPool[aCurPoolIdx++]; + } aRenderCommand->mImage = anActiveFontLayer->mScaledImage; aRenderCommand->mColor = aColor; - aRenderCommand->mDest[0] = anImageX; - aRenderCommand->mDest[1] = anImageY; - aRenderCommand->mSrc[0] = anActiveFontLayer->mScaledCharImageRects[aChar].mX; - aRenderCommand->mSrc[1] = anActiveFontLayer->mScaledCharImageRects[aChar].mY; - aRenderCommand->mSrc[2] = anActiveFontLayer->mScaledCharImageRects[aChar].mWidth; - aRenderCommand->mSrc[3] = anActiveFontLayer->mScaledCharImageRects[aChar].mHeight; + aRenderCommand->mDestX = anImageX; + aRenderCommand->mDestY = anImageY; + aRenderCommand->mSrc = anActiveFontLayer->mScaledCharImageRects[aChar]; aRenderCommand->mMode = anActiveFontLayer->mBaseFontLayer->mDrawMode; - aRenderCommand->mNext = NULL; - - int anOrderIdx = std::min(std::max(anOrder + 128, 0), 255); - - if (gRenderTail[anOrderIdx] == NULL) - { - gRenderTail[anOrderIdx] = aRenderCommand; - gRenderHead[anOrderIdx] = aRenderCommand; - } - else - { - gRenderTail[anOrderIdx]->mNext = aRenderCommand; - gRenderTail[anOrderIdx] = aRenderCommand; - } - - //aRenderCommandMap.insert(RenderCommandMap::value_type(aPriority, aRenderCommand)); /*int anOldDrawMode = g->GetDrawMode(); if (anActiveFontLayer->mBaseFontLayer->mDrawMode != -1) @@ -1606,9 +1575,9 @@ void ImageFont::DrawStringEx(Graphics *g, if (theDrawnAreas != NULL) { Rect aDestRect = Rect(anImageX, - anImageY, - anActiveFontLayer->mScaledCharImageRects[aChar].mWidth, - anActiveFontLayer->mScaledCharImageRects[aChar].mHeight); + anImageY, + anActiveFontLayer->mScaledCharImageRects[aChar].mWidth, + anActiveFontLayer->mScaledCharImageRects[aChar].mHeight); theDrawnAreas->push_back(aDestRect); @@ -1653,51 +1622,25 @@ void ImageFont::DrawStringEx(Graphics *g, *theWidth = aCurXPos - theX; Color anOrigColor = g->GetColor(); - - for (aPoolIdx = 0; aPoolIdx < 256; aPoolIdx++) + for (const auto &command : gRenderCommandList) { - RenderCommand *aRenderCommand = gRenderHead[aPoolIdx]; - - while (aRenderCommand != NULL) + int anOldDrawMode = g->GetDrawMode(); + if (command.mMode != -1) + { + g->SetDrawMode(command.mMode); + } + g->SetColor(command.mColor); + if (command.mImage) { - int anOldDrawMode = g->GetDrawMode(); - if (aRenderCommand->mMode != -1) - g->SetDrawMode(aRenderCommand->mMode); - g->SetColor(Color(aRenderCommand->mColor)); - if (aRenderCommand->mImage != NULL) - g->DrawImage(aRenderCommand->mImage, - aRenderCommand->mDest[0], - aRenderCommand->mDest[1], - Rect(aRenderCommand->mSrc[0], - aRenderCommand->mSrc[1], - aRenderCommand->mSrc[2], - aRenderCommand->mSrc[3])); - g->SetDrawMode(anOldDrawMode); - - aRenderCommand = aRenderCommand->mNext; + g->DrawImage(command.mImage, + command.mDestX, + command.mDestY, + command.mSrc); } + g->SetDrawMode(anOldDrawMode); } g->SetColor(anOrigColor); - - /*RenderCommandMap::iterator anItr = aRenderCommandMap.begin(); - while (anItr != aRenderCommandMap.end()) - { - RenderCommand* aRenderCommand = &anItr->second; - - int anOldDrawMode = g->GetDrawMode(); - if (aRenderCommand->mMode != -1) - g->SetDrawMode(aRenderCommand->mMode); - Color anOrigColor = g->GetColor(); - g->SetColor(aRenderCommand->mColor); - if (aRenderCommand->mImage != NULL) - g->DrawImage(aRenderCommand->mImage, aRenderCommand->mDest.mX, aRenderCommand->mDest.mY, aRenderCommand->mSrc); - g->SetColor(anOrigColor); - g->SetDrawMode(anOldDrawMode); - - ++anItr; - }*/ - g->SetColorizeImages(colorizeImages); } @@ -1710,7 +1653,7 @@ SexyChar ImageFont::GetMappedChar(uint32_t value) } void ImageFont::DrawString( - Graphics *g, int theX, int theY, const SexyString &theString, const Color &theColor, const Rect &theClipRect) + Graphics *g, int theX, int theY, const SexyString &theString, const Color &theColor, const Rect &theClipRect) { DrawStringEx(g, theX, theY, theString, theColor, &theClipRect, NULL, NULL); } diff --git a/src/SexyAppFramework/ImageFont.h b/src/SexyAppFramework/ImageFont.h index 2d840af..11014f3 100644 --- a/src/SexyAppFramework/ImageFont.h +++ b/src/SexyAppFramework/ImageFont.h @@ -1,12 +1,12 @@ #ifndef __IMAGEFONT_H__ #define __IMAGEFONT_H__ +#include + #include "Font.h" #include "DescParser.h" #include "SharedImage.h" -#include - namespace Sexy { @@ -48,9 +48,9 @@ class FontLayer int mMaxPointSize; int mPointSize; int mAscent; - int mAscentPadding; // How much space is above the avg uppercase char - int mHeight; // - int mDefaultHeight; // Max height of font character image rects + int mAscentPadding; // How much space is above the avg uppercase char + int mHeight; // + int mDefaultHeight; // Max height of font character image rects int mLineSpacingOffset; // This plus height should get added between lines int mBaseOrder; @@ -114,19 +114,6 @@ class ActiveFontLayer typedef std::list ActiveFontLayerList; -class RenderCommand -{ - public: - Image *mImage; - int mDest[2]; - int mSrc[4]; - int mMode; - Color mColor; - RenderCommand *mNext; -}; - -typedef std::multimap RenderCommandMap; - class ImageFont : public Font { public: @@ -142,13 +129,13 @@ class ImageFont : public Font public: virtual void GenerateActiveFontLayers(); virtual void DrawStringEx(Graphics *g, - int theX, - int theY, - const SexyString &theString, - const Color &theColor, - const Rect *theClipRect, - RectList *theDrawnAreas, - int *theWidth); + int theX, + int theY, + const SexyString &theString, + const Color &theColor, + const Rect *theClipRect, + RectList *theDrawnAreas, + int *theWidth); SexyChar GetMappedChar(uint32_t value); public: @@ -165,7 +152,7 @@ class ImageFont : public Font virtual int CharWidthKern(uint32_t theChar, uint32_t thePrevChar); virtual int StringWidth(const SexyString &theString); virtual void DrawString( - Graphics *g, int theX, int theY, const SexyString &theString, const Color &theColor, const Rect &theClipRect); + Graphics *g, int theX, int theY, const SexyString &theString, const Color &theColor, const Rect &theClipRect); virtual Font *Duplicate(); @@ -183,4 +170,4 @@ class ImageFont : public Font } // namespace Sexy -#endif //__IMAGEFONT_H__ \ No newline at end of file +#endif //__IMAGEFONT_H__ diff --git a/src/SexyAppFramework/Platform.h b/src/SexyAppFramework/Platform.h index 6cf249e..de0320c 100644 --- a/src/SexyAppFramework/Platform.h +++ b/src/SexyAppFramework/Platform.h @@ -1,42 +1,42 @@ -#pragma once - -// Use this include instead of directly -// to avoid conflicts - -#ifdef _WIN32 -#include - -// NOTE: this comment exists to ensure formatters don't put -// above , which causes a very obsecure error - -#include -#include -#include - -// Unfuck windows - -#undef _WIN32_WINNT -#undef WIN32_LEAN_AND_MEAN - -#define WIN32_LEAN_AND_MEAN -#define _WIN32_WINNT 0x0500 -#undef _UNICODE -#undef UNICODE - -#ifdef LoadImage -#undef LoadImage // Windows, i fucking hate you -Electr0Gunner -#endif - -#endif - -#ifndef NOMINMAX -#define NOMINMAX -#endif - -#ifdef max -#undef max -#endif - -#ifdef min -#undef min -#endif +#pragma once + +// Use this include instead of directly +// to avoid conflicts + +#ifdef _WIN32 +#include + +// NOTE: this comment exists to ensure formatters don't put +// above , which causes a very obsecure error + +#include +#include +#include + +// Unfuck windows + +#undef _WIN32_WINNT +#undef WIN32_LEAN_AND_MEAN + +#define WIN32_LEAN_AND_MEAN +#define _WIN32_WINNT 0x0500 +#undef _UNICODE +#undef UNICODE + +#ifdef LoadImage +#undef LoadImage // Windows, i fucking hate you -Electr0Gunner +#endif + +#endif + +#ifndef NOMINMAX +#define NOMINMAX +#endif + +#ifdef max +#undef max +#endif + +#ifdef min +#undef min +#endif diff --git a/src/SexyAppFramework/RenderCommand.h b/src/SexyAppFramework/RenderCommand.h new file mode 100644 index 0000000..c599d3b --- /dev/null +++ b/src/SexyAppFramework/RenderCommand.h @@ -0,0 +1,160 @@ +#pragma once + +#include +#include "Rect.h" +#include "Color.h" + +namespace Sexy +{ + +class Image; + +class RenderCommand +{ + public: + Image *mImage{}; + int mDestX; + int mDestY; + Rect mSrc; + int mMode = -1; + Color mColor{}; + RenderCommand *mNext{}; +}; + +class RenderCommandList +{ + static constexpr int LIST_SIZE = 256; + + class List + { + public: + RenderCommand *mHead{}; + RenderCommand *mTail{}; + }; + using ListArray = std::array; + + class iterator + { + friend class RenderCommandList; + + public: + RenderCommand &operator*() const + { + return *mCurrent; + } + RenderCommand *operator->() const + { + return mCurrent; + } + // pre increment + iterator &operator++() + { + if (mOrder >= LIST_SIZE) + { + return *this; // reached end + } + if (mCurrent) + { + mCurrent = mCurrent->mNext; + } + while (!mCurrent) + { + if (mOrder < LIST_SIZE) + { + ++mOrder; + } + if (mOrder >= LIST_SIZE) + { + return *this; // reached end + } + mCurrent = mLists[mOrder].mHead; + } + return *this; + } + // post increment + iterator operator++(int) + { + iterator old = *this; + ++(*this); + return old; + } + friend bool operator==(const iterator &a, const iterator &b) + { + return a.mOrder == b.mOrder && a.mCurrent == b.mCurrent; + } + friend bool operator!=(const iterator &a, const iterator &b) + { + return !(a == b); + } + + private: + iterator(ListArray &lists, int order) : mLists(lists), mOrder(order) + { + if (order >= 0 && order < LIST_SIZE) + { + mCurrent = mLists[order].mHead; + } + else + { + mCurrent = nullptr; + } + } + ListArray &mLists; + int mOrder; + RenderCommand *mCurrent; + }; + + public: + void Clear() + { + mLists = {}; + mBufferNextIdx = 0; + } + RenderCommand *PushWithOrder(int order) + { + auto *command = Allocate(); + if (command) + { + int orderIdx = std::min(std::max(order + 128, 0), 255); + auto &list = mLists[orderIdx]; + if (list.mTail) + { + list.mTail->mNext = command; + list.mTail = command; + } + else + { + list.mHead = command; + list.mTail = command; + } + } + return command; + } + iterator begin() + { + iterator it(mLists, -1); + ++it; // advance to first element + return it; + } + iterator end() + { + return { mLists, LIST_SIZE }; + } + + private: + RenderCommand *Allocate() + { + if (mBufferNextIdx >= mBuffer.size()) + { + return nullptr; + } + auto *command = &mBuffer[mBufferNextIdx++]; + new (command) RenderCommand; + return command; + } + std::array mBuffer{}; + int mBufferNextIdx{}; + ListArray mLists{}; +}; + +} // namespace Sexy diff --git a/src/SexyAppFramework/SysFont.cpp b/src/SexyAppFramework/SysFont.cpp index 99be1b2..396fa1f 100644 --- a/src/SexyAppFramework/SysFont.cpp +++ b/src/SexyAppFramework/SysFont.cpp @@ -185,6 +185,7 @@ SysFont::SysFont(const SysFont &theSysFont) mFontData = theSysFont.mFontData; mBold = theSysFont.mBold; mItalic = theSysFont.mItalic; + mUnderlined = theSysFont.mUnderlined; mDrawShadow = false; } @@ -217,7 +218,7 @@ int SysFont::StringWidth(const SexyString &theString) void SysFont::DrawString( Graphics *g, int theX, int theY, const SexyString &theString, const Color &theColor, const Rect &theClipRect) { - if (mFontData == nullptr) + if (mFontData == nullptr || !mFontData->mFace) return; int posX = theX; int posY = theY; @@ -252,7 +253,7 @@ void SysFont::DrawString( mFontData->mAtlas.mAtlas, mFontData->mAtlas.mWidth, mFontData->mAtlas.mHeight, - Rect(aDrawX, aDrawY, aGlyph.mWidth, aGlyph.mHeight), + Rect(aDrawX + g->mTransX, aDrawY - mAscent + g->mTransY, aGlyph.mWidth, aGlyph.mHeight), Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), theClipRect, theColor, @@ -278,7 +279,8 @@ void SysFont::DrawString( mFontData->mAtlas.mAtlas, mFontData->mAtlas.mWidth, mFontData->mAtlas.mHeight, - Rect(aDrawX + g->mTransX + 1, aDrawY - mAscent + 1 + g->mTransY, aGlyph.mWidth, aGlyph.mHeight), + Rect(aDrawX + g->mTransX + 1, + aDrawY - mAscent + 1 + g->mTransY, aGlyph.mWidth, aGlyph.mHeight), Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), theClipRect, theColor, From 6fd4e1fead79244bb5f5293a41e9333e003b254d Mon Sep 17 00:00:00 2001 From: Michael Zhao <44533763+Pistonight@users.noreply.github.com> Date: Sat, 27 Jun 2026 22:50:57 -0700 Subject: [PATCH 16/30] fix music and soundfx label in options dialog --- src/Lawn/Widget/NewOptionsDialog.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Lawn/Widget/NewOptionsDialog.cpp b/src/Lawn/Widget/NewOptionsDialog.cpp index 3dd06b9..4ca85eb 100644 --- a/src/Lawn/Widget/NewOptionsDialog.cpp +++ b/src/Lawn/Widget/NewOptionsDialog.cpp @@ -174,14 +174,14 @@ void NewOptionsDialog::Draw(Sexy::Graphics *g) Sexy::Color aTextColor(107, 109, 145); TodDrawString(g, - "Music", + "[OPTIONS_MUSIC_LABEL]", // "Music" 186, 140 + aMusicOffset, FONT_DWARVENTODCRAFT18, aTextColor, DrawStringJustification::DS_ALIGN_RIGHT); TodDrawString(g, - "Sound FX", + "[OPTIONS_SOUNDFX]", // "Sound FX" 186, 167 + aSfxOffset, FONT_DWARVENTODCRAFT18, From 386f644c8f81adb542b001516bcbd968b209b1e3 Mon Sep 17 00:00:00 2001 From: Michael Zhao <44533763+Pistonight@users.noreply.github.com> Date: Sat, 27 Jun 2026 23:42:02 -0700 Subject: [PATCH 17/30] allow stone button to be draw correctly with any size --- src/Lawn/Widget/GameButton.cpp | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Lawn/Widget/GameButton.cpp b/src/Lawn/Widget/GameButton.cpp index d160cf8..cb80b19 100644 --- a/src/Lawn/Widget/GameButton.cpp +++ b/src/Lawn/Widget/GameButton.cpp @@ -31,23 +31,23 @@ void DrawStoneButton( aImageX++; } - int aRepeat = (theWidth - aLeftImage->mWidth - aRightImage->mWidth) / aMiddleImage->mWidth; g->DrawImage(aLeftImage, aImageX, y); aImageX += aLeftImage->mWidth; - while (aRepeat > 0) + int aRightImageDstX = x + theWidth - aRightImage->mWidth; + while (aImageX < aRightImageDstX) { - g->DrawImage(aMiddleImage, aImageX, y); - aImageX += aMiddleImage->mWidth; - --aRepeat; + int aMiddleWidth = std::min(aRightImageDstX - aImageX, aMiddleImage->mWidth); + g->DrawImage(aMiddleImage, aImageX, y, { 0, 0, aMiddleWidth, aMiddleImage->mHeight }); + aImageX += aMiddleWidth; } - g->DrawImage(aRightImage, aImageX, y); - - g->SetFont(isHighLighted ? Sexy::FONT_DWARVENTODCRAFT18BRIGHTGREENINSET : Sexy::FONT_DWARVENTODCRAFT18GREENINSET); - aFontX += (theWidth - Sexy::FONT_DWARVENTODCRAFT18GREENINSET->StringWidth(theLabel)) / 2 + 1; - aFontY += (theHeight - Sexy::FONT_DWARVENTODCRAFT18GREENINSET->GetAscent() / 6 - 1 + - Sexy::FONT_DWARVENTODCRAFT18GREENINSET->GetAscent()) / - 2 - - 4; + g->DrawImage(aRightImage, aRightImageDstX, y); + + auto *aFont = isHighLighted ? Sexy::FONT_DWARVENTODCRAFT18BRIGHTGREENINSET : Sexy::FONT_DWARVENTODCRAFT18GREENINSET; + + g->SetFont(aFont); + aFontX += (theWidth - aFont->StringWidth(theLabel)) / 2 + 1; + int aAscent = aFont->GetAscent(); + aFontY += (theHeight - aAscent / 6 - 1 + aAscent) / 2 - 4; g->SetColor(Color::White); g->DrawString(theLabel, aFontX, aFontY); } From c13f6dc39743a650f69a973dca6058dd0571f2ea Mon Sep 17 00:00:00 2001 From: Michael Zhao <44533763+Pistonight@users.noreply.github.com> Date: Sun, 28 Jun 2026 16:45:36 -0700 Subject: [PATCH 18/30] fix: free planting cheat string --- src/Lawn/Board.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Lawn/Board.cpp b/src/Lawn/Board.cpp index 2982a18..e06fc4a 100644 --- a/src/Lawn/Board.cpp +++ b/src/Lawn/Board.cpp @@ -3584,7 +3584,7 @@ void Board::UpdateToolTip() int aPlantCost = GetCurrentPlantCost(aSeedPacket->mPacketType, aSeedPacket->mImitaterType); if (mApp->mEasyPlantingCheat) { - mToolTip->SetWarningText("FREE_PLANTING_CHEAT"); + mToolTip->SetWarningText("[FREE_PLANTING_CHEAT]"); } else if (!aSeedPacket->mActive && (gLawnApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || gLawnApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST)) From 12b463603a0812c92db8aa4196beb1c5e9621aab Mon Sep 17 00:00:00 2001 From: Michael Zhao <44533763+Pistonight@users.noreply.github.com> Date: Sun, 28 Jun 2026 19:46:01 -0700 Subject: [PATCH 19/30] feat: add -compile flag to compile definitions preparing for release --- src/LawnApp.cpp | 166 +++++---- src/LawnApp.h | 49 ++- src/Sexy.TodLib/Definition.cpp | 89 +++-- src/Sexy.TodLib/Definition.h | 4 +- src/Sexy.TodLib/Reanimator.cpp | 491 ++++++++++++------------- src/Sexy.TodLib/Reanimator.h | 11 +- src/Sexy.TodLib/TodParticle.cpp | 623 ++++++++++++++++---------------- src/Sexy.TodLib/TodParticle.h | 56 +-- src/Sexy.TodLib/Trail.cpp | 50 +-- src/Sexy.TodLib/Trail.h | 16 +- src/main.cpp | 6 +- 11 files changed, 787 insertions(+), 774 deletions(-) diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index a297089..fe938b8 100644 --- a/src/LawnApp.cpp +++ b/src/LawnApp.cpp @@ -672,7 +672,7 @@ void LawnApp::DoBackToMain() void LawnApp::DoConfirmBackToMain() { LawnDialog *aDialog = (LawnDialog *)DoDialog(Dialogs::DIALOG_CONFIRM_BACK_TO_MAIN, true, "[LEAVE_GAME_HEADER]", - "[LEAVE_GAME]", "", Dialog::BUTTONS_YES_NO); + "[LEAVE_GAME]", "", Dialog::BUTTONS_YES_NO); aDialog->mLawnYesButton->mLabel = TodStringTranslate("[LEAVE_BUTTON]"); aDialog->mLawnNoButton->mLabel = TodStringTranslate("[DIALOG_BUTTON_CANCEL]"); @@ -728,7 +728,7 @@ void LawnApp::DoPauseDialog() //FinishModelessDialogs(); LawnDialog *aDialog = (LawnDialog *)DoDialog(Dialogs::DIALOG_PAUSED, true, "[GAME_PAUSED]", "[CLICK_TO_RESUME]", - "[RESUME_GAME]", Dialog::BUTTONS_FOOTER); + "[RESUME_GAME]", Dialog::BUTTONS_FOOTER); aDialog->mReanimation->AddReanimation(72.0f, 42.0f, ReanimationType::REANIM_ZOMBIE_NEWSPAPER); aDialog->mSpaceAfterHeader = 155; @@ -737,12 +737,12 @@ void LawnApp::DoPauseDialog() } int LawnApp::LawnMessageBox(int theDialogId, const SexyString &theHeaderName, const SexyString &theLinesName, - const SexyString &theButton1Name, const SexyString &theButton2Name, int theButtonMode) + const SexyString &theButton1Name, const SexyString &theButton2Name, int theButtonMode) { Widget *aOldFocus = mWidgetManager->mFocusWidget; LawnDialog *aDialog = - (LawnDialog *)DoDialog(theDialogId, true, theHeaderName, theLinesName, theButton1Name, theButtonMode); + (LawnDialog *)DoDialog(theDialogId, true, theHeaderName, theLinesName, theButton1Name, theButtonMode); if (aDialog->mLawnYesButton) { aDialog->mLawnYesButton->mLabel = TodStringTranslate(theButton1Name); @@ -761,7 +761,7 @@ int LawnApp::LawnMessageBox(int theDialogId, const SexyString &theHeaderName, co } Dialog *LawnApp::DoDialog(int theDialogId, bool isModal, const SexyString &theDialogHeader, - const SexyString &theDialogLines, const SexyString &theDialogFooter, int theButtonMode) + const SexyString &theDialogLines, const SexyString &theDialogFooter, int theButtonMode) { SexyString aHeader = TodStringTranslate(theDialogHeader); SexyString aLines = TodStringTranslate(theDialogLines); @@ -777,10 +777,10 @@ Dialog *LawnApp::DoDialog(int theDialogId, bool isModal, const SexyString &theDi } Dialog *LawnApp::DoDialogDelay(int theDialogId, bool isModal, const SexyString &theDialogHeader, - const SexyString &theDialogLines, const SexyString &theDialogFooter, int theButtonMode) + const SexyString &theDialogLines, const SexyString &theDialogFooter, int theButtonMode) { LawnDialog *aDialog = (LawnDialog *)SexyAppBase::DoDialog(theDialogId, isModal, theDialogHeader, theDialogLines, - theDialogFooter, theButtonMode); + theDialogFooter, theButtonMode); aDialog->SetButtonDelay(30); return aDialog; } @@ -839,12 +839,12 @@ void LawnApp::FinishCreateUserDialog(bool isYes) if (isYes && aName.empty()) { DoDialog(Dialogs::DIALOG_CREATEUSERERROR, true, "[ENTER_YOUR_NAME]", "[USER_ERROR_MESSAGE]", - "[DIALOG_BUTTON_OK]", Dialog::BUTTONS_FOOTER); + "[DIALOG_BUTTON_OK]", Dialog::BUTTONS_FOOTER); } else if (mPlayerInfo == nullptr && (!isYes || aName.empty())) { DoDialog(Dialogs::DIALOG_CREATEUSERERROR, true, "[ENTER_YOUR_NAME]", "[USER_ERROR_MESSAGE]", - "[DIALOG_BUTTON_OK]", Dialog::BUTTONS_FOOTER); + "[DIALOG_BUTTON_OK]", Dialog::BUTTONS_FOOTER); } else if (!isYes) { @@ -856,7 +856,7 @@ void LawnApp::FinishCreateUserDialog(bool isYes) if (aProfile == nullptr) { DoDialog(Dialogs::DIALOG_CREATEUSERERROR, true, "[NAME_CONFLICT]", "[ENTER_UNIQUE_PLAYER_NAME]", - "[DIALOG_BUTTON_OK]", Dialog::BUTTONS_FOOTER); + "[DIALOG_BUTTON_OK]", Dialog::BUTTONS_FOOTER); } else { @@ -879,8 +879,8 @@ void LawnApp::DoConfirmDeleteUserDialog(const SexyString &theName) { KillDialog(Dialogs::DIALOG_CONFIRMDELETEUSER); DoDialog(Dialogs::DIALOG_CONFIRMDELETEUSER, true, "[ARE_YOU_SURE]", - StrFormat(TodStringTranslate("[DELETE_USER_WARNING]").c_str(), theName.c_str()), "", - Dialog::BUTTONS_YES_NO); + StrFormat(TodStringTranslate("[DELETE_USER_WARNING]").c_str(), theName.c_str()), "", + Dialog::BUTTONS_YES_NO); } void LawnApp::FinishConfirmDeleteUserDialog(bool isYes) @@ -959,7 +959,7 @@ void LawnApp::FinishRenameUserDialog(bool isYes) if (!mProfileMgr->RenameProfile(anOldName, aNewName)) { DoDialog(Dialogs::DIALOG_RENAMEUSERERROR, true, "[NAME_CONFLICT]", "[ENTER_UNIQUE_PLAYER_NAME]", - "[DIALOG_BUTTON_OK]", Dialog::BUTTONS_FOOTER); + "[DIALOG_BUTTON_OK]", Dialog::BUTTONS_FOOTER); return; } @@ -980,7 +980,7 @@ void LawnApp::FinishNameError(int theId) KillDialog(theId); NewUserDialog *aNewUserDialog = (NewUserDialog *)GetDialog( - theId == Dialogs::DIALOG_CREATEUSERERROR ? Dialogs::DIALOG_CREATEUSER : Dialogs::DIALOG_RENAMEUSER); + theId == Dialogs::DIALOG_CREATEUSERERROR ? Dialogs::DIALOG_CREATEUSER : Dialogs::DIALOG_RENAMEUSER); if (aNewUserDialog) { mWidgetManager->SetFocus(aNewUserDialog->mNameEditWidget); @@ -1033,7 +1033,7 @@ void LawnApp::FinishTimesUpDialog() void LawnApp::DoConfirmSellDialog(const SexyString &theMessage) { Dialog *aConfirmDialog = - DoDialog(Dialogs::DIALOG_ZEN_SELL, true, "[ZEN_SELL_HEADER]", theMessage, "", Dialog::BUTTONS_YES_NO); + DoDialog(Dialogs::DIALOG_ZEN_SELL, true, "[ZEN_SELL_HEADER]", theMessage, "", Dialog::BUTTONS_YES_NO); aConfirmDialog->mYesButton->mLabel = TodStringTranslate("[DIALOG_BUTTON_YES]"); aConfirmDialog->mNoButton->mLabel = TodStringTranslate("[DIALOG_BUTTON_NO]"); } @@ -1041,16 +1041,16 @@ void LawnApp::DoConfirmSellDialog(const SexyString &theMessage) void LawnApp::DoConfirmPurchaseDialog(const SexyString &theMessage) { LawnDialog *aComfirmDialog = (LawnDialog *)DoDialog(Dialogs::DIALOG_STORE_PURCHASE, true, "买下这个物品?", - theMessage, "", Dialog::BUTTONS_YES_NO); + theMessage, "", Dialog::BUTTONS_YES_NO); aComfirmDialog->mLawnYesButton->mLabel = TodStringTranslate("[DIALOG_BUTTON_YES]"); aComfirmDialog->mLawnNoButton->mLabel = TodStringTranslate("[DIALOG_BUTTON_NO]"); } Dialog *LawnApp::NewDialog(int theDialogId, bool isModal, const SexyString &theDialogHeader, - const SexyString &theDialogLines, const SexyString &theDialogFooter, int theButtonMode) + const SexyString &theDialogLines, const SexyString &theDialogFooter, int theButtonMode) { LawnDialog *aDialog = - new LawnDialog(this, theDialogId, isModal, theDialogHeader, theDialogLines, theDialogFooter, theButtonMode); + new LawnDialog(this, theDialogId, isModal, theDialogHeader, theDialogLines, theDialogFooter, theButtonMode); CenterDialog(aDialog, aDialog->mWidth, aDialog->mHeight); return aDialog; @@ -1088,14 +1088,14 @@ bool LawnApp::NeedPauseGame() { int anId = mDialogList.front()->mId; if (anId == Dialogs::DIALOG_CHOOSER_WARNING || anId == Dialogs::DIALOG_PURCHASE_PACKET_SLOT || - anId == Dialogs::DIALOG_IMITATER) + anId == Dialogs::DIALOG_IMITATER) { return false; } } return (mBoard == nullptr || mGameMode != GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN) && - (mBoard == nullptr || mGameMode != GameMode::GAMEMODE_TREE_OF_WISDOM); + (mBoard == nullptr || mGameMode != GameMode::GAMEMODE_TREE_OF_WISDOM); } void LawnApp::ModalOpen() @@ -1174,13 +1174,13 @@ void LawnApp::Init() // [SETUP] - Here you (can) add a link that contains the LATEST version of your mod. I recommend Github as it's free and easy to setup. (And you are probably using it now) UpdateChecker::gUpdateHost = - "https://raw.githubusercontent.com/LawnProject/ResoddedFramework/refs/heads/main/LawnVersion.txt"; + "https://raw.githubusercontent.com/LawnProject/ResoddedFramework/refs/heads/main/LawnVersion.txt"; UpdateChecker::Check(); if (UpdateChecker::gIsOutdated) TodTraceAndLog("[LawnProject] - OUTDATED: Current Version: %s | Latest Version: %s", - gVersion.toString().c_str(), UpdateChecker::gLatestVersion.toString().c_str()); + gVersion.toString().c_str(), UpdateChecker::gLatestVersion.toString().c_str()); else TodTraceAndLog("[LawnProject] - UP TO DATE: Version : %s", gVersion.toString().c_str()); @@ -1268,10 +1268,24 @@ void LawnApp::Init() #endif mTimer.Start(); - ReanimatorLoadDefinitions(gLawnReanimationArray, ReanimationType::NUM_REANIMS); + if (mRunInCompileMode) + { + TodTraceAndLog("[LawnProject] compile mode - will recompile definitions and exit"); + TodTraceAndLog("[LawnProject] compiling reanims"); + } + + ReanimatorLoadDefinitions(gLawnReanimationArray, ReanimationType::NUM_REANIMS, mRunInCompileMode); ReanimatorEnsureDefinitionLoaded(ReanimationType::REANIM_LOADBAR_SPROUT, true); ReanimatorEnsureDefinitionLoaded(ReanimationType::REANIM_LOADBAR_ZOMBIEHEAD, true); + if (mRunInCompileMode) + { + TodTraceAndLog("[LawnProject] compiling trails"); + TrailLoadDefinitions(gLawnTrailArray, LENGTH(gLawnTrailArray), true); + TodTraceAndLog("[LawnProject] compiling particles"); + TodParticleLoadDefinitions(gLawnParticleArray, LENGTH(gLawnParticleArray), true); + } + #ifdef _DEBUG aDuration = mTimer.GetDuration(); TodTraceAndLog("[LawnProject] - loading: 'loaderbar' %d ms", aDuration); @@ -1311,14 +1325,18 @@ bool LawnApp::DebugKeyDown(int theKey) void LawnApp::HandleCmdLineParam(const std::string &theParamName, const std::string &theParamValue) { -#ifndef _DEBUG if (theParamName == "-tod") { +#ifndef _DEBUG mTodCheatKeys = true; mDebugKeysEnabled = true; +#endif + } + else if (theParamName == "-compile") + { + mRunInCompileMode = true; } else -#endif { SexyApp::HandleCmdLineParam(theParamName, theParamValue); } @@ -1373,7 +1391,7 @@ bool LawnApp::UpdatePlayerProfileForFinishingLevel() mPlayerInfo->mChallengeRecords[GetCurrentChallengeIndex()]++; if (!HasFinishedAdventure() && - (mGameMode == GameMode::GAMEMODE_SCARY_POTTER_3 || mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_3)) + (mGameMode == GameMode::GAMEMODE_SCARY_POTTER_3 || mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_3)) { aUnlockedNewChallenge = false; } @@ -1420,7 +1438,7 @@ void LawnApp::CheckForGameEnd() if (IsAdventureMode()) { if (mBoard->mPlantsPlaced > 0 && !IsWhackAZombieLevel() && !IsScaryPotterLevel() && !IsBungeeBlitzLevel() && - !IsChallengeWithoutSeedBank()) + !IsChallengeWithoutSeedBank()) { if (mBoard->StageHasPool() && !mBoard->StageIsNight() && !mBoard->mDontPeaUsedPeashooter) { @@ -1431,7 +1449,7 @@ void LawnApp::CheckForGameEnd() mAchievements->GiveAchievement(AchievementID::ACHIEVEMENT_GROUNDED); } if (!mBoard->StageIsNight() && !mBoard->StageHasPool() && !mBoard->StageHasRoof() && - !mBoard->mGoodMorningUsedNonFungus) + !mBoard->mGoodMorningUsedNonFungus) { mAchievements->GiveAchievement(AchievementID::ACHIEVEMENT_GOOD_MORNING); } @@ -1664,7 +1682,7 @@ void LawnApp::LoadGroup(const char *theGroupName, int theGroupAveMsToLoad) return; bool aResoddedResourceFound = ResoddedFrameworkExtractResourcesByName(mResourceManager, theGroupName); if (mResourceManager->HadError() || - (!ExtractResourcesByName(mResourceManager, theGroupName) && !aResoddedResourceFound)) + (!ExtractResourcesByName(mResourceManager, theGroupName) && !aResoddedResourceFound)) { ShowResourceError(); mLoadingFailed = true; @@ -1689,8 +1707,8 @@ void LawnApp::LoadingThreadProc() mTitleScreen->mLoaderScreenIsLoaded = true; } - const char *groups[] = {"LoadingFonts", "LoadingImages", "LoadingSounds"}; - int group_ave_ms_to_load[] = {54, 9, 54}; + const char *groups[] = { "LoadingFonts", "LoadingImages", "LoadingSounds" }; + int group_ave_ms_to_load[] = { 54, 9, 54 }; for (int i = 0; i < 3; i++) { mNumLoadingThreadTasks += mResourceManager->GetNumResources(groups[i]) * group_ave_ms_to_load[i]; @@ -1728,12 +1746,12 @@ void LawnApp::LoadingThreadProc() TodTraceAndLog("[LawnProject] - loading '%s' %d ms", "stuff", (int)aTimer.GetDuration()); aTimer.Start(); - TrailLoadDefinitions(gLawnTrailArray, LENGTH(gLawnTrailArray)); + TrailLoadDefinitions(gLawnTrailArray, LENGTH(gLawnTrailArray), mRunInCompileMode); TodTraceAndLog("[LawnProject] - loading '%s' %d ms", "trail", (int)aTimer.GetDuration()); aTimer.Start(); TodHesitationTrace("trail"); - TodParticleLoadDefinitions(gLawnParticleArray, LENGTH(gLawnParticleArray)); + TodParticleLoadDefinitions(gLawnParticleArray, LENGTH(gLawnParticleArray), mRunInCompileMode); aDuration = std::max(aTimer.GetDuration(), 0.0); aTimer.Start(); @@ -1783,7 +1801,7 @@ void LawnApp::URLOpenFailed(const std::string &theURL) CopyToClipboard(theURL); std::string aString = "Please open the following URL in your browser\n\n" + theURL + - "\n\nFor your convenience, this URL has already been copied to your clipboard."; + "\n\nFor your convenience, this URL has already been copied to your clipboard."; DoDialog(Dialogs::DIALOG_OPENURL_WAIT, true, "Open Browser", "OK", aString, Dialog::BUTTONS_FOOTER); } @@ -1808,7 +1826,7 @@ void LawnApp::ConfirmQuit() SexyString aBody = TodStringTranslate("[QUIT_MESSAGE]"); SexyString aHeader = TodStringTranslate("[QUIT_HEADER]"); LawnDialog *aDialog = - (LawnDialog *)DoDialog(Dialogs::DIALOG_QUIT, true, aHeader, aBody, "", Dialog::BUTTONS_OK_CANCEL); + (LawnDialog *)DoDialog(Dialogs::DIALOG_QUIT, true, aHeader, aBody, "", Dialog::BUTTONS_OK_CANCEL); aDialog->mLawnYesButton->mLabel = TodStringTranslate("[QUIT_BUTTON]"); CenterDialog(aDialog, aDialog->mWidth, aDialog->mHeight); } @@ -1857,7 +1875,7 @@ void LawnApp::ButtonDepress(int theId) case Dialogs::DIALOG_QUIT: KillDialog(Dialogs::DIALOG_QUIT); { - SDL_Event event = {SDL_EVENT_QUIT}; + SDL_Event event = { SDL_EVENT_QUIT }; SDL_PushEvent(&event); } return; @@ -2020,14 +2038,14 @@ bool LawnApp::IsAdventureMode() bool LawnApp::IsSurvivalMode() { return mGameMode >= GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_1 && - mGameMode <= GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_5; + mGameMode <= GameMode::GAMEMODE_SURVIVAL_ENDLESS_STAGE_5; } bool LawnApp::IsPuzzleMode() { return (mGameMode >= GameMode::GAMEMODE_SCARY_POTTER_1 && mGameMode <= GameMode::GAMEMODE_SCARY_POTTER_ENDLESS) || - (mGameMode >= GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_1 && - mGameMode <= GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS); + (mGameMode >= GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_1 && + mGameMode <= GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS); } bool LawnApp::IsChallengeMode() @@ -2066,8 +2084,8 @@ bool LawnApp::IsEndlessIZombie(GameMode theGameMode) bool LawnApp::IsContinuousChallenge() { return IsArtChallenge() || IsSlotMachineLevel() || IsFinalBossLevel() || - mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || mGameMode == GameMode::GAMEMODE_UPSELL || - mGameMode == GameMode::GAMEMODE_INTRO || mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST; + mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED || mGameMode == GameMode::GAMEMODE_UPSELL || + mGameMode == GameMode::GAMEMODE_INTRO || mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST; } bool LawnApp::IsArtChallenge() @@ -2076,8 +2094,8 @@ bool LawnApp::IsArtChallenge() return false; return mGameMode == GameMode::GAMEMODE_CHALLENGE_ART_CHALLENGE_WALLNUT || - mGameMode == GameMode::GAMEMODE_CHALLENGE_ART_CHALLENGE_SUNFLOWER || - mGameMode == GameMode::GAMEMODE_CHALLENGE_SEEING_STARS; + mGameMode == GameMode::GAMEMODE_CHALLENGE_ART_CHALLENGE_SUNFLOWER || + mGameMode == GameMode::GAMEMODE_CHALLENGE_SEEING_STARS; } bool LawnApp::IsSquirrelLevel() @@ -2091,10 +2109,10 @@ bool LawnApp::IsIZombieLevel() return false; return mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_1 || mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_2 || - mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_3 || mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_4 || - mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_5 || mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_6 || - mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_7 || mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_8 || - mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_9 || mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS; + mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_3 || mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_4 || + mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_5 || mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_6 || + mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_7 || mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_8 || + mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_9 || mGameMode == GameMode::GAMEMODE_PUZZLE_I_ZOMBIE_ENDLESS; } bool LawnApp::IsShovelLevel() @@ -2108,7 +2126,7 @@ bool LawnApp::IsWallnutBowlingLevel() return false; if (mGameMode == GameMode::GAMEMODE_CHALLENGE_WALLNUT_BOWLING || - mGameMode == GameMode::GAMEMODE_CHALLENGE_WALLNUT_BOWLING_2) + mGameMode == GameMode::GAMEMODE_CHALLENGE_WALLNUT_BOWLING_2) return true; return IsAdventureMode() && mPlayerInfo->mLevel == 5; @@ -2133,7 +2151,7 @@ bool LawnApp::IsWhackAZombieLevel() bool LawnApp::IsLittleTroubleLevel() { return (mBoard && (mGameMode == GameMode::GAMEMODE_CHALLENGE_LITTLE_TROUBLE || - (mGameMode == GameMode::GAMEMODE_ADVENTURE && mPlayerInfo->mLevel == 25))); + (mGameMode == GameMode::GAMEMODE_ADVENTURE && mPlayerInfo->mLevel == 25))); } bool LawnApp::IsScaryPotterLevel() @@ -2172,7 +2190,7 @@ bool LawnApp::IsMiniBossLevel() return false; return (IsAdventureMode() && mPlayerInfo->mLevel == 10) || (IsAdventureMode() && mPlayerInfo->mLevel == 20) || - (IsAdventureMode() && mPlayerInfo->mLevel == 30); + (IsAdventureMode() && mPlayerInfo->mLevel == 30); } bool LawnApp::IsFinalBossLevel() @@ -2189,9 +2207,9 @@ bool LawnApp::IsFinalBossLevel() bool LawnApp::IsChallengeWithoutSeedBank() { return mGameMode == GameMode::GAMEMODE_CHALLENGE_RAINING_SEEDS || mGameMode == GameMode::GAMEMODE_UPSELL || - mGameMode == GameMode::GAMEMODE_INTRO || IsWhackAZombieLevel() || IsSquirrelLevel() || - IsScaryPotterLevel() || mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || - mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM; + mGameMode == GameMode::GAMEMODE_INTRO || IsWhackAZombieLevel() || IsSquirrelLevel() || + IsScaryPotterLevel() || mGameMode == GameMode::GAMEMODE_CHALLENGE_ZEN_GARDEN || + mGameMode == GameMode::GAMEMODE_TREE_OF_WISDOM; } bool LawnApp::IsNight() @@ -2200,7 +2218,7 @@ bool LawnApp::IsNight() return false; return (mPlayerInfo->mLevel >= 11 && mPlayerInfo->mLevel <= 20) || - (mPlayerInfo->mLevel >= 31 && mPlayerInfo->mLevel <= 40) || mPlayerInfo->mLevel == 50; + (mPlayerInfo->mLevel >= 31 && mPlayerInfo->mLevel <= 40) || mPlayerInfo->mLevel == 50; } int LawnApp::GetCurrentChallengeIndex() @@ -2415,7 +2433,7 @@ bool LawnApp::CanSpawnYetis() { const ZombieDefinition &aZombieDef = GetZombieDefinition(ZombieType::ZOMBIE_YETI); return HasFinishedAdventure() && - (mPlayerInfo->mFinishedAdventure >= 2 || mPlayerInfo->mLevel >= aZombieDef.mStartingLevel); + (mPlayerInfo->mFinishedAdventure >= 2 || mPlayerInfo->mLevel >= aZombieDef.mStartingLevel); } bool LawnApp::HasBeatenChallenge(GameMode theGameMode) @@ -2494,7 +2512,7 @@ void LawnApp::CrazyDaveLeave() if (aCrazyDaveReanim) { if (mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_HANDING_TALKING || - mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_HANDING_IDLING) + mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_HANDING_IDLING) { CrazyDaveDoneHanding(); } @@ -2542,8 +2560,8 @@ void LawnApp::CrazyDaveTalkMessage(const SexyString &theMessage) doHanding = true; } if ((mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_HANDING_TALKING || - mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_HANDING_IDLING) && - !doHanding) + mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_HANDING_IDLING) && + !doHanding) { CrazyDaveDoneHanding(); } @@ -2644,7 +2662,7 @@ void LawnApp::CrazyDaveTalkMessage(const SexyString &theMessage) ReanimatorTrackInstance *aHandTrackInstance = aCrazyDaveReanim->GetTrackInstanceByName("Dave_handinghand"); AttachEffect *aAttachEffect = - AttachReanim(aHandTrackInstance->mAttachmentID, aWallnutReanim, 100.0f, 393.0f); + AttachReanim(aHandTrackInstance->mAttachmentID, aWallnutReanim, 100.0f, 393.0f); aAttachEffect->mOffset.m00 = 1.2f; aAttachEffect->mOffset.m11 = 1.2f; @@ -2684,7 +2702,7 @@ void LawnApp::CrazyDaveTalkMessage(const SexyString &theMessage) aCrazyDaveReanim->PlayReanim("anim_talk_handing", ReanimLoopType::REANIM_LOOP, 50, 12.0f); Reanimation *aFertilizerReanim = - AddReanimation(0.0f, 0.0f, 0, ReanimationType::REANIM_ZENGARDEN_FERTILIZER); + AddReanimation(0.0f, 0.0f, 0, ReanimationType::REANIM_ZENGARDEN_FERTILIZER); aFertilizerReanim->PlayReanim("bag", ReanimLoopType::REANIM_PLAY_ONCE_AND_HOLD, 0, 24.0f); aFertilizerReanim->mAnimRate = 0.0f; @@ -2799,7 +2817,7 @@ void LawnApp::CrazyDaveStopTalking() mCrazyDaveState = CrazyDaveState::CRAZY_DAVE_HANDING_IDLING; } else if (mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_TALKING || - mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_HANDING_TALKING) + mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_HANDING_TALKING) { aCrazyDaveReanim->PlayReanim("anim_idle", ReanimLoopType::REANIM_LOOP, 20, 12.0f); mCrazyDaveState = CrazyDaveState::CRAZY_DAVE_IDLING; @@ -2838,7 +2856,7 @@ void LawnApp::UpdateCrazyDave() } if (mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_IDLING || - mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_HANDING_IDLING) + mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_HANDING_IDLING) { if (mCrazyDaveMessageText.find("{MOUTH_BIG_SMILE}") != std::string::npos) { @@ -2859,8 +2877,8 @@ void LawnApp::UpdateCrazyDave() } if (mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_IDLING || mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_TALKING || - mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_HANDING_TALKING || - mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_HANDING_IDLING) + mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_HANDING_TALKING || + mCrazyDaveState == CrazyDaveState::CRAZY_DAVE_HANDING_IDLING) { mCrazyDaveBlinkCounter--; if (mCrazyDaveBlinkCounter <= 0) @@ -2933,11 +2951,11 @@ void LawnApp::DrawCrazyDave(Graphics *g) } TodDrawStringWrapped(g, aBubbleText, aRect, FONT_BRIANNETOD16, Color::Black, - DrawStringJustification::DS_ALIGN_CENTER_VERTICAL_MIDDLE); + DrawStringJustification::DS_ALIGN_CENTER_VERTICAL_MIDDLE); if (clickToContinue) { TodDrawString(g, "[CLICK_TO_CONTINUE]", aPosX + 139, aPosY + 140, FONT_PICO129, Color::Black, - DrawStringJustification::DS_ALIGN_CENTER); + DrawStringJustification::DS_ALIGN_CENTER); } } @@ -2962,8 +2980,8 @@ int LawnApp::GetNumPreloadingTasks() if (HasFinishedAdventure() || mPlayerInfo->mLevel >= GetZombieDefinition(i).mStartingLevel) { if (i != ZombieType::ZOMBIE_BOSS && i != ZombieType::ZOMBIE_CATAPULT && - i != ZombieType::ZOMBIE_GARGANTUAR && i != ZombieType::ZOMBIE_DIGGER && - i != ZombieType::ZOMBIE_ZAMBONI) + i != ZombieType::ZOMBIE_GARGANTUAR && i != ZombieType::ZOMBIE_DIGGER && + i != ZombieType::ZOMBIE_ZAMBONI) { aTaskCount++; } @@ -3033,7 +3051,7 @@ void LawnApp::PreloadForUser() continue; } if (i == ZombieType::ZOMBIE_BOSS || i == ZombieType::ZOMBIE_CATAPULT || - i == ZombieType::ZOMBIE_GARGANTUAR || i == ZombieType::ZOMBIE_DIGGER || i == ZombieType::ZOMBIE_ZAMBONI) + i == ZombieType::ZOMBIE_GARGANTUAR || i == ZombieType::ZOMBIE_DIGGER || i == ZombieType::ZOMBIE_ZAMBONI) { continue; } @@ -3094,7 +3112,7 @@ int LawnApp::GetNumTrophies(ChallengePage thePage) int LawnApp::TrophiesNeedForGoldSunflower() { return 48 - GetNumTrophies(CHALLENGE_PAGE_SURVIVAL) - GetNumTrophies(CHALLENGE_PAGE_CHALLENGE) - - GetNumTrophies(CHALLENGE_PAGE_PUZZLE); + GetNumTrophies(CHALLENGE_PAGE_PUZZLE); } bool LawnApp::EarnedGoldTrophy() @@ -3148,7 +3166,7 @@ SexyString LawnApp::GetMoneyString(int theAmount) if (aValue > 999999) { return StrFormat("$%d,%03d,%03d", aValue / 1000000, (aValue - aValue / 1000000 * 1000000) / 1000, - aValue - aValue / 1000 * 1000); + aValue - aValue / 1000 * 1000); } else if (aValue > 9999) { @@ -3209,7 +3227,7 @@ bool LawnApp::CanDoPinataMode() return false; return mPlayerInfo->mChallengeRecords[(int)GameMode::GAMEMODE_TREE_OF_WISDOM - - (int)GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_1] >= 1000; + (int)GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_1] >= 1000; } bool LawnApp::CanDoDanceMode() @@ -3218,7 +3236,7 @@ bool LawnApp::CanDoDanceMode() return false; return mPlayerInfo->mChallengeRecords[(int)GameMode::GAMEMODE_TREE_OF_WISDOM - - (int)GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_1] >= 500; + (int)GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_1] >= 500; } bool LawnApp::CanDoDaisyMode() @@ -3227,7 +3245,7 @@ bool LawnApp::CanDoDaisyMode() return false; return mPlayerInfo->mChallengeRecords[(int)GameMode::GAMEMODE_TREE_OF_WISDOM - - (int)GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_1] >= 100; + (int)GameMode::GAMEMODE_SURVIVAL_NORMAL_STAGE_1] >= 100; } void LawnApp::PlaySample(int theSoundNum) diff --git a/src/LawnApp.h b/src/LawnApp.h index 5c1ddf8..0ba6f56 100644 --- a/src/LawnApp.h +++ b/src/LawnApp.h @@ -140,10 +140,10 @@ class LawnApp : public SexyApp TrialType mTrialType; bool mDebugTrialLocked; bool mMuteSoundsForCutscene; + bool mRunInCompileMode{}; static Version gResoddedVersion; - public: LawnApp(); virtual ~LawnApp(); @@ -355,11 +355,11 @@ class LawnApp : public SexyApp /// @param theButtonMode Button creation flags /// @return The created dialog virtual Dialog *DoDialog(int theDialogId, - bool isModal, - const SexyString &theDialogHeader, - const SexyString &theDialogLines, - const SexyString &theDialogFooter, - int theButtonMode); + bool isModal, + const SexyString &theDialogHeader, + const SexyString &theDialogLines, + const SexyString &theDialogFooter, + int theButtonMode); /// @brief After 30 ticks create a new dialog and focus on it /// @param theDialogId The ID of the dialog (determines the behavior on closing and opening) @@ -370,11 +370,11 @@ class LawnApp : public SexyApp /// @param theButtonMode Button creation flags /// @return The created dialog virtual Dialog *DoDialogDelay(int theDialogId, - bool isModal, - const SexyString &theDialogHeader, - const SexyString &theDialogLines, - const SexyString &theDialogFooter, - int theButtonMode); + bool isModal, + const SexyString &theDialogHeader, + const SexyString &theDialogLines, + const SexyString &theDialogFooter, + int theButtonMode); /// @brief Shutdown the game virtual void Shutdown(); @@ -394,11 +394,11 @@ class LawnApp : public SexyApp /// @param theButtonMode Button creation flags /// @return The created dialog virtual Dialog *NewDialog(int theDialogId, - bool isModal, - const SexyString &theDialogHeader, - const SexyString &theDialogLines, - const SexyString &theDialogFooter, - int theButtonMode); + bool isModal, + const SexyString &theDialogHeader, + const SexyString &theDialogLines, + const SexyString &theDialogFooter, + int theButtonMode); /// @brief Destroy the dialog /// @param theDialogId The ID of the dialog (determines the behavior on closing and opening) @@ -636,7 +636,7 @@ class LawnApp : public SexyApp /// @brief Is the current level a BungeeBlitz level /// @return True if the GameMode is a BungeeBlitz level, false otherwise bool IsBungeeBlitzLevel(); - + /// @brief Get the SeedType awarded in a level /// @param theLevel The level to check /// @return Awarded SeedType @@ -727,15 +727,15 @@ class LawnApp : public SexyApp void PreloadForUser(); /// @brief - /// @return + /// @return int GetNumPreloadingTasks(); int LawnMessageBox(int theDialogId, - const SexyString &theHeaderName, - const SexyString &theLinesName, - const SexyString &theButton1Name, - const SexyString &theButton2Name, - int theButtonMode); + const SexyString &theHeaderName, + const SexyString &theLinesName, + const SexyString &theButton1Name, + const SexyString &theButton2Name, + int theButtonMode); /// @brief Open Credits screen void ShowCreditScreen(); @@ -909,7 +909,6 @@ class LawnApp : public SexyApp /// @param theWidth The width to center it in /// @param theHeight The height to center it in static void CenterDialog(Dialog *theDialog, int theWidth, int theHeight); - }; /// @brief Get the current level name, used for logging @@ -937,4 +936,4 @@ extern bool gSlowMo; extern LawnApp *gLawnApp; extern int gSlowMoCounter; -#endif // __LAWNAPP_H__ \ No newline at end of file +#endif // __LAWNAPP_H__ diff --git a/src/Sexy.TodLib/Definition.cpp b/src/Sexy.TodLib/Definition.cpp index a030eb3..4779e0f 100644 --- a/src/Sexy.TodLib/Definition.cpp +++ b/src/Sexy.TodLib/Definition.cpp @@ -11,7 +11,7 @@ DefSymbol gTrailFlagDefSymbols[] = { { 0, "Loops" }, - { -1, nullptr } + { -1, nullptr } }; DefField gTrailDefFields[] = { { "Image", offsetof(TrailDefinition, mImage), DefFieldType::DT_IMAGE, nullptr }, @@ -44,25 +44,25 @@ DefSymbol gParticleFlagSymbols[] = { }; DefSymbol gEmitterTypeSymbols[] = { { 0, "Circle" }, - { 1, "Box" }, - { 2, "BoxPath" }, - { 3, "CirclePath" }, - { 4, "CircleEvenSpacing" }, - { -1, nullptr } + { 1, "Box" }, + { 2, "BoxPath" }, + { 3, "CirclePath" }, + { 4, "CircleEvenSpacing" }, + { -1, nullptr } }; DefSymbol gParticleTypeSymbols[] = { { 1, "Friction" }, - { 2, "Acceleration" }, - { 3, "Attractor" }, - { 4, "MaxVelocity" }, - { 5, "Velocity" }, - { 6, "Position" }, - { 7, "SystemPosition" }, - { 8, "GroundConstraint" }, - { 9, "Shake" }, - { 10, "Circle" }, - { 11, "Away" }, - { -1, nullptr } + { 2, "Acceleration" }, + { 3, "Attractor" }, + { 4, "MaxVelocity" }, + { 5, "Velocity" }, + { 6, "Position" }, + { 7, "SystemPosition" }, + { 8, "GroundConstraint" }, + { 9, "Shake" }, + { 10, "Circle" }, + { 11, "Away" }, + { -1, nullptr } }; DefField gParticleFieldDefFields[] = { @@ -166,9 +166,9 @@ DefMap gReanimatorDefMap = { gReanimatorDefFields, sizeof(ReanimatorDefinition), static DefLoadResPath gDefLoadResPaths[4] = { { "IMAGE_", "" }, - { "IMAGE_", "particles/" }, - { "IMAGE_REANIM_", "reanim/" }, - { "IMAGE_REANIM_", "images/" } + { "IMAGE_", "particles/" }, + { "IMAGE_REANIM_", "reanim/" }, + { "IMAGE_REANIM_", "images/" } }; void *ParticleFieldConstructor(void *thePointer) @@ -325,9 +325,9 @@ bool DefinitionLoadFont(Font **theFont, const SexyString &theName) return aFont != nullptr; } -bool DefinitionLoadXML(const SexyString &theFileName, DefMap *theDefMap, void *theDefinition) +bool DefinitionLoadXML(const SexyString &theFileName, DefMap *theDefMap, void *theDefinition, bool recompile) { - return DefinitionCompileAndLoad(theFileName, theDefMap, theDefinition); + return DefinitionCompileAndLoad(theFileName, theDefMap, theDefinition, recompile); } bool DefReadFromCacheArray(void *&theReadPtr, DefinitionArrayDef *theArray, DefMap *theDefMap) @@ -555,15 +555,15 @@ bool DefinitionReadCompiledFile(const SexyString &theCompiledFilePath, DefMap *t PerfTimer aTimer; aTimer.Start(); - FILE *pFile = fopen(theCompiledFilePath.c_str(), "rb"); + PFILE *pFile = p_fopen(theCompiledFilePath.c_str(), "rb"); if (pFile) { - fseek(pFile, 0, 2); - size_t aFileSize = ftell(pFile); - fseek(pFile, 0, 0); + p_fseek(pFile, 0, 2); + size_t aFileSize = p_ftell(pFile); + p_fseek(pFile, 0, 0); aCompiledFile.mData.resize(aFileSize); - bool aReadCompressedFailed = fread(aCompiledFile.mData.data(), sizeof(uint8_t), aFileSize, pFile) != aFileSize; - fclose(pFile); + bool aReadCompressedFailed = p_fread(aCompiledFile.mData.data(), sizeof(uint8_t), aFileSize, pFile) != aFileSize; + p_fclose(pFile); if (aReadCompressedFailed) { TodTraceAndLog("[TodLib] - Failed to read compiled file: %s\n", theCompiledFilePath.c_str()); @@ -591,6 +591,10 @@ bool DefinitionReadCompiledFile(const SexyString &theCompiledFilePath, DefMap *t } bool aResult = DefMapReadFromCache(anUncompressedData, theDefMap, theDefinition); + if (!aResult) + { + TodTraceAndLog("[TodLib] - Failed to read from cache: %s\n", theCompiledFilePath.c_str()); + } return aResult; } @@ -606,6 +610,7 @@ bool DefinitionReadCompiledFile(const SexyString &theCompiledFilePath, DefMap *t } return aResult; #else + TodTraceAndLog("[TodLib] - Cache is not valid: %s\n", theCompiledFilePath.c_str()); return false; #endif } @@ -1349,28 +1354,36 @@ bool DefinitionCompileFile(const SexyString theXMLFilePath, const SexyString &th return true; } -bool DefinitionCompileAndLoad(const SexyString &theXMLFilePath, DefMap *theDefMap, void *theDefinition) +bool DefinitionCompileAndLoad(const SexyString &theXMLFilePath, DefMap *theDefMap, void *theDefinition, bool recompile) { SexyString aCompiledFilePath = DefinitionGetCompiledFilePathFromXMLFilePath(theXMLFilePath); TodHesitationTrace("predef"); - try + if (!recompile) { - if (DefinitionReadCompiledFile(aCompiledFilePath, theDefMap, theDefinition)) + try + { + if (DefinitionReadCompiledFile(aCompiledFilePath, theDefMap, theDefinition)) + { + TodHesitationTrace("loaded %s", aCompiledFilePath.c_str()); + return true; + } + } + catch (int anErrorCode) { - TodHesitationTrace("loaded %s", aCompiledFilePath.c_str()); - return true; } - } - catch (int anErrorCode) - { } PerfTimer aTimer; aTimer.Start(); + if (!recompile) + { + //write to fresh_compiled to not overwrite on game re-compile by accident + aCompiledFilePath = "fresh_" + aCompiledFilePath; + } bool aResult = - DefinitionCompileFile(theXMLFilePath, "fresh_" + aCompiledFilePath, theDefMap, - theDefinition); //write to fresh_compiled to not overwrite on game re-compile by accident + DefinitionCompileFile(theXMLFilePath, aCompiledFilePath, theDefMap, + theDefinition); TodTraceAndLog("[TodLib] - compile %d ms:'%s'", (int)aTimer.GetDuration(), aCompiledFilePath.c_str()); TodHesitationTrace("compiled %s", aCompiledFilePath.c_str()); if (aResult) diff --git a/src/Sexy.TodLib/Definition.h b/src/Sexy.TodLib/Definition.h index 39ec213..a2cd150 100644 --- a/src/Sexy.TodLib/Definition.h +++ b/src/Sexy.TodLib/Definition.h @@ -189,11 +189,11 @@ void DefWriteToCacheFont(DefinitionCompiler *theReadPtr, Font **theFont); void DefWriteToCacheFloatTrack(DefinitionCompiler *theReadPtr, FloatParameterTrack *theTrack); void DefMapWriteToCache(DefinitionCompiler *theReadPtr, DefMap *theDefMap, void *theDefinition); -bool DefinitionCompileAndLoad(const SexyString &theXMLFilePath, DefMap *theDefMap, void *theDefinition); +bool DefinitionCompileAndLoad(const SexyString &theXMLFilePath, DefMap *theDefMap, void *theDefinition, bool recompile); bool DefinitionLoadMap(XMLParser *theXmlParser, DefMap *theDefMap, void *theDefinition); bool DefinitionLoadImage(Image **theImage, const SexyString &theName); bool DefinitionLoadFont(Font **theFont, const SexyString &theName); -bool DefinitionLoadXML(const SexyString &theFilename, DefMap *theDefMap, void *theDefinition); +bool DefinitionLoadXML(const SexyString &theFilename, DefMap *theDefMap, void *theDefinition, bool recompile); void DefinitionFreeArrayField(DefinitionArrayDef *theArray, DefMap *theDefMap); void DefinitionFreeMap(DefMap *theDefMap, void *theDefinition); diff --git a/src/Sexy.TodLib/Reanimator.cpp b/src/Sexy.TodLib/Reanimator.cpp index d9f37b4..98ebaae 100644 --- a/src/Sexy.TodLib/Reanimator.cpp +++ b/src/Sexy.TodLib/Reanimator.cpp @@ -1,3 +1,4 @@ +#include #include "TodDebug.h" #include "TodCommon.h" #include "Definition.h" @@ -17,156 +18,156 @@ int gReanimationParamArraySize; ReanimationParams *gReanimationParamArray; ReanimationParams gLawnReanimationArray[(int)ReanimationType::NUM_REANIMS] = { - {ReanimationType::REANIM_LOADBAR_SPROUT, "reanim/LoadBar_sprout.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_LOADBAR_ZOMBIEHEAD, "reanim/LoadBar_Zombiehead.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_SODROLL, "reanim/SodRoll.reanim", 0}, - {ReanimationType::REANIM_FINAL_WAVE, "reanim/FinalWave.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_PEASHOOTER, "reanim/PeaShooterSingle.reanim", 0}, - {ReanimationType::REANIM_WALLNUT, "reanim/Wallnut.reanim", 0}, - {ReanimationType::REANIM_LILYPAD, "reanim/Lilypad.reanim", 0}, - {ReanimationType::REANIM_SUNFLOWER, "reanim/SunFlower.reanim", 0}, - {ReanimationType::REANIM_LAWNMOWER, "reanim/LawnMower.reanim", 0}, - {ReanimationType::REANIM_READYSETPLANT, "reanim/StartReadySetPlant.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CHERRYBOMB, "reanim/CherryBomb.reanim", 0}, - {ReanimationType::REANIM_SQUASH, "reanim/Squash.reanim", 0}, - {ReanimationType::REANIM_DOOMSHROOM, "reanim/DoomShroom.reanim", 0}, - {ReanimationType::REANIM_SNOWPEA, "reanim/SnowPea.reanim", 0}, - {ReanimationType::REANIM_REPEATER, "reanim/PeaShooter.reanim", 0}, - {ReanimationType::REANIM_SUNSHROOM, "reanim/SunShroom.reanim", 0}, - {ReanimationType::REANIM_TALLNUT, "reanim/Tallnut.reanim", 0}, - {ReanimationType::REANIM_FUMESHROOM, "reanim/Fumeshroom.reanim", 0}, - {ReanimationType::REANIM_PUFFSHROOM, "reanim/Puffshroom.reanim", 0}, - {ReanimationType::REANIM_HYPNOSHROOM, "reanim/Hypnoshroom.reanim", 0}, - {ReanimationType::REANIM_CHOMPER, "reanim/Chomper.reanim", 0}, - {ReanimationType::REANIM_ZOMBIE, "reanim/Zombie.reanim", 0}, - {ReanimationType::REANIM_SUN, "reanim/Sun.reanim", 0}, - {ReanimationType::REANIM_POTATOMINE, "reanim/PotatoMine.reanim", 0}, - {ReanimationType::REANIM_SPIKEWEED, "reanim/Caltrop.reanim", 0}, - {ReanimationType::REANIM_SPIKEROCK, "reanim/SpikeRock.reanim", 0}, - {ReanimationType::REANIM_THREEPEATER, "reanim/ThreePeater.reanim", 0}, - {ReanimationType::REANIM_MARIGOLD, "reanim/Marigold.reanim", 0}, - {ReanimationType::REANIM_ICESHROOM, "reanim/IceShroom.reanim", 0}, - {ReanimationType::REANIM_ZOMBIE_FOOTBALL, "reanim/Zombie_football.reanim", 0}, - {ReanimationType::REANIM_ZOMBIE_NEWSPAPER, "reanim/Zombie_paper.reanim", 0}, - {ReanimationType::REANIM_ZOMBIE_ZAMBONI, "reanim/Zombie_zamboni.reanim", 0}, - {ReanimationType::REANIM_SPLASH, "reanim/splash.reanim", 0}, - {ReanimationType::REANIM_JALAPENO, "reanim/Jalapeno.reanim", 0}, - {ReanimationType::REANIM_JALAPENO_FIRE, "reanim/fire.reanim", 0}, - {ReanimationType::REANIM_COIN_SILVER, "reanim/Coin_silver.reanim", 0}, - {ReanimationType::REANIM_ZOMBIE_CHARRED, "reanim/Zombie_charred.reanim", 0}, - {ReanimationType::REANIM_ZOMBIE_CHARRED_IMP, "reanim/Zombie_charred_imp.reanim", 0}, - {ReanimationType::REANIM_ZOMBIE_CHARRED_DIGGER, "reanim/Zombie_charred_digger.reanim", 0}, - {ReanimationType::REANIM_ZOMBIE_CHARRED_ZAMBONI, "reanim/Zombie_charred_zamboni.reanim", 0}, - {ReanimationType::REANIM_ZOMBIE_CHARRED_CATAPULT, "reanim/Zombie_charred_catapult.reanim", 0}, - {ReanimationType::REANIM_ZOMBIE_CHARRED_GARGANTUAR, "reanim/Zombie_charred_gargantuar.reanim", 0}, - {ReanimationType::REANIM_SCRAREYSHROOM, "reanim/ScaredyShroom.reanim", 0}, - {ReanimationType::REANIM_PUMPKIN, "reanim/Pumpkin.reanim", 0}, - {ReanimationType::REANIM_PLANTERN, "reanim/Plantern.reanim", 0}, - {ReanimationType::REANIM_TORCHWOOD, "reanim/Torchwood.reanim", 0}, - {ReanimationType::REANIM_SPLITPEA, "reanim/SplitPea.reanim", 0}, - {ReanimationType::REANIM_SEASHROOM, "reanim/SeaShroom.reanim", 0}, - {ReanimationType::REANIM_BLOVER, "reanim/Blover.reanim", 0}, - {ReanimationType::REANIM_FLOWER_POT, "reanim/Pot.reanim", 0}, - {ReanimationType::REANIM_CACTUS, "reanim/Cactus.reanim", 0}, - {ReanimationType::REANIM_DANCER, "reanim/Zombie_disco.reanim", 0}, - {ReanimationType::REANIM_TANGLEKELP, "reanim/Tanglekelp.reanim", 0}, - {ReanimationType::REANIM_STARFRUIT, "reanim/Starfruit.reanim", 0}, - {ReanimationType::REANIM_POLEVAULTER, "reanim/Zombie_polevaulter.reanim", 0}, - {ReanimationType::REANIM_BALLOON, "reanim/Zombie_balloon.reanim", 0}, - {ReanimationType::REANIM_GARGANTUAR, "reanim/Zombie_gargantuar.reanim", 0}, - {ReanimationType::REANIM_IMP, "reanim/Zombie_imp.reanim", 0}, - {ReanimationType::REANIM_DIGGER, "reanim/Zombie_digger.reanim", 0}, - {ReanimationType::REANIM_DIGGER_DIRT, "reanim/Digger_rising_dirt.reanim", 0}, - {ReanimationType::REANIM_ZOMBIE_DOLPHINRIDER, "reanim/Zombie_dolphinrider.reanim", 0}, - {ReanimationType::REANIM_POGO, "reanim/Zombie_pogo.reanim", 0}, - {ReanimationType::REANIM_BACKUP_DANCER, "reanim/Zombie_backup.reanim", 0}, - {ReanimationType::REANIM_BOBSLED, "reanim/Zombie_bobsled.reanim", 0}, - {ReanimationType::REANIM_JACKINTHEBOX, "reanim/Zombie_jackbox.reanim", 0}, - {ReanimationType::REANIM_SNORKEL, "reanim/Zombie_snorkle.reanim", 0}, - {ReanimationType::REANIM_BUNGEE, "reanim/Zombie_bungi.reanim", 0}, - {ReanimationType::REANIM_CATAPULT, "reanim/Zombie_catapult.reanim", 0}, - {ReanimationType::REANIM_LADDER, "reanim/Zombie_ladder.reanim", 0}, - {ReanimationType::REANIM_PUFF, "reanim/Puff.reanim", 0}, - {ReanimationType::REANIM_SLEEPING, "reanim/Z.reanim", 0}, - {ReanimationType::REANIM_GRAVE_BUSTER, "reanim/Gravebuster.reanim", 0}, - {ReanimationType::REANIM_ZOMBIES_WON, "reanim/ZombiesWon.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_MAGNETSHROOM, "reanim/Magnetshroom.reanim", 0}, - {ReanimationType::REANIM_BOSS, "reanim/Zombie_boss.reanim", 0}, - {ReanimationType::REANIM_CABBAGEPULT, "reanim/Cabbagepult.reanim", 0}, - {ReanimationType::REANIM_KERNELPULT, "reanim/Cornpult.reanim", 0}, - {ReanimationType::REANIM_MELONPULT, "reanim/Melonpult.reanim", 0}, - {ReanimationType::REANIM_COFFEEBEAN, "reanim/Coffeebean.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_UMBRELLALEAF, "reanim/Umbrellaleaf.reanim", 0}, - {ReanimationType::REANIM_GATLINGPEA, "reanim/GatlingPea.reanim", 0}, - {ReanimationType::REANIM_CATTAIL, "reanim/Cattail.reanim", 0}, - {ReanimationType::REANIM_GLOOMSHROOM, "reanim/GloomShroom.reanim", 0}, - {ReanimationType::REANIM_BOSS_ICEBALL, "reanim/Zombie_boss_iceball.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_BOSS_FIREBALL, "reanim/Zombie_boss_fireball.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_COBCANNON, "reanim/CobCannon.reanim", 0}, - {ReanimationType::REANIM_GARLIC, "reanim/Garlic.reanim", 0}, - {ReanimationType::REANIM_GOLD_MAGNET, "reanim/GoldMagnet.reanim", 0}, - {ReanimationType::REANIM_WINTER_MELON, "reanim/WinterMelon.reanim", 0}, - {ReanimationType::REANIM_TWIN_SUNFLOWER, "reanim/TwinSunflower.reanim", 0}, - {ReanimationType::REANIM_POOL_CLEANER, "reanim/PoolCleaner.reanim", 0}, - {ReanimationType::REANIM_ROOF_CLEANER, "reanim/RoofCleaner.reanim", 0}, - {ReanimationType::REANIM_FIRE_PEA, "reanim/FirePea.reanim", 0}, - {ReanimationType::REANIM_IMITATER, "reanim/Imitater.reanim", 0}, - {ReanimationType::REANIM_YETI, "reanim/Zombie_yeti.reanim", 0}, - {ReanimationType::REANIM_BOSS_DRIVER, "reanim/Zombie_Boss_driver.reanim", 0}, - {ReanimationType::REANIM_LAWN_MOWERED_ZOMBIE, "reanim/LawnMoweredZombie.reanim", 0}, - {ReanimationType::REANIM_CRAZY_DAVE, "reanim/CrazyDave.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_TEXT_FADE_ON, "reanim/TextFadeOn.reanim", 0}, - {ReanimationType::REANIM_HAMMER, "reanim/Hammer.reanim", 0}, - {ReanimationType::REANIM_SLOT_MACHINE_HANDLE, "reanim/SlotMachine.reanim", 0}, - {ReanimationType::REANIM_CREDITS_FOOTBALL, "reanim/Credits_Football.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CREDITS_JACKBOX, "reanim/Credits_Jackbox.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_SELECTOR_SCREEN, "reanim/SelectorScreen.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) | GetBit((int)ReanimFlags::REANIM_FAST_DRAW_IN_SW_MODE)}, - {ReanimationType::REANIM_PORTAL_CIRCLE, "reanim/Portal_Circle.reanim", 0}, - {ReanimationType::REANIM_PORTAL_SQUARE, "reanim/Portal_Square.reanim", 0}, - {ReanimationType::REANIM_ZENGARDEN_SPROUT, "reanim/ZenGarden_sprout.reanim", 0}, - {ReanimationType::REANIM_ZENGARDEN_WATERINGCAN, "reanim/ZenGarden_wateringcan.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_ZENGARDEN_FERTILIZER, "reanim/ZenGarden_fertilizer.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_ZENGARDEN_BUGSPRAY, "reanim/ZenGarden_bugspray.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_ZENGARDEN_PHONOGRAPH, "reanim/ZenGarden_phonograph.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_DIAMOND, "reanim/Diamond.reanim", 0}, - {ReanimationType::REANIM_ZOMBIE_HAND, "reanim/Zombie_hand.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_STINKY, "reanim/Stinky.reanim", 0}, - {ReanimationType::REANIM_RAKE, "reanim/Rake.reanim", 0}, - {ReanimationType::REANIM_RAIN_CIRCLE, "reanim/Rain_circle.reanim", 0}, - {ReanimationType::REANIM_RAIN_SPLASH, "reanim/Rain_splash.reanim", 0}, - {ReanimationType::REANIM_ZOMBIE_SURPRISE, "reanim/Zombie_surprise.reanim", 0}, - {ReanimationType::REANIM_COIN_GOLD, "reanim/Coin_gold.reanim", 0}, - {ReanimationType::REANIM_TREEOFWISDOM, "reanim/TreeOfWisdom.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_TREEOFWISDOM_CLOUDS, "reanim/TreeOfWisdomClouds.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_TREEOFWISDOM_TREEFOOD, "reanim/TreeFood.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CREDITS_MAIN, "reanim/Credits_Main.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) | GetBit((int)ReanimFlags::REANIM_FAST_DRAW_IN_SW_MODE)}, - {ReanimationType::REANIM_CREDITS_MAIN2, "reanim/Credits_Main2.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) | GetBit((int)ReanimFlags::REANIM_FAST_DRAW_IN_SW_MODE)}, - {ReanimationType::REANIM_CREDITS_MAIN3, "reanim/Credits_Main3.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) | GetBit((int)ReanimFlags::REANIM_FAST_DRAW_IN_SW_MODE)}, - {ReanimationType::REANIM_ZOMBIE_CREDITS_DANCE, "reanim/Zombie_credits_dance.reanim", 0}, - {ReanimationType::REANIM_CREDITS_STAGE, "reanim/Credits_stage.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CREDITS_BIGBRAIN, "reanim/Credits_BigBrain.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CREDITS_FLOWER_PETALS, "reanim/Credits_Flower_petals.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CREDITS_INFANTRY, "reanim/Credits_Infantry.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CREDITS_THROAT, "reanim/Credits_Throat.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CREDITS_CRAZYDAVE, "reanim/Credits_CrazyDave.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CREDITS_BOSSDANCE, "reanim/Credits_Bossdance.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_ZOMBIE_CREDITS_SCREEN_DOOR, "reanim/Zombie_Credits_Screendoor.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_ZOMBIE_CREDITS_CONEHEAD, "reanim/Zombie_Credits_Conehead.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CREDITS_ZOMBIEARMY1, "reanim/Credits_ZombieArmy1.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CREDITS_ZOMBIEARMY2, "reanim/Credits_ZombieArmy2.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CREDITS_TOMBSTONES, "reanim/Credits_Tombstones.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CREDITS_SOLARPOWER, "reanim/Credits_SolarPower.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CREDITS_ANYHOUR, "reanim/Credits_Anyhour.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) | GetBit((int)ReanimFlags::REANIM_FAST_DRAW_IN_SW_MODE)}, - {ReanimationType::REANIM_CREDITS_WEARETHEUNDEAD, "reanim/Credits_WeAreTheUndead.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_CREDITS_DISCOLIGHTS, "reanim/Credits_DiscoLights.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, - {ReanimationType::REANIM_FLAG, "reanim/Zombie_FlagPole.reanim", 0}, - {ReanimationType::REANIM_ZOMBATAR_HEAD, "reanim/zombatar_zombie_head.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS)}, + { ReanimationType::REANIM_LOADBAR_SPROUT, "reanim/LoadBar_sprout.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_LOADBAR_ZOMBIEHEAD, "reanim/LoadBar_Zombiehead.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_SODROLL, "reanim/SodRoll.reanim", 0 }, + { ReanimationType::REANIM_FINAL_WAVE, "reanim/FinalWave.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_PEASHOOTER, "reanim/PeaShooterSingle.reanim", 0 }, + { ReanimationType::REANIM_WALLNUT, "reanim/Wallnut.reanim", 0 }, + { ReanimationType::REANIM_LILYPAD, "reanim/Lilypad.reanim", 0 }, + { ReanimationType::REANIM_SUNFLOWER, "reanim/SunFlower.reanim", 0 }, + { ReanimationType::REANIM_LAWNMOWER, "reanim/LawnMower.reanim", 0 }, + { ReanimationType::REANIM_READYSETPLANT, "reanim/StartReadySetPlant.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CHERRYBOMB, "reanim/CherryBomb.reanim", 0 }, + { ReanimationType::REANIM_SQUASH, "reanim/Squash.reanim", 0 }, + { ReanimationType::REANIM_DOOMSHROOM, "reanim/DoomShroom.reanim", 0 }, + { ReanimationType::REANIM_SNOWPEA, "reanim/SnowPea.reanim", 0 }, + { ReanimationType::REANIM_REPEATER, "reanim/PeaShooter.reanim", 0 }, + { ReanimationType::REANIM_SUNSHROOM, "reanim/SunShroom.reanim", 0 }, + { ReanimationType::REANIM_TALLNUT, "reanim/Tallnut.reanim", 0 }, + { ReanimationType::REANIM_FUMESHROOM, "reanim/Fumeshroom.reanim", 0 }, + { ReanimationType::REANIM_PUFFSHROOM, "reanim/Puffshroom.reanim", 0 }, + { ReanimationType::REANIM_HYPNOSHROOM, "reanim/Hypnoshroom.reanim", 0 }, + { ReanimationType::REANIM_CHOMPER, "reanim/Chomper.reanim", 0 }, + { ReanimationType::REANIM_ZOMBIE, "reanim/Zombie.reanim", 0 }, + { ReanimationType::REANIM_SUN, "reanim/Sun.reanim", 0 }, + { ReanimationType::REANIM_POTATOMINE, "reanim/PotatoMine.reanim", 0 }, + { ReanimationType::REANIM_SPIKEWEED, "reanim/Caltrop.reanim", 0 }, + { ReanimationType::REANIM_SPIKEROCK, "reanim/SpikeRock.reanim", 0 }, + { ReanimationType::REANIM_THREEPEATER, "reanim/ThreePeater.reanim", 0 }, + { ReanimationType::REANIM_MARIGOLD, "reanim/Marigold.reanim", 0 }, + { ReanimationType::REANIM_ICESHROOM, "reanim/IceShroom.reanim", 0 }, + { ReanimationType::REANIM_ZOMBIE_FOOTBALL, "reanim/Zombie_football.reanim", 0 }, + { ReanimationType::REANIM_ZOMBIE_NEWSPAPER, "reanim/Zombie_paper.reanim", 0 }, + { ReanimationType::REANIM_ZOMBIE_ZAMBONI, "reanim/Zombie_zamboni.reanim", 0 }, + { ReanimationType::REANIM_SPLASH, "reanim/splash.reanim", 0 }, + { ReanimationType::REANIM_JALAPENO, "reanim/Jalapeno.reanim", 0 }, + { ReanimationType::REANIM_JALAPENO_FIRE, "reanim/fire.reanim", 0 }, + { ReanimationType::REANIM_COIN_SILVER, "reanim/Coin_silver.reanim", 0 }, + { ReanimationType::REANIM_ZOMBIE_CHARRED, "reanim/Zombie_charred.reanim", 0 }, + { ReanimationType::REANIM_ZOMBIE_CHARRED_IMP, "reanim/Zombie_charred_imp.reanim", 0 }, + { ReanimationType::REANIM_ZOMBIE_CHARRED_DIGGER, "reanim/Zombie_charred_digger.reanim", 0 }, + { ReanimationType::REANIM_ZOMBIE_CHARRED_ZAMBONI, "reanim/Zombie_charred_zamboni.reanim", 0 }, + { ReanimationType::REANIM_ZOMBIE_CHARRED_CATAPULT, "reanim/Zombie_charred_catapult.reanim", 0 }, + { ReanimationType::REANIM_ZOMBIE_CHARRED_GARGANTUAR, "reanim/Zombie_charred_gargantuar.reanim", 0 }, + { ReanimationType::REANIM_SCRAREYSHROOM, "reanim/ScaredyShroom.reanim", 0 }, + { ReanimationType::REANIM_PUMPKIN, "reanim/Pumpkin.reanim", 0 }, + { ReanimationType::REANIM_PLANTERN, "reanim/Plantern.reanim", 0 }, + { ReanimationType::REANIM_TORCHWOOD, "reanim/Torchwood.reanim", 0 }, + { ReanimationType::REANIM_SPLITPEA, "reanim/SplitPea.reanim", 0 }, + { ReanimationType::REANIM_SEASHROOM, "reanim/SeaShroom.reanim", 0 }, + { ReanimationType::REANIM_BLOVER, "reanim/Blover.reanim", 0 }, + { ReanimationType::REANIM_FLOWER_POT, "reanim/Pot.reanim", 0 }, + { ReanimationType::REANIM_CACTUS, "reanim/Cactus.reanim", 0 }, + { ReanimationType::REANIM_DANCER, "reanim/Zombie_disco.reanim", 0 }, + { ReanimationType::REANIM_TANGLEKELP, "reanim/Tanglekelp.reanim", 0 }, + { ReanimationType::REANIM_STARFRUIT, "reanim/Starfruit.reanim", 0 }, + { ReanimationType::REANIM_POLEVAULTER, "reanim/Zombie_polevaulter.reanim", 0 }, + { ReanimationType::REANIM_BALLOON, "reanim/Zombie_balloon.reanim", 0 }, + { ReanimationType::REANIM_GARGANTUAR, "reanim/Zombie_gargantuar.reanim", 0 }, + { ReanimationType::REANIM_IMP, "reanim/Zombie_imp.reanim", 0 }, + { ReanimationType::REANIM_DIGGER, "reanim/Zombie_digger.reanim", 0 }, + { ReanimationType::REANIM_DIGGER_DIRT, "reanim/Digger_rising_dirt.reanim", 0 }, + { ReanimationType::REANIM_ZOMBIE_DOLPHINRIDER, "reanim/Zombie_dolphinrider.reanim", 0 }, + { ReanimationType::REANIM_POGO, "reanim/Zombie_pogo.reanim", 0 }, + { ReanimationType::REANIM_BACKUP_DANCER, "reanim/Zombie_backup.reanim", 0 }, + { ReanimationType::REANIM_BOBSLED, "reanim/Zombie_bobsled.reanim", 0 }, + { ReanimationType::REANIM_JACKINTHEBOX, "reanim/Zombie_jackbox.reanim", 0 }, + { ReanimationType::REANIM_SNORKEL, "reanim/Zombie_snorkle.reanim", 0 }, + { ReanimationType::REANIM_BUNGEE, "reanim/Zombie_bungi.reanim", 0 }, + { ReanimationType::REANIM_CATAPULT, "reanim/Zombie_catapult.reanim", 0 }, + { ReanimationType::REANIM_LADDER, "reanim/Zombie_ladder.reanim", 0 }, + { ReanimationType::REANIM_PUFF, "reanim/Puff.reanim", 0 }, + { ReanimationType::REANIM_SLEEPING, "reanim/Z.reanim", 0 }, + { ReanimationType::REANIM_GRAVE_BUSTER, "reanim/Gravebuster.reanim", 0 }, + { ReanimationType::REANIM_ZOMBIES_WON, "reanim/ZombiesWon.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_MAGNETSHROOM, "reanim/Magnetshroom.reanim", 0 }, + { ReanimationType::REANIM_BOSS, "reanim/Zombie_boss.reanim", 0 }, + { ReanimationType::REANIM_CABBAGEPULT, "reanim/Cabbagepult.reanim", 0 }, + { ReanimationType::REANIM_KERNELPULT, "reanim/Cornpult.reanim", 0 }, + { ReanimationType::REANIM_MELONPULT, "reanim/Melonpult.reanim", 0 }, + { ReanimationType::REANIM_COFFEEBEAN, "reanim/Coffeebean.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_UMBRELLALEAF, "reanim/Umbrellaleaf.reanim", 0 }, + { ReanimationType::REANIM_GATLINGPEA, "reanim/GatlingPea.reanim", 0 }, + { ReanimationType::REANIM_CATTAIL, "reanim/Cattail.reanim", 0 }, + { ReanimationType::REANIM_GLOOMSHROOM, "reanim/GloomShroom.reanim", 0 }, + { ReanimationType::REANIM_BOSS_ICEBALL, "reanim/Zombie_boss_iceball.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_BOSS_FIREBALL, "reanim/Zombie_boss_fireball.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_COBCANNON, "reanim/CobCannon.reanim", 0 }, + { ReanimationType::REANIM_GARLIC, "reanim/Garlic.reanim", 0 }, + { ReanimationType::REANIM_GOLD_MAGNET, "reanim/GoldMagnet.reanim", 0 }, + { ReanimationType::REANIM_WINTER_MELON, "reanim/WinterMelon.reanim", 0 }, + { ReanimationType::REANIM_TWIN_SUNFLOWER, "reanim/TwinSunflower.reanim", 0 }, + { ReanimationType::REANIM_POOL_CLEANER, "reanim/PoolCleaner.reanim", 0 }, + { ReanimationType::REANIM_ROOF_CLEANER, "reanim/RoofCleaner.reanim", 0 }, + { ReanimationType::REANIM_FIRE_PEA, "reanim/FirePea.reanim", 0 }, + { ReanimationType::REANIM_IMITATER, "reanim/Imitater.reanim", 0 }, + { ReanimationType::REANIM_YETI, "reanim/Zombie_yeti.reanim", 0 }, + { ReanimationType::REANIM_BOSS_DRIVER, "reanim/Zombie_Boss_driver.reanim", 0 }, + { ReanimationType::REANIM_LAWN_MOWERED_ZOMBIE, "reanim/LawnMoweredZombie.reanim", 0 }, + { ReanimationType::REANIM_CRAZY_DAVE, "reanim/CrazyDave.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_TEXT_FADE_ON, "reanim/TextFadeOn.reanim", 0 }, + { ReanimationType::REANIM_HAMMER, "reanim/Hammer.reanim", 0 }, + { ReanimationType::REANIM_SLOT_MACHINE_HANDLE, "reanim/SlotMachine.reanim", 0 }, + { ReanimationType::REANIM_CREDITS_FOOTBALL, "reanim/Credits_Football.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CREDITS_JACKBOX, "reanim/Credits_Jackbox.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_SELECTOR_SCREEN, "reanim/SelectorScreen.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) | GetBit((int)ReanimFlags::REANIM_FAST_DRAW_IN_SW_MODE) }, + { ReanimationType::REANIM_PORTAL_CIRCLE, "reanim/Portal_Circle.reanim", 0 }, + { ReanimationType::REANIM_PORTAL_SQUARE, "reanim/Portal_Square.reanim", 0 }, + { ReanimationType::REANIM_ZENGARDEN_SPROUT, "reanim/ZenGarden_sprout.reanim", 0 }, + { ReanimationType::REANIM_ZENGARDEN_WATERINGCAN, "reanim/ZenGarden_wateringcan.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_ZENGARDEN_FERTILIZER, "reanim/ZenGarden_fertilizer.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_ZENGARDEN_BUGSPRAY, "reanim/ZenGarden_bugspray.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_ZENGARDEN_PHONOGRAPH, "reanim/ZenGarden_phonograph.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_DIAMOND, "reanim/Diamond.reanim", 0 }, + { ReanimationType::REANIM_ZOMBIE_HAND, "reanim/Zombie_hand.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_STINKY, "reanim/Stinky.reanim", 0 }, + { ReanimationType::REANIM_RAKE, "reanim/Rake.reanim", 0 }, + { ReanimationType::REANIM_RAIN_CIRCLE, "reanim/Rain_circle.reanim", 0 }, + { ReanimationType::REANIM_RAIN_SPLASH, "reanim/Rain_splash.reanim", 0 }, + { ReanimationType::REANIM_ZOMBIE_SURPRISE, "reanim/Zombie_surprise.reanim", 0 }, + { ReanimationType::REANIM_COIN_GOLD, "reanim/Coin_gold.reanim", 0 }, + { ReanimationType::REANIM_TREEOFWISDOM, "reanim/TreeOfWisdom.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_TREEOFWISDOM_CLOUDS, "reanim/TreeOfWisdomClouds.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_TREEOFWISDOM_TREEFOOD, "reanim/TreeFood.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CREDITS_MAIN, "reanim/Credits_Main.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) | GetBit((int)ReanimFlags::REANIM_FAST_DRAW_IN_SW_MODE) }, + { ReanimationType::REANIM_CREDITS_MAIN2, "reanim/Credits_Main2.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) | GetBit((int)ReanimFlags::REANIM_FAST_DRAW_IN_SW_MODE) }, + { ReanimationType::REANIM_CREDITS_MAIN3, "reanim/Credits_Main3.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) | GetBit((int)ReanimFlags::REANIM_FAST_DRAW_IN_SW_MODE) }, + { ReanimationType::REANIM_ZOMBIE_CREDITS_DANCE, "reanim/Zombie_credits_dance.reanim", 0 }, + { ReanimationType::REANIM_CREDITS_STAGE, "reanim/Credits_stage.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CREDITS_BIGBRAIN, "reanim/Credits_BigBrain.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CREDITS_FLOWER_PETALS, "reanim/Credits_Flower_petals.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CREDITS_INFANTRY, "reanim/Credits_Infantry.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CREDITS_THROAT, "reanim/Credits_Throat.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CREDITS_CRAZYDAVE, "reanim/Credits_CrazyDave.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CREDITS_BOSSDANCE, "reanim/Credits_Bossdance.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_ZOMBIE_CREDITS_SCREEN_DOOR, "reanim/Zombie_Credits_Screendoor.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_ZOMBIE_CREDITS_CONEHEAD, "reanim/Zombie_Credits_Conehead.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CREDITS_ZOMBIEARMY1, "reanim/Credits_ZombieArmy1.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CREDITS_ZOMBIEARMY2, "reanim/Credits_ZombieArmy2.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CREDITS_TOMBSTONES, "reanim/Credits_Tombstones.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CREDITS_SOLARPOWER, "reanim/Credits_SolarPower.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CREDITS_ANYHOUR, "reanim/Credits_Anyhour.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) | GetBit((int)ReanimFlags::REANIM_FAST_DRAW_IN_SW_MODE) }, + { ReanimationType::REANIM_CREDITS_WEARETHEUNDEAD, "reanim/Credits_WeAreTheUndead.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_CREDITS_DISCOLIGHTS, "reanim/Credits_DiscoLights.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, + { ReanimationType::REANIM_FLAG, "reanim/Zombie_FlagPole.reanim", 0 }, + { ReanimationType::REANIM_ZOMBATAR_HEAD, "reanim/zombatar_zombie_head.reanim", GetBit((int)ReanimFlags::REANIM_NO_ATLAS) }, }; ReanimatorTransform::ReanimatorTransform() - : mTransX(DEFAULT_FIELD_PLACEHOLDER), mTransY(DEFAULT_FIELD_PLACEHOLDER), mSkewX(DEFAULT_FIELD_PLACEHOLDER), - mSkewY(DEFAULT_FIELD_PLACEHOLDER), mScaleX(DEFAULT_FIELD_PLACEHOLDER), mScaleY(DEFAULT_FIELD_PLACEHOLDER), - mFrame(DEFAULT_FIELD_PLACEHOLDER), mAlpha(DEFAULT_FIELD_PLACEHOLDER), mImage(nullptr), mFont(nullptr), mText("") + : mTransX(DEFAULT_FIELD_PLACEHOLDER), mTransY(DEFAULT_FIELD_PLACEHOLDER), mSkewX(DEFAULT_FIELD_PLACEHOLDER), + mSkewY(DEFAULT_FIELD_PLACEHOLDER), mScaleX(DEFAULT_FIELD_PLACEHOLDER), mScaleY(DEFAULT_FIELD_PLACEHOLDER), + mFrame(DEFAULT_FIELD_PLACEHOLDER), mAlpha(DEFAULT_FIELD_PLACEHOLDER), mImage(nullptr), mFont(nullptr), mText("") { } @@ -186,9 +187,9 @@ void ReanimationFillInMissingData(void *&thePrev, void *&theValue) thePrev = theValue; } -bool ReanimationLoadDefinition(const SexyString &theFileName, ReanimatorDefinition *theDefinition) +bool ReanimationLoadDefinition(const SexyString &theFileName, ReanimatorDefinition *theDefinition, bool recompile) { - if (!DefinitionLoadXML(theFileName, &gReanimatorDefMap, theDefinition)) + if (!DefinitionLoadXML(theFileName, &gReanimatorDefMap, theDefinition, recompile)) return false; for (int aTrackIndex = 0; aTrackIndex < theDefinition->mTrackCount; aTrackIndex++) @@ -368,7 +369,7 @@ void Reanimation::ReanimationInitialize(float theX, float theY, ReanimatorDefini mFrameCount = mDefinition->mTracks[0].mTransformCount; int aItemSize = theDefinition->mTrackCount * sizeof(ReanimatorTrackInstance); mTrackInstances = (ReanimatorTrackInstance *)FindGlobalAllocator(aItemSize)->Calloc( - aItemSize); + aItemSize); for (int aTrackIndex = 0; aTrackIndex < mDefinition->mTrackCount; aTrackIndex++) { ReanimatorTrackInstance *aTrack = &mTrackInstances[aTrackIndex]; @@ -483,9 +484,9 @@ void Reanimation::Update() } void BlendTransform(ReanimatorTransform *theResult, - const ReanimatorTransform &theTransform1, - const ReanimatorTransform &theTransform2, - float theBlendFactor) + const ReanimatorTransform &theTransform1, + const ReanimatorTransform &theTransform2, + float theBlendFactor) { theResult->mTransX = FloatLerp(theTransform1.mTransX, theTransform2.mTransX, theBlendFactor); theResult->mTransY = FloatLerp(theTransform1.mTransY, theTransform2.mTransY, theBlendFactor); @@ -524,15 +525,15 @@ void Reanimation::GetCurrentTransform(int theTrackIndex, ReanimatorTransform *th { float aBlendFactor = aTrack->mBlendCounter / (float)aTrack->mBlendTime; BlendTransform(theTransformCurrent, - *theTransformCurrent, - aTrack->mBlendTransform, - aBlendFactor); + *theTransformCurrent, + aTrack->mBlendTransform, + aBlendFactor); } } void Reanimation::GetTransformAtTime(int theTrackIndex, - ReanimatorTransform *theTransform, - ReanimatorFrameTime *theFrameTime) + ReanimatorTransform *theTransform, + ReanimatorFrameTime *theFrameTime) { TOD_ASSERT(theTrackIndex >= 0 && theTrackIndex < mDefinition->mTrackCount); ReanimatorTrack *aTrack = &mDefinition->mTracks[theTrackIndex]; @@ -552,7 +553,7 @@ void Reanimation::GetTransformAtTime(int theTrackIndex, theTransform->mText = aTransBefore.mText; if (aTransBefore.mFrame != -1.0f && aTransAfter.mFrame == -1.0f && theFrameTime->mFraction > 0.0f && - mTrackInstances[theTrackIndex].mTruncateDisappearingFrames) + mTrackInstances[theTrackIndex].mTruncateDisappearingFrames) theTransform->mFrame = -1.0f; else theTransform->mFrame = aTransBefore.mFrame; @@ -575,18 +576,18 @@ void Reanimation::MatrixFromTransform(const ReanimatorTransform &theTransform, S } void Reanimation::ReanimBltMatrix(Graphics *g, - Image *theImage, - SexyMatrix3 &theTransform, - const Rect &theClipRect, - const Color &theColor, - int theDrawMode, - const Rect &theSrcRect) -{ - if (!gSexyAppBase->Is3DAccelerated() && - TestBit(gReanimationParamArray[(int)mReanimationType].mReanimParamFlags, (int)ReanimFlags::REANIM_FAST_DRAW_IN_SW_MODE) && - FloatApproxEqual(theTransform.m01, 0.0f) && FloatApproxEqual(theTransform.m10, 0.0f) && - theTransform.m00 > 0.0f && theTransform.m11 > 0.0f && - theColor == Color::White) + Image *theImage, + SexyMatrix3 &theTransform, + const Rect &theClipRect, + const Color &theColor, + int theDrawMode, + const Rect &theSrcRect) +{ + if (!gSexyAppBase->Is3DAccelerated() && + TestBit(gReanimationParamArray[(int)mReanimationType].mReanimParamFlags, (int)ReanimFlags::REANIM_FAST_DRAW_IN_SW_MODE) && + FloatApproxEqual(theTransform.m01, 0.0f) && FloatApproxEqual(theTransform.m10, 0.0f) && + theTransform.m00 > 0.0f && theTransform.m11 > 0.0f && + theColor == Color::White) { float aScaleX = theTransform.m00; float aScaleY = theTransform.m11; @@ -661,7 +662,7 @@ bool Reanimation::DrawTrack(Graphics *g, int theTrackIndex, int theRenderGroup, Image *aImage = aTransform.mImage; ReanimAtlasImage *aAtlasImage = nullptr; if (mDefinition->mReanimAtlas != nullptr && - aImage != nullptr) + aImage != nullptr) { aAtlasImage = mDefinition->mReanimAtlas->GetEncodedReanimAtlas(aImage); if (aAtlasImage != nullptr) @@ -700,13 +701,13 @@ bool Reanimation::DrawTrack(Graphics *g, int theTrackIndex, int theRenderGroup, SexyMatrix3 aTransformMatrix; MatrixFromTransform(aTransform, aTransformMatrix); - SexyMatrix3Multiply(aMatrix, aTransformMatrix, aMatrix); + SexyMatrix3Multiply(aMatrix, aTransformMatrix, aMatrix); SexyMatrix3Multiply(aMatrix, mOverlayMatrix, aMatrix); SexyMatrix3Translation(aMatrix, - aTrackInstance->mShakeX + g->mTransX - 0.5f, - aTrackInstance->mShakeY + g->mTransY - 0.5f); + aTrackInstance->mShakeX + g->mTransX - 0.5f, + aTrackInstance->mShakeY + g->mTransY - 0.5f); - if (aAtlasImage != nullptr) + if (aAtlasImage != nullptr) { Rect aSrcRect(aAtlasImage->mX, aAtlasImage->mY, aAtlasImage->mWidth, aAtlasImage->mHeight); aImage = mDefinition->mReanimAtlas->mMemoryImage; @@ -715,22 +716,22 @@ bool Reanimation::DrawTrack(Graphics *g, int theTrackIndex, int theRenderGroup, aImage = FilterEffectGetImage(aImage, mFilterEffect); } theTriangleGroup->AddTriangle( - g, aImage, aMatrix, aClipRect, aColor, g->mDrawMode, aSrcRect); + g, aImage, aMatrix, aClipRect, aColor, g->mDrawMode, aSrcRect); if (mEnableExtraAdditiveDraw && - !aTrackInstance->mIgnoreExtraAdditiveColor) + !aTrackInstance->mIgnoreExtraAdditiveColor) { theTriangleGroup->AddTriangle( - g, aImage, aMatrix, aClipRect, aExtraAdditiveColor, Graphics::DRAWMODE_ADDITIVE, aSrcRect); + g, aImage, aMatrix, aClipRect, aExtraAdditiveColor, Graphics::DRAWMODE_ADDITIVE, aSrcRect); } if (mEnableExtraOverlayDraw) { theTriangleGroup->AddTriangle(g, - FilterEffectGetImage(aImage, FilterEffect::FILTER_EFFECT_WHITE), - aMatrix, - aClipRect, - aExtraOverlayColor, - Graphics::DRAWMODE_NORMAL, - aSrcRect); + FilterEffectGetImage(aImage, FilterEffect::FILTER_EFFECT_WHITE), + aMatrix, + aClipRect, + aExtraOverlayColor, + Graphics::DRAWMODE_NORMAL, + aSrcRect); } } else if (aImage != nullptr) @@ -759,7 +760,7 @@ bool Reanimation::DrawTrack(Graphics *g, int theTrackIndex, int theRenderGroup, { Image *aOverlayImage = FilterEffectGetImage(aImage, FilterEffect::FILTER_EFFECT_WHITE); ReanimBltMatrix( - g, aOverlayImage, aMatrix, aClipRect, aExtraOverlayColor, Graphics::DRAWMODE_NORMAL, aSrcRect); + g, aOverlayImage, aMatrix, aClipRect, aExtraOverlayColor, Graphics::DRAWMODE_NORMAL, aSrcRect); } } else if (aTransform.mFont != nullptr && *aTransform.mText != '\0') @@ -791,7 +792,7 @@ Image *Reanimation::GetCurrentTrackImage(const char *theTrackName) Image *aImage = aTransform.mImage; if (mDefinition->mReanimAtlas != nullptr && - aImage != nullptr) + aImage != nullptr) { ReanimAtlasImage *aAtlasImage = mDefinition->mReanimAtlas->GetEncodedReanimAtlas(aImage); if (aAtlasImage != nullptr) @@ -808,7 +809,7 @@ void Reanimation::GetTrackMatrix(int theTrackIndex, SexyTransform2D &theMatrix) int aImageFrame = FloatRoundToInt(aTransform.mFrame); Image *aImage = aTransform.mImage; if (mDefinition->mReanimAtlas != nullptr && - aImage != nullptr) + aImage != nullptr) { ReanimAtlasImage *aAtlasImage = mDefinition->mReanimAtlas->GetEncodedReanimAtlas(aImage); if (aAtlasImage != nullptr) @@ -837,8 +838,8 @@ void Reanimation::GetFrameTime(ReanimatorFrameTime *theFrameTime) TOD_ASSERT(mFrameStart + mFrameCount <= mDefinition->mTracks[0].mTransformCount); int aFrameCount; if (mLoopType == ReanimLoopType::REANIM_PLAY_ONCE_FULL_LAST_FRAME || - mLoopType == ReanimLoopType::REANIM_LOOP_FULL_LAST_FRAME || - mLoopType == ReanimLoopType::REANIM_PLAY_ONCE_FULL_LAST_FRAME_AND_HOLD) + mLoopType == ReanimLoopType::REANIM_LOOP_FULL_LAST_FRAME || + mLoopType == ReanimLoopType::REANIM_PLAY_ONCE_FULL_LAST_FRAME_AND_HOLD) aFrameCount = mFrameCount; else aFrameCount = mFrameCount - 1; @@ -854,7 +855,7 @@ void Reanimation::GetFrameTime(ReanimatorFrameTime *theFrameTime) else theFrameTime->mAnimFrameAfterInt = theFrameTime->mAnimFrameBeforeInt + 1; TOD_ASSERT(theFrameTime->mAnimFrameBeforeInt >= 0 && - theFrameTime->mAnimFrameAfterInt < mDefinition->mTracks[0].mTransformCount); + theFrameTime->mAnimFrameAfterInt < mDefinition->mTracks[0].mTransformCount); } void Reanimation::DrawRenderGroup(Graphics *g, int theRenderGroup) @@ -925,16 +926,16 @@ void Reanimation::GetTrackBasePoseMatrix(int theTrackIndex, SexyTransform2D &the } int aBasePos = mFrameBasePose == -1 ? mFrameStart : mFrameBasePose; - ReanimatorFrameTime aStartTime = {0.0f, aBasePos, aBasePos + 1}; + ReanimatorFrameTime aStartTime = { 0.0f, aBasePos, aBasePos + 1 }; ReanimatorTransform aTransformStart; GetTransformAtTime(theTrackIndex, &aTransformStart, &aStartTime); MatrixFromTransform(aTransformStart, theBasePosMatrix); } AttachEffect *Reanimation::AttachParticleToTrack(const char *theTrackName, - TodParticleSystem *theParticleSystem, - float thePosX, - float thePosY) + TodParticleSystem *theParticleSystem, + float thePosX, + float thePosY) { int aTrackIndex = FindTrackIndex(theTrackName); ReanimatorTrackInstance *aTrackInstance = &mTrackInstances[aTrackIndex]; @@ -1088,9 +1089,9 @@ void ReanimationHolder::InitializeHolder() } Reanimation *ReanimationHolder::AllocReanimation(float theX, - float theY, - int theRenderOrder, - ReanimationType theReanimationType) + float theY, + int theRenderOrder, + ReanimationType theReanimationType) { TOD_ASSERT(mReanimations.mSize != mReanimations.mMaxSize); Reanimation *aReanim = mReanimations.DataArrayAlloc(); @@ -1099,8 +1100,12 @@ Reanimation *ReanimationHolder::AllocReanimation(float theX, aReanim->ReanimationInitializeType(theX, theY, theReanimationType); return aReanim; } - void ReanimatorEnsureDefinitionLoaded(ReanimationType theReanimType, bool theIsPreloading) +{ + ReanimatorEnsureDefinitionRecompiled(theReanimType, theIsPreloading, false); +} + +void ReanimatorEnsureDefinitionRecompiled(ReanimationType theReanimType, bool theIsPreloading, bool recompile) { TOD_ASSERT(theReanimType >= 0 && theReanimType < gReanimatorDefCount); ReanimatorDefinition *aReanimDef = &gReanimatorDefArray[(int)theReanimType]; @@ -1118,30 +1123,25 @@ void ReanimatorEnsureDefinitionLoaded(ReanimationType theReanimType, bool theIsP TodTraceAndLog("[TodLib] - Cheater failed to preload '%s' on %s", aReanimParams->mReanimFileName, gGetCurrentLevelName().c_str()); else TodTraceAndLog("[TodLib] - Non-cheater failed to preload '%s' on %s", aReanimParams->mReanimFileName, gGetCurrentLevelName().c_str()); - } + } PerfTimer aTimer; aTimer.Start(); TodHesitationBracket aHesitation("Load Reanim '%s'", aReanimParams->mReanimFileName); - if (!ReanimationLoadDefinition(aReanimParams->mReanimFileName, aReanimDef)) + if (!ReanimationLoadDefinition(aReanimParams->mReanimFileName, aReanimDef, recompile)) { - char aBuf[1024]; -#ifdef _WIN32 - sprintf_s<1024U>(aBuf, "Failed to load reanim '%s'", aReanimParams->mReanimFileName); -#else - snprintf(aBuf, 1024, "Failed to load reanim '%s'", aReanimParams->mReanimFileName); -#endif - TodErrorMessageBox(aBuf, "Error"); + auto aMessage = std::format("Failed to load reanim '{}'", aReanimParams->mReanimFileName); + TodErrorMessageBox(aMessage.c_str(), "Error"); } int aDuration = aTimer.GetDuration(); if (aDuration > 100) // (beta only) - report if took too long TodTraceAndLog("[TodLib] - LOADING:Long reanim '%s' %d ms on %s", - aReanimParams->mReanimFileName, - aDuration, - gGetCurrentLevelName().c_str()); + aReanimParams->mReanimFileName, + aDuration, + gGetCurrentLevelName().c_str()); } -void ReanimatorLoadDefinitions(ReanimationParams *theReanimationParamArray, int theReanimationParamArraySize) +void ReanimatorLoadDefinitions(ReanimationParams *theReanimationParamArray, int theReanimationParamArraySize, bool recompile) { TodHesitationBracket aHesitation("ReanimatorLoadDefinitions"); TOD_ASSERT(!gReanimationParamArray && !gReanimatorDefArray); @@ -1154,8 +1154,10 @@ void ReanimatorLoadDefinitions(ReanimationParams *theReanimationParamArray, int { ReanimationParams *aReanimationParams = &theReanimationParamArray[i]; TOD_ASSERT(aReanimationParams->mReanimationType == i); - if (DefinitionIsCompiled(StringToSexyString(aReanimationParams->mReanimFileName))) - ReanimatorEnsureDefinitionLoaded(aReanimationParams->mReanimationType, true); + if (recompile || DefinitionIsCompiled(StringToSexyString(aReanimationParams->mReanimFileName))) + { + ReanimatorEnsureDefinitionRecompiled(aReanimationParams->mReanimationType, true, recompile); + } } } @@ -1180,7 +1182,7 @@ float Reanimation::GetTrackVelocity(const char *theTrackName) ReanimatorTrack *aTrack = &mDefinition->mTracks[aTrackIndex]; float aDis = aTrack->mTransforms[aFrameTime.mAnimFrameAfterInt].mTransX - - aTrack->mTransforms[aFrameTime.mAnimFrameBeforeInt].mTransX; + aTrack->mTransforms[aFrameTime.mAnimFrameBeforeInt].mTransX; return aDis * SECONDS_PER_UPDATE * mAnimRate; } @@ -1199,7 +1201,7 @@ void Reanimation::ShowOnlyTrack(const char *theTrackName) for (int i = 0; i < mDefinition->mTrackCount; i++) { mTrackInstances[i].mRenderGroup = - stricmp(mDefinition->mTracks[i].mName, theTrackName) == 0 ? RENDER_GROUP_NORMAL : RENDER_GROUP_HIDDEN; + stricmp(mDefinition->mTracks[i].mName, theTrackName) == 0 ? RENDER_GROUP_NORMAL : RENDER_GROUP_HIDDEN; } } @@ -1220,7 +1222,7 @@ void Reanimation::AssignRenderGroupToPrefix(const char *theTrackName, int theRen { const char *const aTrackName = mDefinition->mTracks[i].mName; if (strlen(aTrackName) >= aPrifixLength && - !strnicmp(aTrackName, theTrackName, aPrifixLength)) + !strnicmp(aTrackName, theTrackName, aPrifixLength)) mTrackInstances[i].mRenderGroup = theRenderGroup; } } @@ -1229,11 +1231,11 @@ void Reanimation::PropogateColorToAttachments() { for (int i = 0; i < mDefinition->mTrackCount; i++) AttachmentPropogateColor(mTrackInstances[i].mAttachmentID, - mColorOverride, - mEnableExtraAdditiveDraw, - mExtraAdditiveColor, - mEnableExtraOverlayDraw, - mExtraOverlayColor); + mColorOverride, + mEnableExtraAdditiveDraw, + mExtraAdditiveColor, + mEnableExtraOverlayDraw, + mExtraOverlayColor); } bool Reanimation::ShouldTriggerTimedEvent(float theEventTime) @@ -1252,7 +1254,7 @@ void Reanimation::PlayReanim(const char *theTrackName, ReanimLoopType theLoopTyp { if (theBlendTime > 0) StartBlend(theBlendTime); - if (theAnimRate != 0.0f) + if (theAnimRate != 0.0f) mAnimRate = theAnimRate; mLoopType = theLoopType; @@ -1260,7 +1262,6 @@ void Reanimation::PlayReanim(const char *theTrackName, ReanimLoopType theLoopTyp SetFramesForLayer(theTrackName); } - void Reanimation::ParseAttacherTrack(const ReanimatorTransform &theTransform, AttacherInfo &theAttacherInfo) { theAttacherInfo.mReanimName = ""; @@ -1283,18 +1284,18 @@ void Reanimation::ParseAttacherTrack(const ReanimatorTransform &theTransform, At if (aTrackName) { theAttacherInfo.mReanimName.assign(aReanimName + 2, - aTrackName - aReanimName - 2); + aTrackName - aReanimName - 2); if (aTags) theAttacherInfo.mTrackName.assign(aTrackName + 2, aTags - aTrackName - 2); else theAttacherInfo.mTrackName.assign(aTrackName + 2); } - else if (aTags) + else if (aTags) theAttacherInfo.mReanimName.assign(aReanimName + 2, aTags - aReanimName - 2); else theAttacherInfo.mReanimName.assign(aReanimName + 2); - while (aTags) + while (aTags) { const char *aTagEnds = strstr(aTags + 1, "]"); if (aTagEnds == nullptr) @@ -1325,11 +1326,11 @@ void Reanimation::AttacherSynchWalkSpeed(int theTrackIndex, Reanimation *theAtta int aPlaceHolderFrameStart = aFrameTime.mAnimFrameBeforeInt; while (aPlaceHolderFrameStart > mFrameStart && - aTrack->mTransforms[aPlaceHolderFrameStart - 1].mText == aTrack->mTransforms[aPlaceHolderFrameStart].mText) + aTrack->mTransforms[aPlaceHolderFrameStart - 1].mText == aTrack->mTransforms[aPlaceHolderFrameStart].mText) aPlaceHolderFrameStart--; int aPlaceHolderFrameEnd = aFrameTime.mAnimFrameBeforeInt; while (aPlaceHolderFrameEnd < mFrameStart + mFrameCount - 1 && - aTrack->mTransforms[aPlaceHolderFrameEnd + 1].mText == aTrack->mTransforms[aPlaceHolderFrameEnd].mText) + aTrack->mTransforms[aPlaceHolderFrameEnd + 1].mText == aTrack->mTransforms[aPlaceHolderFrameEnd].mText) aPlaceHolderFrameEnd++; int aPlaceHolderFrameCount = aPlaceHolderFrameEnd - aPlaceHolderFrameStart; ReanimatorTransform &aPlaceHolderStartTrans = aTrack->mTransforms[aPlaceHolderFrameStart]; @@ -1340,7 +1341,7 @@ void Reanimation::AttacherSynchWalkSpeed(int theTrackIndex, Reanimation *theAtta return; } float aPlaceHolderDistance = - -(aPlaceHolderEndTrans.mTransX - aPlaceHolderStartTrans.mTransX); + -(aPlaceHolderEndTrans.mTransX - aPlaceHolderStartTrans.mTransX); float aPlaceHolderSeconds = aPlaceHolderFrameCount / mAnimRate; if (FloatApproxEqual(aPlaceHolderSeconds, 0.0f)) { @@ -1352,10 +1353,10 @@ void Reanimation::AttacherSynchWalkSpeed(int theTrackIndex, Reanimation *theAtta ReanimatorTrack *aGroundTrack = &theAttachReanim->mDefinition->mTracks[aGroundTrackIndex]; ReanimatorTransform &aTransformGuyStart = aGroundTrack->mTransforms[theAttachReanim->mFrameStart]; ReanimatorTransform &aTransformGuyEnd = - aGroundTrack->mTransforms[theAttachReanim->mFrameStart + theAttachReanim->mFrameCount - 1]; + aGroundTrack->mTransforms[theAttachReanim->mFrameStart + theAttachReanim->mFrameCount - 1]; float aGuyDistance = aTransformGuyEnd.mTransX - aTransformGuyStart.mTransX; if (aGuyDistance < FLT_EPSILON || - aPlaceHolderDistance < FLT_EPSILON) + aPlaceHolderDistance < FLT_EPSILON) { theAttachReanim->mAnimRate = 0.0f; return; @@ -1368,14 +1369,14 @@ void Reanimation::AttacherSynchWalkSpeed(int theTrackIndex, Reanimation *theAtta if (aAttachEffect != nullptr) { float aGuyCurrentDistance = - aTransformGuyCurrent.mTransX - aTransformGuyStart.mTransX; + aTransformGuyCurrent.mTransX - aTransformGuyStart.mTransX; float aGuyExpectedDistance = - aGuyDistance * theAttachReanim->mAnimTime; + aGuyDistance * theAttachReanim->mAnimTime; aAttachEffect->mOffset.m02 = - aGuyExpectedDistance - aGuyCurrentDistance; + aGuyExpectedDistance - aGuyCurrentDistance; } theAttachReanim->mAnimRate = - aLoops * theAttachReanim->mFrameCount / aPlaceHolderSeconds; + aLoops * theAttachReanim->mFrameCount / aPlaceHolderSeconds; } void Reanimation::UpdateAttacherTrack(int theTrackIndex) @@ -1408,11 +1409,11 @@ void Reanimation::UpdateAttacherTrack(int theTrackIndex) Reanimation *aAttachReanim = FindReanimAttachment(aTrackInstance->mAttachmentID); if (aAttachReanim == nullptr || - aAttachReanim->mReanimationType != aReanimationType) + aAttachReanim->mReanimationType != aReanimationType) { AttachmentDie(aTrackInstance->mAttachmentID); aAttachReanim = gEffectSystem->mReanimationHolder->AllocReanimation( - 0.0f, 0.0f, 0, aReanimationType); + 0.0f, 0.0f, 0, aReanimationType); aAttachReanim->mLoopType = aAttacherInfo.mLoopType; aAttachReanim->mAnimRate = aAttacherInfo.mAnimRate; AttachReanim(aTrackInstance->mAttachmentID, aAttachReanim, 0.0f, 0.0f); @@ -1424,14 +1425,14 @@ void Reanimation::UpdateAttacherTrack(int theTrackIndex) int aAnimFrameStart, aAnimFrameCount; aAttachReanim->GetFramesForLayer(aAttacherInfo.mTrackName.c_str(), aAnimFrameStart, aAnimFrameCount); if (aAttachReanim->mFrameStart != aAnimFrameStart || - aAttachReanim->mFrameCount != aAnimFrameCount) // if (!aAttachReanim->IsAnimPlaying(……)) + aAttachReanim->mFrameCount != aAnimFrameCount) // if (!aAttachReanim->IsAnimPlaying(……)) { aAttachReanim->StartBlend(20); aAttachReanim->SetFramesForLayer(aAttacherInfo.mTrackName.c_str()); } if (aAttachReanim->mAnimRate == 12.0f && aAttacherInfo.mTrackName.compare("anim_walk") == 0 && - aAttachReanim->TrackExists("_ground")) + aAttachReanim->TrackExists("_ground")) AttacherSynchWalkSpeed(theTrackIndex, aAttachReanim, aAttacherInfo); else aAttachReanim->mAnimRate = aAttacherInfo.mAnimRate; @@ -1441,11 +1442,11 @@ void Reanimation::UpdateAttacherTrack(int theTrackIndex) Color aColor = ColorsMultiply(mColorOverride, aTrackInstance->mTrackColor); aColor.mAlpha = ClampInt(FloatRoundToInt(aTransform.mAlpha * aColor.mAlpha), 0, 255); AttachmentPropogateColor(aTrackInstance->mAttachmentID, - aColor, - mEnableExtraAdditiveDraw, - mExtraAdditiveColor, - mEnableExtraOverlayDraw, - mExtraOverlayColor); + aColor, + mEnableExtraAdditiveDraw, + mExtraAdditiveColor, + mEnableExtraOverlayDraw, + mExtraOverlayColor); } bool Reanimation::IsAnimPlaying(const char *theTrackName) diff --git a/src/Sexy.TodLib/Reanimator.h b/src/Sexy.TodLib/Reanimator.h index c146cb4..ce3d94e 100644 --- a/src/Sexy.TodLib/Reanimator.h +++ b/src/Sexy.TodLib/Reanimator.h @@ -78,10 +78,11 @@ extern ReanimationParams *gReanimationParamArray; void ReanimationFillInMissingData(float &thePrev, float &theValue); void ReanimationFillInMissingData(void *&thePrev, void *&theValue); -bool ReanimationLoadDefinition(const SexyString &theFileName, ReanimatorDefinition *theDefinition); +bool ReanimationLoadDefinition(const SexyString &theFileName, ReanimatorDefinition *theDefinition, bool recompile); void ReanimationFreeDefinition(ReanimatorDefinition *theDefinition); void _cdecl ReanimatorEnsureDefinitionLoaded(ReanimationType theReanimType, bool theIsPreloading); -void ReanimatorLoadDefinitions(ReanimationParams *theReanimationParamArray, int theReanimationParamArraySize); +void ReanimatorEnsureDefinitionRecompiled(ReanimationType theReanimType, bool theIsPreloading, bool recompile); +void ReanimatorLoadDefinitions(ReanimationParams *theReanimationParamArray, int theReanimationParamArraySize, bool recompile); void ReanimatorFreeDefinitions(); extern ReanimationParams gLawnReanimationArray[(int)ReanimationType::NUM_REANIMS]; @@ -228,7 +229,7 @@ class Reanimation } Image *GetCurrentTrackImage(const char *theTrackName); AttachEffect *AttachParticleToTrack(const char *theTrackName, TodParticleSystem *theParticleSystem, float thePosX, - float thePosY); + float thePosY); void GetTrackBasePoseMatrix(int theTrackIndex, SexyTransform2D &theBasePosMatrix); bool IsTrackShowing(const char *theTrackName); void SetTruncateDisappearingFrames(const char *theTrackName = nullptr, bool theTruncateDisappearingFrames = false); @@ -242,13 +243,13 @@ class Reanimation bool IsAnimPlaying(const char *theTrackName); void SetBasePoseFromAnim(const char *theTrackName); void ReanimBltMatrix(Graphics *g, Image *theImage, SexyMatrix3 &theTransform, const Rect &theClipRect, - const Color &theColor, int theDrawMode, const Rect &theSrcRect); + const Color &theColor, int theDrawMode, const Rect &theSrcRect); Reanimation *FindSubReanim(ReanimationType theReanimType); }; void ReanimationCreateAtlas(ReanimatorDefinition *theDefinition, ReanimationType theReanimationType); void ReanimationPreload(ReanimationType theReanimationType); void BlendTransform(ReanimatorTransform *theResult, const ReanimatorTransform &theTransform1, - const ReanimatorTransform &theTransform2, float theBlendFactor); + const ReanimatorTransform &theTransform2, float theBlendFactor); #endif diff --git a/src/Sexy.TodLib/TodParticle.cpp b/src/Sexy.TodLib/TodParticle.cpp index 1169212..4627132 100644 --- a/src/Sexy.TodLib/TodParticle.cpp +++ b/src/Sexy.TodLib/TodParticle.cpp @@ -1,3 +1,4 @@ +#include #include "TodDebug.h" #include "Definition.h" #include "TodParticle.h" @@ -6,180 +7,177 @@ #include "../SexyAppFramework/Graphics.h" #include "../SexyAppFramework/Renderer.h" -int gParticleDefCount; // [0x6A9F08] +int gParticleDefCount; // [0x6A9F08] TodParticleDefinition *gParticleDefArray; // [0x6A9F0C] -int gParticleParamArraySize; // [0x6A9F10] -ParticleParams *gParticleParamArray; // [0x6A9F14] +int gParticleParamArraySize; // [0x6A9F10] +ParticleParams *gParticleParamArray; // [0x6A9F14] ParticleParams gLawnParticleArray[(int)ParticleEffect::NUM_PARTICLES] = { - {ParticleEffect::PARTICLE_MELONSPLASH, "particles/MelonImpact.xml"}, - {ParticleEffect::PARTICLE_WINTERMELON, "particles/WinterMelonImpact.xml"}, - {ParticleEffect::PARTICLE_FUMECLOUD, "particles/FumeCloud.xml"}, - {ParticleEffect::PARTICLE_POPCORNSPLASH, "particles/PopcornSplash.xml"}, - {ParticleEffect::PARTICLE_POWIE, "particles/Powie.xml"}, - {ParticleEffect::PARTICLE_JACKEXPLODE, "particles/JackExplode.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_HEAD, "particles/ZombieHead.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_ARM, "particles/ZombieArm.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_TRAFFIC_CONE, "particles/ZombieTrafficCone.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_PAIL, "particles/ZombiePail.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_HELMET, "particles/ZombieHelmet.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_FLAG, "particles/ZombieFlag.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_DOOR, "particles/ZombieDoor.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_NEWSPAPER, "particles/ZombieNewspaper.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_HEADLIGHT, "particles/ZombieHeadLight.xml"}, - {ParticleEffect::PARTICLE_POW, "particles/Pow.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_POGO, "particles/ZombiePogo.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_NEWSPAPER_HEAD, "particles/ZombieNewspaperHead.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_BALLOON_HEAD, "particles/ZombieBalloonHead.xml"}, - {ParticleEffect::PARTICLE_SOD_ROLL, "particles/SodRoll.xml"}, - {ParticleEffect::PARTICLE_GRAVE_STONE_RISE, "particles/GraveStoneRise.xml"}, - {ParticleEffect::PARTICLE_PLANTING, "particles/Planting.xml"}, - {ParticleEffect::PARTICLE_PLANTING_POOL, "particles/PlantingPool.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_RISE, "particles/ZombieRise.xml"}, - {ParticleEffect::PARTICLE_GRAVE_BUSTER, "particles/GraveBuster.xml"}, - {ParticleEffect::PARTICLE_GRAVE_BUSTER_DIE, "particles/GraveBusterDie.xml"}, - {ParticleEffect::PARTICLE_POOL_SPLASH, "particles/PoolSplash.xml"}, - {ParticleEffect::PARTICLE_ICE_SPARKLE, "particles/IceSparkle.xml"}, - {ParticleEffect::PARTICLE_SEED_PACKET, "particles/SeedPacket.xml"}, - {ParticleEffect::PARTICLE_TALL_NUT_BLOCK, "particles/TallNutBlock.xml"}, - {ParticleEffect::PARTICLE_DOOM, "particles/Doom.xml"}, - {ParticleEffect::PARTICLE_DIGGER_RISE, "particles/DiggerRise.xml"}, - {ParticleEffect::PARTICLE_DIGGER_TUNNEL, "particles/DiggerTunnel.xml"}, - {ParticleEffect::PARTICLE_DANCER_RISE, "particles/DancerRise.xml"}, - {ParticleEffect::PARTICLE_POOL_SPARKLY, "particles/PoolSparkly.xml"}, - {ParticleEffect::PARTICLE_WALLNUT_EAT_SMALL, "particles/WallnutEatSmall.xml"}, - {ParticleEffect::PARTICLE_WALLNUT_EAT_LARGE, "particles/WallnutEatLarge.xml"}, - {ParticleEffect::PARTICLE_PEA_SPLAT, "particles/PeaSplat.xml"}, - {ParticleEffect::PARTICLE_BUTTER_SPLAT, "particles/ButterSplat.xml"}, - {ParticleEffect::PARTICLE_CABBAGE_SPLAT, "particles/CabbageSplat.xml"}, - {ParticleEffect::PARTICLE_PUFF_SPLAT, "particles/PuffSplat.xml"}, - {ParticleEffect::PARTICLE_STAR_SPLAT, "particles/StarSplat.xml"}, - {ParticleEffect::PARTICLE_ICE_TRAP, "particles/IceTrap.xml"}, - {ParticleEffect::PARTICLE_SNOWPEA_SPLAT, "particles/SnowPeaSplat.xml"}, - {ParticleEffect::PARTICLE_SNOWPEA_PUFF, "particles/SnowPeaPuff.xml"}, - {ParticleEffect::PARTICLE_SNOWPEA_TRAIL, "particles/SnowPeaTrail.xml"}, - {ParticleEffect::PARTICLE_LANTERN_SHINE, "particles/LanternShine.xml"}, - {ParticleEffect::PARTICLE_SEED_PACKET_PICKUP, "particles/Award.xml"}, - {ParticleEffect::PARTICLE_POTATO_MINE, "particles/PotatoMine.xml"}, - {ParticleEffect::PARTICLE_POTATO_MINE_RISE, "particles/PotatoMineRise.xml"}, - {ParticleEffect::PARTICLE_PUFFSHROOM_TRAIL, "particles/PuffShroomTrail.xml"}, - {ParticleEffect::PARTICLE_PUFFSHROOM_MUZZLE, "particles/PuffShroomMuzzle.xml"}, - {ParticleEffect::PARTICLE_SEED_PACKET_FLASH, "particles/SeedPacketFlash.xml"}, - {ParticleEffect::PARTICLE_WHACK_A_ZOMBIE_RISE, "particles/WhackAZombieRise.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_LADDER, "particles/ZombieLadder.xml"}, - {ParticleEffect::PARTICLE_UMBRELLA_REFLECT, "particles/UmbrellaReflect.xml"}, - {ParticleEffect::PARTICLE_SEED_PACKET_PICK, "particles/SeedPacketPick.xml"}, - {ParticleEffect::PARTICLE_ICE_TRAP_ZOMBIE, "particles/IceTrapZombie.xml"}, - {ParticleEffect::PARTICLE_ICE_TRAP_RELEASE, "particles/IceTrapRelease.xml"}, - {ParticleEffect::PARTICLE_ZAMBONI_SMOKE, "particles/ZamboniSmoke.xml"}, - {ParticleEffect::PARTICLE_GLOOMCLOUD, "particles/GloomCloud.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_POGO_HEAD, "particles/ZombiePogoHead.xml"}, - {ParticleEffect::PARTICLE_ZAMBONI_TIRE, "particles/ZamboniTire.xml"}, - {ParticleEffect::PARTICLE_ZAMBONI_EXPLOSION, "particles/ZamboniExplosion.xml"}, - {ParticleEffect::PARTICLE_ZAMBONI_EXPLOSION2, "particles/ZamboniExplosion2.xml"}, - {ParticleEffect::PARTICLE_CATAPULT_EXPLOSION, "particles/CatapultExplosion.xml"}, - {ParticleEffect::PARTICLE_MOWER_CLOUD, "particles/MowerCloud.xml"}, - {ParticleEffect::PARTICLE_BOSS_ICE_BALL, "particles/BossIceBallTrail.xml"}, - {ParticleEffect::PARTICLE_BLASTMARK, "particles/BlastMark.xml"}, - {ParticleEffect::PARTICLE_COIN_PICKUP_ARROW, "particles/CoinPickupArrow.xml"}, - {ParticleEffect::PARTICLE_PRESENT_PICKUP, "particles/PresentPickup.xml"}, - {ParticleEffect::PARTICLE_IMITATER_MORPH, "particles/ImitaterMorph.xml"}, - {ParticleEffect::PARTICLE_MOWERED_ZOMBIE_HEAD, "particles/MoweredZombieHead.xml"}, - {ParticleEffect::PARTICLE_MOWERED_ZOMBIE_ARM, "particles/MoweredZombieArm.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_HEAD_POOL, "particles/ZombieHeadPool.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_BOSS_FIREBALL, "particles/Zombie_boss_fireball.xml"}, - {ParticleEffect::PARTICLE_FIREBALL_DEATH, "particles/FireballDeath.xml"}, - {ParticleEffect::PARTICLE_ICEBALL_DEATH, "particles/IceballDeath.xml"}, - {ParticleEffect::PARTICLE_ICEBALL_TRAIL, "particles/Iceball_Trail.xml"}, - {ParticleEffect::PARTICLE_FIREBALL_TRAIL, "particles/Fireball_Trail.xml"}, - {ParticleEffect::PARTICLE_BOSS_EXPLOSION, "particles/BossExplosion.xml"}, - {ParticleEffect::PARTICLE_SCREEN_FLASH, "particles/ScreenFlash.xml"}, - {ParticleEffect::PARTICLE_TROPHY_SPARKLE, "particles/TrophySparkle.xml"}, - {ParticleEffect::PARTICLE_PORTAL_CIRCLE, "particles/PortalCircle.xml"}, - {ParticleEffect::PARTICLE_PORTAL_SQUARE, "particles/PortalSquare.xml"}, - {ParticleEffect::PARTICLE_POTTED_PLANT_GLOW, "particles/PottedPlantGlow.xml"}, - {ParticleEffect::PARTICLE_POTTED_WATER_PLANT_GLOW, "particles/PottedWaterPlantGlow.xml"}, - {ParticleEffect::PARTICLE_POTTED_ZEN_GLOW, "particles/PottedZenGlow.xml"}, - {ParticleEffect::PARTICLE_MIND_CONTROL, "particles/MindControl.xml"}, - {ParticleEffect::PARTICLE_VASE_SHATTER, "particles/VaseShatter.xml"}, - {ParticleEffect::PARTICLE_VASE_SHATTER_LEAF, "particles/VaseShatterLeaf.xml"}, - {ParticleEffect::PARTICLE_VASE_SHATTER_ZOMBIE, "particles/VaseShatterZombie.xml"}, - {ParticleEffect::PARTICLE_AWARD_PICKUP_ARROW, "particles/AwardPickupArrow.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_SEAWEED, "particles/Zombie_seaweed.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_MUSTACHE, "particles/ZombieMustache.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_SUNGLASS, "particles/ZombieFutureGlasses.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_PINATA, "particles/Pinata.xml"}, - {ParticleEffect::PARTICLE_DUST_SQUASH, "particles/Dust_Squash.xml"}, - {ParticleEffect::PARTICLE_DUST_FOOT, "particles/Dust_Foot.xml"}, - {ParticleEffect::PARTICLE_ZOMBIE_DAISIES, "particles/Daisy.xml"}, - {ParticleEffect::PARTICLE_CREDIT_STROBE, "particles/Credits_Strobe.xml"}, - {ParticleEffect::PARTICLE_CREDITS_RAYSWIPE, "particles/Credits_RaysWipe.xml"}, - {ParticleEffect::PARTICLE_CREDITS_ZOMBIEHEADWIPE, "particles/Credits_ZombieHeadWipe.xml"}, - {ParticleEffect::PARTICLE_STARBURST, "particles/Starburst.xml"}, - {ParticleEffect::PARTICLE_CREDITS_FOG, "particles/Credits_fog.xml"}, - {ParticleEffect::PARTICLE_PERSENT_PICK_UP_ARROW, "particles/UpsellArrow.xml"}, + { ParticleEffect::PARTICLE_MELONSPLASH, "particles/MelonImpact.xml" }, + { ParticleEffect::PARTICLE_WINTERMELON, "particles/WinterMelonImpact.xml" }, + { ParticleEffect::PARTICLE_FUMECLOUD, "particles/FumeCloud.xml" }, + { ParticleEffect::PARTICLE_POPCORNSPLASH, "particles/PopcornSplash.xml" }, + { ParticleEffect::PARTICLE_POWIE, "particles/Powie.xml" }, + { ParticleEffect::PARTICLE_JACKEXPLODE, "particles/JackExplode.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_HEAD, "particles/ZombieHead.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_ARM, "particles/ZombieArm.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_TRAFFIC_CONE, "particles/ZombieTrafficCone.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_PAIL, "particles/ZombiePail.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_HELMET, "particles/ZombieHelmet.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_FLAG, "particles/ZombieFlag.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_DOOR, "particles/ZombieDoor.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_NEWSPAPER, "particles/ZombieNewspaper.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_HEADLIGHT, "particles/ZombieHeadLight.xml" }, + { ParticleEffect::PARTICLE_POW, "particles/Pow.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_POGO, "particles/ZombiePogo.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_NEWSPAPER_HEAD, "particles/ZombieNewspaperHead.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_BALLOON_HEAD, "particles/ZombieBalloonHead.xml" }, + { ParticleEffect::PARTICLE_SOD_ROLL, "particles/SodRoll.xml" }, + { ParticleEffect::PARTICLE_GRAVE_STONE_RISE, "particles/GraveStoneRise.xml" }, + { ParticleEffect::PARTICLE_PLANTING, "particles/Planting.xml" }, + { ParticleEffect::PARTICLE_PLANTING_POOL, "particles/PlantingPool.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_RISE, "particles/ZombieRise.xml" }, + { ParticleEffect::PARTICLE_GRAVE_BUSTER, "particles/GraveBuster.xml" }, + { ParticleEffect::PARTICLE_GRAVE_BUSTER_DIE, "particles/GraveBusterDie.xml" }, + { ParticleEffect::PARTICLE_POOL_SPLASH, "particles/PoolSplash.xml" }, + { ParticleEffect::PARTICLE_ICE_SPARKLE, "particles/IceSparkle.xml" }, + { ParticleEffect::PARTICLE_SEED_PACKET, "particles/SeedPacket.xml" }, + { ParticleEffect::PARTICLE_TALL_NUT_BLOCK, "particles/TallNutBlock.xml" }, + { ParticleEffect::PARTICLE_DOOM, "particles/Doom.xml" }, + { ParticleEffect::PARTICLE_DIGGER_RISE, "particles/DiggerRise.xml" }, + { ParticleEffect::PARTICLE_DIGGER_TUNNEL, "particles/DiggerTunnel.xml" }, + { ParticleEffect::PARTICLE_DANCER_RISE, "particles/DancerRise.xml" }, + { ParticleEffect::PARTICLE_POOL_SPARKLY, "particles/PoolSparkly.xml" }, + { ParticleEffect::PARTICLE_WALLNUT_EAT_SMALL, "particles/WallnutEatSmall.xml" }, + { ParticleEffect::PARTICLE_WALLNUT_EAT_LARGE, "particles/WallnutEatLarge.xml" }, + { ParticleEffect::PARTICLE_PEA_SPLAT, "particles/PeaSplat.xml" }, + { ParticleEffect::PARTICLE_BUTTER_SPLAT, "particles/ButterSplat.xml" }, + { ParticleEffect::PARTICLE_CABBAGE_SPLAT, "particles/CabbageSplat.xml" }, + { ParticleEffect::PARTICLE_PUFF_SPLAT, "particles/PuffSplat.xml" }, + { ParticleEffect::PARTICLE_STAR_SPLAT, "particles/StarSplat.xml" }, + { ParticleEffect::PARTICLE_ICE_TRAP, "particles/IceTrap.xml" }, + { ParticleEffect::PARTICLE_SNOWPEA_SPLAT, "particles/SnowPeaSplat.xml" }, + { ParticleEffect::PARTICLE_SNOWPEA_PUFF, "particles/SnowPeaPuff.xml" }, + { ParticleEffect::PARTICLE_SNOWPEA_TRAIL, "particles/SnowPeaTrail.xml" }, + { ParticleEffect::PARTICLE_LANTERN_SHINE, "particles/LanternShine.xml" }, + { ParticleEffect::PARTICLE_SEED_PACKET_PICKUP, "particles/Award.xml" }, + { ParticleEffect::PARTICLE_POTATO_MINE, "particles/PotatoMine.xml" }, + { ParticleEffect::PARTICLE_POTATO_MINE_RISE, "particles/PotatoMineRise.xml" }, + { ParticleEffect::PARTICLE_PUFFSHROOM_TRAIL, "particles/PuffShroomTrail.xml" }, + { ParticleEffect::PARTICLE_PUFFSHROOM_MUZZLE, "particles/PuffShroomMuzzle.xml" }, + { ParticleEffect::PARTICLE_SEED_PACKET_FLASH, "particles/SeedPacketFlash.xml" }, + { ParticleEffect::PARTICLE_WHACK_A_ZOMBIE_RISE, "particles/WhackAZombieRise.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_LADDER, "particles/ZombieLadder.xml" }, + { ParticleEffect::PARTICLE_UMBRELLA_REFLECT, "particles/UmbrellaReflect.xml" }, + { ParticleEffect::PARTICLE_SEED_PACKET_PICK, "particles/SeedPacketPick.xml" }, + { ParticleEffect::PARTICLE_ICE_TRAP_ZOMBIE, "particles/IceTrapZombie.xml" }, + { ParticleEffect::PARTICLE_ICE_TRAP_RELEASE, "particles/IceTrapRelease.xml" }, + { ParticleEffect::PARTICLE_ZAMBONI_SMOKE, "particles/ZamboniSmoke.xml" }, + { ParticleEffect::PARTICLE_GLOOMCLOUD, "particles/GloomCloud.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_POGO_HEAD, "particles/ZombiePogoHead.xml" }, + { ParticleEffect::PARTICLE_ZAMBONI_TIRE, "particles/ZamboniTire.xml" }, + { ParticleEffect::PARTICLE_ZAMBONI_EXPLOSION, "particles/ZamboniExplosion.xml" }, + { ParticleEffect::PARTICLE_ZAMBONI_EXPLOSION2, "particles/ZamboniExplosion2.xml" }, + { ParticleEffect::PARTICLE_CATAPULT_EXPLOSION, "particles/CatapultExplosion.xml" }, + { ParticleEffect::PARTICLE_MOWER_CLOUD, "particles/MowerCloud.xml" }, + { ParticleEffect::PARTICLE_BOSS_ICE_BALL, "particles/BossIceBallTrail.xml" }, + { ParticleEffect::PARTICLE_BLASTMARK, "particles/BlastMark.xml" }, + { ParticleEffect::PARTICLE_COIN_PICKUP_ARROW, "particles/CoinPickupArrow.xml" }, + { ParticleEffect::PARTICLE_PRESENT_PICKUP, "particles/PresentPickup.xml" }, + { ParticleEffect::PARTICLE_IMITATER_MORPH, "particles/ImitaterMorph.xml" }, + { ParticleEffect::PARTICLE_MOWERED_ZOMBIE_HEAD, "particles/MoweredZombieHead.xml" }, + { ParticleEffect::PARTICLE_MOWERED_ZOMBIE_ARM, "particles/MoweredZombieArm.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_HEAD_POOL, "particles/ZombieHeadPool.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_BOSS_FIREBALL, "particles/Zombie_boss_fireball.xml" }, + { ParticleEffect::PARTICLE_FIREBALL_DEATH, "particles/FireballDeath.xml" }, + { ParticleEffect::PARTICLE_ICEBALL_DEATH, "particles/IceballDeath.xml" }, + { ParticleEffect::PARTICLE_ICEBALL_TRAIL, "particles/Iceball_Trail.xml" }, + { ParticleEffect::PARTICLE_FIREBALL_TRAIL, "particles/Fireball_Trail.xml" }, + { ParticleEffect::PARTICLE_BOSS_EXPLOSION, "particles/BossExplosion.xml" }, + { ParticleEffect::PARTICLE_SCREEN_FLASH, "particles/ScreenFlash.xml" }, + { ParticleEffect::PARTICLE_TROPHY_SPARKLE, "particles/TrophySparkle.xml" }, + { ParticleEffect::PARTICLE_PORTAL_CIRCLE, "particles/PortalCircle.xml" }, + { ParticleEffect::PARTICLE_PORTAL_SQUARE, "particles/PortalSquare.xml" }, + { ParticleEffect::PARTICLE_POTTED_PLANT_GLOW, "particles/PottedPlantGlow.xml" }, + { ParticleEffect::PARTICLE_POTTED_WATER_PLANT_GLOW, "particles/PottedWaterPlantGlow.xml" }, + { ParticleEffect::PARTICLE_POTTED_ZEN_GLOW, "particles/PottedZenGlow.xml" }, + { ParticleEffect::PARTICLE_MIND_CONTROL, "particles/MindControl.xml" }, + { ParticleEffect::PARTICLE_VASE_SHATTER, "particles/VaseShatter.xml" }, + { ParticleEffect::PARTICLE_VASE_SHATTER_LEAF, "particles/VaseShatterLeaf.xml" }, + { ParticleEffect::PARTICLE_VASE_SHATTER_ZOMBIE, "particles/VaseShatterZombie.xml" }, + { ParticleEffect::PARTICLE_AWARD_PICKUP_ARROW, "particles/AwardPickupArrow.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_SEAWEED, "particles/Zombie_seaweed.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_MUSTACHE, "particles/ZombieMustache.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_SUNGLASS, "particles/ZombieFutureGlasses.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_PINATA, "particles/Pinata.xml" }, + { ParticleEffect::PARTICLE_DUST_SQUASH, "particles/Dust_Squash.xml" }, + { ParticleEffect::PARTICLE_DUST_FOOT, "particles/Dust_Foot.xml" }, + { ParticleEffect::PARTICLE_ZOMBIE_DAISIES, "particles/Daisy.xml" }, + { ParticleEffect::PARTICLE_CREDIT_STROBE, "particles/Credits_Strobe.xml" }, + { ParticleEffect::PARTICLE_CREDITS_RAYSWIPE, "particles/Credits_RaysWipe.xml" }, + { ParticleEffect::PARTICLE_CREDITS_ZOMBIEHEADWIPE, "particles/Credits_ZombieHeadWipe.xml" }, + { ParticleEffect::PARTICLE_STARBURST, "particles/Starburst.xml" }, + { ParticleEffect::PARTICLE_CREDITS_FOG, "particles/Credits_fog.xml" }, + { ParticleEffect::PARTICLE_PERSENT_PICK_UP_ARROW, "particles/UpsellArrow.xml" }, }; -bool TodParticleLoadADef(TodParticleDefinition *theParticleDef, const char *theParticleFileName) +bool TodParticleLoadADef(TodParticleDefinition *theParticleDef, const char *theParticleFileName, bool recompile) { TodHesitationBracket("Load Particle %s", theParticleFileName); - if (!DefinitionLoadXML(theParticleFileName, &gParticleDefMap, theParticleDef)) + if (!DefinitionLoadXML(theParticleFileName, &gParticleDefMap, theParticleDef, recompile)) { - char aBuf[512]; - sprintf(aBuf, "Failed to load particle '%s'", theParticleFileName); - TodErrorMessageBox(aBuf, "Error"); + + auto aMessage = std::format("Failed to load particle '{}'", theParticleFileName); + TodErrorMessageBox(aMessage.c_str(), "Error"); return false; } - else + for (int i = 0; i < theParticleDef->mEmitterDefCount; i++) { - for (int i = 0; i < theParticleDef->mEmitterDefCount; i++) - { - TodEmitterDefinition &aDef = theParticleDef->mEmitterDefs[i]; - FloatTrackSetDefault(aDef.mSystemDuration, 0.0f); - FloatTrackSetDefault(aDef.mSpawnRate, 0.0f); - FloatTrackSetDefault(aDef.mSpawnMinActive, -1.0f); - FloatTrackSetDefault(aDef.mSpawnMaxActive, -1.0f); - FloatTrackSetDefault(aDef.mSpawnMaxLaunched, -1.0f); - FloatTrackSetDefault(aDef.mEmitterRadius, 0.0f); - FloatTrackSetDefault(aDef.mEmitterOffsetX, 0.0f); - FloatTrackSetDefault(aDef.mEmitterOffsetY, 0.0f); - FloatTrackSetDefault(aDef.mEmitterBoxX, 0.0f); - FloatTrackSetDefault(aDef.mEmitterBoxY, 0.0f); - FloatTrackSetDefault(aDef.mEmitterSkewX, 0.0f); - FloatTrackSetDefault(aDef.mEmitterSkewY, 0.0f); - FloatTrackSetDefault(aDef.mParticleDuration, 100.0f); - FloatTrackSetDefault(aDef.mLaunchSpeed, 0.0f); - FloatTrackSetDefault(aDef.mSystemRed, 1.0f); - FloatTrackSetDefault(aDef.mSystemGreen, 1.0f); - FloatTrackSetDefault(aDef.mSystemBlue, 1.0f); - FloatTrackSetDefault(aDef.mSystemAlpha, 1.0f); - FloatTrackSetDefault(aDef.mSystemBrightness, 1.0f); - FloatTrackSetDefault(aDef.mLaunchAngle, 0.0f); - FloatTrackSetDefault(aDef.mCrossFadeDuration, 0.0f); - FloatTrackSetDefault(aDef.mParticleRed, 1.0f); - FloatTrackSetDefault(aDef.mParticleGreen, 1.0f); - FloatTrackSetDefault(aDef.mParticleBlue, 1.0f); - FloatTrackSetDefault(aDef.mParticleAlpha, 1.0f); - FloatTrackSetDefault(aDef.mParticleBrightness, 1.0f); - FloatTrackSetDefault(aDef.mParticleSpinAngle, 0.0f); - FloatTrackSetDefault(aDef.mParticleSpinSpeed, 0.0f); - FloatTrackSetDefault(aDef.mParticleScale, 1.0f); - FloatTrackSetDefault(aDef.mParticleStretch, 1.0f); - FloatTrackSetDefault(aDef.mCollisionReflect, 0.0f); - FloatTrackSetDefault(aDef.mCollisionSpin, 0.0f); - FloatTrackSetDefault(aDef.mClipTop, 0.0f); - FloatTrackSetDefault(aDef.mClipBottom, 0.0f); - FloatTrackSetDefault(aDef.mClipLeft, 0.0f); - FloatTrackSetDefault(aDef.mClipRight, 0.0f); - FloatTrackSetDefault(aDef.mAnimationRate, 0.0f); - if (aDef.mImage) - ((MemoryImage *)aDef.mImage)->mGPUFlags |= ImageFlags::ImageFlag_MinimizeNumSubdivisions; - } - return true; + TodEmitterDefinition &aDef = theParticleDef->mEmitterDefs[i]; + FloatTrackSetDefault(aDef.mSystemDuration, 0.0f); + FloatTrackSetDefault(aDef.mSpawnRate, 0.0f); + FloatTrackSetDefault(aDef.mSpawnMinActive, -1.0f); + FloatTrackSetDefault(aDef.mSpawnMaxActive, -1.0f); + FloatTrackSetDefault(aDef.mSpawnMaxLaunched, -1.0f); + FloatTrackSetDefault(aDef.mEmitterRadius, 0.0f); + FloatTrackSetDefault(aDef.mEmitterOffsetX, 0.0f); + FloatTrackSetDefault(aDef.mEmitterOffsetY, 0.0f); + FloatTrackSetDefault(aDef.mEmitterBoxX, 0.0f); + FloatTrackSetDefault(aDef.mEmitterBoxY, 0.0f); + FloatTrackSetDefault(aDef.mEmitterSkewX, 0.0f); + FloatTrackSetDefault(aDef.mEmitterSkewY, 0.0f); + FloatTrackSetDefault(aDef.mParticleDuration, 100.0f); + FloatTrackSetDefault(aDef.mLaunchSpeed, 0.0f); + FloatTrackSetDefault(aDef.mSystemRed, 1.0f); + FloatTrackSetDefault(aDef.mSystemGreen, 1.0f); + FloatTrackSetDefault(aDef.mSystemBlue, 1.0f); + FloatTrackSetDefault(aDef.mSystemAlpha, 1.0f); + FloatTrackSetDefault(aDef.mSystemBrightness, 1.0f); + FloatTrackSetDefault(aDef.mLaunchAngle, 0.0f); + FloatTrackSetDefault(aDef.mCrossFadeDuration, 0.0f); + FloatTrackSetDefault(aDef.mParticleRed, 1.0f); + FloatTrackSetDefault(aDef.mParticleGreen, 1.0f); + FloatTrackSetDefault(aDef.mParticleBlue, 1.0f); + FloatTrackSetDefault(aDef.mParticleAlpha, 1.0f); + FloatTrackSetDefault(aDef.mParticleBrightness, 1.0f); + FloatTrackSetDefault(aDef.mParticleSpinAngle, 0.0f); + FloatTrackSetDefault(aDef.mParticleSpinSpeed, 0.0f); + FloatTrackSetDefault(aDef.mParticleScale, 1.0f); + FloatTrackSetDefault(aDef.mParticleStretch, 1.0f); + FloatTrackSetDefault(aDef.mCollisionReflect, 0.0f); + FloatTrackSetDefault(aDef.mCollisionSpin, 0.0f); + FloatTrackSetDefault(aDef.mClipTop, 0.0f); + FloatTrackSetDefault(aDef.mClipBottom, 0.0f); + FloatTrackSetDefault(aDef.mClipLeft, 0.0f); + FloatTrackSetDefault(aDef.mClipRight, 0.0f); + FloatTrackSetDefault(aDef.mAnimationRate, 0.0f); + if (aDef.mImage) + ((MemoryImage *)aDef.mImage)->mGPUFlags |= ImageFlags::ImageFlag_MinimizeNumSubdivisions; } + return true; } -void TodParticleLoadDefinitions(ParticleParams *theParticleParamArray, int theParticleParamArraySize) +void TodParticleLoadDefinitions(ParticleParams *theParticleParamArray, int theParticleParamArraySize, bool recompile) { TodHesitationBracket aHesitiation("TodParticleLoadDefinitions"); TOD_ASSERT(!gParticleParamArray && !gParticleDefArray); @@ -192,7 +190,7 @@ void TodParticleLoadDefinitions(ParticleParams *theParticleParamArray, int thePa { ParticleParams &aParticleParams = gParticleParamArray[i]; TOD_ASSERT(aParticleParams.mParticleEffect == i); - if (!TodParticleLoadADef(&gParticleDefArray[i], aParticleParams.mParticleFileName)) + if (!TodParticleLoadADef(&gParticleDefArray[i], aParticleParams.mParticleFileName, recompile)) { char aBuf[512]; sprintf(aBuf, "Failed to load particle '%s'", aParticleParams.mParticleFileName); @@ -231,7 +229,7 @@ TodParticleSystem::~TodParticleSystem() } void TodParticleSystem::TodParticleInitializeFromDef( - float theX, float theY, int theRenderOrder, TodParticleDefinition *theDefinition, ParticleEffect theEffectType) + float theX, float theY, int theRenderOrder, TodParticleDefinition *theDefinition, ParticleEffect theEffectType) { TOD_ASSERT(mParticleHolder); mEmitterList.SetAllocator(&mParticleHolder->mEmitterListNodeAllocator); @@ -245,7 +243,7 @@ void TodParticleSystem::TodParticleInitializeFromDef( if (!FloatTrackIsSet(aDef.mCrossFadeDuration)) { if (TestBit(aDef.mParticleFlags, (int)ParticleFlags::PARTICLE_DIE_IF_OVERLOADED) && - mParticleHolder->IsOverLoaded()) + mParticleHolder->IsOverLoaded()) { ParticleSystemDie(); break; @@ -258,9 +256,9 @@ void TodParticleSystem::TodParticleInitializeFromDef( } void TodParticleEmitter::TodEmitterInitialize(float theX, - float theY, - TodParticleSystem *theSystem, - TodEmitterDefinition *theEmitterDef) + float theY, + TodParticleSystem *theSystem, + TodEmitterDefinition *theEmitterDef) { mSpawnAccum = 0.0f; mParticlesSpawned = 0; @@ -333,7 +331,7 @@ TodParticle *TodParticleEmitter::SpawnParticle(int theIndex, int theSpawnCount) float aEmitterOffsetXInterp = Sexy::Rand(1.0f); float aEmitterOffsetYInterp = Sexy::Rand(1.0f); aParticle->mParticleDuration = - FloatTrackEvaluate(mEmitterDef->mParticleDuration, mSystemTimeValue, aParticleDurationInterp); + FloatTrackEvaluate(mEmitterDef->mParticleDuration, mSystemTimeValue, aParticleDurationInterp); aParticle->mParticleDuration = std::max(1, aParticle->mParticleDuration); aParticle->mParticleAge = 0; aParticle->mParticleEmitter = this; @@ -348,14 +346,14 @@ TodParticle *TodParticleEmitter::SpawnParticle(int theIndex, int theSpawnCount) if (mEmitterDef->mEmitterType == EmitterType::EMITTER_CIRCLE_PATH) { aLaunchAngle = FloatTrackEvaluate(mEmitterDef->mEmitterPath, - mSystemTimeValue, - mTrackInterp[ParticleSystemTracks::TRACK_EMITTER_PATH]) * - 2 * PI; + mSystemTimeValue, + mTrackInterp[ParticleSystemTracks::TRACK_EMITTER_PATH]) * + 2 * PI; aLaunchAngle += DEG_TO_RAD(FloatTrackEvaluate(mEmitterDef->mLaunchAngle, mSystemTimeValue, aLaunchAngleInterp)); } else if (mEmitterDef->mEmitterType == EmitterType::EMITTER_CIRCLE_EVEN_SPACING) aLaunchAngle = 2 * PI * theIndex / theSpawnCount + - DEG_TO_RAD(FloatTrackEvaluate(mEmitterDef->mLaunchAngle, mSystemTimeValue, aLaunchAngleInterp)); + DEG_TO_RAD(FloatTrackEvaluate(mEmitterDef->mLaunchAngle, mSystemTimeValue, aLaunchAngleInterp)); else if (FloatTrackIsConstantZero(mEmitterDef->mLaunchAngle)) aLaunchAngle = Sexy::Rand((float)(2 * PI)); else @@ -382,7 +380,7 @@ TodParticle *TodParticleEmitter::SpawnParticle(int theIndex, int theSpawnCount) } case EmitterType::EMITTER_BOX_PATH: { float aEmitterPathPosition = FloatTrackEvaluate( - mEmitterDef->mEmitterPath, mSystemTimeValue, mTrackInterp[ParticleSystemTracks::TRACK_EMITTER_PATH]); + mEmitterDef->mEmitterPath, mSystemTimeValue, mTrackInterp[ParticleSystemTracks::TRACK_EMITTER_PATH]); float aMinX = FloatTrackEvaluate(mEmitterDef->mEmitterBoxX, mSystemTimeValue, 0.0f); float aMaxX = FloatTrackEvaluate(mEmitterDef->mEmitterBoxX, mSystemTimeValue, 1.0f); float aMinY = FloatTrackEvaluate(mEmitterDef->mEmitterBoxY, mSystemTimeValue, 0.0f); @@ -390,18 +388,18 @@ TodParticle *TodParticleEmitter::SpawnParticle(int theIndex, int theSpawnCount) float aDistanceX = aMaxX - aMinX; float aDistanceY = aMaxY - aMinY; float aPathPos = - aEmitterPathPosition * (aDistanceY + aDistanceX + aDistanceY + aDistanceX); + aEmitterPathPosition * (aDistanceY + aDistanceX + aDistanceY + aDistanceX); if (aPathPos < aDistanceY) { aPosX = aMinX; aPosY = aMinY + aPathPos; } - else if (aPathPos < aDistanceY + aDistanceX) + else if (aPathPos < aDistanceY + aDistanceX) { aPosX = aMinX + (aPathPos - aDistanceY); aPosY = aMaxY; } - else if (aPathPos < aDistanceY + aDistanceX + aDistanceY) + else if (aPathPos < aDistanceY + aDistanceX + aDistanceY) { aPosX = aMaxX; aPosY = aMaxY - (aPathPos - aDistanceY - aDistanceX); @@ -426,16 +424,16 @@ TodParticle *TodParticleEmitter::SpawnParticle(int theIndex, int theSpawnCount) aParticle->mVelocity.x = sin(aLaunchAngle) * aLaunchSpeed; aParticle->mVelocity.y = cos(aLaunchAngle) * aLaunchSpeed; aParticle->mPosition.x += FloatTrackEvaluate( - mEmitterDef->mEmitterOffsetX, mSystemTimeValue, aEmitterOffsetXInterp); + mEmitterDef->mEmitterOffsetX, mSystemTimeValue, aEmitterOffsetXInterp); aParticle->mPosition.y += FloatTrackEvaluate( - mEmitterDef->mEmitterOffsetY, mSystemTimeValue, aEmitterOffsetYInterp); + mEmitterDef->mEmitterOffsetY, mSystemTimeValue, aEmitterOffsetYInterp); aParticle->mAnimationTimeValue = 0.0f; if (mEmitterDef->mAnimated || FloatTrackIsSet(mEmitterDef->mAnimationRate)) aParticle->mImageFrame = 0; else aParticle->mImageFrame = - Sexy::Rand(mEmitterDef->mImageFrames); + Sexy::Rand(mEmitterDef->mImageFrames); if (TestBit(mEmitterDef->mParticleFlags, (int)ParticleFlags::PARTICLE_RANDOM_LAUNCH_SPIN)) aParticle->mSpinPosition = Sexy::Rand((float)(2 * PI)); @@ -455,17 +453,17 @@ TodParticle *TodParticleEmitter::SpawnParticle(int theIndex, int theSpawnCount) } float TodParticleEmitter::ParticleTrackEvaluate(FloatParameterTrack &theTrack, - TodParticle *theParticle, - ParticleTracks theParticleTrack) + TodParticle *theParticle, + ParticleTracks theParticleTrack) { return FloatTrackEvaluate( - theTrack, theParticle->mParticleTimeValue, theParticle->mParticleInterp[(int)theParticleTrack]); + theTrack, theParticle->mParticleTimeValue, theParticle->mParticleInterp[(int)theParticleTrack]); } void TodParticleEmitter::UpdateParticleField(TodParticle *theParticle, - ParticleField *theParticleField, - float theParticleTimeValue, - int theFieldIndex) + ParticleField *theParticleField, + float theParticleTimeValue, + int theFieldIndex) { TOD_ASSERT(theFieldIndex < MAX_PARTICLE_FIELDS); float aInterpX = theParticle->mParticleFieldInterp[theFieldIndex][0]; @@ -481,15 +479,14 @@ void TodParticleEmitter::UpdateParticleField(TodParticle *theParticle, theParticle->mVelocity.x *= 1 - x; theParticle->mVelocity.y *= 1 - y; break; - case ParticleFieldType::FIELD_ACCELERATION: + case ParticleFieldType::FIELD_ACCELERATION: theParticle->mVelocity.x += 0.01f * x; theParticle->mVelocity.y += 0.01f * y; break; - case ParticleFieldType::FIELD_ATTRACTOR: - { + case ParticleFieldType::FIELD_ATTRACTOR: { float aDiffX = x - (theParticle->mPosition.x - mSystemCenter.x); float aDiffY = y - (theParticle->mPosition.y - mSystemCenter.y); - + theParticle->mVelocity.x += 0.01f * aDiffX; theParticle->mVelocity.y += 0.01f * aDiffY; break; @@ -502,12 +499,11 @@ void TodParticleEmitter::UpdateParticleField(TodParticle *theParticle, theParticle->mPosition.x += 0.01 * x; theParticle->mPosition.y += 0.01 * y; break; - case ParticleFieldType::FIELD_POSITION: - { + case ParticleFieldType::FIELD_POSITION: { float aLastX = - FloatTrackEvaluateFromLastTime(theParticleField->mX, theParticle->mParticleLastTimeValue, aInterpX); + FloatTrackEvaluateFromLastTime(theParticleField->mX, theParticle->mParticleLastTimeValue, aInterpX); float aLastY = - FloatTrackEvaluateFromLastTime(theParticleField->mY, theParticle->mParticleLastTimeValue, aInterpY); + FloatTrackEvaluateFromLastTime(theParticleField->mY, theParticle->mParticleLastTimeValue, aInterpY); theParticle->mPosition.x += x - aLastX; theParticle->mPosition.y += y - aLastY; break; @@ -517,25 +513,24 @@ void TodParticleEmitter::UpdateParticleField(TodParticle *theParticle, { theParticle->mPosition.y = mSystemCenter.y + y; float aCollisionReflect = - FloatTrackEvaluate(mEmitterDef->mCollisionReflect, - theParticleTimeValue, - theParticle->mParticleInterp[ParticleTracks::TRACK_PARTICLE_COLLISION_REFLECT]); + FloatTrackEvaluate(mEmitterDef->mCollisionReflect, + theParticleTimeValue, + theParticle->mParticleInterp[ParticleTracks::TRACK_PARTICLE_COLLISION_REFLECT]); float aCollisionSpin = - FloatTrackEvaluate(mEmitterDef->mCollisionSpin, - theParticleTimeValue, - theParticle->mParticleInterp[ParticleTracks::TRACK_PARTICLE_COLLISION_SPIN]) / - 1000.0f; + FloatTrackEvaluate(mEmitterDef->mCollisionSpin, + theParticleTimeValue, + theParticle->mParticleInterp[ParticleTracks::TRACK_PARTICLE_COLLISION_SPIN]) / + 1000.0f; theParticle->mSpinVelocity = theParticle->mVelocity.y * aCollisionSpin; theParticle->mVelocity.x *= aCollisionReflect; theParticle->mVelocity.y *= -aCollisionReflect; } break; - case ParticleFieldType::FIELD_SHAKE: - { + case ParticleFieldType::FIELD_SHAKE: { float aLastX = - FloatTrackEvaluateFromLastTime(theParticleField->mX, theParticle->mParticleLastTimeValue, aInterpX); + FloatTrackEvaluateFromLastTime(theParticleField->mX, theParticle->mParticleLastTimeValue, aInterpX); float aLastY = - FloatTrackEvaluateFromLastTime(theParticleField->mY, theParticle->mParticleLastTimeValue, aInterpY); + FloatTrackEvaluateFromLastTime(theParticleField->mY, theParticle->mParticleLastTimeValue, aInterpY); int aLastRandSeed = theParticle->mParticleAge - 1; if (aLastRandSeed == -1) aLastRandSeed = theParticle->mParticleDuration - 1; @@ -547,8 +542,7 @@ void TodParticleEmitter::UpdateParticleField(TodParticle *theParticle, theParticle->mPosition.y += y * ((float)rand() / RAND_MAX * 2.0f - 1.0f); break; } - case ParticleFieldType::FIELD_CIRCLE: - { + case ParticleFieldType::FIELD_CIRCLE: { SexyVector2 aToCenter = theParticle->mPosition - mSystemCenter; SexyVector2 aMotion = aToCenter.Perp().Normalize(); float aRadius = aToCenter.Magnitude(); @@ -556,8 +550,7 @@ void TodParticleEmitter::UpdateParticleField(TodParticle *theParticle, theParticle->mPosition += aMotion; break; } - case ParticleFieldType::FIELD_AWAY: - { + case ParticleFieldType::FIELD_AWAY: { SexyVector2 aToCenter = theParticle->mPosition - mSystemCenter; SexyVector2 aMotion = aToCenter.Normalize(); float aRadius = aToCenter.Magnitude(); @@ -577,8 +570,8 @@ float TodParticleEmitter::SystemTrackEvaluate(FloatParameterTrack &theTrack, Par } void TodParticleEmitter::UpdateSystemField(ParticleField *theParticleField, - float theParticleTimeValue, - int theFieldIndex) + float theParticleTimeValue, + int theFieldIndex) { TOD_ASSERT(theFieldIndex < MAX_PARTICLE_FIELDS); float aInterpX = mSystemFieldInterp[theFieldIndex][0]; @@ -618,7 +611,7 @@ bool TodParticleEmitter::CrossFadeParticleToName(TodParticle *theParticle, const TodParticleEmitter *aEmitter = mParticleSystem->mParticleHolder->mEmitters.DataArrayAlloc(); aEmitter->TodEmitterInitialize(mSystemCenter.x, mSystemCenter.y, mParticleSystem, aDef); ParticleEmitterID aEmitterID = - (ParticleEmitterID)mParticleSystem->mParticleHolder->mEmitters.DataArrayGetID(aEmitter); + (ParticleEmitterID)mParticleSystem->mParticleHolder->mEmitters.DataArrayGetID(aEmitter); mParticleSystem->mEmitterList.AddTail(aEmitterID); return CrossFadeParticle(theParticle, aEmitter); } @@ -632,11 +625,11 @@ bool TodParticleEmitter::UpdateParticle(TodParticle *theParticle) else if (theParticle->mCrossFadeDuration > 0) theParticle->mParticleAge = theParticle->mParticleDuration - 1; else if (*mEmitterDef->mOnDuration == '\0' || - !CrossFadeParticleToName(theParticle, mEmitterDef->mOnDuration)) + !CrossFadeParticleToName(theParticle, mEmitterDef->mOnDuration)) return false; } if (theParticle->mCrossFadeParticleID != ParticleID::PARTICLEID_NULL && - mParticleSystem->mParticleHolder->mParticles.DataArrayTryToGet(theParticle->mCrossFadeParticleID) == nullptr) + mParticleSystem->mParticleHolder->mParticles.DataArrayTryToGet(theParticle->mCrossFadeParticleID) == nullptr) return false; theParticle->mParticleTimeValue = theParticle->mParticleAge / ((float)theParticle->mParticleDuration - 1); @@ -644,22 +637,22 @@ bool TodParticleEmitter::UpdateParticle(TodParticle *theParticle) UpdateParticleField(theParticle, &mEmitterDef->mParticleFields[i], theParticle->mParticleTimeValue, i); theParticle->mPosition += theParticle->mVelocity; float aSpinSpeed = - ParticleTrackEvaluate(mEmitterDef->mParticleSpinSpeed, theParticle, ParticleTracks::TRACK_PARTICLE_SPIN_SPEED) * - 0.01; + ParticleTrackEvaluate(mEmitterDef->mParticleSpinSpeed, theParticle, ParticleTracks::TRACK_PARTICLE_SPIN_SPEED) * + 0.01; float aSpinAngle = - ParticleTrackEvaluate(mEmitterDef->mParticleSpinAngle, theParticle, ParticleTracks::TRACK_PARTICLE_SPIN_ANGLE); + ParticleTrackEvaluate(mEmitterDef->mParticleSpinAngle, theParticle, ParticleTracks::TRACK_PARTICLE_SPIN_ANGLE); float aLastSpinAngle = - FloatTrackEvaluateFromLastTime(mEmitterDef->mParticleSpinAngle, - theParticle->mParticleLastTimeValue, - theParticle->mParticleInterp[ParticleTracks::TRACK_PARTICLE_SPIN_ANGLE]); + FloatTrackEvaluateFromLastTime(mEmitterDef->mParticleSpinAngle, + theParticle->mParticleLastTimeValue, + theParticle->mParticleInterp[ParticleTracks::TRACK_PARTICLE_SPIN_ANGLE]); theParticle->mSpinPosition += - DEG_TO_RAD(aSpinSpeed + aSpinAngle - aLastSpinAngle) + theParticle->mSpinVelocity; + DEG_TO_RAD(aSpinSpeed + aSpinAngle - aLastSpinAngle) + theParticle->mSpinVelocity; if (FloatTrackIsSet(mEmitterDef->mAnimationRate)) { float aAnimTime = ParticleTrackEvaluate( - mEmitterDef->mAnimationRate, theParticle, ParticleTracks::TRACK_PARTICLE_ANIMATION_RATE) * - 0.01; + mEmitterDef->mAnimationRate, theParticle, ParticleTracks::TRACK_PARTICLE_ANIMATION_RATE) * + 0.01; theParticle->mAnimationTimeValue += aAnimTime; while (theParticle->mAnimationTimeValue >= 1.0f) theParticle->mAnimationTimeValue -= 1.0f; @@ -675,25 +668,25 @@ bool TodParticleEmitter::UpdateParticle(TodParticle *theParticle) void TodParticleEmitter::UpdateSpawning() { TodParticleEmitter *aCrossFadeEmitter = - mParticleSystem->mParticleHolder->mEmitters.DataArrayTryToGet((unsigned int)mCrossFadeEmitterID); + mParticleSystem->mParticleHolder->mEmitters.DataArrayTryToGet((unsigned int)mCrossFadeEmitterID); TodParticleEmitter *aSpawningEmitter = - !aCrossFadeEmitter ? this : aCrossFadeEmitter; + !aCrossFadeEmitter ? this : aCrossFadeEmitter; mSpawnAccum += aSpawningEmitter->SystemTrackEvaluate(aSpawningEmitter->mEmitterDef->mSpawnRate, ParticleSystemTracks::TRACK_SPAWN_RATE) * 0.01; int aSpawnCount = (int)mSpawnAccum; mSpawnAccum -= aSpawnCount; int aSpawnMinActive = (int)aSpawningEmitter->SystemTrackEvaluate(aSpawningEmitter->mEmitterDef->mSpawnMinActive, - ParticleSystemTracks::TRACK_SPAWN_MIN_ACTIVE); + ParticleSystemTracks::TRACK_SPAWN_MIN_ACTIVE); if (aSpawnMinActive >= 0 && aSpawnCount < aSpawnMinActive - mParticleList.mSize) aSpawnCount = aSpawnMinActive - mParticleList.mSize; int aSpawnMaxActive = (int)aSpawningEmitter->SystemTrackEvaluate(aSpawningEmitter->mEmitterDef->mSpawnMaxActive, - ParticleSystemTracks::TRACK_SPAWN_MAX_ACTIVE); + ParticleSystemTracks::TRACK_SPAWN_MAX_ACTIVE); if (aSpawnMaxActive >= 0 && aSpawnCount > aSpawnMaxActive - mParticleList.mSize) aSpawnCount = aSpawnMaxActive - mParticleList.mSize; if (FloatTrackIsSet(aSpawningEmitter->mEmitterDef->mSpawnMaxLaunched)) { int aSpawnMaxLaunched = aSpawningEmitter->SystemTrackEvaluate(aSpawningEmitter->mEmitterDef->mSpawnMaxLaunched, - ParticleSystemTracks::TRACK_SPAWN_MAX_LAUNCHED); + ParticleSystemTracks::TRACK_SPAWN_MAX_LAUNCHED); if (aSpawnCount > aSpawnMaxLaunched - mParticlesSpawned) aSpawnCount = aSpawnMaxLaunched - mParticlesSpawned; } @@ -736,7 +729,7 @@ void TodParticleSystem::Update() TodParticleEmitter *aEmitter = mParticleHolder->mEmitters.DataArrayGet((unsigned int)aNode->mValue); aEmitter->Update(); if ((FloatTrackIsSet(aEmitter->mEmitterDef->mCrossFadeDuration) && aEmitter->mParticleList.mSize > 0) || - !aEmitter->mDead) + !aEmitter->mDead) aEmitterAlive = true; } if (!aEmitterAlive) @@ -761,14 +754,14 @@ bool TodParticleEmitter::CrossFadeParticle(TodParticle *theParticle, TodParticle TodParticle *aToParticle = theToEmitter->SpawnParticle(0, 1); if (aToParticle == nullptr) return false; - if (mEmitterCrossFadeCountDown > 0) + if (mEmitterCrossFadeCountDown > 0) theParticle->mCrossFadeDuration = - mEmitterCrossFadeCountDown; + mEmitterCrossFadeCountDown; else { float aCrossFadeDurationInterp = Sexy::Rand(1); int aCrossFadeDuration = FloatTrackEvaluate( - theToEmitter->mEmitterDef->mCrossFadeDuration, mSystemTimeValue, aCrossFadeDurationInterp); + theToEmitter->mEmitterDef->mCrossFadeDuration, mSystemTimeValue, aCrossFadeDurationInterp); theParticle->mCrossFadeDuration = std::max(1, aCrossFadeDuration); } if (!FloatTrackIsSet(theToEmitter->mEmitterDef->mParticleDuration)) @@ -780,7 +773,7 @@ bool TodParticleEmitter::CrossFadeParticle(TodParticle *theParticle, TodParticle void TodParticleEmitter::DeleteParticle(TodParticle *theParticle) { TodParticle *aCrossFadeParticle = - mParticleSystem->mParticleHolder->mParticles.DataArrayTryToGet((unsigned int)theParticle->mCrossFadeParticleID); + mParticleSystem->mParticleHolder->mParticles.DataArrayTryToGet((unsigned int)theParticle->mCrossFadeParticleID); if (aCrossFadeParticle != nullptr) { aCrossFadeParticle->mParticleEmitter->DeleteParticle(aCrossFadeParticle); @@ -819,7 +812,7 @@ void TodParticleEmitter::Update() if (mCrossFadeEmitterID != ParticleEmitterID::PARTICLEEMITTERID_NULL) { TodParticleEmitter *aCrossFadeEmitter = - mParticleSystem->mParticleHolder->mEmitters.DataArrayTryToGet(mCrossFadeEmitterID); + mParticleSystem->mParticleHolder->mEmitters.DataArrayTryToGet(mCrossFadeEmitterID); if (aCrossFadeEmitter == nullptr || aCrossFadeEmitter->mDead) aDie = true; } @@ -899,17 +892,17 @@ bool TodParticleEmitter::GetRenderParams(TodParticle *theParticle, ParticleRende float aSystemBlue = aEmitter->SystemTrackEvaluate(aDef->mSystemBlue, ParticleSystemTracks::TRACK_SYSTEM_BLUE); float aSystemAlpha = aEmitter->SystemTrackEvaluate(aDef->mSystemAlpha, ParticleSystemTracks::TRACK_SYSTEM_ALPHA); float aSystemBrightness = - aEmitter->SystemTrackEvaluate(aDef->mSystemBrightness, ParticleSystemTracks::TRACK_SYSTEM_BRIGHTNESS); + aEmitter->SystemTrackEvaluate(aDef->mSystemBrightness, ParticleSystemTracks::TRACK_SYSTEM_BRIGHTNESS); float aParticleRed = - aEmitter->ParticleTrackEvaluate(aDef->mParticleRed, theParticle, ParticleTracks::TRACK_PARTICLE_RED); + aEmitter->ParticleTrackEvaluate(aDef->mParticleRed, theParticle, ParticleTracks::TRACK_PARTICLE_RED); float aParticleGreen = - aEmitter->ParticleTrackEvaluate(aDef->mParticleGreen, theParticle, ParticleTracks::TRACK_PARTICLE_GREEN); + aEmitter->ParticleTrackEvaluate(aDef->mParticleGreen, theParticle, ParticleTracks::TRACK_PARTICLE_GREEN); float aParticleBlue = - aEmitter->ParticleTrackEvaluate(aDef->mParticleBlue, theParticle, ParticleTracks::TRACK_PARTICLE_BLUE); + aEmitter->ParticleTrackEvaluate(aDef->mParticleBlue, theParticle, ParticleTracks::TRACK_PARTICLE_BLUE); float aParticleAlpha = - aEmitter->ParticleTrackEvaluate(aDef->mParticleAlpha, theParticle, ParticleTracks::TRACK_PARTICLE_ALPHA); + aEmitter->ParticleTrackEvaluate(aDef->mParticleAlpha, theParticle, ParticleTracks::TRACK_PARTICLE_ALPHA); float aParticleBrightness = aEmitter->ParticleTrackEvaluate( - aDef->mParticleBrightness, theParticle, ParticleTracks::TRACK_PARTICLE_BRIGHTNESS); + aDef->mParticleBrightness, theParticle, ParticleTracks::TRACK_PARTICLE_BRIGHTNESS); float aBrightness = aParticleBrightness * aSystemBrightness; theParams->mRed = aParticleRed * aSystemRed * aEmitter->mColorOverride.mRed * aBrightness; theParams->mGreen = aParticleGreen * aSystemGreen * aEmitter->mColorOverride.mGreen * aBrightness; @@ -918,14 +911,14 @@ bool TodParticleEmitter::GetRenderParams(TodParticle *theParticle, ParticleRende theParams->mPosX = theParticle->mPosition.x; theParams->mPosY = theParticle->mPosition.y; float aParticleScale = - aEmitter->ParticleTrackEvaluate(aDef->mParticleScale, theParticle, ParticleTracks::TRACK_PARTICLE_SCALE); + aEmitter->ParticleTrackEvaluate(aDef->mParticleScale, theParticle, ParticleTracks::TRACK_PARTICLE_SCALE); theParams->mParticleStretch = - aEmitter->ParticleTrackEvaluate(aDef->mParticleStretch, theParticle, ParticleTracks::TRACK_PARTICLE_STRETCH); + aEmitter->ParticleTrackEvaluate(aDef->mParticleStretch, theParticle, ParticleTracks::TRACK_PARTICLE_STRETCH); theParams->mParticleScale = aParticleScale * aEmitter->mScaleOverride; theParams->mSpinPosition = theParticle->mSpinPosition; TodParticle *aCrossFadeParticle = aEmitter->mParticleSystem->mParticleHolder->mParticles.DataArrayTryToGet( - (unsigned int)theParticle->mCrossFadeParticleID); + (unsigned int)theParticle->mCrossFadeParticleID); if (aCrossFadeParticle != nullptr) { ParticleRenderParams aCrossFadeParams; @@ -933,47 +926,47 @@ bool TodParticleEmitter::GetRenderParams(TodParticle *theParticle, ParticleRende { float aFraction = theParticle->mParticleAge / (float)(aCrossFadeParticle->mCrossFadeDuration - 1); theParams->mRed = CrossFadeLerp( - aCrossFadeParams.mRed, theParams->mRed, aCrossFadeParams.mRedIsSet, theParams->mRedIsSet, aFraction); + aCrossFadeParams.mRed, theParams->mRed, aCrossFadeParams.mRedIsSet, theParams->mRedIsSet, aFraction); theParams->mGreen = CrossFadeLerp(aCrossFadeParams.mGreen, - theParams->mGreen, - aCrossFadeParams.mGreenIsSet, - theParams->mGreenIsSet, - aFraction); + theParams->mGreen, + aCrossFadeParams.mGreenIsSet, + theParams->mGreenIsSet, + aFraction); theParams->mBlue = CrossFadeLerp(aCrossFadeParams.mBlue, - theParams->mBlue, - aCrossFadeParams.mBlueIsSet, - theParams->mBlueIsSet, - aFraction); + theParams->mBlue, + aCrossFadeParams.mBlueIsSet, + theParams->mBlueIsSet, + aFraction); theParams->mAlpha = CrossFadeLerp(aCrossFadeParams.mAlpha, - theParams->mAlpha, - aCrossFadeParams.mAlphaIsSet, - theParams->mAlphaIsSet, - aFraction); + theParams->mAlpha, + aCrossFadeParams.mAlphaIsSet, + theParams->mAlphaIsSet, + aFraction); theParams->mParticleScale = CrossFadeLerp(aCrossFadeParams.mParticleScale, - theParams->mParticleScale, - aCrossFadeParams.mParticleScaleIsSet, - theParams->mParticleScaleIsSet, - aFraction); + theParams->mParticleScale, + aCrossFadeParams.mParticleScaleIsSet, + theParams->mParticleScaleIsSet, + aFraction); theParams->mParticleStretch = CrossFadeLerp(aCrossFadeParams.mParticleStretch, - theParams->mParticleStretch, - aCrossFadeParams.mParticleStretchIsSet, - theParams->mParticleStretchIsSet, - aFraction); + theParams->mParticleStretch, + aCrossFadeParams.mParticleStretchIsSet, + theParams->mParticleStretchIsSet, + aFraction); theParams->mSpinPosition = CrossFadeLerp(aCrossFadeParams.mSpinPosition, - theParams->mSpinPosition, - aCrossFadeParams.mSpinPositionIsSet, - theParams->mSpinPositionIsSet, - aFraction); + theParams->mSpinPosition, + aCrossFadeParams.mSpinPositionIsSet, + theParams->mSpinPositionIsSet, + aFraction); theParams->mPosX = CrossFadeLerp(aCrossFadeParams.mPosX, - theParams->mPosX, - aCrossFadeParams.mPositionIsSet, - theParams->mPositionIsSet, - aFraction); + theParams->mPosX, + aCrossFadeParams.mPositionIsSet, + theParams->mPositionIsSet, + aFraction); theParams->mPosY = CrossFadeLerp(aCrossFadeParams.mPosY, - theParams->mPosY, - aCrossFadeParams.mPositionIsSet, - theParams->mPositionIsSet, - aFraction); + theParams->mPosY, + aCrossFadeParams.mPositionIsSet, + theParams->mPositionIsSet, + aFraction); theParams->mRedIsSet |= aCrossFadeParams.mRedIsSet; theParams->mGreenIsSet |= aCrossFadeParams.mGreenIsSet; theParams->mBlueIsSet |= aCrossFadeParams.mBlueIsSet; @@ -988,16 +981,16 @@ bool TodParticleEmitter::GetRenderParams(TodParticle *theParticle, ParticleRende } void RenderParticle(Graphics *g, - TodParticle *theParticle, - const Color &theColor, - ParticleRenderParams *theParams, - TodTriangleGroup *theTriangleGroup) + TodParticle *theParticle, + const Color &theColor, + ParticleRenderParams *theParams, + TodTriangleGroup *theTriangleGroup) { TodParticleEmitter *aEmitter = theParticle->mParticleEmitter; TodEmitterDefinition *aEmitterDef = aEmitter->mEmitterDef; Image *aImage = aEmitter->mImageOverride != nullptr - ? aEmitter->mImageOverride - : aEmitterDef->mImage; + ? aEmitter->mImageOverride + : aEmitterDef->mImage; if (aImage == nullptr) return; @@ -1008,12 +1001,12 @@ void RenderParticle(Graphics *g, { if (FloatTrackIsSet(aEmitterDef->mAnimationRate)) aFrame = ClampInt(theParticle->mAnimationTimeValue * aEmitterDef->mImageFrames, - 0, - aEmitterDef->mImageFrames - 1); + 0, + aEmitterDef->mImageFrames - 1); else if (aEmitterDef->mAnimated) aFrame = ClampInt(theParticle->mParticleTimeValue * aEmitterDef->mImageFrames, - 0, - aEmitterDef->mImageFrames - 1); + 0, + aEmitterDef->mImageFrames - 1); else aFrame = theParticle->mImageFrame; } @@ -1022,15 +1015,15 @@ void RenderParticle(Graphics *g, aFrame = aImage->mNumCols - 1; Rect aSrcRect( - aFrame * aCelWidth, std::min(aEmitterDef->mImageRow, aImage->mNumRows - 1) * aCelHeight, aCelWidth, aCelHeight); + aFrame * aCelWidth, std::min(aEmitterDef->mImageRow, aImage->mNumRows - 1) * aCelHeight, aCelWidth, aCelHeight); float aClipTop = TodParticleEmitter::ParticleTrackEvaluate( - aEmitterDef->mClipTop, theParticle, ParticleTracks::TRACK_PARTICLE_CLIP_TOP); + aEmitterDef->mClipTop, theParticle, ParticleTracks::TRACK_PARTICLE_CLIP_TOP); float aClipBottom = TodParticleEmitter::ParticleTrackEvaluate( - aEmitterDef->mClipBottom, theParticle, ParticleTracks::TRACK_PARTICLE_CLIP_BOTTOM); + aEmitterDef->mClipBottom, theParticle, ParticleTracks::TRACK_PARTICLE_CLIP_BOTTOM); float aClipLeft = TodParticleEmitter::ParticleTrackEvaluate( - aEmitterDef->mClipLeft, theParticle, ParticleTracks::TRACK_PARTICLE_CLIP_LEFT); + aEmitterDef->mClipLeft, theParticle, ParticleTracks::TRACK_PARTICLE_CLIP_LEFT); float aClipRight = TodParticleEmitter::ParticleTrackEvaluate( - aEmitterDef->mClipRight, theParticle, ParticleTracks::TRACK_PARTICLE_CLIP_RIGHT); + aEmitterDef->mClipRight, theParticle, ParticleTracks::TRACK_PARTICLE_CLIP_RIGHT); TOD_ASSERT(aClipTop >= 0.0f && aClipTop <= 1.0f); TOD_ASSERT(aClipBottom >= 0.0f && aClipBottom <= 1.0f); TOD_ASSERT(aClipLeft >= 0.0f && aClipLeft <= 1.0f); @@ -1046,7 +1039,7 @@ void RenderParticle(Graphics *g, TOD_ASSERT(aSrcRect.mX >= 0 && aSrcRect.mX < 10000); TOD_ASSERT(aSrcRect.mY >= 0 && aSrcRect.mY < 10000); - if (TestBit(aEmitterDef->mParticleFlags, (int)ParticleFlags::PARTICLE_ALIGN_TO_PIXELS)) + if (TestBit(aEmitterDef->mParticleFlags, (int)ParticleFlags::PARTICLE_ALIGN_TO_PIXELS)) { theParams->mPosX = FloatRoundToInt(theParams->mPosX); theParams->mPosY = FloatRoundToInt(theParams->mPosY); @@ -1068,15 +1061,15 @@ void RenderParticle(Graphics *g, { SexyMatrix3 aTransform; TodScaleRotateTransformMatrix(aTransform, - theParams->mPosX, - theParams->mPosY, - theParams->mSpinPosition, - theParams->mParticleScale, - theParams->mParticleStretch * theParams->mParticleScale); + theParams->mPosX, + theParams->mPosY, + theParams->mSpinPosition, + theParams->mParticleScale, + theParams->mParticleStretch * theParams->mParticleScale); theTriangleGroup->AddTriangle(g, aImage, aTransform, g->mClipRect, theColor, aDrawMode, aSrcRect); if (aEmitter->mExtraAdditiveDrawOverride) theTriangleGroup->AddTriangle( - g, aImage, aTransform, g->mClipRect, theColor, Graphics::DRAWMODE_ADDITIVE, aSrcRect); + g, aImage, aTransform, g->mClipRect, theColor, Graphics::DRAWMODE_ADDITIVE, aSrcRect); } } @@ -1089,10 +1082,10 @@ void TodParticleEmitter::DrawParticle(Graphics *g, TodParticle *theParticle, Tod if (GetRenderParams(theParticle, &aParams)) { Color aColor(ClampInt(FloatRoundToInt(aParams.mRed), 0, 255), - ClampInt(FloatRoundToInt(aParams.mGreen), 0, 255), - ClampInt(FloatRoundToInt(aParams.mBlue), 0, 255), - ClampInt(FloatRoundToInt(aParams.mAlpha), 0, 255)); - if (aColor.mAlpha > 0) + ClampInt(FloatRoundToInt(aParams.mGreen), 0, 255), + ClampInt(FloatRoundToInt(aParams.mBlue), 0, 255), + ClampInt(FloatRoundToInt(aParams.mAlpha), 0, 255)); + if (aColor.mAlpha > 0) { aParams.mPosX += g->mTransX; aParams.mPosY += g->mTransY; @@ -1100,9 +1093,9 @@ void TodParticleEmitter::DrawParticle(Graphics *g, TodParticle *theParticle, Tod TodParticle *aParticle; if (mImageOverride || mEmitterDef->mImage) aParticle = theParticle; - else + else aParticle = mParticleSystem->mParticleHolder->mParticles.DataArrayTryToGet( - (unsigned int)theParticle->mCrossFadeParticleID); + (unsigned int)theParticle->mCrossFadeParticleID); if (aParticle != nullptr) RenderParticle(g, aParticle, aColor, &aParams, theTriangleGroup); } @@ -1119,13 +1112,13 @@ void TodParticleEmitter::Draw(Graphics *g) { bool aHardWare = gSexyAppBase->Is3DAccelerated(); if ((TestBit(mEmitterDef->mParticleFlags, (int)ParticleFlags::PARTICLE_SOFTWARE_ONLY) && aHardWare) || - (TestBit(mEmitterDef->mParticleFlags, (int)ParticleFlags::PARTICLE_HARDWARE_ONLY) && !aHardWare)) + (TestBit(mEmitterDef->mParticleFlags, (int)ParticleFlags::PARTICLE_HARDWARE_ONLY) && !aHardWare)) return; TodTriangleGroup aTriangleGroup; for (TodListNode *aNode = mParticleList.mHead; aNode != nullptr; aNode = aNode->mNext) DrawParticle( - g, mParticleSystem->mParticleHolder->mParticles.DataArrayGet((unsigned int)aNode->mValue), &aTriangleGroup); + g, mParticleSystem->mParticleHolder->mParticles.DataArrayGet((unsigned int)aNode->mValue), &aTriangleGroup); aTriangleGroup.DrawGroup(g); } @@ -1149,7 +1142,7 @@ void TodParticleEmitter::SystemMove(float theX, float theY) for (TodListNode *aNode = mParticleList.mHead; aNode != nullptr; aNode = aNode->mNext) { TodParticle *aParticle = - mParticleSystem->mParticleHolder->mParticles.DataArrayGet((unsigned int)aNode->mValue); + mParticleSystem->mParticleHolder->mParticles.DataArrayGet((unsigned int)aNode->mValue); aParticle->mPosition.x += aDeltaX; aParticle->mPosition.y += aDeltaY; } @@ -1244,7 +1237,7 @@ void TodParticleEmitter::CrossFadeEmitter(TodParticleEmitter *theToEmitter) float aCrossFadeDurationInterp = Sexy::Rand(1.0f); mEmitterCrossFadeCountDown = - FloatTrackEvaluate(theToEmitter->mEmitterDef->mCrossFadeDuration, mSystemTimeValue, aCrossFadeDurationInterp); + FloatTrackEvaluate(theToEmitter->mEmitterDef->mCrossFadeDuration, mSystemTimeValue, aCrossFadeDurationInterp); mEmitterCrossFadeCountDown = std::max(1, mEmitterCrossFadeCountDown); mCrossFadeEmitterID = (ParticleEmitterID)mParticleSystem->mParticleHolder->mEmitters.DataArrayGetID(theToEmitter); if (!FloatTrackIsSet(theToEmitter->mEmitterDef->mSystemDuration)) @@ -1252,7 +1245,7 @@ void TodParticleEmitter::CrossFadeEmitter(TodParticleEmitter *theToEmitter) for (TodListNode *aNode = mParticleList.mHead; aNode != nullptr; aNode = aNode->mNext) CrossFadeParticle(mParticleSystem->mParticleHolder->mParticles.DataArrayGet((unsigned int)aNode->mValue), - theToEmitter); + theToEmitter); } void TodParticleSystem::CrossFade(const char *theEmitterName) @@ -1282,9 +1275,9 @@ void TodParticleSystem::CrossFade(const char *theEmitterName) { TodParticleEmitter *aCrossFadeEmitter = mParticleHolder->mEmitters.DataArrayAlloc(); aCrossFadeEmitter->TodEmitterInitialize( - aEmitter->mSystemCenter.x, aEmitter->mSystemCenter.y, this, aEmitterDef); + aEmitter->mSystemCenter.x, aEmitter->mSystemCenter.y, this, aEmitterDef); ParticleEmitterID aCrossFadeEmitterID = - (ParticleEmitterID)mParticleHolder->mEmitters.DataArrayGetID(aCrossFadeEmitter); + (ParticleEmitterID)mParticleHolder->mEmitters.DataArrayGetID(aCrossFadeEmitter); mEmitterList.AddTail(aCrossFadeEmitterID); aEmitter->CrossFadeEmitter(aCrossFadeEmitter); } @@ -1317,11 +1310,11 @@ void TodParticleHolder::DisposeHolder() bool TodParticleHolder::IsOverLoaded() { return mParticleSystems.mSize > MAX_PARTICLES_SIZE || mEmitters.mSize > MAX_PARTICLES_SIZE || - mParticles.mSize > MAX_PARTICLES_SIZE; + mParticles.mSize > MAX_PARTICLES_SIZE; } TodParticleSystem *TodParticleHolder::AllocParticleSystemFromDef( - float theX, float theY, int theRenderOrder, TodParticleDefinition *theDefinition, ParticleEffect theParticleEffect) + float theX, float theY, int theRenderOrder, TodParticleDefinition *theDefinition, ParticleEffect theParticleEffect) { if (mParticleSystems.mSize == mParticleSystems.mMaxSize) { @@ -1341,11 +1334,11 @@ TodParticleSystem *TodParticleHolder::AllocParticleSystemFromDef( } TodParticleSystem *TodParticleHolder::AllocParticleSystem(float theX, - float theY, - int theRenderOrder, - ParticleEffect theParticleEffect) + float theY, + int theRenderOrder, + ParticleEffect theParticleEffect) { TOD_ASSERT((int)theParticleEffect >= 0 && (int)theParticleEffect < gParticleDefCount); return AllocParticleSystemFromDef( - theX, theY, theRenderOrder, &gParticleDefArray[(int)theParticleEffect], theParticleEffect); + theX, theY, theRenderOrder, &gParticleDefArray[(int)theParticleEffect], theParticleEffect); } diff --git a/src/Sexy.TodLib/TodParticle.h b/src/Sexy.TodLib/TodParticle.h index 6445918..2a81bbc 100644 --- a/src/Sexy.TodLib/TodParticle.h +++ b/src/Sexy.TodLib/TodParticle.h @@ -49,7 +49,7 @@ enum ParticleFieldType FIELD_CIRCLE, FIELD_AWAY, PARTICLE_FIELD_COUNT -}; +}; // ################################################################################ @@ -74,8 +74,8 @@ class FloatParameterTrackNode class FloatParameterTrack { public: - FloatParameterTrackNode *mNodes; - int mCountNodes; + FloatParameterTrackNode *mNodes{}; + int mCountNodes{}; }; class ParticleField @@ -83,7 +83,7 @@ class ParticleField public: ParticleFieldType mFieldType; FloatParameterTrack mX; - FloatParameterTrack mY; + FloatParameterTrack mY; }; class TodEmitterDefinition @@ -149,7 +149,7 @@ class TodParticleDefinition int mEmitterDefCount; }; -extern int gParticleDefCount; // [0x6A9F08] +extern int gParticleDefCount; // [0x6A9F08] extern TodParticleDefinition *gParticleDefArray; // [0x6A9F0C] class ParticleParams @@ -158,11 +158,11 @@ class ParticleParams ParticleEffect mParticleEffect; const char *mParticleFileName; }; -extern int gParticleParamArraySize; // [0x6A9F10] +extern int gParticleParamArraySize; // [0x6A9F10] extern ParticleParams *gParticleParamArray; // [0x6A9F14] -bool TodParticleLoadADef(TodParticleDefinition *theParticleDef, const char *theParticleFileName); -void TodParticleLoadDefinitions(ParticleParams *theParticleParamArray, int theParticleParamArraySize); +bool TodParticleLoadADef(TodParticleDefinition *theParticleDef, const char *theParticleFileName, bool recompile); +void TodParticleLoadDefinitions(ParticleParams *theParticleParamArray, int theParticleParamArraySize, bool recompile); void TodParticleFreeDefinitions(); extern ParticleParams gLawnParticleArray[(int)ParticleEffect::NUM_PARTICLES]; @@ -221,14 +221,14 @@ class TodParticleHolder void InitializeHolder(); void DisposeHolder(); TodParticleSystem *AllocParticleSystemFromDef(float theX, - float theY, - int theRenderOrder, - TodParticleDefinition *theDefinition, - ParticleEffect theParticleEffect); + float theY, + int theRenderOrder, + TodParticleDefinition *theDefinition, + ParticleEffect theParticleEffect); TodParticleSystem *AllocParticleSystem(float theX, - float theY, - int theRenderOrder, - ParticleEffect theParticleEffect); + float theY, + int theRenderOrder, + ParticleEffect theParticleEffect); bool IsOverLoaded(); }; @@ -301,9 +301,9 @@ class TodParticleEmitter public: void TodEmitterInitialize(float theX, - float theY, - TodParticleSystem *theSystem, - TodEmitterDefinition *theEmitterDef); + float theY, + TodParticleSystem *theSystem, + TodEmitterDefinition *theEmitterDef); void Update(); void Draw(Graphics *g); void SystemMove(float theX, float theY); @@ -317,23 +317,23 @@ class TodParticleEmitter bool CrossFadeParticleToName(TodParticle *theParticle, const char *theEmitterName); void DeleteAll(); void UpdateParticleField(TodParticle *theParticle, - ParticleField *theParticleField, - float theParticleTimeValue, - int theFieldIndex); + ParticleField *theParticleField, + float theParticleTimeValue, + int theFieldIndex); void UpdateSystemField(ParticleField *theParticleField, float theParticleTimeValue, int theFieldIndex); float SystemTrackEvaluate(FloatParameterTrack &theTrack, ParticleSystemTracks theSystemTrack); static float ParticleTrackEvaluate(FloatParameterTrack &theTrack, - TodParticle *theParticle, - ParticleTracks theParticleTrack); + TodParticle *theParticle, + ParticleTracks theParticleTrack); void DeleteParticle(TodParticle *theParticle); void DeleteNonCrossFading(); }; float CrossFadeLerp(float theFrom, float theTo, bool theFromIsSet, bool theToIsSet, float theFraction); void RenderParticle(Graphics *g, - TodParticle *theParticle, - const Color &theColor, - ParticleRenderParams *theParams, - TodTriangleGroup *theTriangleGroup); + TodParticle *theParticle, + const Color &theColor, + ParticleRenderParams *theParams, + TodTriangleGroup *theTriangleGroup); class TodParticleSystem { @@ -352,7 +352,7 @@ class TodParticleSystem ~TodParticleSystem(); void TodParticleInitializeFromDef( - float theX, float theY, int theRenderOrder, TodParticleDefinition *theDefinition, ParticleEffect theEffectType); + float theX, float theY, int theRenderOrder, TodParticleDefinition *theDefinition, ParticleEffect theEffectType); void ParticleSystemDie(); void Update(); void Draw(Graphics *g); diff --git a/src/Sexy.TodLib/Trail.cpp b/src/Sexy.TodLib/Trail.cpp index ef00b9c..5da7280 100644 --- a/src/Sexy.TodLib/Trail.cpp +++ b/src/Sexy.TodLib/Trail.cpp @@ -9,30 +9,18 @@ int gTrailParamArraySize; TrailParams *gTrailParamArray; TrailParams gLawnTrailArray[(int)TrailType::NUM_TRAILS] = { - {TrailType::TRAIL_ICE, "particles/IceTrail.trail"}}; - -TrailDefinition::TrailDefinition() -{ - memset(this, 0, sizeof(TrailDefinition)); - mMinPointDistance = 1.0f; - mMaxPoints = 2; - mTrailFlags = 0U; - mImage = nullptr; -} - -TrailDefinition::~TrailDefinition() -{ -} + { TrailType::TRAIL_ICE, "particles/IceTrail.trail" } +}; TrailPoint::TrailPoint() { } -bool TrailLoadADef(TrailDefinition *theTrailDef, const char *theTrailFileName) +bool TrailLoadADef(TrailDefinition *theTrailDef, const char *theTrailFileName, bool recompile) { TodHesitationBracket aHesitation("Load Trail '%s'", theTrailFileName); - if (!DefinitionLoadXML(StringToSexyString(theTrailFileName), &gTrailDefMap, theTrailDef)) + if (!DefinitionLoadXML(StringToSexyString(theTrailFileName), &gTrailDefMap, theTrailDef, recompile)) return false; FloatTrackSetDefault(theTrailDef->mWidthOverLength, 1.0f); @@ -43,7 +31,7 @@ bool TrailLoadADef(TrailDefinition *theTrailDef, const char *theTrailFileName) return true; } -void TrailLoadDefinitions(TrailParams *theTrailParamArray, int theTrailParamArraySize) +void TrailLoadDefinitions(TrailParams *theTrailParamArray, int theTrailParamArraySize, bool recompile) { TodHesitationBracket aHesitation("TrailLoadDefinitions"); TOD_ASSERT(!gTrailParamArray && !gTrailDefArray); @@ -57,7 +45,7 @@ void TrailLoadDefinitions(TrailParams *theTrailParamArray, int theTrailParamArra { TrailParams *aTrailParams = &theTrailParamArray[i]; TOD_ASSERT(aTrailParams->mTrailType == (TrailType)i); - if (!TrailLoadADef(&gTrailDefArray[i], aTrailParams->mTrailFileName)) + if (!TrailLoadADef(&gTrailDefArray[i], aTrailParams->mTrailFileName, recompile)) { char aBuf[512]; sprintf(aBuf, "Failed to load trail '%s'", aTrailParams->mTrailFileName); @@ -103,7 +91,7 @@ void Trail::AddPoint(float x, float y) float aDistance = Distance2D(x, y, aPoint.aPos.x, aPoint.aPos.y); if (aDistance < mDefinition->mMinPointDistance) { - return; + return; } } @@ -204,25 +192,25 @@ void Trail::Draw(Graphics *g) float aUCur = 1.0f - i / (float)(mNumTrailPoints - 1); float aUNext = 1.0f - (i + 1) / (float)(mNumTrailPoints - 1); float aWidthOverLengthCur = FloatTrackEvaluate( - mDefinition->mWidthOverLength, aUCur, mTrailInterp[(int)TrailTracks::TRACK_WIDTH_OVER_LENGTH]); + mDefinition->mWidthOverLength, aUCur, mTrailInterp[(int)TrailTracks::TRACK_WIDTH_OVER_LENGTH]); float aWidthOverLengthNext = FloatTrackEvaluate( - mDefinition->mWidthOverLength, aUNext, mTrailInterp[(int)TrailTracks::TRACK_WIDTH_OVER_LENGTH]); + mDefinition->mWidthOverLength, aUNext, mTrailInterp[(int)TrailTracks::TRACK_WIDTH_OVER_LENGTH]); float aWidthOverTimeCur = FloatTrackEvaluate( - mDefinition->mWidthOverTime, aTimeValue, mTrailInterp[(int)TrailTracks::TRACK_WIDTH_OVER_TIME]); + mDefinition->mWidthOverTime, aTimeValue, mTrailInterp[(int)TrailTracks::TRACK_WIDTH_OVER_TIME]); float aWidthOverTimeNext = FloatTrackEvaluate( - mDefinition->mWidthOverTime, aTimeValue, mTrailInterp[(int)TrailTracks::TRACK_WIDTH_OVER_TIME]); + mDefinition->mWidthOverTime, aTimeValue, mTrailInterp[(int)TrailTracks::TRACK_WIDTH_OVER_TIME]); float aAlphaOverLengthCur = FloatTrackEvaluate( - mDefinition->mAlphaOverLength, aUCur, mTrailInterp[(int)TrailTracks::TRACK_ALPHA_OVER_LENGTH]); + mDefinition->mAlphaOverLength, aUCur, mTrailInterp[(int)TrailTracks::TRACK_ALPHA_OVER_LENGTH]); float aAlphaOverLengthNext = FloatTrackEvaluate( - mDefinition->mAlphaOverLength, aUNext, mTrailInterp[(int)TrailTracks::TRACK_ALPHA_OVER_LENGTH]); + mDefinition->mAlphaOverLength, aUNext, mTrailInterp[(int)TrailTracks::TRACK_ALPHA_OVER_LENGTH]); float aAlphaOverTimeCur = FloatTrackEvaluate( - mDefinition->mAlphaOverTime, aTimeValue, mTrailInterp[(int)TrailTracks::TRACK_ALPHA_OVER_TIME]); + mDefinition->mAlphaOverTime, aTimeValue, mTrailInterp[(int)TrailTracks::TRACK_ALPHA_OVER_TIME]); float aAlphaOverTimeNext = FloatTrackEvaluate( - mDefinition->mAlphaOverTime, aTimeValue, mTrailInterp[(int)TrailTracks::TRACK_ALPHA_OVER_TIME]); + mDefinition->mAlphaOverTime, aTimeValue, mTrailInterp[(int)TrailTracks::TRACK_ALPHA_OVER_TIME]); int anAlphaCur = - ClampInt(FloatRoundToInt(aAlphaOverLengthCur * aAlphaOverTimeCur * mColorOverride.mAlpha), 0, 255); + ClampInt(FloatRoundToInt(aAlphaOverLengthCur * aAlphaOverTimeCur * mColorOverride.mAlpha), 0, 255); int anAlphaNext = - ClampInt(FloatRoundToInt(aAlphaOverLengthNext * aAlphaOverTimeNext * mColorOverride.mAlpha), 0, 255); + ClampInt(FloatRoundToInt(aAlphaOverLengthNext * aAlphaOverTimeNext * mColorOverride.mAlpha), 0, 255); Sexy::Color aColorCur = mColorOverride; Sexy::Color aColorNext = mColorOverride; aColorCur.mAlpha = anAlphaCur; @@ -236,9 +224,9 @@ void Trail::Draw(Graphics *g) aPosition[2].x = mTrailCenter.x + aPointNext.aPos.x + aNormalNext.x * aWidthOverLengthNext * aWidthOverTimeNext; aPosition[2].y = mTrailCenter.y + aPointNext.aPos.y + aNormalNext.y * aWidthOverLengthNext * aWidthOverTimeNext; aPosition[3].x = - mTrailCenter.x + aPointNext.aPos.x + -aNormalNext.x * aWidthOverLengthNext * aWidthOverTimeNext; + mTrailCenter.x + aPointNext.aPos.x + -aNormalNext.x * aWidthOverLengthNext * aWidthOverTimeNext; aPosition[3].y = - mTrailCenter.y + aPointNext.aPos.y + -aNormalNext.y * aWidthOverLengthNext * aWidthOverTimeNext; + mTrailCenter.y + aPointNext.aPos.y + -aNormalNext.y * aWidthOverLengthNext * aWidthOverTimeNext; int aVertCur = i * 2; int aVertNext = aVertCur + 1; diff --git a/src/Sexy.TodLib/Trail.h b/src/Sexy.TodLib/Trail.h index ebaba29..ea736dc 100644 --- a/src/Sexy.TodLib/Trail.h +++ b/src/Sexy.TodLib/Trail.h @@ -42,22 +42,18 @@ extern TrailParams gLawnTrailArray[(int)TrailType::NUM_TRAILS]; class TrailDefinition { public: - Image *mImage; - int mMaxPoints; - float mMinPointDistance; - int mTrailFlags; + Image *mImage{}; + int mMaxPoints = 2; + float mMinPointDistance = 1.0f; + int mTrailFlags = 0; FloatParameterTrack mTrailDuration; FloatParameterTrack mWidthOverLength; FloatParameterTrack mWidthOverTime; FloatParameterTrack mAlphaOverLength; FloatParameterTrack mAlphaOverTime; - - public: - TrailDefinition(); - ~TrailDefinition(); }; -bool TrailLoadADef(TrailDefinition *theTrailDef, const char *theTrailFileName); -void TrailLoadDefinitions(TrailParams *theTrailParamArray, int theTrailParamArraySize); +bool TrailLoadADef(TrailDefinition *theTrailDef, const char *theTrailFileName, bool recompile); +void TrailLoadDefinitions(TrailParams *theTrailParamArray, int theTrailParamArraySize, bool recompile); void TrailFreeDefinitions(); extern int gTrailDefCount; diff --git a/src/main.cpp b/src/main.cpp index a8d869e..d32e836 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,9 +19,13 @@ int LawnMain() gLawnApp = new LawnApp(); gLawnApp->mChangeDirTo = - (!Sexy::FileExists("properties/resources.xml") && Sexy::FileExists("../properties/resources.xml")) ? ".." : "."; + (!Sexy::FileExists("properties/resources.xml") && Sexy::FileExists("../properties/resources.xml")) ? ".." : "."; gLawnApp->Init(); + if (gLawnApp->mRunInCompileMode) + { + return 0; + } gLawnApp->Start(); gLawnApp->Shutdown(); From 8108620888bc46a2df452adb60a9799cae00ba8d Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Wed, 1 Jul 2026 18:23:23 +0300 Subject: [PATCH 20/30] fixed minimize/maximize focus --- src/LawnApp.cpp | 2 +- src/SexyAppFramework/SexyAppBase.cpp | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index fe938b8..5e7b757 100644 --- a/src/LawnApp.cpp +++ b/src/LawnApp.cpp @@ -64,7 +64,7 @@ #endif //Do not edit this. - Electr0Gunner -Version LawnApp::gResoddedVersion(1, 1, 0, 1033); +Version LawnApp::gResoddedVersion(1, 1, 0, 1041); bool gIsPartnerBuild = false; bool gSlowMo = false; diff --git a/src/SexyAppFramework/SexyAppBase.cpp b/src/SexyAppFramework/SexyAppBase.cpp index c98db36..34547ef 100644 --- a/src/SexyAppFramework/SexyAppBase.cpp +++ b/src/SexyAppFramework/SexyAppBase.cpp @@ -3713,12 +3713,14 @@ bool SexyAppBase::ProcessDeferredMessages(bool singleMessage) break; case SDL_EVENT_WINDOW_MINIMIZED: mMinimized = true; + RehupFocus(); if (mMuteOnLostFocus) Mute(true); break; case SDL_EVENT_WINDOW_MAXIMIZED: case SDL_EVENT_WINDOW_RESTORED: mMinimized = false; + RehupFocus(); if (mMuteOnLostFocus) Unmute(true); mWidgetManager->MarkAllDirty(); From 94d43da175589852d27ca1d8171a48cb11f816a1 Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Wed, 1 Jul 2026 19:06:16 +0300 Subject: [PATCH 21/30] fixed a memory leak in compile mode, removed a useless function, using optional arguments in place, changed trail back for the memset, fixed loading logic to be accurate --- src/LawnApp.cpp | 4 ++-- src/Sexy.TodLib/Definition.cpp | 1 + src/Sexy.TodLib/Reanimator.cpp | 28 ++++++++++++---------------- src/Sexy.TodLib/Reanimator.h | 3 +-- src/Sexy.TodLib/Trail.cpp | 15 ++++++++++++++- src/Sexy.TodLib/Trail.h | 6 +++++- src/main.cpp | 2 ++ 7 files changed, 37 insertions(+), 22 deletions(-) diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index 5e7b757..3f87211 100644 --- a/src/LawnApp.cpp +++ b/src/LawnApp.cpp @@ -64,7 +64,7 @@ #endif //Do not edit this. - Electr0Gunner -Version LawnApp::gResoddedVersion(1, 1, 0, 1041); +Version LawnApp::gResoddedVersion(1, 1, 0, 1046); bool gIsPartnerBuild = false; bool gSlowMo = false; @@ -3046,7 +3046,7 @@ void LawnApp::PreloadForUser() for (ZombieType i = ZombieType::ZOMBIE_NORMAL; i < ZombieType::NUM_ZOMBIE_TYPES; i = (ZombieType)((int)i + 1)) { - if (HasFinishedAdventure() || mPlayerInfo->mLevel >= GetZombieDefinition(i).mStartingLevel) + if (!HasFinishedAdventure() && mPlayerInfo->mLevel < GetZombieDefinition(i).mStartingLevel) { continue; } diff --git a/src/Sexy.TodLib/Definition.cpp b/src/Sexy.TodLib/Definition.cpp index 4779e0f..9c7bfc0 100644 --- a/src/Sexy.TodLib/Definition.cpp +++ b/src/Sexy.TodLib/Definition.cpp @@ -647,6 +647,7 @@ bool DefinitionIsCompiled(const SexyString &theXMLFilePath) p_fclose(pFile); return true; } + //TODO: potentially re-implement the date-based comparison. Outdated compilations get recompiled return false; } diff --git a/src/Sexy.TodLib/Reanimator.cpp b/src/Sexy.TodLib/Reanimator.cpp index 98ebaae..fb3f387 100644 --- a/src/Sexy.TodLib/Reanimator.cpp +++ b/src/Sexy.TodLib/Reanimator.cpp @@ -1100,12 +1100,8 @@ Reanimation *ReanimationHolder::AllocReanimation(float theX, aReanim->ReanimationInitializeType(theX, theY, theReanimationType); return aReanim; } -void ReanimatorEnsureDefinitionLoaded(ReanimationType theReanimType, bool theIsPreloading) -{ - ReanimatorEnsureDefinitionRecompiled(theReanimType, theIsPreloading, false); -} -void ReanimatorEnsureDefinitionRecompiled(ReanimationType theReanimType, bool theIsPreloading, bool recompile) +void ReanimatorEnsureDefinitionLoaded(ReanimationType theReanimType, bool theIsPreloading, bool recompile) { TOD_ASSERT(theReanimType >= 0 && theReanimType < gReanimatorDefCount); ReanimatorDefinition *aReanimDef = &gReanimatorDefArray[(int)theReanimType]; @@ -1130,15 +1126,17 @@ void ReanimatorEnsureDefinitionRecompiled(ReanimationType theReanimType, bool th TodHesitationBracket aHesitation("Load Reanim '%s'", aReanimParams->mReanimFileName); if (!ReanimationLoadDefinition(aReanimParams->mReanimFileName, aReanimDef, recompile)) { - auto aMessage = std::format("Failed to load reanim '{}'", aReanimParams->mReanimFileName); - TodErrorMessageBox(aMessage.c_str(), "Error"); + char aBuf[1024]; +#ifdef _WIN32 + sprintf_s<1024U>(aBuf, "Failed to load reanim '%s'", aReanimParams->mReanimFileName); +#else + snprintf(aBuf, 1024, "Failed to load reanim '%s'", aReanimParams->mReanimFileName); +#endif + TodErrorMessageBox(aBuf, "Error"); } int aDuration = aTimer.GetDuration(); - if (aDuration > 100) // (beta only) - report if took too long - TodTraceAndLog("[TodLib] - LOADING:Long reanim '%s' %d ms on %s", - aReanimParams->mReanimFileName, - aDuration, - gGetCurrentLevelName().c_str()); + if (aDuration > 100) // Report of Excessive Creation Time + TodTraceAndLog("[TodLib] - LOADING:Long reanim '%s' %d ms on %s", aReanimParams->mReanimFileName, aDuration, gGetCurrentLevelName().c_str()); } void ReanimatorLoadDefinitions(ReanimationParams *theReanimationParamArray, int theReanimationParamArraySize, bool recompile) @@ -1154,10 +1152,8 @@ void ReanimatorLoadDefinitions(ReanimationParams *theReanimationParamArray, int { ReanimationParams *aReanimationParams = &theReanimationParamArray[i]; TOD_ASSERT(aReanimationParams->mReanimationType == i); - if (recompile || DefinitionIsCompiled(StringToSexyString(aReanimationParams->mReanimFileName))) - { - ReanimatorEnsureDefinitionRecompiled(aReanimationParams->mReanimationType, true, recompile); - } + if (recompile || !DefinitionIsCompiled(StringToSexyString(aReanimationParams->mReanimFileName))) + ReanimatorEnsureDefinitionLoaded(aReanimationParams->mReanimationType, true, recompile); } } diff --git a/src/Sexy.TodLib/Reanimator.h b/src/Sexy.TodLib/Reanimator.h index ce3d94e..60cba2f 100644 --- a/src/Sexy.TodLib/Reanimator.h +++ b/src/Sexy.TodLib/Reanimator.h @@ -80,8 +80,7 @@ void ReanimationFillInMissingData(float &thePrev, float &theValue); void ReanimationFillInMissingData(void *&thePrev, void *&theValue); bool ReanimationLoadDefinition(const SexyString &theFileName, ReanimatorDefinition *theDefinition, bool recompile); void ReanimationFreeDefinition(ReanimatorDefinition *theDefinition); -void _cdecl ReanimatorEnsureDefinitionLoaded(ReanimationType theReanimType, bool theIsPreloading); -void ReanimatorEnsureDefinitionRecompiled(ReanimationType theReanimType, bool theIsPreloading, bool recompile); +void _cdecl ReanimatorEnsureDefinitionLoaded(ReanimationType theReanimType, bool theIsPreloading, bool recompile = false); void ReanimatorLoadDefinitions(ReanimationParams *theReanimationParamArray, int theReanimationParamArraySize, bool recompile); void ReanimatorFreeDefinitions(); diff --git a/src/Sexy.TodLib/Trail.cpp b/src/Sexy.TodLib/Trail.cpp index 5da7280..d4ef0d8 100644 --- a/src/Sexy.TodLib/Trail.cpp +++ b/src/Sexy.TodLib/Trail.cpp @@ -12,6 +12,19 @@ TrailParams gLawnTrailArray[(int)TrailType::NUM_TRAILS] = { { TrailType::TRAIL_ICE, "particles/IceTrail.trail" } }; +TrailDefinition::TrailDefinition() +{ + memset(this, 0, sizeof(TrailDefinition)); + mMinPointDistance = 1.0f; + mMaxPoints = 2; + mTrailFlags = 0U; + mImage = nullptr; +} + +TrailDefinition::~TrailDefinition() +{ +} + TrailPoint::TrailPoint() { } @@ -293,4 +306,4 @@ Trail *TrailHolder::AllocTrailFromDef(int theRenderOrder, TrailDefinition *theDe float aDurationInterp = RandRangeFloat(0.0f, 1.0f); aTrail->mTrailDuration = (int)FloatTrackEvaluate(aTrail->mDefinition->mTrailDuration, 0.0f, aDurationInterp); return aTrail; -} +} \ No newline at end of file diff --git a/src/Sexy.TodLib/Trail.h b/src/Sexy.TodLib/Trail.h index ea736dc..43304a6 100644 --- a/src/Sexy.TodLib/Trail.h +++ b/src/Sexy.TodLib/Trail.h @@ -51,6 +51,10 @@ class TrailDefinition FloatParameterTrack mWidthOverTime; FloatParameterTrack mAlphaOverLength; FloatParameterTrack mAlphaOverTime; + + public: + TrailDefinition(); + ~TrailDefinition(); }; bool TrailLoadADef(TrailDefinition *theTrailDef, const char *theTrailFileName, bool recompile); void TrailLoadDefinitions(TrailParams *theTrailParamArray, int theTrailParamArraySize, bool recompile); @@ -118,4 +122,4 @@ class TrailHolder Trail *AllocTrailFromDef(int theRenderOrder, TrailDefinition *theDefinition); }; -#endif +#endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index d32e836..8d1da15 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -24,6 +24,8 @@ int LawnMain() gLawnApp->Init(); if (gLawnApp->mRunInCompileMode) { + gLawnApp->Shutdown(); + delete gLawnApp; return 0; } gLawnApp->Start(); From 4c69c74e8d74389c40486be8ea5c73bc81ebe9b6 Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Mon, 6 Jul 2026 21:10:42 +0300 Subject: [PATCH 22/30] fixed store plants packet if more plants were added before gatlingpea + changed build num to the real 1.1.0 number --- src/Lawn/Widget/StoreScreen.cpp | 2 +- src/LawnApp.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Lawn/Widget/StoreScreen.cpp b/src/Lawn/Widget/StoreScreen.cpp index b397304..aa31dc6 100644 --- a/src/Lawn/Widget/StoreScreen.cpp +++ b/src/Lawn/Widget/StoreScreen.cpp @@ -381,7 +381,7 @@ void StoreScreen::DrawItemIcon(Graphics *g, int theItemPosition, StoreItem theIt } else { - DrawSeedPacket(g, aPosX, aPosY, (SeedType)(theItemType + 40), SEED_NONE, 0, 255, false, false); + DrawSeedPacket(g, aPosX, aPosY, (SeedType)((int)theItemType + (int)SeedType::SEED_GATLINGPEA), SEED_NONE, 0, 255, false, false); } g->SetDrawMode(Graphics::DRAWMODE_NORMAL); diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index 3f87211..46f97fc 100644 --- a/src/LawnApp.cpp +++ b/src/LawnApp.cpp @@ -64,7 +64,7 @@ #endif //Do not edit this. - Electr0Gunner -Version LawnApp::gResoddedVersion(1, 1, 0, 1046); +Version LawnApp::gResoddedVersion(1, 1, 0, 57); bool gIsPartnerBuild = false; bool gSlowMo = false; From 64e98b4378570c5a0e84441e0a3b6623e6204f89 Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Tue, 7 Jul 2026 19:21:14 +0300 Subject: [PATCH 23/30] fixed bowling a giant wallnut giving the achievment --- src/Lawn/Plant.cpp | 47 ++++++++++++++++++++++++---------------------- src/LawnApp.cpp | 2 +- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/Lawn/Plant.cpp b/src/Lawn/Plant.cpp index b30d2ad..2c6793e 100644 --- a/src/Lawn/Plant.cpp +++ b/src/Lawn/Plant.cpp @@ -2452,10 +2452,6 @@ void Plant::UpdateBowling() Zombie *aZombie = FindTargetZombie(mRow, PlantWeapon::WEAPON_PRIMARY); if (aZombie) { - mBowlingHits++; - if (mBowlingHits >= 5) - mApp->mAchievements->GiveAchievement(AchievementID::ACHIEVEMENT_ROLL_SOME_HEADS); - int aPosX = mX + mWidth / 2; int aPosY = mY + mHeight / 2; @@ -2481,30 +2477,37 @@ void Plant::UpdateBowling() { aZombie->TakeDamage(1800, 0U); } - else if (aZombie->mShieldType == ShieldType::SHIELDTYPE_DOOR && mState != PlantState::STATE_NOTREADY) - { - aZombie->TakeDamage(1800, 0U); - } - else if (aZombie->mShieldType != ShieldType::SHIELDTYPE_NONE) - { - aZombie->TakeShieldDamage(400, 0U); - } - else if (aZombie->mHelmType != HelmType::HELMTYPE_NONE) + else { - if (aZombie->mHelmType == HelmType::HELMTYPE_PAIL) + mBowlingHits++; + if (mBowlingHits >= 5) + mApp->mAchievements->GiveAchievement(AchievementID::ACHIEVEMENT_ROLL_SOME_HEADS); + + if (aZombie->mShieldType == ShieldType::SHIELDTYPE_DOOR && mState != PlantState::STATE_NOTREADY) { - mApp->PlayFoley(FoleyType::FOLEY_SHIELD_HIT); + aZombie->TakeDamage(1800, 0U); } - else if (aZombie->mHelmType == HelmType::HELMTYPE_TRAFFIC_CONE) + else if (aZombie->mShieldType != ShieldType::SHIELDTYPE_NONE) { - mApp->PlayFoley(FoleyType::FOLEY_PLASTIC_HIT); + aZombie->TakeShieldDamage(400, 0U); } + else if (aZombie->mHelmType != HelmType::HELMTYPE_NONE) + { + if (aZombie->mHelmType == HelmType::HELMTYPE_PAIL) + { + mApp->PlayFoley(FoleyType::FOLEY_SHIELD_HIT); + } + else if (aZombie->mHelmType == HelmType::HELMTYPE_TRAFFIC_CONE) + { + mApp->PlayFoley(FoleyType::FOLEY_PLASTIC_HIT); + } - aZombie->TakeHelmDamage(900, 0U); - } - else - { - aZombie->TakeDamage(1800, 0U); + aZombie->TakeHelmDamage(900, 0U); + } + else + { + aZombie->TakeDamage(1800, 0U); + } } if ((!mApp->IsFirstTimeAdventureMode() || mApp->mPlayerInfo->GetLevel() > 10) && diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index 46f97fc..fb13016 100644 --- a/src/LawnApp.cpp +++ b/src/LawnApp.cpp @@ -64,7 +64,7 @@ #endif //Do not edit this. - Electr0Gunner -Version LawnApp::gResoddedVersion(1, 1, 0, 57); +Version LawnApp::gResoddedVersion(1, 1, 0, 58); bool gIsPartnerBuild = false; bool gSlowMo = false; From 7555ba7ac1f861b0c10ffa99877354c4da630370 Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Thu, 9 Jul 2026 11:31:25 +0300 Subject: [PATCH 24/30] Fixed some image syncing logic, adding or removing images shouldn't break the save file anymore --- src/Lawn/System/SaveGame.cpp | 3 ++- src/LawnApp.cpp | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Lawn/System/SaveGame.cpp b/src/Lawn/System/SaveGame.cpp index d3da909..d8a685c 100644 --- a/src/Lawn/System/SaveGame.cpp +++ b/src/Lawn/System/SaveGame.cpp @@ -172,12 +172,13 @@ void SaveContext::SyncImage(Image *&theImage, const std::string &theOwner) { ResourceId aResID; SyncVar((int &)aResID, StrFormat("IMAGE_%s", theOwner.c_str())); - if (aResID == Sexy::ResourceId::RESOURCE_ID_MAX) + if (aResID >= Sexy::ResourceId::RESOURCE_ID_MAX) { theImage = nullptr; } else { + LoadImageById(gLawnApp->mResourceManager, aResID); // Load the image just incase the id was moved, and as a result it maybe isn't loaded by the game theImage = GetImageById(aResID); } } diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index fb13016..022e538 100644 --- a/src/LawnApp.cpp +++ b/src/LawnApp.cpp @@ -64,7 +64,7 @@ #endif //Do not edit this. - Electr0Gunner -Version LawnApp::gResoddedVersion(1, 1, 0, 58); +Version LawnApp::gResoddedVersion(1, 1, 0, 59); bool gIsPartnerBuild = false; bool gSlowMo = false; From f28da344da45a011c91889e6b5dace793fc74595 Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Thu, 9 Jul 2026 14:39:32 +0300 Subject: [PATCH 25/30] Fixed SysFonts substracting Ascent twice (aGlyph.mBearingY has it included), added missing variable init for textures in OpenGL + Added sampler support to OpenGLImage --- src/LawnApp.cpp | 2 +- src/SexyAppFramework/OpenGL/OpenGLImage.cpp | 57 ++++++++++--------- .../OpenGL/OpenGLRenderer.cpp | 7 +++ src/SexyAppFramework/SysFont.cpp | 22 ++++--- 4 files changed, 47 insertions(+), 41 deletions(-) diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index 022e538..41e3939 100644 --- a/src/LawnApp.cpp +++ b/src/LawnApp.cpp @@ -64,7 +64,7 @@ #endif //Do not edit this. - Electr0Gunner -Version LawnApp::gResoddedVersion(1, 1, 0, 59); +Version LawnApp::gResoddedVersion(1, 1, 0, 60); bool gIsPartnerBuild = false; bool gSlowMo = false; diff --git a/src/SexyAppFramework/OpenGL/OpenGLImage.cpp b/src/SexyAppFramework/OpenGL/OpenGLImage.cpp index e2b8dab..fac90fc 100644 --- a/src/SexyAppFramework/OpenGL/OpenGLImage.cpp +++ b/src/SexyAppFramework/OpenGL/OpenGLImage.cpp @@ -204,6 +204,7 @@ void OpenGLImage::PreTextureDraw() glBindFramebuffer(GL_FRAMEBUFFER, mFBO); glViewport(0, 0, mWidth, mHeight); glDisable(GL_SCISSOR_TEST); + glBindSampler(0, mGLRenderer->mCurrentUVWrapMode == UV_WRAP ? mGLRenderer->mSamplers[GL_LINEAR].mWrap : mGLRenderer->mSamplers[GL_LINEAR].mClamp); } void OpenGLImage::Init() @@ -897,21 +898,21 @@ void OpenGLImage::ImplStretchBltMirror(Image *theImage, } void OpenGLImage::ImplBltRawTexture(void *theTexture, - int theTexWidth, - int theTexHeight, - const Rect &theDestRect, - const Rect &theSrcRect, - const Rect &theClipRect, - const Color &theColor, - int theDrawMode, - bool fastStretch) + int theTexWidth, + int theTexHeight, + const Rect &theDestRect, + const Rect &theSrcRect, + const Rect &theClipRect, + const Color &theColor, + int theDrawMode, + bool fastStretch) { PreTextureDraw(); mGLRenderer->ApplyBlendMode(mRenderer->ChooseBlendMode(theDrawMode)); GLShader *aShaderToUse = mGLRenderer->mDefaultShader; aShaderToUse->SetUniform("uBlendMode", mRenderer->ChooseBlendMode(theDrawMode) - 1); - + GLuint aFilter = !fastStretch ? GL_LINEAR : GL_NEAREST; if (theClipRect != Rect(0, 0, mWidth, mHeight)) { glEnable(GL_SCISSOR_TEST); @@ -920,37 +921,37 @@ void OpenGLImage::ImplBltRawTexture(void *theTexture, } else glDisable(GL_SCISSOR_TEST); - + glBindSampler(0, mGLRenderer->mCurrentUVWrapMode == UV_WRAP ? mGLRenderer->mSamplers[aFilter].mWrap : mGLRenderer->mSamplers[aFilter].mClamp); int aTexID = *(GLuint *)theTexture; - glm::vec2 p0 = {theDestRect.mX, theDestRect.mY}; - glm::vec2 p1 = {theDestRect.mX + theDestRect.mWidth, theDestRect.mY}; - glm::vec2 p2 = {theDestRect.mX + theDestRect.mWidth, theDestRect.mY + theDestRect.mHeight}; - glm::vec2 p3 = {theDestRect.mX, theDestRect.mY + theDestRect.mHeight}; + glm::vec2 p0 = { theDestRect.mX, theDestRect.mY }; + glm::vec2 p1 = { theDestRect.mX + theDestRect.mWidth, theDestRect.mY }; + glm::vec2 p2 = { theDestRect.mX + theDestRect.mWidth, theDestRect.mY + theDestRect.mHeight }; + glm::vec2 p3 = { theDestRect.mX, theDestRect.mY + theDestRect.mHeight }; float u0 = (float)theSrcRect.mX / (float)theTexWidth; float v0 = (float)theSrcRect.mY / (float)theTexHeight; float u1 = (float)(theSrcRect.mX + theSrcRect.mWidth) / (float)theTexWidth; float v1 = (float)(theSrcRect.mY + theSrcRect.mHeight) / (float)theTexHeight; - glm::vec2 uv0 = {u0, v0}; - glm::vec2 uv1 = {u1, v0}; - glm::vec2 uv2 = {u1, v1}; - glm::vec2 uv3 = {u0, v1}; + glm::vec2 uv0 = { u0, v0 }; + glm::vec2 uv1 = { u1, v0 }; + glm::vec2 uv2 = { u1, v1 }; + glm::vec2 uv3 = { u0, v1 }; - glm::vec4 aColor = {(float)theColor.mRed / 255.0f, - (float)theColor.mGreen / 255.0f, - (float)theColor.mBlue / 255.0f, - (float)theColor.mAlpha / 255.0f}; + glm::vec4 aColor = { (float)theColor.mRed / 255.0f, + (float)theColor.mGreen / 255.0f, + (float)theColor.mBlue / 255.0f, + (float)theColor.mAlpha / 255.0f }; std::vector aVertices; - aVertices.push_back({p0, uv0, aColor}); - aVertices.push_back({p1, uv1, aColor}); - aVertices.push_back({p2, uv2, aColor}); - aVertices.push_back({p2, uv2, aColor}); - aVertices.push_back({p3, uv3, aColor}); - aVertices.push_back({p0, uv0, aColor}); + aVertices.push_back({ p0, uv0, aColor }); + aVertices.push_back({ p1, uv1, aColor }); + aVertices.push_back({ p2, uv2, aColor }); + aVertices.push_back({ p2, uv2, aColor }); + aVertices.push_back({ p3, uv3, aColor }); + aVertices.push_back({ p0, uv0, aColor }); aShaderToUse->Use(); aShaderToUse->SetUniform("uProjection", mProjection); diff --git a/src/SexyAppFramework/OpenGL/OpenGLRenderer.cpp b/src/SexyAppFramework/OpenGL/OpenGLRenderer.cpp index 2a7fb17..fdfeb5b 100644 --- a/src/SexyAppFramework/OpenGL/OpenGLRenderer.cpp +++ b/src/SexyAppFramework/OpenGL/OpenGLRenderer.cpp @@ -626,11 +626,18 @@ void *OpenGLRenderer::CreateTexture(void *thePixels, int theWidth, int theHeight glBindTexture(GL_TEXTURE_2D, aTexID); glPixelStorei(GL_UNPACK_ALIGNMENT, theAlignment); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, theWidth, theHeight, 0, thePixelFormat == RAW_FORMAT_R ? GL_RED : GL_BGRA, GL_UNSIGNED_BYTE, thePixels); + + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + gGLTextureCount++; GLuint *aTexPtr = new GLuint(aTexID); return aTexPtr; } + // OpenGLTextureData OpenGLTextureData::OpenGLTextureData() diff --git a/src/SexyAppFramework/SysFont.cpp b/src/SexyAppFramework/SysFont.cpp index 396fa1f..dcb34b3 100644 --- a/src/SexyAppFramework/SysFont.cpp +++ b/src/SexyAppFramework/SysFont.cpp @@ -220,8 +220,8 @@ void SysFont::DrawString( { if (mFontData == nullptr || !mFontData->mFace) return; - int posX = theX; - int posY = theY; + int posX = theX + g->mTransX; + int posY = theY + g->mTransY; int underlineY = posY - ((mFontData->mFace->underline_position * mFontData->mFace->size->metrics.y_scale) >> 16 >> 6); auto it = theString.begin(); @@ -240,9 +240,9 @@ void SysFont::DrawString( Color aShadowColor = Color(0, 0, 0, 0); g->mDestImage->BltRawTexture( mFontData->mAtlas.mAtlas, - aGlyph.mWidth, - aGlyph.mHeight, - Rect(aDrawX + g->mTransX + 1, aDrawY - mAscent + 1 + g->mTransY, aGlyph.mWidth, aGlyph.mHeight), + mFontData->mAtlas.mWidth, + mFontData->mAtlas.mHeight, + Rect(aDrawX + 1, aDrawY + 1, aGlyph.mWidth, aGlyph.mHeight), Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), theClipRect, aShadowColor, @@ -253,7 +253,7 @@ void SysFont::DrawString( mFontData->mAtlas.mAtlas, mFontData->mAtlas.mWidth, mFontData->mAtlas.mHeight, - Rect(aDrawX + g->mTransX, aDrawY - mAscent + g->mTransY, aGlyph.mWidth, aGlyph.mHeight), + Rect(aDrawX, aDrawY, aGlyph.mWidth, aGlyph.mHeight), Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), theClipRect, theColor, @@ -268,7 +268,7 @@ void SysFont::DrawString( mFontData->mAtlas.mAtlas, mFontData->mAtlas.mWidth, mFontData->mAtlas.mHeight, - Rect(aDrawX + g->mTransX + 1, aDrawY - mAscent + 1 + g->mTransY, aGlyph.mWidth, aGlyph.mHeight), + Rect(aDrawX + 1, aDrawY + 1, aGlyph.mWidth, aGlyph.mHeight), Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), theClipRect, aShadowColor, @@ -279,8 +279,7 @@ void SysFont::DrawString( mFontData->mAtlas.mAtlas, mFontData->mAtlas.mWidth, mFontData->mAtlas.mHeight, - Rect(aDrawX + g->mTransX + 1, - aDrawY - mAscent + 1 + g->mTransY, aGlyph.mWidth, aGlyph.mHeight), + Rect(aDrawX + 1, aDrawY + 1, aGlyph.mWidth, aGlyph.mHeight), Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), theClipRect, theColor, @@ -292,13 +291,12 @@ void SysFont::DrawString( if (g->mDestImage != &Graphics::mStaticImage) { if (mUnderlined) - g->mDestImage->DrawLine(theX, underlineY, StringWidth(theString), underlineY, theColor, 0); + g->mDestImage->DrawLine(theX + g->mTransX, underlineY, StringWidth(theString), underlineY, theColor, 0); } else { if (mUnderlined) - mApp->mRenderer->DrawLine( - theX + g->mTransX + 1, underlineY, StringWidth(theString), underlineY, theColor, 0); + mApp->mRenderer->DrawLine(theX + g->mTransX, underlineY, StringWidth(theString), underlineY, theColor, 0); } } From 1c05e37a2e171bd337a008d1db25d13242255de2 Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Thu, 16 Jul 2026 12:44:00 +0300 Subject: [PATCH 26/30] Fixed Zombatar Items getting colored even if they aren't allowed --- src/Lawn/Zombie.cpp | 30 ++++++++++++++++++++++++------ src/LawnApp.cpp | 2 +- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/Lawn/Zombie.cpp b/src/Lawn/Zombie.cpp index d1b2e9a..37c37ed 100644 --- a/src/Lawn/Zombie.cpp +++ b/src/Lawn/Zombie.cpp @@ -5860,27 +5860,45 @@ void Zombie::DrawReanim(Graphics *g, const ZombieDrawPosition &theDrawPos, int t if (mZombatar.mHat != -1) { - aHatReanim->mColorOverride = gMoreColors[mZombatar.mHatColor]; + if (gPortraitItems[mZombatar.mHat + ZombatarItem::ZOMBATAR_HATS_1].mAllowColor) + aHatReanim->mColorOverride = gMoreColors[mZombatar.mHatColor]; + else + aHatReanim->mColorOverride = Color::White; }; if (mZombatar.mHair != -1) { - aHairReanim->mColorOverride = gMoreColors[mZombatar.mHairColor]; + if (gPortraitItems[mZombatar.mHair + ZombatarItem::ZOMBATAR_HAIR_1].mAllowColor) + aHairReanim->mColorOverride = gMoreColors[mZombatar.mHairColor]; + else + aHairReanim->mColorOverride = Color::White; }; if (mZombatar.mTidbits != -1) { - aTidbitsReanim->mColorOverride = gMoreColors[mZombatar.mTidbitsColor]; + if (gPortraitItems[mZombatar.mTidbits + ZombatarItem::ZOMBATAR_TIDBITS_1].mAllowColor) + aTidbitsReanim->mColorOverride = gMoreColors[mZombatar.mTidbitsColor]; + else + aTidbitsReanim->mColorOverride = Color::White; }; if (mZombatar.mEyewear != -1) { - aEyewearReanim->mColorOverride = gMoreColors[mZombatar.mEyewearColor]; + if (gPortraitItems[mZombatar.mEyewear + ZombatarItem::ZOMBATAR_EYEWEAR_1].mAllowColor) + aEyewearReanim->mColorOverride = gMoreColors[mZombatar.mEyewearColor]; + else + aEyewearReanim->mColorOverride = Color::White; }; if (mZombatar.mAccessories != -1) { - aAccessoriesReanim->mColorOverride = gMoreColors[mZombatar.mAccessoriesColor]; + if (gPortraitItems[mZombatar.mAccessories + ZombatarItem::ZOMBATAR_ACCESSORY_1].mAllowColor) + aAccessoriesReanim->mColorOverride = gMoreColors[mZombatar.mAccessoriesColor]; + else + aAccessoriesReanim->mColorOverride = Color::White; }; if (mZombatar.mFacialHair != -1) { - aFacialHairReanim->mColorOverride = gMoreColors[mZombatar.mFacialHairColor]; + if (gPortraitItems[mZombatar.mFacialHair + ZombatarItem::ZOMBATAR_FACIALHAIR_1].mAllowColor) + aFacialHairReanim->mColorOverride = gMoreColors[mZombatar.mFacialHairColor]; + else + aFacialHairReanim->mColorOverride = Color::White; }; } diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index 41e3939..5ceafcc 100644 --- a/src/LawnApp.cpp +++ b/src/LawnApp.cpp @@ -64,7 +64,7 @@ #endif //Do not edit this. - Electr0Gunner -Version LawnApp::gResoddedVersion(1, 1, 0, 60); +Version LawnApp::gResoddedVersion(1, 1, 0, 61); bool gIsPartnerBuild = false; bool gSlowMo = false; From 7eab1d13d1f627392c3e5a7a644399434f74439f Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Thu, 30 Jul 2026 17:12:44 +0300 Subject: [PATCH 27/30] Fixed Scary Potter (6th Vasebreaker) having the wrong picks --- src/Lawn/Challenge.cpp | 12 ++++++------ src/LawnApp.cpp | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/Lawn/Challenge.cpp b/src/Lawn/Challenge.cpp index 5a7ef76..dda0be4 100644 --- a/src/Lawn/Challenge.cpp +++ b/src/Lawn/Challenge.cpp @@ -3912,14 +3912,14 @@ void Challenge::ScaryPotterPopulate() ScaryPotterDontPlaceInCol(0, aGridArray, aGridArrayCount); ScaryPotterDontPlaceInCol(1, aGridArray, aGridArrayCount); ScaryPotterPlacePot(SCARYPOT_SEED, ZOMBIE_INVALID, SEED_LEFTPEATER, 7, aGridArray, aGridArrayCount); - ScaryPotterPlacePot(SCARYPOT_SEED, ZOMBIE_INVALID, SEED_SQUASH, 2, aGridArray, aGridArrayCount); - ScaryPotterPlacePot(SCARYPOT_SEED, ZOMBIE_INVALID, SEED_TALLNUT, 5, aGridArray, aGridArrayCount); - ScaryPotterPlacePot(SCARYPOT_SEED, ZOMBIE_INVALID, SEED_THREEPEATER, 2, aGridArray, aGridArrayCount); + ScaryPotterPlacePot(SCARYPOT_SEED, ZOMBIE_INVALID, SEED_SQUASH, 2, aGridArray, aGridArrayCount); + ScaryPotterPlacePot(SCARYPOT_SEED, ZOMBIE_INVALID, SEED_TALLNUT, 5, aGridArray, aGridArrayCount); + ScaryPotterPlacePot(SCARYPOT_SEED, ZOMBIE_INVALID, SEED_THREEPEATER, 2, aGridArray, aGridArrayCount); ScaryPotterPlacePot(SCARYPOT_SEED, ZOMBIE_INVALID, SEED_TORCHWOOD, 4, aGridArray, aGridArrayCount); - ScaryPotterPlacePot(SCARYPOT_ZOMBIE, ZOMBIE_NORMAL, SEED_NONE, 7, aGridArray, aGridArrayCount); + ScaryPotterPlacePot(SCARYPOT_ZOMBIE, ZOMBIE_NORMAL, SEED_NONE, 7, aGridArray, aGridArrayCount); ScaryPotterPlacePot(SCARYPOT_ZOMBIE, ZOMBIE_POLEVAULTER, SEED_NONE, 5, aGridArray, aGridArrayCount); - ScaryPotterPlacePot(SCARYPOT_ZOMBIE, ZOMBIE_FOOTBALL, SEED_NONE, 6, aGridArray, aGridArrayCount); - ScaryPotterPlacePot(SCARYPOT_ZOMBIE, ZOMBIE_JACK_IN_THE_BOX, SEED_NONE, 6, aGridArray, aGridArrayCount); + ScaryPotterPlacePot(SCARYPOT_ZOMBIE, ZOMBIE_FOOTBALL, SEED_NONE, 2, aGridArray, aGridArrayCount); + ScaryPotterPlacePot(SCARYPOT_ZOMBIE, ZOMBIE_JACK_IN_THE_BOX, SEED_NONE, 1, aGridArray, aGridArrayCount); ScaryPotterChangePotType(GRIDITEM_STATE_SCARY_POT_LEAF, 2); break; case GAMEMODE_SCARY_POTTER_7: diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index 5ceafcc..79633eb 100644 --- a/src/LawnApp.cpp +++ b/src/LawnApp.cpp @@ -64,7 +64,7 @@ #endif //Do not edit this. - Electr0Gunner -Version LawnApp::gResoddedVersion(1, 1, 0, 61); +Version LawnApp::gResoddedVersion(1, 1, 0, 62); bool gIsPartnerBuild = false; bool gSlowMo = false; From 950272e5507382b664efdfd912922f2dd026d655 Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Fri, 31 Jul 2026 22:33:47 +0300 Subject: [PATCH 28/30] (potentially) fixed the overlapping cached plants, sound manager bounds fix --- src/Lawn/System/ReanimationLawn.cpp | 38 +++++++++++++++++---- src/Lawn/System/ReanimationLawn.h | 16 +++++---- src/LawnApp.cpp | 2 +- src/SexyAppFramework/OpenALSoundManager.cpp | 2 +- 4 files changed, 42 insertions(+), 16 deletions(-) diff --git a/src/Lawn/System/ReanimationLawn.cpp b/src/Lawn/System/ReanimationLawn.cpp index 9b2fe4d..74d1c72 100644 --- a/src/Lawn/System/ReanimationLawn.cpp +++ b/src/Lawn/System/ReanimationLawn.cpp @@ -111,6 +111,24 @@ GPUImage *ReanimatorCache::MakeBlankGPUImage(int theWidth, int theHeight) return aImage; } +MemoryImage *ReanimatorCache::ConvertGPUImageToMemoryImage(GPUImage* theImage) +{ + MemoryImage *aImage = new MemoryImage(); + + int aBitsCount = theImage->mWidth * theImage->mHeight; + aImage->mBits = new uint32_t[aBitsCount + 1]; + aImage->mWidth = theImage->mWidth; + aImage->mHeight = theImage->mHeight; + aImage->mHasTrans = true; + aImage->mHasAlpha = true; + memset(aImage->mBits, 0, aBitsCount * 4); + aImage->mBits[aBitsCount] = Sexy::MEMORYCHECK_ID; + + memcpy(aImage->mBits, theImage->GetBits(), aBitsCount * 4); + + return aImage; +} + void ReanimatorCache::GetPlantImageSize( SeedType theSeedType, int &theOffsetX, int &theOffsetY, int &theWidth, int &theHeight) { @@ -135,7 +153,7 @@ void ReanimatorCache::GetPlantImageSize( } } -GPUImage *ReanimatorCache::MakeCachedMowerFrame(LawnMowerType theMowerType) +MemoryImage *ReanimatorCache::MakeCachedMowerFrame(LawnMowerType theMowerType) { GPUImage *aImage; @@ -202,10 +220,12 @@ GPUImage *ReanimatorCache::MakeCachedMowerFrame(LawnMowerType theMowerType) break; } - return aImage; + MemoryImage *aFinalImage = ConvertGPUImageToMemoryImage(aImage); + delete aImage; + return aFinalImage; } -GPUImage *ReanimatorCache::MakeCachedPlantFrame(SeedType theSeedType, DrawVariation theDrawVariation) +MemoryImage *ReanimatorCache::MakeCachedPlantFrame(SeedType theSeedType, DrawVariation theDrawVariation) { int aOffsetX, aOffsetY, aWidth, aHeight; GetPlantImageSize(theSeedType, aOffsetX, aOffsetY, aWidth, aHeight); @@ -291,10 +311,12 @@ GPUImage *ReanimatorCache::MakeCachedPlantFrame(SeedType theSeedType, DrawVariat } } - return aGPUImage; + MemoryImage *aFinalImage = ConvertGPUImageToMemoryImage(aGPUImage); + delete aGPUImage; + return aFinalImage; } -GPUImage *ReanimatorCache::MakeCachedZombieFrame(ZombieType theZombieType) +MemoryImage *ReanimatorCache::MakeCachedZombieFrame(ZombieType theZombieType) { GPUImage *aGPUImage = MakeBlankGPUImage(200, 210); Graphics aMemoryGraphics(aGPUImage); @@ -400,7 +422,9 @@ GPUImage *ReanimatorCache::MakeCachedZombieFrame(ZombieType theZombieType) DrawReanimatorFrame( &aMemoryGraphics, aPosX, aPosY, aZombieDef.mReanimationType, aTrackName, DrawVariation::VARIATION_NORMAL); } - return aGPUImage; + MemoryImage *aFinalImage = ConvertGPUImageToMemoryImage(aGPUImage); + delete aGPUImage; + return aFinalImage; } void ReanimatorCache::ReanimatorCacheInitialize() @@ -435,7 +459,7 @@ void ReanimatorCache::DrawCachedPlant( { TOD_ASSERT(theSeedType >= 0 && theSeedType < SeedType::NUM_SEED_TYPES); - GPUImage *aImage = nullptr; + MemoryImage *aImage = nullptr; if (theDrawVariation != DrawVariation::VARIATION_NORMAL) { for (TodListNode *aNode = mImageVariationList.mHead; aNode != nullptr; diff --git a/src/Lawn/System/ReanimationLawn.h b/src/Lawn/System/ReanimationLawn.h index d262618..740d6bc 100644 --- a/src/Lawn/System/ReanimationLawn.h +++ b/src/Lawn/System/ReanimationLawn.h @@ -7,6 +7,7 @@ namespace Sexy { class Graphics; class GPUImage; +class MemoryImage; }; // namespace Sexy using namespace Sexy; @@ -16,7 +17,7 @@ class ReanimCacheImageVariation public: SeedType mSeedType; DrawVariation mDrawVariation; - GPUImage *mImage; + MemoryImage *mImage; }; typedef TodList ImageVariationList; @@ -24,10 +25,10 @@ class Reanimation; class ReanimatorCache { public: - GPUImage *mPlantImages[SeedType::NUM_SEED_TYPES]; + MemoryImage *mPlantImages[SeedType::NUM_SEED_TYPES]; ImageVariationList mImageVariationList; - GPUImage *mLawnMowers[LawnMowerType::NUM_MOWER_TYPES]; - GPUImage *mZombieImages[ZombieType::NUM_CACHED_ZOMBIE_TYPES]; + MemoryImage *mLawnMowers[LawnMowerType::NUM_MOWER_TYPES]; + MemoryImage *mZombieImages[ZombieType::NUM_CACHED_ZOMBIE_TYPES]; LawnApp *mApp; public: @@ -40,10 +41,11 @@ class ReanimatorCache Graphics *g, float thePosX, float thePosY, SeedType theSeedType, DrawVariation theDrawVariation); void DrawCachedMower(Graphics *g, float thePosX, float thePosY, LawnMowerType theMowerType); void DrawCachedZombie(Graphics *g, float thePosX, float thePosY, ZombieType theZombieType); + MemoryImage *ConvertGPUImageToMemoryImage(GPUImage *theImage); GPUImage *MakeBlankGPUImage(int theWidth, int theHeight); - GPUImage *MakeCachedPlantFrame(SeedType theSeedType, DrawVariation theDrawVariation); - GPUImage *MakeCachedMowerFrame(LawnMowerType theMowerType); - GPUImage *MakeCachedZombieFrame(ZombieType theZombieType); + MemoryImage *MakeCachedPlantFrame(SeedType theSeedType, DrawVariation theDrawVariation); + MemoryImage *MakeCachedMowerFrame(LawnMowerType theMowerType); + MemoryImage *MakeCachedZombieFrame(ZombieType theZombieType); void GetPlantImageSize( SeedType theSeedType, int &theOffsetX, int &theOffsetY, int &theWidth, int &theHeight); void DrawReanimatorFrame(Graphics *g, diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index 79633eb..a23b945 100644 --- a/src/LawnApp.cpp +++ b/src/LawnApp.cpp @@ -64,7 +64,7 @@ #endif //Do not edit this. - Electr0Gunner -Version LawnApp::gResoddedVersion(1, 1, 0, 62); +Version LawnApp::gResoddedVersion(1, 1, 0, 63); bool gIsPartnerBuild = false; bool gSlowMo = false; diff --git a/src/SexyAppFramework/OpenALSoundManager.cpp b/src/SexyAppFramework/OpenALSoundManager.cpp index bfbac60..8d46bde 100644 --- a/src/SexyAppFramework/OpenALSoundManager.cpp +++ b/src/SexyAppFramework/OpenALSoundManager.cpp @@ -117,7 +117,7 @@ int Sexy::OpenALSoundManager::VolumeToDB(double theVolume) SoundInstance *OpenALSoundManager::GetSoundInstance(unsigned int theSfxID) { - if (theSfxID > MAX_SOURCE_SOUNDS || mAudioDevice == nullptr) + if (theSfxID >= MAX_SOURCE_SOUNDS || mAudioDevice == nullptr) return nullptr; int aFreeChannel = FindFreeChannel(); From 9cb38e0c593ff0453e096089442fbcfe27c5fb2d Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Sat, 1 Aug 2026 12:57:13 +0300 Subject: [PATCH 29/30] attempt 2 at fixing the overlapping cached images --- src/Lawn/System/ReanimationLawn.cpp | 2 +- src/LawnApp.cpp | 2 +- src/SexyAppFramework/OpenGL/OpenGLImage.cpp | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/Lawn/System/ReanimationLawn.cpp b/src/Lawn/System/ReanimationLawn.cpp index 74d1c72..aad2f23 100644 --- a/src/Lawn/System/ReanimationLawn.cpp +++ b/src/Lawn/System/ReanimationLawn.cpp @@ -107,7 +107,7 @@ GPUImage *ReanimatorCache::MakeBlankGPUImage(int theWidth, int theHeight) aImage->mHasTrans = true; aImage->mHasAlpha = true; memset(aImage->mBits, 0, aBitsCount * 4); - aImage->mBits[aBitsCount] = Sexy::MEMORYCHECK_ID; + aImage->SetBits(aImage->mBits, theWidth, theHeight); return aImage; } diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index a23b945..016f1dc 100644 --- a/src/LawnApp.cpp +++ b/src/LawnApp.cpp @@ -64,7 +64,7 @@ #endif //Do not edit this. - Electr0Gunner -Version LawnApp::gResoddedVersion(1, 1, 0, 63); +Version LawnApp::gResoddedVersion(1, 1, 0, 64); bool gIsPartnerBuild = false; bool gSlowMo = false; diff --git a/src/SexyAppFramework/OpenGL/OpenGLImage.cpp b/src/SexyAppFramework/OpenGL/OpenGLImage.cpp index fac90fc..42e8803 100644 --- a/src/SexyAppFramework/OpenGL/OpenGLImage.cpp +++ b/src/SexyAppFramework/OpenGL/OpenGLImage.cpp @@ -30,11 +30,16 @@ OpenGLImage::OpenGLImage() : GPUImage(gSexyAppBase->mRenderer) OpenGLImage::~OpenGLImage() { + + if (mSurface != nullptr) + delete (GLuint *)mSurface; + if (mTexID != 0) { glDeleteTextures(1, &mTexID); OpenGLRenderer::gGLTextureCount--; } + if (mFBO != 0) glDeleteFramebuffers(1, &mFBO); @@ -89,7 +94,8 @@ void OpenGLImage::BitsChanged() { MemoryImage::BitsChanged(); - delete (GLuint *)mSurface; + if (mSurface != nullptr) + delete (GLuint *)mSurface; mSurface = nullptr; } From 9a02bf1745769552d3f78ff8080c53743a64b528 Mon Sep 17 00:00:00 2001 From: Electr0 <114804446+Electr0Gunner@users.noreply.github.com> Date: Sat, 1 Aug 2026 16:33:06 +0300 Subject: [PATCH 30/30] removed old git ignores --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 03e490d..571df1b 100644 --- a/.gitignore +++ b/.gitignore @@ -8,8 +8,7 @@ out/ crash.txt Export/ -assets/base -/assets/main.pak + /pseudocode /vcpkg_installed /android