WHITE ALBUM2 (Android)
WHITE ALBUM2
OrigenWindows
TecnologíaPort Nativo C/C++ (Reimplementación de Motor)
Disponible paraAndroid, Windows
Ver proyecto oficialSobre el proyecto
White Album 2 es una de las dos novelas visuales japonesas para adultos desarrollados por la empresa de novelas visuales Leaf para las computadoras con el sistema operativo de Microsoft Windows, y es la secuela de la anterior novela visual de Leaf, White Album. Aunque es técnicamente una secuela por compartir universo con su precedesora, lo cierto es que se trata de historias totalmente independientes y con personajes diferentes. La primera parte de la novela, llamada White Album 2: Introductory Chapter fue lanzada el 26 de marzo de 2010.
Información oficial del proyecto
WHITE ALBUM2 静态重编译版(开发中)
面向 Windows x64 与 Android ARM64 的共享静态重编译开发项目。两平台编译同一套游戏静态函数和原生子系统,只在窗口、输入、设备、文件访问和呈现处保留平台适配。
版本与分支
本仓库保留两条实现路线,按分支分别维护:
| 版本 | 分支 | 实现路线 |
|---|---|---|
| 共享静态重编译版(WA2 Shared Recomp) | main(默认) | C++ 静态函数重编译与原生子系统替换;Windows x64、Android ARM64 编译同一套游戏逻辑和静态函数源码。 |
| Godot 移植版 | godot | 此前的 Godot 引擎移植工程,保留原有代码、文档、许可证和提交历史。 |
以下说明针对 main 的静态重编译版。Godot 版的安装、构建和许可范围请查看 godot 分支 README;两条实现的许可证各自适用。
安装包也请按实现类型区分:已有的 v0.3b、v0.2.9 等历史 Releases 属于 Godot 版;本分支使用 shared-aot 版本标识,当前为 0.2.46-shared-aot。两条路线的版本号分别维护。
项目尚未完成。 当前是“静态重编译主体 + 原生子系统重建”的混合实现,仍保留原游戏的 32 位地址布局、寄存器及部分浮点状态。完整剧情兼容、手机帧率以及接近原版的整体性能尚未验证。
公开源代码不包含原版 EXE、PAK、生成的游戏函数、初始化 RAM 或私有分析缓存。全游戏构建还需要自行提供有权使用的既有缓存输入;全新公开克隆不能独立构建完整游戏。 MIT 只覆盖本项目新编写的代码和文档,第三方代码与游戏衍生输入各有许可边界,见 NOTICE。
当前版本
0.2.46-shared-aot(开发版本)。Windows 与 Android 使用相同的核心源码。
本次本地 APK 使用新开发签名。 旧签名随本地构建目录丢失且无备份,无法覆盖安装旧签名版本。另附 parallel-test.apk 并存测试包(应用名“WA2 全内容测试”),可保留旧应用和旧存档,两者的私有数据互不共享。普通新签名包不能当作无损覆盖更新。
-
批量补齐另外 34 个有缓存引用证据的遗漏回调,连同辅助函数和异常续执行入口共 57 个入口、3,282 条指令位置,覆盖虚函数、异常清理及浮点格式转换。生成阶段检查所有已编译的直接调用、分支和返回续执行边界;未知动态目标仍明确报错。两平台使用同一份修复。
-
补齐扩展剧情等待指令
0x456650,修复missing static function or host service at guest address 4548176。从已有分析和经过检查的 C++ 模板恢复完整入口,仍调用原有等待函数,保留四个参数、计时、快进和输入取消行为;四个扩展命令入口均纳入生成检查。验证使用内存组件,不代表全章节或手机流程已通过。 -
两平台内置 nxs7 补丁根目录的正篇语音字幕:46 段音频、315 条字幕,默认生效,整个 SpecialContents 字幕集排除。使用原始音频编号与时序,保留原音频函数;不需额外字幕 DLL。见 字幕范围、接入与许可。
-
修正字幕在部分显示区域中偏右、字号放大及文字被裁切的问题:完整字幕画布直接适配最终游戏视口,不再按后台缓冲区大小放大。
-
优化资源压缩流的连续字面量批处理及原生加载适配层,减少快进时新图片、脚本加载中的 CPU 开销。自建数据组件有收益,整段快进和手机速度仍待实测;PAK 保持外置。
-
常见未旋转字形增加精确整数原生路径,省去逐字切换浮点环境和完整几何缓存查询;单纹理块精灵直接生成相同顶点。超出精确输入范围时使用既有路径,保持顶点和绘制状态逐位一致。
-
Android 启动页:先选择资源文件夹、保存 FPS 与帧耗时显示开关,再点击“开始游戏”。
-
Android 启动页的“测试模式(解锁全部内容)”默认关闭、自动记忆。开启后使用独立测试存档,解锁章节、结局、CG 差分、音乐和回想,同时标记影片已观看、文本已读。旧测试存档自动补齐,保留手动存档、设置和未知标志;关闭后重启恢复普通进度。Windows
--test-mode使用相同实现。详见 测试模式与存档隔离。 -
Android 启动页新增自动保存的“长按快进”开关,默认开启;单指按住约半秒(跟随系统长按时限)触发原有快进按键,松手、拖动、第二根手指或失焦时释放。关闭后,静止长按只在松手时产生一次普通点击。
-
游戏窗口内双指轻点可隐藏/显示右上角菜单按钮,包含按钮所在区域;菜单刷新保留本次会话的隐藏状态。双指手势不会先触发普通点击,拖动、三指和双指长按不触发切换。实际手机触摸效果尚未验证。
-
Android 功能菜单、设置控件和文件选择框的文字按原始 Unicode 传递,修复中文/日文被按 UTF-8 字节再次转义造成的乱码;右上角菜单入口使用 48 dp,避免高分屏下被默认按钮内边距挤小。
-
Android 设置更新先按完整状态同步控件登记,再更新文字和选项,修复缺少控件记录时直接报
Unknown control token的路径。未改变的控件继续复用;关闭窗口或替换 Activity 后的旧任务、旧控件回调不再进入新窗口。 -
Android 版本信息窗口支持
SS_ICON图标控件,修复Unsupported source static style 3。共享窗口模型从已有缓存解析原窗口图标并传递给 Android,保留透明通道。检查覆盖两个版本窗口、图标数据及打开/关闭的内存流程,尚未验证手机上的实际 UI。 -
两平台应用图标来自根目录
icon.ico;Windows 嵌入原始 ICO,Android 无损转换同一图像。 -
Android 直接引用透明 PNG,移除会先填黑底的自适应图标包装;校验普通、圆形图标均指向原图,并检查实际 Alpha。系统桌面仍可能为普通图标添加底板或形状,手机显示效果尚未验证。
-
资源默认在内部存储
/Wa2Res,也支持系统选择器授权的本地嵌套目录或 SD 卡Wa2Res;保留原版 IC 子目录,直接读取 PAK。 -
图片解压结果缓存最多 8 MiB / 32 项;返回给游戏的可修改缓冲与缓存分开。
-
字体范围表完整核对后生成直接索引;不变字形可复用逐字节核对过的顶点,资源、纹理、位置和颜色仍按当前状态验证。两项新增缓存合计约 0.5 MiB,用到时才分配,不保留像素或资源副本。
-
连续换字时,几何缓存首次出现只登记指纹,不再复制超过 6 KiB 的临时计算帧;再次遇到才保存当前完整输入。缓存匹配、浮点状态及着色器常量比较使用严格有界的整数批量检查,保留原有精确结果和状态。
-
大资源缓冲区增加独立的有界复用,最多 2 个空闲块、合计 4 MiB;保持旧运行时结构 ABI,保留清零、权限检查及堆销毁释放行为。
-
天气粒子的离屏绘制和模式 2 滤波可进入已接纳的共用原生绘制路径;保留粒子数、顶点、顺序和采样状态。
-
整数纹理坐标的文字和图片只计算实际覆盖的图块及其边界,避免逐字扫描整张字体图集;小数坐标保留完整计算,顶点位模式与绘制顺序经内存对照。
-
图片颜色校正的六段 RGB 查表循环改为共用原生批处理,每张图片只合成一次双重查表;保留透明通道、原始 CPU/浮点状态及静态函数的故障前缀。此项减少切图时的 CPU 开销,整段快进和手机帧率仍需实测。
-
大块连续内存复制和填充的原生范围从 1 MiB 扩至 64 MiB,倒序操作在完整范围验证后也可批量处理;清零只在循环前尝试一次,失败后保留原有精确故障处理。
-
常见不缩放、无色键的 24/32 位图片从原缓冲直接转换到纹理的 CPU 存储,省掉整张暂存副本;分页内存只暂存一行。24 位 BGR 转换和普通 32 位颜色转换由同一 O3 模块完成,其他效果继续走已有路径。
-
通用资源和脚本的压缩数据在连续内存中直接解压到最终分配,省去完整的解压暂存及其复制;先校验数据,再保留原来的文件游标更新、分配和指针发布顺序。分页或分配回调改变映射时保留检查路径,末尾零字节及失败处理不变。
-
资源前置校验可一次核对 8 个匹配标记的长度;解压可将 8 个完整、连续的重复匹配合为一次 144 字节处理,支持重复的 1/2/4/8/16 字节模式。先核对全部标记和范围,其他数据保持原处理。生成内存样本验证完整输出、字典、标志和错误前缀;不增加解压缓存或 APK 内的资源,整段快进仍待实机测量。
-
常见的一至四个事件/锁的等待检查使用栈上对象,重复句柄检查不再逐项分配树节点;多对象调用也不再分配句柄数组。保留原有等待顺序、事件消费、互斥锁归属、调度和非零等待时限。
-
24 位纹理上传前的 BGR→RGBA 转换也复用同一原生批量模块;GPU 提交顺序和其他像素格式保持原路径。
-
视频和音频使用独立的流式读取游标,共用原始外部文件;视频尾段长于音频或交错间隔较大时,不再把另一轨道积压到 8 MiB 缓存上限。仍保留四帧画面和 16,384 帧 PCM 的输出队列边界。
现有静态函数集接纳 1,750 个入口,合并为 1,424 个函数体,覆盖 122,950 个指令位置;还有 181 个延后入口和 13 个不支持的超越函数位置。未知目标和不支持行为明确报错,不添加运行时译码或 JIT。
使用与开发
在具备所需私有缓存与工具链的本地工作区,先运行 python scripts/verify_shared_aot.py,通过后运行 python scripts/package_shared_hosts.py。所有构建和检查必须隐藏、低优先级、单任务执行。当前约束禁止启动原版或游戏、模拟器、UI 自动操作与屏幕监控。
组件验证覆盖资源输出与字典、ABI、寄存器与浮点状态、绘制数据、内存边界、两平台同源编译、JNI、APK 签名和对齐。编译或内存组件提速不代表完整游戏兼容或手机帧率提升相同倍数。 每次本地交付由 out/build-info.json 与对应验证记录绑定具体源码和产物。
APK 和 EXE 通过本地构建生成,不作为公共源码的一部分。静态链接 FFmpeg 的分发还必须提供匹配的 WA2-shared-relink.zip、对应源码与配置,不能只分发一个 APK。
License / English summary
An incomplete shared static-recompilation port with native subsystem replacements. Windows x64 and Android ARM64 compile one common game source set; platform-specific game implementations, runtime instruction decoding and JIT are forbidden. Original game files, derived game sources and private cached build inputs are not distributed here. New project code is MIT; upstream components keep their licenses. This project is unofficial and does not grant rights to the original game.