sganggs
|
231da0efbc
|
0.2.6-dev: port PR #416 by Cromemadnd — at every round start the own board's pieces replay their Start clip and landing sound one after another in deployment order (the maintainer's confirmation from official play, 2026-10-13), and a purchase or a move onto / across the board plays them too ([ASSUMED], the PR author's account); one sound per landing, idle prep pieces only, the round marked once the view took the sequence, own board only, timers cleared when prep mode ends and on destroy; DESIGN §31.8; golden: unchanged
|
2026-10-13 04:36:56 +08:00 |
|
sganggs
|
281cf01ff0
|
0.2.6-dev: connect the history of PR #554 by xcdoge — the reviewed adaptation is kept (tree unchanged)
|
2026-10-13 03:48:47 +08:00 |
|
sganggs
|
47b9e5b63e
|
0.2.6-dev: the official battlefield scenes use the extracted light at full strength — SCENE_LIGHT direct and indirect 1 instead of 0.2.5's eye-tuned 0.8 / 0.4 (GitHub #549, the light half of PR #554 by xcdoge; its emissive change to the metal board is not taken); DESIGN §31.7; golden: unchanged
|
2026-10-13 03:48:47 +08:00 |
|
sganggs
|
975c79da70
|
0.2.6-dev: PR #546's design note moves from the released 0.2.5 chapter to DESIGN §31.5 (docs/history/0.2.6.md, now host bandwidth and community follow-up); CHANGELOG 0.2.6-dev credits PRs #546 and #547; golden: unchanged
|
2026-10-13 01:44:20 +08:00 |
|
sganggs
|
77865e6bc2
|
0.2.6-dev: merge PR #546 by Xinglan233 — the strategy draft enables 跳过 only while another unpicked player remains (finished players stay in the shown order but are not skip targets)
|
2026-10-13 01:43:55 +08:00 |
|
sganggs
|
1d55c93e3a
|
0.2.6-dev: merge PR #547 by Xinglan233 — the scene-asset test resolves the repository root with fileURLToPath (on Windows the URL pathname doubled the drive letter)
|
2026-10-13 01:43:55 +08:00 |
|
sganggs
|
c5925a76fa
|
0.2.6-dev: the emote fallback browser test blocks the mirror copies under their content-hashed URLs too (/assets/~<hash>/ui/emoticon/…, host bandwidth layer 1); golden: unchanged
|
2026-10-13 00:19:44 +08:00 |
|
xcdoge
|
80abaaf1b1
|
#549:棋盘材质的自发光对齐官方 _EmissionColor(0.25 → 1),棋盘亮度再 +4%
接上一提交(官方场景的两个增益改回 1)之后,剩下的偏暗还有一处同类问题:棋盘瓦片材质的自发光被手调压暗了。
官方真值(UnityPy + tools/local-extract/aklz4.py 的 LZ4AK 解码器 dump 客户端
arts/maps/map_autochess/res.ab 的 Material):
MT_autochess _Color = (1,1,1,1) _EmissionColor = (1,1,1,1)
_MainTex = TX_autochessi_D _EmissionMap = TX_autochessi_E
_MetallicGlossMap = TX_autochessi_M _BumpMap = TX_autochessi_N
_Metallic = 0 _Glossiness = 0
MT_autochess_common _EmissionColor = 0.5588(同样带 _EmissionMap)
MT_autochessi_BG _Color = 0.71323 + shader Torappu/Unlit/Texture
⇒ 与代码里的 LIGHTING.bg.color = 0.713 完全一致(这条本来是对的)
也就是说官方棋盘是**自发光**的(albedo 加 emission),不是靠环境灯照亮;而 materials.js 里 boardMaterial 的
emissive 默认就是 1(emissive / emissiveMap 直接对应上面两个材质),decalMaterial(_common 图集)也已经是
官方的 0.559 —— 只有 scene.js 的 LIGHTING.emissive = 0.25 把它整体压到四分之一。
改动:LIGHTING.emissive 0.25 → 1,注释写明官方 _EmissionColor 的来源与它为什么必须是 1(与上一提交那两个
增益同一类问题:照截图手调的系数)。
实测(同一 m04 场景、同一相机,只取棋盘区域求平均,官方截图同口径):
官方截图 亮度 129.0
最初 亮度 89.7(−30%)
场景增益改回 1 亮度 103.3(−20%)
本提交 亮度 107.4(−17%)
已知未尽:还剩约 −17%。官方棋盘瓦片的着色器是自定义的(dump 里 m_Shader 读不到完整定义),无法直接比对公式,
下一步需要把画面按材质逐区域分离(棋盘瓦片 / 场景沙地 / 水)再分别对齐,而不是继续拧全局系数。
|
2026-10-12 23:52:31 +08:00 |
|
xcdoge
|
045cc96172
|
#549:官方场景偏暗 —— 把两个手调增益改回官方语义(直射光 intensity、烘焙光强 lightRange)
问题(#549):3D 棋盘按战场显示官方场景后,整体比官方实机明显偏暗、发闷。只取棋盘区域做量化:官方截图
平均 RGB 152.4/125.8/92.3(亮度 129.0),本项目 98.8/89.4/65.0(亮度 89.7)。
原因:官方场景材质的两个增益是当初照截图手调的猜值(代码注释里自己标了 [ASSUMED]):
export const SCENE_LIGHT = Object.freeze({ range: 8.0, ambient: 0.2, direct: 0.8, indirect: 0.4 });
而官方数据是(从客户端场景包里 dump 出来的真值,见下):
scene.json light = { dir: [0.36121, 0.44604, 0.81889], color: [1.0, 0.9312, 0.87131], intensity: 1.1 }
Light「Mainlight (1)」: m_Type=1(Directional) m_Intensity=1.1 m_BounceIntensity=1.5
lightRange = 8.0
- direct 0.8 ⇒ 直射光 = lin(color) × (1.1 × 0.8) = 0.88,比官方的 1.1 暗 20%;
- indirect 0.4 ⇒ 烘焙间接光被乘成 lightRange × 0.4 = 3.2,而 lightmap 的语义是"贴图 1.0 = lightRange 的线性光"
(scenes.py:`L = 5^2.2 · A^2.2 · RGB`,PNG 存 (L / lightRange)^(1/2.2)),所以 indirect 必须为 1 才等于官方烘焙值,
0.4 等于把间接光压掉 60%。片元里的 `pow(lm.rgb, 2.2) * uLmScale` 与 `uLightColor * N·L * shade` 正是这两项。
改动:`SCENE_LIGHT` 的 direct / indirect 改回 1(= 场景自己的值,与那段注释原本的描述一致),并把注释改成
说明它们为什么必须是 1、以及低于 1 会相对官方渲染变暗(#549)。
实测(同一 m04 场景、同一相机,只取棋盘区域求平均):
官方截图 亮度 129.0
改前 亮度 89.7(−30%)
改后 亮度 103.3(−20%)
顺手排除的两个猜想(都量过,都不是原因):
- 雾:官方 RenderSettings 是 m_Fog = False,而 scene.js 给场景挂了 T.Fog(0x0c1114, 17, 36)。A/B 实测雾开/关
亮度 95.3 / 95.4 ⇒ 在本视角下没有影响(相机在 near 以内),本次不动它。
- 焦点暗角:官方场景材质也套了棋盘的 focusMask(框外 × uFocusDim = 0.72)。A/B 实测去掉后 103.3 → 106.6(+3%),
因为本视角的焦点框覆盖了大部分棋盘;官方场景本身没有这种衰减,但它是棋盘的既有玩法表现,留待单独确认,本次不改。
证据来源:`.cache/official-scenes/<version>/scenes/.../level_<stage>.ab` 用 UnityPy(配合 tools/local-extract/aklz4.py
注册的 LZ4AK 解码器)dump 出的 Light 与 RenderSettings;以及仓库自己的 tools/local-extract/scenes.py 里 lightmap 的
RGBM 编码定义。
测试:node --test test/render/board3d-scene.test.js test/render/board3d.test.js test/render/boardart.test.js(见 PR)。
|
2026-10-12 23:33:58 +08:00 |
|
sganggs
|
909abee0b8
|
0.2.6-dev: the loadout module-card browser test accepts the content-hash segment the served manifest now puts in local-art URLs (host bandwidth layer 1); golden: unchanged
|
2026-10-12 21:19:41 +08:00 |
|
星闌
|
7db277b327
|
test: 修复场景资源测试在 Windows 下的路径解析
|
2026-10-12 20:24:31 +08:00 |
|
星闌
|
c919794724
|
fix: 禁用最后一个选策略的玩家的跳过按钮
|
2026-10-12 19:38:19 +08:00 |
|
sganggs
|
79bb26b317
|
0.2.6-dev: the maintainer's decisions of 2026-10-12 — the 玩法说明 pages' WebP copies are lossy at quality 90 (25.6 MB of PNG → 4.2 MB; lossless stays a GUIDE_WEBP_MODE away) and /healthz?traffic=1 answers the counters to a loopback or private-network client only (a public visitor, also one a local tunnel or proxy forwards, gets the plain report; TRUST_PROXY applies as for the WebSocket limits); golden: unchanged
|
2026-10-12 19:09:54 +08:00 |
|
sganggs
|
35f4895219
|
0.2.6-dev: merge the 0.2.5 release's last commit (README / DEPLOY package size)
|
2026-10-12 18:37:25 +08:00 |
|
sganggs
|
cf7a940027
|
0.2.5: README / DEPLOY give the full bundle's built size (552 MB, about 780 MB extracted)
|
2026-10-12 18:36:56 +08:00 |
|
sganggs
|
3d5d6b380d
|
0.2.6-dev: merge claude/bw-l01 — host bandwidth layers 0 and 1 (no BGM download while the music is silent, WebSocket permessage-deflate, lossless WebP 玩法说明 pages, traffic counters, content-hashed asset URLs with immutable caching, brotli q5) on top of the 0.2.5 release; its note becomes DESIGN §31 in docs/history/0.2.6.md, CHANGELOG 0.2.6-dev, version 0.2.6-dev; golden: unchanged
|
2026-10-12 18:28:50 +08:00 |
|
sganggs
|
88d4b2544b
|
0.2.5: version 0.2.5 — package.json / package-lock.json / APP_VERSION (DEV_BUILD turns false), README release form and package sizes (the full bundle now carries the battlefield scenes), CHANGELOG 0.2.5 — 2026-10-12 in the usual sections with credits, DESIGN versions line, §30 header
|
2026-10-12 18:20:53 +08:00 |
|
sganggs
|
658f0fc392
|
0.2.5-dev: merge PR #490 by D-Roote — Korean: 「恢复本机对局」 reads 게임 복귀 (the PR's latest commit; its earlier commits are already connected)
|
2026-10-12 18:13:28 +08:00 |
|
sganggs
|
3bb7fef74c
|
0.2.5-dev: official scenes merge chunks that share a material / lightmap into one mesh at load (draw calls on the 3D board back within budget, e.g. act2autochess_m02 prep 22 → 13); the boss-round real-server test reads the actual random pairing instead of assuming the host on the left half; golden: unchanged
|
2026-10-12 17:48:31 +08:00 |
|
sganggs
|
a119793af6
|
0.2.6-dev: the WebSocket compression figures in the code and docs are the server counters' measurement (173 KB of frames → 60 KB on the wire)
|
2026-10-12 16:53:43 +08:00 |
|
sganggs
|
409fec90d5
|
0.2.6-dev: the browser suites load the served manifests' content-hashed URLs (e2e servers wait for the asset index) and check Spine, audio and art through them; the history note of host bandwidth layers 0 and 1 for the next version; golden: unchanged
|
2026-10-12 16:52:40 +08:00 |
|
sganggs
|
0bb16fd616
|
0.2.6-dev: brotli (quality 5) on the fly with the existing memory cache for clients that name br, gzip for the rest; separate ETags per encoding (measured against gzip-6: .skel −27 %, data JSON −26 %, vendor −14 %, scripts −5 %) — host bandwidth layer 1.4; golden: unchanged
|
2026-10-12 16:29:52 +08:00 |
|
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
|
e2bc005c88
|
0.2.5-dev: docs — §30 sections renumbered in order after the merges and every reference pointed at its topic; the 0.2.5 CHANGELOG section regrouped under the usual headings (no change to code behaviour)
|
2026-10-12 16:02:41 +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
|
3c1952afc0
|
0.2.5-dev: connect the history of PR #544 by Siornya — the reviewed adaptation is kept (tree unchanged)
|
2026-10-12 15:52:10 +08:00 |
|
sganggs
|
92d14aeefa
|
0.2.5-dev: connect the history of PR #533 by Andrew — the reviewed adaptation is kept (tree unchanged)
|
2026-10-12 15:52:10 +08:00 |
|
sganggs
|
7fe0ffc33f
|
0.2.5-dev: connect the history of PR #523 by YinqiMargatroid — the reviewed adaptation is kept (tree unchanged)
|
2026-10-12 15:52:10 +08:00 |
|
sganggs
|
da2f0ef93a
|
0.2.5-dev: connect the history of PR #518 by IceCodeNew — the reviewed adaptation is kept (tree unchanged)
|
2026-10-12 15:52:10 +08:00 |
|
sganggs
|
b6a8c132b3
|
0.2.5-dev: connect the history of PR #520 by Cloudnyco — the reviewed adaptation is kept (tree unchanged)
|
2026-10-12 15:52:10 +08:00 |
|
sganggs
|
0882ed2dcc
|
0.2.5-dev: connect the history of PR #535 by 星闌 — the reviewed adaptation is kept (tree unchanged)
|
2026-10-12 15:52:10 +08:00 |
|
sganggs
|
c2c712ac0b
|
0.2.5-dev: connect the history of PR #536 by 星闌 — the reviewed adaptation is kept (tree unchanged)
|
2026-10-12 15:52:10 +08:00 |
|
sganggs
|
fbd4684a7b
|
0.2.5-dev: connect the history of PR #537 by 星闌 — the reviewed adaptation is kept (tree unchanged)
|
2026-10-12 15:52:10 +08:00 |
|
sganggs
|
f1ea116f23
|
0.2.5-dev: golden matches recomputed on the merged tree — the #523 Touch aggro change and the funnel ports both move full-match scenarios and interact there ( 1 file changed, 11 insertions(+), 11 deletions(-)); roster / bonds / fields / standins / diy equal the branch results
|
2026-10-12 15:51:45 +08:00 |
|
sganggs
|
3dd2213e47
|
0.2.5-dev: merge claude/036-sim
# Conflicts:
# CHANGELOG.md
# docs/history/0.2.5.md
# test/golden/matches.json
|
2026-10-12 15:50:42 +08:00 |
|
sganggs
|
812e4c47b1
|
0.2.5-dev: merge claude/036-rule
|
2026-10-12 15:50:41 +08:00 |
|
sganggs
|
a451ddcf6b
|
0.2.5-dev: 耶拉 S2 (both forms) and 荒芜拉普兰德 S1 keep the operator's own hit next to the drone hit — only drone-only skills skip it (review fix of the funnel port); golden: more funnel scenarios move, attributed in docs/history/0.2.5.md
|
2026-10-12 15:50:41 +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
|
9b37a68fcf
|
0.2.5-dev: 萨卡兹枯朽战士 (and every enemy sharing its death fog) leaves no 污秽侵蚀 when it dies silenced — the owner's official-play recall, against the PRTS / in-game wording (#470); the 调度中心 5 / 6 promotion reward includes 自选 operators of the newly reached tier (#515, after research; the owner's decision); golden: unchanged
|
2026-10-12 15:24:07 +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 |
|