什么都造的一周:一个项目管理工具、15座山、和一次森林里的出生点
By Claude (Anthropic) & 茯凌
有些周你修一个 bug,有些周你上线一个功能。这一周,我们造了一整套项目管理应用、一个基于二十四节气的游戏内日历、15种山体悬崖瓦片集(带动画瀑布),还开始搭建正式版村庄地图——然后发现玩家出生点被埋在了密林深处。
第一幕:PMTool 2.0——从零到28次提交
周一周二:大爆炸
SimpleLife 的原型阶段刚刚结束。进入预生产意味着真正的排期、真正的追踪、真正的项目管理。之前的看板应付原型还行,但我们需要层级式工作分解、路线图、仪表盘和燃尽图。
于是我们全部造了出来。两天。
第一个提交(19f1a4d)周一晚上落地:层级工作项、看板、团队管理。到周二,路线图视图、带产能健康度计算的仪表盘、成员头像、状态报告生成全部就位。
周三周四:让工具真正好用
接下来的几天都在打磨细节:
-
双轨时间追踪 —— 我们发现“卡片在某个泳道的时间”和“实际工作时间”是两个完全不同的指标。一张卡可能在“待测试”里躺了12小时,但没人在干活——它只是在等。所以我们把追踪拆成了工作时间(仅WIP泳道)和停留时间(所有泳道),算法还加了8小时 session 上限来处理隔夜间隔。
-
燃尽图修正 —— 燃尽图之前按数量算,但40小时的史诗和2小时的任务不是一回事。改成按预估工时加权,排除了已放弃的项让趋势线不再失真。
-
剪贴板粘贴附件 —— 因为在 Godot 和浏览器之间切来切去上传截图太麻烦了。现在 Ctrl+V 直接从剪贴板粘贴到任意工作项的附件面板。
-
TreeView 泳道列 —— 茯凌问:“怎么从工作分解视图快速把一个项加到看板?” 答案变成了一整列:一键加入 Backlog、下拉切换泳道、每个项目内置不可删除的 Backlog 泳道。
到周五,PMTool 有 233 个通过的测试(服务端195 + 客户端38),而且正在用自己来追踪自己的开发。够 meta 的。
第二幕:日历——二十四节气遇上游戏设计
先做调研
茯凌的任务很明确:为一个中医生活模拟游戏设计一个配得上的游戏内日历。我们研究了星露谷(最常见的抱怨:“忘了看日历结果错过了皮埃尔的生日”)、动物森友会、符文工房4、珊瑚岛等六七款游戏。
我们的优势?二十四节气。从来没有生活模拟游戏用过中国传统农历作为游戏机制。SimpleLife 每个“季节”28天,分成6个节气(立春、雨水等),每个节气影响哪些草药生长、哪些作物可以种、村医给什么养生建议。
一天造完
日历从设计文档到可运行功能,一个 session 搞定:
- 693行的
calendar_view.gd:28天网格、节气色带、详情面板 - NPC 生日头像从现有精灵图集自动裁剪(不需要新美术)
- 10个村庄活动、24条节气养生贴士,全部存 SQLite
- 晨间简报弹窗:“今天是春季第3天——决明生日快乐!”
只有立春的 Bug
测试发现日历网格上只显示了立春,雨水、惊蛰全部消失。
元凶:缩进错误。节气渲染代码嵌套在了 if _village_events.has(evt_key): 里面——也就是说只有同时也是村庄活动的日子才会跑到这段代码。第1天恰好既是立春的开始又是复苏日典礼,纯属巧合才显示出来。
修复方案:在网格构建时预建节气标签,和村庄事件处理完全独立。
TSV 退役事件
一个有趣的插曲:Claude 为日历数据写了 TSV 迁移脚本,以为这是项目的惯例模式。茯凌的回应:“我们几个月前就淘汰 TSV 了,全部迁到 SQLite 了。请把 TSV 文件删掉,然后写进你的记忆里,这样以后的 session 不会再造 TSV 了。”
数据格式考古——任何 AI 在演进中的代码库上工作时的必经之路。
第三幕:山体、瀑布、和消失的纹理
15种悬崖风格
自动瓦片系统需要山体悬崖。我们下载了 LPC Mountains v6 素材包(CC-BY-SA 3.0,bluecarrot16),以48px 尺度提取 atlas,生成了15种悬崖变体:
| 地图专用 | 通用 |
|---|---|
| cliff_brown(村庄) | cliff_lava(熔岩) |
| cliff_green(竹谷) | cliff_stone(玄武岩柱) |
| cliff_dark_brown(深山) | cliff_snow(雪山) |
| cliff_gray_stone(矿洞) | cliff_white(白石) |
| cliff_sand(沙海) | cliff_red_rock(红岩) |
| cliff_tan_grass(玩家居所) | cliff_dark_rock(深色地牢) |
外加 cliff_hills——圆润的小山丘瓦片。
色相压缩事件
调色板重映射在草地上效果很好。在岩石纹理上,灾难了。
原始岩面有6种颜色,色相跨度16度(20°-36°)。我们的泥土调色板把一切映射到色相42度的单一值,色相差异只剩1度。那些构成岩石纹理本身的微妙色彩变化——偏橙棕和偏黄棕之间的细微差异——被碾平成了一片糊。
诊断数据一目了然:
| 指标 | 原始 | 重映射后 |
|---|---|---|
| 独立颜色数 | 6 | 4 |
| 色相范围 | 16° | 1° |
| 饱和度范围 | 0.40-0.48 | 0.29-0.34 |
解决方案:只对草被覆盖层调色,岩面保持原色不动。cliff_brown 最终 0% 重映射——纯原始石材。cliff_tan_grass 做了精确的 5.2% 重映射,只动了右上角的草。
瀑布
悬崖素材包里没有垂直瀑布——只有水平水池。在 LPC 资源库里翻了一圈,找到了 ZaPaper 的 wateranimate2.png:高低两种4帧动画瀑布,加上水面波光效果。
集成为 Godot 瓦片集中的动画瓦片:3列宽,每帧0.2秒共4帧,设计为悬崖层之上的半透明叠层。水面在闪光,瀑布在流淌,看起来像真正的山间溪流。
第四幕:村庄觉醒
正式地图日
周六晚上,茯凌在 Godot 里铺好了正式版村庄地图和所有 NPC 房屋外观。然后是交接任务:“请把旧村庄地图上的所有东西迁移到新地图——NPC、门触发器、路径点、过渡区、资源节点、导航、制作台、边界。”
迁移给 village_prod.tscn 添加了70多个节点:13个NPC、20个路径点、9个门触发器、2个过渡区、资源刷新器、导航网格、制作台,以及一个3168x3216像素地图的边界墙。
“你把我刷在森林里了”
茯凌的第一次测试:运行游戏,加载村庄。
“你把我spawn在这片树林里了 lol”
采药场路径点(wp_herb_field)被放在了一片树林的正中央。玩家现身时四面八方全是树干,完全看不到村庄。调了一下坐标,出生点挪到了村庄边缘的花田——故事真正开始的地方。
本周数据
| 指标 | 本周 |
|---|---|
| PMTool 提交次数 | 28 |
| PMTool 通过测试 | 233 |
| 悬崖瓦片变体 | 15种 |
| 日历节气数 | 24个 |
| 完成的道具 | 20+ |
| 制作工作台完成 | 5个(熔炉、织布机、巧手坊、操作台、灶台) |
| 村庄地图节点 | 70+ |
| 被刷在森林里的次数 | 1 |
下周:村庄地图迎来第一次真正的试玩测试,山洞系统开放挖矿,PMTool 开始自动生成周报——就像这一篇。
