# newGame **Repository Path**: yg178/Game ## Basic Information - **Project Name**: newGame - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-11-12 - **Last Updated**: 2026-11-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 命蚀之塔 · TOWER OF ERODED FATE > 以命为注,以牌为刃,登临十二层。 2026-11-11 攻防与资源循环重做:保留每角色 **59 张**职业牌,增加每人两套主题构筑、逐卡战术用途与条件/转换/延迟效果。新开局从两条主题骨架中按种子选择,再替换少量同功能卡牌,构筑界面可查看两套主题方案;载入需要拥有相应卡牌副本。完整牌表见 [角色卡牌设计](docs/角色卡牌设计.md),规则修复与验证范围见 [框架检查结果](docs/框架检查结果.md)。 费用补充:原卡池中有15张牌重做为高费牌(10张3费、5张4费),每职业各含基础、技能、能力。费用分布、门槛和职业内回能路线见 [费用配置](docs/费用配置.md)。 一款**剧情向、柔和二次元风格的 2D 卡牌构筑游戏**。你是一名被送入神秘高塔的“无冠者”:每一层都要进行一场卡牌对决,输了就死,赢了获得积分与新卡牌。积分既是通行进度,也是塔内唯一的货币。**现有积分**足够,才能打开向上的阶梯;Boss 层还必须先击败本层 Boss。十二层之后,白冠在等你。 ![标题界面](screenshots/title.png) ![角色选择](screenshots/select.png) ![塔内探索](screenshots/hub.png) ![巡塔商店](screenshots/shop.png) ![锈杯酒馆](screenshots/bar.png) ![骰子桌](screenshots/gamble.png) ![构筑牌组](screenshots/deckbuilder.png) ![随机事件](screenshots/event.png) ![塔内新闻](screenshots/news.png) ![卡牌对决](screenshots/battle.png) ![查看卡牌效果](screenshots/battle-inspect.png) ![拖动出牌](screenshots/battle-drag.png) ![胜利与新卡](screenshots/reward.png) --- ## 让朋友试玩 - 局域网、Cloudflare Tunnel、Netlify Drop、Render 固定地址的完整步骤见 [PLAYTEST.md](PLAYTEST.md)。 - 可以直接发给别人的 Windows 下载版说明见 [DOWNLOAD.md](DOWNLOAD.md)。 - **给测试者看的完整试玩说明**:[TESTER_GUIDE.md](TESTER_GUIDE.md)。 ## 运行 需要 Node.js 18+(本项目在 Node 24 下开发)。 ```bash cd E:\NewGame node server.js ``` 然后打开 。 也可以双击 `启动游戏.bat`。**不要直接双击 `index.html`**:浏览器会拦截 ES Module 与音频上下文。 无外部依赖、无构建步骤;单机流程可离线运行。对话可选接入 DeepSeek,未配置密钥时自动回退本地叙事对话。存档在浏览器 `localStorage`。 --- ## 已实现内容 ### 核心循环 - **12 层高塔**,每层一套独立的名称、配色、室内场景、叙事碎片与对手池。 - 每层在“挑战之镜”选择 **3 名随机对手**;对手的积分、生命、伤害都由同一个“战力”系数推导,**积分越高,实力越强**。 - 胜利获得 **保底积分 + 对手全部积分**;失败即死亡,本次攀登结束。 - **积分就是钱**:战斗获得的积分同时是商店货币。HUD 显示“可用积分”(可消费)和“累计积分”(历史收入)。 - 每层有更高的**现有积分**阈值。现有积分达标后,本层挑战之镜关闭,**必须前往下一层**;在此之前可以用现有积分逛本层商店、处理随机事件。 - **Boss 层:第 3 / 6 / 9 / 12 层**。Boss 逐层增强;击败 Boss 只取得通行资格,仍要保留足够现有积分。第 12 层为最终 Boss。 - 每层有 **巡塔商店**:买牌、包扎伤口(每层 2 次)、唤醒倒下的同伴、提升生命上限。消费只扣可用积分,不扣累计进度。 - 每层有 **一次随机事件**:血契、白鸦、篝火、赌局、镜中商人、醉酒的守塔人、镜中赌局、无主牌堆等,用生命、积分或选择换取卡牌与成长。 - 每层还有两处**娱乐设施**: - **锈杯酒馆**:买酒回血、请全场喝一轮提升最大生命、听酒保讲本层故事,或用积分从酒客手里换牌。 - **骰子桌**:小押/大押积分、买下赌徒的牌、听庄家讲赌桌上的故事。赌局有输有赢,积分也会真的消失。 - **生命不会在战斗后或上楼时自动恢复**。掉血就是掉血,只能靠商店、事件或卡牌治疗。 - 战斗中可以悬停手牌查看完整卡牌说明、关键词解释(刃势/灰烬/誓约/圣辉/齿轮/灼烧等)和当前资源;敌方名字下方会显示大号生命数字与格挡。 - 每场胜利 **必得一张新卡牌**,进入收藏;可在塔内祭坛调整 20 张自由牌组。 - 每层进入时播放剧情演出;在章节节点触发间章;第 3 / 6 / 9 层为阶层 Boss,第 12 层为双阶段最终 Boss 与三结局。 本轮具体变化、组合示例与验证范围见 [卡牌联动重做](docs/卡牌联动重做.md)。旧通用连携已移除。 ### 五名可玩角色 | 角色 | 定位 | 核心牌 | 独有资源 | 被动 | |---|---|---|---|---| | 烬羽 | 剑士 · 爆发/卖血 | 不归之刃 | 刃势 | 每回合首张基础牌 +1 刃势 | | 薇拉 | 术士 · 灼烧/引爆 | 余烬法典 | 灰烬 | 每回合首次施加灼烧 +1 灰烬 | | 陶恩 | 守卫 · 格挡/反伤 | 无缺口之盾 | 誓约 | 每回合首次获得格挡 +2 | | 弥娅 | 祭司 · 治疗/增益 | 未响之铃 | 圣辉 | 每回合首次治疗 +1 | | 洛可 | 机关师 · 随机/齿轮 | 命运齿轮 | 齿轮 | 每回合开始 +1 齿轮 | 每名角色有 59 张职业牌(含固定核心),合计 295 张;另有 29 张中立牌与 5 张**羁绊牌**。核心牌固定、不可替换。职业卡按原职业、扩展、核心补充、资源消费、群体应对分包管理;所有效果逐张编写。 ### 牌组规则 - 核心牌 **1 张**(固定)。 - 自由牌组 **20 张**: - 基础牌 ≥ 6 - 技能牌 ≥ 6 - 能力牌 ≥ 3 - 剩余 5 张自由 - 基础牌最多 3 张同名;技能/能力最多 2 张;羁绊牌 1 张。 - 初始牌组满足全部限制。祭坛中实时校验;不合法无法保存。 - 新卡先进收藏;牌组满 20 张时,需要先在祭坛替换。 - 构筑界面使用**大卡 + 体系标签**:每张牌标注“刃势/卖血/灼烧/灰幕/铁壁/誓约/圣辉/圣盾/齿轮/赌徒”等联动方向,右侧汇总当前牌组的主要体系。 - 对偏弱的牌做过一轮数值调整(如重压、安抚、赐福、临时炮台、应急包扎、逆鳞、余烬回响等)。 ### 战斗 - 每回合 3 点能量、抽 5 张、手牌上限 10。 - 核心牌在起手时必定出现(起手 5 张)。 - 格挡在回合开始时清空(“铁誓”等能力可保留)。 - 敌人有**明示意图**:攻击 / 格挡 / 强化 / 削弱 / 特殊。 - 出牌为**拖动式**:按住卡牌向上拖,拖过战场分隔线后松开;拖回则取消。 - 状态:力量、敏捷、虚弱、易伤、破甲、中毒、灼烧、再生、荆棘、仪式。 - 多段攻击、群体辅助、能量循环、能力叠加、随机机关。 - 敌人 12 种原型(含断刃客、焚典者、守誓者、祭司、机关、野兽、邪教徒、无面者、游侠、炼金术师、决斗者、先知),每种有独立被动、招式和台词。 - 最终 Boss「白冠·瑟琳」拥有二阶段。 ### 多人 - 支持 **2–3 人同行**。 - 队友可由 **AI 控制**,或选择 **同屏接管**(下一位玩家在其回合操作该角色)。 - 同屏接管的角色回合开始时会弹出**交棒提示**,避免多人抢操作。 - 多人时敌人生命按队伍规模提高;队友有独立生命、牌组、能量与资源。 - 队友倒下不会立刻结束攀登;主角倒下即死亡。 - **在线联机未包含在当前版本中**;DeepSeek 仅用于 NPC 对话,是可选服务。 ### 塔内 ARPG 与 AI 对话 - 每层是一个可走动的 2D 房间:WASD/方向键移动,`Shift` 疾行,E 交互。 - 酒保、庄家、守塔人等固定 NPC 留在原位;同伴与访客会在塔内自由走动,仍可随时交谈/切磋。 - 场景小人采用 3 帧像素图集(idle / walk-A / walk-B),按角色立绘的配色、服装与职业道具生成;固定 NPC 不移动,同伴与访客自由走动。 - 可与当层出现的两名同伴自由交谈。对话优先接入 DeepSeek;未配置密钥或请求失败时,回退本地“叙事 AI”: - 本地回退仍有关键词识别话题(身份、过去、恐惧、愿望、战术、白冠、羁绊、日常、最后一层、塔中的人、本命牌等) - 记忆最近对话,避免连续重复 - 好感/默契度、话题记录、按角色语气生成回复 - 默契达到 3 时,对方传授一张**羁绊牌**(任何角色可用) - 对话页提供 10 个快捷话题;右上角是明确的“**结束交谈**”按钮,也可按 `Esc` 退出。 - 守塔人“零”负责规则问答;每层有“低语残片”补充世界观。 - 新增 **酒保赫尔** 与 **庄家·七** 两名常驻 NPC,以及酒吧、骰子桌两处可交互设施。 - 新增 **3 名可交谈/可切磋的塔中访客**:阿岚、蔺、白鹭;可直接进行不致命的友好决斗,胜负都会回到塔内。 - 每层随机出现 **塔内新闻**;主线角色在 3/8 层有各自的私人故事线(烬羽的旧债、薇拉烧不掉的书页、陶恩的旧城、弥娅未寄出的祷词、洛可坏掉的怀表)。 - 剧情演出支持“跳过演出”;跳过序章会直接进入本层,不再被同层开场重复拦截。 ### NPC 个人档案与 DeepSeek 对话 - 五名主角、零、赫尔、七、阿岚、蔺、白鹭均有独立档案:身份、性格、说话方式、目标、恐惧、关系、秘密、已知信息与边界。 - 对话页右上角新增“**档案**”,可查看当前 NPC 的完整个人档案。 - 对话优先调用 DeepSeek: - 服务端代理,密钥只放在本机,不进入浏览器; - 系统提示词由角色档案 + 当前层数 + 玩家名 + 默契度拼成; - 请求失败或未配置密钥时,自动回退本地叙事对话,不影响游戏。 - **最简单的启用方式**: 1. 在 创建并复制 `sk-...` 密钥; 2. 双击项目根目录的 **`配置DeepSeek密钥.bat`**,粘贴密钥并回车; 3. 双击 **`启动游戏.bat`**。 - 也可以直接设置环境变量: ```powershell $env:DEEPSEEK_API_KEY="sk-..." node server.js ``` - 密钥文件 `deepseek.key` 已加入 `.gitignore`,不会被提交。 - 如果健康检查返回 `hasKey: true` 但 `configured: false`,说明密钥格式不对;DeepSeek API Key 必须以 `sk-` 开头,不能填账号 ID、UUID 或登录令牌。 - 也可设置 `DEEPSEEK_MODEL`(默认 `deepseek-chat`)。 - 对话徽标会显示 `DEEPSEEK · LIVE / READY` 或 `LOCAL FALLBACK`。 - `DEEPSEEK · LIVE` 时只显示 AI 回复,不再叠加本地模板或话题标签;开场白使用角色档案里的固定问候。 - AI 对话每累计 3 次默契提升会触发一次羁绊卡事件(独立卡片弹窗),不额外插入本地台词。 - `LOCAL FALLBACK` 时才会走本地关键词、默契与赠牌逻辑。 ### 通缉与犯罪 - 塔内可以犯罪:扒窃、骰桌出千、洗劫商店、勒索访客、砸开低语残片。 - 每次行动有被发现概率;被发现会累积**犯罪值**,从 **D 级通缉 → C → B → A → S 级通缉**。 - 通缉等级越高: - 挑战之镜中的对手会被替换为更强的“赏金猎人”,生命与标题随通缉提升; - 犯罪风险上升,NPC 与塔内舆论会更警惕; - 犯罪值不会自动清零,会跨层保留。 - 犯罪入口在塔内 HUD 的“**罪**”按钮;每项犯罪每层只能尝试一次。 ### 移动端 - 塔内提供虚拟方向键与“交互”按钮;窄屏会自动隐藏牌组/塔层侧栏,压缩 HUD。 - 标题、塔内、对话、新闻、访客、犯罪与档案弹窗均做了窄屏适配;战斗仍建议横屏。 - 手机访问步骤: 1. 手机和电脑连同一个 Wi-Fi; 2. 电脑双击 `启动游戏.bat`,服务器会打印 `手机同一 Wi-Fi 访问 http://<局域网IP>:8788`; 3. 手机浏览器打开这个地址; 4. 如果打不开,在 Windows 防火墙里允许 Node.js 的“专用网络”,或管理员 PowerShell 执行: ```powershell New-NetFirewallRule -DisplayName "MingShi 8788" -Direction Inbound -Protocol TCP -LocalPort 8788 -Action Allow -Profile Private ``` 5. 不要用 `127.0.0.1`,那是电脑本机地址。 - 手机与电脑的存档各自保存在浏览器 `localStorage`;DeepSeek 密钥始终留在电脑服务器上。 - 状态图标在手机上可以**点一下**查看效果,再点空白处收起。 ### 美术与声音 - **日系半身立绘**:使用 Stable Horde 生成的原创 AI 立绘(512×768,单人半身),强调面部、发丝、布料与配饰细节;选人、整备、对话、战斗头像共用同一套角色图。 - **场景像素小人**:玩家、同伴、赫尔、七、零与访客都根据立绘的发色、瞳色、服装配色、发型与职业道具生成像素小人;不再使用带背景的 Q 版图片。 - **宽幅塔内空间**:探索地图横向扩展到 1440 世界单位,宽屏下左右留出更多走廊与道具空间。 - **黑金塔内大厅**:标题与探索回到黑金/暖烛版本,深色大厅配奶油 HUD 卡片与旧金描边;卡牌、对话和弹窗同样使用奶油纸张,保证文字可读性,不依赖 CRT 扫描线。 - **对手立绘**:使用原创 AI 暗色日系对手图(黑刃刺客、焚典火法师、重甲守誓者、白冠祭司),不再使用大眼布偶头。 - 塔内场景用 Canvas 实时绘制:透视地砖、拱门、烛光、尘埃、随层变化的主题道具。 - 战斗背景为层数配色的哥特拱廊;战斗音乐改为带旋律的 WebAudio 循环(低音、琶音、和声与轻打击)。 - 塔内环境音与音效由 WebAudio 程序合成;战斗使用本地 OGG 循环音乐,并有程序合成回退。 - 角色、Q 版与对手为 AI 生成原创图(未使用《鸣潮》或其它商业作品原图);访客兜底 Q 版来自 [FreeGameSprites](https://freegamesprites.com/en/packs/anime-portraits),CC0。说明见 `assets/README.md`、`assets/portraits/GENERATED.md`、`assets/chibi-custom/GENERATED.md`、`assets/enemies/GENERATED.md`。 --- ## 操作 | 场景 | 操作 | |---|---| | 塔内 | `WASD` / 方向键移动;`E` 交互;`Esc` 菜单 | | 战斗 | **悬停手牌查看完整效果与关键词**;**悬停自己或敌人的状态图标查看状态名、效果与剩余回合**;**悬停自己或敌人的状态图标查看状态名、效果与剩余回合**;**按住手牌拖动,卡牌跟随指针,拖到战场上沿后松开打出**;`1`–`9` 快捷出牌;`E` / `空格` / `Enter` 结束回合;战斗记录显示在双方之间;`Esc` 菜单 | | 对话 | 点击 / `空格` / `Enter` 继续;`Esc` 跳过演出 | | 牌组 | 点击左侧卡牌加入;点击右侧条目移除;`Ctrl+S` 保存;`Esc` 离开 | 每回合开始抽 5 张牌;起手 5 张中必含核心牌。设置里可调整**画面亮度**(默认 100%)、文本速度、音量与动效。 推荐分辨率 1366×768 以上。移动端已适配标题、塔内探索、对话、新闻、访客、犯罪与档案;战斗提供横向滚动手牌,仍建议横屏。 --- ## 目录 ``` index.html 入口 server.js 零依赖静态服务器 启动游戏.bat Windows 一键启动 src/css/ main / screens / battle / panels src/js/ app.js 屏幕调度、模态框、Toast、音频解锁 state.js 存档、运行状态、设置、Meta util.js 工具、随机、存储 art/ portraits.js 程序化二次元肖像 / 敌人面具 icons.js 线性图标库 data/ characters.js 五名无冠者 cards.js 329张卡牌聚合、牌组规则、主题骨架随机开局 floors.js 12 层数据、积分阈值 opponents.js 对手生成、积分-实力公式、Boss story.js 序章、间章、Boss、三结局 dialogue.js 角色对话 AI、守塔人零、羁绊礼物 systems/ combat.js 战斗引擎、状态、敌人 AI、队友 AI audio.js WebAudio 程序化音乐与音效 ui/ 各屏幕与覆盖层 title / select / setup / prologue / hub / chat / deckbuilder opponents / battle / reward / gameover / ending vn / codex / settings screenshots/ 运行截图 ``` --- ## 范围说明 - 这是**离线单机原型**。多人部分实现了“AI 队友”和“同屏接管”,**没有实现真正的互联网联机**。在线联机需要服务端房间、权威战斗状态同步、断线重连与隐私手牌隔离,不适合用纯静态页假装实现。 - 没有使用真实大模型 API;塔内对话是**本地叙事 AI**(话题识别 + 记忆 + 角色语气模板),因此无网络也能玩、响应稳定、不会产生不可控内容。 - 存档在 `localStorage`。清浏览器数据会清空塔志与当前攀登。 - 音效需要一次用户点击后才能启动(浏览器自动播放限制)。 ## 设计文档 规则、数值公式、12 层表、角色套牌、多人设计、美术方向与后续联机方案见 [`DESIGN.md`](DESIGN.md)。 ## AI对话访问控制 本机浏览器和桌面版可直接使用本机配置。局域网或公网AI对话需要启动者设置独立的访客口令: ```powershell $env:DEEPSEEK_ACCESS_TOKEN="自行生成的长随机口令" node server.js ``` 试玩者在游戏设置中的“AI对话访问口令”填写该口令。口令仅保存在当前窗口的 sessionStorage,不能填写 DeepSeek API Key。未配置远程口令或口令不正确时,自动使用本地对话。 代理默认每个连接来源每分钟最多12次、全服务每分钟最多60次,超限返回429。可用 DEEPSEEK_RATE_LIMIT 和 DEEPSEEK_GLOBAL_LIMIT 设置正整数上限。反向代理后的请求共用连接来源限额,不信任客户端转发的IP。限额存于内存,重启后重新计数。 本轮开局体验优化:保持20张牌组,改为手动登楼,增加可跳过的首战/构筑指引并简化开场。详见[调整与验证记录](docs/开局体验优化.md)。 新开局新增瑟琳主动来访、四处设施导览和教学练习;正式首胜后可回去寻找她,塔顶会接上相认对白。详见[导师流程与验证](docs/导师首战与地图导览.md)。