feedback5: version 0.2.0 — package.json / package-lock.json / APP_VERSION (DEV_BUILD turns false, so the title-screen dev tag and the boot warning go too), README (the dev-branch warning removed, the badge, the version line), CHANGELOG 0.2.0 dated 2026-10-07, the zip and download sizes re-measured; golden unchanged

- CHANGELOG 0.2.0: the integrator's draft brought up to date with what merged after it (30d9a41..2e83a6b and
  DESIGN §25.13–§25.21): the language packs and the ja / ko / zh-TW game texts (§25.20), the rebindable shortcuts
  (§25.15), the community reports of W5AA (§25.14) and CB1–CB5 (§25.16–§25.19, §25.21) under the draft's sections
  (rules, UI, lobby; the official behaviours and the reports not reproduced under 核实后不是问题), the owner's
  乌尔比安 revive-tile decision of 2026-10-07 under the deviations section (renamed 有意与官方不同的调整, the intro
  points at it); PRs #189 / #191 credited to @2321Robin as reused ideas; the draft's notes block left out.
- Sizes (tools/package.mjs, a real build of both zips, deleted after measuring): full zip 448 525 731 bytes
  (~430 MB, 16 031 files, 625 MB unpacked; was ~400 / 590), lite zip 22 927 271 bytes (~22 MB; was ~21), the setup
  download 463 MB (~460 MB; was ~440: the 自选 voices) — README 方式一 / 方式二 / 系统要求 / English summary,
  DEPLOY §0 / §1.1 / §3, the CHANGELOG's lite size.
- DESIGN §25 intro, §25.19 and §25.19.7: the custom-hotkey request (item 48) was built in §25.15, the battle-history
  request (item 22) stays postponed by the owner; §25.20: with five languages the menu is a list (buttons up to four).
- Tests: version 6 / 6, docs-consistency 24 / 24, docs-paths 7 / 7, package 10 / 10, client-static 313 / 313,
  i18n 10 / 10, i18n-data 8 / 8, i18n-packs 12 / 12, i18n-server 5 / 5; npm run golden ok (roster 49, bonds 46,
  fields 22, matches 18, standins 10, diy 138); lint 0 errors.
This commit is contained in:
sganggs committed 2026-10-07 06:41:06 +08:00
1 parent 13b52450d6
commit 6aeee5ff70
7 files changed
+159 -38

No files matched your search

