feat(levels): c50c trades one good idea repeated for five that alternate
c50b is sealed where it stands, as a reference sample rather than a candidate. Its packed construction was judged good — clearing a board from the rim inward is the experience it proved out — but at 32 of 50 levels it played as one level fifty times: 体验太单一了,因为基本都是满盘. The note on why it is kept lives at the top of its module, because the lesson is the useful part. It was monotonous on a second axis nobody asked about. 环绕 and 花瓣, the two route families the brief singles out as the good-looking ones, were absent from it entirely — not by choice but by a crossing threshold. At 1.0 crossings per cell, 0% of orbits boards pass and 4% of spirals; at 1.2, 84% and 94% do. The gate meant to answer "交叉点太多" had quietly deleted the families most worth looking at, so it moves to 1.2 — still half the 2.36 that drew the complaint. c50c alternates five kinds of level every three to five: packed boards down to 32%, long-route departures to watch, deep locks to solve, small quick boards, and segments given over to orbits, petals and spirals by name. All six families appear, no family exceeds 24%, and the plan is 13 segments rather than 9. Selection learned to ask for variety outright — by family, piece count and longest drawn route — instead of hoping it falls out of a difficulty score. Rule bot across all three: 50/50 cleared and zero dead taps everywhere; c50c sits between the other two on blind rotations and on how much there is to do. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -5,6 +5,7 @@ import { PRODUCTION_CAMPAIGN, PRODUCTION_LEVELS } from './levels-v05.js';
|
||||
import { TUTORIAL_LEVELS } from './tutorial-levels.js';
|
||||
import { C50_CAMPAIGN, C50_LEVELS } from './levels-c50.js';
|
||||
import { C50B_CAMPAIGN, C50B_LEVELS } from './levels-c50b.js';
|
||||
import { C50C_CAMPAIGN, C50C_LEVELS } from './levels-c50c.js';
|
||||
|
||||
// Public layout versions are distinct from the level JSON schema's `version: 1`.
|
||||
// Historical layouts stay intact; all editions share the current game rules.
|
||||
@@ -44,6 +45,11 @@ export const CAMPAIGN_VERSIONS = [
|
||||
chapters:C50B_CAMPAIGN.chapters, chapterSize:C50B_CAMPAIGN.chapterSize, levels:C50B_LEVELS,
|
||||
legacyStorageKeys:[],
|
||||
},
|
||||
{
|
||||
id:C50C_CAMPAIGN.id, name:C50C_CAMPAIGN.name, description:C50C_CAMPAIGN.description,
|
||||
chapters:C50C_CAMPAIGN.chapters, chapterSize:C50C_CAMPAIGN.chapterSize, levels:C50C_LEVELS,
|
||||
legacyStorageKeys:[],
|
||||
},
|
||||
];
|
||||
export const DEFAULT_CAMPAIGN_VERSION = 'v0.5';
|
||||
export function campaignVersion(id) {
|
||||
|
||||
+13
-2
@@ -1,8 +1,19 @@
|
||||
// Generated by scripts/select-50.mjs --id=c50b — do not edit by hand.
|
||||
//
|
||||
// SEALED 2026-09-15, kept as a reference sample rather than as a candidate for
|
||||
// shipping. 32 of its 50 levels are packed boards, which on playtest read as one
|
||||
// level fifty times over: "体验太单一了,因为基本都是满盘". Two families the
|
||||
// design brief calls out as the good-looking ones — 环绕 and 花瓣 — are absent
|
||||
// from it entirely, filtered upstream by a crossing threshold of 1.0 that orbits
|
||||
// sits just above (0% of orbits boards pass at 1.0, 84% pass at 1.2).
|
||||
//
|
||||
// It is worth keeping because the packed construction itself was judged good:
|
||||
// the experience of clearing from the rim inward is what this set proved out.
|
||||
// What it also proves is that one good idea at 64% is not a campaign.
|
||||
export const C50B_CAMPAIGN = {
|
||||
"id": "c50b",
|
||||
"name": "五十关 · 满盘版",
|
||||
"description": "外圈留空、内部填满的满盘为主,由外向内逐层清空;深锁关卡穿插其间做变奏。",
|
||||
"name": "五十关 · 满盘版(封存)",
|
||||
"description": "封存样本:满盘占 64%,实测体验过于单一。保留用于复盘满盘构造本身。",
|
||||
"chapters": [
|
||||
"起步",
|
||||
"转起来",
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user