Commit Graph
1049 Commits
Author SHA1 Message Date
sganggs 35b09bb63b 0.2.6-dev: the client fetches a served manifest's content-hashed audio as /media/~<hash>/… (download-manager route kept), and the token death sound derived beside charDie drops charDie's hash — host bandwidth layer 1.3; golden: unchanged 2026-10-12 16:25:16 +08:00
sganggs 893d17e725 0.2.6-dev: /data/assets.json and /data/local-assets.json are served with content-hashed URLs (/assets/~<hash>/…, one hash per Spine model, the committed files unchanged); the ~hash routes of /assets/ /fonts/ /media/ answer immutable when the hash names the file and the current file with no-cache otherwise; content ETags — host bandwidth layer 1.2; golden: unchanged 2026-10-12 16:24:03 +08:00
sganggs 521dd984e7 0.2.6-dev: a background content-hash index of public/assets and public/fonts (SHA-256, 16 hex; cached by path + size + mtime in .cache/asset-hashes.json; Spine models share one hash; SP_ASSET_INDEX=0 turns it off) — host bandwidth layer 1.1; golden: unchanged 2026-10-12 16:20:17 +08:00
sganggs fb5f4493f2 0.2.6-dev: DEPLOY — a stable address keeps every player's cache (quick tunnels change domain), HTTP/2 through the proxy, brotli only on HTTPS pages, a Cloudflare cache rule for /assets/ /fonts/ /media/ (host bandwidth layer 0.5) 2026-10-12 16:06:35 +08:00
sganggs be8d382c05 0.2.6-dev: traffic counters — HTTP body bytes by category (assets / audio / code / data) and WebSocket wire / payload bytes since the start at GET /healthz?traffic=1, and the page's own downloads (Resource Timing transferSize) as a traffic line in the 问题反馈 diagnostics (host bandwidth layer 0.4); golden: unchanged 2026-10-12 16:05:49 +08:00
sganggs 05b0dba8b5 0.2.6-dev: the 19 local 玩法说明 pages get a lossless WebP copy in tools/local-extract (25.6 → 17.4 MB; lossy waits for the owner's comparison) and the guide preloads only the next page (host bandwidth layer 0.3); golden: unchanged 2026-10-12 16:00:08 +08:00
sganggs 8edda589f3 0.2.6-dev: WebSocket permessage-deflate for frames from 1 KB (no server context takeover, 2 KB server window, memLevel 7; a client offering a narrower window connects uncompressed) — host bandwidth layer 0.2; golden: unchanged 2026-10-12 15:57:33 +08:00
sganggs 69011d2b54 0.2.6-dev: no BGM download while the music is muted or at BGM volume 0; the wanted track is fetched once it is audible again (host bandwidth layer 0.1); golden: unchanged 2026-10-12 15:45:38 +08:00
sganggs a8ff5e7c1d 0.2.5-dev: merge claude/036-touch
# Conflicts:
#	CHANGELOG.md
#	docs/history/0.2.5.md
2026-10-12 15:00:10 +08:00
sganggs bb88031256 0.2.5-dev: merge claude/036-scene
# Conflicts:
#	CHANGELOG.md
#	docs/history/0.2.5.md
2026-10-12 15:00:10 +08:00
sganggs 537b1ec517 0.2.5-dev: merge claude/036-ui2
# Conflicts:
#	docs/history/0.2.5.md
2026-10-12 14:59:34 +08:00
sganggs d482fbb8ba 0.2.5-dev: official battlefield scenes on the 3D board — a local fetch / extract step for the season scene bundles, per-field scene rendering with the metal board as fallback, the full bundle can include the extracted scenes and setup can fetch them (--scenes); nothing official is stored in the repository (PR #533 by @andrew05060414, ported; the owner's decision of 2026-10-12); golden: unchanged 2026-10-12 14:59:20 +08:00
sganggs a3e8460bb0 0.2.5-dev: an optional 「官方伤害数字」 setting (default off) shows only the numbers the official game shows per the PRTS red-number rule (#412, the owner's decision of 2026-10-12); a small link to the project's GitHub repository on the title page (#543); golden: unchanged 2026-10-12 14:59:20 +08:00
sganggs 37e0fffb34 0.2.5-dev: the 外勤医疗 (Touch) reserve medic takes the initial aggro order of PR #523 and its detail opens in the preparation phase (PR #523 by @YinqiMargatroid, ported; the owner's decision of 2026-10-12); golden: one more scenario moves (named in docs/history/0.2.5.md) 2026-10-12 14:59:19 +08:00
sganggs 10d1fdef5f 0.2.5-dev: connect the history of PR #538 by 星闌 — the reviewed adaptation in dcdaeec9 is kept (tree unchanged) 2026-10-12 14:45:12 +08:00
sganggs 502a2c13ba 0.2.5-dev: connect the history of PR #540 by 星闌 — the reviewed adaptation in dcdaeec9 is kept (tree unchanged) 2026-10-12 14:45:12 +08:00
sganggs dcdaeec933 0.2.5-dev: merge the round-36 client / tools ports — #540 / #538 loadout sync and import guards, #531 / #530 player-package scripts and links; golden: unchanged 2026-10-12 14:45:12 +08:00
sganggs 52b70434d0 0.2.5-dev: a restore-defaults loadout sync is never overwritten by an older in-flight sync (PR #540 by @Xinglan233, ported); importing a loadout with ops is refused before writing when the DIY data is missing (PR #538 by @Xinglan233, ported); the player package's package.json keeps only scripts whose files ship (#531) and its docs link unshipped files to the release tag on GitHub (#530); golden: unchanged 2026-10-12 14:45:01 +08:00
sganggs 7fd0478dc0 0.2.5-dev: merge PR #517 by 星闌 — chore: 根据 PR 标题添加类型标签 (#239) 2026-10-12 14:08:09 +08:00
sganggs 6e8103e733 0.2.5-dev: merge PR #519 by Cloudnyco — detmath powi: a zero base keeps Math.pow's exact results ((- 2026-10-12 14:08:09 +08:00
sganggs 8d59ad3ef9 0.2.5-dev: merge PR #534 by Andrew Wang — local-extract: derive the board normal map from both layouts 2026-10-12 14:08:09 +08:00
sganggs c438323596 0.2.5-dev: merge PR #524 by xcdoge — 敌方血条偏高:头顶高度按"原点以上的高度"ç 2026-10-12 14:08:09 +08:00
sganggs e2ec2cbf21 0.2.5-dev: merge PR #541 by BowenJXD — fix(windows): 修复 Node 版本检测在 Volta 等环境下 2026-10-12 14:08:09 +08:00
sganggs 7a17f9c9b6 0.2.5-dev: connect the history of PR #511 by RainoutOvO — the reviewed adaptation in 221e6b8d is kept (tree unchanged) 2026-10-12 14:07:08 +08:00
sganggs 56e7757dd3 0.2.5-dev: connect the history of PR #507 by robll-v1 — the reviewed adaptation in 221e6b8d is kept (tree unchanged) 2026-10-12 14:07:08 +08:00
sganggs 7247e67f44 0.2.5-dev: connect the history of PR #505 by 星闌 — the reviewed adaptation in 221e6b8d is kept (tree unchanged) 2026-10-12 14:07:08 +08:00
sganggs 0ce7c64255 0.2.5-dev: connect the history of PR #504 by robll-v1 — the reviewed adaptation in 221e6b8d is kept (tree unchanged) 2026-10-12 14:07:08 +08:00
sganggs 4ee1e1e9f0 0.2.5-dev: connect the history of PR #503 by 星闌 — the reviewed adaptation in 221e6b8d is kept (tree unchanged) 2026-10-12 14:07:08 +08:00
sganggs 4bb22ddae9 0.2.5-dev: connect the history of PR #502 by 星闌 — the reviewed adaptation in 221e6b8d is kept (tree unchanged) 2026-10-12 14:07:08 +08:00
sganggs e0a3d6d9af 0.2.5-dev: connect the history of PR #499 by Yuri Restia — the reviewed adaptation in 221e6b8d is kept (tree unchanged) 2026-10-12 14:07:08 +08:00
sganggs 1f5f445acf 0.2.5-dev: connect the history of PR #497 by Robin — the reviewed adaptation in 221e6b8d is kept (tree unchanged) 2026-10-12 14:07:08 +08:00
sganggs c1fef54b05 0.2.5-dev: connect the history of PR #494 by Yuri Restia — the reviewed adaptation in 221e6b8d is kept (tree unchanged) 2026-10-12 14:07:08 +08:00
sganggs 16085d2a10 0.2.5-dev: connect the history of PR #492 by Cloudnyco — the reviewed adaptation in 221e6b8d is kept (tree unchanged) 2026-10-12 14:07:08 +08:00
sganggs 7e960269d0 0.2.5-dev: connect the history of PR #490 by D-Roote — the reviewed adaptation in 221e6b8d is kept (tree unchanged) 2026-10-12 14:07:08 +08:00
sganggs 221e6b8dd2 0.2.5-dev: community round 30 and follow-ups
- Stock: fixed trait gifts (缪尔赛思 / 变形者集群 变形同构体, 耶拉 不融冰, 蜜蜡 / 卡涅利安 迅捷作战粮, 诗怀雅 盟约之币) still occupy stock but are granted past the cap; an operator card already shown in the shop or a reward can be taken after the pool runs out and overdraws (GitHub #498, the owner's decision); item buys and item rewards keep the stock check. 洛洛 / 焰尾 sub-pools use the measured weights (PR #497 by @2321Robin; the occupancy idea of PR #496 by @2321Robin re-implemented differently).
- Boss pairs are drawn at random once per match and fixed to battle start; the Hidden Core reuses them; a leaver does not split a full pair (the owner's decision).
- 阿戈尔 in 联防 no longer re-applies the opening devour HP loss or a false revive; Touch's team medic stays for the match after its holder leaves (owner-approved, official lifetime unverified).
- Auto-skill ranges: 司霆惊蛰 S2, 斩业星熊 S3 against air, 予愿安洁莉娜 S3; 自在's post-rebirth invulnerability is also untargetable (#510); Horn / Clementia / catapult / 忍冬 first hit (PR #502 by @Xinglan233); 不融冰 / tear gas trigger on real damage.
- Bond layer-up sound in round start / draft / prep / battle (#482): one channel, a new cue replaces the old, no extra cooldown; a prep update that adds layers and activates a bond plays one cue.
- Client: multi-swing fix (#506), refresh single-flight (PR #507 by @robll-v1), LP tower keeps the settled value with a −N tick (PR #504 by @robll-v1), export with only 潜能 / 练度 changes (PR #503 by @Xinglan233), spectator rosters list DIY members (PR #505 by @Xinglan233), banned members beside bond tooltips (PR #494 by @YuriRestia), recovery action above the away overlay (PR #511 by @RainoutOvO), the /dev/sim-check.html consistency page (PR #492 by @Cloudnyco), Korean (PR #490 by @D-Roote) and English Victoria wording (PR #499 by @YuriRestia).
- golden: 45 of 287 scenarios move against 0.2.4 (roster 17, bonds 3, fields 6, matches 17, standins 2), each attributed in docs/history/0.2.5.md §30.9 / §30.16.
2026-10-12 14:07:08 +08:00
BowenJXD f08763c632 fix(windows): 修复 Node 版本检测在 Volta 等环境下误报版本过旧
start-windows.bat 的版本检测命令中包含 >、? 和 : 等 cmd 元字符。
当 node 由 Volta 等版本管理器的 shim 提供时,参数会经过 cmd 重新解析,
引号保护失效,">=22?0:1)" 被当作输出重定向,导致报错
"The filename, directory name, or volume label syntax is incorrect"
并返回非零退出码,脚本因此误判 Node 版本过旧(即使是 v24 LTS)。

改用不含 cmd 元字符的等价表达式:
  Math.max(0, Math.sign(22 - parseInt(process.versions.node)))
主版本号 >= 22 时退出码为 0,否则为 1,判断逻辑不变。
2026-10-12 12:28:18 +11:00
Andrew Wang b92a0bf3c2 local-extract: derive the board normal map from both layouts a client holds — BC5 (R = X) and DXT5nm (A = X, R = 1), read as Unity unpacks them (x = R·A); a client with the older map_autochess bundle got Z = 0 everywhere and a grey 3D board 2026-10-11 19:30:10 -04:00
xcdoge 7b4f512ce9 敌方血条偏高:头顶高度按"原点以上的高度"算(bounds.y + bounds.height),而不是包围盒高度
玩家反馈:逐腐兽的血条明显偏高。

原因:单位血条/名字牌的头顶高度用的是 spine setup-pose 包围盒的**高度**(units.js headTilesForUnit 里
`bounds.height × 1/320 × 模型系数 × 0.92`)。这个公式默认包围盒是**脚锚定**的 —— 大多数敌人确实如此
(猎狗pro y=−3.7、大鲍勃 y=−2.6,height 与"脚以上高度"几乎相等)。但有些模型的**原点在身体中间**:
逐腐兽的包围盒是 y=−404.7 / height=722.6,锏是 y=−798 / height=1183 —— 对它们,包围盒高度比可见顶端多出
大半个模型,于是血条被顶到上限 2.2 格(非 Boss)之上,看起来就是"明显偏高"。

改法:定位改用**原点以上的高度**(`Number.isFinite(b.y) ? b.y + b.height : b.height`,仍按 20…900 夹取)。
同时把这段计算从 UnitView 内联代码提成一个纯函数 `headTilesForUnit()`(放 units.js,紧挨 UNIT/EL_BAR 常量),
入参只有 isEnemy / isBoss / spineShown / bounds / modelK / modelKY,便于直接测;UnitView 仍然保留
"没显示 spine 就不看模型"的短路语义。spine.js 的 `height` getter 语义不变(别处也用它,例如替身的纵向拉伸)。

影响面(用真实 bounds 扫过 167 个有模型数据的敌人):
  逐腐兽 / 疯狂的逐腐兽   1.85 → 0.81 格(降 1.03)
  锏(Boss)             2.59 → 1.11 格(降 1.48)
  萨卡兹大剑手 / 组长     1.54 → 1.23 格(降 0.31)
  枯朽之种 0.72 → 0.55、萨卡兹百夫长 1.51 → 1.34、妖怪MKII 0.71 → 0.55
  其余 103 / 167 个敌人的变化 ≤ 0.02 格(脚锚定模型几乎无感)

测试:
  test/render/bar-head.test.js(新增 5 条):用真实的逐腐兽 / 猎狗pro / 大鲍勃 / 锏 包围盒断言新公式、
  夹取上限、以及三个回退分支(无 bounds 用 chibi 余量 × 系数、Boss 无模型用 2.2、干员与召唤物用固定余量),
  并做源码断言把"y + height"这条规则钉住。
  test/render/playtest6-enemies.test.js:两条 prefab 测试的期望值原本写死 `390 × …`(合成夹具的 bounds 是
  y=−150 / height=390,即当年就把这个 bug 当成了正确行为),现在改为从**被测 view 自己的 bounds** 推导
  (240 而不是 390),夹具本身不动。
  test/render 全量 552 项 / 546 通过 / 0 失败;test/ui + test/render 1279 项 / 1265 通过 / 0 失败。

未触碰 server/sim,test/golden 无变动。
2026-10-11 22:49:56 +08:00
Cloudnyco ad7e3e9835 detmath powi: a zero base keeps Math.pow's exact results ((-0)^1 = -0, (-0)^-1 = -Infinity) 2026-10-11 21:09:25 +08:00
星闌 581e2d5695 chore: 根据 PR 标题添加类型标签 (#239) 2026-10-11 20:42:36 +08:00
RainoutOvO 10e1461c29 Fix connection recovery action above away overlay 2026-10-11 17:43:50 +08:00
robll-v1 289a454fa1 fix: 高延迟下连按「刷新」只发送一次请求(GitHub #501) 2026-10-11 16:43:51 +08:00
robll-v1 07ac357ed4 fix: 顶栏生命值在结算前保持当前数值,仅以 −N 标记待扣(GitHub #479) 2026-10-11 16:16:38 +08:00
星闌 19c854c1f7 fix: 避免恢复默认被尚未完成的旧调配同步覆盖 2026-10-11 16:11:00 +08:00
星闌 70151d08ed fix: 防止自选数据加载失败时导入养成覆盖已有设置 2026-10-11 16:07:09 +08:00
Yuri Restia 6573431e72 Add correction layer to i18n that allows for corrections where the official translation is wrong 2026-10-11 14:02:34 +07:00
Yuri Restia f7be28331c Briefing: list an alliance's banned operators in a box beside its tooltip (#484) 2026-10-11 13:08:19 +07:00
Cloudnyco 40e5794bdf 模拟一致性检查:下载的数据文件名不含空格 2026-10-11 13:46:50 +08:00
Cloudnyco ce52512559 新增:模拟一致性检查页(/dev/sim-check.html),任意设备的浏览器重放黄金结果的整套战斗,逐帧与 Node 比较 2026-10-11 13:38:57 +08:00
Robin b612487bd5 洛洛的定制品 and 焰尾's <获得时> sub-pools take the measured weights of 路标月报#2 item 6: 洛洛 draws 8 equipment — 10维式重锤 2战栗 2坚固 2加速 2灼燃 1有限加速器 4护盾无人机 4激光发射器 (was the 4 special hammers uniform, per user playtest #4 — the special four stay exclusive to this pool and 维多利亚's, they are just no longer the whole of it; the four shop-sold entries draw through the shared item stock), 焰尾 draws 野鬃 10 / 灰毫 10 / 远牙 3 (was an even-ish 45/45/10 guess); both draws keep their stock gate (chess free-filter, item canGain). pool.test: the vict/rockr assertion splits — rockr asserts the 8-entry weighted table, 焰尾's pinus gets its own 10/10/3 test; DATA.md pools row updated; golden: roster/bonds/fields/standins/diy byte-identical, 6 of the 20 release matches move with the draws (attribution verified: reverting the two pools restores all 20 byte-for-byte), re-pinned 2026-10-11 13:26:38 +08:00