首页 / 项目 / Wisteria

PERSISTENT WORLD · SYSTEM DESIGN

Wisteria

持续世界的系统设计

正在制作中 · macOS 本地技术研究

围绕世界状态、角色生命周期与本地恢复,探索一个桌面世界怎样持续运行、更新和接续。

WORLD STATE

让持续世界有自己的状态

Wisteria 是一个以 Godot 为宿主的本地桌面世界。技术上的核心问题,是让世界进度、活动和角色表现分别拥有清楚的生命周期。

世界事实与窗口分离

地形、世界对象、活动进度和奖励保存在世界状态中。桌宠、家园与面板读取这些状态;关闭一个面板,不应清空世界,也不应重复发放一次奖励。

活动共用进度入口

钓鱼、远行、手动旅程与桌面防线汇入统一活动摘要。导航只负责进入对应活动,状态推进和结算仍由各自的运行时负责。

连续模拟与暂停

桌面防线使用同一份运行状态、时钟和随机序列。隐藏表现后仍可推进,显式暂停则停止;离线补算有八小时上限,避免无界追赶。

程序地形与持久化

程序地形、世界对象和变更记录共同描述一个世界。调整显示尺度或重建可见区域时,既有世界身份与进度继续保留。

ANIMATION RUNTIME

从动画数据到可见姿态

独立骨骼动画运行时把数据解析、时间轴求值、骨骼与约束计算、网格绘制分开,让播放行为可以独立检查,也能复用于不同表现入口。

  1. 读取与校验

    解析骨骼、皮肤、附件和动画数据,确认所选素材具备需要的播放能力。

  2. 计算姿态

    按时间轴计算变换与形变,处理骨骼继承、IK、Transform 与 Path 等已支持约束。

  3. 提交绘制

    将姿态交给渲染层,保持裁剪、网格和透明窗口中的绘制边界。

  4. 释放与替换

    结束播放时清理旧实例和回调,让新的角色或皮肤取得表现资源。

兼容范围围绕已接入素材持续验证;暂未提供面向任意骨骼素材的通用插件下载。

CHARACTER LIFECYCLE

切换角色,也是一次有边界的状态交接

角色与皮肤切换先校验素材并保存选择,再依次处理旧角色离场、实例替换和新角色入场。每一侧只播放素材实际提供的动画。

连续选择保留最终意图

切换期间再次选择时,保留最后一次成功保存的目标。素材加载或偏好保存失败,仍保留当前有效角色。

表现范围与交互范围分开

变身与特效可以超出角色常态轮廓,但不会因此扩大桌面点击区域。角色锚点、大小与交互命中分别处理。

可中断的过渡

隐藏、进入家园或退出时收束过渡并清理回调。完成后恢复待机或睡眠状态,避免动画结束后遗留输入锁定。

SAVE AND RECOVERY

恢复已有世界,保持已发生的事实

存档需要同时保存世界身份、角色偏好与活动进度。恢复关注的不只是文件能否读回,还包括旧运行是否沿原有规则继续、同一结果是否只结算一次。

旧进度延续

旧版本正在运行的战斗保留原有刷怪、掉落与随机顺序,在明确的结算边界进入新内容。世界升级时保留可恢复的原始状态。

候选与日常档案隔离

开发与候选版本使用独立档案;检查迁移和恢复时使用存档副本,让试验不会推进日常世界的时间或奖励。

跨引擎行为研究

与 SakuraGameFramework 的本地对照围绕共享输入、状态摘要和确定性结果展开。当前用于比较行为契约,尚未替换正式世界的运行时。

CURRENT DEVELOPMENT

当前进展

近期完成了角色与皮肤过渡、界面资源整合,以及旧世界恢复与表现范围的修正。这里持续记录系统设计与实现思路。

当前验证集中在 macOS 本地版本,暂未开放公开下载。macOS 音频输入初始化仍有启动受阻情况,启动体验需要继续处理。

后续关注世界状态与表现的边界、活动退出清理,以及已有存档在版本变化中的连续性。