补充赌命四消与极限玩家强化路线
This commit is contained in:
@@ -73,6 +73,9 @@ struct PlayerStats
|
||||
int perfectRotateLevel;
|
||||
int timeDilationLevel;
|
||||
int highPressureLevel;
|
||||
int tetrisGambleLevel;
|
||||
int extremePlayerLevel;
|
||||
int extremeSlowTicks;
|
||||
int stableStructureLevel;
|
||||
int doubleGrowthLevel;
|
||||
int gamblerLevel;
|
||||
@@ -178,5 +181,6 @@ void OpenUpgradeMenu();
|
||||
void ConfirmUpgradeSelection();
|
||||
void HoldCurrentPiece();
|
||||
void UseScreenBomb();
|
||||
int GetRogueFallInterval();
|
||||
|
||||
void TDrawScreen(HDC hdc, HWND hWnd);
|
||||
|
||||
@@ -167,6 +167,14 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
shouldRefresh = true;
|
||||
}
|
||||
|
||||
if (currentMode == MODE_ROGUE && rogueStats.extremeSlowTicks > 0)
|
||||
{
|
||||
rogueStats.extremeSlowTicks--;
|
||||
currentFallInterval = GetRogueFallInterval();
|
||||
ResetGameTimer(hWnd);
|
||||
shouldRefresh = true;
|
||||
}
|
||||
|
||||
if (currentScreen == SCREEN_PLAYING &&
|
||||
!suspendFlag &&
|
||||
!gameOverFlag)
|
||||
|
||||
@@ -57,7 +57,9 @@ enum UpgradeId
|
||||
UPGRADE_DESTINY_WHEEL = 25,
|
||||
UPGRADE_PERFECT_ROTATE = 26,
|
||||
UPGRADE_TIME_DILATION = 27,
|
||||
UPGRADE_HIGH_PRESSURE = 28
|
||||
UPGRADE_HIGH_PRESSURE = 28,
|
||||
UPGRADE_TETRIS_GAMBLE = 29,
|
||||
UPGRADE_EXTREME_PLAYER = 30
|
||||
};
|
||||
|
||||
static const UpgradeEntry kUpgradePool[] =
|
||||
@@ -87,6 +89,8 @@ static const UpgradeEntry kUpgradePool[] =
|
||||
{ UPGRADE_PERFECT_ROTATE, 1, 82, false, _T("\u5b8c\u7f8e\u65cb\u8f6c"), _T("\u64cd\u4f5c"), _T("\u65cb\u8f6c\u5931\u8d25\u65f6\u81ea\u52a8\u5c1d\u8bd5\u5de6\u53f3\u5404\u504f\u79fb 1 \u683c\u8fdb\u884c\u4fee\u6b63\u3002") },
|
||||
{ UPGRADE_TIME_DILATION, 1, 80, false, _T("\u65f6\u95f4\u7f13\u6d41"), _T("\u4fdd\u547d"), _T("\u76d8\u9762\u63a5\u8fd1\u9876\u7aef\u65f6\u81ea\u52a8\u964d\u4f4e\u4e0b\u843d\u901f\u5ea6\uff0c\u4e3a\u8865\u6551\u7559\u51fa\u53cd\u5e94\u7a7a\u95f4\u3002") },
|
||||
{ UPGRADE_HIGH_PRESSURE, 1, 70, false, _T("\u9ad8\u538b\u5956\u52b1"), _T("\u98ce\u9669"), _T("\u4e0b\u843d\u901f\u5ea6\u63d0\u9ad8 15%\uff0c\u4f46\u5f97\u5206\u4e0e EXP \u989d\u5916\u63d0\u9ad8 50%\u3002") },
|
||||
{ UPGRADE_TETRIS_GAMBLE, 1, 78, false, _T("\u8d4c\u547d\u56db\u6d88"), _T("\u98ce\u9669"), _T("\u666e\u901a 1~3 \u6d88\u6536\u76ca\u964d\u4f4e\uff0c\u4f46 4 \u6d88\u6536\u76ca\u66b4\u589e\u3002") },
|
||||
{ UPGRADE_EXTREME_PLAYER, 1, 114, false, _T("\u6781\u9650\u73a9\u5bb6"), _T("\u8fdb\u5316"), _T("\u7ec4\u5408\u9ad8\u538b\u4e0e\u8d4c\u547d\u56db\u6d88\uff0c\u901f\u5ea6\u8fdb\u4e00\u6b65\u63d0\u9ad8\uff0c\u56db\u6d88\u540e\u77ed\u6682\u7f13\u901f\u3002") },
|
||||
{ UPGRADE_STABLE_STRUCTURE, -1, 72, true, _T("\u7a33\u5b9a\u7ed3\u6784"), _T("\u7279\u6b8a"), _T("\u843d\u5730\u540e\u5c0f\u6982\u7387\u81ea\u52a8\u586b\u8865\u90bb\u8fd1\u7a7a\u6d1e\uff0c\u63d0\u9ad8\u76d8\u9762\u7ed3\u6784\u7a33\u5b9a\u6027\u3002") },
|
||||
{ UPGRADE_DOUBLE_GROWTH, -1, 86, true, _T("\u53cc\u500d\u6210\u957f"), _T("\u7279\u6b8a"), _T("\u989d\u5916\u63d0\u9ad8\u6d88\u884c\u5f97\u5206\u4e0e EXP \u6536\u76ca\uff0c\u6bcf\u5c42\u518d\u8ffd\u52a0 15%\u3002") },
|
||||
{ UPGRADE_PIECE_TUNING, -1, 64, true, _T("\u65b9\u5757\u6539\u9020"), _T("\u7279\u6b8a"), _T("\u9009\u62e9\u4e00\u79cd\u65b9\u5757\uff0c\u964d\u4f4e\u5176\u540e\u7eed\u51fa\u73b0\u6982\u7387\u3002") },
|
||||
@@ -266,6 +270,9 @@ static void ResetPlayerStats(PlayerStats& stats, bool useRogueRules)
|
||||
stats.perfectRotateLevel = 0;
|
||||
stats.timeDilationLevel = 0;
|
||||
stats.highPressureLevel = 0;
|
||||
stats.tetrisGambleLevel = 0;
|
||||
stats.extremePlayerLevel = 0;
|
||||
stats.extremeSlowTicks = 0;
|
||||
stats.stableStructureLevel = 0;
|
||||
stats.doubleGrowthLevel = 0;
|
||||
stats.gamblerLevel = 0;
|
||||
@@ -349,6 +356,10 @@ static int GetUpgradeCurrentLevel(int upgradeId)
|
||||
return rogueStats.timeDilationLevel;
|
||||
case UPGRADE_HIGH_PRESSURE:
|
||||
return rogueStats.highPressureLevel;
|
||||
case UPGRADE_TETRIS_GAMBLE:
|
||||
return rogueStats.tetrisGambleLevel;
|
||||
case UPGRADE_EXTREME_PLAYER:
|
||||
return rogueStats.extremePlayerLevel;
|
||||
case UPGRADE_STABLE_STRUCTURE:
|
||||
return rogueStats.stableStructureLevel;
|
||||
case UPGRADE_DOUBLE_GROWTH:
|
||||
@@ -511,6 +522,15 @@ static int GetUpgradeDynamicWeight(const UpgradeEntry& entry)
|
||||
weight += 18;
|
||||
}
|
||||
break;
|
||||
case UPGRADE_TETRIS_GAMBLE:
|
||||
if (rogueStats.level >= 4)
|
||||
{
|
||||
weight += 14;
|
||||
}
|
||||
break;
|
||||
case UPGRADE_EXTREME_PLAYER:
|
||||
weight += 36;
|
||||
break;
|
||||
case UPGRADE_STABLE_STRUCTURE:
|
||||
if (boardIsDangerous)
|
||||
{
|
||||
@@ -625,6 +645,11 @@ static bool IsUpgradeSelectable(const UpgradeEntry& entry)
|
||||
return rogueStats.gamblerLevel > 0 && rogueStats.dualChoiceLevel > 0 && rogueStats.destinyWheelLevel == 0;
|
||||
}
|
||||
|
||||
if (entry.id == UPGRADE_EXTREME_PLAYER)
|
||||
{
|
||||
return rogueStats.highPressureLevel > 0 && rogueStats.tetrisGambleLevel > 0 && rogueStats.extremePlayerLevel == 0;
|
||||
}
|
||||
|
||||
if (entry.repeatable)
|
||||
{
|
||||
return true;
|
||||
@@ -1075,7 +1100,7 @@ static void FillUpgradeOptions()
|
||||
}
|
||||
}
|
||||
|
||||
static int GetRogueFallInterval()
|
||||
int GetRogueFallInterval()
|
||||
{
|
||||
int baseInterval = 500 + rogueStats.slowFallStacks * 80;
|
||||
|
||||
@@ -1084,6 +1109,11 @@ static int GetRogueFallInterval()
|
||||
baseInterval = baseInterval * 85 / 100;
|
||||
}
|
||||
|
||||
if (rogueStats.extremePlayerLevel > 0)
|
||||
{
|
||||
baseInterval = baseInterval * 90 / 100;
|
||||
}
|
||||
|
||||
if (rogueStats.timeDilationLevel > 0)
|
||||
{
|
||||
int topOccupiedRow = GetTopOccupiedRow();
|
||||
@@ -1098,6 +1128,11 @@ static int GetRogueFallInterval()
|
||||
baseInterval += 120;
|
||||
}
|
||||
|
||||
if (rogueStats.extremeSlowTicks > 0)
|
||||
{
|
||||
baseInterval += 180;
|
||||
}
|
||||
|
||||
if (baseInterval < 120)
|
||||
{
|
||||
baseInterval = 120;
|
||||
@@ -1220,6 +1255,13 @@ static void ApplyUpgradeById(int upgradeId, int targetPieceType, int applyCount)
|
||||
rogueStats.expMultiplierPercent += 50;
|
||||
currentFallInterval = GetRogueFallInterval();
|
||||
break;
|
||||
case UPGRADE_TETRIS_GAMBLE:
|
||||
rogueStats.tetrisGambleLevel = 1;
|
||||
break;
|
||||
case UPGRADE_EXTREME_PLAYER:
|
||||
rogueStats.extremePlayerLevel = 1;
|
||||
currentFallInterval = GetRogueFallInterval();
|
||||
break;
|
||||
case UPGRADE_STABLE_STRUCTURE:
|
||||
rogueStats.stableStructureLevel += applyCount;
|
||||
break;
|
||||
@@ -1265,6 +1307,20 @@ static void ApplyLineClearResult(int linesCleared)
|
||||
int expGain = GetRogueExpByLines(linesCleared);
|
||||
expGain = expGain * rogueStats.expMultiplierPercent / 100;
|
||||
|
||||
if (rogueStats.tetrisGambleLevel > 0)
|
||||
{
|
||||
if (linesCleared == 4)
|
||||
{
|
||||
scoreGain *= 4;
|
||||
expGain *= 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
scoreGain = scoreGain * 60 / 100;
|
||||
expGain = expGain * 75 / 100;
|
||||
}
|
||||
}
|
||||
|
||||
if (rogueStats.doubleGrowthLevel > 0)
|
||||
{
|
||||
int growthMultiplierPercent = 100 + rogueStats.doubleGrowthLevel * 15;
|
||||
@@ -1338,6 +1394,13 @@ static void ApplyLineClearResult(int linesCleared)
|
||||
currentFallInterval = GetRogueFallInterval();
|
||||
}
|
||||
|
||||
if (rogueStats.extremePlayerLevel > 0 && linesCleared == 4)
|
||||
{
|
||||
rogueStats.extremeSlowTicks = 5;
|
||||
currentFallInterval = GetRogueFallInterval();
|
||||
SetFeedbackMessage(_T("\u6781\u9650\u73a9\u5bb6\u89e6\u53d1"), _T("\u56db\u6d88\u6210\u529f\uff0c\u63a5\u4e0b\u6765 5 \u79d2\u77ed\u6682\u7f13\u901f\u8865\u4f4d\u3002"), 12);
|
||||
}
|
||||
|
||||
if (rogueStats.screenBombLevel > 0)
|
||||
{
|
||||
rogueStats.screenBombCharge += linesCleared;
|
||||
|
||||
@@ -772,6 +772,18 @@ void TDrawScreen(HDC hdc, HWND hWnd)
|
||||
TextOut(hdc, combatRect.left + SS(18), combatRect.top + SS(658), _T("\u9ad8\u538b\u5956\u52b1 \u901f\u5ea6\u66f4\u5feb\uff0c\u5f97\u5206 / EXP x1.5"), lstrlen(_T("\u9ad8\u538b\u5956\u52b1 \u901f\u5ea6\u66f4\u5feb\uff0c\u5f97\u5206 / EXP x1.5")));
|
||||
}
|
||||
|
||||
if (rogueStats.tetrisGambleLevel > 0)
|
||||
{
|
||||
TextOut(hdc, combatRect.left + SS(18), combatRect.top + SS(690), _T("\u8d4c\u547d\u56db\u6d88 \u975e\u56db\u6d88\u964d\u76ca\uff0c\u56db\u6d88\u66b4\u589e"), lstrlen(_T("\u8d4c\u547d\u56db\u6d88 \u975e\u56db\u6d88\u964d\u76ca\uff0c\u56db\u6d88\u66b4\u589e")));
|
||||
}
|
||||
|
||||
if (rogueStats.extremePlayerLevel > 0)
|
||||
{
|
||||
TCHAR extremeText[96];
|
||||
_stprintf_s(extremeText, _T("\u6781\u9650\u73a9\u5bb6 \u7f13\u901f\u5269\u4f59 %d"), rogueStats.extremeSlowTicks);
|
||||
TextOut(hdc, combatRect.left + SS(18), combatRect.top + SS(722), extremeText, lstrlen(extremeText));
|
||||
}
|
||||
|
||||
if (rogueStats.chainBlastLevel > 0)
|
||||
{
|
||||
TextOut(hdc, combatRect.left + SS(18), combatRect.top + SS(274), _T("\u8fde\u9501\u7206\u7834 \u5df2\u89e3\u9501"), lstrlen(_T("\u8fde\u9501\u7206\u7834 \u5df2\u89e3\u9501")));
|
||||
@@ -930,6 +942,14 @@ void TDrawScreen(HDC hdc, HWND hWnd)
|
||||
{
|
||||
_stprintf_s(upgradeSummary + lstrlen(upgradeSummary), 512 - lstrlen(upgradeSummary), _T("\u9ad8\u538b\u5956\u52b1 Lv.1\r\n"));
|
||||
}
|
||||
if (rogueStats.tetrisGambleLevel > 0)
|
||||
{
|
||||
_stprintf_s(upgradeSummary + lstrlen(upgradeSummary), 512 - lstrlen(upgradeSummary), _T("\u8d4c\u547d\u56db\u6d88 Lv.1\r\n"));
|
||||
}
|
||||
if (rogueStats.extremePlayerLevel > 0)
|
||||
{
|
||||
_stprintf_s(upgradeSummary + lstrlen(upgradeSummary), 512 - lstrlen(upgradeSummary), _T("\u6781\u9650\u73a9\u5bb6 Lv.1\r\n"));
|
||||
}
|
||||
if (rogueStats.stableStructureLevel > 0)
|
||||
{
|
||||
_stprintf_s(upgradeSummary + lstrlen(upgradeSummary), 512 - lstrlen(upgradeSummary), _T("\u7a33\u5b9a\u7ed3\u6784 Lv.%d\r\n"), rogueStats.stableStructureLevel);
|
||||
|
||||
Reference in New Issue
Block a user