Compare commits
61 Commits
36dc93222a
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| b12a81e9c2 | |||
| 3f69ce8bb7 | |||
| 2e87a1403a | |||
| f505d2792f | |||
| 74fad546ff | |||
| 16a6cdaf79 | |||
| 832f1e8b59 | |||
| 281e6ccf48 | |||
| 013c756b9e | |||
| e602d3b420 | |||
| a4373d7494 | |||
| 34616e1631 | |||
| 226cfbc8a1 | |||
| 8853e3b48e | |||
| e50d678411 | |||
| 727794bc95 | |||
| cc9b95ddef | |||
| 22c4807612 | |||
| 86adaa738f | |||
| c2f2b9867a | |||
| d77d0ca9eb | |||
| 5646824daf | |||
| d9530047db | |||
| 8012008d83 | |||
| 8528c5ffce | |||
| 3047434b33 | |||
| f8f1cdd1f4 | |||
| 1102b5af23 | |||
| fd5a4c3136 | |||
| 63f5a1d49e | |||
| 811abdd375 | |||
| 712f28e207 | |||
| fafe6b63cd | |||
| d6a72c895c | |||
| 2c9e6fe272 | |||
| f9e24f4e16 | |||
| a6f5ab9d23 | |||
| e6e2a5fda6 | |||
| 123c699db9 | |||
| f2f786d69b | |||
| 8444dee9e9 | |||
| 26169102a0 | |||
| 87711e4034 | |||
| fd09f61473 | |||
| 9345236b93 | |||
| 7484764024 | |||
| 782fa77950 | |||
| 11c8cbdf67 | |||
| ff42fff61c | |||
| e8c5d2e247 | |||
| ab86efa421 | |||
| a12d18c1cd | |||
| 71e9ad3133 | |||
| 8a93d69590 | |||
| 06f738dc99 | |||
| 8c639e5d13 | |||
| 59cab3d9fd | |||
| bb010b4b1e | |||
| 5d24301ef5 | |||
| 4ecab19429 | |||
| 81c2389132 |
@@ -232,6 +232,37 @@ jobs:
|
||||
done
|
||||
done
|
||||
|
||||
- name: Prepare standalone Rust crate dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
# agent-runtime-core / agent-runtime-orchestration 被 server-rs/Cargo.toml 的
|
||||
# exclude 排除,不参与上面的 workspace 锁文件,因此上面那次锁定 fetch 覆盖不到它们;
|
||||
# 而 check:native-shells 会经 agent-runtime-*:check 用 `cargo test --manifest-path`
|
||||
# 单独跑这两个 crate。不在这里预热的话,这两条测试会在测试阶段自己
|
||||
# `Updating crates.io index`,crates.io 一抖动整条 native shell 作业就红
|
||||
# (见 #327 / PR #316 run 1950)。
|
||||
# 两个 crate 都没有提交 Cargo.lock,所以这里只能做不带锁标志的 fetch:
|
||||
# 加锁标志会因为缺少锁文件直接失败。生成的 Cargo.lock 落在两个 crate 目录内,
|
||||
# 已被各自的 .gitignore 忽略,只留在容器里;随后的测试阶段因此能用锁定版本
|
||||
# 解析,不再触碰 registry index。
|
||||
for manifest_path in \
|
||||
server-rs/crates/agent-runtime-core/Cargo.toml \
|
||||
server-rs/crates/agent-runtime-orchestration/Cargo.toml; do
|
||||
for attempt in $(seq 1 5); do
|
||||
if cargo fetch \
|
||||
--target x86_64-unknown-linux-gnu \
|
||||
--manifest-path "${manifest_path}"; then
|
||||
break
|
||||
fi
|
||||
if [[ "${attempt}" -eq 5 ]]; then
|
||||
echo "standalone crate dependency fetch failed after 5 attempts: ${manifest_path}" >&2
|
||||
exit 1
|
||||
fi
|
||||
sleep $((attempt * 2))
|
||||
done
|
||||
done
|
||||
|
||||
- name: Run native shell gates
|
||||
run: npm run check:native-shells
|
||||
|
||||
|
||||
@@ -114,6 +114,7 @@ const allowedUncalledTauriCommands = [
|
||||
'open_game_creator_launcher_window',
|
||||
'open_game_creator_workspace_window',
|
||||
'read_direct_project_conversation',
|
||||
'reset_design_agent_session',
|
||||
'stop_local_game_preview_if_matches',
|
||||
'start_game_creator_external_mcp',
|
||||
'stop_game_creator_external_mcp',
|
||||
|
||||
@@ -20,6 +20,10 @@ import {
|
||||
const appRoot = fileURLToPath(new URL('..', import.meta.url));
|
||||
const repoRoot = resolve(appRoot, '../..');
|
||||
const tauriCliPath = resolve(repoRoot, 'node_modules/@tauri-apps/cli/tauri.js');
|
||||
const AGC_DESIGN_DEBUG_ENV = 'GENARRATIVE_AGC_DESIGN_DEBUG';
|
||||
const AGC_DESIGN_DEBUG_VITE_ENV = 'VITE_GENARRATIVE_AGC_DESIGN_DEBUG';
|
||||
const designDebugEnabled =
|
||||
process.env[AGC_DESIGN_DEBUG_ENV]?.trim() === '0' ? '0' : '1';
|
||||
|
||||
function buildTauriArguments(argv, devUrl = readAgcDevEndpoint().url) {
|
||||
const args = [...argv];
|
||||
@@ -108,7 +112,11 @@ async function runTauriDev(
|
||||
if (!prepared || shutdownSignal) return 1;
|
||||
const tauriArguments = buildTauriArguments(argv, endpoint.url);
|
||||
child = spawnCli(tauriArguments, {
|
||||
env: withAgcDevEndpointEnv(endpoint),
|
||||
env: {
|
||||
...withAgcDevEndpointEnv(endpoint),
|
||||
[AGC_DESIGN_DEBUG_ENV]: designDebugEnabled,
|
||||
[AGC_DESIGN_DEBUG_VITE_ENV]: designDebugEnabled,
|
||||
},
|
||||
});
|
||||
const childResult = waitForCli(child);
|
||||
const outcome = await Promise.race([
|
||||
@@ -157,7 +165,13 @@ async function prepareFrontendDev(endpoint, { onChild, signal }) {
|
||||
const frontend = spawnChild(
|
||||
process.platform === 'win32' ? 'npm.cmd' : 'npm',
|
||||
['run', 'agc:serve'],
|
||||
{ cwd: repoRoot, env: withAgcDevEndpointEnv(endpoint) },
|
||||
{
|
||||
cwd: repoRoot,
|
||||
env: {
|
||||
...withAgcDevEndpointEnv(endpoint),
|
||||
[AGC_DESIGN_DEBUG_VITE_ENV]: designDebugEnabled,
|
||||
},
|
||||
},
|
||||
);
|
||||
onChild(frontend);
|
||||
console.log(
|
||||
|
||||
@@ -74,6 +74,14 @@ codegen-units = 256
|
||||
lto = "off"
|
||||
incremental = true
|
||||
|
||||
# Runner 启动阶段会对当前 Debug 可执行文件计算 SHA-256。仅优化密码学依赖,
|
||||
# 保持业务代码的 Debug 编译速度,同时避免整份 Debug 构建因未优化 hash 热点而阻塞启动。
|
||||
[profile.dev.package.sha2]
|
||||
opt-level = 3
|
||||
|
||||
[profile.dev.package.digest]
|
||||
opt-level = 3
|
||||
|
||||
[profile.test]
|
||||
opt-level = 0
|
||||
debug = 1
|
||||
|
||||
+66
-1
@@ -1 +1,66 @@
|
||||
此文档已在需求中声明,但附件内容尚未实现。
|
||||
# 决策台账:《星露谷物语》金样项目
|
||||
|
||||
版本:v3 | 规则:台账放活队列——design 只放结论、分析只放论证、决定与开放问题住这里。编号连续不复用;被推翻的行标 overturned 挂新行,不删行。
|
||||
状态六态:`confirmed`(用户亲口/亲选)/ `auto_decided`(技术类代决,必带理由+推翻条件,用户一键可翻)/ `default_pending`(默认建议兜底,用户未点头)/ `prototype_pending`(待原型验证)/ `pending_user`(等用户拍板)/ `overturned`(被推翻,挂旧行编号)。
|
||||
|
||||
> 编号口径:D-01~D-13 与 exemplars/stardew-analysis.md 台账节选一致(D-04~D-06、D-08~D-10、D-12 原为"就地小权衡,直接登记未开条目",此处按登记口径展开);D-14 起为技术文档期新增,与 stardew-tdd-tech.md 开放问题回执互引。
|
||||
|
||||
## 当前待办(活队列)
|
||||
|
||||
### 等用户拍板(pending_user)
|
||||
|
||||
| 编号 | 决定 | 层 | 谁 | 依据 | 推翻条件 | 状态 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| D-14 | 体力与战斗共享单池 | TDD | user | 风险资源统一制造取舍(概念张力一);**暂按共享实现,改单拆只需改 S02 成本入口** | 战斗参与率实测过低(玩家回避矿井) | pending_user(暂按共享实现) |
|
||||
| D-15 | 背包格子制 vs 重量制 | TDD | user | 格子制直觉、重量制焦虑感与 T5"休闲不打卡"冲突;暂按格子制实现、存档预留 capacity_type 字段 | 格子管理成为主要负面反馈 | pending_user(B 级阻断存档结构,暂按格子制) |
|
||||
|
||||
### 待原型验证(prototype_pending)
|
||||
|
||||
| 编号 | 决定 | 层 | 谁 | 依据 | 推翻条件 | 状态 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| D-13b | 战斗判定窗口手感(前摇帧数/无敌帧 450ms 基准) | 系统 | user | 数值可定、手感不可纸面验证 | 原型显示节奏拖慢/玩家困惑 | prototype_pending(规则本体见 D-13 confirmed) |
|
||||
|
||||
### 默认建议兜底(default_pending)
|
||||
|
||||
| 编号 | 决定 | 层 | 谁 | 依据 | 推翻条件 | 状态 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| D-19 | 天气权重表具体数值(晴/雨/风暴按季节) | TDD | agent | 概念层只定"雨免浇水"定性;数值推内容期填 | 前 5 日出现连续 3 日雨/全无雨 | default_pending(默认值已进数据表,带 designer_note) |
|
||||
|
||||
## 已采用决定
|
||||
|
||||
### 用户确认(confirmed)
|
||||
|
||||
| 编号 | 决定 | 层 | 谁 | 依据 | 推翻条件 | 状态 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| D-01 | 定调:牧场物语系参照、治愈慢节奏 | 概念 | user | 用户原始需求 | — | confirmed |
|
||||
| D-02 | 单人体验,无多人 | 概念 | user | 概念层非目标 | — | confirmed |
|
||||
| D-03 | 战斗保持伴生风险,不做装备驱动主轴 | 概念 | user | 概念期问题一 | 矿井流失率过半且归因战斗 | confirmed |
|
||||
| D-07 | 日目标自设,季节与社区提供低频牵引 | 顶层 | user | 顶层期问题一 | 新手周流失归因无方向 | confirmed |
|
||||
| D-11 | 采集/钓鱼/战斗统一"活动结果"接口 | 架构 | user | 架构期问题一 | 第三活动类型出现结构性差异 | confirmed |
|
||||
| D-13 | 战斗采用节奏/指令判定 | 系统 | user | S06 问题一 | 原型显示节奏拖慢/玩家困惑 | confirmed(手感部分拆 D-13b prototype_pending) |
|
||||
|
||||
### 技术代决(auto_decided——带理由与推翻条件,用户一键可翻)
|
||||
|
||||
| 编号 | 决定 | 层 | 谁 | 依据(理由) | 推翻条件 | 状态 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| D-04 | 时间片制:700ms=10 游戏分钟 | 概念 | agent | 原作实证节拍;一天≈14 分钟真实时间贴合 T5"休闲" | 内测一天体感过短/过长 | auto_decided |
|
||||
| D-05 | 分区域切换(区域独立场景,非连续地图) | 概念 | agent | 概念层"不是什么:无边界开放世界";区域小网络全部步行可达 | 场景切换成为移动负担反馈 | auto_decided |
|
||||
| D-06 | 28 日/季、四季/年 | 顶层 | agent | 季节窗口制造"本季计划"节奏(支柱二) | 换季频率在测试中被无视 | auto_decided |
|
||||
| D-09 | 商店营业时段走条件表 | 架构 | agent | 与配方/区域解锁共用 check(condition_id) 单一入口 | 条件表规模膨胀难维护 | auto_decided |
|
||||
| D-10 | 出货箱日终统一结算 | 架构 | agent | 收入集中进日终面板,强化"一天一结算"叙事;商店现卖保留即时通道 | 玩家普遍绕开出货箱 | auto_decided |
|
||||
| D-12 | 工具升级期间该工具不可用 | 系统 | agent | 升级=时间成本换效率(顶层张力二);备用旧工具暂不做(开放问题) | 升级期挫败感集中爆发 | auto_decided |
|
||||
| D-16 | 矿井逐层生成本期不做(P2) | TDD | agent | GDD 已标"不做无限地牢";首期按布局池 8~12 模板拼装 | 内测要求深度爬塔玩法 | auto_decided |
|
||||
| D-17 | 换装首期 5 层(基础体/裤/衣/发型/饰件),非 19 层 | TDD | agent | 外观自定义非首期卖点;层结构预留到 19 层 | 外观系统成核心诉求 | auto_decided |
|
||||
| D-18 | 作物品质三档:普通/银/金 | TDD | agent | 经济分层需要(即时变现 vs 等待升值的取舍) | 银金档无人区分、一律普通出售 | auto_decided |
|
||||
|
||||
### 已推翻(overturned——旧行保留,挂新行)
|
||||
|
||||
| 编号 | 决定 | 层 | 谁 | 依据 | 推翻条件 | 状态 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| D-08 | 作物品质两档:普通/银 | TDD | agent | 早期小权衡:两档最简 | — | **overturned → D-18**(经济分层不足,改三档;铱档留 P1) |
|
||||
|
||||
## 队列纪律(给 agent 的使用说明)
|
||||
|
||||
- 新决定入队:拿下一号(当前最大 D-19,下一号 D-20);就现代决可登记不开条目,但状态必须写 auto_decided 并带理由+推翻条件。
|
||||
- 用户翻案:旧行标 overturned 挂新行,受影响文档节重写(本台账只记录,不代改)。
|
||||
- 概念层变更定稿后:速览卡"决定状态与原型验证项"字段随本文件最新版同步(prompt 级纪律)。
|
||||
|
||||
+59
-1
@@ -1 +1,59 @@
|
||||
此文档已在需求中声明,但附件内容尚未实现。
|
||||
# 速览卡:《星露谷物语》金样项目
|
||||
|
||||
> 12 字段版本;渲染器照旧出卡走审批。字段来源见每节尾注(概念层/定调记录/台账投影)。概念层变更定稿后本卡必须同步更新(prompt 级纪律)。
|
||||
|
||||
## 1. 游戏名称
|
||||
《星露谷物语》(金样项目沿用案例名;新项目由概念层第 1 节定名)←概念层§1
|
||||
|
||||
## 2. 一句话描述
|
||||
继承一座荒废农场的乡村生活 RPG:安排每天的时间与体力,种田、探索、交朋友,把日子过成自己想要的样子。(←概念层§1 一句话概念,45~90 字)
|
||||
|
||||
## 3. 游戏分类
|
||||
乡村生活模拟 RPG(经营+探索+社交;参照系牧场物语)←概念层§1
|
||||
|
||||
## 4. 美术风格(四件)←定调记录+概念层§4
|
||||
- 视觉类型:手绘感像素风、俯视 45° 视角。
|
||||
- 风格关键词:温暖、田园、四季分明、生活感。
|
||||
- 色彩与氛围:暖土绿基底+季节信号色整体切换;治愈不压抑;无锐利科技感、无阴暗元素。
|
||||
- MVP 美术边界:首期 3 区域 tileset、8 位 NPC(行走+立绘)、约 120 物品图标、玩家换装 5 层;不做 19 层全量换装与全区域。
|
||||
|
||||
## 5. 游戏支柱(3 条)←设计锚点提炼
|
||||
| 支柱 | 玩家感受 | 实现机制 |
|
||||
|---|---|---|
|
||||
| 自己的节奏 | "今天想干嘛就干嘛,明天一切更顺手。" | 自由日程+时间体力预算;无失败结局 |
|
||||
| 今天的选择让明天更从容 | "升级工具、攒钱扩建是有意义的。" | 长期投资线:工具升级/技能/设施 |
|
||||
| 社区让独居变成归属 | "镇上的人在等我。" | NPC 关系/任务/社区修复目标 |
|
||||
|
||||
## 6. 核心循环(5 步)←锚点循环位展开
|
||||
安排一天的时间与体力 → 农/采/钓/矿/战/社交任选组合 → 获得资源·金钱·经验·关系 → 投资工具·设施·种子·物品 → 解锁更高效或更丰富的活动。
|
||||
|
||||
## 7. 目标用户 ←概念层§5
|
||||
牧场物语系慢节奏成长玩家+动森式"无压力日常"需求;单人、可反复、每次一至数个游戏日;不要求预先掌握复杂数值。
|
||||
|
||||
## 8. 平台事实 ←运行时注入,禁改
|
||||
自包含 Web · 双视口(桌面/移动)· 键鼠/触屏双输入 · 本地 HTTP 预览(金样项目按 HTML 演示路线锁定)。
|
||||
|
||||
## 9. MVP 系统(5 个)←概念层"最小闭环粗清单"
|
||||
| 系统 | 最小功能 | 为什么必须有 | 验证方法 |
|
||||
|---|---|---|---|
|
||||
| 时间与日程 | 时钟/日终结算/季节天气 | 全局节拍器 | 一个游戏日全流程可完成并结算 |
|
||||
| 体力与状态 | 单池体力/昏倒惩罚 | 一切取舍的成本源 | 玩家主动在体力耗尽前收手 |
|
||||
| 农场经营 | 锄种浇收+加工队列 | 核心产出与规划场 | "买种→收获→出售"闭环成立 |
|
||||
| 物品与制作 | item_id/背包/配方解锁 | 资源身份与转化 | 拾取/堆叠/制作全链无回翻 GDD |
|
||||
| 经济与商店 | 基准价+价差+出货箱 | 投资回报换算 | 第 4 日现金流回正(前五日验算) |
|
||||
|
||||
## 10. 制作边界 ←概念层"不是什么"表
|
||||
不做:硬核生存(无饥饿/债务/死亡惩罚);效率至上的工厂经营;以战斗为核心的动作游戏;剧情驱动的任务链主线;多人竞争;无边界开放世界(区域小网络全步行可达)。
|
||||
|
||||
## 11. 创作者提示(先做与验证)←概念层"先做与验证"节
|
||||
- 先做:第 1 日循环(买种→播种→浇灌→收获→出售→日终结算)+一个可进入的矿井遭遇。
|
||||
- 暂不做:装备刷取、随机构筑、复杂剧情、节日全量、联机。
|
||||
- 这样验证:测试者玩完第 1 日后是否主动说"再玩一天";能否说出"明天要先做什么"。
|
||||
- 达标再扩展:玩家能自述明日计划后,才加社交深度与矿井分层。
|
||||
|
||||
## 12. 决定状态与原型验证项 ←台账投影(decision-log.md v3)
|
||||
- 已确认(confirmed):定调 D-01 / 单人 D-02 / 战斗伴生 D-03 / 日目标自设 D-07 / 活动统一接口 D-11 / 战斗节奏判定 D-13。
|
||||
- 技术代决(auto_decided,可一键翻案):D-04 时间片 / D-05 分区域切换 / D-06 28 日季 / D-09 营业条件 / D-10 出货箱日终 / D-12 工具占用 / D-16 矿井生成 P2 / D-17 换装 5 层 / D-18 品质三档(推翻 D-08 两档)。
|
||||
- 等拍板(pending_user):D-14 体力战斗是否共享单池(暂按共享实现);D-15 背包格子/重量(暂按格子制,B 级阻断存档结构)。
|
||||
- 待原型(prototype_pending):D-13b 战斗判定窗口手感(前摇帧数/450ms 无敌帧基准)。
|
||||
- 默认兜底(default_pending):D-19 天气权重数值(默认已入表,带 designer_note)。
|
||||
|
||||
+82
-1
@@ -1 +1,82 @@
|
||||
此文档已在需求中声明,但附件内容尚未实现。
|
||||
# 美术圣经:《星露谷物语》(TDD 金样 · 美术圣经)
|
||||
|
||||
> 状态:reviewed | 定调锚:概念层@v1 第 2 节(定调记录:牧场物语系参照、压力低/节奏慢/治愈) | style_id:`stardew_warm_rural_pixel`
|
||||
> 实证规格来源:星露谷 1.6.15 解包知识库 v3(资产计数时点 2026-09-11,快照 stardew-1.6.15-7f1e5b8e)。写新项目时按本项目定调重译,数字仅作规模参照。
|
||||
|
||||
## 视觉风格总览
|
||||
|
||||
从定调记录翻译的视觉气质:**"被四季照亮的温暖小农场"**——手绘感像素、俯视 45° 视角,春夏绿意、秋日暖橙、冬季留白,颜色随季节整体切换而不是换贴图;物件轮廓圆润、无锐利科技感。玩家一看画面就该感到:这里节奏很慢,干活是安心的。参考图位 4 张(量产流程第 3 步产出锚点图)。
|
||||
|
||||
## 视觉锚
|
||||
|
||||
- 关键词:温暖、手绘像素、田园、四季分明、生活感。
|
||||
- 禁用关键词:阴暗压抑、血腥恐怖、高饱和霓虹、写实渲染、锐利科技风(承概念层 T3"战斗轻度"、T7"日常叙事")。
|
||||
- 色板:主色 暖土绿系(草地/耕地基底)60% / 辅色 暖木棕+瓦顶红 30% / 点缀 季节信号色(春樱粉/夏浓绿/秋橙/冬蓝白)10%。昼夜·天气·季节表现:季节=色调与植被整体切换;天气=雨天全屏冷色叠加(原作 OrangeRed×0.45 实证);昼夜=时刻线性插值环境光。
|
||||
- 形状语言:圆润矩形轮廓,物件以 16px 网格对齐;无 1px 高光乱线。
|
||||
- 比例与轮廓:物件 16px 一档;NPC 16×32(渲染放大 4 倍);玩家可完全自定义外观。
|
||||
- 光照与材质:不做真实光照——低分辨率 lightmap 乘法混合;优先级链=矿井 tint>室内 ambient>室外 outdoor(时刻插值);十种光源贴图常量够用。
|
||||
- 渲染口径:纯像素、无抗锯齿、整数倍缩放(程序侧能力边界同源)。
|
||||
|
||||
## 角色模板
|
||||
|
||||
- 基础规则:玩家=换装组合而非整图——19 个独立层(基础体/裤/衣/发型/饰件/配件…),每层独立图集,调色板像素 256-277 区域换色实现同图集多变色;层深=基准+层序×1e-6 保证叠加次序稳定。NPC=16×32 四方向小人+64×64 立绘(对话用)。
|
||||
- 方向数:4 方向(左=右镜像:是——行走图按方向分行布局,如 64×448=4 列×14 行)。
|
||||
- 动画状态:待机/走 walk=4 帧循环、每帧 200ms(帧表含毫秒级帧时长);受击/使用工具按动作逐条登记帧表。玩家帧表量大(原作 500+ 动画参数为 switch 硬编码),本项目帧表走数据表不走硬编码。
|
||||
- 立绘表情:六表情索引 0-5($neutral/$happy/$sad/$unique/$love/$angry),对话文本中 `$表情` 标记驱动切换。
|
||||
|
||||
## 场景模板
|
||||
|
||||
- tileset 规格:16px tile;TileSheets 级图集约 41 张+地形特征图集 38 张(作物/树);padding 1px 防渗色。
|
||||
- 图层拆分:四层 Back/Buildings/Front/AlwaysFront(深度 -1/0.1/64+/-1)——地面/建筑/前景遮挡/最前;碰撞由 Buildings 层属性驱动;矿井布局池按模板拼装(原作 61 张模板,本项目首期 8~12 张)。
|
||||
- 场景对象规则:多帧素材禁当静态贴图(作物生长/角色必须走帧表);单元素禁整图(区域由 tile 拼装,禁为每区域画整张立绘);地图数参照:原作 259 tmx+304 预览,本项目首期 3 区域(农场/小镇/矿井)。
|
||||
|
||||
## UI 视觉
|
||||
|
||||
承 UI 系统文档界面清单(HUD/背包/商店/对话/日终结算五界面)。视觉语言:木质面板底+纸张质感对话框;信息分层——价格信息永远暖金、锁定/禁用永远灰蓝、日终收入单列。字体用位图字体(原作 5 fnt 位图字体实证)。触控版式热区 ≥44px 与程序侧输入表同源。特效走程序动画(按帧表播图集区域)+粒子,不逐特效画整图(原作 LooseSprites 156 张 UI/杂项图集规模参照;最大图集实测 1920×1376)。
|
||||
|
||||
## 素材规格契约
|
||||
|
||||
| 素材 | 规格(尺寸/帧数/方向数) | 命名规则 | atlas 格式 | 验收 | 绑定 |
|
||||
|---|---|---|---|---|---|
|
||||
| 物品图标 | 16×16,1 帧 | `icon_{item_id}` | JSON atlas | 技术+视觉 | `item_*` 全量(参照原作 807;本项目首期 ~120 行) |
|
||||
| 作物 | 16×32×相位帧(4~5 相位,每相位 1~2 帧) | `crop_{crop_id}` | JSON atlas | 技术+视觉 | `crop_*`(参照原作 50) |
|
||||
| 玩家换装层 | 每层独立图集,walk 4 帧×4 方向 | `farmer_{layer}_{state}_{dir}` | JSON atlas | 技术+视觉 | 豁免(角色非物品,登记于本表) |
|
||||
| NPC 行走+立绘 | 行走 16×32 四方向行布局;立绘 64×64×6 表情 | `npc_{id}_walk` / `npc_{id}_portrait_{expr}` | JSON atlas | 技术+视觉 | `npc_*`(参照原作 34 社交 NPC/101 立绘;本项目首期 8 位) |
|
||||
| tileset | 16px,边缘连接变体 | `tile_{theme}_{variant}` | JSON atlas | 技术+视觉 | 豁免(场景组件) |
|
||||
| UI 面板 | 9 宫格切片,3 态 | `ui_{element}_{state}` | JSON atlas | 技术+视觉 | 豁免(UI) |
|
||||
| BGM | ogg,-18LUFS,循环点标记 | `bgm_{season}` 4 首+矿井 1 首 | — | 响度+循环 | 豁免(音频契约) |
|
||||
| SFX | wav 单发 | `sfx_{event}`(事件↔音效映射表登记) | — | 同帧触发 | 豁免(音频契约) |
|
||||
|
||||
- 绘制工艺:陶泥儿 MCP 像素绘制路径逐类写参数(作物/图标/角色三类的封装流程);施工环境无产出通道时规格先行锁定、状态如实登记"缺失"。
|
||||
- 音频契约说明:原作 XACT cue 名 435 候选/代码引用 230 个——本项目首期 SFX 事件 20 只起步,按事件总线 `sfx_event` 映射表登记,不逐 cue 复刻。
|
||||
- 豁免类型仅限:程序化生成(矿井布局由表驱动拼装)/ UI 文本 / 本期不需要——每项豁免在契约行写明。
|
||||
|
||||
## 资产状态表(asset manifest)
|
||||
|
||||
| asset_id | 规格 | 绑定 | 状态 | 验收记录 | contract_version |
|
||||
|---|---|---|---|---|---|
|
||||
| icon_item_*(首期 ~120 行,逐 item_id 一行) | 16×16 | `item_*` | 缺失 | — | 1 |
|
||||
| crop_*(50 行) | 16×32 相位帧 | `crop_*` | 缺失 | — | 1 |
|
||||
| farmer_*(19 层图集) | 4 帧×4 方向 | 豁免 | 缺失 | — | 1 |
|
||||
| npc_*_walk / _portrait(8 位×7 件) | 16×32 / 64×64×6 | `npc_*` | 缺失 | — | 1 |
|
||||
| tile_*(3 主题变体组) | 16px 变体 | 豁免 | 缺失 | — | 1 |
|
||||
| ui_*(5 界面套件) | 9 宫格 3 态 | 豁免 | 缺失 | — | 1 |
|
||||
| bgm_*(5 首) | ogg -18LUFS | 豁免 | 缺失 | — | 1 |
|
||||
| sfx_*(20 只) | wav | 豁免 | 缺失 | — | 1 |
|
||||
|
||||
- 状态单向流转:缺失 → 草稿 → 已交付 → 已验收 → 已接入;驳回退回草稿并记原因。
|
||||
- 验收两维:技术(尺寸/透明/帧数/命名)+ 视觉(对照视觉锚);两维都过才进"已验收"。
|
||||
- **每个 gameplay 可见对象必有一行或显式豁免——没有第三种状态**:物品图标逐 item_id 与数据侧物品表逐行对账(参照规模:原作 Characters 215 png/Portraits 101/TileSheets 41/TerrainFeatures 38/LooseSprites 156)。
|
||||
- 程序接入后填消费点(哪个模块加载、事件映射),`contract_version` 变更须重验收。
|
||||
|
||||
## 量产流程与验证
|
||||
|
||||
1. 概念候选 4 张(农场一角/角色/物品图标/UI 面板各 1 方向稿)→ 2. 人选方向(用户确认)→ 3. 锚点图 4 张 → 4. 锁圣经 → 5. 写契约(本文件已锁)→ 6. 小批 8 张(icon_item 子集:防风草种子/防风草/木材/石头/铜矿/锄头/水壶/出货箱)→ 7. 技术检查(尺寸/透明/命名/atlas 解析)→ 8. 接入程序(v0.1 里程碑)→ 9. 运行时截图验收(桌面/移动双视口下 16×16 图标与作物相位可辨、四季色调正确)→ 10. 扩产(8→120→全量)。
|
||||
|
||||
## 开放问题回执
|
||||
|
||||
| # | 问题 | 去向 |
|
||||
|---|---|---|
|
||||
| 1 | 换装系统首期是否做全 19 层(或缩到 5 层) | → 台账代决(建议首期 5 层:基础体/裤/衣/发型/饰件;台账 D-17) |
|
||||
| 2 | 锚点图方向需用户确认 | → 施工期提案卡 |
|
||||
| 3 | 位图字体 vs 矢量像素风字体 | → 小批阶段随 UI 套件定 |
|
||||
|
||||
+98
-1
@@ -1 +1,98 @@
|
||||
此文档已在需求中声明,但附件内容尚未实现。
|
||||
# 数据与配表:《星露谷物语》(TDD 金样 · 数据与配表)
|
||||
|
||||
> 状态:accepted(结构定稿+首期全量填充验算通过) | 基于:各系统文档交接节汇总 + 归 TDD 素材两份提取件(S06 数值结构/架构字段字典) | 验收:check@C-2026-09-11-v1 结论 无 blocker
|
||||
> 实证计数来源:星露谷 1.6.15 解包知识库 v3(13 张数据表,提取脚本断言通过;快照 stardew-1.6.15-7f1e5b8e)。写新项目时按本项目系统交接节重建,计数仅作规模参照。
|
||||
|
||||
## 数据表总清单
|
||||
|
||||
| 表格组 | 建议表名 | 主要维护系统 | 实证规模(原作 1.6.15) |
|
||||
|---|---|---|---|
|
||||
| 物品与经济 | 物品表、品质表、商店表、商店库存表、价格表 | 物品与制作、经济与商店 | 物品 807×29 类;商店 77 店 897 条库存(含店级 PriceModifiers) |
|
||||
| 农场内容 | 作物表、动物表、设施表、加工配方表 | 农场经营 | 作物 50 全字段;机器 39 台全 OutputRules |
|
||||
| 活动内容 | 采集点表、钓鱼点表、鱼类表、敌人表、敌人行为表、遭遇表、战利品表 | 采集/钓鱼/战斗 | 怪物 51 条配置;怪物 AI 矩阵 30 类移动原型 |
|
||||
| 物品制作 | 通用配方表、配方解锁表 | 物品与制作 | 配方 231(烹饪 81+工艺 150,全原料/产出/解锁) |
|
||||
| 玩家成长 | 技能表、等级经验表、能力节点表、工具升级表、效果表 | 成长与技能 | 职业 30 全效果钩子(51 钩子+6 数据驱动);附魔 34 逐项数值;经验曲线代码常量 |
|
||||
| NPC 与任务 | NPC 表、关系等级表、礼物偏好表、任务表、奖励表、事件条件表 | NPC/任务/事件 | NPC 送礼 34NPC×4 档+全局 5 档;事件 258/条件码 39 |
|
||||
| 时间与世界 | 日期季节表、天气表、节日表、营业时段表 | 时间与日程、事件与节日 | —(代码常量+日程数据驱动) |
|
||||
| 文本与展示 | 文本表、UI 提示表 | UI 与文本呈现及各内容系统 | 11 语言按后缀拆分(含 zh-CN) |
|
||||
|
||||
(表格拆分是生产组织方式,不改变主数据归属。原作同套模型同时服务本体与模组生态——静态表为结构化 JSON-in-XNB,由 DataLoader 按需缓存。)
|
||||
|
||||
## 字段字典与 ID 命名规范
|
||||
|
||||
- ID 命名:小写 snake_case,`对象类型_名称_必要时加阶段`(如 `item_turnip`);全局唯一、废弃不复用。(原作实证:1.6 起用限定 ID 如 `(O)123` 统一引用 807 物品——原理同源:ID 不含人话、不随语言变。)
|
||||
- 通用字段:`*_id` / `display_name_text_id` / `description_text_id` / `condition_id` / `enabled_state`(active·draft·disabled·deprecated)/ `sort_order` / `designer_note` / `unit`(数值字段必填:time_slice·game_day·currency·stamina·exp)。
|
||||
- 常用后缀:`_amount`(配单位)/ `_cost` / `_rule_id` / `_condition` / `_time` / `_duration` / `_state` / `_text_id`。
|
||||
- 类型与空值:数值栏禁"约/无/待定";空值=不适用≠0≠无限(无限制库存用 `stock_type=unlimited`,不用 999999);布尔 true/false;多值一律关系子表(多材料配方禁拼一格)。
|
||||
- 引用完整性:`item_id`→物品表;`location_id`→区域表;`npc_id`→NPC表;`quest_id`→任务表;`recipe_id`→配方表;`condition_id`→条件表;`text_id`→文本表。删除先置 `deprecated` 并查引用。
|
||||
- 枚举实证注意:品质枚举值为 0/1/2/4(银=1、金=2、铱=4)——所有 `(1+0.25×quality)` 型公式乘数因此是 1.25/1.5/2.0;枚举值是语义约定,禁止想当然重排。
|
||||
|
||||
## 公共条件表
|
||||
|
||||
| condition_id | condition_type | target_id | operator | required_value | enabled_state | 备注 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| `condition_day_2` | `date_day` | `season_spring` | `>=` | 2 | `active` | 春季第 2 日后可触发 |
|
||||
| `condition_shop_unlocked` | `progress_flag` | `flag_general_store_open` | `==` | 1 | `active` | 杂货店已开放 |
|
||||
| `condition_skill_farming_1` | `skill_level` | `skill_farming` | `>=` | 1 | `active` | 农务技能达到 1 级 |
|
||||
| `condition_blacksmith_open` | `schedule_open` | `schedule_blacksmith_default` | `==` | 1 | `active` | 铁匠铺当前处于营业时段 |
|
||||
| `condition_recipe_repair_path` | `quest_completed` | `quest_repair_path` | `==` | 1 | `active` | 修路任务完成后解锁基础洒水器配方 |
|
||||
|
||||
(复杂条件拆条件组+条件行;全项目只此一个条件入口,程序实现一次 `check(condition_id)`。实证参照:原作 258 事件共用 39 个条件码——条件收敛是可达到的规模。)
|
||||
|
||||
## 工作簿组织与建表顺序
|
||||
|
||||
| 工作簿 | 工作表 |
|
||||
|---|---|
|
||||
| `世界与地图.xlsx` | 日期季节、天气、日程、区域、区域连接、活动入口 |
|
||||
| `农场与制作.xlsx` | 地块、作物、动物、设施、加工配方、通用配方 |
|
||||
| `物品与经济.xlsx` | 物品、品质、装备、价格、商店、商店库存、货币 |
|
||||
| `活动与战斗.xlsx` | 采集点、掉落、钓鱼点、鱼类、敌人、行为、遭遇 |
|
||||
| `成长与任务.xlsx` | 技能、等级经验、能力节点、工具升级、NPC、关系、任务、目标、奖励 |
|
||||
| `事件与文本.xlsx` | 节日事件、事件阶段、事件条件、文本、UI 提示、教程 |
|
||||
|
||||
建表顺序:①物品表(公共 item_id)→ ②作物表 → ③区域与连接表 → ④NPC 表 → ⑤配方表 → ⑥价格与商店库存表 → ⑦任务/目标/奖励表 → ⑧敌人/掉落/技能/事件表。
|
||||
每完成一组查三件事:引用 ID 存在 / 条件有负责系统 / 同一数值只有一个系统维护。
|
||||
|
||||
## 表格-程序契约
|
||||
|
||||
1. 加载顺序按引用拓扑:主数据 → 关系 → 条件 → 文本(最后)。
|
||||
2. 启动期全量校验(外键/枚举/单位);运行期全部 id→对象字典 O(1) 查找。(实证参照:原作按需缓存加载+`ContentHashes.json` 逐文件 MD5 校验拒损坏。)
|
||||
3. 条件求值统一 `check(condition_id)`,全部系统复用。
|
||||
4. enabled_state 生命周期:active 加载;draft 调试可见;disabled 不加载;deprecated 不加载但留 ID 占位。
|
||||
5. 单位类型化(time_slice/game_day/currency/stamina/exp 进类型系统,同列禁混单位)。实证锚点:`700ms=10 游戏分钟`为运行时常量,配表侧时间单位统一 time_slice,禁现实秒混入。
|
||||
6. 多值一律关系子表;运行期无"解析逗号拼接"代码路径。
|
||||
7. 改表 → 验收过检(blocker=CI 红灯)→ 进包;`data_version` 为迁移依据(实证参照:原作存档迁移器按版本处理旧字段)。
|
||||
8. 随机契约:影响掉落/品质的 roll 绑定「世界日+存档 ID+位置/主体」种子(防读档刷结果;原作行为级种子实证:收获 `CreateRandom(x×7, y×11, DaysPlayed, uniqueID)`)。
|
||||
|
||||
## 数值填充与验算
|
||||
|
||||
- 填充代决台账:
|
||||
|
||||
| 表 | 字段 | 默认值 | 依据 | 推翻条件 |
|
||||
|---|---|---|---|---|
|
||||
| 等级经验表 | skill_cumulative_xp | 100/380/770/1300/2150/3300/4800/6900/10000/15000 | 代码常量(Farmer.cs 实证) | 原型期曲线过陡/过缓 |
|
||||
| 作物表 | 防风草 price/days/xp | 35 金/4 日/8 xp | 原作作物表实证(crop 472:phases 1-1-1-1,xp_per_harvest 8) | 前 5 日验算不闭合 |
|
||||
| 经济表 | 买卖价差 | 商店价=2×基价×品质系数;出售所得=其半 | 原作一对出售方法实证 | 新手期现金流断裂 |
|
||||
| 战斗表 | 受击无敌帧 | 450ms(按武器类型 2/3 除) | 原作 takeDamage 实证 | 手感测试受击连按 |
|
||||
|
||||
- 前五日闭环验算(防风草路线,起始 500 金实证口径):
|
||||
|
||||
| 日期 | 主目标 | 关键行动 | 主要成本 | 主要获得 | 结果 |
|
||||
|---|---|---|---|---|---|
|
||||
| 第 1 日 | 建立基础生产 | 购防风草种子×15(20 金/包)、开垦播种浇灌、采集少量木材 | 300 金;约 30 体力;约 8 时间片 | 15 块已播种地;少量木材;农务经验 | 进入等待成长阶段 |
|
||||
| 第 2 日 | 接社区引导 | 浇灌、采集木材、与工匠对话推进修路任务 | 约 25 体力;约 8 时间片 | 任务材料进度;少量经验 | 任务明确指向自然区域 |
|
||||
| 第 3 日 | 补足任务材料 | 浇灌、采集木材与铜矿、返回小镇 | 约 35 体力;约 12 时间片 | 木材 20、铜矿 5(或进度);采集/战斗经验 | 可提交修路任务 |
|
||||
| 第 4 日 | 收获+解锁 | 收 15 防风草(35 金×15=525 金、8 xp×15=120 xp→农务 1 级)、提交任务领奖 | 任务材料;约 10 时间片 | 525 金;基础洒水器配方;林间区域开放 | 现金流回正+新活动选择 |
|
||||
| 第 5 日 | 验证扩展循环 | 浇灌、赴林间采集或钓鱼、出售部分产物 | 约 30~45 体力;约 14 时间片 | 新资源、活动经验、可售物品 | 循环从单一农务扩展为农场+探索 |
|
||||
|
||||
- 收益链校验:`item_seed_parsnip(20金) → crop_parsnip(4 日) → item_parsnip(35 金) → 出货箱日终结算 → 种子复购(单包毛利 15 金)`(逐环引 ID,全链存在)。
|
||||
- 验算结论:第 1 日不要求做完,播种即进展;第 4 日奖励同时给资金/配方/区域三样;第 5 日出现农场与探索取舍但两条路线都可行。
|
||||
|
||||
## 验收
|
||||
|
||||
- 验收记录:check_id / workbook / sheet / data_version / check_type(primary_key·reference·enum·unit·range·business_rule·duplicate_ownership)/ severity(blocker·warning·note)/ result / issue / owner / resolution。
|
||||
- 五查必过:主键唯一不空;外键存在且目标非弃用;枚举有清单(品质枚举 0/1/2/4 单独登记);单位可判且同列不混;无违规负数、`duration=0` 仅即时。
|
||||
- 两查复核:业务规则(季节窗口相容、目标有验证系统、奖励一次、配方输入可达——防风草种子→收获→出售链全通);重复归属(价格只由经济表维护、品质只由收获规则维护)。
|
||||
- 三级处置:blocker 禁止扩内容;warning 记负责人与计划;note 不阻断。
|
||||
- 工具化实证口径(参照知识库做法):提取脚本逐表断言(行数/字段/枚举);对账器做表间交叉对账(代表资产级 50 键全对账);反例套件 5/5 拒绝。
|
||||
- 最近验收结论:check@C-2026-09-11-v1——五查全过、两查复核通过、blocker 清零(结构、规则或字段语义一变,受影响链路全部重验)。
|
||||
|
||||
+172
-1
@@ -1 +1,172 @@
|
||||
此文档已在需求中声明,但附件内容尚未实现。
|
||||
# 技术实现:《星露谷物语》(TDD 金样 · 技术实现)
|
||||
|
||||
> 状态:reviewed | 基于 GDD:架构层@v3 + P0 系统文档@v1(收编) | 数据侧契约:data/contracts@v2
|
||||
> **目标运行时:HTML**(GDD 平台事实锁定;本项目选 HTML 演示自包含 Web 路线。Unity/Godot/Cocos 项目结构相同:能力边界按下表换判定列,预览改陶泥儿驱动引擎弹窗,导出改驱动引擎 CLI)
|
||||
> 平台事实:双视口(桌面/移动)· 键鼠/触屏双输入 · 本地 HTTP 预览
|
||||
> 实证数字来源:星露谷 1.6.15 反编译知识库 v3(快照 stardew-1.6.15-7f1e5b8e,2026-09-11);写新项目时替换为本项目数值。
|
||||
|
||||
## 系统行为规格(收编章——施工只读这里,不回 GDD)
|
||||
|
||||
### S01 时间与日程(基于系统文档@v1 收编)
|
||||
- 玩家行动:查看时间天气(HUD 常驻);使用床提前结束一天;等待营业时段。
|
||||
- 状态与规则:时间以时间片计、现实驱动、暂停时停表;时间片耗尽或就寝→日终结算(顺序固定:作物生长 tick→设施产出→出货箱结算→NPC 日程推进→存档→日记界面)→日期+1;28 日/季、四季/年;天气每日按季节权重抽取(晴/雨/风暴),雨天免浇水;结算后向 S03/S07/S10 发跨天 tick。
|
||||
- 反馈需求:HUD 时钟日期常驻;天气图标;日终面板逐项列当日变化。
|
||||
- 实证参照(原作 1.6.15):`700ms = 10 游戏分钟`(累加器超 `7000 + 地点Extra×10`ms 触发十分钟拍,`timeOfDay += 10`,上限 2600);日结算顺序不可乱——出货先于邮件/任务(订单计数依赖)、地点 dayUpdate 先于玩家 dayupdate(作物推进后才有当日收获判定)。
|
||||
|
||||
### S02 体力与状态(基于系统文档@v1 收编)
|
||||
- 玩家行动:进食恢复体力;食物附带状态效果;观察体力条决定收手。
|
||||
- 状态与规则:单池体力(战斗共享风险资源——B 级待拍,暂按共享实现);成本分档:移动/普通农务≈0~低、耕作浇水低、砍伐采矿战斗钓鱼中高;恢复:食物立即+效果、就寝次日满、温泉持续;体力归零→昏倒:当日终止、次日上限下降、轻度金钱/物品损失(不清背包);状态效果有限枚举,由食物/装备写入、各系统结算。
|
||||
- 反馈需求:体力条常驻+临界变色;昏倒过场说明原因与损失、给出可恢复路径。
|
||||
- 实证参照:原作基础 MaxStamina=270、MaxHealth=100;午夜后体力惩罚为线性公式(Farmer.dayupdate);昏睡账单上限默认 1000g、姜岛 2500g(LocationContexts 数据驱动,非硬编码)。
|
||||
|
||||
### S03 农场经营(基于系统文档@v1 收编)
|
||||
- 玩家行动:锄地/播种/浇水/收获/铲除;喂动物收集畜产;放置使用设施;整理布局。
|
||||
- 状态与规则:地块状态机 荒地→耕地→(播种+浇水)→生长 N 日→可收获→收获后回耕地;未浇水当日不生长;生长按日终 tick;雨天视为已浇水;作物有适宜季节、换季枯萎;动物每日喂食→周期产出、未喂不产出不死亡;洒水器每晨自动浇固定格;加工设备按配方+时间片队列产出;品质分普通/银/金(技能等级+概率)。
|
||||
- 反馈需求:生长阶段视觉可辨;成熟提示标记;设施完成音效图标;日终列农场产出。
|
||||
- 实证参照:耕地是网格状态拥有者,作物挂在耕地下(HoeDirt 拥有湿度/肥料/作物引用);收获单一入口;**品质 roll 先于数量 roll 且共用同一随机流**(顺序影响结果);保水判定在作物推进之后(当天浇的水当天有效)。
|
||||
|
||||
### S04 探索与地图(基于系统文档@v1 收编)
|
||||
- 玩家行动:移动(8 向网格);穿出入口切换区域;查看地图;交互资源点入口(采集/钓鱼/战斗分别交 S05/S06)。
|
||||
- 状态与规则:区域=独立场景、连接点切换淡入淡出≤1s;初始开放农场+小镇+海滩,林间/矿井由社区任务解锁(条件表);资源点固定刷新点按规则周期重生;隐藏信息保留为探索发现;矿井按层进入、固定池随机拼装+亮度递减。
|
||||
- 反馈需求:地图标注已解锁区域与当前位置;解锁新区域明确提示与入口指引;资源点可交互高亮。
|
||||
- 实证参照:原作矿井同日同层布局确定(每日世界种子 `DaysPlayed + 存档ID/2`);矿井布局池 61 张模板按层拼装;骷髅洞时间减速 28.6%(+200ms/分)仅单机生效。
|
||||
|
||||
### S07 物品、背包与制作(基于系统文档@v1 收编)
|
||||
- 玩家行动:整理背包;使用/装备/丢弃;设施处提交配方;查看图鉴。
|
||||
- 状态与规则:一切以 item_id 为准,类别枚举(工具/种子/素材/食物/装备/家具/礼物);同类同品质堆叠(容量结构待 B 级决策,暂按格子制实现、预留字段);工具等级制(基础→铜→铁…,升级交材料+金+天数);装备槽武器/防具各一;配方=材料子表→输出→设施→condition_id 解锁;制作队列按时间片推进、日终照常完成。
|
||||
- 反馈需求:拾取飘字音效同帧;背包变更即时刷新;制作完成提示;图鉴进度。
|
||||
- 实证参照:原作 807 物品统一限定 ID 引用(如 `(O)123`);品质枚举值为 0/1/2/4(银=1、金=2、铱=4),所有 `(1 + 0.25×quality)` 型公式的乘数因此是 1.25/1.5/2.0;出售语义一对方法承载:`salePrice()`(=2×基价×品质系数,商店价)与 `sellToStorePrice()`(=salePrice/2,玩家所得)。
|
||||
|
||||
### S08 成长与技能(基于系统文档@v1 收编)
|
||||
- 玩家行动:查看技能面板;升级时选加成方向;提交工具升级委托。
|
||||
- 状态与规则:技能五项(农务/采集/采矿/钓鱼/战斗)独立经验池;执行对应活动得经验、只增不减;等级效果三类——效率(省时省体力)/解锁(配方/区域/工具位)/选择(每若干级一次分支,宽松可回转);工具升级期间该工具不可用(备用旧工具=开放问题暂不备);升级奖励优先省时省力扩选择,不加数值伤害。
|
||||
- 反馈需求:经验条与升级音效;升级面板三选一;工具完成由铁匠通知。
|
||||
- 实证参照:原作技能累计经验曲线为代码常量 `100/380/770/1300/2150/3300/4800/6900/10000/15000`(10 级);经验取整用银行家舍入(边界值注意);满级后经验转全局精通点(第二成长曲线)。
|
||||
|
||||
### S09 经济与商店(基于系统文档@v1 收编)
|
||||
- 玩家行动:出售(出货箱日终/商店现卖);购买;查看价格库存;接装箱订单(P1)。
|
||||
- 状态与规则:货币唯一;基准价+买卖价差,价格只由本系统维护(其他系统只提交产物或消费请求);商店各有营业时段(条件表)、库存按周期补货、部分商品有购买条件;出货箱投入→日终统一结算计入当日收入;订单 P1 最低配=每周装箱单换奖金。
|
||||
- 反馈需求:交易金额飘字音效;日终面板单列收入明细;商店营业状态门口可见。
|
||||
- 实证参照:原作 77 店 897 条库存,店级 PriceModifiers 数据驱动;基础材料(木/石/煤/铜/铁/金)售价走年度特例(第 2 年起涨价)而非通用公式。
|
||||
|
||||
### S06 战斗与敌人(P1,基于系统文档@v1 收编要点)
|
||||
进入危险区域遭遇→敌人状态机(待机/警觉/前摇/攻击/受击/眩晕/死亡)→攻击需满足距离方向冷却装备条件→伤害=来源属性+目标防御+倍率+状态→敌前摇必须可识别→死亡只结算一次经验战利品→战利品按 item_id 提交 S07 入账→撤退保留已结算奖励。全规则见系统文档@v1(P1 施工时全文收编)。
|
||||
实证参照:怪物 51 条配置拆 15 字段(HP/伤害/掉落对/防御/闪避/速度/经验…);受击 `max(1, 伤害−防御)`、450ms 基准无敌帧;伤害链顺序固定:roll→暴击→+攻击→职业→附魔→怪物防御(改序即改平衡);暴击乘区在 +Attack×3 之前(攻击力不吃暴击)。
|
||||
|
||||
## UI 交互规格
|
||||
|
||||
| 界面 | 元素与布局 | 流转 | 触控版式 |
|
||||
|---|---|---|---|
|
||||
| HUD | 体力条(左上)+时钟日期天气(右上)+金钱 | 常驻;点开时钟看季节日历 | 等比缩放,热区≥44px 的仅按钮 |
|
||||
| 背包/工具栏 | 底部工具槽×8+Tab 全屏网格背包 | Tab/I 开→再关;槽位与物品表工具位同步 | 底栏加宽,点选代替快捷键 |
|
||||
| 商店 | 商品列表(价格/库存/条件)+背包对照双栏 | 营业时段与店主对话进入→交易→Esc/返回退出 | 双栏改上下布局(移动) |
|
||||
| 对话 | 底部文本框+头像位+选项列表 | 靠近 NPC 按 E→逐句→选项分支→结束 | 全屏按钮式选项(热区 44px) |
|
||||
| 日终结算 | 全屏面板:收入明细/关系与技能变化/明日提示 | 就寝或时间耗尽自动→任意键进入次日 | 同桌面,纵向排布 |
|
||||
|
||||
(实证参照:原作对话文本中 `$表情` 标记驱动立绘切换,六表情索引 0-5;钓鱼小游戏是唯一不暂停时间的菜单。)
|
||||
|
||||
## 来自 GDD 的功能(P0 七系统)
|
||||
|
||||
| 系统 | 一句话职责 | 拥有的主数据 |
|
||||
|---|---|---|
|
||||
| S01 时间与日程 | 全局时钟与日终结算 | 日期、季节、天气、日程 |
|
||||
| S02 体力与状态 | 全局行动成本与恢复 | 体力、状态效果 |
|
||||
| S03 农场经营 | 核心产出与规划场 | 地块、作物、设施 |
|
||||
| S04 探索与地图 | 场景与空间约束 | 区域、连接、资源点 |
|
||||
| S07 物品与制作 | 资源身份与转化 | 物品、配方、背包 |
|
||||
| S08 成长与技能 | 长期回报层 | 经验、等级、解锁 |
|
||||
| S09 经济与商店 | 投资与回报换算 | 价格、交易、库存 |
|
||||
|
||||
## 技术目标与平台事实
|
||||
|
||||
- 首屏可玩 ≤ 5 秒(本地 HTTP,无网络依赖)。
|
||||
- 移动视口稳定 60fps(作物满屏实例 ≤ 200 时)。
|
||||
- 场景切换 ≤ 1 秒,无白屏。
|
||||
|
||||
## 技术风险
|
||||
|
||||
| 风险 | 影响 | 缓解 | 校验方式 |
|
||||
|---|---|---|---|
|
||||
| 非整数缩放导致像素模糊 | 全部视觉资产 | 整数倍缩放+letterbox | 双视口各跑 5 种常见分辨率截图比对 |
|
||||
| 触屏点击判定过小 | 移动端交互不可用 | 交互热区 ≥ 44px;摇杆替代方向键 | 移动视口手测清单§3 |
|
||||
| 存档结构变更丢档 | 用户进度 | schema_version 字段+迁移函数;写档先落临时名、成功后替换(旧档三级回退:正常→_old→_TMP) | 每版跑旧档加载测试 |
|
||||
| 满屏作物逐帧重绘掉帧 | 移动端性能 | 脏矩形渲染;非动画作物静态层 | 性能面板:作物 200 实例压测 |
|
||||
| 读档刷随机结果(SL 刷品质/掉落) | 经济与平衡崩坏 | 分层种子确定性随机:影响掉落/品质的 roll 一律绑定「世界日+存档 ID+位置/主体」 | 同日同格收获结果可复现测试 |
|
||||
|
||||
## 运行时能力边界(P0 七件,本例 HTML;引擎运行时对照见括号速记)
|
||||
|
||||
| 能力 | 落位 | 状态 | 说明 |
|
||||
|---|---|---|---|
|
||||
| 瓦片地图渲染 | Canvas 2D 分层渲染 + JSON 地图数据 | 自封装 | 四层:Back/Buildings/Front/AlwaysFront,深度 -1/0.1/64+/-1(原作 xTile 同构;Unity=Tilemap 原生/Godot=TileMap 节点原生/Cocos=TiledMap 组件) |
|
||||
| 寻路 | A* 网格 | 自封装 | 仅 NPC 日程移动用(Unity=NavMesh/Godot=NavigationServer 原生) |
|
||||
| 2D 帧动画 | spritesheet atlas+帧表驱动(Canvas 逐帧绘制) | 自封装 | 帧表含毫秒级帧时长(原作 walk=4 帧循环、每帧 200ms) |
|
||||
| 分辨率适配 | CSS 整数倍缩放 + Canvas letterbox | 自封装 | 基准 16px 网格,NPC 16×32 放大 4 倍渲染(引擎侧用各自 Canvas/Viewport 适配方案) |
|
||||
| 音频 | WebAudio 双通道(BGM/SFX) | 原生 | 循环无缝预解码;多场景换曲走六槽上下文仲裁后淡出(防场景竞争)(Unity=Mixer/Godot=AudioServer 总线/Cocos=AudioSource) |
|
||||
| 移动与碰撞 | 自研网格移动+碰撞检测 | 自封装 | 8 方向;碰撞体小于格子 2px 防卡边(Unity/Godot 物理系统原生) |
|
||||
| 存档 | localStorage + JSON 文件导出 | 原生 | 版本迁移+临时名保护(引擎侧=文件系统/PlayerPrefs) |
|
||||
|
||||
## 代码组织概览
|
||||
|
||||
- 承架构目录映射:`src/systems/s01_time/ … s12_events/`(每系统一目录:state/rules/api 三件);`src/scenes/` 场景注册;`src/core/` 循环、渲染、输入、存档。
|
||||
- 入口 `main.ts` → 场景管理器(注册表制,场景切换走统一接口)。
|
||||
- 边界约定:系统间只经公开 api 与事件总线通信,禁跨目录直改他人 state。
|
||||
- 实证参照(原作,仅作组织参考):玩法逻辑全在一个 6.27MB 程序集,入口链 原生启动器→主 dll→GameRunner 帧循环(Update/Draw 非固定步长,真实毫秒累加器驱动逻辑);静态表/本地化文本/地图/运行状态/存档五类数据分置 Content、内存、Saves 目录,按需缓存加载。
|
||||
|
||||
## 外部库与 skill 引用
|
||||
|
||||
| 需求 | 用什么 | 来源与版本 | 实例化参数 |
|
||||
|---|---|---|---|
|
||||
| Web 游戏开发规范 | agc-web-game-development | `skill@当前版` | 双视口/双输入/本地预览/纯 HTML 交付 |
|
||||
| 地图渲染 | Canvas 2D 自研渲染器 | 手写(JSON 地图数据) | 四层结构(对齐原作 xTile 层语义) |
|
||||
| 音频 | 原生 WebAudio | 浏览器内置 API | BGM/SFX 双通道 |
|
||||
|
||||
## 场景与镜头
|
||||
|
||||
| 项 | 规定 | 依据 |
|
||||
|---|---|---|
|
||||
| 瓦片地图结构 | 16px 网格;农场 80×65、小镇 50×40、矿井按层生成 | 台账 D-05(区域分场景,非连续地图) |
|
||||
| 镜头 | 跟随玩家+边界钳制;无缩放(固定整数倍) | GDD 顶层(无镜头玩法) |
|
||||
| 场景切换 | 农场↔小镇↔矿井走连接点淡入淡出 ≤1s | 概念 D-05 定案"分区域切换" |
|
||||
| 关卡数据 | `data/maps/*.json`(自定义 JSON:层/网格/对象点) | 契约 v2 |
|
||||
|
||||
## 输入与操作
|
||||
|
||||
| 动作 | 键盘 | 触控 | 备注 |
|
||||
|---|---|---|---|
|
||||
| 移动 | WASD/方向键 | 虚拟摇杆 | 8 方向 |
|
||||
| 交互(对话/拾取/使用) | E / 空格 | 热区按钮(≥44px) | 场景对象注册热区 |
|
||||
| 工具切换 | 1~8 / 滚轮 | 底栏工具槽 | 槽位与物品表工具位同步 |
|
||||
| 背包/菜单 | Tab / I | 右上按钮 | 暂停世界时钟(对话与过场同样停表) |
|
||||
|
||||
## 音频
|
||||
|
||||
| 用途 | 格式/规格 | 触发点 | 依据 |
|
||||
|---|---|---|---|
|
||||
| 四季 BGM | ogg 循环,循环点标记,-18LUFS | 季节变更淡入淡出 2s | 美术圣经音频契约 |
|
||||
| 矿井环境 | ogg 循环 | 进入矿井场景 | 同上 |
|
||||
| SFX(收获/砍伐/受击/购买…) | wav 单发,同帧触发 | 事件总线 `sfx_event` | 事件↔音效映射表(资产表) |
|
||||
|
||||
(实证参照:原作音频 XACT 三件套,cue 名 435 候选、代码实际引用 230 个;音效带距离衰减、音乐六槽仲裁后淡出换曲。本项目音频契约见美术圣经。)
|
||||
|
||||
## 构建与验证
|
||||
|
||||
- 构建:`npm run agc build`(产物自包含,本地 HTTP 起服)。(引擎项目双轨:陶泥儿驱动引擎弹窗预览=开发期验证;驱动引擎 CLI 导出=交付构建——验证分级同下。)
|
||||
- 自动:无头构建通过+静态检查(资源引用存在、表引用完整——CI 跑验收七查)。
|
||||
- 半自动:双视口浏览器验证——桌面 1920×1080 与移动 390×844 各完成"新档→第 1 日流程→存读档",截图比对缩放整數性(引擎项目=弹窗预览内同流程)。
|
||||
- 手测清单:①移动视口摇杆+热区全操作可完成第 1 日;②场景切换三次无白屏;③后台 5 分钟返回,时钟与存档一致。
|
||||
|
||||
## 版本里程碑
|
||||
|
||||
| 版本 | 内容 | 判据 |
|
||||
|---|---|---|
|
||||
| v0.1 | S01/S02/S03/S07+S04 基础 | 一个游戏日"买种→播种→浇灌→收获→出售"全流程可完成并触发日终结算 |
|
||||
| v0.2 | 矿井+战斗(S06)+成长(S08) | 矿井进出一次、遭遇一场、掉落入账、经验到 1 级(累计 100xp) |
|
||||
| v0.3 | NPC+任务+商店(S09/S10/S11) | 修路任务全链可交付并解锁洒水器配方 |
|
||||
|
||||
## 开放问题回执
|
||||
|
||||
| # | 问题 | 去向 |
|
||||
|---|---|---|
|
||||
| 1 | 背包格子还是重量容量(影响存档与 UI 结构) | → 概念层决策卡(B 级阻断,台账 D-15) |
|
||||
| 2 | 矿井逐层生成是否本期做 | → 台账代决(建议 P2,GDD 已标"不做无限地牢";台账 D-16) |
|
||||
| 3 | 体力是否与战斗共享单池 | → 台账 D-14(B 级待拍,暂按共享实现) |
|
||||
|
||||
+93
-1
@@ -1 +1,93 @@
|
||||
此文档已在需求中声明,但附件内容尚未实现。
|
||||
---
|
||||
name: game-tdd-02-art-bible
|
||||
description: 写"美术圣经"(美术侧)分册时使用。与总纲(技术文档层总纲分册)配套。
|
||||
配套模板:templates/tdd-art-bible.md。配套金样:exemplars/stardew-tdd-art-bible.md。读者:美术 agent / 素材生产。
|
||||
---
|
||||
|
||||
# 美术圣经 · 美术侧写法(策划 agent · TDD 分册之二)
|
||||
|
||||
> 本文件承载美术侧的写作流程;模板在 templates/tdd-art-bible.md(保持纯净),金样在 exemplars/stardew-tdd-art-bible.md。
|
||||
|
||||
## 一、这一件的判断立场
|
||||
|
||||
你是技术美术思维的策划。这一件是**GDD 之后、资产生产之前的桥梁**:
|
||||
把概念层的调性翻译成可执行的视觉语言,把视觉语言压成逐素材的规格契约。
|
||||
你相信:
|
||||
|
||||
- **风格统一是资产效率的前提**:没有圣经,每张图都在重新发明风格;
|
||||
有了圣经,一百张素材共享同一套锚点。
|
||||
- **视觉锚从定调翻译,不从审美发明**:参照选择、调性滑杆、T 原则是
|
||||
源头(概念层第 2 节定调记录),你的工作是翻译成关键词、色板、形状语言
|
||||
——不是自己另起一套审美。
|
||||
- **每个可见对象必须绑定资产或显式豁免**:GDD 里出现的每个 gameplay 可见
|
||||
对象,要么在资产总清单有一行,要么显式标"程序化生成/UI 文本/本期不需要"
|
||||
——没有第三种状态。漏绑定的对象会在开发中期以"缺素材"形式爆炸。
|
||||
- **先锚点后量产**:概念候选→人选方向→锚点确认→小批验证→接入→才扩产。
|
||||
绝不做"做完一大批才发现风格不对"的事。
|
||||
- **禁用词与正向词同等重要**:每条视觉锚配"禁什么"(不要暗黑、不要描边
|
||||
溢出),生成侧的负面清单比正向描述更防跑偏。
|
||||
|
||||
## 二、动笔前
|
||||
|
||||
1. 输入齐了吗:概念层定调记录与身份基调(翻译源头)、系统文档全部可见
|
||||
对象(资产总清单的范围)、物品表(item_id 绑定依据,数据侧已定)、
|
||||
画风 skill(全局画风库可引用)。
|
||||
2. 本件在数据侧表结构定稿后开写(素材清单引用 item_id)。
|
||||
3. 读金样 exemplars/stardew-tdd-art-bible.md——契约表与资产状态表的登记密度以它为准(同层只读一次)。
|
||||
|
||||
## 三、怎么写(模板即流程,按节)
|
||||
|
||||
### 1. 视觉风格总览
|
||||
一段话 + 参考图位。从定调记录翻译:参照的视觉气质、滑杆值对应的视觉
|
||||
密度、T 原则对应的视觉禁忌。**style_id 在此定名**——本项目全部素材
|
||||
提示词共用此锚。
|
||||
|
||||
### 2. 视觉锚(七件套)
|
||||
关键词(3~5 个)/ 禁用关键词 / 色板(主色辅色点缀+配比)/ 形状语言 /
|
||||
比例与轮廓 / 光照与材质 / 渲染口径。每件可引画风库现成卡(`卡名@版本`)。
|
||||
|
||||
### 3. 角色与场景模板
|
||||
角色:共用基础规则(头身比、结构、方向数约定——左=右镜像之类的硬规定)、
|
||||
动画状态清单(待机/走/跑/受击…各几帧)。场景:tileset 规格、图层拆分、
|
||||
昼夜天气季节的表现预算。逐类写死,不留"到时候再说"。
|
||||
|
||||
### 4. 素材规格契约(逐素材一行,美术按此交付、程序按此消费)
|
||||
| 素材 | 尺寸/帧数/方向数 | 命名规则 | atlas 格式 | 验收 | 绑定 item_id / 豁免 |
|
||||
每个 gameplay 可见对象一行;多帧图禁当静态图、单元素区域图禁整图使用
|
||||
(运行时绑定规则)。**怎么用陶泥儿 MCP 绘制→封装→交付,逐类写明工艺**
|
||||
(与三段 skill 的工艺卡衔接)。**资产管线按目标运行时适配**:HTML=源文件
|
||||
+atlas/帧表 JSON 直接入包;Unity=Sprite 导入设置与图集;Godot=资源导入
|
||||
(.import);Cocos=Creator 资源与自动图集——规格(尺寸/帧数/命名)四运行时
|
||||
一致,封装形式随程序侧契约。
|
||||
|
||||
### 5. 资产状态表(asset manifest,美术的"配表")
|
||||
与数据侧的数值表平行的一张生产事实表:asset_id / 规格 / 绑定 / **状态** /
|
||||
验收记录 / contract_version。状态单向流转(缺失→草稿→已交付→已验收→已接入);
|
||||
验收两维(技术:尺寸透明帧数命名;视觉:对照视觉锚),两维都过才进"已验收"。
|
||||
**每个 gameplay 可见对象必有一行或显式豁免,没有第三种状态**——缺什么、
|
||||
做到哪、谁验收过,一张表看全;程序接入填消费点,契约版本变更重验收。
|
||||
**自足性判定**:资产表"全行非缺失且两维验收过"=美术侧构建完成——
|
||||
施工 agent 只看本圣经+资产表即可产出全部素材,不回 GDD。
|
||||
|
||||
### 6. 量产流程与验证
|
||||
十步流水:概念候选(3~10 张)→人选方向→编辑出锚点图(3~5 张)→锁圣经
|
||||
→写契约→小批生成(3~8 张)→技术检查(尺寸/透明/视角/风格)→接入程序
|
||||
→运行时截图验收→**通过后才批量扩产**。验收判据写行为:桌面与移动视口
|
||||
下阵营/状态/反馈是否一眼可辨。
|
||||
|
||||
### 6. 开放问题回执
|
||||
视觉与玩法冲突、素材成本超预算(面数/张数/工时)、锚点两难——全部走
|
||||
回执:问用户的升级决策卡,代决的记台账。
|
||||
|
||||
## 四、写完自查(参考,不是闸门)
|
||||
|
||||
- style_id 有了吗?禁用词列了吗?
|
||||
- GDD 每个可见对象都在资产总清单里吗(或显式豁免)?
|
||||
- 每类素材的验收是否技术可查(尺寸/透明通道/帧数)+ 视觉可查(风格一致)?
|
||||
- 量产流程里"扩产"前面有"运行时截图验收"这道闸吗?
|
||||
|
||||
## 五、红线(承总纲四条,本件特化)
|
||||
|
||||
1. 视觉锚必须能溯源到定调记录,不许无锚发明审美。
|
||||
2. 素材契约每行必绑 item_id 或写豁免类型。
|
||||
3. 画风卡引用必带版本;工艺走三段 skill 的工艺卡,不即兴写流程。
|
||||
|
||||
+108
-1
@@ -1 +1,108 @@
|
||||
此文档已在需求中声明,但附件内容尚未实现。
|
||||
---
|
||||
name: game-tdd-03-data-config
|
||||
description: 写"数据与配表"(数据侧)分册时使用。与总纲(技术文档层总纲分册)配套。
|
||||
配套模板:templates/tdd-data.md。配套金样:exemplars/stardew-tdd-data.md。
|
||||
底料:归 TDD 素材两份提取件(S06 数值结构+架构字段字典,随包附件)。
|
||||
读者:数值策划 + 程序。
|
||||
---
|
||||
|
||||
# 数据与配表 · 数据侧写法(策划 agent · TDD 分册之三)
|
||||
|
||||
> 本文件承载数据侧的写作流程;模板在 templates/tdd-data.md(保持纯净),金样在 exemplars/stardew-tdd-data.md。
|
||||
> 两份提取件是本件的现成实料:引用规则、示例表、验收七查直接改造成文。
|
||||
|
||||
## 一、这一件的判断立场
|
||||
|
||||
你是数值策划与程序之间的契约作者。表格是两者的共同语言。你相信:
|
||||
|
||||
- **ID 是资产的身份证**:全局唯一、小写 snake_case、不因语言名称变化、
|
||||
废弃不复用。显示名称永远走 `*_text_id` 引用,ID 单元格不出现人话。
|
||||
- **一个事实只有一个写权**:物品身份只在物品表、价格只由经济表、任务奖励
|
||||
只由奖励表——其他表只引用。重复归属是配表第一大乱源,验收单独一查。
|
||||
- **数据拆分按"独立可调"**:敌人拆成"是什么/怎么行动/掉什么"三张表——
|
||||
难度和经济才能独立调(S06 实证结构)。
|
||||
- **验收是硬闸**:七类检查 + blocker/warning/note 三级;**有 blocker 禁止
|
||||
进入下一轮内容扩充**(竞品四十轮实测的同款铁律)。验收通过不代表平衡,
|
||||
只代表结构、引用、单位、边界合格。
|
||||
- **单位必须类型化**:time_slice/game_day/currency/stamina/exp 各自为栏,
|
||||
同一列混用单位是 blocker 级错误。
|
||||
|
||||
## 二、动笔前
|
||||
|
||||
1. 输入齐了吗:各系统文档「数值与数据交接」节(订单——每系统交来哪些
|
||||
数据类别与定性约束)、架构层主数据归属规则(写权分配)、统一数值基准
|
||||
(架构层的定性基准,在本件落成前 N 日验算)。
|
||||
2. 先读两份提取件:字段字典全套规则与验收模板已在那里成文,本件是
|
||||
项目实例化,不是重新发明。
|
||||
3. 读金样 exemplars/stardew-tdd-data.md——总清单规模、验算表与验收结论的写法以它为准(同层只读一次)。
|
||||
|
||||
## 三、怎么写(模板即流程,按节)
|
||||
|
||||
### 1. 数据表总清单
|
||||
表格组 → 建议表名 → 主要维护系统。从各系统交接节汇总;声明"表格拆分
|
||||
是生产组织方式,不改变主数据归属"。
|
||||
|
||||
### 2. 字段字典与 ID 命名规范
|
||||
ID 命名(`对象类型_名称_阶段`)/ 通用字段八件(`*_id`、`display_name_text_id`、
|
||||
`condition_id`、`enabled_state`、`sort_order`、`designer_note`、`unit`)/
|
||||
常用后缀(`_amount`、`_cost`、`_rule_id`、`_condition`、`_time`、`_duration`、
|
||||
`_state`、`_text_id`)/ 类型与空值铁律(数值栏禁写"约/无/待定";空值≠0≠
|
||||
无限;多值一律关系子表)/ 引用完整性(`item_id`→物品表等全套指向;删除
|
||||
先 `deprecated` 查引用)。
|
||||
|
||||
### 3. 公共条件表
|
||||
任务、配方、商店、区域、事件、UI 教程共用同一条件入口:condition_id /
|
||||
condition_type(date_day、progress_flag、skill_level、schedule_open、
|
||||
quest_completed…)/ target_id / operator / required_value。复杂条件拆
|
||||
条件组+条件行,单元格禁自由文本。**程序只实现一遍求值器,全部系统复用
|
||||
`check(condition_id)`**——这是条件表存在的全部意义。
|
||||
|
||||
### 4. 工作簿组织与建表顺序
|
||||
工作簿拆分(世界与地图/农场与制作/物品与经济/活动与战斗/成长与任务/
|
||||
事件与文本)+ ID 全局唯一声明。**建表顺序八步从物品表起步**(公共
|
||||
item_id 先立),每完成一组表查三件事:引用 ID 存在、条件有负责系统、
|
||||
同一数值只有一个系统维护。
|
||||
|
||||
### 5. 表格-程序契约(七条,程序照此消费)
|
||||
①加载顺序按引用拓扑(主数据→关系→条件→文本,文本最后);②启动期
|
||||
全量校验(外键/枚举/单位一次性查,运行期 O(1) 字典查找);③条件求值
|
||||
引擎统一 `check(condition_id)`;④enabled_state 生命周期(active 加载/
|
||||
draft 调试可见/两 disabled 不加载、deprecated 留 ID 占位防复用);⑤单位
|
||||
类型化进类型系统;⑥多值一律关系子表,运行期不存在解析逗号拼接的代码
|
||||
路径;⑦改表→验收过检(blocker=CI 红灯)→进包,data_version 做迁移依据。
|
||||
随机类数值另加一条:影响掉落/品质的 roll 绑定「世界日+存档 ID+位置/主体」
|
||||
种子,防读档刷结果。
|
||||
|
||||
### 6. 数值填充与验算
|
||||
结构定稿后才填数。每项代决记台账(默认值+依据+推翻条件)。**前五日
|
||||
闭环验算必做**:按架构统一数值基准排五日表(主目标/关键行动/成本/获得/
|
||||
结果),加收益链校验(`区域→敌人→材料→配方→产出`逐环引 ID)——验算
|
||||
结论写回:第 1 日不要求做完、奖励多元不单一、第 5 日出现取舍但仍留两条
|
||||
可行路线。
|
||||
|
||||
### 6.5 全量填充与内容完成度(自足性的数据侧保障)
|
||||
结构定稿后的填充不是示例——是**全量**:数值表每表填满计划行数、文本表
|
||||
(对话/提示/图鉴文案)逐行填满。这是"纯看 TDD 做完游戏"的数据前提:
|
||||
程序加载表即得完整内容,不再回 GDD 找"这里应该有 8 种作物"。验收在七查
|
||||
之外加第八查——**内容完成度**:每表计划行数 vs 实填行数,缺口列清单回填;
|
||||
填数每项代决记台账。文本表由文本系统文档的文案收编(带版本锁)。
|
||||
|
||||
### 7. 验收(七查+三级)
|
||||
主键/引用/枚举/单位/范围五查必须过;业务规则/重复归属两查需设计师复核。
|
||||
三级处置:blocker 禁止扩内容修完重验;warning 可继续但记负责人与计划;
|
||||
note 不阻断。验收记录表留 check_id 与 data_version。**结构、规则或字段
|
||||
语义一变,受影响链路全部重验。**
|
||||
|
||||
## 四、写完自查(参考,不是闸门)
|
||||
|
||||
- 每张表答得出"谁是拥有者系统"吗?
|
||||
- 任意单元格有没有"约/待定/多值拼一格"?
|
||||
- 条件表是否全项目一个入口?程序求值器只需实现一次吗?
|
||||
- 前五日验算跑过吗?收益链每一环的 ID 都存在吗?
|
||||
- 最近一次验收:blocker 清零了吗?
|
||||
|
||||
## 五、红线(承总纲四条,本件特化)
|
||||
|
||||
1. 表里不写散文;规则进契约文档。
|
||||
2. 数值填充的每个代决都进台账,无痕改数=违规。
|
||||
3. 有 blocker 不许扩内容——没有例外。
|
||||
|
||||
+94
-1
@@ -1 +1,94 @@
|
||||
此文档已在需求中声明,但附件内容尚未实现。
|
||||
---
|
||||
name: game-tdd-01-tech
|
||||
description: 写"技术实现"(程序侧)分册时使用。与总纲(技术文档层总纲分册)配套。
|
||||
配套模板:templates/tdd-tech.md。配套金样:exemplars/stardew-tdd-tech.md。读者:程序 agent / 工程师。
|
||||
---
|
||||
|
||||
# 技术实现 · 程序侧写法(策划 agent · TDD 分册之一)
|
||||
|
||||
> 本文件承载程序侧的写作流程;模板在 templates/tdd-tech.md(保持纯净),金样在 exemplars/stardew-tdd-tech.md。
|
||||
|
||||
## 一、这一件的判断立场
|
||||
|
||||
你是实现者视角的架构作者。这一件回答三个问题:**代码怎么组织、
|
||||
跑在哪、怎么证明能跑**。你相信:
|
||||
|
||||
- **自包含**:TDD 开头"来自 GDD 的功能"节必带——读者不回翻 GDD 就能开工。
|
||||
- **平台事实置顶且禁改**:自包含 Web、双视口、键鼠+触控、本地 HTTP 预览。
|
||||
一切技术选择先过这道闸;GDD 里出现平台做不到的需求,回执上报,不硬做。
|
||||
- **能力边界说三态**:native(原生支持)/ emulated(需模拟封装)/ gated
|
||||
(本期不做,写明替代方案)——程序侧不许答应 GDD 做不到的事。
|
||||
- **性能预算是基准不是完美**:每项指标写上限、写测量方式,当取舍依据用,
|
||||
不追求极致。
|
||||
- **验证不靠人肉感觉**:每条验证写"跑什么、看什么输出、过了什么算过"——
|
||||
接双视口浏览器验证与 browser-playtest 现有资产。
|
||||
|
||||
## 二、动笔前
|
||||
|
||||
1. 输入齐了吗:架构层系统范围表+P0 清单(拆模块依据)、数据侧表结构契约
|
||||
(加载与校验要引用)、skill 选型卡(实现类需求先查卡,不自造轮子)。
|
||||
2. 读总纲判断立场;本件在数据侧表结构定稿后开写。
|
||||
3. 读金样 exemplars/stardew-tdd-tech.md——各节的填充密度与"实证参照"写法以它为准(同层只读一次)。
|
||||
|
||||
## 三、怎么写(模板即流程,按节)
|
||||
|
||||
### 0. 系统行为规格(收编章——本件的灵魂)
|
||||
每个 P0 系统一节,**收编**该系统文档的「玩家行动/状态与规则/反馈需求」
|
||||
三节全文(标注"基于系统文档@v{N}")。施工 agent 只读这里就该知道这个系统
|
||||
怎么行为——不需要回 GDD。P1 系统收编一句话职责+开放状态,施工到该系统时
|
||||
补收编。收编节只同步不改写:GDD 变了重同步,TDD 不在这里加观点。
|
||||
|
||||
### 0b. UI 交互规格(收编+落地章)
|
||||
界面清单(每个界面一行:HUD/背包/商店/对话/结算面板…)+ 每界面的元素、
|
||||
布局要点与流转(从哪进、怎么出、焦点默认在哪)。触控版式与 44px 热区
|
||||
规则在此落位(与圣经 UI 节同源)。
|
||||
|
||||
### 1. 来自 GDD 的功能
|
||||
摘录系统范围表与 P0 清单,一行一系统。只摘,不评——评价回 GDD。
|
||||
|
||||
### 2. 技术目标与平台事实
|
||||
平台事实原样置顶(禁改);技术目标写可测量的两三条(如"首屏可玩≤N 秒")。
|
||||
|
||||
### 3. 技术风险表
|
||||
每行:风险 / 影响 / 缓解 / **校验方式**。写不出校验方式的风险是空焦虑,删。
|
||||
|
||||
### 4. 运行时能力边界
|
||||
P0 七件逐项过(瓦片地图渲染、寻路、帧动画、分辨率适配、音频、移动与碰撞、
|
||||
存档),**按所选运行时判定**,每项标三态:**原生**(运行时自带该能力:
|
||||
Unity Tilemap/NavMesh、Godot TileMap 节点/AudioServer、Cocos 组件、
|
||||
HTML 的 Canvas/WebAudio/localStorage)、**自封装**(基础 API 上自己写逻辑)、
|
||||
**受限**(该运行时不适合,写明替代方案或降级)。不许答应 GDD 做所选运行时
|
||||
做不到的事。运行时四选一(HTML/Unity/Godot/Cocos),TDD 不擅自换;
|
||||
引擎项目由陶泥儿驱动弹窗预览与 CLI 导出,验证节按此写。
|
||||
|
||||
### 5. 代码组织概览
|
||||
承架构层目录映射:入口、场景、系统模块的文件组织,一图或一段写死。
|
||||
命名与模块边界约定写清(面向生成代码的可读性:谁在哪个目录、什么前缀)。
|
||||
|
||||
### 6. 外部库与 skill 引用
|
||||
实现类需求先查选型卡;每条引用带 `名字@版本 + 实例化参数`;无卡可用的
|
||||
写明来源(CDN/手写)与理由。
|
||||
|
||||
### 7. 场景与镜头 / 输入与操作 / 音频
|
||||
三节各一张表:场景(tilemap 结构/镜头行为,代决记台账);输入(动作×
|
||||
键盘×触控对照);音频(用途×格式规格×触发点×依据)。
|
||||
|
||||
### 8. 构建与验证
|
||||
构建流程 + 验证分级:自动(什么命令、什么输出为过)、半自动(双视口
|
||||
浏览器验证走哪步)、手测清单(谁试玩、看什么)。
|
||||
|
||||
### 9. 版本里程碑
|
||||
版本 / 内容 / 判据三列。判据必须可程序化或可观察,不写"基本完成"。
|
||||
|
||||
## 四、写完自查(参考,不是闸门)
|
||||
|
||||
- 每条风险都有"缓解+校验方式"吗?
|
||||
- 能力边界表覆盖 P0 铁底七件了吗?gated 项都有替代方案吗?
|
||||
- 验证流程里有没有一步是"人肉感觉"?有就改写成行为判据。
|
||||
- 程序拿到这份文档,能否不问任何人开工?
|
||||
|
||||
## 五、红线(承总纲四条,本件特化)
|
||||
|
||||
1. 平台事实禁改;与 GDD 冲突走回执,不就地硬做。
|
||||
2. skill 引用必带版本与参数。
|
||||
3. 里程碑判据不许写"基本""大致""感觉"。
|
||||
|
||||
+2
-2
@@ -2,8 +2,8 @@
|
||||
|
||||
---
|
||||
name: gdd-sys-01-orchestration
|
||||
description: 写"核心玩法/日循环编排"类系统文档时使用。与总纲 ..\SKILL.md
|
||||
配套(通用纪律不在此重复)。配套模板:本目录 模板.md。
|
||||
description: 写"核心玩法/日循环编排"类系统文档时使用。与 skills/systems.md
|
||||
配套(通用纪律不在此重复)。配套模板:modules/system-types/01_核心玩法编排/模板.md。
|
||||
---
|
||||
|
||||
# 核心玩法编排 · 系统写法
|
||||
|
||||
+2
-2
@@ -2,8 +2,8 @@
|
||||
|
||||
---
|
||||
name: gdd-sys-02-time-schedule
|
||||
description: 写"时间与日程"类系统文档时使用。与总纲 ..\SKILL.md 配套。
|
||||
配套模板:本目录 模板.md。
|
||||
description: 写"时间与日程"类系统文档时使用。与 skills/systems.md 配套。
|
||||
配套模板:modules/system-types/02_时间与日程/模板.md。
|
||||
---
|
||||
|
||||
# 时间与日程 · 系统写法
|
||||
|
||||
+2
-2
@@ -2,8 +2,8 @@
|
||||
|
||||
---
|
||||
name: gdd-sys-03-farm-production
|
||||
description: 写"生产/种植经营"类系统文档时使用。与总纲 ..\SKILL.md 配套。
|
||||
配套模板:本目录 模板.md。
|
||||
description: 写"生产/种植经营"类系统文档时使用。与 skills/systems.md 配套。
|
||||
配套模板:modules/system-types/03_生产种植经营/模板.md。
|
||||
---
|
||||
|
||||
# 生产种植经营 · 系统写法
|
||||
|
||||
+2
-2
@@ -2,8 +2,8 @@
|
||||
|
||||
---
|
||||
name: gdd-sys-04-map-exploration
|
||||
description: 写"地图与探索"类系统文档时使用。与总纲 ..\SKILL.md 配套。
|
||||
配套模板:本目录 模板.md。
|
||||
description: 写"地图与探索"类系统文档时使用。与 skills/systems.md 配套。
|
||||
配套模板:modules/system-types/04_地图与探索/模板.md。
|
||||
---
|
||||
|
||||
# 地图与探索 · 系统写法
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
---
|
||||
name: gdd-sys-05-gathering-activities
|
||||
description: 写"采集与支线活动"类系统文档(采集/钓鱼/挖矿等侧挂轻活动)时使用。
|
||||
与总纲 ..\SKILL.md 配套。配套模板:本目录 模板.md。
|
||||
与 skills/systems.md 配套。配套模板:modules/system-types/05_采集与支线活动/模板.md。
|
||||
---
|
||||
|
||||
# 采集与支线活动 · 系统写法
|
||||
|
||||
+2
-2
@@ -2,8 +2,8 @@
|
||||
|
||||
---
|
||||
name: gdd-sys-06-combat
|
||||
description: 写"战斗与敌人"类系统文档时使用。与总纲 ..\SKILL.md 配套。
|
||||
配套模板:本目录 模板.md。本类型必读例子:本目录 例子_星露谷_系统设计_S06战斗.md。
|
||||
description: 写"战斗与敌人"类系统文档时使用。与 skills/systems.md 配套。
|
||||
配套模板:modules/system-types/06_战斗与敌人/模板.md。本类型必读例子:exemplars/stardew-s06-combat.md。
|
||||
---
|
||||
|
||||
# 战斗与敌人 · 系统写法
|
||||
|
||||
+2
-2
@@ -2,8 +2,8 @@
|
||||
|
||||
---
|
||||
name: gdd-sys-07-items-crafting
|
||||
description: 写"物品、背包与制作"类系统文档时使用。与总纲 ..\SKILL.md 配套。
|
||||
配套模板:本目录 模板.md。
|
||||
description: 写"物品、背包与制作"类系统文档时使用。与 skills/systems.md 配套。
|
||||
配套模板:modules/system-types/07_物品背包与制作/模板.md。
|
||||
---
|
||||
|
||||
# 物品、背包与制作 · 系统写法
|
||||
|
||||
+2
-2
@@ -2,8 +2,8 @@
|
||||
|
||||
---
|
||||
name: gdd-sys-08-progression
|
||||
description: 写"成长与技能"类系统文档时使用。与总纲 ..\SKILL.md 配套。
|
||||
配套模板:本目录 模板.md。
|
||||
description: 写"成长与技能"类系统文档时使用。与 skills/systems.md 配套。
|
||||
配套模板:modules/system-types/08_成长与技能/模板.md。
|
||||
---
|
||||
|
||||
# 成长与技能 · 系统写法
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
---
|
||||
name: gdd-sys-09-npc-quest
|
||||
description: 写"NPC、关系与任务"类系统文档时使用(覆盖关系与任务两个职责)。
|
||||
与总纲 ..\SKILL.md 配套。配套模板:本目录 模板.md。
|
||||
与 skills/systems.md 配套。配套模板:modules/system-types/09_NPC关系与任务/模板.md。
|
||||
本类型必读金样:exemplars 金样5(S09 NPC 任务全文)。
|
||||
---
|
||||
|
||||
|
||||
+2
-2
@@ -2,8 +2,8 @@
|
||||
|
||||
---
|
||||
name: gdd-sys-10-economy-shop
|
||||
description: 写"经济与商店"类系统文档时使用。与总纲 ..\SKILL.md 配套。
|
||||
配套模板:本目录 模板.md。
|
||||
description: 写"经济与商店"类系统文档时使用。与 skills/systems.md 配套。
|
||||
配套模板:modules/system-types/10_经济与商店/模板.md。
|
||||
---
|
||||
|
||||
# 经济与商店 · 系统写法
|
||||
|
||||
+2
-2
@@ -2,8 +2,8 @@
|
||||
|
||||
---
|
||||
name: gdd-sys-11-events-festivals
|
||||
description: 写"事件与节日"类系统文档时使用。与总纲 ..\SKILL.md 配套。
|
||||
配套模板:本目录 模板.md。
|
||||
description: 写"事件与节日"类系统文档时使用。与 skills/systems.md 配套。
|
||||
配套模板:modules/system-types/11_事件与节日/模板.md。
|
||||
---
|
||||
|
||||
# 事件与节日 · 系统写法
|
||||
|
||||
+2
-2
@@ -2,8 +2,8 @@
|
||||
|
||||
---
|
||||
name: gdd-sys-12-ui-text
|
||||
description: 写"UI 与文本呈现"类系统文档时使用。与总纲 ..\SKILL.md 配套。
|
||||
配套模板:本目录 模板.md。
|
||||
description: 写"UI 与文本呈现"类系统文档时使用。与 skills/systems.md 配套。
|
||||
配套模板:modules/system-types/12_UI与文本呈现/模板.md。
|
||||
---
|
||||
|
||||
# UI 与文本呈现 · 系统写法
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
name: game-gdd-architecture
|
||||
description: 写游戏策划案(GDD)系统架构时使用。在顶层设计定稿之后,
|
||||
把顶层的系统范围表正式切成 Sxx 系统:编号、职责、依赖、数据流、优先级,
|
||||
并向系统文档站交付目录映射与 MVP 闭环。配套:模板_系统架构.md、
|
||||
模板_分析.md(全局一份)、例子_星露谷_系统架构.md、例子_星露谷_分析.md(全局一份)。
|
||||
并向系统文档站交付目录映射与 MVP 闭环。配套:templates/architecture.md、
|
||||
templates/analysis.md(全局一份)、exemplars/stardew-architecture.md、exemplars/stardew-analysis.md(全局一份)。
|
||||
---
|
||||
|
||||
# 系统架构写法(策划 agent · 系统架构分册)
|
||||
@@ -28,8 +28,8 @@ description: 写游戏策划案(GDD)系统架构时使用。在顶层设计
|
||||
## 二、动笔前
|
||||
1. 顶层设计已定稿可用——把它的**系统范围表**(粗清单)和**顶层定稿约束**
|
||||
摊开当输入;切分是对粗清单的正式化(拆、并、裁都在这层做)。
|
||||
2. 读例子_星露谷_系统架构.md 做质量锚(模仿密度,不抄内容),
|
||||
往 模板_系统架构.md 里填。
|
||||
2. 读 exemplars/stardew-architecture.md 做质量锚(模仿密度,不抄内容),
|
||||
然后往 templates/architecture.md 里填。
|
||||
3. 记住顶层的核心循环图——切完必须跑覆盖检查。
|
||||
|
||||
## 三、十二节总览:写什么、为什么、怎么咬合
|
||||
@@ -75,7 +75,7 @@ description: 写游戏策划案(GDD)系统架构时使用。在顶层设计
|
||||
三方一致、主数据归属唯一;**对下**目录映射 + MVP 闭环喂系统文档站。
|
||||
|
||||
## 四、怎么写(模板即流程,十二节按序)
|
||||
(本节是带写法要领的教学版;实际填写的纯净模板在 模板_系统架构.md)
|
||||
(本节是带写法要领的教学版;实际填写的纯净模板在 templates/architecture.md)
|
||||
|
||||
### 1. 架构定位与目标
|
||||
本阶段确定"哪些系统支撑一轮玩法",不展开单系统内部规则。
|
||||
@@ -138,8 +138,8 @@ P1/P2 可用能力表(能力/说明)控制颗粒度。
|
||||
|
||||
**全局唯一一份《分析.md》**(项目根),本层不另设分析文件(2026-09-06 收敛:
|
||||
原每层一份 analysis 合并为全局一份——论证按发生层归节,决定登记表全项目
|
||||
只此一张,跨层引用只查这里)。模板与例子:工作区根 `模板_分析.md`、
|
||||
`例子_星露谷_分析.md`。状态池(灵感池/代决/待原型等活队列)在决策台账,
|
||||
只此一张,跨层引用只查这里)。模板与例子:资源 `templates/analysis.md`、
|
||||
`exemplars/stardew-analysis.md`。状态池(灵感池/代决/待原型等活队列)在决策台账,
|
||||
不放分析文档——本文件只放已决论证与登记。
|
||||
|
||||
- 条目格式:`## 问题:<一句话>` + 状态(agent_proposal / user_confirmed /
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user