补充调整演示模式
This commit is contained in:
+384
-104
@@ -115,22 +115,46 @@ static bool rogueDemoAutoAdvance = true;
|
||||
|
||||
enum RogueDemoKind
|
||||
{
|
||||
DEMO_HOLD = 0,
|
||||
DEMO_BLACK_HOLE,
|
||||
DEMO_SCREEN_BOMB,
|
||||
DEMO_AIR_RESHAPE,
|
||||
DEMO_SCORE_MULTIPLIER = 0,
|
||||
DEMO_EXP_MULTIPLIER,
|
||||
DEMO_SLOW_FALL,
|
||||
DEMO_COMBO_BONUS,
|
||||
DEMO_PREVIEW_PLUS_ONE,
|
||||
DEMO_LAST_CHANCE,
|
||||
DEMO_HOLD,
|
||||
DEMO_PRESSURE_RELIEF,
|
||||
DEMO_SWEEPER,
|
||||
DEMO_EXPLOSIVE,
|
||||
DEMO_STABLE_STRUCTURE,
|
||||
DEMO_DOUBLE_GROWTH,
|
||||
DEMO_PIECE_TUNING,
|
||||
DEMO_GAMBLER,
|
||||
DEMO_CHAIN_BLAST,
|
||||
DEMO_CHAIN_BOMB,
|
||||
DEMO_LASER,
|
||||
DEMO_CROSS,
|
||||
DEMO_RAINBOW,
|
||||
DEMO_VOID_CORE,
|
||||
DEMO_SWEEPER,
|
||||
DEMO_LAST_CHANCE,
|
||||
DEMO_THUNDER_TETRIS,
|
||||
DEMO_THUNDER_LASER,
|
||||
DEMO_FEVER_MODE,
|
||||
DEMO_RAGE_STACK,
|
||||
DEMO_INFINITE_FEVER,
|
||||
DEMO_SCREEN_BOMB,
|
||||
DEMO_TERMINAL_CLEAR,
|
||||
DEMO_DUAL_CHOICE,
|
||||
DEMO_DESTINY_WHEEL,
|
||||
DEMO_PERFECT_ROTATE,
|
||||
DEMO_TIME_DILATION,
|
||||
DEMO_HIGH_PRESSURE,
|
||||
DEMO_TETRIS_GAMBLE,
|
||||
DEMO_EXTREME_PLAYER,
|
||||
DEMO_UPGRADE_SHOCKWAVE,
|
||||
DEMO_EVOLUTION_IMPACT,
|
||||
DEMO_CONTROL_MASTER,
|
||||
DEMO_BLOCK_STORM,
|
||||
DEMO_STABLE_STRUCTURE
|
||||
DEMO_CROSS,
|
||||
DEMO_BLACK_HOLE,
|
||||
DEMO_AIR_RESHAPE,
|
||||
DEMO_RAINBOW,
|
||||
DEMO_VOID_CORE
|
||||
};
|
||||
|
||||
struct RogueDemoStep
|
||||
@@ -142,22 +166,46 @@ struct RogueDemoStep
|
||||
|
||||
static const RogueDemoStep kRogueDemoSteps[] =
|
||||
{
|
||||
{ DEMO_SCORE_MULTIPLIER, _T("赏金纹章"), _T("Space 消一行,观察得分倍率提高后的分数收益。") },
|
||||
{ DEMO_EXP_MULTIPLIER, _T("成长印记"), _T("Space 消一行,观察 EXP 倍率提高后的成长收益。") },
|
||||
{ DEMO_SLOW_FALL, _T("缓坠羽翼"), _T("当前下落速度已放慢,练习在慢速节奏中调整落点。") },
|
||||
{ DEMO_COMBO_BONUS, _T("连击律动"), _T("连续完成两次消行,第二次会获得连击收益。") },
|
||||
{ DEMO_PREVIEW_PLUS_ONE, _T("先见之眼"), _T("右侧预览增加到 2 个,便于提前规划落点。") },
|
||||
{ DEMO_LAST_CHANCE, _T("最后一搏"), _T("Space 固定触顶方块,濒死时自动清理底部 3 行。") },
|
||||
{ DEMO_HOLD, _T("备用仓"), _T("按 C / Shift 换出备用 I 块,再用 Space 填平底行缺口。") },
|
||||
{ DEMO_BLACK_HOLE, _T("黑洞奇点"), _T("按 Z 吞噬场上最多的粉色方块,观察棋盘重力补位。") },
|
||||
{ DEMO_SCREEN_BOMB, _T("清屏炸弹"), _T("按 X 主动引爆,清理底部 5 行高压区。") },
|
||||
{ DEMO_AIR_RESHAPE, _T("空中换形"), _T("按 V 把当前方块变为 I 块,再用 Space 完成四消。") },
|
||||
{ DEMO_PRESSURE_RELIEF, _T("卸压清场"), _T("进入场景时只演示卸压清场:最高占用行被清除。") },
|
||||
{ DEMO_SWEEPER, _T("底线清道夫"), _T("Space 消去底行,充能满后自动再清扫底部。") },
|
||||
{ DEMO_EXPLOSIVE, _T("爆破核心"), _T("用方向键微调红框方块,Space 落地后清除 3x3 区域。") },
|
||||
{ DEMO_STABLE_STRUCTURE, _T("稳定结构"), _T("Space 落地后只触发稳定结构,自动填补局部空洞。") },
|
||||
{ DEMO_DOUBLE_GROWTH, _T("成长核心"), _T("Space 消一行,观察得分与 EXP 同时提高。") },
|
||||
{ DEMO_PIECE_TUNING, _T("方块改造"), _T("预览队列固定给出更多 I 块,展示改造后的出块倾向。") },
|
||||
{ DEMO_GAMBLER, _T("赌徒契约"), _T("Space 消一行,观察随机波动后的收益变化。") },
|
||||
{ DEMO_CHAIN_BLAST, _T("连锁火花"), _T("Space 消行后,在清除行附近追加随机破坏。") },
|
||||
{ DEMO_CHAIN_BOMB, _T("连环炸弹"), _T("Space 落下红框方块,演示更大的连环爆破范围。") },
|
||||
{ DEMO_LASER, _T("棱镜激光"), _T("把青色边框方块落到中列,落地后贯穿整列。") },
|
||||
{ DEMO_CROSS, _T("十字方块"), _T("把绿色边框方块落到交叉点,清除一行一列。") },
|
||||
{ DEMO_RAINBOW, _T("彩虹方块"), _T("把紫色边框方块落到彩色层,按中心行主色触发清除。") },
|
||||
{ DEMO_VOID_CORE, _T("虚空核心"), _T("按 Z 释放黑洞后,下一枚方块会被召唤成彩虹方块。") },
|
||||
{ DEMO_SWEEPER, _T("底线清道夫"), _T("Space 消去底行,充能满后自动再清扫底部。") },
|
||||
{ DEMO_LAST_CHANCE, _T("最后一搏"), _T("Space 固定触顶方块,濒死时自动清理底部 3 行。") },
|
||||
{ DEMO_THUNDER_TETRIS, _T("雷霆四消"), _T("Space 完成四消,额外轰击随机 2 行。") },
|
||||
{ DEMO_THUNDER_LASER, _T("雷霆棱镜"), _T("Space 完成四消,额外发射 2 道激光。") },
|
||||
{ DEMO_FEVER_MODE, _T("狂热节拍"), _T("Space 消一行补满充能,进入狂热收益状态。") },
|
||||
{ DEMO_RAGE_STACK, _T("怒火连段"), _T("连续消行时得分倍率追加,当前已预置连击层数。") },
|
||||
{ DEMO_INFINITE_FEVER, _T("无尽狂热"), _T("狂热期间消行会延长狂热时间。") },
|
||||
{ DEMO_SCREEN_BOMB, _T("清屏炸弹"), _T("按 X 主动引爆,清理底部 5 行高压区。") },
|
||||
{ DEMO_TERMINAL_CLEAR, _T("终末清场"), _T("Space 固定触顶方块,最后一搏会连带引爆清屏炸弹。") },
|
||||
{ DEMO_DUAL_CHOICE, _T("双重抉择"), _T("演示升级规则:每次升级可选择 2 个强化。") },
|
||||
{ DEMO_DESTINY_WHEEL, _T("命运轮盘"), _T("演示升级规则:6 选 2,并可能出现诅咒选项。") },
|
||||
{ DEMO_PERFECT_ROTATE, _T("完美旋转"), _T("靠墙旋转受阻时,系统会尝试左右修正。") },
|
||||
{ DEMO_TIME_DILATION, _T("时间缓流"), _T("高堆叠开局会自动减速,玩家可用慢速窗口整理局面。") },
|
||||
{ DEMO_HIGH_PRESSURE, _T("高压悬赏"), _T("下落速度提高,但 Space 消行后得分与 EXP 更高。") },
|
||||
{ DEMO_TETRIS_GAMBLE, _T("豪赌四消"), _T("Space 完成四消,展示四消收益暴增。") },
|
||||
{ DEMO_EXTREME_PLAYER, _T("极限玩家"), _T("Space 完成四消,触发短暂缓速补位窗口。") },
|
||||
{ DEMO_UPGRADE_SHOCKWAVE, _T("升级冲击波"), _T("Space 消一行立刻升级,不弹强化菜单并清除底部 2 行。") },
|
||||
{ DEMO_EVOLUTION_IMPACT, _T("进化冲击"), _T("Space 消一行立刻升级,清除底部 3 行并进入狂热。") },
|
||||
{ DEMO_CONTROL_MASTER, _T("操控大师"), _T("按 C / Shift 使用备用仓后,触发短暂减速并增加预览。") },
|
||||
{ DEMO_BLOCK_STORM, _T("方块风暴"), _T("连续用 I 块清理竖井,后续预览也固定为 I 块。") },
|
||||
{ DEMO_STABLE_STRUCTURE, _T("稳定结构"), _T("Space 落地后只触发稳定结构,自动填补局部空洞。") }
|
||||
{ DEMO_CROSS, _T("十字方块"), _T("把绿色边框方块落到交叉点,清除一行一列。") },
|
||||
{ DEMO_BLACK_HOLE, _T("黑洞奇点"), _T("按 Z 吞噬场上最多的粉色方块,观察棋盘重力补位。") },
|
||||
{ DEMO_AIR_RESHAPE, _T("空中换形"), _T("按 V 把当前方块变为 I 块,再用 Space 完成四消。") },
|
||||
{ DEMO_RAINBOW, _T("彩虹方块"), _T("把紫色边框方块落到彩色层,按中心行主色触发清除。") },
|
||||
{ DEMO_VOID_CORE, _T("虚空核心"), _T("按 Z 释放黑洞后,下一枚方块会被召唤成彩虹方块。") }
|
||||
};
|
||||
|
||||
static constexpr int kRogueDemoStepCount = sizeof(kRogueDemoSteps) / sizeof(kRogueDemoSteps[0]);
|
||||
@@ -953,6 +1001,25 @@ void RollCurrentPieceSpecialFlags(bool allowRandomSpecials)
|
||||
return;
|
||||
}
|
||||
|
||||
if (rogueDemoMode)
|
||||
{
|
||||
if (currentMode == MODE_ROGUE && rogueStats.pendingRainbowPieceCount > 0)
|
||||
{
|
||||
rogueStats.pendingRainbowPieceCount--;
|
||||
currentPieceIsExplosive = false;
|
||||
currentPieceIsLaser = false;
|
||||
currentPieceIsCross = false;
|
||||
currentPieceIsRainbow = true;
|
||||
return;
|
||||
}
|
||||
|
||||
currentPieceIsExplosive = false;
|
||||
currentPieceIsLaser = false;
|
||||
currentPieceIsCross = false;
|
||||
currentPieceIsRainbow = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (currentMode == MODE_ROGUE && rogueStats.pendingRainbowPieceCount > 0)
|
||||
{
|
||||
rogueStats.pendingRainbowPieceCount--;
|
||||
@@ -3022,7 +3089,7 @@ static void FillRogueDemoCell(int y, int x, int value)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 按交错颜色填充演示棋盘中的连续行。
|
||||
* @brief 按交错颜色填充演示棋盘中的连续压力行,并为每行保留缺口避免开局满行。
|
||||
*/
|
||||
static void FillRogueDemoRows(int firstRow, int lastRow, int baseValue)
|
||||
{
|
||||
@@ -3037,12 +3104,20 @@ static void FillRogueDemoRows(int firstRow, int lastRow, int baseValue)
|
||||
|
||||
for (int y = firstRow; y <= lastRow; y++)
|
||||
{
|
||||
int gapX = (baseValue + y) % nGameWidth;
|
||||
for (int x = 0; x < nGameWidth; x++)
|
||||
{
|
||||
if (x == gapX)
|
||||
{
|
||||
workRegion[y][x] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
workRegion[y][x] = 1 + ((baseValue + y + x) % 7);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 填满演示棋盘中的一行,并在指定范围留下空位。
|
||||
@@ -3097,6 +3172,55 @@ static void ApplyRogueSkillDemoStep()
|
||||
|
||||
switch (demoStep.kind)
|
||||
{
|
||||
case DEMO_SCORE_MULTIPLIER:
|
||||
rogueStats.scoreUpgradeLevel = 2;
|
||||
rogueStats.scoreMultiplierPercent = 160;
|
||||
FillRogueDemoRows(16, 18, 1);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 1);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_EXP_MULTIPLIER:
|
||||
rogueStats.expUpgradeLevel = 2;
|
||||
rogueStats.expMultiplierPercent = 150;
|
||||
FillRogueDemoRows(16, 18, 2);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 2);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_SLOW_FALL:
|
||||
rogueStats.slowFallStacks = 4;
|
||||
currentFallInterval = GetRogueFallInterval();
|
||||
FillRogueDemoRows(16, 19, 3);
|
||||
SetRogueDemoCurrentPiece(1, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_COMBO_BONUS:
|
||||
rogueStats.comboBonusStacks = 2;
|
||||
rogueStats.comboChain = 1;
|
||||
FillRogueDemoRows(16, 18, 4);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 4);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_PREVIEW_PLUS_ONE:
|
||||
rogueStats.previewCount = 2;
|
||||
rogueStats.previewUpgradeLevel = 1;
|
||||
FillRogueDemoRows(16, 19, 5);
|
||||
SetRogueDemoCurrentPiece(4, 0, 4, 0);
|
||||
nextTypes[0] = 0;
|
||||
nextTypes[1] = 1;
|
||||
nextTypes[2] = 2;
|
||||
break;
|
||||
|
||||
case DEMO_LAST_CHANCE:
|
||||
rogueStats.lastChanceUpgradeLevel = 1;
|
||||
rogueStats.lastChanceCount = 1;
|
||||
FillRogueDemoRows(0, 5, 5);
|
||||
FillRogueDemoRows(14, 19, 3);
|
||||
SetRogueDemoCurrentPiece(4, 0, 3, -1);
|
||||
break;
|
||||
|
||||
case DEMO_HOLD:
|
||||
rogueStats.holdUnlocked = 1;
|
||||
rogueStats.controlMasterLevel = 1;
|
||||
@@ -3106,36 +3230,20 @@ static void ApplyRogueSkillDemoStep()
|
||||
SetRogueDemoCurrentPiece(2, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_BLACK_HOLE:
|
||||
rogueStats.blackHoleLevel = 1;
|
||||
rogueStats.blackHoleCharges = 1;
|
||||
FillRogueDemoRows(9, 19, 2);
|
||||
for (int y = 8; y < nGameHeight; y++)
|
||||
{
|
||||
for (int x = 1; x < nGameWidth; x += 3)
|
||||
{
|
||||
workRegion[y][x] = 2;
|
||||
}
|
||||
}
|
||||
case DEMO_PRESSURE_RELIEF:
|
||||
rogueStats.pressureReliefLevel = 1;
|
||||
FillRogueDemoRows(5, 19, 6);
|
||||
DeleteOneLine(5);
|
||||
ApplyBoardGravity();
|
||||
SetRogueDemoCurrentPiece(1, 0, 3, 0);
|
||||
SetFeedbackMessage(_T("卸压清场"), _T("最高占用行已被清除,顶部压力立即下降。"), 12);
|
||||
break;
|
||||
|
||||
case DEMO_SCREEN_BOMB:
|
||||
rogueStats.screenBombLevel = 1;
|
||||
rogueStats.screenBombCount = 1;
|
||||
FillRogueDemoRows(11, 19, 0);
|
||||
SetRogueDemoCurrentPiece(4, 0, 4, 0);
|
||||
break;
|
||||
|
||||
case DEMO_AIR_RESHAPE:
|
||||
rogueStats.reshapeLevel = 1;
|
||||
rogueStats.reshapeCharges = 1;
|
||||
FillRogueDemoRows(16, 19, 3);
|
||||
for (int y = 10; y < nGameHeight; y++)
|
||||
{
|
||||
FillRogueDemoCell(y, 9, 0);
|
||||
}
|
||||
SetRogueDemoCurrentPiece(1, 0, 6, 0);
|
||||
case DEMO_SWEEPER:
|
||||
rogueStats.sweeperLevel = 4;
|
||||
FillRogueDemoRows(15, 18, 1);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 3);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_EXPLOSIVE:
|
||||
@@ -3147,6 +3255,47 @@ static void ApplyRogueSkillDemoStep()
|
||||
SetRogueDemoCurrentPiece(1, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_STABLE_STRUCTURE:
|
||||
rogueStats.stableStructureLevel = 4;
|
||||
FillRogueDemoRows(14, 19, 1);
|
||||
workRegion[15][4] = 0;
|
||||
workRegion[16][6] = 0;
|
||||
workRegion[17][5] = 0;
|
||||
SetRogueDemoCurrentPiece(1, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_DOUBLE_GROWTH:
|
||||
rogueStats.doubleGrowthLevel = 1;
|
||||
rogueStats.scoreMultiplierPercent = 115;
|
||||
rogueStats.expMultiplierPercent = 115;
|
||||
FillRogueDemoRows(16, 18, 2);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 2);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_PIECE_TUNING:
|
||||
rogueStats.pieceTuningLevels[0] = 4;
|
||||
FillRogueDemoRows(16, 19, 3);
|
||||
SetRogueDemoCurrentPiece(0, 1, 3, 0);
|
||||
nextTypes[0] = 0;
|
||||
nextTypes[1] = 0;
|
||||
nextTypes[2] = 0;
|
||||
break;
|
||||
|
||||
case DEMO_GAMBLER:
|
||||
rogueStats.gamblerLevel = 4;
|
||||
FillRogueDemoRows(16, 18, 4);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 4);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_CHAIN_BLAST:
|
||||
rogueStats.chainBlastLevel = 1;
|
||||
FillRogueDemoRows(15, 18, 5);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 5);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_CHAIN_BOMB:
|
||||
rogueStats.chainBombLevel = 1;
|
||||
FillRogueDemoRows(10, 19, 4);
|
||||
@@ -3173,6 +3322,194 @@ static void ApplyRogueSkillDemoStep()
|
||||
SetRogueDemoCurrentPiece(0, 1, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_THUNDER_TETRIS:
|
||||
rogueStats.thunderTetrisLevel = 1;
|
||||
FillRogueDemoRows(10, 15, 1);
|
||||
FillRogueDemoRows(16, 18, 2);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 2);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_THUNDER_LASER:
|
||||
rogueStats.thunderLaserLevel = 1;
|
||||
FillRogueDemoRows(10, 15, 3);
|
||||
FillRogueDemoRows(16, 18, 4);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 4);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_FEVER_MODE:
|
||||
rogueStats.feverLevel = 1;
|
||||
rogueStats.feverLineCharge = kFeverLineThreshold - 1;
|
||||
FillRogueDemoRows(16, 18, 5);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 5);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_RAGE_STACK:
|
||||
rogueStats.rageStackLevel = 1;
|
||||
rogueStats.comboChain = 3;
|
||||
FillRogueDemoRows(16, 18, 6);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 6);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_INFINITE_FEVER:
|
||||
rogueStats.feverLevel = 1;
|
||||
rogueStats.infiniteFeverLevel = 1;
|
||||
rogueStats.feverTicks = 8;
|
||||
currentFallInterval = GetRogueFallInterval();
|
||||
FillRogueDemoRows(16, 18, 1);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 1);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_SCREEN_BOMB:
|
||||
rogueStats.screenBombLevel = 1;
|
||||
rogueStats.screenBombCount = 1;
|
||||
FillRogueDemoRows(11, 19, 0);
|
||||
SetRogueDemoCurrentPiece(4, 0, 4, 0);
|
||||
break;
|
||||
|
||||
case DEMO_TERMINAL_CLEAR:
|
||||
rogueStats.lastChanceUpgradeLevel = 1;
|
||||
rogueStats.lastChanceCount = 1;
|
||||
rogueStats.terminalClearLevel = 1;
|
||||
rogueStats.screenBombLevel = 1;
|
||||
rogueStats.screenBombCount = 1;
|
||||
FillRogueDemoRows(0, 5, 2);
|
||||
FillRogueDemoRows(12, 19, 3);
|
||||
SetRogueDemoCurrentPiece(4, 0, 3, -1);
|
||||
break;
|
||||
|
||||
case DEMO_DUAL_CHOICE:
|
||||
rogueStats.dualChoiceLevel = 1;
|
||||
FillRogueDemoRows(16, 18, 4);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 4);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_DESTINY_WHEEL:
|
||||
rogueStats.destinyWheelLevel = 1;
|
||||
FillRogueDemoRows(16, 18, 5);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 5);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_PERFECT_ROTATE:
|
||||
rogueStats.perfectRotateLevel = 1;
|
||||
FillRogueDemoRows(16, 19, 6);
|
||||
for (int y = 10; y < nGameHeight; y++)
|
||||
{
|
||||
FillRogueDemoCell(y, 0, 0);
|
||||
}
|
||||
SetRogueDemoCurrentPiece(2, 1, 0, 0);
|
||||
break;
|
||||
|
||||
case DEMO_TIME_DILATION:
|
||||
rogueStats.timeDilationLevel = 1;
|
||||
rogueStats.timeDilationTicks = 8;
|
||||
FillRogueDemoRows(3, 19, 4);
|
||||
currentFallInterval = GetRogueFallInterval();
|
||||
SetRogueDemoCurrentPiece(0, 1, 3, 0);
|
||||
SetFeedbackMessage(_T("时间缓流"), _T("堆叠高度危险,短时间内下落速度降低。"), 12);
|
||||
break;
|
||||
|
||||
case DEMO_HIGH_PRESSURE:
|
||||
rogueStats.highPressureLevel = 1;
|
||||
rogueStats.scoreMultiplierPercent = 150;
|
||||
rogueStats.expMultiplierPercent = 150;
|
||||
currentFallInterval = GetRogueFallInterval();
|
||||
FillRogueDemoRows(16, 18, 1);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 1);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_TETRIS_GAMBLE:
|
||||
rogueStats.tetrisGambleLevel = 1;
|
||||
FillRogueDemoRows(16, 18, 2);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 2);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_EXTREME_PLAYER:
|
||||
rogueStats.extremePlayerLevel = 1;
|
||||
rogueStats.highPressureLevel = 1;
|
||||
rogueStats.tetrisGambleLevel = 1;
|
||||
currentFallInterval = GetRogueFallInterval();
|
||||
FillRogueDemoRows(16, 18, 3);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 3);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_UPGRADE_SHOCKWAVE:
|
||||
rogueStats.upgradeShockwaveLevel = 1;
|
||||
rogueStats.exp = 0;
|
||||
rogueStats.requiredExp = 12;
|
||||
FillRogueDemoRows(12, 18, 2);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 6);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_EVOLUTION_IMPACT:
|
||||
rogueStats.evolutionImpactLevel = 1;
|
||||
rogueStats.exp = 0;
|
||||
rogueStats.requiredExp = 12;
|
||||
FillRogueDemoRows(11, 18, 3);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 3);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_CONTROL_MASTER:
|
||||
rogueStats.holdUnlocked = 1;
|
||||
rogueStats.controlMasterLevel = 1;
|
||||
rogueStats.previewCount = 3;
|
||||
holdType = 0;
|
||||
FillRogueDemoRows(16, 18, 4);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 4);
|
||||
SetRogueDemoCurrentPiece(2, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_BLOCK_STORM:
|
||||
rogueStats.blockStormLevel = 1;
|
||||
rogueStats.blockStormPiecesRemaining = 5;
|
||||
FillRogueDemoRows(15, 19, 0);
|
||||
for (int y = 8; y < nGameHeight; y++)
|
||||
{
|
||||
FillRogueDemoCell(y, 5, 0);
|
||||
}
|
||||
SetRogueDemoCurrentPiece(0, 1, 3, 0);
|
||||
nextTypes[0] = 0;
|
||||
nextTypes[1] = 0;
|
||||
nextTypes[2] = 0;
|
||||
SetFeedbackMessage(_T("方块风暴"), _T("当前和后续预览全部变为 I 块,方便制造四消。"), 12);
|
||||
break;
|
||||
|
||||
case DEMO_BLACK_HOLE:
|
||||
rogueStats.blackHoleLevel = 1;
|
||||
rogueStats.blackHoleCharges = 1;
|
||||
FillRogueDemoRows(9, 19, 2);
|
||||
for (int y = 8; y < nGameHeight; y++)
|
||||
{
|
||||
for (int x = 1; x < nGameWidth; x += 3)
|
||||
{
|
||||
workRegion[y][x] = 2;
|
||||
}
|
||||
}
|
||||
SetRogueDemoCurrentPiece(1, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_AIR_RESHAPE:
|
||||
rogueStats.reshapeLevel = 1;
|
||||
rogueStats.reshapeCharges = 1;
|
||||
FillRogueDemoRows(16, 19, 3);
|
||||
for (int y = 10; y < nGameHeight; y++)
|
||||
{
|
||||
FillRogueDemoCell(y, 9, 0);
|
||||
}
|
||||
SetRogueDemoCurrentPiece(1, 0, 6, 0);
|
||||
break;
|
||||
|
||||
case DEMO_CROSS:
|
||||
FillRogueDemoRows(13, 17, 5);
|
||||
for (int y = 6; y < nGameHeight; y++)
|
||||
@@ -3208,63 +3545,6 @@ static void ApplyRogueSkillDemoStep()
|
||||
SetRogueDemoCurrentPiece(1, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_SWEEPER:
|
||||
rogueStats.sweeperLevel = 4;
|
||||
FillRogueDemoRows(15, 18, 1);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 3);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_LAST_CHANCE:
|
||||
rogueStats.lastChanceUpgradeLevel = 1;
|
||||
rogueStats.lastChanceCount = 1;
|
||||
FillRogueDemoRows(0, 5, 5);
|
||||
FillRogueDemoRows(14, 19, 3);
|
||||
SetRogueDemoCurrentPiece(4, 0, 3, -1);
|
||||
break;
|
||||
|
||||
case DEMO_TIME_DILATION:
|
||||
rogueStats.timeDilationLevel = 1;
|
||||
rogueStats.timeDilationTicks = 8;
|
||||
FillRogueDemoRows(3, 19, 4);
|
||||
currentFallInterval = GetRogueFallInterval();
|
||||
SetRogueDemoCurrentPiece(0, 1, 3, 0);
|
||||
SetFeedbackMessage(_T("时间缓流"), _T("堆叠高度危险,短时间内下落速度降低。"), 12);
|
||||
break;
|
||||
|
||||
case DEMO_UPGRADE_SHOCKWAVE:
|
||||
rogueStats.upgradeShockwaveLevel = 1;
|
||||
rogueStats.exp = 0;
|
||||
rogueStats.requiredExp = 12;
|
||||
FillRogueDemoRows(12, 18, 2);
|
||||
FillRogueDemoRowExcept(19, 3, 4, 6);
|
||||
SetRogueDemoCurrentPiece(0, 0, 3, 0);
|
||||
break;
|
||||
|
||||
case DEMO_BLOCK_STORM:
|
||||
rogueStats.blockStormLevel = 1;
|
||||
rogueStats.blockStormPiecesRemaining = 5;
|
||||
FillRogueDemoRows(15, 19, 0);
|
||||
for (int y = 8; y < nGameHeight; y++)
|
||||
{
|
||||
FillRogueDemoCell(y, 5, 0);
|
||||
}
|
||||
SetRogueDemoCurrentPiece(0, 1, 3, 0);
|
||||
nextTypes[0] = 0;
|
||||
nextTypes[1] = 0;
|
||||
nextTypes[2] = 0;
|
||||
SetFeedbackMessage(_T("方块风暴"), _T("当前和后续预览全部变为 I 块,方便制造四消。"), 12);
|
||||
break;
|
||||
|
||||
case DEMO_STABLE_STRUCTURE:
|
||||
rogueStats.stableStructureLevel = 4;
|
||||
FillRogueDemoRows(14, 19, 1);
|
||||
workRegion[15][4] = 0;
|
||||
workRegion[16][6] = 0;
|
||||
workRegion[17][5] = 0;
|
||||
SetRogueDemoCurrentPiece(1, 0, 3, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user