v0.02
This commit is contained in:
1 parent
234e769f4d
commit
e6a0aa94de
10 files changed
+872
-583
No files matched your search
@@ -0,0 +1,24 @@
|
||||
# 2026-10-21
|
||||
|
||||
## 修完 j2 VERTICAL HELL(最后一个不可达关卡)
|
||||
- 新增 `js/levels/needle.js` 的 `well()`:之字踏石竖井生成器(每级升 2 格、台阶宽 5 且相邻两级重叠 2 格、顶台与上层地板同高相接、靠地板侧井壁底部留 3 格入口)。
|
||||
- 用 `well()` 重写 j2 的四段竖井(右-左-右-左),并修正:
|
||||
- L1 地板改成 cols 2..57(不覆盖右井内腔),L2/L4 地板改成 cols 9..65(盖住右井井底)。
|
||||
- L1/L3 的压顶垂刺改成 cols 10..54,避开左井 x2..9(之前垂刺正好挡住井内起跳)。
|
||||
- L2 刺毯缩短到 col 56,让右井底部 cols 57..65 净空可以站位起跳。
|
||||
|
||||
## 找到可达性 BFS 的建模 bug(关键)
|
||||
`tools/lib-reach.mjs` 的 `jump()` 里水平方向被墙挡住时把 `vx` 永久清零了,而真实 `js/player.js` 是「本帧没推动、下一帧按住方向键 vx 仍是 ±3」。
|
||||
这导致所有「贴着墙上升、越过台面边缘后再横移」的路线全部丢失——j2 的竖井就是靠这条路线过的。改成不清零后 j2 状态数 451 → 1268,全关通过。
|
||||
|
||||
## 统一诊断工具参数
|
||||
`reach()` 的 `RELSET` 默认值 `[0,8,14]` 与 `solve.mjs` 的 `[0,4,8,14]` 不一致,`reach-diag.mjs` 会输出误导性结果。提取 `DEF_DJ`/`DEF_REL` 并让 `reach-diag.mjs` 也读 `DJ`/`REL` 环境变量。
|
||||
|
||||
## 降低「重复跳跃套路」+ 加密
|
||||
- `jump.js` 顶部的 `carpet()` 从固定「每 4 格一缺口」改成 **4/3 格交替**(跳 3 格 / 跳 4 格轮换),所有复用它的关卡一起变节奏,全关仍可达。
|
||||
- 加密低密度关卡:j1 加上下夹缝+对刺门+垂刺;j5 加夹缝/对刺门/浮块区压顶;j7 每层改用交替刺毯+两端留落脚净空+压顶垂刺;j4 加宽冰坑+压顶垂刺;j8 收尾段加垂刺。
|
||||
- 踩坑:j7 层两端必须留 2 格净空(上一层是二段跳跃入的),否则落点正好在刺上;j5 浮块区压顶只能放在 R-9(R-7 会让高块单跳就撞死)。
|
||||
- 刺密度:j1 3.8% / j2 10.7% / j3 6.2% / j4 4.2% / j5 4.1% / j6 11.6% / j7 6.2% / j8 4.7% / j9 8.2% / j10 9.2%。
|
||||
|
||||
## 验证
|
||||
check / solve / save-test / key-test / smoke / dom-smoke 全部通过;`http://localhost:8123/` 上 index.html 与各模块均 200。
|
||||
@@ -0,0 +1,25 @@
|
||||
# iwanna(IWBT C 同人网页游戏)项目长期笔记
|
||||
|
||||
## 物理与判定(像素级跳刺的核心)
|
||||
- 物理常量写在 `js/player.js` 的 `PHY`,全部对齐 IWBT 官方:GRAV 0.4 / MAXFALL 9 / JUMP 8.5 / DJUMP 7.6 / HSPD 3,松手即停、无惯性、可变跳跃高度。
|
||||
- 玩家判定盒 **11×21**(`Player` 构造函数里 `this.w = 11; this.h = 21`)。改这里会同时影响 `level.js` 的 `spawn` 偏移和全部可达性工具。
|
||||
- 刺判定盒在 `js/level.js` 的 `spikeBox()`,已按刺尖收紧(上刺 y+8 起、左右刺 x+5 起等),留出像素级擦弹窗口。`T.KILLER` 必须有兜底 return,否则 `deadlyRect` 会在坑向关崩溃。
|
||||
|
||||
## 关卡设计硬规则(都踩过坑)
|
||||
- `tools/solve.mjs` 是唯一权威:改完任何地图必须跑到「✅ 所有关卡终点与存档点均可达」。
|
||||
- 之字竖井用 `needle.js` 的 `well(xL, xR, topRow, botRow, floorSide)`:每级升 2 格、台阶宽 5 且两级重叠 2 格、顶台与上层地板**同高相接**、靠地板侧井壁从 topRow+1 到 botRow-4(底部留 3 格入口)。
|
||||
- 台阶**不能铺满井宽**(会变成 1 格高封闭走廊,跳不起来)。
|
||||
- 顶台**不能压在地板洞口正上方**(会把井封死)——曾因此 j2 整关不可达。
|
||||
- 完整四向钻石(上下左右刺齐全)在矩形判定盒下横向**无解**,只能当装饰;要「跳穿门」必须用 `vgap`(上下夹缝)或 `hgap`(左右夹缝)。
|
||||
- 垂刺(压顶)与落脚点的关系:单跳最高 ~86px、二段跳 ~158px。压顶刺放在落脚点上方 5 行 = 单跳安全/二段必死;放太近(3~4 行)会让单跳也撞死。冰面上**不要**加压顶垂刺(滑行无法控制跳跃高度,实测 j8 直接不可达)。
|
||||
- 刺毯缺口最远只能 3 连刺(跳 4 格 ≈128px,已是单跳极限);需要更远必须用二段跳,但压顶垂刺会禁止二段跳。
|
||||
|
||||
## 工具链
|
||||
- `tools/lib-reach.mjs` 是 solve / reach-diag 的**共享 BFS 核心**,改建模只改这一处。
|
||||
- 关键修正:跳跃水平方向被墙挡住时**不能把 vx 永久清零**(真实 `player.js` 里按住方向键下一帧会恢复)。清零会丢失「贴墙上升→越过台面→横移」这条经典路线,曾导致整个 j2 竖井判为不可达。
|
||||
- `reach()` 默认 DJSET/RELSET 必须与 `solve.mjs` 的 `DJ`/`REL` 环境变量一致,否则诊断和求解结果对不上。
|
||||
- 其余:`check.mjs` 格式校验、`save-test.mjs` 存档点、`key-test.mjs` 按键语义(R=回存档点 / Backspace=整关重来)、`smoke.mjs`、`dom-smoke.mjs`。
|
||||
- 本地预览:`python3 -m http.server 8123`(ES module 必须走 HTTP,file:// 打不开)。
|
||||
|
||||
## 关卡现状(23 关)
|
||||
跳刺 j1~j10(68×52 ~ 150×44,刺密度 3.8%~11.6%)、耐久 e1~e4、boss b1~b3(可达性求解跳过)、坑向 r1~r4。
|
||||
Reference in new issue
Block a user