2D 横版 联机 小游戏:在一列可重组的列车上探索、协作、战斗与自动化。角色使用 Potatoblock 共用皮套,挂在 主站 网页体系里(登录、大厅入口、CD 上线)。
| 游玩(生产) | game.potatoblock.com → 阈限月台 |
| 本仓 | 玩法 / 协议 / 资源的 source of truth |
| 门户对接 | Potatoblock-Game(只 vendor 挂载,不要在那里日常改玩法) |
本地目录名可能仍是 potatoblock-avatar-lobby/,内容与本仓对应。
你在 月台 / 列车 世界里以皮套角色移动:走过道、跨车厢、捡放物资、与他人同房联机。
| 车厢 | 作用概要 |
|---|---|
| 动力车厢 | 锅炉与燃料;影响列车驱动 |
| 仓储车厢 | 物资存放与搬运 |
| 卫兵防御车厢 | 双联炮塔、弹药箱;可入座射击 |
| 绘轨车厢 | 探测 / 视野类能力(与自动化传感器配合) |
| 枢机车厢 | 全屏控制台:为各节车厢编写自动化规则 |
列车可挂多节同类或不同类车厢;小地图 / 列车图用于定位。
- 移动与交互:行走、攀爬/过道、靠近设备按交互键(锅炉、炮塔座位、仓储、枢机控制台等)。
- 库存与双手:地面掉落、背包、双手持物;弹药、煤炭、废料、炮塔弹等可搬运与装填。
- 战斗:手持武器射击;卫兵车厢可入座操作炮塔(人数少时可一人控双塔)。
- 列车驾驶:油门 / 刹车、燃料消耗;汽笛等反馈。
- 自动化(枢机):在控制台为指定车厢写「条件 → 行为」规则(统一优先级列表;while/edge 为行属性;冲突域互斥)。详见
docs/liminal-auto-program.md。
公共月台或房间码进房;姿态、外观、聊天、开火、库存与世界快照由服务端权威同步。协议说明见 docs/liminal-protocol.md(与皮套大厅的 avatar 协议不是同一套)。
不换引擎、不另起一套生产服:仍挂在 Potatoblock 同一实例 上。
| 层 | 选择 |
|---|---|
| 渲染 / 客户端 | Canvas 2D;现有 JS 逐步迁 TypeScript(Vite:client/src/ → static/js/lp-*.js) |
| 服务端 | Python + FastAPI;WebSocket 房间;库存 / 世界等权威逻辑可测、从 WS 处理拆出 |
| 改动顺序 | 协议(TS + Python + 文档)→ 服务端权威 → 画面 / 操作 |
| 不做 | 换 Godot 等引擎;为月台单独换 Node/Go/Rust 公网服;用 submodule 当 CD 主路径 |
前端 Phase 1 已迁网络会话:client/src/ → npm run build → lp-network.js / lp-session.js。发布前脚本会校验协议版本并对齐镜像:
python3 scripts/prepare_liminal_release.pypush-liminal-platform.py / 主站 push-github.py --package …/avatar-lobby 会自动跑上述准备,避免忘构建。
改玩法 / 协议 / 资源 → 本仓 Liminal-Platform
登录、大厅入口、MCS CD → Potatoblock-Game(vendor 进 games/* → CD → /app)
| 步骤 | 仓 | 触发 |
|---|---|---|
| SoT CI | 本仓 | .github/workflows/ci.yml — prepare + mapping 冒烟 |
| Vendor | 本仓 → Game | .github/workflows/vendor-to-game.yml — 读 potatoblock-vendor.json |
| MCS | Game | 既有 deploy.yml → deploy.py → MCSM_UPLOAD_DIR 默认 /app |
扩展新 SoT:复制 potatoblock-vendor.json 的 mappings / prepare / runtime,不必改 Game 的 deploy.py。
生产路径(与 config runtime 一致):
| 角色 | 路径 |
|---|---|
| MCS 解压根 | /app |
| 月台代码 | /app/games/liminal_platform |
| 大厅代码 | /app/games/avatar_lobby |
| HTTP | /liminal-platform、/avatar-lobby |
| 静态 | /static/games/liminal-platform、/static/games/avatar-lobby |
Liminal Actions Secret: POTATOBLOCK_GAME_TOKEN(Contents: Write on Potatoblock-Game)。
推送 .github/workflows/: LIMINAL_PLATFORM_GH_TOKEN 还需 Workflows 权限(classic PAT 的 workflow scope)。权限就绪后:
python3 ~/.cursor/skills/potatoblock-deploy/scripts/push-liminal-platform.py \
--include-workflows --skip-build --message "ci: enable vendor Actions"并在 Liminal 仓配置 Secret POTATOBLOCK_GAME_TOKEN。在此之前 workflow 文件只在本地 potatoblock-avatar-lobby/.github/workflows/;可用本地 vendor:
POTATOBLOCK_GAME_TOKEN=… python scripts/vendor_to_game.pyToken(本地 potatogame/.env) |
用途 |
|---|---|
LIMINAL_PLATFORM_GH_TOKEN |
推送 本仓 |
GH_TOKEN |
本地直推 Potatoblock-Game(可选;CI vendor 用 POTATOBLOCK_GAME_TOKEN) |
# 只更新本仓(推 main 后 Actions 可自动 vendor → Game → MCS)
python3 ~/.cursor/skills/potatoblock-deploy/scripts/push-liminal-platform.py \
--message "feat: …"
# 本地手动 vendor(跳过 SoT Actions 时)
python3 ~/.cursor/skills/potatoblock-deploy/scripts/push-github.py \
--worktree …/potatogame/.deploy-worktree \
--package …/potatogame/potatoblock-avatar-lobby \
--message "deploy: vendor liminal"约定:Cursor skill liminal-platform-dev、potatoblock-deploy;挂载包内见 SOURCE.md。
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python run_local.py本地鉴权为 stub(固定测试身份)。生产鉴权只在主站实例。
改 TS 客户端时:npm install && npm run build(或依赖推送脚本里的 prepare)。
Liminal-Platform/
├── run_local.py # 仅本地启动
├── requirements.txt
├── package.json / client/ # TS 源 → Vite 构建进 static/js
├── docs/
│ ├── liminal-protocol.md # 月台 WS 协议
│ ├── liminal-auto-program.md
│ ├── networking-plan.md # 皮套大厅联网(旁路,非月台协议)
│ ├── skin-format.md
│ └── motion-references.md
├── potatoblock-vendor.json # SoT → Game 路径映射(CD 扩展面)
├── scripts/prepare_liminal_release.py
├── scripts/potatoblock_vendor.py / vendor_to_game.py
├── .github/workflows/ # ci + vendor-to-game
├── game/Liminal_Platform/ # 开发镜像(与挂载包同步)
└── app/
├── main.py / routers/ # 仅本地 stub(不上 Game 仓)
└── games/
├── liminal_platform/ # 月台挂载包(主站 vendor 目标)
├── avatar_lobby/ # 皮套大厅(同包 vendor)
└── common/
game/Liminal_Platform/ 与 app/games/liminal_platform/ 应一致。一侧改完后用 rsync 或 prepare 脚本对齐。
仅本地、不进主站包: run_local.py、app/main.py、app/routers/、app/static/、var/、音频 static/audio/.work/ 等中间产物。
- 月台 WebSocket 协议
- 枢机自动化编程
- 皮套大厅联网权威(大厅,非月台协议)
- 皮套格式
- 动作参考
代码归属 Potatoblock-Dev。第三方素材(Kenney Mobile Controls、Kenney Game Icons、Kenney Input Prompts Pixel 等)遵循其各自许可证(多为 CC0);使用时保留原作者说明即可。图标目录见 app/games/liminal_platform/static/img/ui/。