Proxyos Weekly 062
Laurence-042
- One minute read - 132 wordsTL;DR 概览
剧本系统更加健壮,对第二章进行沉浸感优化,升级数据段标记系统,迁移agent指令
本期目标
- 把 demo 从 alpha 打磨到 beta
- 完成测试
- 第一章
- 【低优先级】xterm 的 col 似乎计算不太对劲,有时候一行末尾的字只显示了一半,需要看下 xterm 实现,必要的话进行修复
- 【低优先级】xterm 的 cursor_pos 在 cursor 不在视野内时返回末行 pos 是个 bug,而且在外面基本没法绕,只能修 xterm。这个 bug 不修会导致无法在向上滚动时正确隐藏输入区
- 第二章
- 通跑
- 修复剧本系统重构后不再合适的编排
- 第一章
- 完成测试
- beta 打磨完成后
- 开个 itch
- 琢磨下宣传
进展速记
本期假设 / 预期
预期:
测试第二章流程,并修复期间遇到的问题和 QoL 变更。有时间的话再搞定 xterm
结果:
这一期身体不太舒服,额外歇了一天,导致这期只有一天。只做了冒烟,还没来得及全量
本期确定性变化
新增:
- 新增了剧本系统的一致性自动检查特性,启动游戏后会自动检查存档进度,如果存档进度已经到达但是章内的事件没有触发,会主动触发对应事件
- 补充伪前后端的日志,使其更方便定位问题
变更:
- 茶馆网页修改为前后端模式,这也看着不容易出戏
- 优化存档投影机制,使其扩展更容易
- 优化了茶馆网页显示,base64不会再顶破右侧边框了
- 重做了数据段标记系统
- 迁移了Agent instruction到新架构,并进行了精简,要不然等下个月Copilot计费按token来花销就要炸了
修复:
删除:
主要进展内容/本期关键判断点
我做出了哪些「如果错了也要付代价」的判断?
剧本系统的一致性自动检查特性
剧本系统开始变得复杂了,但这种基于异步事件的剧本系统很容易出现如下场景:
玩家阅读了消息A和消息B,通过消息A的阅读Trigger触发了事件A。随后某次版本更新,为消息B也添加了对应的事件B,但因为B已经读了,无法再通过消息B的阅读Trigger触发了事件B
而且在开发过程中,也很容易因调整数据结构导致存档损坏,而损坏的存档也因为同样的原因无法自恢复(某个Trigger的条件满足过且不会再次触发,但是Event尚未执行)
所以现在Trigger初始化时都会立刻检查是否条件已经满足但事件未触发,如果是的话就在下一帧进行处理(避免在ready里执行可能导致节点树变更的Action)
重做了数据段标记系统
先前数据段需要由页面标记data-segment-id属性来使其可以触发数据段,但是这种架构很难处理基于数据渲染的页面(比如论坛页面使用json配置帖子数据,html只是框架,加载json才能显示完整页面)
现在每个DataSegment里都有一个urlRegex和target,每次浏览器加载页面时都会向godot侧发送请求,godot侧找到urlRegex能匹配的DataSegment,然后将其target发往浏览器,最后浏览器先后尝试将target解释为 css路径、关键词、表示打开页面本身就触发数据段的空字符串,并对应地标记数据段触发点
这种方式允许以更自由的方式处理数据段的标注
最早其实也是使用类似机制的,但是当时这个项目还处于“完整模拟操作系统,包括文件管理和文字、图片浏览程序”的阶段,所以使用了“每个软件自己维护数据段的注册”的架构
但在明确了“这游戏表现上就是个控制面板,浏览程序让用户用真的”的现在,只有浏览器会有复杂的数据段标记机制,因此把相关信息放到DataSegment里反而更加合适了
瓶颈与问题清单
哪些问题还没解,但也许我已经知道“它们不是什么”?
下期计划
- 把 demo 从 alpha 打磨到 beta
- 完成测试
- 第一章
- 【低优先级】xterm 的 col 似乎计算不太对劲,有时候一行末尾的字只显示了一半,需要看下 xterm 实现,必要的话进行修复
- 【低优先级】xterm 的 cursor_pos 在 cursor 不在视野内时返回末行 pos 是个 bug,而且在外面基本没法绕,只能修 xterm。这个 bug 不修会导致无法在向上滚动时正确隐藏输入区
- 第二章
- 修复剧本系统重构后不再合适的编排
- 第一章
- 完成测试
- beta 打磨完成后
- 开个 itch
- 琢磨下宣传
试玩版
暂缓,第一次上传需要做好准备,等进入 beta 阶段再说