Stronghold-Protocol README

The project's README from github.com/sganggs/Stronghold-Protocol. As one markdown file: README.md.

卫戍协议:盟约 · Stronghold Protocol: Covenant

《明日方舟》季节性自走棋塔防玩法「卫戍协议:盟约」的非官方同人复刻:浏览器即开即玩,单人或 1–4 人联机合作。

version license node

声明

[!IMPORTANT]

  • 本项目是玩家自制的非官方同人作品,与上海鹰角网络科技有限公司(Hypergryph)、Yostar 及其关联方没有任何关系,未获其授权或认可。
  • 《明日方舟》及「卫戍协议」相关的名称、角色、美术、音乐、音效、文本与数据等素材,版权归原权利人所有。这些素材不适用本项目的 GPL-3.0 许可证;GPL 只覆盖本项目自己编写的代码。
  • 仅供学习交流与个人非商业使用。严禁任何形式的盈利,包括但不限于:售卖本项目或整合包、付费下载或付费分发、收费服务器或收费代开、广告 / 打赏 / 会员等变现方式,以及其他任何商业用途。
  • 仓库源码不包含游戏的美术与音频素材(只有由官方数据表生成的数据和几张游戏截图,同样不适用 GPL);Releases 中的整合包为了方便玩家附带了素材,下载即视为同意本声明。请勿将素材用于本项目以外的用途或单独再分发。完整条款见 NOTICE.md。
  • 权利人如认为本项目侵犯其权益,请通过 Issue 联系,我们会立即删除相关内容。
  • 本项目按「现状」提供,不提供任何担保,使用风险自负。

English summary: below.

同盟房间 策略轮选 休整期(商店 / 盟约)
房间 策略 休整期
部署方向轮盘 作战 最终攻势
方向 作战 最终攻势

目录

简介

「卫戍协议:盟约」是自走棋 + 塔防:休整期在调度中心招募干员、摆阵、配装备,作战期干员自动部署,迎击从红门涌来的敌人,漏过去的敌人扣目标生命值。本项目在浏览器里复刻了这一玩法,规则和数值尽量对照官方数据表与 PRTS 核对。

功能一览

快速开始

方式一:整合包(推荐)

整合包里已经包含代码、运行依赖和全部美术 / 音频(含官方 3D 棋盘贴图),解压就能玩,不需要再下载任何东西。

  1. 安装 Node.js 22 或 24(LTS)
    • Windows:在 PowerShell 里运行 winget install OpenJS.NodeJS.LTS,或到 https://nodejs.org/zh-cn/download 下载安装包。
    • macOS:brew install node@22,或到官网下载安装包。
    • Linux:发行版的包管理器、nvm 或 fnm。
  2. 下载:在 Releases 页面下载最新版本(v0.1.1)的整合包(zip),解压到一个路径较短的文件夹(Windows 上建议不要放在 OneDrive 同步的目录里)。
  3. 启动
    • Windows:双击 scripts\start-windows.bat。如果弹出「安全警告」,点「运行」;Windows 防火墙弹窗请勾选「专用网络」并允许。
    • macOS / Linux:在解压出的文件夹里运行 ./scripts/start.sh(或 bash scripts/start.sh)。
  4. 浏览器会自动打开 http://localhost:3000。窗口里列出的局域网地址可以直接发给同一网络的朋友。关闭窗口(或按 Ctrl+C)即停止服务器。

方式二:从源码运行

git clone https://github.com/sganggs/Stronghold-Protocol.git
cd Stronghold-Protocol
npm install        # 安装依赖(postinstall 会把 pixi / preact / three 复制到 public/vendor)
npm run setup      # 检查环境,并从公开镜像下载约 250 MB 美术 / 音频(可中断,再次运行会续传)
npm start          # 启动服务器:http://localhost:3000

也可以直接运行启动脚本(Windows scripts\start-windows.bat,macOS / Linux scripts/start.sh):首次会自动安装依赖、下载素材,然后启动服务器并打开浏览器。

系统要求

