diff --git a/index.html b/index.html index 4bf3d8e..c670562 100644 --- a/index.html +++ b/index.html @@ -7,7 +7,7 @@ 兜爸心选 · 孕育陪伴 - + diff --git a/js/app.js b/js/app.js index 0df4e37..9756142 100644 --- a/js/app.js +++ b/js/app.js @@ -3,7 +3,7 @@ (function () { 'use strict'; /* 页面版本号(YYMMDD+序号):显示在「关于兜爸心选」页底部;bump 时同步 head 注释与 ?v= */ - var VER = '26100410'; + var VER = '26100411'; const $ = (s, c) => (c || document).querySelector(s); const $$ = (s, c) => Array.from((c || document).querySelectorAll(s)); diff --git a/js/bump.js b/js/bump.js index e5b3819..22aefda 100644 --- a/js/bump.js +++ b/js/bump.js @@ -81,12 +81,13 @@ const STAGES = { // drum:原地带节奏连踢的概率;chain:踢完不歇、旁边紧接着再踢的概率,最多连 chainMax 下(2026-10-04 用户:「有时会带点节奏、可以连续踢」) flutter: { order: ['flick', 'flick', 'tap', 'flick'], gap: [10, 18], kick: false, again: 0, double: .45, follow: false, drum: 0, chain: 0 }, - active: { order: ORDER, gap: [4, 8], kick: true, again: .34, double: 0, follow: true, drum: .5, chain: .3, chainMax: 3 }, - late: { order: ['roll', 'butt', 'foot', 'roll', 'knee'], gap: [7, 12], kick: false, again: .15, double: 0, follow: true, slow: true, drum: .22, chain: .15, chainMax: 2 } + active: { order: ORDER, gap: [4, 8], kick: true, again: .34, double: 0, follow: true, drum: .6, chain: .3, chainMax: 3 }, + late: { order: ['roll', 'butt', 'foot', 'roll', 'knee'], gap: [7, 12], kick: false, again: .15, double: 0, follow: true, slow: true, drum: .35, chain: .15, chainMax: 2 } }; // 原地连踢的节奏型(每拍间隔,秒):匀速「哒哒哒」、「哒哒—哒」、「哒—哒哒」、两下一组 // 2026-10-04 加了「噔噔噔」快连踢(.22~.26 秒一下),出现机会最大 - const RHYTHMS = [[.24, .24, .24], [.22, .22, .22, .22], [.26, .26, .26], [.42, .42, .42], [.3, .3, .75, .3], [.6, .28, .28], [.38, .38, .38, .38]]; + // 「噔噔噔噔」4 下快连踢放了 3 份,最常出现 + const RHYTHMS = [[.24, .24, .24, .24], [.22, .22, .22, .22], [.26, .26, .26, .26], [.24, .24, .24], [.42, .42, .42], [.3, .3, .75, .3], [.38, .38, .38, .38]]; const dbgWeek = (location.href.match(/bumpweek=(\d+)/) || [])[1]; let week = dbgWeek ? +dbgWeek : (window.__mbPreg ? window.__mbPreg.week : null); const stageOf = w => w == null || w < 20 ? null : w < 26 ? STAGES.flutter : w < 34 ? STAGES.active : STAGES.late; @@ -225,7 +226,7 @@ const inChain = ft.chained || ft.chainLeft > 0; if (inChain && !P.roll) ft.dur = (1.1 + Math.random() * .6) * (stage && stage.slow ? 1.3 : 1); // 原地连踢:脚丫 / 拳头 / 膝盖才有;晚期节奏放慢 1.4 倍。拍子排在第一下顶起来之后,整段时长跟着拉长 - ft.beats = null; ft.beat = 0; ft.pop = 0; ft.wp = 0; ft.wseed = Math.random() * 1000; + ft.beats = null; ft.beat = 0; ft.pop = 0; ft.wp = 0; ft.wrot = 0; ft.wseed = Math.random() * 1000; if (!inChain && stage && stage.drum && !P.roll && !P.soft && P !== PARTS.kick && Math.random() < stage.drum) { const r = RHYTHMS[Math.random() * RHYTHMS.length | 0], m = stage.slow ? 1.4 : 1; let t = .7; ft.beats = r.map(d => (t += d * m)); @@ -330,7 +331,8 @@ /* ---------- 物理 ---------- */ function step(dt) { - if (ft.wp > 0) ft.wp = Math.max(0, ft.wp - dt * 1.4); + // 连踢时褶皱回落得快(0.24 秒基本退平),每一拍才是清楚的一下「噔」;单踢慢慢退 + if (ft.wp > 0) ft.wp = Math.max(0, ft.wp - dt * (ft.beats ? 4.2 : 1.4)); if (mode === 'wait') { if (active() && idle()) { wait -= dt; if (wait <= 0) appear(); } } else if (mode === 'show') { @@ -348,7 +350,7 @@ ft.beat++; ft.h.vel -= 85; ft.pop = .12; ft.ox += (Math.random() - .5) * 10; ft.oy += (Math.random() - .5) * 10; } - if (ft.pop > 0 && (ft.pop -= dt) <= 0) { ft.h.vel += stage && stage.slow ? 95 : 150; ft.wp = 1; ft.wseed += 7.3; } // 每一拍褶皱重新被踢出来 + if (ft.pop > 0 && (ft.pop -= dt) <= 0) { ft.h.vel += stage && stage.slow ? 110 : 180; ft.wp = 1; ft.wrot = (ft.wrot || 0) + (Math.random() - .5) * .35; } // 每一拍褶皱重新被踢出来,落点略偏一点 } if (u > ft.dur) { // 连续踢:这一下收得快一点,旁边紧接着再来,不等下一个间隔 @@ -505,7 +507,7 @@ if (H > .1) { const P = ft.part, sp = ft.spread.v, k = Math.min(H / 9, 1.3) / sp; // 2026-10-04 用户:「踢屏幕时前面要有比较明显的褶皱;连续踢就连续被踢出褶」—— 小鱼泡泡(早期)不出褶 - if (!P.soft) wrinkles(ft.x + ft.ox + ox, ft.y + ft.oy + oy, P.rx * sp, P.ry * sp, ft.ang + (mode === 'show' ? ft.wob : 0), Math.min(H / P.amp, 1.2), ft.wp || 0, ft.wseed || 0); + if (!P.soft) wrinkles(ft.x + ft.ox + ox, ft.y + ft.oy + oy, P.rx * sp, P.ry * sp, ft.ang + (ft.wrot || 0) + (mode === 'show' ? ft.wob : 0), Math.min(H / P.amp, 1.2), ft.wp || 0, ft.wseed || 0); blob(ft.x + ft.ox + ox, ft.y + ft.oy + oy, P.rx * sp, P.ry * sp, ft.ang + (mode === 'show' ? ft.wob : 0), [ // 2026-10-04 用户:「凸起就行,不要变颜色(之前踢完泛浅红)」—— 只留中性灰的背光阴影 + 白高光,不带任何暖色 [.16, .22, 1.02, 'rgba(70,62,58,' + (.1 * k).toFixed(3) + ')'],