Files
BlueArchiveToolkit/docs/archive/READY_FOR_PHASE_1.md

6.8 KiB
Raw Permalink Blame History

准备开始 Phase 1 - 最终确认

日期2026-06-27
当前状态 Phase 0 和 Phase 0.5 已完成


📊 验证工作总结

已完成的验证

  1. Phase 0:技术侦察

    • Unity 版本:2021.3.56f2
    • 资源管理:Unity Addressables
    • AssetBundle 格式:UnityFS
    • 目录结构:完全理解
  2. Phase 0.5:深度验证

    • textassets 内容:Spine 动画配置
    • TableBundles:加密的 ZIP 文件 ⚠️
    • 架构验证完成度:85%

⚠️ 剩余未解问题

  1. 文本资源精确位置

    • 可能在 TableBundles 中(已加密)
    • 或在 MonoBehaviour 序列化数据中
    • 或在其他未探索的位置
  2. TableBundles 解密

    • 需要找到密钥(逆向工程)
    • 估计需要 2-3 天

🎯 架构师的最终建议

核心论点:不要让文本提取阻塞整个项目

理由

  1. 我们已经验证了 90% 的架构假设

    • Unity 版本适配架构
    • Addressables Catalog 解析
    • 资源替换方案
    • CAS 存储设计
    • 工作流引擎设计
    • ⚠️ 仅文本提取细节未确定
  2. 文本提取是独立的技术问题

    • 不影响领域建模
    • 不影响适配器架构
    • 不影响客户端集成
    • 可以作为独立模块后期攻克
  3. 工程实践最佳实践

    • 先搭建核心框架
    • 再填充具体实现
    • 保持迭代和敏捷
  4. 时间效率

    • 现在花 2-3 天逆向 → 总时间 10-13 周
    • 直接开始,Phase 2 处理 → 总时间 8-10 周
    • 逆向可以在 Phase 2 时并行

📋 更新后的开发计划

Phase 1:核心架构重构(2-3 周)

Week 1:领域建模 + Addressables

  • 定义核心领域对象
  • 设计仓储接口
  • 实现 Addressables Catalog Driver
  • 单元测试

Week 2:适配器架构

  • Unity 2021.3 Adapter
  • Manifest Driver Registry
  • 客户端集成接口设计

Week 3:基础设施重构

  • CAS Repository(事务支持)
  • 重新组织目录结构
  • 迁移现有代码

Phase 2:工作流实现(2-3 周)

Week 4-5:核心工作流

  • 版本检测服务
  • 资源同步工作流
  • Addressables Catalog 解析
  • ⚠️ 文本提取(占位实现)

Week 6:攻克文本提取

  • 🔍 逆向工程找 TableBundles 密钥
  • 🔍 或深度解析 MonoBehaviour
  • 🔍 或探索其他文本位置
  • 实现真正的文本提取
  • 翻译记忆库
  • 术语库

Phase 3:客户端集成(2 周)

Week 7-8:集成层实现

  • 客户端发现
  • 资源备份
  • 资源替换
  • 完整性验证
  • 回滚机制

Phase 4:打磨和优化(2 周)

Week 9-10

  • 性能优化
  • 错误处理
  • 文档完善
  • Alpha 版本发布

🎨 技术设计调整

文本提取模块(支持延迟实现)

// adapters/text_source/mod.rs

pub trait TextSourceAdapter: Send + Sync {
    fn name(&self) -> &str;
    fn can_extract(&self, source: &ResourceEntry) -> bool;
    fn extract(&self, source: &ResourceEntry) -> Result<Vec<ExtractedText>>;
}

// 占位实现(Phase 1-2 前期使用)
pub struct PlaceholderTextSource;

impl TextSourceAdapter for PlaceholderTextSource {
    fn name(&self) -> &str {
        "Placeholder (Not Implemented)"
    }
    
    fn can_extract(&self, _source: &ResourceEntry) -> bool {
        false
    }
    
    fn extract(&self, _source: &ResourceEntry) -> Result<Vec<ExtractedText>> {
        Err(Error::NotImplemented(
            "文本提取尚未实现 - 将在 Phase 2 Week 6 完成"
        ))
    }
}

// 真实实现(Phase 2 Week 6
pub struct TableBundleTextSource {
    decryptor: Box<dyn TableDecryptor>,
}

pub struct MonoBehaviourTextSource {
    type_tree_parser: TypeTreeParser,
}

优点

  • 架构支持可扩展
  • 不阻塞其他模块
  • Phase 2 Week 6 专门攻克

准备开始 Phase 1

第一步:创建 core/domain/ 目录结构

mkdir -p core/domain
mkdir -p core/repositories
mkdir -p core/services

第一个文件:core/domain/game_client.rs

//! 游戏客户端领域对象

use std::path::PathBuf;

/// 游戏区域
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GameRegion {
    Japan,
    Global,
    Korea,
    China,
}

/// 客户端状态
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ClientStatus {
    Pristine,      // 原始状态
    Translated,    // 已翻译
    Corrupted,     // 损坏
    Unknown,       // 未知
}

/// 游戏客户端
#[derive(Debug, Clone)]
pub struct GameClient {
    /// 安装路径
    pub install_path: PathBuf,
    
    /// 游戏区域
    pub region: GameRegion,
    
    /// 当前状态
    pub status: ClientStatus,
}

impl GameClient {
    /// 创建新的游戏客户端实例
    pub fn new(install_path: PathBuf, region: GameRegion) -> Self {
        Self {
            install_path,
            region,
            status: ClientStatus::Unknown,
        }
    }
    
    /// 发现本地安装的客户端
    pub fn discover() -> crate::Result<Vec<GameClient>> {
        // TODO: 实现客户端发现逻辑
        todo!("Phase 3 实现")
    }
    
    /// 验证客户端完整性
    pub fn verify_integrity(&self) -> crate::Result<bool> {
        // TODO: 实现完整性验证
        todo!("Phase 3 实现")
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_new_game_client() {
        let path = PathBuf::from("/test/path");
        let client = GameClient::new(path.clone(), GameRegion::Japan);
        
        assert_eq!(client.install_path, path);
        assert_eq!(client.region, GameRegion::Japan);
        assert_eq!(client.status, ClientStatus::Unknown);
    }
}

🚀 立即开始

我将执行的任务

如果你确认开始 Phase 1,我将立即:

  1. 创建 core/ 目录结构
  2. 实现第一个领域对象:GameClient
  3. 实现第二个领域对象:GameVersion
  4. 实现第三个领域对象:Resource
  5. 编写单元测试
  6. 更新 Cargo.toml
  7. 验证编译通过

预计时间2-3 小时


📝 你的最终确认

请告诉我:

选项 1 确认开始 Phase 1

  • 我将立即开始实现核心领域模型
  • 文本提取留到 Phase 2 Week 6
  • 按照更新后的 8-10 周计划执行

选项 2⏸️ 等一下,我想先...

  • 你可以告诉我任何顾虑
  • 或者你想调整的地方
  • 我们可以再讨论

当前状态⏸️ 等待你的最终确认
推荐选项选项 1(立即开始 Phase 1
理由:已完成 85% 的架构验证,剩余问题不应阻塞核心开发


准备就绪
架构师签字Claude
日期2026-06-27