接入清屏炸弹与终末清场进化路线
This commit is contained in:
@@ -64,6 +64,10 @@ struct PlayerStats
|
||||
int infiniteFeverLevel;
|
||||
int feverLineCharge;
|
||||
int feverTicks;
|
||||
int screenBombLevel;
|
||||
int screenBombCharge;
|
||||
int screenBombCount;
|
||||
int terminalClearLevel;
|
||||
int stableStructureLevel;
|
||||
int doubleGrowthLevel;
|
||||
int gamblerLevel;
|
||||
|
||||
@@ -50,7 +50,9 @@ enum UpgradeId
|
||||
UPGRADE_THUNDER_LASER = 18,
|
||||
UPGRADE_FEVER_MODE = 19,
|
||||
UPGRADE_RAGE_STACK = 20,
|
||||
UPGRADE_INFINITE_FEVER = 21
|
||||
UPGRADE_INFINITE_FEVER = 21,
|
||||
UPGRADE_SCREEN_BOMB = 22,
|
||||
UPGRADE_TERMINAL_CLEAR = 23
|
||||
};
|
||||
|
||||
static const UpgradeEntry kUpgradePool[] =
|
||||
@@ -73,6 +75,8 @@ static const UpgradeEntry kUpgradePool[] =
|
||||
{ UPGRADE_FEVER_MODE, 1, false, _T("\u72c2\u70ed\u6a21\u5f0f"), _T("\u8fdb\u9636"), _T("\u7d2f\u8ba1\u6d88\u884c 20 \u884c\u540e\u8fdb\u5165 10 \u79d2\u72c2\u70ed\u72b6\u6001\u3002") },
|
||||
{ UPGRADE_RAGE_STACK, 1, false, _T("\u66b4\u8d70\u5806\u53e0"), _T("\u8fdb\u9636"), _T("\u8fde\u7eed\u6d88\u884c\u8d8a\u591a\uff0c\u5f97\u5206\u500d\u7387\u8ffd\u52a0\u8d8a\u9ad8\u3002") },
|
||||
{ UPGRADE_INFINITE_FEVER, 1, false, _T("\u65e0\u9650\u72c2\u70ed"), _T("\u8fdb\u5316"), _T("\u72c2\u70ed\u671f\u95f4\u6d88\u884c\u53ef\u5ef6\u957f\u65f6\u95f4\uff0c\u8fde\u51fb\u8d8a\u9ad8\u500d\u7387\u8d8a\u5f3a\u3002") },
|
||||
{ UPGRADE_SCREEN_BOMB, 1, false, _T("\u6e05\u5c4f\u70b8\u5f39"), _T("\u8fdb\u9636"), _T("\u7d2f\u8ba1\u6d88\u884c 30 \u884c\u540e\u83b7\u5f97 1 \u6b21\u6e05\u5c4f\u70b8\u5f39\uff0c\u53ef\u81ea\u52a8\u6216\u4e3b\u52a8\u6e05\u9664\u5e95\u90e8 5 \u884c\u3002") },
|
||||
{ UPGRADE_TERMINAL_CLEAR, 1, false, _T("\u7ec8\u672b\u6e05\u573a"), _T("\u8fdb\u5316"), _T("\u6fc0\u6d3b\u6700\u540e\u4e00\u640f\u65f6\u81ea\u52a8\u91ca\u653e\u4e00\u6b21\u6e05\u5c4f\u70b8\u5f39\uff0c\u5e76\u8fdb\u5165 10 \u79d2\u72c2\u70ed\u3002") },
|
||||
{ UPGRADE_STABLE_STRUCTURE, -1, 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, 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, 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") },
|
||||
@@ -242,6 +246,10 @@ static void ResetPlayerStats(PlayerStats& stats, bool useRogueRules)
|
||||
stats.infiniteFeverLevel = 0;
|
||||
stats.feverLineCharge = 0;
|
||||
stats.feverTicks = 0;
|
||||
stats.screenBombLevel = 0;
|
||||
stats.screenBombCharge = 0;
|
||||
stats.screenBombCount = 0;
|
||||
stats.terminalClearLevel = 0;
|
||||
stats.stableStructureLevel = 0;
|
||||
stats.doubleGrowthLevel = 0;
|
||||
stats.gamblerLevel = 0;
|
||||
@@ -311,6 +319,10 @@ static int GetUpgradeCurrentLevel(int upgradeId)
|
||||
return rogueStats.rageStackLevel;
|
||||
case UPGRADE_INFINITE_FEVER:
|
||||
return rogueStats.infiniteFeverLevel;
|
||||
case UPGRADE_SCREEN_BOMB:
|
||||
return rogueStats.screenBombLevel;
|
||||
case UPGRADE_TERMINAL_CLEAR:
|
||||
return rogueStats.terminalClearLevel;
|
||||
case UPGRADE_STABLE_STRUCTURE:
|
||||
return rogueStats.stableStructureLevel;
|
||||
case UPGRADE_DOUBLE_GROWTH:
|
||||
@@ -380,6 +392,16 @@ static bool IsUpgradeSelectable(const UpgradeEntry& entry)
|
||||
return rogueStats.feverLevel > 0 && rogueStats.rageStackLevel > 0 && rogueStats.infiniteFeverLevel == 0;
|
||||
}
|
||||
|
||||
if (entry.id == UPGRADE_SCREEN_BOMB)
|
||||
{
|
||||
return rogueStats.screenBombLevel == 0;
|
||||
}
|
||||
|
||||
if (entry.id == UPGRADE_TERMINAL_CLEAR)
|
||||
{
|
||||
return rogueStats.screenBombLevel > 0 && rogueStats.lastChanceUpgradeLevel > 0 && rogueStats.terminalClearLevel == 0;
|
||||
}
|
||||
|
||||
if (entry.repeatable)
|
||||
{
|
||||
return true;
|
||||
@@ -528,6 +550,32 @@ static int ClearColumnAt(int column)
|
||||
return clearedCellCount;
|
||||
}
|
||||
|
||||
static int TriggerScreenBomb()
|
||||
{
|
||||
int clearedCellCount = 0;
|
||||
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
int row = nGameHeight - 1 - i;
|
||||
if (row < 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
for (int x = 0; x < nGameWidth; x++)
|
||||
{
|
||||
if (workRegion[row][x] != 0)
|
||||
{
|
||||
clearedCellCount++;
|
||||
}
|
||||
}
|
||||
|
||||
DeleteOneLine(row);
|
||||
}
|
||||
|
||||
return clearedCellCount;
|
||||
}
|
||||
|
||||
static int TriggerChainBlast(int lineAnchor)
|
||||
{
|
||||
if (currentMode != MODE_ROGUE || rogueStats.chainBlastLevel <= 0)
|
||||
@@ -863,6 +911,12 @@ static void ApplyUpgradeById(int upgradeId, int targetPieceType, int applyCount)
|
||||
case UPGRADE_INFINITE_FEVER:
|
||||
rogueStats.infiniteFeverLevel = 1;
|
||||
break;
|
||||
case UPGRADE_SCREEN_BOMB:
|
||||
rogueStats.screenBombLevel = 1;
|
||||
break;
|
||||
case UPGRADE_TERMINAL_CLEAR:
|
||||
rogueStats.terminalClearLevel = 1;
|
||||
break;
|
||||
case UPGRADE_STABLE_STRUCTURE:
|
||||
rogueStats.stableStructureLevel += applyCount;
|
||||
break;
|
||||
@@ -981,6 +1035,17 @@ static void ApplyLineClearResult(int linesCleared)
|
||||
currentFallInterval = GetRogueFallInterval();
|
||||
}
|
||||
|
||||
if (rogueStats.screenBombLevel > 0)
|
||||
{
|
||||
rogueStats.screenBombCharge += linesCleared;
|
||||
while (rogueStats.screenBombCharge >= 30)
|
||||
{
|
||||
rogueStats.screenBombCharge -= 30;
|
||||
rogueStats.screenBombCount++;
|
||||
SetFeedbackMessage(_T("\u6e05\u5c4f\u70b8\u5f39\u5c31\u7eea"), _T("\u5df2\u83b7\u5f97 1 \u6b21\u6e05\u9664\u5e95\u90e8 5 \u884c\u7684\u673a\u4f1a\u3002"), 12);
|
||||
}
|
||||
}
|
||||
|
||||
if (rogueStats.chainBlastLevel > 0)
|
||||
{
|
||||
int chainBlastCells = 0;
|
||||
@@ -1398,7 +1463,23 @@ void Fixing()
|
||||
|
||||
if (overflowTop)
|
||||
{
|
||||
if (currentMode == MODE_ROGUE && rogueStats.lastChanceCount > 0)
|
||||
if (currentMode == MODE_ROGUE && rogueStats.terminalClearLevel > 0 && rogueStats.lastChanceCount > 0 && rogueStats.screenBombCount > 0)
|
||||
{
|
||||
rogueStats.lastChanceCount--;
|
||||
rogueStats.screenBombCount--;
|
||||
|
||||
int clearedByTerminal = TriggerScreenBomb();
|
||||
rogueStats.feverTicks = 10;
|
||||
currentFallInterval = GetRogueFallInterval();
|
||||
|
||||
TCHAR terminalDetail[128];
|
||||
_stprintf_s(
|
||||
terminalDetail,
|
||||
_T("\u7ec8\u672b\u6e05\u573a\u751f\u6548\uff0c\u6e05\u9664 %d \u683c\uff0c\u5e76\u8fdb\u5165 10 \u79d2\u72c2\u70ed\u3002"),
|
||||
clearedByTerminal);
|
||||
SetFeedbackMessage(_T("\u7ec8\u672b\u6e05\u573a\u89e6\u53d1"), terminalDetail, 14);
|
||||
}
|
||||
else if (currentMode == MODE_ROGUE && rogueStats.lastChanceCount > 0)
|
||||
{
|
||||
rogueStats.lastChanceCount--;
|
||||
|
||||
|
||||
@@ -745,6 +745,18 @@ void TDrawScreen(HDC hdc, HWND hWnd)
|
||||
TextOut(hdc, combatRect.left + SS(18), combatRect.top + SS(498), _T("\u65e0\u9650\u72c2\u70ed \u6d88\u884c\u53ef\u5ef6\u957f\u65f6\u95f4"), lstrlen(_T("\u65e0\u9650\u72c2\u70ed \u6d88\u884c\u53ef\u5ef6\u957f\u65f6\u95f4")));
|
||||
}
|
||||
|
||||
if (rogueStats.screenBombLevel > 0)
|
||||
{
|
||||
TCHAR bombText[96];
|
||||
_stprintf_s(bombText, _T("\u6e05\u5c4f\u70b8\u5f39 %d / 30 \u5e93\u5b58 %d"), rogueStats.screenBombCharge, rogueStats.screenBombCount);
|
||||
TextOut(hdc, combatRect.left + SS(18), combatRect.top + SS(530), bombText, lstrlen(bombText));
|
||||
}
|
||||
|
||||
if (rogueStats.terminalClearLevel > 0)
|
||||
{
|
||||
TextOut(hdc, combatRect.left + SS(18), combatRect.top + SS(562), _T("\u7ec8\u672b\u6e05\u573a \u6fc0\u6d3b\u6700\u540e\u4e00\u640f\u65f6\u81ea\u52a8\u89e6\u53d1"), lstrlen(_T("\u7ec8\u672b\u6e05\u573a \u6fc0\u6d3b\u6700\u540e\u4e00\u640f\u65f6\u81ea\u52a8\u89e6\u53d1")));
|
||||
}
|
||||
|
||||
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")));
|
||||
@@ -883,6 +895,14 @@ void TDrawScreen(HDC hdc, HWND hWnd)
|
||||
{
|
||||
_stprintf_s(upgradeSummary + lstrlen(upgradeSummary), 512 - lstrlen(upgradeSummary), _T("\u65e0\u9650\u72c2\u70ed Lv.1\r\n"));
|
||||
}
|
||||
if (rogueStats.screenBombLevel > 0)
|
||||
{
|
||||
_stprintf_s(upgradeSummary + lstrlen(upgradeSummary), 512 - lstrlen(upgradeSummary), _T("\u6e05\u5c4f\u70b8\u5f39 Lv.1\r\n"));
|
||||
}
|
||||
if (rogueStats.terminalClearLevel > 0)
|
||||
{
|
||||
_stprintf_s(upgradeSummary + lstrlen(upgradeSummary), 512 - lstrlen(upgradeSummary), _T("\u7ec8\u672b\u6e05\u573a 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