nav: 统一 NavNode schema + runtime/roadmap 分离 + 城市补父级

- navigation/nav-schema.js: 统一 NavNode schema 定义
- navigation/runtime-nav.js: MVP runtime(仅 6 城市 active)
- navigation/future-catalog.js: 路线图数据(不进 runtime)
- 旧索引文件标注 @deprecated,重定向到新路径
- 6 城市补 countryId/regionId
- game-design 明确 MVP vs V1.1+ 导航边界

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
manpengan
2026-03-28 23:31:52 +08:00
parent 18cd4d8409
commit 212b12ab6b
15 changed files with 470 additions and 439 deletions

View File

@@ -1,9 +1,13 @@
module.exports = {
import { createLevelPresets } from '../shared/level-presets.js'
export const bangkok = {
id: 'bangkok',
contentVersion: 1,
continentId: 'asia',
countryId: 'thailand',
regionId: null,
sortOrder: 3,
unlockAfterCityId: 'tokyo',
unlockAfterCityId: 'seoul',
bundle: {
packId: 'asia-rest',
preload: 'on-city-page',
@@ -11,54 +15,45 @@ module.exports = {
display: {
name: '曼谷',
nameEn: 'Bangkok',
bgColor: '#FFB347',
tagline: '湄南河畔追猫猫',
funFact: '曼谷的全名有168个字母是世界最长城市',
bgColor: '#F9A826',
tagline: '热带夜市看猫猫',
funFact: '曼谷是东南亚热门旅行城市',
},
cover: {
catImage: 'images/cats/cat_bangkok.png',
catThumb: 'images/cats/cat_bangkok_thumb.png',
shareAccent: '#C9A96E',
shareAccent: '#FFD166',
},
cat: {
id: 'cat_bangkok',
name: '暹暹',
intro: '戴泰式花环的暹罗猫,最爱在水上市场闲逛',
baseColor: '#FAF0E6',
name: '泰泰',
baseColor: '#D9C2A7',
pattern: 'siamese',
patternColor: '#6B4226',
accessory: '泰式花环',
expression: 'curious',
accessory: '花环',
},
passport: {
stampId: 'stamp_bangkok',
stampLabel: '曼谷',
},
elements: [
{ id: 'bangkok_01', name: '冬阴功', category: 'food', rarity: 'core', image: 'images/elements/bangkok/bangkok_01.png', tags: ['soup', 'spicy', 'shrimp'] },
{ id: 'bangkok_02', name: '嘟嘟车', category: 'item', rarity: 'core', image: 'images/elements/bangkok/bangkok_02.png', tags: ['vehicle', 'colorful', 'street'] },
{ id: 'bangkok_03', name: '大象', category: 'nature', rarity: 'core', image: 'images/elements/bangkok/bangkok_03.png', tags: ['animal', 'grey', 'gentle'] },
{ id: 'bangkok_04', name: '泰拳手套', category: 'item', rarity: 'core', image: 'images/elements/bangkok/bangkok_04.png', tags: ['sport', 'red', 'fighting'] },
{ id: 'bangkok_05', name: '芒果糯米饭', category: 'food', rarity: 'core', image: 'images/elements/bangkok/bangkok_05.png', tags: ['sweet', 'mango', 'sticky'] },
{ id: 'bangkok_06', name: '金佛', category: 'landmark', rarity: 'core', image: 'images/elements/bangkok/bangkok_06.png', tags: ['buddha', 'golden', 'temple'] },
{ id: 'bangkok_07', name: '莲花', category: 'nature', rarity: 'core', image: 'images/elements/bangkok/bangkok_07.png', tags: ['flower', 'pink', 'water'] },
{ id: 'bangkok_08', name: '榴莲', category: 'food', rarity: 'core', image: 'images/elements/bangkok/bangkok_08.png', tags: ['fruit', 'spiky', 'yellow'] },
{ id: 'bangkok_09', name: '泰丝', category: 'culture', rarity: 'core', image: 'images/elements/bangkok/bangkok_09.png', tags: ['fabric', 'shimmer', 'craft'] },
{ id: 'bangkok_10', name: '船面', category: 'food', rarity: 'core', image: 'images/elements/bangkok/bangkok_10.png', tags: ['noodle', 'boat', 'dark'] },
{ id: 'bangkok_11', name: '佛塔', category: 'landmark', rarity: 'core', image: 'images/elements/bangkok/bangkok_11.png', tags: ['stupa', 'golden', 'tall'] },
{ id: 'bangkok_12', name: '椰子', category: 'nature', rarity: 'accent', image: 'images/elements/bangkok/bangkok_12.png', tags: ['fruit', 'tropical', 'green'] },
{ id: 'bangkok_13', name: '夜市灯笼', category: 'culture', rarity: 'accent', image: 'images/elements/bangkok/bangkok_13.png', tags: ['lantern', 'glow', 'night'] },
],
levelPresets: [
{ id: 1, difficultyTier: 'intro', seedBase: 13001, elementCount: 6, piecesPerElement: 3, layers: 2, density: 'low', targetPassRate: 0.95, targetDurationSec: [60, 120] },
{ id: 2, difficultyTier: 'easy', seedBase: 13002, elementCount: 7, piecesPerElement: 3, layers: 2, density: 'low', targetPassRate: 0.90, targetDurationSec: [60, 120] },
{ id: 3, difficultyTier: 'normal', seedBase: 13003, elementCount: 8, piecesPerElement: 3, layers: 3, density: 'medium', targetPassRate: 0.80, targetDurationSec: [90, 150] },
{ id: 4, difficultyTier: 'normal', seedBase: 13004, elementCount: 9, piecesPerElement: 3, layers: 3, density: 'medium', targetPassRate: 0.70, targetDurationSec: [90, 150] },
{ id: 5, difficultyTier: 'hard', seedBase: 13005, elementCount: 10, piecesPerElement: 3, layers: 4, density: 'medium_high', targetPassRate: 0.60, targetDurationSec: [120, 180] },
{ id: 6, difficultyTier: 'boss', seedBase: 13006, elementCount: 10, piecesPerElement: [3,3,3,3,3,6,3,3,3,3], layers: 4, density: 'high', targetPassRate: 0.55, targetDurationSec: [120, 240] },
{ id: 'bangkok_01', name: '玉佛寺', category: 'landmark', rarity: 'core', image: 'images/elements/bangkok/bangkok_01.png', tags: ['temple'] },
{ id: 'bangkok_02', name: '佛塔', category: 'landmark', rarity: 'core', image: 'images/elements/bangkok/bangkok_02.png', tags: ['tower'] },
{ id: 'bangkok_03', name: '冬阴功', category: 'food', rarity: 'core', image: 'images/elements/bangkok/bangkok_03.png', tags: ['soup'] },
{ id: 'bangkok_04', name: '芒果糯米饭', category: 'food', rarity: 'core', image: 'images/elements/bangkok/bangkok_04.png', tags: ['dessert'] },
{ id: 'bangkok_05', name: '船面', category: 'food', rarity: 'core', image: 'images/elements/bangkok/bangkok_05.png', tags: ['noodle'] },
{ id: 'bangkok_06', name: '泰丝', category: 'culture', rarity: 'core', image: 'images/elements/bangkok/bangkok_06.png', tags: ['fabric'] },
{ id: 'bangkok_07', name: '泰拳手套', category: 'culture', rarity: 'core', image: 'images/elements/bangkok/bangkok_07.png', tags: ['sport'] },
{ id: 'bangkok_08', name: '嘟嘟车', category: 'item', rarity: 'core', image: 'images/elements/bangkok/bangkok_08.png', tags: ['vehicle'] },
{ id: 'bangkok_09', name: '椰子杯', category: 'item', rarity: 'core', image: 'images/elements/bangkok/bangkok_09.png', tags: ['drink'] },
{ id: 'bangkok_10', name: '莲花', category: 'nature', rarity: 'core', image: 'images/elements/bangkok/bangkok_10.png', tags: ['flower'] },
{ id: 'bangkok_11', name: '大象', category: 'nature', rarity: 'core', image: 'images/elements/bangkok/bangkok_11.png', tags: ['animal'] },
{ id: 'bangkok_12', name: '榴莲', category: 'nature', rarity: 'core', image: 'images/elements/bangkok/bangkok_12.png', tags: ['fruit'] },
],
levelPresets: createLevelPresets(13000),
shareCard: {
titleUnlocked: '我解锁了曼谷猫!',
titlePassport: '曼谷护照盖章完成',
},
}
export default bangkok