项目 要求
开服的电脑 Windows / macOS / Linux,Node.js 22 或 24(LTS);磁盘约 400–500 MB(素材、依赖与可选的本地提取贴图);内存空闲约 100 MB,每局再加几 MB
玩家 支持 WebGL 的现代浏览器(Chrome / Edge / Firefox / Safari 最新版),电脑、手机或平板(横屏)
网络 首次进入游戏时,每位玩家要从开服的电脑下载几十 MB 素材(之后走浏览器缓存);对局中流量很小

显卡较弱时可以在「设置」里调低画质,或在网址后加 ?board=2d(强制 2D 棋盘)/ ?render=fallback(不用 WebGL 的简化画面)。

端口与配置

默认监听 TCP 3000。换端口:启动脚本加 --port 3001,或设置环境变量 PORT。

环境变量 默认 说明
PORT 3000 监听端口
HOST 0.0.0.0 监听地址(127.0.0.1 = 只允许本机,放在反向代理后面时使用)
SP_COMBAT client client:各玩家浏览器模拟自己的战斗(服务器负载极低);server:由服务器模拟并推流
SP_VERIFY off 服务器复算客户端上报的战斗结果:off / sample(约 1/8 抽查)/ all(全部复算,更耗 CPU)
TRUST_PROXY auto 是否信任 X-Forwarded-For 等转发头:auto 只信任来自本机 / 内网的代理;1 总是;0 从不
DEBUG 空 设为任意值输出详细日志
SP_NO_BROWSER 空 设为 1 时启动脚本不自动打开浏览器

设置方式:macOS / Linux PORT=8080 npm start;PowerShell $env:PORT=8080; npm start;cmd set "PORT=8080" && npm start。健康检查:GET /healthz。

