content: regenerate Season 1 with a gentle onboarding difficulty curve
Generator: raise the early bot-win-rate floor to ~0.97 (near-guaranteed first stages), widen the early move-buffer margin, and delay score-chase/line-sprint objectives until stage 9/13 so the opening stretch is pure clear-a-gem. Result: stage 1 now 16 moves (was 11), stages 1-9 all simple gems at 90-99% bot win. Preserves theme.bgm=season_001; manifest SHA regenerated. Settings tag -> build 4.
This commit is contained in:
+404
-397
File diff suppressed because it is too large
Load Diff
@@ -7,7 +7,7 @@
|
||||
"seasonId": "season_001",
|
||||
"version": 1,
|
||||
"packUrl": "seasons/season_001/pack.json",
|
||||
"sha256": "6018fc20187e5835e1a5bc5a3626479dcd448e3a9f35c708b89722587a881468"
|
||||
"sha256": "8d09f85bf2d2af8c80d7de20b17b4f65a7df5587e8728a7182fed82b9e507f4a"
|
||||
},
|
||||
{
|
||||
"seasonId": "season_002",
|
||||
|
||||
+404
-397
File diff suppressed because it is too large
Load Diff
@@ -1,66 +1,66 @@
|
||||
# season_001 difficulty report
|
||||
|
||||
60 stages, 80 bot runs each, generated in 10s.
|
||||
60 stages, 80 bot runs each, generated in 9s.
|
||||
|
||||
| stage | objective | moves | bot win rate | 2★/3★ movesLeft |
|
||||
|---|---|---|---|---|
|
||||
| season_001_001 | clearGems 2 | 11 | 89% | 4/5 |
|
||||
| season_001_002 | clearGems 1 | 7 | 79% | 3/4 |
|
||||
| season_001_003 | clearGems 1 | 6 | 90% | 2/3 |
|
||||
| season_001_004 | clearGems 2 | 13 | 84% | 5/6 |
|
||||
| season_001_005 | reachScore 888 | 28 | 99% | 9/12 |
|
||||
| season_001_006 | clearGems 3 | 11 | 79% | 4/5 |
|
||||
| season_001_007 | clearLines 4 | 19 | 100% | 6/8 |
|
||||
| season_001_008 | clearGems 2 | 6 | 75% | 2/3 |
|
||||
| season_001_009 | clearGems 2 | 8 | 75% | 3/4 |
|
||||
| season_001_010 | reachScore 1017 | 27 | 99% | 8/10 |
|
||||
| season_001_011 | clearGems 2 | 7 | 79% | 2/3 |
|
||||
| season_001_012 | clearGems 3 | 22 | 79% | 9/12 |
|
||||
| season_001_013 | clearGems 2 | 12 | 79% | 2/5 |
|
||||
| season_001_014 | clearLines 5 | 24 | 100% | 7/9 |
|
||||
| season_001_015 | reachScore 1243 | 30 | 100% | 8/11 |
|
||||
| season_001_016 | clearGems 4 | 23 | 73% | 7/10 |
|
||||
| season_001_017 | clearGems 3 | 18 | 73% | 10/11 |
|
||||
| season_001_018 | clearGems 4 | 14 | 83% | 4/7 |
|
||||
| season_001_019 | clearGems 3 | 16 | 78% | 5/6 |
|
||||
| season_001_020 | reachScore 1478 | 32 | 99% | 7/11 |
|
||||
| season_001_021 | clearLines 5 | 22 | 100% | 6/7 |
|
||||
| season_001_022 | clearGems 4 | 26 | 86% | 10/13 |
|
||||
| season_001_023 | clearGems 3 | 10 | 70% | 3/4 |
|
||||
| season_001_024 | clearGems 3 | 18 | 80% | 5/8 |
|
||||
| season_001_025 | reachScore 1707 | 28 | 85% | 3/6 |
|
||||
| season_001_026 | clearGems 5 | 19 | 76% | 3/7 |
|
||||
| season_001_027 | clearGems 5 | 17 | 86% | 4/8 |
|
||||
| season_001_028 | clearLines 6 | 20 | 95% | 3/4 |
|
||||
| season_001_029 | clearGems 4 | 23 | 88% | 7/10 |
|
||||
| season_001_030 | reachScore 1838 | 28 | 86% | 3/6 |
|
||||
| season_001_031 | clearGems 5 | 28 | 81% | 8/12 |
|
||||
| season_001_032 | clearGems 5 | 23 | 74% | 5/9 |
|
||||
| season_001_001 | clearGems 2 | 16 | 99% | 9/10 |
|
||||
| season_001_002 | clearGems 1 | 11 | 96% | 7/8 |
|
||||
| season_001_003 | clearGems 1 | 7 | 98% | 3/4 |
|
||||
| season_001_004 | clearGems 2 | 20 | 96% | 10/13 |
|
||||
| season_001_005 | clearGems 1 | 13 | 96% | 8/9 |
|
||||
| season_001_006 | clearGems 3 | 16 | 94% | 9/10 |
|
||||
| season_001_007 | clearGems 3 | 20 | 98% | 10/13 |
|
||||
| season_001_008 | clearGems 2 | 10 | 95% | 6/7 |
|
||||
| season_001_009 | clearGems 2 | 11 | 91% | 4/7 |
|
||||
| season_001_010 | reachScore 1017 | 37 | 99% | 18/20 |
|
||||
| season_001_011 | clearGems 2 | 11 | 90% | 6/7 |
|
||||
| season_001_012 | clearGems 3 | 29 | 90% | 14/19 |
|
||||
| season_001_013 | clearGems 2 | 15 | 93% | 5/8 |
|
||||
| season_001_014 | clearLines 5 | 32 | 100% | 15/17 |
|
||||
| season_001_015 | reachScore 1243 | 39 | 100% | 17/20 |
|
||||
| season_001_016 | clearGems 4 | 30 | 91% | 11/16 |
|
||||
| season_001_017 | clearGems 3 | 24 | 89% | 14/17 |
|
||||
| season_001_018 | clearGems 4 | 19 | 94% | 9/12 |
|
||||
| season_001_019 | clearGems 3 | 20 | 90% | 7/10 |
|
||||
| season_001_020 | reachScore 1478 | 42 | 99% | 17/21 |
|
||||
| season_001_021 | clearLines 5 | 29 | 100% | 13/14 |
|
||||
| season_001_022 | clearGems 4 | 34 | 93% | 18/21 |
|
||||
| season_001_023 | clearGems 3 | 13 | 84% | 6/7 |
|
||||
| season_001_024 | clearGems 3 | 23 | 90% | 10/12 |
|
||||
| season_001_025 | reachScore 1707 | 46 | 100% | 21/24 |
|
||||
| season_001_026 | clearGems 5 | 25 | 95% | 9/12 |
|
||||
| season_001_027 | clearGems 5 | 21 | 93% | 8/12 |
|
||||
| season_001_028 | clearLines 6 | 29 | 100% | 12/13 |
|
||||
| season_001_029 | clearGems 4 | 29 | 98% | 12/16 |
|
||||
| season_001_030 | reachScore 1838 | 41 | 100% | 15/19 |
|
||||
| season_001_031 | clearGems 5 | 36 | 90% | 14/20 |
|
||||
| season_001_032 | clearGems 5 | 29 | 89% | 10/15 |
|
||||
| season_001_033 | clearGems 4 | 24 | 73% | 11/14 |
|
||||
| season_001_034 | clearGems 4 | 21 | 74% | 5/8 |
|
||||
| season_001_034 | clearGems 4 | 27 | 94% | 8/14 |
|
||||
| season_001_035 | clearLines 8 | 24 | 88% | 2/4 |
|
||||
| season_001_036 | clearGems 6 | 25 | 65% | 5/8 |
|
||||
| season_001_037 | clearGems 6 | 17 | 86% | 6/9 |
|
||||
| season_001_038 | clearGems 6 | 29 | 78% | 10/15 |
|
||||
| season_001_039 | clearGems 6 | 29 | 73% | 6/12 |
|
||||
| season_001_040 | reachScore 2328 | 32 | 80% | 2/6 |
|
||||
| season_001_041 | clearGems 5 | 17 | 73% | 5/8 |
|
||||
| season_001_042 | clearLines 9 | 25 | 78% | 1/4 |
|
||||
| season_001_043 | clearGems 6 | 22 | 79% | 5/9 |
|
||||
| season_001_044 | clearGems 6 | 26 | 75% | 6/10 |
|
||||
| season_001_036 | clearGems 6 | 31 | 85% | 9/13 |
|
||||
| season_001_037 | clearGems 6 | 21 | 95% | 8/12 |
|
||||
| season_001_038 | clearGems 6 | 36 | 85% | 16/22 |
|
||||
| season_001_039 | clearGems 6 | 35 | 83% | 10/17 |
|
||||
| season_001_040 | reachScore 2328 | 33 | 81% | 3/7 |
|
||||
| season_001_041 | clearGems 5 | 21 | 81% | 8/12 |
|
||||
| season_001_042 | clearLines 9 | 27 | 95% | 2/5 |
|
||||
| season_001_043 | clearGems 6 | 27 | 88% | 9/14 |
|
||||
| season_001_044 | clearGems 6 | 31 | 91% | 9/15 |
|
||||
| season_001_045 | reachScore 2451 | 34 | 88% | 4/6 |
|
||||
| season_001_046 | clearGems 6 | 22 | 74% | 6/9 |
|
||||
| season_001_047 | clearGems 7 | 21 | 79% | 5/8 |
|
||||
| season_001_048 | clearGems 7 | 26 | 71% | 6/11 |
|
||||
| season_001_049 | clearLines 9 | 24 | 68% | 1/2 |
|
||||
| season_001_050 | reachScore 2726 | 37 | 93% | 4/8 |
|
||||
| season_001_051 | clearGems 6 | 24 | 78% | 5/10 |
|
||||
| season_001_052 | clearGems 6 | 21 | 65% | 5/8 |
|
||||
| season_001_053 | clearGems 6 | 28 | 83% | 9/14 |
|
||||
| season_001_054 | clearGems 7 | 21 | 78% | 6/8 |
|
||||
| season_001_055 | reachScore 2978 | 39 | 91% | 5/8 |
|
||||
| season_001_056 | clearLines 11 | 30 | 83% | 2/4 |
|
||||
| season_001_057 | clearGems 7 | 16 | 74% | 5/7 |
|
||||
| season_001_058 | clearGems 8 | 20 | 85% | 7/10 |
|
||||
| season_001_059 | clearGems 8 | 23 | 59% | 6/10 |
|
||||
| season_001_060 | reachScore 3145 | 37 | 60% | 1/5 |
|
||||
| season_001_046 | clearGems 6 | 26 | 83% | 9/13 |
|
||||
| season_001_047 | clearGems 7 | 24 | 88% | 8/11 |
|
||||
| season_001_048 | clearGems 7 | 30 | 75% | 10/15 |
|
||||
| season_001_049 | clearLines 9 | 25 | 86% | 2/3 |
|
||||
| season_001_050 | reachScore 2726 | 33 | 60% | 2/6 |
|
||||
| season_001_051 | clearGems 6 | 28 | 90% | 9/13 |
|
||||
| season_001_052 | clearGems 6 | 25 | 83% | 8/12 |
|
||||
| season_001_053 | clearGems 6 | 32 | 88% | 13/18 |
|
||||
| season_001_054 | clearGems 7 | 22 | 84% | 6/9 |
|
||||
| season_001_055 | reachScore 2978 | 38 | 89% | 4/7 |
|
||||
| season_001_056 | clearLines 11 | 28 | 69% | 1/2 |
|
||||
| season_001_057 | clearGems 7 | 18 | 76% | 7/8 |
|
||||
| season_001_058 | clearGems 8 | 22 | 88% | 9/12 |
|
||||
| season_001_059 | clearGems 8 | 26 | 71% | 7/13 |
|
||||
| season_001_060 | reachScore 3145 | 38 | 71% | 2/5 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"seasonId": "season_001",
|
||||
"version": 1,
|
||||
"title": { "en": "First Bloom", "ko": "첫 개화" },
|
||||
"theme": { "tileSet": "spring", "background": "background.webp" },
|
||||
"theme": { "tileSet": "spring", "background": "background.webp", "bgm": "season_001" },
|
||||
"stageCount": 60,
|
||||
"baseSeed": 20260611,
|
||||
"runsPerStage": 80,
|
||||
|
||||
@@ -79,7 +79,7 @@ class SettingsScreen extends ConsumerWidget {
|
||||
const SizedBox(height: 24),
|
||||
Center(
|
||||
child: Text(
|
||||
'Block Seasons · v1.0.0 (build 3)',
|
||||
'Block Seasons · v1.0.0 (build 4)',
|
||||
style: TextStyle(
|
||||
color: Colors.white.withValues(alpha: 0.4),
|
||||
fontSize: 12,
|
||||
|
||||
@@ -106,8 +106,10 @@ ${reportRows.join('\n')}
|
||||
/// weaker than the bot, so the floor stays high — and early stages are
|
||||
/// allowed to be a guaranteed win (onboarding).
|
||||
(double, double) _band(double t) => (
|
||||
0.78 - 0.30 * t,
|
||||
t < 0.4 ? 1.0 : 1.0 - 0.10 * (t - 0.4) / 0.6,
|
||||
// Near-guaranteed onboarding (the bot easily clears the first stages, so
|
||||
// a human does too), ramping to a genuine challenge by the season's end.
|
||||
0.97 - 0.50 * t,
|
||||
t < 0.5 ? 1.0 : 1.0 - 0.12 * (t - 0.5) / 0.5,
|
||||
);
|
||||
|
||||
(StageConfig, double, List<int>)? _buildCandidate(
|
||||
@@ -145,7 +147,9 @@ ${reportRows.join('\n')}
|
||||
|
||||
movesToWin.sort();
|
||||
final median = movesToWin[movesToWin.length ~/ 2];
|
||||
final margin = 0.45 - 0.25 * t;
|
||||
// Generous early move buffer over what the bot needs (humans place less
|
||||
// optimally and the piece RNG won't always cooperate), tightening later.
|
||||
final margin = 1.0 - 0.65 * t;
|
||||
var moveLimit = (median * (1 + margin)).ceil().clamp(6, 60);
|
||||
|
||||
// Validate at the real budget; nudge the budget up/down until the win
|
||||
@@ -248,11 +252,12 @@ Objective _sampleObjective(
|
||||
int index, double t, List<PresetCell> preset, SeededRng rng) {
|
||||
final gemCount =
|
||||
preset.where((c) => c.type == CellType.gem).length;
|
||||
// Variety beats: every 5th stage is a score chase, every 7th a line sprint.
|
||||
if (index % 7 == 6) {
|
||||
// Keep the opening stretch pure "clear a gem" onboarding; introduce the
|
||||
// score-chase and line-sprint variety only once the player has settled in.
|
||||
if (index >= 12 && index % 7 == 6) {
|
||||
return Objective.clearLines(3 + (t * 7).round() + rng.nextInt(2));
|
||||
}
|
||||
if (index % 5 == 4) {
|
||||
if (index >= 8 && index % 5 == 4) {
|
||||
return Objective.reachScore(600 + (t * 2400).round() + rng.nextInt(200));
|
||||
}
|
||||
return Objective.clearGems(gemCount);
|
||||
|
||||
Reference in New Issue
Block a user