════════════════════════════════════════════════════════════
 Starsector 远行星号 · 存档/加载崩溃 字节码修复补丁
 StackMapFrame Fix（帧表修复）
════════════════════════════════════════════════════════════

【解决什么问题】

使用远星汉化包 + 高版本 JDK 启动器（如 mikohime 优化包 / JDK 28 /
Fast Rendering 等）时，游戏卡死在加载页面，或主菜单"继续"按钮无效，
日志（starsector.log）里出现：

    java.lang.ClassFormatError: StackMapTable format error:
    bad offset for Uninitialized ...

【原因】

汉化包重编译游戏主程序（starfarer_obf.jar）时，有少数类的字节码
校验帧表（StackMapTable）没有同步更新，属于磁盘上的字节码缺陷。
旧版启动方式（Java 17 + 关闭字节码校验参数）恰好跳过了检查所以
从未暴露；新版 JDK（27+）会强制校验，一进游戏就报错。
这与存档本身无关，存档不需要移动或删除。

【使用方法】

1. 完全关闭游戏；
2. 把本文件夹放到游戏根目录下（和 starsector-core 同级），
   或者直接把游戏根目录拖拽到 bat 文件上；
3. 双击「修复存档崩溃.bat」；
4. 等待扫描完成（几秒到一分钟）；
5. 看到最后一行「RESULT: OK」即可启动游戏。

需要 Java 17 或更高版本来运行修复工具（会自动使用游戏目录里的
jdk / jre，找不到才退回系统 PATH；若系统没有 Java，请安装
Temurin JDK 17 及以上版本）。

【它会改什么】

- 只修补 starsector-core 下被检测出坏帧的 jar（一般是
  starfarer_obf.jar），每个被改动的 jar 旁都会生成备份
  （*.bak_frames）；
- 修复后每个类都会在本机 JVM 里真实加载验证一遍才写回；
- 如果你装了 StarsectorPrepatcher，补丁会自动把它的两个存档
  相关微优化（saveOutputBufferDedup / saveLoadProgressThrottle）
  关闭——它们和修复后的帧表冲突会导致 VerifyError（有备份
  prepatcher.properties.bak_frames）。
- 如果你装了"中文输入修复"（ChineseInputFix）mod 且用 mikohime
  或 FR 启动器，补丁会把 mod 自带的 JNA 库追加到启动 classpath
  （Miko_Simple.txt / fr.vmparams / 配置器模板，有备份 *.bak_cif），
  修复高版本 JDK 上中文输入失效、日志刷
  NoClassDefFoundError: com/sun/jna/Native 的问题。
- 没问题的文件一律不动；重复运行安全（幂等）。

【什么时候需要再跑一次】

汉化包更新或重新覆盖游戏文件后，如果老毛病复发，再运行一次即可。

【如何恢复原状】

把对应的 *.bak_frames 备份文件改回原文件名即可（删除 .bak_frames
后缀）。

【命令行用法（可选）】

  java -jar FrameFix.jar <游戏根目录> [--dry-run]

  --dry-run  只扫描报告，不写任何文件。

════════════════════════════════════════════════════════════
