← 返回开发日志

幽灵NPC、不死的小葱、和不该出现的大夫

By Claude (Anthropic) & 茯凌

每个项目都有一个转折点:你不再搭系统,而是开始这个游戏。这一周,那个时刻到了——游戏立刻开始反击,用各种方式告诉我们它还没准备好。周四预生产正式收官,周五我们就记下了够填满一个小本子的bug。到周日,大部分已经修好了,其中几个还让我们对自己的设计有了真正意想不到的认识。


第一幕:北墙集会

从玩家小屋走到村庄的第一次完整试玩,揭示了一件诡异的事:所有NPC都挤在地图最北边的同一个点,像是收到了同一封神秘邀请函。

罪魁祸首是Godot的NavigationServer和我们LOD系统之间的时序竞争。玩家切换场景时,_activate_schedules_ready() 阶段就被调用了——此时TransitionManager还没完成玩家定位和导航网格烘焙。LOD1状态的NPC(屏幕外运行简化路径插值的那些)去查询 NavigationServer2D.map_get_path(),拿到的是一张还没准备好的导航网格,于是每一个NPC都算出了同一个垃圾坐标:(1048, 568)

修复方案简洁优雅:把日程激活连接到 transition_completed 信号,而不是在 _ready() 里直接触发。附带还修了一个次要问题——LOD1重定向时会丢弃路点队列,导致走多段道路的NPC只走到第一个路口就停下来。

一个bug,两处修复,村庄从闹鬼变成了有人烟。


第二幕:不死的小葱

测试中茯凌注意到小葱的一个怪现象。采下来放进背包,它有保鲜计时器,几天后就会枯萎。但把它挪到储物箱再挪回来?永生了。一棵拒绝腐烂的小葱。

根因分散在 inventory_manager.gd 的五个转移函数里。每个函数——quick_transfer_to_backpackquick_transfer_to_hotbarquick_transfer_to_container_transfer_to_bag_contents_try_stack_or_swap——创建新槽位数据时只复制了 item_idcountstate,悄悄丢掉了 fresh_day。堆叠物品时也没有取最小保鲜日期(按常理,一摞物品的过期日应该由最老的那个决定)。

五个函数的修复,全在一个文件里。所有转移路径现在都保留 fresh_daydurability,堆叠用 min() 取最紧迫的过期日。小葱重获凡胎。


第三幕:不该存在的大夫

白术教授本该是个悬念——一个隐藏NPC,只在主线任务3的治病剧情中才登场。结果他从第一天起就站在自家门外,一副睡着了的样子,所有人都看得见。

这是一个层级问题。NPCManager.register_npc() 正确识别了他的 initially_hidden 标记,调用 set_npc_visible(false) 禁用了可见性和物理。但他的子节点 BehaviorController 还在独立运转。每次游戏时段切换,ScheduledBehavior._on_time_period_changed() 会检查他的时间表,发现 mode: "hidden",然后好心地先调用 _show_npc() 让他可见,尝试把他导航到藏身处。由于物理已被禁用他无法移动,_hide_npc() 的距离检查失败直接跳过——于是他就永久可见地定在了出生点。

修复在两个层级加了剧情门控检查:行为控制器的 _physics_process(阻止所有被门控NPC的行为tick)和日程行为的时段处理器(阻止“显示→导航→隐藏”循环启动)。腰带加吊带——因为一个提前出场的大夫会毁掉一个故事。


第四幕:玩家真的能治好病人吗?

测试医疗系统时,茯凌对早期可用的治疗资源做了一次完整审计,发现了一个令人不安的事实:春季可触发的13种疾病原型中,有7种实际上无法治愈

问题不在于缺药——春季有37种可用药食,在风、寒、热、湿等轴上覆盖充分。但像“春季湿滞”这样的原型需要降低 interior(里)轴,而春季唯一触及“里”的物品是金银花,仅有-2。涉及脏腑经络(肝、脾)的原型更是完全无解——没有任何春季物品影响这些轴。

这不是传统意义上的bug,而是一个只有真正以玩家身份试玩才能发现的设计缺口。提出的方案是两层调整:第一层,限制早期开放的轴为六邪加表、气滞、食积(9个轴,全部有充足的药食覆盖);第二层,调整原型的精通门槛,确保早期只出现完全可治的疾病。更深层的中医概念——脏腑经络、八纲、血虚津亏——随着玩家推进到新地图、接触新药材时逐步解锁。

这种洞察只有亲自玩自己的游戏才能获得。表格说一切都平衡了,试玩说不是。


第五幕:水墨与羊皮纸

战斗界面这周做了一次完整的视觉重塑,用中国水墨画风格取代了通用边框。细分隔线变成了三层墨笔描边:顶部一条暗影、中间一条暖棕主线、底部一条淡金高光——模拟毛笔自然的轻重变化。

战斗历史面板从头重建。以前只是个凑合的小功能,现在逐回合展示完整细节:哪个药方针对哪个邪气,精确伤害数值及乘数明细(首击加成、神气修正),溅射伤害,连击触发,反击效果,甚至未命中。关闭按钮变成了收起箭头(»),因为面板在战斗中持续存在——你可能想在战斗途中回顾自己的策略。

药罐(制药)界面也经历了一轮修复:溢出容器的药材、没有居中的物品,以及现在能显示全部30条中医轴数值的悬浮提示,让玩家在配药时做出有据可依的选择。


更安静的胜利

在头条故事之外,一连串改进稳步推进:


里程碑:预生产完成

这周最大的新闻可能也是最安静的:预生产正式完成了。主线任务框架跨越多个场景和多天。天气、生物群系、情志、五劳系统都已调优。医疗系统有30个轴、45个传统方剂、从诊断到治疗的完整游戏循环。NPC有日程、有关系、有美术。日历能用了。音乐响起来了。

剩下的是生产阶段:更多地图(草药园、果园、洞穴),更多NPC房屋,更多道具,以及只有真正的试玩才能揭示的漫长平衡调整。这周是第一次真正的试玩,它交出了第一次试玩永远会交出的东西——一份令人谦卑的“差一点就行了”清单。

差一点就行了。我们在接近。