+5 -5
View File
@@ -10,7 +10,7 @@
| 服务器 CPU | 战斗在各玩家浏览器里模拟(DESIGN §14),服务器只负责回合、经济和校验:**每个房间每个作战回合约 1 ms CPU**。AI 队友 / 掉线玩家的战场由服务器模拟:作战开始时 3 个 AI 战场在开发机上约 0.2–0.5 s CPU,小主机上可能要几秒(分成 8 ms 小片执行,不会卡住其他房间)。`SP_VERIFY=all` 会复算每个真人战场,CPU 明显增加,小主机建议保持 `off` 或 `sample`。 |
| 服务器内存 | 空闲约 100 MB,每个进行中的对局再增加几 MB。 |
| 网络 | 4 人对局中服务器每回合下行约 0.25 MB(DESIGN §14 实测)。首次进入游戏时浏览器要从主机下载所需的图片 / Spine 模型 / 音频(按需加载,之后走浏览器缓存),公网隧道带宽小时第一次会慢一些。 |
| 磁盘 | 素材约 440 MB(`public/assets`)+ 依赖约 125 MB(`node_modules`;整合包只带运行依赖,约 65 MB);可选的本地提取约 40 MB(`.venv-extract`)+ 70 MB 贴图(见第 6 节)。完整包解压后约 590 MB。 |
| 磁盘 | 素材约 460 MB(`public/assets`)+ 依赖约 125 MB(`node_modules`;整合包只带运行依赖,约 65 MB);可选的本地提取约 40 MB(`.venv-extract`)+ 70 MB 贴图(见第 6 节)。完整包解压后约 625 MB。 |
| 玩家设备 | 支持 WebGL 的现代浏览器(Chrome / Edge / Firefox / Safari 最新版),电脑或手机平板(横屏)。老旧设备可在设置里调低画质或访问 `/?board=2d`。 |
服务器**无状态**:房间和对局只存在内存里,没有数据库和存档,**不需要备份**。重启服务器会结束正在进行的对局(包括断线后本可在 24 小时内回来继续的独立模拟)。
@@ -26,13 +26,13 @@
```
装完**关闭并重新打开**终端,`node -v` 应显示 v22 或更高(winget 的 LTS 目前是 v24.x,同样可用)。没有 winget 时从 <https://nodejs.org/zh-cn/download> 和 <https://git-scm.com/download/win> 下载安装。
2. 下载,三选一。建议放在一个固定、短、**不在 OneDrive 同步范围内**的目录,例如 `C:\Stronghold-Protocol`:
- **完整包(推荐)**:在仓库的 [Releases](https://github.com/sganggs/Stronghold-Protocol/releases) 页面下载最新版本的 `Stronghold-Protocol-v<版本>.zip`(约 400 MB,解压后约 590 MB;已含运行依赖、前端库和全部素材,包括官方 3D 棋盘等本地客户端素材),解压后把里面的 `Stronghold-Protocol` 文件夹放到上述位置。不需要 Git,首次启动也不用再下载素材。素材版权归上海鹰角网络 / Yostar,仅限非商业使用,见 [NOTICE.md](../NOTICE.md)。
- **精简包**:同一页面的 `Stronghold-Protocol-v<版本>-lite.zip`(约 21 MB)。代码、运行依赖和前端库与完整包相同,但不带素材:美术、Spine 模型、音频、字体、表情和「玩法说明」教程图在首次启动时由 setup 从公开镜像下载(约 440 MB,显示进度,可中断续传;镜像设置见下面的「国内镜像下载」)。官方 3D 棋盘等本地客户端素材需要用本机客户端提取,或从同一版本的完整包复制(第 6 节)。适合下载大文件不方便、或想先下一个小包的情况;放置方式同完整包。
- **完整包(推荐)**:在仓库的 [Releases](https://github.com/sganggs/Stronghold-Protocol/releases) 页面下载最新版本的 `Stronghold-Protocol-v<版本>.zip`(约 430 MB,解压后约 625 MB;已含运行依赖、前端库和全部素材,包括官方 3D 棋盘等本地客户端素材),解压后把里面的 `Stronghold-Protocol` 文件夹放到上述位置。不需要 Git,首次启动也不用再下载素材。素材版权归上海鹰角网络 / Yostar,仅限非商业使用,见 [NOTICE.md](../NOTICE.md)。
- **精简包**:同一页面的 `Stronghold-Protocol-v<版本>-lite.zip`(约 22 MB)。代码、运行依赖和前端库与完整包相同,但不带素材:美术、Spine 模型、音频、字体、表情和「玩法说明」教程图在首次启动时由 setup 从公开镜像下载(约 460 MB,显示进度,可中断续传;镜像设置见下面的「国内镜像下载」)。官方 3D 棋盘等本地客户端素材需要用本机客户端提取,或从同一版本的完整包复制(第 6 节)。适合下载大文件不方便、或想先下一个小包的情况;放置方式同完整包。
- **源码**:
```powershell
git clone https://github.com/sganggs/Stronghold-Protocol.git C:\Stronghold-Protocol
```
3. 双击 `C:\Stronghold-Protocol\scripts\start-windows.bat`。首次会:安装依赖(`npm ci`;整合包已含,跳过)→ 复制前端库(整合包已含,跳过)→ 下载约 440 MB 素材(完整包已含,跳过;精简包和源码在这一步下载,显示进度,中断后再次启动会续传)→ 若检测到本机的明日方舟客户端,询问是否提取官方贴图(可跳过)→ 启动服务器并打开浏览器。
3. 双击 `C:\Stronghold-Protocol\scripts\start-windows.bat`。首次会:安装依赖(`npm ci`;整合包已含,跳过)→ 复制前端库(整合包已含,跳过)→ 下载约 460 MB 素材(完整包已含,跳过;精简包和源码在这一步下载,显示进度,中断后再次启动会续传)→ 若检测到本机的明日方舟客户端,询问是否提取官方贴图(可跳过)→ 启动服务器并打开浏览器。
4. 窗口里会打印朋友可用的地址,例如 `http://192.168.1.23:3000`。用另一台设备打开它确认能进入。关闭窗口即停止服务器。
等价的手动命令:`npm ci`、`node tools/setup.mjs`、`npm start`。
@@ -204,7 +204,7 @@ https / wss 说明:页面通过 https 打开时客户端自动连接 `wss://
## 3. Docker
```bash
# A) 构建时下载素材(需要联网,约 440 MB)
# A) 构建时下载素材(需要联网,约 460 MB)
docker build -t stronghold-protocol --build-arg FETCH_ASSETS=1 .
docker run -d --name stronghold -p 3000:3000 --restart unless-stopped stronghold-protocol
+19 -17
View File
@@ -41,7 +41,8 @@ swaps in one wave already answered; the moving leaders' routes checked; 野鬃,
reproduced) → §25.18; CB5, match flow and UI (a module's 特性追加 line after the class trait, the new shop slot filled at
the upgrade, an eliminated player following a player through every round, the boss field and its leader in a watcher's
boss prep, the pair together in the boss prep with the official green frames; PRs #189 / #191 reused, not merged; the
battle-history and hotkey requests left to the owner) → §25.19; language packs, the first type of content packs (a
battle-history request postponed by the owner, the hotkey request built in §25.15) → §25.19; language packs, the first
type of content packs (a
language is a file in the language folder) → §25.20; the last stream of that batch, CB1, bonds, strategies and items (the
谢拉格 wind's endless freeze, 埃芒加德's and M3茧甲's 复活 as a knock-out and a free redeploy, 佩佩's paid refresh, the 炎佑 on
the medic's slot, 凯瑟琳's offer, the hidden layers on the result card; the official behaviours pinned) → §25.21.
@@ -1554,8 +1555,8 @@ briefing types' share of the waves).
### 25.19 Community reports of 2026-10-06, stream CB5: match flow and UI — `ui/loadoutModel.js traitLines`, `player/economy.js _openLevelSlots`, `match/watch.js _followScout`, `match/views.js prepFieldMeta / bossMateView`, `render/app.js syncMates`, `ui/gameLogic/camera.js teamFrameIds`
CB5 took the items about the match flow and the screens (16.2, 19, 51, 55, 56 of the list; 22 and 48 are features the
owner has not decided — what each would take is at the end). Each was reproduced first (a script, or the real server in
CB5 took the items about the match flow and the screens (16.2, 19, 51, 55, 56 of the list; 22 and 48 are feature
requests — 22 postponed by the owner, 48 built in §25.15 —, both at the end). Each was reproduced first (a script, or the real server in
headless Chrome for the screens), checked against the official data, PRTS and the official tutorial pages, then fixed in
one commit with its tests; two open community PRs were reused without merging them (§25.19.6).
@@ -1653,19 +1654,20 @@ one commit with its tests; two open community PRs were reused without merging th
`bossPairing` field; #191's 联防 frames and the phase banner naming the partner are not built. If the owner still wants
them, they can go on top of this.
#### 25.19.7 Not built — what the two feature requests would take (the owner has not decided)
#### 25.19.7 The two feature requests: battle history postponed by the owner, custom hotkeys built (§25.15)
- **22 战绩 / 分队胜率**: the result is already complete (`m.result`: per-player stats, lineup, band, bonds, titles, rounds
passed, victory — `server/match/results.js`). With no accounts the simplest is per browser: append a compact record at
`m.result` to localStorage (capped, e.g. the last 200; only matches of ≥ 2 rounds, as asked), a 战绩 screen in the lobby
(list, win rate per strategy / core bond / mode and difficulty, 导出 / 导入 like the loadout), tests and i18n — no
server change. Server-side history needs persistence and an identity the remake does not have. Decisions: browser-only
or not; what 「分队」 groups by (strategy, core bond, lineup); the sample cap.
- **48 自定义快捷键**: the keys are fixed in `ui/gameLogic/shortcuts.js shortcutFor` (R 刷新, F 冻结, D 升级, Q 撤退, X 出售,
Space 准备 / 暂停, Esc). It would take a 快捷键 section in 设置 (capture a key per action, conflicts refused, 恢复默认),
a sanitised map in the settings (`sanitizeSettings`), `shortcutFor` reading it, every `<kbd>` hint and tooltip reading it
too, i18n and tests. Decision: whether to allow it at all (the official PC client's keys are fixed as far as the data
shows: `pc_key_holder` hints).
- **22 战绩 / 分队胜率** — postponed by the owner; what it would take: the result is already complete (`m.result`:
per-player stats, lineup, band, bonds, titles, rounds passed, victory — `server/match/results.js`). With no accounts the
simplest is per browser: append a compact record at `m.result` to localStorage (capped, e.g. the last 200; only matches
of ≥ 2 rounds, as asked), a 战绩 screen in the lobby (list, win rate per strategy / core bond / mode and difficulty,
导出 / 导入 like the loadout), tests and i18n — no server change. Server-side history needs persistence and an identity
the remake does not have. Decisions left for then: browser-only or not; what 「分队」 groups by (strategy, core bond,
lineup); the sample cap.
- **48 自定义快捷键** — built in 0.2.0: §25.15 (W5AC; the community request 「快捷键可不可以自己设置」, the owner's decision of
2026-10-07). 设置 → 快捷键 rebinds 刷新, 冻结, 升级, 撤退, 出售 and 准备就绪 / 暂停 (Esc stays fixed); the key map lives in
the settings (`sanitizeSettings`) and `shortcutFor`, the facing wheel and every key hint read it. One difference from
the estimate that stood here: a key another action has is swapped, not refused. The official PC client's keys are
fixed as far as the data shows (`pc_key_holder` hints), so the shortcuts are the remake's own.
### 25.20 Language packs: a language is a file in the language folder, the first type of content packs (W5AD; the owner's decisions of 2026-10-07) — `shared/packs.js`, `shared/i18nPacks.js`, `shared/i18n.js`, `shared/i18nData.js`, `server/packs.js`, `server/http/static.js`, `public/js/ui/lang.js`, `public/js/data.js`, `tools/i18n.mjs`, `tools/packs.mjs`, `tools/build-i18n.mjs`, `tools/package.mjs`, docs/I18N.md §5, docs/PACKS.md
@@ -1715,8 +1717,8 @@ one commit with its tests; two open community PRs were reused without merging th
`ko.json`, `zh-TW.json` built with `build-i18n --lang` (ja 96.5 %, ko 97.4 %, zh-TW 91.1 %) and minimal UI packs
`public/i18n/ja.json`, `ko.json`, `zh-TW.json` — a `_meta` manifest (its own and English name, credits: the official
client data via ArknightsAssets) and no UI strings yet: `ja` / `ko` fall back to English, `zh-TW` to the Simplified
Chinese UI (no fallback — the owner's choice; [ASSUMED] numbers in 萬 / 億). The menu shows the five languages as
buttons. UI translations are welcome from the community (docs/I18N.md §5 "Shipped packs").
Chinese UI (no fallback — the owner's choice; [ASSUMED] numbers in 萬 / 億). With five languages the menu is
a list (buttons up to four). UI translations are welcome from the community (docs/I18N.md §5 "Shipped packs").
- **The output in Chinese and English did not change**: `test/i18n-packs.test.js` renders every msgid of
`public/i18n/en.json` in both languages with sample params and compares it with the renderer of 0.2.0 before packs;
`node tools/build-i18n.mjs --check` still finds `data/i18n/en.json` up to date. One English entry was added, the tab