starraid/AGENTS.md
JOJO ab403f4cc7 后端化:账号系统+排行榜+图鉴收集同步+飞行员大厅(零依赖Node+SQLite)
- server/:node:http+node:sqlite 零依赖后端(users/sessions/user_stats/codex_unlocks/runs 五表)
- 安全:scrypt密码哈希/服务端session/全prepared statement/输入白名单/限流/CSP等安全头/静态白名单防穿越
- 前端:o-auth登陆注册 + o-home飞行员大厅(排行榜Top100三排序+图鉴展柜背景:随机3主3副2僚机+刷怪巡游)
- 图鉴改为收集点亮制(未收集=剪影+???),服务端codex_unlocks与本地并集同步
- 修复:回标题/大厅后背景卡在上场残影——render按battleUI门控+离场G=null;空闲=星空
- 结算上报:endRun/rush胜利两处submitRun,Boss击杀计数入排行榜
- playwright全流程验证通过(注册/登陆/游戏/结算/图鉴/安全注入/限流);游戏视觉未验收(用户亲自)
2026-08-06 04:20:25 +08:00

102 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AGENTS.md — Star Raid 工作区
**这个工作区只做一个项目Star Raid像素风竖版弹幕射击游戏。** 无关项目已移至 `~/Desktop/测试1`,不要在这里新建其他项目的文件。
## 项目概述
- 客户端:纯 HTML5 Canvas + 原生 JavaScript**无构建、无依赖、无框架**
- 服务端:**零 npm 依赖** Node 原生(`node:http` + `node:sqlite`,要求 Node≥22.5SQLite 存储
- 240×320 像素画布,竖版弹幕射击(主武器/副武器/僚机/Boss 战/Boss Rush 模式)
- 账号系统:注册/登陆(用户名+邮箱+密码)、大厅排行榜 Top100、图鉴收集点亮同步
- 游戏本体在 `star-raid/` 子目录,后端在 `star-raid/server/`,部署见 `star-raid/DEPLOY.md`
## 常用命令
```bash
cd star-raid
# 语法检查(每次改完 JS 必须跑server/ 也要查)
for f in js/*.js server/*.js; do node --check "$f" || echo "FAIL $f"; done
# 启动完整版(游戏+后端Node≥22.5
node server/server.js # 或 npm start访问 http://localhost:8643
# 注意8643 现由 node server 占用;旧 python http.server 试玩方式已废弃
# 数据库star-raid/data/starraid.dbgit 忽略,删除重启自动重建空库)
# Git仓库根 = 工作区根目录,游戏在子目录)
git add -A && git commit -m "提交信息"
```
## 验证规则(最高优先级,违反会被用户骂)
1. **游戏视觉/手感禁止 Agent 验收**——用户亲自验收。但**账号/大厅/排行榜/结算上报等功能流允许 playwright 测试**(用户 2026-08-06 明确授权):注册/登陆/数据断言可跑,只是不许用截图评判游戏画面效果。
2. 交付时必须诚实标注验证状态。
3. 完成了操作 ≠ 任务完成,未经验证不得说“修复了/完成了”。
## 项目结构
```
star-raid/
├── index.html # 入口 + 全部覆盖层 UI 结构
├── css/style.css # 全部样式(像素风 UI 变量配色)
├── server/ # 后端(零依赖 node:http+node:sqlite
│ ├── server.js # 入口:静态白名单+/api路由+安全头
│ ├── db.js # SQLite schemausers/sessions/user_stats/codex_unlocks/runs
│ ├── auth.js # scrypt密码哈希+服务端session
│ ├── api.js # API处理器CODEX_KEYS 白名单(新增装备必须同步!)
│ └── util.js # body解析/限流/输入校验
├── data/ # SQLite 数据库git 忽略)
├── js/
│ ├── config.js # BAL 平衡参数、常量
│ ├── data.js # WEAPONS/SUBS/DRONES 装备数据表
│ ├── core.js # 游戏状态 G、发射逻辑、explodeFx 爆炸特效库
│ ├── combat.js # 子弹运动/碰撞/光束判定/zones 区域效果
│ ├── enemies.js # ENEMIES 杂兵表、BOSSES 表、bossMain/bossMinor 攻击库
│ ├── render.js # 世界渲染battleUI 门控只在战斗界面绘制游戏对象)
│ ├── boss_art.js # Boss 美术库drawProgenitor/drawAssault/drawPiano/drawUsurper/drawSaucer
│ ├── sprites.js # 像素字符画 bake 系统、SPR 精灵表、BHALO 弹光晕
│ ├── audio.js # SFX 音效WebAudio 合成)
│ ├── net.js # NETAPI 客户端fetch 封装/图鉴同步/submitRun
│ ├── auth.js # 认证流程(登陆/注册/登出 + boot 引导)
│ ├── home.js # 大厅:排行榜 + 图鉴展柜背景drawHomeShowcase
│ └── ui.js # 菜单/图鉴/rush 选择/老虎机/结算submitRun 上报)
├── demo/ # 动作设计 demo不在静态白名单公网不可见
├── DEPLOY.md # 部署指南(公网/HTTPS/安全边界)
└── research/ # Boss 参考图与调研(不进 git
```
## 代码规范
- 单文件不超过 500 行;新增大功能先考虑拆模块
- 严格 `"use strict"`全局函数跨文件直接调用无模块系统script 标签顺序加载)
- 编辑技巧:`edit_file` 的 old_string 必须先 grep/sed 读原文确认(含中文注释易有不可见差异);整批替换任一失败则全部不写入
## 设计禁忌(用户铁律)
1. **AoE 区域效果禁止画圆形区域**——用纯粒子、不规则雾团、电弧(钢琴蓄力圈是唯一批准的例外)
2. **禁止恢复已删除的武器**:弹跳光碟、钻头弹、感应水雷、全息诱饵、圣水领域
3. **武器命中禁止屏幕白闪**(玩家受伤/Boss 死亡的闪光保留)
4. 子弹差异化是最高优先级:颜色/形状/运动/拖尾/命中效果五轴都要拉开
5. Boss 变形=同一几何体连续演化(裂开/展开/伸长/滑开露出),禁止部件凭空出现;俯视图禁止画立体尖塔
## Boss 设计标准
设计或修改任何 Boss 前,必须读取项目记忆 `.astrion/memory/boss_design_standard.md`(视觉公式/攻击节奏/判定同源原则/小兵差异化)。触手扫击类动作设计参考 `star-raid/demo/tentacle-sweep.html` 的"前摇→释放→后摇"三段式。
核心原则一句话:**视觉 = 判定**(碰撞坐标每帧只算一份,渲染与判定同源)。
## 工作流约定
- 大改动先讨论方案再动手;视觉效果由用户验收后再迭代
- 每完成一个逻辑单元立即 git 提交(提交信息写清改了什么+为什么)
- 项目记忆(`.astrion/memory/`)沉淀重要约定,发现新约定主动更新
## 后端约定2026-08-06 后端化)
- 客户端流程boot → `/api/me` → 未登录 o-auth登陆/注册)→ 已登录 o-home大厅用户面板+排行榜)→ o-title基地菜单
- 结算上报:`submitRun()`ui.js在 endRun 与 rush 胜利enemies.js killBoss两处调用`G.submitted` 防重
- 图鉴:服务端 `codex_unlocks` 为准,登陆时与本地 SAVE.codex 并集合并;未收集=剪影+???不可演示
- 背景规则render() 只在 battleUI()play/demoSim/pause/cards/over/slot绘制游戏对象大厅 UI="home" 时 drawHomeShowcase()30s 重抽);其余=星空
- 新增装备时必须同步 `server/api.js` 的 CODEX_KEYS 白名单(现 24+17+13+8=62
- 星币/机库/机体仍存 localStorage 不同步v1 边界,见 DEPLOY.md