和朋友一起玩(局域网)

  1. 打开页面 → 输入昵称 → 同盟模拟 → 创建房间。房主选择难度,可以添加 / 移除 AI 队友。
  2. 把 4 位字母的同盟密钥,或「复制链接」得到的 http://<地址>:3000/?room=密钥 发给朋友。
  3. 所有人点「准备就绪」后房主开始。
  4. 同一 Wi-Fi / 路由器下的朋友打开启动窗口里列出的地址(形如 http://192.168.x.x:3000)即可。打不开时多半是防火墙:Windows 首次启动时在弹窗中允许「专用网络」,或运行 npm run doctor 查看具体命令;访客 Wi-Fi 常开启「AP 隔离」,也会导致连不上。

刷新页面或断线后,同盟模拟 10 分钟内、独立模拟 24 小时内重新打开即可回到原座位。服务器把房间和对局都保存在内存里,重启服务器会结束所有对局。

联机方式

朋友不在同一个局域网时,下面是几类常见做法,按自己的情况选一种即可。这里只做简单介绍,提到的工具和服务只是举例,本项目与它们没有任何关系,也不做推荐;具体的安装、费用和使用规则请以各自的官方说明为准。部署细节(防火墙、开机自启、反向代理与 HTTPS、Docker)见 docs/DEPLOY.md。

方式 怎么做 适合
同一局域网直连 把启动窗口里的局域网地址发给朋友 同一个家、宿舍或网吧
组网工具(虚拟局域网) 例如 Tailscale、ZeroTier、EasyTier、蒲公英:开服的人和朋友都安装同一个工具并加入同一个网络,朋友用开服电脑的虚拟 IP 访问 http://<虚拟 IP>:3000 固定的几个熟人;不暴露到公网。朋友也要装客户端,部分工具需要注册账号;跨地区时可能走中继而变慢
内网穿透 / 隧道 只有开服的人运行客户端,朋友直接打开网址。例如自建的 frp(需要一台有公网 IP 的服务器)、Cloudflare 的 cloudflared tunnel --url http://localhost:3000(临时地址,每次启动都会变;国内访问延迟可能较高)、国内的樱花 frp 一类公共穿透服务(通常需要实名,大陆节点承载网页可能有备案要求) 不想改路由器、没有公网 IP;免费线路带宽小时,首次加载素材会慢一些
云服务器 / VPS 直接部署 在 VPS 上运行整合包,或用仓库自带的 Dockerfile;用 Caddy / Nginx 加上 HTTPS。选离玩家近、线路好的地区(面向大陆玩家时,境外机房要关注回程线路,否则晚高峰延迟可能很高;大陆服务器绑定域名需要 ICP 备案) 想长期开服、玩家分布在不同地区

通用注意事项:

操作

操作 方法
购买 / 升级调度中心 / 机变选卡 点一次选中,再点一次确认(D 升级)
部署 / 移动干员 从整备区拖到棋盘格 → 出现方向轮盘 → 往上 / 右 / 下 / 左滑动选择朝向后松手;松在中心或点「✕ 点击取消」取消。拖动时模型在指针 / 手指下,指针所在的格子就是落点
调整朝向 把干员拖回它自己的格子,再选方向
出售 / 撤退 / 销毁装备 点击单位所在的格子 → 底部按钮「出售 +1」「撤退」;也可以把棋盘上的干员拖回整备区撤退。整备区里的装备与法术只能「销毁」,已配发的装备锁定在干员身上(干员出售或合成精锐时退回整备区)
装备 把装备拖到干员所在的格子上(每人 2 件;满了会弹出替换窗口,被替换的一件会被销毁);法术拖到地块上并选方向
查看详情 右键或长按单位 / 卡牌(属性为实时数值,高于基础值为绿色、低于为红色)
快捷键 R 刷新 · F 冻结 · D 升级 · Space 准备就绪 · Esc 取消 / 关闭
方向轮盘键盘操作 方向键预览 · Enter 确认 · Esc 取消
暂停(独立模拟) 作战中(含最终攻势 / 隐秘核心)点顶栏的「暂停」或按 Space,再点「继续作战」(或 Space)继续;同盟模拟的作战不能暂停
表情 左下角「交流」,左右滑动(或方向键)换主题,冷却 1 秒
观战 自己的作战结束后(或休整期)点左侧队友头像 →「前往查看」

完整的规则、数值和小技巧见 docs/PLAYING.md(游戏内左下角也有「玩法说明」)。

文档

文档 内容
CHANGELOG.md 更新记录:每个版本修复了什么、哪些反馈经核实不是问题
docs/PLAYING.md 玩法指南:流程、经济、招募与晋升、摆阵、联防、盟约、最终攻势、结算称号
docs/DEPLOY.md 部署指南:Windows 开服与开机自启、防火墙、组网 / 隧道、反向代理与 HTTPS、Docker、systemd、排错
docs/DESIGN.md 架构与契约(英文):技术栈、目录分工、网络协议、渲染与 UI、各次试玩后的规则修订
docs/SIM.md 战斗模拟引擎参考(英文):钩子、技能描述格式、职业默认行为
docs/META.md 对局与经济引擎(英文):回合流程、商店、联防、最终攻势的实现细节
docs/DATA.md 由官方数据表生成的游戏数据(英文)
docs/ASSETS.md 素材来源、目录结构与清单(英文)
docs/BALANCE.md 难度模型与测量(英文)
docs/research/ 官方规则、数据与界面的调研记录

开发与测试

npm run dev                 # node --watch:改动服务器代码后自动重启
node --test                 # 单元 + 集成测试(约 3170 项;缺少素材 / 浏览器的用例会自动跳过)
SP_E2E=1 node --test test/ui/mock.e2e.test.js        # 浏览器端到端测试,需要本机 Chrome(CHROME_PATH 可指定路径)
SP_REAL_E2E=1 node --test test/ui/real.e2e.test.js   # 需要 Chrome + 已下载的素材
RENDER_E2E=1 node --test 'test/render/*.browser.test.js'   # 渲染测试,部分需要本地提取的棋盘贴图

项目结构

路径 内容
server/ Node HTTP 静态服务 + WebSocket(/ws)、大厅、对局引擎(match/)、战斗模拟(sim/,浏览器与服务器共用)
shared/ 前后端共用的常量与网络协议
public/ 浏览器客户端(原生 ES 模块,PixiJS + pixi-spine、three.js 3D 棋盘、Preact + htm UI)
data/ 由官方数据表生成的游戏数据与素材清单 assets.json
tools/ setup.mjs / doctor.mjs、素材下载 fetch-assets.mjs、数据构建、本地提取 local-extract/
scripts/ 启动脚本(Windows / macOS / Linux)、Windows 开机自启
docs/ 文档与调研
test/ node:test 测试

许可证

致谢与数据来源

感谢以上项目的作者与维护者,以及鹰角网络带来的这款游戏。

贡献

欢迎提 Issue 反馈 bug、与官方规则不一致的地方或改进建议,也欢迎提交 Pull Request:


English

An unofficial, non-commercial fan remake of Arknights' seasonal auto-chess tower-defense mode Stronghold Protocol: Covenant, played in the browser: solo, or 1–4 player co-op (AI teammates can fill seats). Combat is simulated in each player's browser, so a low-power PC can host.

Stronghold-Protocol (sganggs/Stronghold-Protocol)

Searching Database…

这是什么?Stronghold Protocol: Covenant 是一个非官方、非商业的同人重制项目,复刻了明日方舟的季节限定自走棋塔防玩法,可在浏览器中单人游玩,也可由 1-4 名玩家合作联机。
这是独立的游戏客户端,还是需要安装到别的什么上面?这是一款自托管的网页游戏:一个小型 Node.js 服务器负责大厅和经济系统,而战斗本身和官方模式一样是在每个玩家的浏览器里模拟的,所以一台低配置机器就足以架设。
怎么让它跑起来?最简单的方式是使用 Releases 里的一体化整合包:安装 Node.js 22 或 24,然后在 Windows 上运行 scripts/start-windows.bat,或在 macOS/Linux 上运行 ./scripts/start.sh。从源码运行则是 npm install && npm run setup && npm start,其中 setup 会从公共镜像下载约 250MB 的美术资源。
架设一局游戏需要安装什么?只需要 Node.js 22 或 24(LTS),以及约 400-500MB 磁盘空间来存放整合包(代码、依赖和全部美术/音频)。连入的玩家只需要一个支持 WebGL 的现代浏览器。
我可以分发这个项目,或者用它开付费服务器吗?不可以。项目自身的代码采用 GPL-3.0,但其中捆绑的明日方舟美术、音乐、音效、文本和数据仍归原权利方所有,不在该许可证覆盖范围内,因此仅供学习/个人使用,明确禁止售卖、付费服务器、广告和捐赠。
架设机器必须是 Windows 吗,Linux/macOS 行不行?三者都可以:服务器可在装有 Node.js 的 Windows、macOS 或 Linux 上运行,玩家只需在桌面端、手机或横屏平板上用支持 WebGL 的现代浏览器(Chrome、Edge、Firefox 或 Safari)。
联机合作具体是怎么运作的?最多 4 名玩家共享一个「联盟」房间和同一卡池,没有 PvP;空位可以由 AI 补齐,而且如果有人在队友打出完美一轮时放进了敌人,那位队友的队伍会帮忙拦截漏网之鱼。
实际实现了多少干员和技能?收录了 112 名可招募干员(以及他们的精英化晋升),全部 283 个技能均为手工实现,其天赋、特性和数值都对照官方数据表和 PRTS wiki 做了交叉核对。
对局中途断线会怎样?合作模式中你可以在 10 分钟内重新拿回自己的座位(你的队伍会自动战斗,你也可以把自己标记为暂离交由 AI 控制),而单人进度可在同一浏览器中于 24 小时内继续。
游玩需要官方 3D 棋盘吗?不需要。3D 棋盘需要从本地安装的明日方舟客户端中提取纹理;没有它,游戏会自动回退到 2D 棋盘,玩法功能毫无损失。
Creator
sganggs
Size
37.9 MB
Stars
1.5K
Age
15d
Commits · 90 Days