diff --git a/.clang-format b/.clang-format index e7c90f40..168979b7 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/.gitignore b/.gitignore index 03e490d3..571df1b0 100644 --- a/.gitignore +++ b/.gitignore @@ -8,8 +8,7 @@ out/ crash.txt Export/ -assets/base -/assets/main.pak + /pseudocode /vcpkg_installed /android diff --git a/CMakeLists.txt b/CMakeLists.txt index 0cb2e3e6..77af024b 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 acb7aa14..e06fc4a8 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" @@ -206,7 +205,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 +339,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 +370,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 +406,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 +460,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 +471,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 +588,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 +621,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 +689,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 +716,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 +1018,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 +1058,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 +1190,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 +1207,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 +1341,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 +1379,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 +1547,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 +1572,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 +1591,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 +1600,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 +1636,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 +1662,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 +1688,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 +1703,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 +1778,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 +1800,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 +1821,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 +1892,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 +1905,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 +2002,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 +2010,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 +2119,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 +2129,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 +2177,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 +2191,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 +2250,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 +2360,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 +2379,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 +2435,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 +2466,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 +2495,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 +2518,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 +2528,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 +2536,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 +2573,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 +2624,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 +2701,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 +2775,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 +2805,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 +2845,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 +2869,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 +2877,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 +2895,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 +2917,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 +2938,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 +2950,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 +2996,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 +3044,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 +3136,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 +3144,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 +3153,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 +3170,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 +3227,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 +3244,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 +3258,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 +3272,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 +3288,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 +3306,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 +3408,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 +3477,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) { @@ -3585,10 +3584,10 @@ 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)) + gLawnApp->mGameMode == GameMode::GAMEMODE_CHALLENGE_BEGHOULED_TWIST)) { if (aSeedPacket->mPacketType == SeedType::SEED_BEGHOULED_BUTTON_CRATER) { @@ -3729,14 +3728,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 +3743,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 +3751,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 +3770,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 +3821,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 +3910,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 +4031,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 +4039,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 +4068,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 +4094,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 +4114,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 +4156,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 +4180,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 +4201,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 +4219,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 +4246,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 +4282,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 +4293,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 +4321,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 +4344,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 +4383,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 +4400,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 +4433,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 +4554,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 +4587,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 +4646,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 +4677,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 +4702,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 +4733,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 +4745,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 +4768,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 +4793,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 +4804,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 +4905,7 @@ void Board::PickSpecialGraveStone() if (aPickCount > 0) { ((GridItem *)TodPickFromArray(aPicks, aPickCount))->mGridItemState = - GridItemState::GRIDITEM_STATE_GRAVESTONE_SPECIAL; + GridItemState::GRIDITEM_STATE_GRAVESTONE_SPECIAL; } } @@ -4991,7 +4990,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 +5047,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 +5096,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 +5268,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 +5323,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 +5364,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 +5385,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 +5410,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 +5423,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 +5453,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 +5488,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 +5539,7 @@ void Board::UpdateZombieSpawning() } if (mZombieCountDown > 200 && mZombieCountDownStart - mZombieCountDown > 400 && - TotalZombiesHealthInWave(mCurrentWave - 1) <= mZombieHealthToNextWave) + TotalZombiesHealthInWave(mCurrentWave - 1) <= mZombieHealthToNextWave) { mZombieCountDown = 200; } @@ -5550,7 +5549,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 +5566,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 +5575,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 +5616,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 +5678,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 +5695,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 +5751,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 +5767,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 +5777,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 +5810,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 +5862,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 +5901,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 +5988,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 +6012,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 +6022,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 +6163,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 +6202,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 +6223,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 +6251,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 +6264,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 +6277,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 +6308,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 +6387,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 +6403,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 +6524,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 +6607,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 +6632,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 +6734,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 +6745,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 +6758,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 +6771,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 +6783,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 +6795,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 +6807,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 +6831,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 +6843,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 +6873,7 @@ void Board::DrawGameObjects(Graphics *g) else { AddGameObjectRenderItemZombie(aRenderList, aRenderItemCount, RenderObjectType::RENDER_ITEM_ZOMBIE, - aZombie); + aZombie); if (aZombie->HasShadow()) { @@ -6901,7 +6900,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 +6959,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 +6991,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 +7001,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 +7026,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 +7151,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 +7198,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 +7210,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 +7349,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 +7369,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 +7393,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 +7456,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 +7559,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 +7581,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 +7609,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 +7646,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 +7662,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 +7678,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 +7687,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 +7698,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 +7719,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 +7736,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 +7745,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 +7766,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 +7789,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 +7879,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 +7910,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 +7981,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 +8137,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 +8186,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 +8223,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 +8382,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 +8409,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 +8425,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 +8666,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 +8678,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 +8722,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 +8764,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 +9103,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 +9458,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 +9603,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 +9636,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 +9645,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 +9672,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 +9714,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 +9726,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 +9765,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 +9782,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 +9837,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 +9861,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 +9903,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 +9936,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 +10259,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 +10287,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 +10346,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 +10389,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 +10430,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 +10493,7 @@ void Board::UpdateGridItems() while (IterateGridItems(aGridItem)) { if (mEnableGraveStones && aGridItem->mGridItemType == GridItemType::GRIDITEM_GRAVESTONE && - aGridItem->mGridItemCounter < 100) + aGridItem->mGridItemCounter < 100) { aGridItem->mGridItemCounter++; } @@ -10535,7 +10539,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 +10556,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 +10566,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 +10581,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 +10590,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 +10658,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 +10672,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 +10780,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 3a6f1f2e..dda0be4f 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,32 +163,35 @@ 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() { mApp = (LawnApp *)gSexyAppBase; @@ -220,7 +225,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 +352,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 +365,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 +437,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 +457,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 +546,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 +744,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 +861,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 +869,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 +905,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 +1009,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 +1069,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 +1192,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 +1214,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 +1251,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 +1279,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) @@ -1324,8 +1331,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,19 +1343,19 @@ 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; } 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]) @@ -1397,8 +1404,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; } } @@ -1415,9 +1422,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 +1445,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 +1458,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 +1489,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 +1556,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 +1790,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 +1849,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 +1874,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 +1909,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 +1926,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 +1940,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 +2002,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 +2036,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 +2081,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 +2168,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 +2231,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 +2255,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 +2286,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 +2317,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 +2366,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 +2390,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 +2443,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 +2735,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 +2776,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 +2833,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 +2916,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 +2934,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 +3102,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 +3128,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 +3200,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 +3435,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 +3451,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 +3467,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 +3492,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 +3559,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 +3619,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 +3637,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 +3652,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 +3699,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 +3714,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 +3752,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; @@ -3905,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: @@ -3969,11 +3976,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 +4070,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 +4117,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 +4140,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 +4157,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 +4172,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 +4321,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 +4333,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 +4566,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 +4578,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 +4676,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 +4688,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 +4720,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 +4807,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 +4873,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 +4985,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 +4998,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 +5016,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 +5078,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 +5114,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 +5146,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 +5184,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 +5195,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 +5253,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 +5337,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 +5392,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 34d00ec1..7a2c82fc 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 41772c80..015768bd 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 541acfe2..cb052627 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 45ab9102..b3a735e7 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 2402b97b..0f24315b 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); } } @@ -230,6 +234,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; @@ -238,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/LawnCommon.h b/src/Lawn/LawnCommon.h index dd3f86c6..e5de9ce9 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/LawnMower.cpp b/src/Lawn/LawnMower.cpp index c96b127a..b78f5750 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 f75c99ba..fcb047da 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) { @@ -239,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 @@ -249,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(); @@ -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); } } @@ -431,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) @@ -448,18 +469,19 @@ void MessageWidget::Draw(Graphics *g) g->FillRect(aRect); aRect.mY += aTextOffsetY; - TodDrawStringWrapped(g, mLabel, aRect, aFont, aColor, - DrawStringJustification::DS_ALIGN_CENTER_VERTICAL_MIDDLE); + 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, - DrawStringJustification::DS_ALIGN_CENTER); + 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) @@ -468,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); } @@ -476,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/MessageWidget.h b/src/Lawn/MessageWidget.h index 0dbcbea9..e7324456 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/Plant.cpp b/src/Lawn/Plant.cpp index 9f3fded9..2c6793e2 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; @@ -2504,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; @@ -2533,34 +2477,41 @@ 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) && - mSeedType == SeedType::SEED_WALLNUT) + mSeedType == SeedType::SEED_WALLNUT) { mLaunchCounter++; if (mLaunchCounter == 2) @@ -2799,7 +2750,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 +2817,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 +2832,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 +2922,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 +2969,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 +2985,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 +3051,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 +3076,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 +3114,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 +3124,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 +3380,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 +3515,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 +3739,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 +3839,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 +3891,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 +3911,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 +3968,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 +4026,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 +4080,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 +4151,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 +4171,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 +4218,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 +4233,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 +4243,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 +4271,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 +4296,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 +4350,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 +4425,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); @@ -4536,7 +4487,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); @@ -4568,8 +4520,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); @@ -4610,7 +4562,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) { @@ -4707,7 +4659,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); } @@ -4749,7 +4701,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); @@ -4843,7 +4795,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) @@ -4950,7 +4902,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; } @@ -4960,7 +4912,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; } @@ -5001,7 +4953,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; } @@ -5015,8 +4967,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; } @@ -5039,8 +4991,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; } @@ -5057,7 +5009,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; @@ -5149,7 +5101,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) { @@ -5274,16 +5226,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) @@ -5294,9 +5246,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 49f9c161..4850dbe2 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 aea01fb8..2e7076a6 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 99a08459..198a6cfc 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 cd8d9589..ad75b641 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 bd230251..38137289 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 14cb0ac8..f0188dc5 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 84d98e03..6a50cb07 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/Music.h b/src/Lawn/System/Music.h index ccd23b46..f4ac17fa 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/Lawn/System/PlayerInfo.cpp b/src/Lawn/System/PlayerInfo.cpp index 4ee83291..c3dd1cc4 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 ba2909cd..499d81e4 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 681db4c4..cd7edc3c 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 e4683cb8..7f92192a 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 49bd8052..aad2f23b 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); @@ -107,12 +107,30 @@ GPUImage *ReanimatorCache::MakeBlankGPUImage(int theWidth, int theHeight) aImage->mHasTrans = true; aImage->mHasAlpha = true; memset(aImage->mBits, 0, aBitsCount * 4); + aImage->SetBits(aImage->mBits, theWidth, 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) + SeedType theSeedType, int &theOffsetX, int &theOffsetY, int &theWidth, int &theHeight) { theOffsetX = -20; theOffsetY = -20; @@ -135,7 +153,7 @@ void ReanimatorCache::GetPlantImageSize( } } -GPUImage *ReanimatorCache::MakeCachedMowerFrame(LawnMowerType theMowerType) +MemoryImage *ReanimatorCache::MakeCachedMowerFrame(LawnMowerType theMowerType) { GPUImage *aImage; @@ -148,11 +166,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 +180,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 +194,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 +208,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: @@ -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); @@ -221,80 +241,82 @@ 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); } } - 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); @@ -360,8 +382,6 @@ GPUImage *ReanimatorCache::MakeCachedZombieFrame(ZombieType theZombieType) aPropellerReanim.SetFramesForLayer("Propeller"); aReanim.Draw(&aMemoryGraphics); aPropellerReanim.Draw(&aMemoryGraphics); - - } else if (aZombieDef.mReanimationType == ReanimationType::REANIM_BOSS) { @@ -400,9 +420,11 @@ 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; + MemoryImage *aFinalImage = ConvertGPUImageToMemoryImage(aGPUImage); + delete aGPUImage; + return aFinalImage; } void ReanimatorCache::ReanimatorCacheInitialize() @@ -433,15 +455,15 @@ 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); - GPUImage *aImage = nullptr; + MemoryImage *aImage = nullptr; 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 +499,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/ReanimationLawn.h b/src/Lawn/System/ReanimationLawn.h index d2626183..740d6bcf 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/Lawn/System/SaveGame.cpp b/src/Lawn/System/SaveGame.cpp index b3473967..d8a685c6 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) { @@ -59,8 +60,6 @@ void SaveContext::SyncBytes(void *aValue, size_t aSize, const std::string &aName } } - - void SaveContext::SyncReanimationDef(ReanimatorDefinition *&theDefinition, const std::string &theOwner) { if (mReading) @@ -173,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); } } @@ -197,7 +197,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 +240,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,12 +260,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; @@ -272,7 +276,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) @@ -281,20 +286,21 @@ 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); } } 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 +314,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 +341,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,47 +377,47 @@ 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++; } - mSchemeEntries.insert({aVarName, anEntry}); + mSchemeEntries.insert({ aVarName, anEntry }); } } - #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"); \ - 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"); \ - 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 +611,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); @@ -629,15 +639,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 a9646b9c..abb16211 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 dce457d5..4a55af8b 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 cd985d5d..ad82e68f 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; @@ -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,8 +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(); @@ -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) @@ -386,7 +384,7 @@ void AlmanacDialog::DrawPlants(Graphics *g) { mDescriptionScrollbar->mDisabled = true; mDescriptionScrollbar->mVisible = false; - mDescriptionScrollbar->mValue = 0.0f; + mDescriptionScrollbar->SetValue(0.0f); } else { @@ -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; @@ -631,7 +629,7 @@ void AlmanacDialog::DrawZombies(Graphics *g) { mDescriptionScrollbar->mDisabled = true; mDescriptionScrollbar->mVisible = false; - mDescriptionScrollbar->mValue = 0.0f; + mDescriptionScrollbar->SetValue(0.0f); } else { @@ -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 8a008f2c..ce6da9f2 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 00824193..a073bdbc 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 bd770e22..4ba95232 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 cc42759d..88a909eb 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 52b284ec..3e52f076 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 db6d344a..cb80b194 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; @@ -30,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); } @@ -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 deeecb9f..e471800b 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 af5129cd..3996316d 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 791778ff..65931267 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 680d5328..4ca85ebf 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); + "[OPTIONS_MUSIC_LABEL]", // "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); + "[OPTIONS_SOUNDFX]", // "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/NewUserDialog.cpp b/src/Lawn/Widget/NewUserDialog.cpp index 8891ac55..7b081b17 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) diff --git a/src/Lawn/Widget/SeedChooserScreen.cpp b/src/Lawn/Widget/SeedChooserScreen.cpp index d74d99b6..32779084 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/StoreScreen.cpp b/src/Lawn/Widget/StoreScreen.cpp index b397304d..aa31dc60 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/Lawn/Widget/TitleScreen.cpp b/src/Lawn/Widget/TitleScreen.cpp index fd579c05..151b70ad 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 69423b9b..a6ee0846 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 58fbb02a..fe9149b4 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 363bfc05..93fba12e 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 26045772..37c37ed0 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) @@ -5859,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; }; } @@ -5920,7 +5939,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 +6028,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 +6041,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 +6220,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 +6234,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 +6285,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 +6344,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 +6485,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 +6513,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 +6534,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 +6545,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 +6554,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 +6564,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 +6605,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 +6676,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 +6698,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 +6715,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 +6807,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 +6816,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 +6830,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 +6839,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 +6916,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 +6976,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 +7050,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 +7080,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 +7107,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 +7197,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 +7246,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 +7263,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 +7275,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 +7305,7 @@ bool Zombie::TrySpawnLevelAward() } } else if (mApp->IsContinuousChallenge() || mBoard->mCurrentWave < mBoard->mNumWaves || - mBoard->AreEnemyZombiesOnScreen()) + mBoard->AreEnemyZombiesOnScreen()) { return false; } @@ -7317,14 +7336,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 +7641,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 +7706,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 +7729,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 +7748,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 +7768,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 +7864,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 +8061,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 +8110,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 +8149,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 +8209,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 +8228,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 +8256,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 +8279,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 +8292,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 +8326,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 +8422,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 +8602,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 +8660,7 @@ void Zombie::ApplyButter() return; if (mZombieType == ZombieType::ZOMBIE_ZAMBONI || mZombieType == ZombieType::ZOMBIE_BOSS || IsTangleKelpTarget() || - IsBobsledTeamWithSled() || IsFlying()) + IsBobsledTeamWithSled() || IsFlying()) return; mButteredCounter = 400; @@ -8685,7 +8704,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 +8713,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 +8774,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 +8805,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 +8828,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 +8911,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 +9032,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 +9071,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 +9152,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 +9175,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 +9184,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 +9345,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 +9392,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 +9410,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 +9435,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 +9456,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 +9664,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 +9681,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 +9748,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 +9773,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 +9806,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 +9868,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 +9900,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 +10226,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 +10259,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 +10320,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 +10338,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 +10355,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 +10763,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 +10788,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 +10878,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); } diff --git a/src/LawnApp.cpp b/src/LawnApp.cpp index c315fc0a..016f1dc6 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, 64); bool gIsPartnerBuild = false; bool gSlowMo = false; @@ -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]"); @@ -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; @@ -738,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); @@ -762,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); @@ -778,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; } @@ -840,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) { @@ -857,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 { @@ -880,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) @@ -960,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; } @@ -981,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); @@ -1034,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]"); } @@ -1042,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; @@ -1089,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() @@ -1175,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()); @@ -1269,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); @@ -1312,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); } @@ -1374,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; } @@ -1421,7 +1438,7 @@ void LawnApp::CheckForGameEnd() if (IsAdventureMode()) { if (mBoard->mPlantsPlaced > 0 && !IsWhackAZombieLevel() && !IsScaryPotterLevel() && !IsBungeeBlitzLevel() && - !IsChallengeWithoutSeedBank()) + !IsChallengeWithoutSeedBank()) { if (mBoard->StageHasPool() && !mBoard->StageIsNight() && !mBoard->mDontPeaUsedPeashooter) { @@ -1432,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); } @@ -1665,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; @@ -1690,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]; @@ -1729,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(); @@ -1784,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); } @@ -1809,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); } @@ -1858,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; @@ -2021,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() @@ -2067,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() @@ -2077,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() @@ -2092,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() @@ -2109,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; @@ -2134,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() @@ -2173,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() @@ -2190,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() @@ -2201,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() @@ -2416,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) @@ -2495,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(); } @@ -2543,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(); } @@ -2645,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; @@ -2685,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; @@ -2800,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; @@ -2839,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) { @@ -2860,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) @@ -2934,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); + TodDrawString(g, "[CLICK_TO_CONTINUE]", aPosX + 139, aPosY + 140, FONT_PICO129, Color::Black, + DrawStringJustification::DS_ALIGN_CENTER); } } @@ -2963,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++; } @@ -3029,12 +3046,12 @@ 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; } 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; } @@ -3095,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() @@ -3149,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) { @@ -3210,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() @@ -3219,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() @@ -3228,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 5c1ddf81..0ba6f56c 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 5ff3f8bb..9c7bfc08 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) { @@ -294,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) @@ -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; @@ -524,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()); @@ -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) { @@ -560,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; } @@ -570,11 +605,12 @@ 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; #else + TodTraceAndLog("[TodLib] - Cache is not valid: %s\n", theCompiledFilePath.c_str()); return false; #endif } @@ -592,9 +628,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); @@ -611,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; } @@ -618,10 +655,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 +675,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 +689,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 +802,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 +814,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 +822,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 +885,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 +1018,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 +1057,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 +1072,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 +1095,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 +1106,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 +1155,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 +1321,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 +1340,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)) @@ -1314,28 +1355,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) @@ -1352,7 +1401,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 +1412,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 +1451,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 +1463,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 cc224560..a2cd150b 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); @@ -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/OriginalCompiledDefinition.cpp b/src/Sexy.TodLib/OriginalCompiledDefinition.cpp index eb00f4c0..f181365a 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 268c9696..3c82aa6c 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/Reanimator.cpp b/src/Sexy.TodLib/Reanimator.cpp index d9f37b4c..fb3f3870 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) + 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) + 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(); @@ -1100,7 +1101,7 @@ Reanimation *ReanimationHolder::AllocReanimation(float theX, return aReanim; } -void ReanimatorEnsureDefinitionLoaded(ReanimationType theReanimType, bool theIsPreloading) +void ReanimatorEnsureDefinitionLoaded(ReanimationType theReanimType, bool theIsPreloading, bool recompile) { TOD_ASSERT(theReanimType >= 0 && theReanimType < gReanimatorDefCount); ReanimatorDefinition *aReanimDef = &gReanimatorDefArray[(int)theReanimType]; @@ -1118,12 +1119,12 @@ 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 @@ -1134,14 +1135,11 @@ void ReanimatorEnsureDefinitionLoaded(ReanimationType theReanimType, bool theIsP 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) +void ReanimatorLoadDefinitions(ReanimationParams *theReanimationParamArray, int theReanimationParamArraySize, bool recompile) { TodHesitationBracket aHesitation("ReanimatorLoadDefinitions"); TOD_ASSERT(!gReanimationParamArray && !gReanimatorDefArray); @@ -1154,8 +1152,8 @@ 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))) + ReanimatorEnsureDefinitionLoaded(aReanimationParams->mReanimationType, true, recompile); } } @@ -1180,7 +1178,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 +1197,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 +1218,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 +1227,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 +1250,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 +1258,6 @@ void Reanimation::PlayReanim(const char *theTrackName, ReanimLoopType theLoopTyp SetFramesForLayer(theTrackName); } - void Reanimation::ParseAttacherTrack(const ReanimatorTransform &theTransform, AttacherInfo &theAttacherInfo) { theAttacherInfo.mReanimName = ""; @@ -1283,18 +1280,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 +1322,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 +1337,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 +1349,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 +1365,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 +1405,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 +1421,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 +1438,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 c146cb49..60cba2f2 100644 --- a/src/Sexy.TodLib/Reanimator.h +++ b/src/Sexy.TodLib/Reanimator.h @@ -78,10 +78,10 @@ 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 _cdecl ReanimatorEnsureDefinitionLoaded(ReanimationType theReanimType, bool theIsPreloading, bool recompile = false); +void ReanimatorLoadDefinitions(ReanimationParams *theReanimationParamArray, int theReanimationParamArraySize, bool recompile); void ReanimatorFreeDefinitions(); extern ReanimationParams gLawnReanimationArray[(int)ReanimationType::NUM_REANIMS]; @@ -228,7 +228,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 +242,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/TodCommon.cpp b/src/Sexy.TodLib/TodCommon.cpp index f1a9d6f0..b876d62c 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 328c0a52..67599d64 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/Sexy.TodLib/TodList.h b/src/Sexy.TodLib/TodList.h index 5886f01c..494db4d2 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/Sexy.TodLib/TodParticle.cpp b/src/Sexy.TodLib/TodParticle.cpp index 1169212b..46271329 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 64459185..2a81bbc0 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 ef00b9cb..d4ef0d86 100644 --- a/src/Sexy.TodLib/Trail.cpp +++ b/src/Sexy.TodLib/Trail.cpp @@ -9,7 +9,8 @@ int gTrailParamArraySize; TrailParams *gTrailParamArray; TrailParams gLawnTrailArray[(int)TrailType::NUM_TRAILS] = { - {TrailType::TRAIL_ICE, "particles/IceTrail.trail"}}; + { TrailType::TRAIL_ICE, "particles/IceTrail.trail" } +}; TrailDefinition::TrailDefinition() { @@ -28,11 +29,11 @@ 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 +44,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 +58,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 +104,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 +205,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 +237,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; @@ -305,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 ebaba29d..43304a63 100644 --- a/src/Sexy.TodLib/Trail.h +++ b/src/Sexy.TodLib/Trail.h @@ -42,10 +42,10 @@ 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; @@ -56,8 +56,8 @@ class TrailDefinition 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; @@ -122,4 +122,4 @@ class TrailHolder Trail *AllocTrailFromDef(int theRenderOrder, TrailDefinition *theDefinition); }; -#endif +#endif \ No newline at end of file diff --git a/src/SexyAppFramework/AutoCrit.h b/src/SexyAppFramework/AutoCrit.h deleted file mode 100644 index f23a6319..00000000 --- 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/BassMusicInterface.cpp b/src/SexyAppFramework/BassMusicInterface.cpp index fa3d96c0..e4c1cdf0 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 9254a20c..d1eb8679 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/Buffer.cpp b/src/SexyAppFramework/Buffer.cpp index 6460035a..d8e7a941 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) { diff --git a/src/SexyAppFramework/CritSect.cpp b/src/SexyAppFramework/CritSect.cpp deleted file mode 100644 index 5c561b6d..00000000 --- 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 09b1db7f..00000000 --- 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 6ca259bc..399284cd 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/Encoding.cpp b/src/SexyAppFramework/Encoding.cpp index 8afa43d3..bd1286ad 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 8f4b8c97..babfd5fd 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/HTTPTransfer.cpp b/src/SexyAppFramework/HTTPTransfer.cpp index 70c32791..6af3d699 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/ImageFont.cpp b/src/SexyAppFramework/ImageFont.cpp index 97d1214f..ce6ca6b6 100644 --- a/src/SexyAppFramework/ImageFont.cpp +++ b/src/SexyAppFramework/ImageFont.cpp @@ -3,7 +3,7 @@ #include "Image.h" #include "SexyAppBase.h" #include "MemoryImage.h" -#include "../SexyAppFramework/AutoCrit.h" +#include "RenderCommand.h" using namespace Sexy; @@ -105,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) { @@ -203,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; } @@ -284,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); @@ -337,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; } @@ -355,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()) { @@ -432,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])); @@ -451,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])); @@ -468,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; @@ -538,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)); @@ -572,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; } @@ -688,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]; @@ -708,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()) { @@ -771,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()) { @@ -786,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; @@ -815,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 { @@ -841,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()) { @@ -851,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(); @@ -860,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; @@ -884,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()) { @@ -894,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; @@ -939,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()) { @@ -969,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"); @@ -1054,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; @@ -1095,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); @@ -1142,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(); @@ -1203,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; @@ -1215,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) @@ -1259,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; @@ -1284,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) @@ -1381,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; @@ -1391,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,39 +1419,26 @@ int ImageFont::CharWidth(uint32_t theChar) return CharWidthKern(theChar, 0); } -CritSect gRenderCritSec; -static const int POOL_SIZE = 4096; -static RenderCommand gRenderCommandPool[POOL_SIZE]; -static RenderCommand *gRenderTail[256]; -static RenderCommand *gRenderHead[256]; +std::mutex gRenderCritSec; +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) { - AutoCrit anAutoCrit(gRenderCritSec); - - int aPoolIdx; - - for (aPoolIdx = 0; aPoolIdx < 256; aPoolIdx++) - { - gRenderHead[aPoolIdx] = NULL; - gRenderTail[aPoolIdx] = NULL; - } + auto aLock = std::scoped_lock(gRenderCritSec); + 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) @@ -1509,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; @@ -1527,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; @@ -1548,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) @@ -1607,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); @@ -1654,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); } @@ -1711,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 2d840af7..11014f3e 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/OpenALSoundManager.cpp b/src/SexyAppFramework/OpenALSoundManager.cpp index bfbac604..8d46bde3 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(); diff --git a/src/SexyAppFramework/OpenGL/OpenGLImage.cpp b/src/SexyAppFramework/OpenGL/OpenGLImage.cpp index 89122c49..42e88032 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 @@ -32,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); @@ -91,7 +94,8 @@ void OpenGLImage::BitsChanged() { MemoryImage::BitsChanged(); - delete (GLuint *)mSurface; + if (mSurface != nullptr) + delete (GLuint *)mSurface; mSurface = nullptr; } @@ -111,8 +115,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; @@ -206,6 +210,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() @@ -899,21 +904,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); @@ -922,37 +927,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); @@ -967,4 +972,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 6c252512..fdfeb5ba 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); } @@ -627,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() @@ -1396,4 +1402,4 @@ bool OpenGLRenderer::TestOpenGL(SDL_Window *theWindow) return true; } -#endif \ No newline at end of file +#endif diff --git a/src/SexyAppFramework/Platform.h b/src/SexyAppFramework/Platform.h index 6cf249e3..de0320c4 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 00000000..c599d3b3 --- /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/Renderer.cpp b/src/SexyAppFramework/Renderer.cpp index c94cd7a6..4e7d5e95 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 b24e876c..9c1f4bec 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 068a3c7c..18b77302 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 a45205db..efe2cfba 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 e2766d28..727afd25 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/SEHCatcher.cpp b/src/SexyAppFramework/SEHCatcher.cpp index eb14fbf1..4099289c 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 844aa5f9..34547efa 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 @@ -39,7 +45,6 @@ #include "SysFont.h" #include "ResourceManager.h" #include "BassMusicInterface.h" -#include "AutoCrit.h" #include "../PakLib/PakInterface.h" #include @@ -107,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 @@ -125,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; @@ -297,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"; @@ -354,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; @@ -388,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; @@ -682,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); @@ -913,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); @@ -1095,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; @@ -1104,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"); } @@ -1123,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; @@ -1208,7 +1219,7 @@ void SexyAppBase::DumpProgramInfo() tm *aTM = localtime(&aTime); aDumpStream << "
" << asctime(aTM) << "
" - << std::endl; + << std::endl; int anImgNum = 0; @@ -1264,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)); @@ -1298,7 +1309,7 @@ void SexyAppBase::DumpProgramInfo() aDumpStream << "" << std::endl; aDumpStream << "" << std::endl; + << " HEIGHT=" << aThumbHeight << ">" << std::endl; int aNumPixels = aMemoryImage->mWidth * aMemoryImage->mHeight; @@ -1364,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; @@ -1429,7 +1440,7 @@ void SexyAppBase::DumpProgramInfo() } ImageLib::WriteImage((GetAppDataFolder() + std::string("_dump\\") + aThumbName).c_str(), &anImageLibImage, - ".jpeg"); + ".jpeg"); // Write high resolution image @@ -1477,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) { @@ -1666,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) @@ -2068,7 +2079,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() @@ -2088,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(); } @@ -2591,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(); @@ -2718,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; @@ -2756,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(); } @@ -2791,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; @@ -3389,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()); @@ -3405,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(); @@ -3536,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; @@ -3702,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(); @@ -3725,7 +3738,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(); @@ -3738,9 +3751,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; } @@ -3787,9 +3800,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; } @@ -4126,7 +4139,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 @@ -4193,7 +4206,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()) { @@ -4381,7 +4394,7 @@ void SexyAppBase::EnforceCursor() else { if (mCursorNum >= NUM_CURSORS || (mCursorImages[mCursorNum] == nullptr) || - ((!mPlayingDemoBuffer) && (!mCustomCursorsEnabled))) + ((!mPlayingDemoBuffer) && (!mCustomCursorsEnabled))) { SDL_SetCursor(mSystemCursors[aNativeCursor]); SDL_ShowCursor(); @@ -4391,9 +4404,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; @@ -4964,7 +4977,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; } } @@ -4973,7 +4986,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; } } @@ -5289,7 +5302,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); } } @@ -5544,7 +5557,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); @@ -5553,14 +5566,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; @@ -5596,9 +5609,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); } } @@ -5635,9 +5648,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 @@ -5705,9 +5718,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 @@ -6009,7 +6022,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); } } @@ -6120,13 +6133,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,9 +6223,9 @@ 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())); + SharedImageMap::value_type(SharedImageMap::key_type(anUpperFileName, anUpperVariant), SharedImage())); aSharedImageRef = &aResultPair.first->second; } @@ -6233,7 +6246,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 7f4c550b..6d3d4027 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; diff --git a/src/SexyAppFramework/SysFont.cpp b/src/SexyAppFramework/SysFont.cpp index 79794e26..dcb34b3b 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,29 +183,27 @@ SysFont::SysFont(const SysFont &theSysFont) mHeight = theSysFont.mHeight; mAscent = theSysFont.mAscent; mFontData = theSysFont.mFontData; - mFontData->mFont = this; mBold = theSysFont.mBold; mItalic = theSysFont.mItalic; + mUnderlined = theSysFont.mUnderlined; mDrawShadow = false; } 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 +216,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) -{ - if (mFontData == nullptr) + Graphics *g, int theX, int theY, const SexyString &theString, const Color &theColor, const Rect &theClipRect) +{ + 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(); auto end = theString.end(); while (it != end) @@ -245,26 +239,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, + 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, + 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 +265,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 + 1, aDrawY + 1, 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 + 1, aDrawY + 1, aGlyph.mWidth, aGlyph.mHeight), + Rect(aGlyph.mX, aGlyph.mY, aGlyph.mWidth, aGlyph.mHeight), + theClipRect, + theColor, + 0); } posX += aGlyph.mAdvance; @@ -299,14 +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); } } @@ -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 d4d50f0e..9b1eeb0f 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__ diff --git a/src/main.cpp b/src/main.cpp index a8d869ef..8d1da154 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,9 +19,15 @@ 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) + { + gLawnApp->Shutdown(); + delete gLawnApp; + return 0; + } gLawnApp->Start(); gLawnApp->Shutdown();